Merge remote-tracking branch 'upstream/master' into hardened-stdenv

This commit is contained in:
Robin Gloster 2016-03-15 01:44:24 +00:00
commit 3f45f0948d
550 changed files with 9204 additions and 3225 deletions

View File

@ -12,9 +12,15 @@ rec {
inherit (builtins) attrNames listToAttrs hasAttr isAttrs getAttr;
/* Return an attribute from nested attribute sets. For instance
["x" "y"] applied to some set e returns e.x.y, if it exists. The
default value is returned otherwise. */
/* Return an attribute from nested attribute sets.
Example:
x = { a = { b = 3; }; }
attrByPath ["a" "b"] 6 x
=> 3
attrByPath ["z" "z"] 6 x
=> 6
*/
attrByPath = attrPath: default: e:
let attr = head attrPath;
in
@ -24,8 +30,15 @@ rec {
else default;
/* Return if an attribute from nested attribute set exists.
For instance ["x" "y"] applied to some set e returns true, if e.x.y exists. False
is returned otherwise. */
Example:
x = { a = { b = 3; }; }
hasAttrByPath ["a" "b"] x
=> true
hasAttrByPath ["z" "z"] x
=> false
*/
hasAttrByPath = attrPath: e:
let attr = head attrPath;
in
@ -35,14 +48,28 @@ rec {
else false;
/* Return nested attribute set in which an attribute is set. For instance
["x" "y"] applied with some value v returns `x.y = v;' */
/* Return nested attribute set in which an attribute is set.
Example:
setAttrByPath ["a" "b"] 3
=> { a = { b = 3; }; }
*/
setAttrByPath = attrPath: value:
if attrPath == [] then value
else listToAttrs
[ { name = head attrPath; value = setAttrByPath (tail attrPath) value; } ];
/* Like `getAttrPath' without a default value. If it doesn't find the
path it will throw.
Example:
x = { a = { b = 3; }; }
getAttrFromPath ["a" "b"] x
=> 3
getAttrFromPath ["z" "z"] x
=> error: cannot find attribute `z.z'
*/
getAttrFromPath = attrPath: set:
let errorMsg = "cannot find attribute `" + concatStringsSep "." attrPath + "'";
in attrByPath attrPath (abort errorMsg) set;
@ -109,9 +136,11 @@ rec {
) (attrNames set)
);
/* foldAttrs: apply fold functions to values grouped by key. Eg accumulate values as list:
foldAttrs (n: a: [n] ++ a) [] [{ a = 2; } { a = 3; }]
=> { a = [ 2 3 ]; }
/* Apply fold functions to values grouped by key.
Example:
foldAttrs (n: a: [n] ++ a) [] [{ a = 2; } { a = 3; }]
=> { a = [ 2 3 ]; }
*/
foldAttrs = op: nul: list_of_attrs:
fold (n: a:
@ -147,7 +176,12 @@ rec {
/* Utility function that creates a {name, value} pair as expected by
builtins.listToAttrs. */
builtins.listToAttrs.
Example:
nameValuePair "some" 6
=> { name = "some"; value = 6; }
*/
nameValuePair = name: value: { inherit name value; };
@ -248,11 +282,19 @@ rec {
listToAttrs (map (n: nameValuePair n (f n)) names);
/* Check whether the argument is a derivation. */
/* Check whether the argument is a derivation. Any set with
{ type = "derivation"; } counts as a derivation.
Example:
nixpkgs = import <nixpkgs> {}
isDerivation nixpkgs.ruby
=> true
isDerivation "foobar"
=> false
*/
isDerivation = x: isAttrs x && x ? type && x.type == "derivation";
/* Convert a store path to a fake derivation. */
/* Converts a store path to a fake derivation. */
toDerivation = path:
let path' = builtins.storePath path; in
{ type = "derivation";
@ -262,32 +304,49 @@ rec {
};
/* If the Boolean `cond' is true, return the attribute set `as',
otherwise an empty attribute set. */
/* If `cond' is true, return the attribute set `as',
otherwise an empty attribute set.
Example:
optionalAttrs (true) { my = "set"; }
=> { my = "set"; }
optionalAttrs (false) { my = "set"; }
=> { }
*/
optionalAttrs = cond: as: if cond then as else {};
/* Merge sets of attributes and use the function f to merge attributes
values. */
values.
Example:
zipAttrsWithNames ["a"] (name: vs: vs) [{a = "x";} {a = "y"; b = "z";}]
=> { a = ["x" "y"]; }
*/
zipAttrsWithNames = names: f: sets:
listToAttrs (map (name: {
inherit name;
value = f name (catAttrs name sets);
}) names);
# implentation note: Common names appear multiple times in the list of
# names, hopefully this does not affect the system because the maximal
# laziness avoid computing twice the same expression and listToAttrs does
# not care about duplicated attribute names.
/* Implentation note: Common names appear multiple times in the list of
names, hopefully this does not affect the system because the maximal
laziness avoid computing twice the same expression and listToAttrs does
not care about duplicated attribute names.
Example:
zipAttrsWith (name: values: values) [{a = "x";} {a = "y"; b = "z";}]
=> { a = ["x" "y"]; b = ["z"] }
*/
zipAttrsWith = f: sets: zipAttrsWithNames (concatMap attrNames sets) f sets;
/* Like `zipAttrsWith' with `(name: values: value)' as the function.
Example:
zipAttrs [{a = "x";} {a = "y"; b = "z";}]
=> { a = ["x" "y"]; b = ["z"] }
*/
zipAttrs = zipAttrsWith (name: values: values);
/* backward compatibility */
zipWithNames = zipAttrsWithNames;
zip = builtins.trace "lib.zip is deprecated, use lib.zipAttrsWith instead" zipAttrsWith;
/* Does the same as the update operator '//' except that attributes are
merged until the given pedicate is verified. The predicate should
accept 3 arguments which are the path to reach the attribute, a part of
@ -351,6 +410,15 @@ rec {
!(isAttrs lhs && isAttrs rhs)
) lhs rhs;
/* Returns true if the pattern is contained in the set. False otherwise.
FIXME(zimbatm): this example doesn't work !!!
Example:
sys = mkSystem { }
matchAttrs { cpu = { bits = 64; }; } sys
=> true
*/
matchAttrs = pattern: attrs:
fold or false (attrValues (zipAttrsWithNames (attrNames pattern) (n: values:
let pat = head values; val = head (tail values); in
@ -359,10 +427,23 @@ rec {
else pat == val
) [pattern attrs]));
# override only the attributes that are already present in the old set
# useful for deep-overriding
/* Override only the attributes that are already present in the old set
useful for deep-overriding.
Example:
x = { a = { b = 4; c = 3; }; }
overrideExisting x { a = { b = 6; d = 2; }; }
=> { a = { b = 6; d = 2; }; }
*/
overrideExisting = old: new:
old // listToAttrs (map (attr: nameValuePair attr (attrByPath [attr] old.${attr} new)) (attrNames old));
deepSeqAttrs = x: y: deepSeqList (attrValues x) y;
/*** deprecated stuff ***/
deepSeqAttrs = throw "removed 2016-02-29 because unused and broken";
zipWithNames = zipAttrsWithNames;
zip = builtins.trace
"lib.zip is deprecated, use lib.zipAttrsWith instead" zipAttrsWith;
}

View File

@ -175,6 +175,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "Eclipse Public License 1.0";
};
epson = {
fullName = "Seiko Epson Corporation Software License Agreement for Linux";
url = https://download.ebz.epson.net/dsc/du/02/eula/global/LINUX_EN.html;
free = false;
};
fdl12 = spdx {
spdxId = "GFDL-1.2";
fullName = "GNU Free Documentation License v1.2";

View File

@ -6,17 +6,26 @@ rec {
inherit (builtins) head tail length isList elemAt concatLists filter elem genList;
/* Create a list consisting of a single element. `singleton x' is
sometimes more convenient with respect to indentation than `[x]'
when x spans multiple lines.
# Create a list consisting of a single element. `singleton x' is
# sometimes more convenient with respect to indentation than `[x]'
# when x spans multiple lines.
Example:
singleton "foo"
=> [ "foo" ]
*/
singleton = x: [x];
/* "Fold" a binary function `op' between successive elements of
`list' with `nul' as the starting value, i.e., `fold op nul [x_1
x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))'. (This is
Haskell's foldr).
# "Fold" a binary function `op' between successive elements of
# `list' with `nul' as the starting value, i.e., `fold op nul [x_1
# x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))'. (This is
# Haskell's foldr).
Example:
concat = fold (a: b: a + b) "z"
concat [ "a" "b" "c" ]
=> "abcnul"
*/
fold = op: nul: list:
let
len = length list;
@ -26,8 +35,14 @@ rec {
else op (elemAt list n) (fold' (n + 1));
in fold' 0;
# Left fold: `fold op nul [x_1 x_2 ... x_n] == op (... (op (op nul
# x_1) x_2) ... x_n)'.
/* Left fold: `fold op nul [x_1 x_2 ... x_n] == op (... (op (op nul
x_1) x_2) ... x_n)'.
Example:
lconcat = foldl (a: b: a + b) "z"
lconcat [ "a" "b" "c" ]
=> "zabc"
*/
foldl = op: nul: list:
let
len = length list;
@ -37,13 +52,22 @@ rec {
else op (foldl' (n - 1)) (elemAt list n);
in foldl' (length list - 1);
/* Strict version of foldl.
# Strict version of foldl.
The difference is that evaluation is forced upon access. Usually used
with small whole results (in contract with lazily-generated list or large
lists where only a part is consumed.)
*/
foldl' = builtins.foldl' or foldl;
/* Map with index
# Map with index: `imap (i: v: "${v}-${toString i}") ["a" "b"] ==
# ["a-1" "b-2"]'. FIXME: why does this start to count at 1?
FIXME(zimbatm): why does this start to count at 1?
Example:
imap (i: v: "${v}-${toString i}") ["a" "b"]
=> [ "a-1" "b-2" ]
*/
imap =
if builtins ? genList then
f: list: genList (n: f (n + 1) (elemAt list n)) (length list)
@ -57,73 +81,141 @@ rec {
else [ (f (n + 1) (elemAt list n)) ] ++ imap' (n + 1);
in imap' 0;
/* Map and concatenate the result.
# Map and concatenate the result.
Example:
concatMap (x: [x] ++ ["z"]) ["a" "b"]
=> [ "a" "z" "b" "z" ]
*/
concatMap = f: list: concatLists (map f list);
/* Flatten the argument into a single list; that is, nested lists are
spliced into the top-level lists.
# Flatten the argument into a single list; that is, nested lists are
# spliced into the top-level lists. E.g., `flatten [1 [2 [3] 4] 5]
# == [1 2 3 4 5]' and `flatten 1 == [1]'.
Example:
flatten [1 [2 [3] 4] 5]
=> [1 2 3 4 5]
flatten 1
=> [1]
*/
flatten = x:
if isList x
then foldl' (x: y: x ++ (flatten y)) [] x
else [x];
/* Remove elements equal to 'e' from a list. Useful for buildInputs.
# Remove elements equal to 'e' from a list. Useful for buildInputs.
Example:
remove 3 [ 1 3 4 3 ]
=> [ 1 4 ]
*/
remove = e: filter (x: x != e);
/* Find the sole element in the list matching the specified
predicate, returns `default' if no such element exists, or
`multiple' if there are multiple matching elements.
# Find the sole element in the list matching the specified
# predicate, returns `default' if no such element exists, or
# `multiple' if there are multiple matching elements.
Example:
findSingle (x: x == 3) "none" "multiple" [ 1 3 3 ]
=> "multiple"
findSingle (x: x == 3) "none" "multiple" [ 1 3 ]
=> 3
findSingle (x: x == 3) "none" "multiple" [ 1 9 ]
=> "none"
*/
findSingle = pred: default: multiple: list:
let found = filter pred list; len = length found;
in if len == 0 then default
else if len != 1 then multiple
else head found;
/* Find the first element in the list matching the specified
predicate or returns `default' if no such element exists.
# Find the first element in the list matching the specified
# predicate or returns `default' if no such element exists.
Example:
findFirst (x: x > 3) 7 [ 1 6 4 ]
=> 6
findFirst (x: x > 9) 7 [ 1 6 4 ]
=> 7
*/
findFirst = pred: default: list:
let found = filter pred list;
in if found == [] then default else head found;
/* Return true iff function `pred' returns true for at least element
of `list'.
# Return true iff function `pred' returns true for at least element
# of `list'.
Example:
any isString [ 1 "a" { } ]
=> true
any isString [ 1 { } ]
=> false
*/
any = builtins.any or (pred: fold (x: y: if pred x then true else y) false);
/* Return true iff function `pred' returns true for all elements of
`list'.
# Return true iff function `pred' returns true for all elements of
# `list'.
Example:
all (x: x < 3) [ 1 2 ]
=> true
all (x: x < 3) [ 1 2 3 ]
=> false
*/
all = builtins.all or (pred: fold (x: y: if pred x then y else false) true);
/* Count how many times function `pred' returns true for the elements
of `list'.
# Count how many times function `pred' returns true for the elements
# of `list'.
Example:
count (x: x == 3) [ 3 2 3 4 6 ]
=> 2
*/
count = pred: foldl' (c: x: if pred x then c + 1 else c) 0;
/* Return a singleton list or an empty list, depending on a boolean
value. Useful when building lists with optional elements
(e.g. `++ optional (system == "i686-linux") flashplayer').
# Return a singleton list or an empty list, depending on a boolean
# value. Useful when building lists with optional elements
# (e.g. `++ optional (system == "i686-linux") flashplayer').
Example:
optional true "foo"
=> [ "foo" ]
optional false "foo"
=> [ ]
*/
optional = cond: elem: if cond then [elem] else [];
/* Return a list or an empty list, dependening on a boolean value.
# Return a list or an empty list, dependening on a boolean value.
Example:
optionals true [ 2 3 ]
=> [ 2 3 ]
optionals false [ 2 3 ]
=> [ ]
*/
optionals = cond: elems: if cond then elems else [];
# If argument is a list, return it; else, wrap it in a singleton
# list. If you're using this, you should almost certainly
# reconsider if there isn't a more "well-typed" approach.
/* If argument is a list, return it; else, wrap it in a singleton
list. If you're using this, you should almost certainly
reconsider if there isn't a more "well-typed" approach.
Example:
toList [ 1 2 ]
=> [ 1 2 ]
toList "hi"
=> [ "hi "]
*/
toList = x: if isList x then x else [x];
/* Return a list of integers from `first' up to and including `last'.
# Return a list of integers from `first' up to and including `last'.
Example:
range 2 4
=> [ 2 3 4 ]
range 3 2
=> [ ]
*/
range =
if builtins ? genList then
first: last:
@ -136,9 +228,13 @@ rec {
then []
else [first] ++ range (first + 1) last;
/* Splits the elements of a list in two lists, `right' and
`wrong', depending on the evaluation of a predicate.
# Partition the elements of a list in two lists, `right' and
# `wrong', depending on the evaluation of a predicate.
Example:
partition (x: x > 2) [ 5 1 2 3 4 ]
=> { right = [ 5 3 4 ]; wrong = [ 1 2 ]; }
*/
partition = pred:
fold (h: t:
if pred h
@ -146,7 +242,14 @@ rec {
else { right = t.right; wrong = [h] ++ t.wrong; }
) { right = []; wrong = []; };
/* Merges two lists of the same size together. If the sizes aren't the same
the merging stops at the shortest. How both lists are merged is defined
by the first argument.
Example:
zipListsWith (a: b: a + b) ["h" "l"] ["e" "o"]
=> ["he" "lo"]
*/
zipListsWith =
if builtins ? genList then
f: fst: snd: genList (n: f (elemAt fst n) (elemAt snd n)) (min (length fst) (length snd))
@ -161,21 +264,37 @@ rec {
else [];
in zipListsWith' 0;
/* Merges two lists of the same size together. If the sizes aren't the same
the merging stops at the shortest.
Example:
zipLists [ 1 2 ] [ "a" "b" ]
=> [ { fst = 1; snd = "a"; } { fst = 2; snd = "b"; } ]
*/
zipLists = zipListsWith (fst: snd: { inherit fst snd; });
/* Reverse the order of the elements of a list.
# Reverse the order of the elements of a list.
Example:
reverseList [ "b" "o" "j" ]
=> [ "j" "o" "b" ]
*/
reverseList =
if builtins ? genList then
xs: let l = length xs; in genList (n: elemAt xs (l - n - 1)) l
else
fold (e: acc: acc ++ [ e ]) [];
/* Sort a list based on a comparator function which compares two
elements and returns true if the first argument is strictly below
the second argument. The returned list is sorted in an increasing
order. The implementation does a quick-sort.
# Sort a list based on a comparator function which compares two
# elements and returns true if the first argument is strictly below
# the second argument. The returned list is sorted in an increasing
# order. The implementation does a quick-sort.
Example:
sort (a: b: a < b) [ 5 3 7 ]
=> [ 3 5 7 ]
*/
sort = builtins.sort or (
strictLess: list:
let
@ -193,8 +312,14 @@ rec {
if len < 2 then list
else (sort strictLess pivot.left) ++ [ first ] ++ (sort strictLess pivot.right));
/* Return the first (at most) N elements of a list.
# Return the first (at most) N elements of a list.
Example:
take 2 [ "a" "b" "c" "d" ]
=> [ "a" "b" ]
take 2 [ ]
=> [ ]
*/
take =
if builtins ? genList then
count: sublist 0 count
@ -209,8 +334,14 @@ rec {
[ (elemAt list n) ] ++ take' (n + 1);
in take' 0;
/* Remove the first (at most) N elements of a list.
# Remove the first (at most) N elements of a list.
Example:
drop 2 [ "a" "b" "c" "d" ]
=> [ "c" "d" ]
drop 2 [ ]
=> [ ]
*/
drop =
if builtins ? genList then
count: list: sublist count (length list) list
@ -225,9 +356,15 @@ rec {
drop' (n - 1) ++ [ (elemAt list n) ];
in drop' (len - 1);
/* Return a list consisting of at most count elements of list,
starting at index start.
# Return a list consisting of at most count elements of list,
# starting at index start.
Example:
sublist 1 3 [ "a" "b" "c" "d" "e" ]
=> [ "b" "c" "d" ]
sublist 1 3 [ ]
=> [ ]
*/
sublist = start: count: list:
let len = length list; in
genList
@ -236,23 +373,36 @@ rec {
else if start + count > len then len - start
else count);
/* Return the last element of a list.
# Return the last element of a list.
Example:
last [ 1 2 3 ]
=> 3
*/
last = list:
assert list != []; elemAt list (length list - 1);
/* Return all elements but the last
# Return all elements but the last
Example:
init [ 1 2 3 ]
=> [ 1 2 ]
*/
init = list: assert list != []; take (length list - 1) list;
deepSeqList = xs: y: if any (x: deepSeq x false) xs then y else y;
/* FIXME(zimbatm) Not used anywhere
*/
crossLists = f: foldl (fs: args: concatMap (f: map f args) fs) [f];
# Remove duplicate elements from the list. O(n^2) complexity.
/* Remove duplicate elements from the list. O(n^2) complexity.
Example:
unique [ 3 2 3 4 ]
=> [ 3 2 4 ]
*/
unique = list:
if list == [] then
[]
@ -262,12 +412,24 @@ rec {
xs = unique (drop 1 list);
in [x] ++ remove x xs;
/* Intersects list 'e' and another list. O(nm) complexity.
# Intersects list 'e' and another list. O(nm) complexity.
Example:
intersectLists [ 1 2 3 ] [ 6 3 2 ]
=> [ 3 2 ]
*/
intersectLists = e: filter (x: elem x e);
/* Subtracts list 'e' from another list. O(nm) complexity.
# Subtracts list 'e' from another list. O(nm) complexity.
Example:
subtractLists [ 3 2 ] [ 1 2 3 4 5 3 ]
=> [ 1 4 5 ]
*/
subtractLists = e: filter (x: !(elem x e));
/*** deprecated stuff ***/
deepSeqList = throw "removed 2016-02-29 because unused and broken";
}

View File

@ -123,6 +123,7 @@
fpletz = "Franz Pletz <fpletz@fnordicwalking.de>";
fps = "Florian Paul Schmidt <mista.tapas@gmx.net>";
fridh = "Frederik Rietdijk <fridh@fridh.nl>";
frlan = "Frank Lanitz <frank@frank.uvena.de>";
fro_ozen = "fro_ozen <fro_ozen@gmx.de>";
ftrvxmtrx = "Siarhei Zirukin <ftrvxmtrx@gmail.com>";
funfunctor = "Edward O'Callaghan <eocallaghan@alterapraxis.com>";
@ -152,7 +153,6 @@
iElectric = "Domen Kozar <domen@dev.si>";
igsha = "Igor Sharonov <igor.sharonov@gmail.com>";
ikervagyok = "Balázs Lengyel <ikervagyok@gmail.com>";
iyzsong = "Song Wenwu <iyzsong@gmail.com>";
j-keck = "Jürgen Keck <jhyphenkeck@gmail.com>";
jagajaga = "Arseniy Seroka <ars.seroka@gmail.com>";
javaguirre = "Javier Aguirre <contacto@javaguirre.net>";
@ -208,10 +208,12 @@
malyn = "Michael Alyn Miller <malyn@strangeGizmo.com>";
manveru = "Michael Fellinger <m.fellinger@gmail.com>";
marcweber = "Marc Weber <marco-oweber@gmx.de>";
markus1189 = "Markus Hauck <markus1189@gmail.com>";
markWot = "Markus Wotringer <markus@wotringer.de>";
matejc = "Matej Cotman <cotman.matej@gmail.com>";
mathnerd314 = "Mathnerd314 <mathnerd314.gph+hs@gmail.com>";
matthiasbeyer = "Matthias Beyer <mail@beyermatthias.de>";
mbauer = "Matthew Bauer <mjbauer95@gmail.com>";
maurer = "Matthew Maurer <matthew.r.maurer+nix@gmail.com>";
mbakke = "Marius Bakke <ymse@tuta.io>";
mbe = "Brandon Edens <brandonedens@gmail.com>";
@ -299,7 +301,9 @@
sander = "Sander van der Burg <s.vanderburg@tudelft.nl>";
schmitthenner = "Fabian Schmitthenner <development@schmitthenner.eu>";
schristo = "Scott Christopher <schristopher@konputa.com>";
scolobb = "Sergiu Ivanov <sivanov@colimite.fr>";
sepi = "Raffael Mancini <raffael@mancini.lu>";
sheenobu = "Sheena Artrip <sheena.artrip@gmail.com>";
sheganinans = "Aistis Raulinaitis <sheganinans@gmail.com>";
shell = "Shell Turner <cam.turn@gmail.com>";
shlevy = "Shea Levy <shea@shealevy.com>";

View File

@ -15,7 +15,7 @@ Usage:
Attention:
let
pkgs = (import /etc/nixos/nixpkgs/pkgs/top-level/all-packages.nix) {};
pkgs = (import <nixpkgs>) {};
in let
inherit (pkgs.stringsWithDeps) fullDepEntry packEntry noDepEntry textClosureMap;
inherit (pkgs.lib) id;

View File

@ -10,65 +10,147 @@ rec {
inherit (builtins) stringLength substring head tail isString replaceStrings;
/* Concatenate a list of strings.
# Concatenate a list of strings.
Example:
concatStrings ["foo" "bar"]
=> "foobar"
*/
concatStrings =
if builtins ? concatStringsSep then
builtins.concatStringsSep ""
else
lib.foldl' (x: y: x + y) "";
/* Map a function over a list and concatenate the resulting strings.
# Map a function over a list and concatenate the resulting strings.
Example:
concatMapStrings (x: "a" + x) ["foo" "bar"]
=> "afooabar"
*/
concatMapStrings = f: list: concatStrings (map f list);
/* Like `concatMapStrings' except that the f functions also gets the
position as a parameter.
Example:
concatImapStrings (pos: x: "${toString pos}-${x}") ["foo" "bar"]
=> "1-foo2-bar"
*/
concatImapStrings = f: list: concatStrings (lib.imap f list);
/* Place an element between each element of a list
# Place an element between each element of a list, e.g.,
# `intersperse "," ["a" "b" "c"]' returns ["a" "," "b" "," "c"].
Example:
intersperse "/" ["usr" "local" "bin"]
=> ["usr" "/" "local" "/" "bin"].
*/
intersperse = separator: list:
if list == [] || length list == 1
then list
else tail (lib.concatMap (x: [separator x]) list);
/* Concatenate a list of strings with a separator between each element
# Concatenate a list of strings with a separator between each element, e.g.
# concatStringsSep " " ["foo" "bar" "xyzzy"] == "foo bar xyzzy"
Example:
concatStringsSep "/" ["usr" "local" "bin"]
=> "usr/local/bin"
*/
concatStringsSep = builtins.concatStringsSep or (separator: list:
concatStrings (intersperse separator list));
/* First maps over the list and then concatenates it.
Example:
concatMapStringsSep "-" (x: toUpper x) ["foo" "bar" "baz"]
=> "FOO-BAR-BAZ"
*/
concatMapStringsSep = sep: f: list: concatStringsSep sep (map f list);
/* First imaps over the list and then concatenates it.
Example:
concatImapStringsSep "-" (pos: x: toString (x / pos)) [ 6 6 6 ]
=> "6-3-2"
*/
concatImapStringsSep = sep: f: list: concatStringsSep sep (lib.imap f list);
/* Construct a Unix-style search path consisting of each `subDir"
directory of the given list of packages.
# Construct a Unix-style search path consisting of each `subDir"
# directory of the given list of packages. For example,
# `makeSearchPath "bin" ["x" "y" "z"]' returns "x/bin:y/bin:z/bin".
Example:
makeSearchPath "bin" ["/root" "/usr" "/usr/local"]
=> "/root/bin:/usr/bin:/usr/local/bin"
makeSearchPath "bin" ["/"]
=> "//bin"
*/
makeSearchPath = subDir: packages:
concatStringsSep ":" (map (path: path + "/" + subDir) packages);
/* Construct a library search path (such as RPATH) containing the
libraries for a set of packages
# Construct a library search path (such as RPATH) containing the
# libraries for a set of packages, e.g. "${pkg1}/lib:${pkg2}/lib:...".
Example:
makeLibraryPath [ "/usr" "/usr/local" ]
=> "/usr/lib:/usr/local/lib"
pkgs = import <nixpkgs> { }
makeLibraryPath [ pkgs.openssl pkgs.zlib ]
=> "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r/lib:/nix/store/wwh7mhwh269sfjkm6k5665b5kgp7jrk2-zlib-1.2.8/lib"
*/
makeLibraryPath = makeSearchPath "lib";
# Construct a binary search path (such as $PATH) containing the
# binaries for a set of packages, e.g. "${pkg1}/bin:${pkg2}/bin:...".
/* Construct a binary search path (such as $PATH) containing the
binaries for a set of packages.
Example:
makeBinPath ["/root" "/usr" "/usr/local"]
=> "/root/bin:/usr/bin:/usr/local/bin"
*/
makeBinPath = makeSearchPath "bin";
# Idem for Perl search paths.
/* Construct a perl search path (such as $PERL5LIB)
FIXME(zimbatm): this should be moved in perl-specific code
Example:
pkgs = import <nixpkgs> { }
makePerlPath [ pkgs.perlPackages.NetSMTP ]
=> "/nix/store/n0m1fk9c960d8wlrs62sncnadygqqc6y-perl-Net-SMTP-1.25/lib/perl5/site_perl"
*/
makePerlPath = makeSearchPath "lib/perl5/site_perl";
/* Dependening on the boolean `cond', return either the given string
or the empty string. Useful to contatenate against a bigger string.
# Dependening on the boolean `cond', return either the given string
# or the empty string.
Example:
optionalString true "some-string"
=> "some-string"
optionalString false "some-string"
=> ""
*/
optionalString = cond: string: if cond then string else "";
/* Determine whether a string has given prefix.
# Determine whether a string has given prefix/suffix.
Example:
hasPrefix "foo" "foobar"
=> true
hasPrefix "foo" "barfoo"
=> false
*/
hasPrefix = pref: str:
substring 0 (stringLength pref) str == pref;
/* Determine whether a string has given suffix.
Example:
hasSuffix "foo" "foobar"
=> false
hasSuffix "foo" "barfoo"
=> true
*/
hasSuffix = suff: str:
let
lenStr = stringLength str;
@ -76,36 +158,55 @@ rec {
in lenStr >= lenSuff &&
substring (lenStr - lenSuff) lenStr str == suff;
/* Convert a string to a list of characters (i.e. singleton strings).
This allows you to, e.g., map a function over each character. However,
note that this will likely be horribly inefficient; Nix is not a
general purpose programming language. Complex string manipulations
should, if appropriate, be done in a derivation.
Also note that Nix treats strings as a list of bytes and thus doesn't
handle unicode.
# Convert a string to a list of characters (i.e. singleton strings).
# For instance, "abc" becomes ["a" "b" "c"]. This allows you to,
# e.g., map a function over each character. However, note that this
# will likely be horribly inefficient; Nix is not a general purpose
# programming language. Complex string manipulations should, if
# appropriate, be done in a derivation.
Example:
stringToCharacters ""
=> [ ]
stringToCharacters "abc"
=> [ "a" "b" "c" ]
stringToCharacters "💩"
=> [ "<EFBFBD>" "<EFBFBD>" "<EFBFBD>" "<EFBFBD>" ]
*/
stringToCharacters = s:
map (p: substring p 1 s) (lib.range 0 (stringLength s - 1));
/* Manipulate a string character by character and replace them by
strings before concatenating the results.
# Manipulate a string charactter by character and replace them by
# strings before concatenating the results.
Example:
stringAsChars (x: if x == "a" then "i" else x) "nax"
=> "nix"
*/
stringAsChars = f: s:
concatStrings (
map f (stringToCharacters s)
);
/* Escape occurrence of the elements of list in string by
prefixing it with a backslash.
# Escape occurrence of the elements of list in string by
# prefixing it with a backslash. For example, escape ["(" ")"]
# "(foo)" returns the string \(foo\).
Example:
escape ["(" ")"] "(foo)"
=> "\\(foo\\)"
*/
escape = list: replaceChars list (map (c: "\\${c}") list);
/* Escape all characters that have special meaning in the Bourne shell.
# Escape all characters that have special meaning in the Bourne shell.
Example:
escapeShellArg "so([<>])me"
=> "so\\(\\[\\<\\>\\]\\)me"
*/
escapeShellArg = lib.escape (stringToCharacters "\\ ';$`()|<>\t*[]");
# Obsolete - use replaceStrings instead.
/* Obsolete - use replaceStrings instead. */
replaceChars = builtins.replaceStrings or (
del: new: s:
let
@ -119,21 +220,52 @@ rec {
in
stringAsChars subst s);
# Case conversion utilities.
lowerChars = stringToCharacters "abcdefghijklmnopqrstuvwxyz";
upperChars = stringToCharacters "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/* Converts an ASCII string to lower-case.
Example:
toLower "HOME"
=> "home"
*/
toLower = replaceChars upperChars lowerChars;
/* Converts an ASCII string to upper-case.
Example:
toLower "home"
=> "HOME"
*/
toUpper = replaceChars lowerChars upperChars;
/* Appends string context from another string. This is an implementation
detail of Nix.
# Appends string context from another string.
Strings in Nix carry an invisible `context' which is a list of strings
representing store paths. If the string is later used in a derivation
attribute, the derivation will properly populate the inputDrvs and
inputSrcs.
Example:
pkgs = import <nixpkgs> { };
addContextFrom pkgs.coreutils "bar"
=> "bar"
*/
addContextFrom = a: b: substring 0 0 a + b;
/* Cut a string with a separator and produces a list of strings which
were separated by this separator.
# Cut a string with a separator and produces a list of strings which
# were separated by this separator; e.g., `splitString "."
# "foo.bar.baz"' returns ["foo" "bar" "baz"].
NOTE: this function is not performant and should be avoided
Example:
splitString "." "foo.bar.baz"
=> [ "foo" "bar" "baz" ]
splitString "/" "/usr/local/bin"
=> [ "" "usr" "local" "bin" ]
*/
splitString = _sep: _s:
let
sep = addContextFrom _s _sep;
@ -157,10 +289,15 @@ rec {
in
recurse 0 0;
/* Return the suffix of the second argument if the first argument matches
its prefix.
# return the suffix of the second argument if the first argument match its
# prefix. e.g.,
# `removePrefix "foo." "foo.bar.baz"' returns "bar.baz".
Example:
removePrefix "foo." "foo.bar.baz"
=> "bar.baz"
removePrefix "xxx" "foo.bar.baz"
=> "foo.bar.baz"
*/
removePrefix = pre: s:
let
preLen = stringLength pre;
@ -171,6 +308,15 @@ rec {
else
s;
/* Return the prefix of the second argument if the first argument matches
its suffix.
Example:
removeSuffix "front" "homefront"
=> "home"
removeSuffix "xxx" "homefront"
=> "homefront"
*/
removeSuffix = suf: s:
let
sufLen = stringLength suf;
@ -181,25 +327,49 @@ rec {
else
s;
# Return true iff string v1 denotes a version older than v2.
/* Return true iff string v1 denotes a version older than v2.
Example:
versionOlder "1.1" "1.2"
=> true
versionOlder "1.1" "1.1"
=> false
*/
versionOlder = v1: v2: builtins.compareVersions v2 v1 == 1;
/* Return true iff string v1 denotes a version equal to or newer than v2.
# Return true iff string v1 denotes a version equal to or newer than v2.
Example:
versionAtLeast "1.1" "1.0"
=> true
versionAtLeast "1.1" "1.1"
=> true
versionAtLeast "1.1" "1.2"
=> false
*/
versionAtLeast = v1: v2: !versionOlder v1 v2;
/* This function takes an argument that's either a derivation or a
derivation's "name" attribute and extracts the version part from that
argument.
# This function takes an argument that's either a derivation or a
# derivation's "name" attribute and extracts the version part from that
# argument. For example:
#
# lib.getVersion "youtube-dl-2016.01.01" ==> "2016.01.01"
# lib.getVersion pkgs.youtube-dl ==> "2016.01.01"
Example:
getVersion "youtube-dl-2016.01.01"
=> "2016.01.01"
getVersion pkgs.youtube-dl
=> "2016.01.01"
*/
getVersion = x: (builtins.parseDrvName (x.name or x)).version;
/* Extract name with version from URL. Ask for separator which is
supposed to start extension.
# Extract name with version from URL. Ask for separator which is
# supposed to start extension.
Example:
nameFromURL "https://nixos.org/releases/nix/nix-1.7/nix-1.7-x86_64-linux.tar.bz2" "-"
=> "nix"
nameFromURL "https://nixos.org/releases/nix/nix-1.7/nix-1.7-x86_64-linux.tar.bz2" "_"
=> "nix-1.7-x86"
*/
nameFromURL = url: sep:
let
components = splitString "/" url;
@ -207,14 +377,24 @@ rec {
name = builtins.head (splitString sep filename);
in assert name != filename; name;
/* Create an --{enable,disable}-<feat> string that can be passed to
standard GNU Autoconf scripts.
# Create an --{enable,disable}-<feat> string that can be passed to
# standard GNU Autoconf scripts.
Example:
enableFeature true "shared"
=> "--enable-shared"
enableFeature false "shared"
=> "--disable-shared"
*/
enableFeature = enable: feat: "--${if enable then "enable" else "disable"}-${feat}";
/* Create a fixed width string with additional prefix to match
required width.
# Create a fixed width string with additional prefix to match
# required width.
Example:
fixedWidthString 5 "0" (toString 15)
=> "00015"
*/
fixedWidthString = width: filler: str:
let
strw = lib.stringLength str;
@ -223,25 +403,58 @@ rec {
assert strw <= width;
if strw == width then str else filler + fixedWidthString reqWidth filler str;
/* Format a number adding leading zeroes up to fixed width.
# Format a number adding leading zeroes up to fixed width.
Example:
fixedWidthNumber 5 15
=> "00015"
*/
fixedWidthNumber = width: n: fixedWidthString width "0" (toString n);
/* Check whether a value is a store path.
# Check whether a value is a store path.
Example:
isStorePath "/nix/store/d945ibfx9x185xf04b890y4f9g3cbb63-python-2.7.11/bin/python"
=> false
isStorePath "/nix/store/d945ibfx9x185xf04b890y4f9g3cbb63-python-2.7.11/"
=> true
isStorePath pkgs.python
=> true
*/
isStorePath = x: builtins.substring 0 1 (toString x) == "/" && dirOf (builtins.toPath x) == builtins.storeDir;
# Convert string to int
# Obviously, it is a bit hacky to use fromJSON that way.
/* Convert string to int
Obviously, it is a bit hacky to use fromJSON that way.
Example:
toInt "1337"
=> 1337
toInt "-4"
=> -4
toInt "3.14"
=> error: floating point JSON numbers are not supported
*/
toInt = str:
let may_be_int = builtins.fromJSON str; in
if builtins.isInt may_be_int
then may_be_int
else throw "Could not convert ${str} to int.";
# Read a list of paths from `file', relative to the `rootPath'. Lines
# beginning with `#' are treated as comments and ignored. Whitespace
# is significant.
/* Read a list of paths from `file', relative to the `rootPath'. Lines
beginning with `#' are treated as comments and ignored. Whitespace
is significant.
NOTE: this function is not performant and should be avoided
Example:
readPathsFromFile /prefix
./pkgs/development/libraries/qt-5/5.4/qtbase/series
=> [ "/prefix/dlopen-resolv.patch" "/prefix/tzdir.patch"
"/prefix/dlopen-libXcursor.patch" "/prefix/dlopen-openssl.patch"
"/prefix/dlopen-dbus.patch" "/prefix/xdg-config-dirs.patch"
"/prefix/nix-profiles-library-paths.patch"
"/prefix/compose-search-path.patch" ]
*/
readPathsFromFile = rootPath: file:
let
root = toString rootPath;
@ -253,5 +466,4 @@ rec {
absolutePaths = builtins.map (path: builtins.toPath (root + "/" + path)) relativePaths;
in
absolutePaths;
}

View File

@ -247,6 +247,21 @@ $TTL 1800
</programlisting>
</listitem>
<listitem>
<para>
<literal>service.syncthing.dataDir</literal> options now has to point
to exact folder where syncthing is writing to. Example configuration should
loook something like:
</para>
<programlisting>
services.syncthing = {
enable = true;
dataDir = "/home/somebody/.syncthing";
user = "somebody";
};
</programlisting>
</listitem>
</itemizedlist>

View File

@ -1,11 +1,8 @@
#! /bin/sh -e
BUCKET_NAME=${BUCKET_NAME:-nixos}
export NIX_PATH=nixpkgs=../../../..
export NIXOS_CONFIG=$(dirname $(readlink -f $0))/../../../modules/virtualisation/azure-image.nix
export TIMESTAMP=$(date +%Y%m%d%H%M)
nix-build '<nixpkgs/nixos>' \
-A config.system.build.azureImage --argstr system x86_64-linux -o azure --option extra-binary-caches http://hydra.nixos.org -j 10
azure vm image create nixos-test --location "West Europe" --md5-skip -v --os Linux azure/disk.vhd
-A config.system.build.azureImage --argstr system x86_64-linux -o azure --option extra-binary-caches https://hydra.nixos.org -j 10

View File

@ -0,0 +1,22 @@
#! /bin/sh -e
export STORAGE=${STORAGE:-nixos}
export THREADS=${THREADS:-8}
azure-vhd-utils-for-go upload --localvhdpath azure/disk.vhd --stgaccountname "$STORAGE" --stgaccountkey "$KEY" \
--containername images --blobname nixos-unstable-nixops-updated.vhd --parallelism "$THREADS" --overwrite

View File

@ -14,6 +14,8 @@ let
nvidiaForKernel = kernelPackages:
if elem "nvidia" drivers then
kernelPackages.nvidia_x11
else if elem "nvidiaBeta" drivers then
kernelPackages.nvidia_x11_beta
else if elem "nvidiaLegacy173" drivers then
kernelPackages.nvidia_x11_legacy173
else if elem "nvidiaLegacy304" drivers then

View File

@ -254,6 +254,7 @@
octoprint = 230;
avahi-autoipd = 231;
nntp-proxy = 232;
mjpg-streamer = 233;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!

View File

@ -104,7 +104,7 @@ in
nixosVersion = mkDefault (maybeEnv "NIXOS_VERSION" (cfg.nixosRelease + cfg.nixosVersionSuffix));
# Note: code names must only increase in alphabetical order.
nixosCodeName = "Emu";
nixosCodeName = "Flounder";
};
# Generate /etc/os-release. See

View File

@ -176,6 +176,7 @@
./services/hardware/udisks2.nix
./services/hardware/upower.nix
./services/hardware/thermald.nix
./services/logging/awstats.nix
./services/logging/fluentd.nix
./services/logging/klogd.nix
./services/logging/logcheck.nix
@ -219,6 +220,7 @@
./services/misc/gitolite.nix
./services/misc/gpsd.nix
./services/misc/ihaskell.nix
./services/misc/mantisbt.nix
./services/misc/mathics.nix
./services/misc/matrix-synapse.nix
./services/misc/mbpfan.nix
@ -329,6 +331,7 @@
./services/networking/lambdabot.nix
./services/networking/libreswan.nix
./services/networking/mailpile.nix
./services/networking/mjpg-streamer.nix
./services/networking/minidlna.nix
./services/networking/miniupnpd.nix
./services/networking/mstpd.nix
@ -438,6 +441,7 @@
./services/web-servers/varnish/default.nix
./services/web-servers/winstone.nix
./services/web-servers/zope2.nix
./services/x11/colord.nix
./services/x11/unclutter.nix
./services/x11/desktop-managers/default.nix
./services/x11/display-managers/auto.nix

View File

@ -98,6 +98,9 @@ with lib;
(mkRenamedOptionModule [ "services" "hostapd" "extraCfg" ] [ "services" "hostapd" "extraConfig" ])
# Enlightenment
(mkRenamedOptionModule [ "services" "xserver" "desktopManager" "e19" "enable" ] [ "services" "xserver" "desktopManager" "enlightenment" "enable" ])
# Options that are obsolete and have no replacement.
(mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ])
(mkRemovedOptionModule [ "programs" "bash" "enable" ])

View File

@ -26,19 +26,11 @@ in
'';
};
stable = mkOption {
type = types.bool;
default = false;
kernelPatch = mkOption {
type = types.attrs;
example = lib.literalExample "pkgs.kernelPatches.grsecurity_4_1";
description = ''
Enable the stable grsecurity patch, based on Linux 3.14.
'';
};
testing = mkOption {
type = types.bool;
default = false;
description = ''
Enable the testing grsecurity patch, based on Linux 4.0.
Grsecurity patch to use.
'';
};
@ -219,16 +211,7 @@ in
config = mkIf cfg.enable {
assertions =
[ { assertion = cfg.stable || cfg.testing;
message = ''
If grsecurity is enabled, you must select either the
stable patch (with kernel 3.14), or the testing patch (with
kernel 4.0) to continue.
'';
}
{ assertion = !(cfg.stable && cfg.testing);
message = "Select either one of the stable or testing patch";
}
[
{ assertion = (cfg.config.restrictProc -> !cfg.config.restrictProcWithGroup) ||
(cfg.config.restrictProcWithGroup -> !cfg.config.restrictProc);
message = "You cannot enable both restrictProc and restrictProcWithGroup";
@ -247,6 +230,8 @@ in
}
];
security.grsecurity.kernelPatch = lib.mkDefault pkgs.kernelPatches.grsecurity_latest;
systemd.services.grsec-lock = mkIf cfg.config.sysctl {
description = "grsecurity sysctl-lock Service";
requires = [ "systemd-sysctl.service" ];

View File

@ -293,7 +293,7 @@ in
# make sure that the tarsnap server is reachable after systemd starts up
# the service - therefore we sleep in a loop until we can ping the
# endpoint.
preStart = "while ! ping -q -c 1 betatest-server.tarsnap.com &> /dev/null; do sleep 3; done";
preStart = "while ! ping -q -c 1 v1-0-0-server.tarsnap.com &> /dev/null; do sleep 3; done";
scriptArgs = "%i";
script = ''
mkdir -p -m 0755 ${dirOf cfg.cachedir}

View File

@ -0,0 +1,123 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.awstats;
package = pkgs.awstats;
in
{
options.services.awstats = {
enable = mkOption {
type = types.bool;
default = cfg.service.enable;
description = ''
Enable the awstats program (but not service).
Currently only simple httpd (Apache) configs are supported,
and awstats plugins may not work correctly.
'';
};
vardir = mkOption {
type = types.path;
default = "/var/lib/awstats";
description = "The directory where variable awstats data will be stored.";
};
extraConfig = mkOption {
type = types.lines;
default = "";
description = "Extra configuration to be appendend to awstats.conf.";
};
updateAt = mkOption {
type = types.nullOr types.string;
default = null;
example = "hourly";
description = ''
Specification of the time at which awstats will get updated.
(in the format described by <citerefentry>
<refentrytitle>systemd.time</refentrytitle>
<manvolnum>5</manvolnum></citerefentry>)
'';
};
service = {
enable = mkOption {
type = types.bool;
default = false;
description = ''Enable the awstats web service. This switches on httpd.'';
};
urlPrefix = mkOption {
type = types.string;
default = "/awstats";
description = "The URL prefix under which the awstats service appears.";
};
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ package.bin ];
/* TODO:
- heed config.services.httpd.logPerVirtualHost, etc.
- Can't AllowToUpdateStatsFromBrowser, as CGI scripts don't have permission
to read the logs, and our httpd config apparently doesn't an option for that.
*/
environment.etc."awstats/awstats.conf".source = pkgs.runCommand "awstats.conf"
{ preferLocalBuild = true; }
( let
cfg-httpd = config.services.httpd;
logFormat =
if cfg-httpd.logFormat == "combined" then "1" else
if cfg-httpd.logFormat == "common" then "4" else
throw "awstats service doesn't support Apache log format `${cfg-httpd.logFormat}`";
in
''
sed \
-e 's|^\(DirData\)=.*$|\1="${cfg.vardir}"|' \
-e 's|^\(DirIcons\)=.*$|\1="icons"|' \
-e 's|^\(CreateDirDataIfNotExists\)=.*$|\1=1|' \
-e 's|^\(SiteDomain\)=.*$|\1="${cfg-httpd.hostName}"|' \
-e 's|^\(LogFile\)=.*$|\1="${cfg-httpd.logDir}/access_log"|' \
-e 's|^\(LogFormat\)=.*$|\1=${logFormat}|' \
< '${package.out}/wwwroot/cgi-bin/awstats.model.conf' > "$out"
echo '${cfg.extraConfig}' >> "$out"
'');
# The httpd sub-service showing awstats.
services.httpd.enable = mkIf cfg.service.enable true;
services.httpd.extraSubservices = mkIf cfg.service.enable [ { function = { serverInfo, ... }: {
extraConfig =
''
Alias ${cfg.service.urlPrefix}/classes "${package.out}/wwwroot/classes/"
Alias ${cfg.service.urlPrefix}/css "${package.out}/wwwroot/css/"
Alias ${cfg.service.urlPrefix}/icons "${package.out}/wwwroot/icon/"
ScriptAlias ${cfg.service.urlPrefix}/ "${package.out}/wwwroot/cgi-bin/"
<Directory "${package.out}/wwwroot">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
'';
startupScript =
let
inherit (serverInfo.serverConfig) user group;
in pkgs.writeScript "awstats_startup.sh"
''
mkdir -p '${cfg.vardir}'
chown '${user}:${group}' '${cfg.vardir}'
'';
};}];
systemd.services.awstats-update = mkIf (cfg.updateAt != null) {
description = "awstats log collector";
script = "exec '${package.bin}/bin/awstats' -update -config=awstats.conf";
startAt = cfg.updateAt;
};
};
}

View File

@ -27,7 +27,7 @@ let
mainCf =
''
compatibility_level = 2
compatibility_level = 9999
mail_owner = ${user}
default_privs = nobody

View File

@ -79,6 +79,11 @@ in
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
preStart = ''
# There should be only one autofs service managed by systemd, so this should be safe.
rm -f /tmp/autofs-running
'';
serviceConfig = {
ExecStart = "${pkgs.autofs5}/sbin/automount ${if cfg.debug then "-d" else ""} -f -t ${builtins.toString cfg.timeout} ${autoMaster} ${if cfg.debug then "-l7" else ""}";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";

View File

@ -328,7 +328,7 @@ in {
Group = cfg.group;
TimeoutSec = "300";
WorkingDirectory = "${cfg.packages.gitlab}/share/gitlab";
ExecStart="${bundler}/bin/bundle exec \"sidekiq -q post_receive -q mailer -q system_hook -q project_web_hook -q gitlab_shell -q common -q default -e production -P ${cfg.statePath}/tmp/sidekiq.pid\"";
ExecStart="${bundler}/bin/bundle exec \"sidekiq -q post_receive -q mailers -q system_hook -q project_web_hook -q gitlab_shell -q common -q default -e production -P ${cfg.statePath}/tmp/sidekiq.pid\"";
};
};

View File

@ -0,0 +1,68 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.mantisbt;
freshInstall = cfg.extraConfig == "";
# combined code+config directory
mantisbt = let
config_inc = pkgs.writeText "config_inc.php" ("<?php\n" + cfg.extraConfig);
src = pkgs.fetchurl {
url = "mirror://sourceforge/mantisbt/${name}.tar.gz";
sha256 = "1pl6xn793p3mxc6ibpr2bhg85vkdlcf57yk7pfc399g47l8x4508";
};
name = "mantisbt-1.2.19";
in
# We have to copy every time; otherwise config won't be found.
pkgs.runCommand name
{ preferLocalBuild = true; allowSubstitutes = false; }
(''
mkdir -p "$out"
cd "$out"
tar -xf '${src}' --strip-components=1
ln -s '${config_inc}' config_inc.php
''
+ lib.optionalString (!freshInstall) "rm -r admin/"
);
in
{
options.services.mantisbt = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enable the mantisbt web service.
This switches on httpd with PHP and database.
'';
};
urlPrefix = mkOption {
type = types.string;
default = "/mantisbt";
description = "The URL prefix under which the mantisbt service appears.";
};
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
The contents of config_inc.php, without leading &lt;?php.
If left empty, the admin directory will be accessible.
'';
};
};
config = mkIf cfg.enable {
services.mysql.enable = true;
services.httpd.enable = true;
services.httpd.enablePHP = true;
# The httpd sub-service showing mantisbt.
services.httpd.extraSubservices = [ { function = { ... }: {
extraConfig =
''
Alias ${cfg.urlPrefix} "${mantisbt}"
'';
};}];
};
}

View File

@ -6,12 +6,16 @@ let
cfg = config.services.octoprint;
cfgUpdate = pkgs.writeText "octoprint-config.yaml" (builtins.toJSON {
baseConfig = {
plugins.cura.cura_engine = "${pkgs.curaengine}/bin/CuraEngine";
server.host = cfg.host;
server.port = cfg.port;
webcam.ffmpeg = "${pkgs.ffmpeg}/bin/ffmpeg";
});
};
fullConfig = recursiveUpdate cfg.extraConfig baseConfig;
cfgUpdate = pkgs.writeText "octoprint-config.yaml" (builtins.toJSON fullConfig);
pluginsEnv = pkgs.python.buildEnv.override {
extraLibs = cfg.plugins pkgs.octoprint-plugins;
@ -62,13 +66,18 @@ in
};
plugins = mkOption {
#type = types.functionTo (types.listOf types.package);
default = plugins: [];
defaultText = "plugins: []";
example = literalExample "plugins: [ m3d-fio ]";
description = "Additional plugins.";
};
extraConfig = mkOption {
type = types.attrs;
default = {};
description = "Extra options which are added to OctoPrint's YAML configuration file.";
};
};
};

View File

@ -51,7 +51,13 @@ let
'';
carbonEnv = {
PYTHONPATH = "${pkgs.python27Packages.carbon}/lib/python2.7/site-packages";
PYTHONPATH = let
cenv = pkgs.python.buildEnv.override {
extraLibs = [ pkgs.python27Packages.carbon ];
};
cenvPack = "${cenv}/${pkgs.python.sitePackages}";
# opt/graphite/lib contains twisted.plugins.carbon-cache
in "${cenvPack}/opt/graphite/lib:${cenvPack}";
GRAPHITE_ROOT = dataDir;
GRAPHITE_CONF_DIR = configDir;
GRAPHITE_STORAGE_DIR = dataDir;
@ -445,10 +451,21 @@ in {
after = [ "network-interfaces.target" ];
path = [ pkgs.perl ];
environment = {
PYTHONPATH = "${pkgs.python27Packages.graphite_web}/lib/python2.7/site-packages";
PYTHONPATH = let
penv = pkgs.python.buildEnv.override {
extraLibs = [
pkgs.python27Packages.graphite_web
pkgs.python27Packages.pysqlite
];
};
penvPack = "${penv}/${pkgs.python.sitePackages}";
# opt/graphite/webapp contains graphite/settings.py
# explicitly adding pycairo in path because it cannot be imported via buildEnv
in "${penvPack}/opt/graphite/webapp:${penvPack}:${pkgs.pycairo}/${pkgs.python.sitePackages}";
DJANGO_SETTINGS_MODULE = "graphite.settings";
GRAPHITE_CONF_DIR = configDir;
GRAPHITE_STORAGE_DIR = dataDir;
LD_LIBRARY_PATH = "${pkgs.cairo}/lib";
};
serviceConfig = {
ExecStart = ''
@ -486,9 +503,11 @@ in {
wantedBy = [ "multi-user.target" ];
after = [ "network-interfaces.target" ];
environment = {
PYTHONPATH =
"${cfg.api.package}/lib/python2.7/site-packages:" +
concatMapStringsSep ":" (f: f + "/lib/python2.7/site-packages") cfg.api.finders;
PYTHONPATH = let
aenv = pkgs.python.buildEnv.override {
extraLibs = [ cfg.api.package pkgs.cairo ] ++ cfg.api.finders;
};
in "${aenv}/${pkgs.python.sitePackages}";
GRAPHITE_API_CONFIG = graphiteApiConfig;
LD_LIBRARY_PATH = "${pkgs.cairo}/lib";
};

View File

@ -49,7 +49,7 @@ in
'';
};
resolverName = mkOption {
default = "opendns";
default = "cisco";
type = types.nullOr types.string;
description = ''
The name of the upstream DNSCrypt resolver to use. See
@ -130,6 +130,9 @@ in
${pkgs.xz}/lib/liblzma.so.* mr,
${pkgs.libgcrypt}/lib/libgcrypt.so.* mr,
${pkgs.libgpgerror}/lib/libgpg-error.so.* mr,
${pkgs.libcap}/lib/libcap.so.* mr,
${pkgs.lz4}/lib/liblz4.so.* mr,
${pkgs.attr}/lib/libattr.so.* mr,
${resolverListFile} r,
}

View File

@ -10,9 +10,10 @@ let
extip = "EXTIP=\$(${pkgs.curl}/bin/curl -sf \"http://jsonip.com\" | ${pkgs.gawk}/bin/awk -F'\"' '{print $4}')";
toOneZero = b: if b then "1" else "0";
toYesNo = b: if b then "yes" else "no";
mkEndpointOpt = name: addr: port: {
enable = mkEnableOption name;
name = mkOption {
type = types.str;
default = name;
@ -63,9 +64,9 @@ let
} // mkEndpointOpt name "127.0.0.1" 0;
i2pdConf = pkgs.writeText "i2pd.conf" ''
ipv6 = ${toOneZero cfg.enableIPv6}
notransit = ${toOneZero cfg.notransit}
floodfill = ${toOneZero cfg.floodfill}
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)
@ -73,6 +74,7 @@ let
[${proto.name}]
address = ${proto.address}
port = ${toString proto.port}
enabled = ${toYesNo proto.enable}
'')
}
'';

View File

@ -0,0 +1,75 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.mjpg-streamer;
in {
options = {
services.mjpg-streamer = {
enable = mkEnableOption "mjpg-streamer webcam streamer";
inputPlugin = mkOption {
type = types.str;
default = "input_uvc.so";
description = ''
Input plugin. See plugins documentation for more information.
'';
};
outputPlugin = mkOption {
type = types.str;
default = "output_http.so -w @www@ -n -p 5050";
description = ''
Output plugin. <literal>@www@</literal> is substituted for default mjpg-streamer www directory.
See plugins documentation for more information.
'';
};
user = mkOption {
type = types.str;
default = "mjpg-streamer";
description = "mjpg-streamer user name.";
};
group = mkOption {
type = types.str;
default = "video";
description = "mjpg-streamer group name.";
};
};
};
config = mkIf cfg.enable {
users.extraUsers = optional (cfg.user == "mjpg-streamer") {
name = "mjpg-streamer";
uid = config.ids.uids.mjpg-streamer;
group = cfg.group;
};
systemd.services.mjpg-streamer = {
description = "mjpg-streamer webcam streamer";
wantedBy = [ "multi-user.target" ];
serviceConfig.User = cfg.user;
serviceConfig.Group = cfg.group;
script = ''
IPLUGIN="${cfg.inputPlugin}"
OPLUGIN="${cfg.outputPlugin}"
OPLUGIN="''${OPLUGIN//@www@/${pkgs.mjpg-streamer}/share/mjpg-streamer/www}"
exec ${pkgs.mjpg-streamer}/bin/mjpg_streamer -i "$IPLUGIN" -o "$OPLUGIN"
'';
};
};
}

View File

@ -85,6 +85,9 @@ let
ssl_enable=YES
rsa_cert_file=${cfg.rsaCertFile}
''}
${optionalString (cfg.rsaKeyFile != null) ''
rsa_private_key_file=${cfg.rsaKeyFile}
''}
${optionalString (cfg.userlistFile != null) ''
userlist_file=${cfg.userlistFile}
''}
@ -147,6 +150,12 @@ in
description = "RSA certificate file.";
};
rsaKeyFile = mkOption {
type = types.nullOr types.path;
default = null;
description = "RSA private key file.";
};
anonymousUmask = mkOption {
type = types.string;
default = "077";

View File

@ -238,7 +238,8 @@ in
example = literalExample "[ pkgs.splix ]";
description = ''
CUPS drivers to use. Drivers provided by CUPS, cups-filters, Ghostscript
and Samba are added unconditionally.
and Samba are added unconditionally. For adding Gutenprint, see
<literal>gutenprint</literal>.
'';
};

View File

@ -0,0 +1,78 @@
{ config, pkgs, lib, serverInfo, ... }:
let
inherit (pkgs) foswiki;
inherit (serverInfo.serverConfig) user group;
inherit (config) vardir;
in
{
options.vardir = lib.mkOption {
type = lib.types.path;
default = "/var/www/foswiki";
description = "The directory where variable foswiki data will be stored and served from.";
};
# TODO: this will probably need to be better customizable
extraConfig =
let httpd-conf = pkgs.runCommand "foswiki-httpd.conf"
{ preferLocalBuild = true; }
''
substitute '${foswiki}/foswiki_httpd_conf.txt' "$out" \
--replace /var/www/foswiki/ "${vardir}/"
'';
in
''
RewriteEngine on
RewriteRule /foswiki/(.*) ${vardir}/$1
<Directory "${vardir}">
Require all granted
</Directory>
Include ${httpd-conf}
<Directory "${vardir}/pub">
Options FollowSymlinks
</Directory>
'';
/** This handles initial setup and updates.
It will probably need some tweaking, maybe per-site. */
startupScript = pkgs.writeScript "foswiki_startup.sh" (
let storeLink = "${vardir}/package"; in
''
[ -e '${storeLink}' ] || needs_setup=1
mkdir -p '${vardir}'
cd '${vardir}'
ln -sf -T '${foswiki}' '${storeLink}'
if [ -n "$needs_setup" ]; then # do initial setup
mkdir -p bin lib
# setup most of data/ as copies only
cp -r '${foswiki}'/data '${vardir}/'
rm -r '${vardir}'/data/{System,mime.types}
ln -sr -t '${vardir}/data/' '${storeLink}'/data/{System,mime.types}
ln -sr '${storeLink}/locale' .
mkdir pub
ln -sr '${storeLink}/pub/System' pub/
mkdir templates
ln -sr '${storeLink}'/templates/* templates/
ln -sr '${storeLink}/tools' .
mkdir -p '${vardir}'/working/{logs,tmp}
ln -sr '${storeLink}/working/README' working/ # used to check dir validity
chown -R '${user}:${group}' .
chmod +w -R .
fi
# bin/* and lib/* shall always be overwritten, in case files are added
ln -srf '${storeLink}'/bin/* '${vardir}/bin/'
ln -srf '${storeLink}'/lib/* '${vardir}/lib/'
''
/* Symlinking bin/ one-by-one ensures that ${vardir}/lib/LocalSite.cfg
is used instead of ${foswiki}/... */
);
}

View File

@ -0,0 +1,39 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.colord;
in {
options = {
services.colord = {
enable = mkEnableOption "colord, the color management daemon";
};
};
config = mkIf cfg.enable {
services.dbus.packages = [ pkgs.colord ];
services.udev.packages = [ pkgs.colord ];
environment.systemPackages = [ pkgs.colord ];
systemd.services.colord = {
description = "Manage, Install and Generate Color Profiles";
serviceConfig = {
Type = "dbus";
BusName = "org.freedesktop.ColorManager";
ExecStart = "${pkgs.colord}/libexec/colord";
PrivateTmp = true;
};
};
};
}

View File

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

View File

@ -4,9 +4,9 @@ with lib;
let
e = pkgs.enlightenment;
xcfg = config.services.xserver;
cfg = xcfg.desktopManager.e19;
e19_enlightenment = pkgs.e19.enlightenment.override { set_freqset_setuid = true; };
cfg = xcfg.desktopManager.enlightenment;
GST_PLUGIN_PATH = lib.makeSearchPath "lib/gstreamer-1.0" [
pkgs.gst_all_1.gst-plugins-base
pkgs.gst_all_1.gst-plugins-good
@ -18,10 +18,10 @@ in
{
options = {
services.xserver.desktopManager.e19.enable = mkOption {
services.xserver.desktopManager.enlightenment.enable = mkOption {
default = false;
example = true;
description = "Enable the E19 desktop environment.";
description = "Enable the Enlightenment desktop environment.";
};
};
@ -29,8 +29,8 @@ in
config = mkIf (xcfg.enable && cfg.enable) {
environment.systemPackages = [
pkgs.e19.efl pkgs.e19.evas pkgs.e19.emotion pkgs.e19.elementary e19_enlightenment
pkgs.e19.terminology pkgs.e19.econnman
e.efl e.evas e.emotion e.elementary e.enlightenment
e.terminology e.econnman
pkgs.xorg.xauth # used by kdesu
pkgs.gtk # To get GTK+'s themes.
pkgs.tango-icon-theme
@ -42,7 +42,7 @@ in
environment.pathsToLink = [ "/etc/enlightenment" "/etc/xdg" "/share/enlightenment" "/share/elementary" "/share/applications" "/share/locale" "/share/icons" "/share/themes" "/share/mime" "/share/desktop-directories" ];
services.xserver.desktopManager.session = [
{ name = "E19";
{ name = "Enlightenment";
start = ''
# Set GTK_DATA_PREFIX so that GTK+ can find the themes
export GTK_DATA_PREFIX=${config.system.path}
@ -53,17 +53,16 @@ in
export GST_PLUGIN_PATH="${GST_PLUGIN_PATH}"
# make available for D-BUS user services
#export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}:${config.system.path}/share:${pkgs.e19.efl}/share
#export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}:${config.system.path}/share:${e.efl}/share
# Update user dirs as described in http://freedesktop.org/wiki/Software/xdg-user-dirs/
${pkgs.xdg-user-dirs}/bin/xdg-user-dirs-update
${e19_enlightenment}/bin/enlightenment_start
waitPID=$!
exec ${e.enlightenment}/bin/enlightenment_start
'';
}];
security.setuidPrograms = [ "e19_freqset" ];
security.setuidPrograms = [ "e_freqset" ];
environment.etc = singleton
{ source = "${pkgs.xkeyboard_config}/etc/X11/xkb";
@ -75,13 +74,13 @@ in
services.udisks2.enable = true;
services.upower.enable = config.powerManagement.enable;
#services.dbus.packages = [ pkgs.efl ]; # dbus-1 folder is not in /etc but in /share, so needs fixing first
services.dbus.packages = [ e.efl ];
systemd.user.services.efreet =
{ enable = true;
description = "org.enlightenment.Efreet";
serviceConfig =
{ ExecStart = "${pkgs.e19.efl}/bin/efreetd";
{ ExecStart = "${e.efl}/bin/efreetd";
StandardOutput = "null";
};
};
@ -90,7 +89,7 @@ in
{ enable = true;
description = "org.enlightenment.Ethumb";
serviceConfig =
{ ExecStart = "${pkgs.e19.efl}/bin/ethumbd";
{ ExecStart = "${e.efl}/bin/ethumbd";
StandardOutput = "null";
};
};

View File

@ -128,6 +128,7 @@ in
++ lib.optional config.networking.networkmanager.enable kde5.plasma-nm
++ lib.optional config.hardware.pulseaudio.enable kde5.plasma-pa
++ lib.optional config.powerManagement.enable kde5.powerdevil
++ lib.optional config.services.colord.enable kde5.colord-kde
++ lib.optionals config.services.samba.enable [ kde5.kdenetwork-filesharing pkgs.samba ]
++ lib.optionals cfg.phonon.gstreamer.enable

View File

@ -17,6 +17,7 @@ in
./fluxbox.nix
./herbstluftwm.nix
./i3.nix
./jwm.nix
./metacity.nix
./openbox.nix
./notion.nix

View File

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.jwm;
in
{
###### interface
options = {
services.xserver.windowManager.jwm.enable = mkEnableOption "jwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "jwm";
start = ''
${pkgs.jwm}/bin/jwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.jwm ];
};
}

View File

@ -58,6 +58,7 @@ let
# Add RAID mdadm tool.
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdadm
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdmon
# Copy udev.
copy_bin_and_libs ${udev}/lib/systemd/systemd-udevd

View File

@ -93,7 +93,7 @@ let
config = {
mountPoint = mkDefault name;
device = mkIf (config.fsType == "tmpfs") (mkDefault config.fsType);
options = mkIf config.autoResize "x-nixos.autoresize";
options = mkIf config.autoResize [ "x-nixos.autoresize" ];
# -F needed to allow bare block device without partitions
formatOptions = mkIf ((builtins.substring 0 3 config.fsType) == "ext") (mkDefault "-F");

View File

@ -12,4 +12,45 @@
cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
'';
systemd.services.mdadm-shutdown = {
wantedBy = [ "final.target"];
after = [ "umount.target" ];
unitConfig = {
DefaultDependencies = false;
};
serviceConfig = {
Type = "oneshot";
ExecStart = ''${pkgs.mdadm}/bin/mdadm --wait-clean --scan'';
};
};
systemd.services."mdmon@" = {
description = "MD Metadata Monitor on /dev/%I";
unitConfig.DefaultDependencies = false;
serviceConfig = {
Type = "forking";
Environment = "IMSM_NO_PLATFORM=1";
ExecStart = ''${pkgs.mdadm}/bin/mdmon --offroot --takeover %I'';
KillMode = "none";
};
};
systemd.services."mdadm-grow-continue@" = {
description = "Manage MD Reshape on /dev/%I";
unitConfig.DefaultDependencies = false;
serviceConfig = {
ExecStart = ''${pkgs.mdadm}/bin/mdadm --grow --continue /dev/%I'';
StandardInput = "null";
StandardOutput = "null";
StandardError = "null";
KillMode = "none";
};
};
}

View File

@ -40,7 +40,6 @@ let cfg = config.ec2; in
# Force udev to exit to prevent random "Device or resource busy
# while trying to open /dev/xvda" errors from fsck.
udevadm control --exit || true
kill -9 -1
'';
boot.initrd.network.enable = true;

View File

@ -0,0 +1,17 @@
--- a/waagent 2016-03-12 09:58:15.728088851 +0200
+++ a/waagent 2016-03-12 09:58:43.572680025 +0200
@@ -6173,10 +6173,10 @@
Log("MAC address: " + ":".join(["%02X" % Ord(a) for a in mac]))
# Consume Entropy in ACPI table provided by Hyper-V
- try:
- SetFileContents("/dev/random", GetFileContents("/sys/firmware/acpi/tables/OEM0"))
- except:
- pass
+ #try:
+ # SetFileContents("/dev/random", GetFileContents("/sys/firmware/acpi/tables/OEM0"))
+ #except:
+ # pass
Log("Probing for Azure environment.")
self.Endpoint = self.DoDhcpWork()

View File

@ -14,6 +14,9 @@ let
rev = "1b3a8407a95344d9d12a2a377f64140975f1e8e4";
sha256 = "10byzvmpgrmr4d5mdn2kq04aapqb3sgr1admk13wjmy5cd6bwd2x";
};
patches = [ ./azure-agent-entropy.patch ];
buildInputs = [ makeWrapper python pythonPackages.wrapPython ];
runtimeDeps = [ findutils gnugrep gawk coreutils openssl openssh
nettools # for hostname
@ -54,9 +57,15 @@ in
###### interface
options.virtualisation.azure.agent.enable = mkOption {
default = false;
description = "Whether to enable the Windows Azure Linux Agent.";
options.virtualisation.azure.agent = {
enable = mkOption {
default = false;
description = "Whether to enable the Windows Azure Linux Agent.";
};
verboseLogging = mkOption {
default = false;
description = "Whether to enable verbose logging.";
};
};
###### implementation
@ -88,7 +97,7 @@ in
Provisioning.DeleteRootPassword=n
# Generate fresh host key pair.
Provisioning.RegenerateSshHostKeyPair=y
Provisioning.RegenerateSshHostKeyPair=n
# Supported values are "rsa", "dsa" and "ecdsa".
Provisioning.SshHostKeyPairType=ed25519
@ -121,7 +130,7 @@ in
Logs.Console=y
# Enable verbose logging (y|n)
Logs.Verbose=n
Logs.Verbose=${if cfg.verboseLogging then "y" else "n"}
# Root device timeout in seconds.
OS.RootDeviceScsiTimeout=300
@ -146,16 +155,30 @@ in
systemd.targets.provisioned = {
description = "Services Requiring Azure VM provisioning to have finished";
wantedBy = [ "sshd.service" ];
before = [ "sshd.service" ];
};
systemd.services.consume-hypervisor-entropy =
{ description = "Consume entropy in ACPI table provided by Hyper-V";
wantedBy = [ "sshd.service" "waagent.service" ];
before = [ "sshd.service" "waagent.service" ];
after = [ "local-fs.target" ];
path = [ pkgs.coreutils ];
script =
''
echo "Fetching entropy..."
cat /sys/firmware/acpi/tables/OEM0 > /dev/random
'';
serviceConfig.Type = "oneshot";
serviceConfig.RemainAfterExit = true;
serviceConfig.StandardError = "journal+console";
serviceConfig.StandardOutput = "journal+console";
};
systemd.services.waagent = {
wantedBy = [ "sshd.service" ];
before = [ "sshd.service" ];
after = [ "ip-up.target" ];
wants = [ "ip-up.target" ];
wantedBy = [ "multi-user.target" ];
after = [ "ip-up.target" "sshd.service" ];
path = [ pkgs.e2fsprogs ];
description = "Windows Azure Agent Service";

View File

@ -2,7 +2,7 @@
with lib;
let
diskSize = "4096";
diskSize = "30720";
in
{
system.build.azureImage =
@ -23,7 +23,7 @@ in
postVM =
''
mkdir -p $out
${pkgs.vmTools.qemu-220}/bin/qemu-img convert -f raw -O vpc -o subformat=fixed $diskImage $out/disk.vhd
${pkgs.vmTools.qemu-220}/bin/qemu-img convert -f raw -O vpc $diskImage $out/disk.vhd
rm $diskImage
'';
diskImageBase = "nixos-image-${config.system.nixosLabel}-${pkgs.stdenv.system}.raw";

View File

@ -240,6 +240,7 @@ in rec {
tests.containers = callTest tests/containers.nix {};
tests.docker = hydraJob (import tests/docker.nix { system = "x86_64-linux"; });
tests.dockerRegistry = hydraJob (import tests/docker-registry.nix { system = "x86_64-linux"; });
tests.dnscrypt-proxy = callTest tests/dnscrypt-proxy.nix { system = "x86_64-linux"; };
tests.etcd = hydraJob (import tests/etcd.nix { system = "x86_64-linux"; });
tests.ec2-nixops = hydraJob (import tests/ec2.nix { system = "x86_64-linux"; }).boot-ec2-nixops;
tests.ec2-config = hydraJob (import tests/ec2.nix { system = "x86_64-linux"; }).boot-ec2-config;

View File

@ -0,0 +1,32 @@
import ./make-test.nix ({ pkgs, ... }: {
name = "dnscrypt-proxy";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ joachifm ];
};
nodes = {
# A client running the recommended setup: DNSCrypt proxy as a forwarder
# for a caching DNS client.
client =
{ config, pkgs, ... }:
let localProxyPort = 43; in
{
security.apparmor.enable = true;
services.dnscrypt-proxy.enable = true;
services.dnscrypt-proxy.localPort = localProxyPort;
services.dnsmasq.enable = true;
services.dnsmasq.servers = [ "127.0.0.1#${toString localProxyPort}" ];
};
};
testScript = ''
$client->start;
$client->waitForUnit("multi-user.target");
# The daemon is socket activated; sending a single ping should activate it.
$client->execute("${pkgs.iputils}/bin/ping -c1 example.com");
$client->succeed("systemctl is-active dnscrypt-proxy.service");
'';
})

View File

@ -0,0 +1,55 @@
{ pkgs, stdenv, lib, fetchurl, intltool, pkgconfig, gstreamer, gst_plugins_base
, gst_plugins_good, gst_plugins_bad, gst_plugins_ugly, gst_ffmpeg, glib
, mono, mono-addins, dbus-sharp-1_0, dbus-sharp-glib-1_0, notify-sharp, gtk-sharp-2_0
, boo, gdata-sharp, taglib-sharp, sqlite, gnome-sharp, gconf, gtk-sharp-beans, gio-sharp
, libmtp, libgpod, mono-zeroconf }:
stdenv.mkDerivation rec {
name = "banshee-${version}";
version = "2.6.2";
src = fetchurl {
url = "http://ftp.gnome.org/pub/GNOME/sources/banshee/2.6/banshee-${version}.tar.xz";
sha256 = "1y30p8wxx5li39i5gpq2wib0ympy8llz0gyi6ri9bp730ndhhz7p";
};
dontStrip = true;
nativeBuildInputs = [ pkgconfig intltool ];
buildInputs = [
gtk-sharp-2_0.gtk gstreamer gst_plugins_base gst_plugins_good
gst_plugins_bad gst_plugins_ugly gst_ffmpeg
mono dbus-sharp-1_0 dbus-sharp-glib-1_0 mono-addins notify-sharp
gtk-sharp-2_0 boo gdata-sharp taglib-sharp sqlite gnome-sharp gconf gtk-sharp-beans
gio-sharp libmtp libgpod mono-zeroconf
];
makeFlags = [ "PREFIX=$(out)" ];
postPatch = ''
patchShebangs data/desktop-files/update-desktop-file.sh
patchShebangs build/private-icon-theme-installer
sed -i "s,DOCDIR=.*,DOCDIR=$out/lib/monodoc," configure
'';
postInstall = let
ldLibraryPath = lib.makeLibraryPath [ gtk-sharp-2_0.gtk gtk-sharp-2_0 sqlite gconf glib gstreamer ];
monoGACPrefix = lib.concatStringsSep ":" [
mono dbus-sharp-1_0 dbus-sharp-glib-1_0 mono-addins notify-sharp gtk-sharp-2_0
boo gdata-sharp taglib-sharp sqlite gnome-sharp gconf gtk-sharp-beans
gio-sharp libmtp libgpod mono-zeroconf
];
in ''
sed -e '2a export MONO_GAC_PREFIX=${monoGACPrefix}' \
-e 's|LD_LIBRARY_PATH=|LD_LIBRARY_PATH=${ldLibraryPath}:|' \
-e "s|GST_PLUGIN_PATH=|GST_PLUGIN_PATH=$GST_PLUGIN_SYSTEM_PATH:|" \
-e 's| mono | ${mono}/bin/mono |' \
-i $out/bin/banshee
'';
meta = with lib; {
description = "A music player written in C# using GNOME technologies";
platforms = platforms.linux;
maintainers = [ maintainers.zohl ];
};
}

View File

@ -20,7 +20,6 @@ in stdenv.mkDerivation rec {
license = licenses.gpl2Plus;
platforms = platforms.linux;
hydraPlatforms = [];
maintainers = with maintainers; [ iyzsong ];
};
src = fetchurl {

View File

@ -37,7 +37,8 @@ let
inherit src;
buildInputs = [ makeWrapper llvm emscripten openssl libsndfile pkgconfig libmicrohttpd vim ];
nativeBuildInputs = [ makeWrapper pkgconfig vim ];
buildInputs = [ llvm emscripten openssl libsndfile libmicrohttpd ];
passthru = {
@ -53,6 +54,20 @@ let
# correct system.
unset system
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.
#
# Failing to properly detect the llvm version means that the macro
# LLVM_VERSION ends up being the raw output of `llvm-config --version`, while
# the code assumes that it's set to a symbol like `LLVM_35`. Two problems result:
# * <command-line>:0:1: error: macro names must be identifiers.; and
# * a bunch of undefined reference errors due to conditional definitions relying on
# LLVM_XY being defined.
#
# 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
'';
# Remove most faust2appl scripts since they won't run properly

View File

@ -5,7 +5,7 @@
assert stdenv.system == "x86_64-linux";
let
version = "1.0.23.93.gd6cfae15-30";
version = "1.0.25.127.g58007b4c-22";
deps = [
alsaLib
@ -50,7 +50,7 @@ stdenv.mkDerivation {
src =
fetchurl {
url = "http://repository-origin.spotify.com/pool/non-free/s/spotify-client/spotify-client_${version}_amd64.deb";
sha256 = "0n6vz51jv6s20dp4zlqkk52bpmpyfm1qn5bfm4lfq09x1g6ir5lr";
sha256 = "1fxps0ls0g4idw10la3qrpmp2jn85lkm3xj4nam4ycx0jj8g1v2p";
};
buildInputs = [ dpkg makeWrapper ];

View File

@ -12,7 +12,6 @@ in stdenv.mkDerivation rec {
homepage = "http://vmpk.sourceforge.net/";
license = licenses.gpl3Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ iyzsong ];
};
src = fetchurl {

View File

@ -8,7 +8,6 @@ stdenv.mkDerivation rec {
homepage = "http://xmp.sourceforge.net/";
license = licenses.gpl2Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ iyzsong ];
};
src = fetchurl {

View File

@ -43,6 +43,5 @@ stdenv.mkDerivation rec {
homepage = "http://www.aseprite.org/";
license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.linux;
maintainers = with stdenv.lib.maintainers; [iyzsong];
};
}

View File

@ -27,8 +27,8 @@ stdenv.mkDerivation rec {
'';
configureFlags = [
"--with-lispdir=$out/share/emacs/site-lisp"
"--with-icondir=$out/share/emacs/site-lisp/images/w3m"
"--with-lispdir=$(out)/share/emacs/site-lisp"
"--with-icondir=$(out)/share/emacs/site-lisp/images/w3m"
];
postInstall = ''

View File

@ -1,7 +1,7 @@
{ stdenv, fetchurl, gtk2, which, pkgconfig, intltool, file }:
let
version = "1.26";
version = "1.27";
in
stdenv.mkDerivation rec {
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "http://download.geany.org/${name}.tar.bz2";
sha256 = "e38530e87c577e1e9806be3b40e08fb9ee321eb1abc6361ddacdad89c825f90d";
sha256 = "846ff699a5944c5c3c068ae0199d4c13946a668bfc6d03f8c79765667c20cadf";
};
buildInputs = [ gtk2 which pkgconfig intltool file ];

View File

@ -3,12 +3,12 @@
stdenv.mkDerivation rec {
name = "${pname}-${version}";
version = "4.7.1";
version = "4.7.3";
pname = "kdevelop";
src = fetchurl {
url = "mirror://kde/stable/${pname}/${version}/src/${name}.tar.xz";
sha256 = "e3ad5377f53739a67216d37cda3f88c03f8fbb0c96e2a9ef4056df3c124e95c1";
url = "mirror://kde/stable/${pname}/${version}/src/${name}.tar.bz2";
sha256 = "9db388d1c8274da7d168c13db612c7e94ece7815757b945b0aa0371620a06b35";
};
buildInputs = [ kdevplatform kdebase_workspace okteta qjson ];
@ -17,6 +17,8 @@ stdenv.mkDerivation rec {
propagatedUserEnvPkgs = [ kdevplatform kate konsole kde_runtime oxygen_icons ];
patches = [ ./gettext.patch ];
NIX_CFLAGS_COMPILE = "-I${okteta}/include/KDE";
meta = with stdenv.lib; {
@ -31,6 +33,6 @@ stdenv.mkDerivation rec {
programing languages. It is based on KDevPlatform, KDE and Qt
libraries and is under development since 1998.
'';
homepage = http://www.kdevelop.org;
homepage = https://www.kdevelop.org;
};
}

View File

@ -0,0 +1,8 @@
diff -urN kdevelop-4.7.3.orig/po/CMakeLists.txt kdevelop-4.7.3/po/CMakeLists.txt
--- kdevelop-4.7.3.orig/po/CMakeLists.txt 2016-03-04 23:29:09.411886565 +0100
+++ kdevelop-4.7.3/po/CMakeLists.txt 2016-03-04 23:28:35.108451713 +0100
@@ -1,3 +1,4 @@
+cmake_policy(SET CMP0002 OLD)
find_package(Gettext REQUIRED)
if (NOT GETTEXT_MSGMERGE_EXECUTABLE)
MESSAGE(FATAL_ERROR "Please install msgmerge binary")

View File

@ -12,12 +12,13 @@ with stdenv.lib;
stdenv.mkDerivation rec {
name = "nano-${version}";
version = "2.5.0";
version = "2.5.3";
src = fetchurl {
url = "mirror://gnu/nano/${name}.tar.gz";
sha256 = "1vl9bim56k1b4zwc3icxp46w6pn6gb042j1h4jlz1jklxxpkwcpz";
sha256 = "1vhjrcydcfxqq1719vcsvqqnbjbq2523m00dhzag5vwzkc961c5j";
};
buildInputs = [ ncurses texinfo ] ++ optional enableNls gettext;
nativeBuildInputs = [ texinfo ] ++ optional enableNls gettext;
buildInputs = [ ncurses ];
outputs = [ "out" "info" ];
configureFlags = ''
--sysconfdir=/etc

View File

@ -24,6 +24,5 @@ stdenv.mkDerivation rec {
# The rest is GPL2 or later.
license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.linux;
maintainers = with stdenv.lib.maintainers; [ iyzsong ];
};
}

View File

@ -75,6 +75,7 @@ stdenv.mkDerivation rec {
postInstall = ''
mkdir -p $out/Applications
cp -r src/MacVim/build/Release/MacVim.app $out/Applications
rm -rf $out/MacVim.app
rm $out/bin/{Vimdiff,Vimtutor,Vim,ex,rVim,rview,view}

View File

@ -16,6 +16,15 @@ in
};
patches = [ ./paths-fix.patch ];
# fix build with glibc-2.23
postPatch = ''
sed 's/\<isinf(/std::isinf(/g' -i \
src/export/export_heightmap.cpp \
src/fab/types/bounds.cpp \
src/graph/hooks/meta.cpp \
src/ui/dialogs/resolution_dialog.cpp \
src/render/render_task.cpp
'';
buildInputs = [
libpng python3 (boost.override { python = python3; })
@ -32,6 +41,8 @@ in
qmake antimony.pro PREFIX=$out
'';
enableParallelBuilding = true;
meta = with stdenv.lib; {
description = "A computer-aided design (CAD) tool from a parallel universe";
homepage = "https://github.com/mkeeter/antimony";

View File

@ -11,12 +11,12 @@
assert stdenv ? glibc;
stdenv.mkDerivation rec {
version = "2.0.0";
version = "2.0.2";
name = "darktable-${version}";
src = fetchurl {
url = "https://github.com/darktable-org/darktable/releases/download/release-${version}/darktable-${version}.tar.xz";
sha256 = "1cbwvzqn3158cy7r499rdwipx7fpb30lrrvh6jy5a4xvpcjzbwnl";
sha256 = "0014j73sy956xqdhd4jrxvbamildqqadx8hmagrbiah8xda67skm";
};
buildInputs =
@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
meta = with stdenv.lib; {
description = "Virtual lighttable and darkroom for photographers";
homepage = http://www.darktable.org;
homepage = https://www.darktable.org;
license = licenses.gpl3Plus;
platforms = platforms.linux;
maintainers = [ maintainers.goibhniu maintainers.rickynils maintainers.flosse ];

View File

@ -3,42 +3,222 @@
, libgphoto2, libjpeg, libkdcraw, libkexiv2, libkipi, libpgf, libtiff
, libusb1, liblqr1, marble, mysql, opencv, perl, phonon, pkgconfig
, qca2, qimageblitz, qjson, qt4, soprano
# Optional build time dependencies
, baloo, doxygen, kfilemetadata
, lcms2
, kfaceSupport ? true, libkface ? null
, kgeomapSupport ? true, libkgeomap ? null
, libxslt
# Plugins optional build time dependencies
, gdk_pixbuf, imagemagick
, libgpod, libksane, libkvkontakte
, qt_gstreamer1 /*qt_soap, <https://github.com/commontk/QtSOAP> herqq <http://www.herqq.org> -> is missing its av part.*/
/*qt_koauth <http://gitorious.org/kqoauth>*/
# Supplementary packages required only by the wrapper.
, bash, kde_runtime, kde_baseapps, makeWrapper, oxygen_icons
, phonon_backend_vlc /*phonon_backend_gstreamer,*/
, ffmpegthumbs /*mplayerthumbs*/
, runCommand, shared_mime_info, writeScriptBin
}:
stdenv.mkDerivation rec {
name = "digikam-4.12.0";
let
version = "4.12.0";
pName = "digikam-${version}";
src = fetchurl {
url = "http://download.kde.org/stable/digikam/${name}.tar.bz2";
sha256 = "081ldsaf3frf5khznjd3sxkjmi4dyp6w6nqnc2a0agkk0kxkl10m";
build = stdenv.mkDerivation rec {
name = "digikam-build-${version}";
src = fetchurl {
url = "http://download.kde.org/stable/digikam/${pName}.tar.bz2";
sha256 = "081ldsaf3frf5khznjd3sxkjmi4dyp6w6nqnc2a0agkk0kxkl10m";
};
nativeBuildInputs = [
automoc4 cmake gettext perl pkgconfig
] ++ [
# Optional
doxygen
];
buildInputs = [
boost eigen jasper kdelibs kdepimlibs lcms lensfun
libgphoto2 libjpeg libkdcraw libkexiv2 libkipi liblqr1 libpgf
libtiff marble mysql.lib opencv phonon qca2 qimageblitz qjson qt4
shared_desktop_ontologies soprano ]
# Optional build time dependencies
++ [
baloo
kfilemetadata
lcms2 ]
++ stdenv.lib.optional (kfaceSupport && null != libkface) [ libkface ]
++ stdenv.lib.optional (kgeomapSupport && null != libkgeomap) [ libkgeomap ] ++
[ libxslt ]
# Plugins optional build time dependencies
++ [
gdk_pixbuf imagemagick libgpod libksane
libkvkontakte
qt_gstreamer1 ];
# Make digikam find some FindXXXX.cmake
KDEDIRS="${marble}:${qjson}";
# Find kdepimlibs's upper case headers under `include/KDE`.
NIX_CFLAGS_COMPILE = "-I${kdepimlibs}/include/KDE";
# Help digiKam find libusb, otherwise gphoto2 support is disabled
cmakeFlags = [
"-DLIBUSB_LIBRARIES=${libusb1}/lib"
"-DLIBUSB_INCLUDE_DIR=${libusb1}/include/libusb-1.0"
"-DENABLE_BALOOSUPPORT=ON"
"-DENABLE_KDEPIMLIBSSUPPORT=ON"
"-DENABLE_LCMS2=ON" ]
++ stdenv.lib.optional (kfaceSupport && null == libkface) [ "-DDIGIKAMSC_COMPILE_LIBKFACE=ON" ]
++ stdenv.lib.optional (kgeomapSupport && null == libkgeomap) [ "-DDIGIKAMSC_COMPILE_LIBKGEOMAP=ON" ];
enableParallelBuilding = true;
meta = {
description = "Photo Management Program";
license = stdenv.lib.licenses.gpl2;
homepage = http://www.digikam.org;
maintainers = with stdenv.lib.maintainers; [ goibhniu viric urkud ];
inherit (kdelibs.meta) platforms;
};
};
nativeBuildInputs = [ automoc4 cmake gettext perl pkgconfig ];
buildInputs = [
boost eigen jasper kdelibs kdepimlibs lcms lensfun libgphoto2
libjpeg libkdcraw libkexiv2 libkipi liblqr1 libpgf libtiff marble
mysql.lib opencv phonon qca2 qimageblitz qjson qt4
shared_desktop_ontologies soprano
kdePkgs = [
build # digikam's own build
kdelibs kdepimlibs kde_runtime kde_baseapps libkdcraw oxygen_icons
/*phonon_backend_gstreamer*/ phonon_backend_vlc
ffmpegthumbs /*mplayerthumbs*/ shared_mime_info ]
# Optional build time dependencies
++ [
baloo kfilemetadata ]
++ stdenv.lib.optional (kfaceSupport && null != libkface) [ libkface ]
++ stdenv.lib.optional (kgeomapSupport && null != libkgeomap) [ libkgeomap ]
++ [
libkipi ]
# Plugins optional build time dependencies
++ [
libksane libkvkontakte
];
# Make digikam find some FindXXXX.cmake
KDEDIRS="${marble}:${qjson}";
# Help digiKam find libusb, otherwise gphoto2 support is disabled
cmakeFlags = [
"-DLIBUSB_LIBRARIES=${libusb1}/lib"
"-DLIBUSB_INCLUDE_DIR=${libusb1}/include/libusb-1.0"
"-DDIGIKAMSC_COMPILE_LIBKFACE=ON"
];
# TODO: It should be the responsability of these packages to add themselves to `KDEDIRS`. See
# <https://github.com/ttuegel/nixpkgs/commit/a0efeacc0ef2cf63bbb768bfb172a483307d080b> for
# a practical example.
# IMPORTANT: Note that using `XDG_DATA_DIRS` here instead of `KDEDIRS` won't work properly.
KDEDIRS = with stdenv.lib; concatStrings (intersperse ":" (map (x: "${x}") kdePkgs));
enableParallelBuilding = true;
sycocaDirRelPath = "var/lib/kdesycoca";
sycocaFileRelPath = "${sycocaDirRelPath}/${pName}.sycoca";
sycoca = runCommand "${pName}" {
name = "digikam-sycoca-${version}";
nativeBuildInputs = [ kdelibs ];
dontPatchELF = true;
dontStrip = true;
} ''
# Make sure kbuildsycoca4 does not attempt to write to user home directory.
export HOME=$PWD
export KDESYCOCA="$out/${sycocaFileRelPath}"
mkdir -p $out/${sycocaDirRelPath}
export XDG_DATA_DIRS=""
export KDEDIRS="${KDEDIRS}"
kbuildsycoca4 --noincremental --nosignal
'';
replaceExeListWithWrapped =
let f = exeName: ''
rm -f "$out/bin/${exeName}"
makeWrapper "${build}/bin/${exeName}" "$out/bin/${exeName}" \
--set XDG_DATA_DIRS "" \
--set KDEDIRS "${KDEDIRS}" \
--set KDESYCOCA "${sycoca}/${sycocaFileRelPath}"
'';
in
with stdenv.lib; exeNameList: concatStrings (intersperse "\n" (map f exeNameList));
in
with stdenv.lib;
/*
Final derivation
----------------
- Create symlinks to our original build derivation items.
- Wrap specific executables so that they know of the appropriate
sycoca database, `KDEDIRS` to use and block any interference
from `XDG_DATA_DIRS` (only `dnginfo` is not wrapped).
*/
runCommand "${pName}" {
inherit build;
inherit sycoca;
nativeBuildInputs = [ makeWrapper ];
buildInputs = kdePkgs;
dontPatchELF = true;
dontStrip = true;
meta = {
description = "Photo Management Program";
license = stdenv.lib.licenses.gpl2;
homepage = http://www.digikam.org;
maintainers = with stdenv.lib.maintainers; [ goibhniu viric urkud ];
maintainers = with stdenv.lib.maintainers; [ /*jraygauthier*/ ];
inherit (kdelibs.meta) platforms;
};
}
} ''
pushd $build > /dev/null
for d in `find . -maxdepth 1 -name "*" -printf "%f\n" | tail -n+2`; do
mkdir -p $out/$d
for f in `find $d -maxdepth 1 -name "*" -printf "%f\n" | tail -n+2`; do
ln -s "$build/$d/$f" "$out/$d/$f"
done
done
popd > /dev/null
${replaceExeListWithWrapped [ "cleanup_digikamdb" "digitaglinktree" "digikam" "dngconverter"
"expoblending" "photolayoutseditor" "scangui" "showfoto" ]}
''
/*
TODO
----
### Useful ###
- Per lib `KDELIBS` environment variable export. See above in-code TODO comment.
- Missing optional `qt_soap` or `herqq` (av + normal package) dependencies. Those are not
yet (or not fully) packaged in nix. Mainly required for upnp export.
- Possibility to use the `phonon_backend_gstreamer` with its own user specified set of backend.
- Allow user to disable optional features or dependencies reacting properly.
- Compile `kipiplugins` as a separate package (so that it can be used by other kde packages
and so that this package's build time is reduced).
### Not so useful ###
- Missing optional `qt_koauth` (not packaged in nix).
- Missing optional `libmediawiki` (not packaged in nix)..
- For some reason the cmake build does not detect `libkvkontakte`. Fix this.
- Possibility to use `mplayerthumbs` thumbnail creator backend. In digikam dev docs,
it is however suggested to use `ffmpegthumbs`. Maybe we should stick to it.
*/

View File

@ -3,10 +3,10 @@
stdenv.mkDerivation rec {
name = "simple-scan-${version}";
version = "3.19.91";
version = "3.19.92";
src = fetchurl {
sha256 = "1c5glf5vxgld41w4jxfqcv17q76qnh43fawpv33hncgh8d283xkf";
sha256 = "1zz6y4cih1v0npxjfxvnqz3bz7i5aripdsfy0hg9mhr1f4r0ig19";
url = "https://launchpad.net/simple-scan/3.19/${version}/+download/${name}.tar.xz";
};

View File

@ -6,7 +6,7 @@ stdenv.mkDerivation {
inherit boost;
src = fetchurl {
url = http://d4x.krasu.ru/files/d4x-2.5.7.1.tar.bz2;
url = http://pkgs.fedoraproject.org/repo/pkgs/d4x/d4x-2.5.7.1.tar.bz2/68d6336c3749a7caabb0f5a5f84f4102/d4x-2.5.7.1.tar.bz2;
sha256 = "1i1jj02bxynisqapv31481sz9jpfp3f023ky47spz1v1wlwbs13m";
};

View File

@ -18,11 +18,11 @@ in
pythonPackages.buildPythonApplication rec {
name = "electrum-${version}";
version = "2.6.1";
version = "2.6.2";
src = fetchurl {
url = "https://download.electrum.org/${version}/Electrum-${version}.tar.gz";
sha256 = "14q6y1hwzki56nfhd3nfbxid07d5fv0pgmklvcf7yxjmpdxrg0iq";
sha256 = "1wvzlx9aj88z01vljhyg3v67zsk2iz18r58727pdq7h94vwwjc86";
};
propagatedBuildInputs = with pythonPackages; [
@ -55,6 +55,11 @@ pythonPackages.buildPythonApplication rec {
pyrcc4 icons.qrc -o gui/qt/icons_rc.py
'';
doCheck = true;
checkPhase = ''
$out/bin/electrum help >/dev/null
'';
meta = with stdenv.lib; {
description = "Bitcoin thin-client";
longDescription = ''

View File

@ -24,6 +24,7 @@ python3Packages.buildPythonApplication rec {
urwid
pkginfo
];
buildInputs = with python3Packages; [ setuptools_scm ];
meta = with stdenv.lib; {
homepage = http://lostpackets.de/khal/;

View File

@ -1,28 +1,29 @@
{ stdenv, fetchurl, automake, autoconf, libtool, pkgconfig, libzen, libmediainfo, wxGTK, desktop_file_utils, libSM, imagemagick }:
{ stdenv, fetchurl, autoreconfHook, pkgconfig, libzen, libmediainfo, wxGTK
, desktop_file_utils, libSM, imagemagick }:
stdenv.mkDerivation rec {
version = "0.7.82";
version = "0.7.83";
name = "mediainfo-gui-${version}";
src = fetchurl {
url = "http://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
sha256 = "0ivvmxx93aldfbms6wg46x9npghg304j2zxl5i70m710gybjr232";
sha256 = "0d8mph9lbg2lw0ccg1la0kqhbisra8q9rzn195lncch5cia5zyg7";
};
buildInputs = [ automake autoconf libtool pkgconfig libzen libmediainfo wxGTK desktop_file_utils libSM imagemagick ];
nativeBuildInputs = [ autoreconfHook pkgconfig ];
buildInputs = [ libzen libmediainfo wxGTK desktop_file_utils libSM
imagemagick ];
sourceRoot = "./MediaInfo/Project/GNU/GUI/";
preConfigure = "sh autogen.sh";
meta = {
meta = with stdenv.lib; {
description = "Supplies technical and tag information about a video or audio file (GUI version)";
longDescription = ''
MediaInfo is a convenient unified display of the most relevant technical
and tag data for video and audio files.
'';
homepage = http://mediaarea.net/;
license = stdenv.lib.licenses.bsd2;
platforms = stdenv.lib.platforms.linux;
maintainers = [ stdenv.lib.maintainers.devhell ];
license = licenses.bsd2;
platforms = platforms.linux;
maintainers = [ maintainers.devhell ];
};
}

View File

@ -1,19 +1,19 @@
{ stdenv, fetchurl, automake, autoconf, libtool, pkgconfig, libzen, libmediainfo, zlib }:
{ stdenv, fetchurl, autoreconfHook, pkgconfig, libzen, libmediainfo, zlib }:
stdenv.mkDerivation rec {
version = "0.7.82";
version = "0.7.83";
name = "mediainfo-${version}";
src = fetchurl {
url = "http://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
sha256 = "0ivvmxx93aldfbms6wg46x9npghg304j2zxl5i70m710gybjr232";
sha256 = "0d8mph9lbg2lw0ccg1la0kqhbisra8q9rzn195lncch5cia5zyg7";
};
buildInputs = [ automake autoconf libtool pkgconfig libzen libmediainfo zlib ];
nativeBuildInputs = [ autoreconfHook pkgconfig ];
buildInputs = [ libzen libmediainfo zlib ];
sourceRoot = "./MediaInfo/Project/GNU/CLI/";
configureFlags = [ "--with-libmediainfo=${libmediainfo}" ];
preConfigure = "sh autogen.sh";
meta = with stdenv.lib; {
description = "Supplies technical and tag information about a video or audio file";

View File

@ -1,7 +1,7 @@
From 73ff28c3ee5b737303871268a5487db0fcffc0f6 Mon Sep 17 00:00:00 2001
From 0be3198cccf753226758684955f49a32d8d920c0 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Wed, 17 Feb 2016 14:37:31 +0300
Subject: [PATCH 1/2] Don't use static library
Subject: [PATCH] Don't use static library
---
octoprint_m3dfio/__init__.py | 67 +-----------------------------------------
@ -9,23 +9,23 @@ Subject: [PATCH 1/2] Don't use static library
2 files changed, 5 insertions(+), 68 deletions(-)
diff --git a/octoprint_m3dfio/__init__.py b/octoprint_m3dfio/__init__.py
index 5e5369b..9f59768 100644
index a2ca533..43f178a 100644
--- a/octoprint_m3dfio/__init__.py
+++ b/octoprint_m3dfio/__init__.py
@@ -764,72 +764,7 @@ class M3DFioPlugin(
@@ -793,72 +793,7 @@ class M3DFioPlugin(
# Set file locations
self.setFileLocations()
- # Check if running on Linux
- if platform.uname()[0].startswith("Linux") :
-
- # Check if running on a Raspberry Pi
- # Check if running on a Raspberry Pi 1
- if platform.uname()[4].startswith("armv6l") and self.getCpuHardware() == "BCM2708" :
-
- # Set shared library
- self.sharedLibrary = ctypes.cdll.LoadLibrary(self._basefolder.replace('\\', '/') + "/static/libraries/preprocessor_arm1176jzf-s.so")
-
- # Otherwise check if running on a Raspberry Pi 2
- # Otherwise check if running on a Raspberry Pi 2 or Raspberry Pi 3
- elif platform.uname()[4].startswith("armv7l") and self.getCpuHardware() == "BCM2709" :
-
- # Set shared library
@ -87,7 +87,7 @@ index 5e5369b..9f59768 100644
if self.sharedLibrary :
diff --git a/shared library source/Makefile b/shared library source/Makefile
index 4062a91..89dab71 100644
index 9d015a1..a24f134 100644
--- a/shared library source/Makefile
+++ b/shared library source/Makefile
@@ -58,13 +58,15 @@ ifeq ($(TARGET_PLATFORM), OSX64)
@ -109,5 +109,5 @@ index 4062a91..89dab71 100644
clean:
rm -f ../octoprint_m3dfio/static/libraries/$(PROG)
--
2.7.0
2.7.1

View File

@ -8,13 +8,13 @@ in {
m3d-fio = buildPlugin rec {
name = "M3D-Fio-${version}";
version = "0.28.2";
version = "0.29";
src = fetchFromGitHub {
owner = "donovan6000";
repo = "M3D-Fio";
rev = "V${version}";
sha256 = "1fwy6xmbid89rn7w7v779wb34gmfzc1fkggv3im1r7a7jrzph6nx";
sha256 = "17jyr7qf9psq3xcckk1zjhaw0h8a0mh3v8lcv9vgqzni27kq9pnb";
};
patches = [

View File

@ -8,7 +8,6 @@ buildPythonApplication rec {
homepage = "http://ranger.nongnu.org/";
license = stdenv.lib.licenses.gpl3;
platforms = stdenv.lib.platforms.unix;
maintainers = with stdenv.lib.maintainers; [ iyzsong ];
};
src = fetchurl {

View File

@ -40,5 +40,6 @@ stdenv.mkDerivation rec {
description = "An international dictionary supporting fuzzy and glob style matching";
license = stdenv.lib.licenses.lgpl3;
maintainers = with stdenv.lib.maintainers; [qknight];
broken = true;
};
}

View File

@ -183,7 +183,7 @@ let
configurePhase = ''
# Precompile .pyc files to prevent race conditions during build
python -m compileall -q -f . || : # ignore errors
python -m compileall -q -f . > /dev/null 2>&1 || : # ignore errors
# This is to ensure expansion of $out.
libExecPath="${libExecPath}"

View File

@ -1,18 +1,18 @@
# This file is autogenerated from update.sh in the parent directory.
{
beta = {
sha256 = "1xc2npbc829nxria1j37kxyy95jkalkkphxgv24if0ibn62lrzd4";
sha256bin64 = "1arm15g3vmm3zlvcql3qylw1fhrn5ddzl2v8mkpb3a251m425dsi";
version = "49.0.2623.75";
sha256 = "1lgpjnjhy3idha5b6wp31kdk6knic96dmajyrgn1701q3mq81g1i";
sha256bin64 = "1yb3rk38zfgjzka0aim1xc4r0qaz2qkwaq06mjifpkszmfffhyd0";
version = "50.0.2661.26";
};
dev = {
sha256 = "04j0nyz20gi7vf1javbw06wrqpkfw6vg024i3wkgx42hzd6hjgw4";
sha256bin64 = "12ff4q615rwakgpr9v84p55maasqb4vg61s89vgxrlsgqrmkahg4";
version = "50.0.2661.11";
sha256 = "0z9m1mv6pv43y3ccd0nzqg5f9q8qxc8mlmy9y3dc9kqpvmqggnvp";
sha256bin64 = "0khsxci970vclfg24b7m8w1jqfkv5rzswgwa62b4r7jzrglx1azj";
version = "50.0.2661.18";
};
stable = {
sha256 = "1xc2npbc829nxria1j37kxyy95jkalkkphxgv24if0ibn62lrzd4";
sha256bin64 = "01qi5jmlmdpy6icc4y51bn5a063mxrnkncg3pbmbl4r02vqca5jh";
version = "49.0.2623.75";
sha256 = "0kbph3l964bh7cb9yf8nydjaxa20yf8ls5a2vzsj8phz7n20z3f9";
sha256bin64 = "1k6nhccdqzzzicwi07nldqfsdlic65i2xfyb7dbasbbg9zl3s9yw";
version = "49.0.2623.87";
};
}

View File

@ -1,3 +1,4 @@
#!/bin/sh -e
cd "$(dirname "$0")"
sp="$(nix-build -Q --no-out-link source/update.nix -A update)"
cat "$sp" > source/sources.nix

View File

@ -4,185 +4,187 @@
# ruby generate_sources.rb > sources.nix
{
version = "44.0.2";
version = "45.0";
sources = [
{ locale = "ach"; arch = "linux-i686"; sha256 = "2d0ab9fba584576d67ccb600339efeb5ad7aac1629b2d7865e121825b1a5a6d5"; }
{ locale = "ach"; arch = "linux-x86_64"; sha256 = "188b9aab64ab1beda84dbe7b36d899210472a3e445dd827b64ca7083ae3c0b32"; }
{ locale = "af"; arch = "linux-i686"; sha256 = "e6b5fb28e5ad03240f0e156c81db1df16bfaf99a946ffab9672c06d8561de9c3"; }
{ locale = "af"; arch = "linux-x86_64"; sha256 = "c2856308c9e87bf82f621c5d4c96e9c5a70e5ebb86a8e4ba8ecb4d08c1ae98ec"; }
{ locale = "an"; arch = "linux-i686"; sha256 = "f138b17a230e9b42b334d3900bebf23156fe1dec1f4ec75f9a3b94348523e241"; }
{ locale = "an"; arch = "linux-x86_64"; sha256 = "82d24b07dc8d887837e8fbd610c2feb1ff4975917d8a19836ec0d0db56522de8"; }
{ locale = "ar"; arch = "linux-i686"; sha256 = "b530e58161331bff3222083298ddc5af0055c6b3337b58b1a4eb1d5d4e348d62"; }
{ locale = "ar"; arch = "linux-x86_64"; sha256 = "67c0e4ce7dfe54d0e4fedb168342ea86a82458e2d3ce6aca78b4497f4e813bfd"; }
{ locale = "as"; arch = "linux-i686"; sha256 = "f17e991e97e85b981c3191a0becad6df457a29b7042d31a667fd227dadc24e80"; }
{ locale = "as"; arch = "linux-x86_64"; sha256 = "2d955443b785a65d2f9f914232d521aeb9082b4dead8fedc89cfa29329ab8e2a"; }
{ locale = "ast"; arch = "linux-i686"; sha256 = "c9e2784047b58eddfd72c1e56964eea8ac098240436d029665bc940c7b8d8f8d"; }
{ locale = "ast"; arch = "linux-x86_64"; sha256 = "4bd5cc7c34f0a1fc1e2e899942c4ebec6bdab2fbd9e3d331ecc0c67a6f8c16e4"; }
{ locale = "az"; arch = "linux-i686"; sha256 = "1789f6c5524314df239e4b4beb677adf48ce926a097128e053b352067d13016f"; }
{ locale = "az"; arch = "linux-x86_64"; sha256 = "4881ccb7521512b4275faa2598efda6bbcc3d7838b6200e79c8fcae358d32c23"; }
{ locale = "be"; arch = "linux-i686"; sha256 = "e9e31e92e0732188f6c4494023de260e5b64e97c56ff07857b290355c50e25f4"; }
{ locale = "be"; arch = "linux-x86_64"; sha256 = "00ef0cea013cdb8606d8786bb5a21e502a6054ab57b2fad4d24161c47768f418"; }
{ locale = "bg"; arch = "linux-i686"; sha256 = "6428fa1d4f2bd0b703f207a1571e425f8076438954f955f60c0e8c1525743823"; }
{ locale = "bg"; arch = "linux-x86_64"; sha256 = "fc156d3d76582c95eb6a0a7ee88dbdbd6c99d46ca42b011e1d789b0552bb5885"; }
{ locale = "bn-BD"; arch = "linux-i686"; sha256 = "d0b69158e5ce85eec29dc70c4942bfc76eaf2d8e3359c45de5783d39fe1ccaf0"; }
{ locale = "bn-BD"; arch = "linux-x86_64"; sha256 = "928575b759e4ae89d3e5ee475ffa18c69e945846981102d540de01c9bd87582e"; }
{ locale = "bn-IN"; arch = "linux-i686"; sha256 = "a92a902e4380ddda37b8e70922e91ee029d47f866adea53220dd76182c52b596"; }
{ locale = "bn-IN"; arch = "linux-x86_64"; sha256 = "022b9ff7141cd89df35477d357df74556bc4a24639141d21111eccfbf8e2f98c"; }
{ locale = "br"; arch = "linux-i686"; sha256 = "c398c00b98edcaa2618363637075ccf749a4d3567dfdae070b4b0cbe23832f56"; }
{ locale = "br"; arch = "linux-x86_64"; sha256 = "60f471fdf1b71072751396049f12a198c73d11892ec69fc142f925a12c6515f4"; }
{ locale = "bs"; arch = "linux-i686"; sha256 = "d9e3c1b5c94ad207071cea86295ef3f98d4bd9201e896f6b9d67a2e475ea2898"; }
{ locale = "bs"; arch = "linux-x86_64"; sha256 = "2ea3bb1c14a849b5039b633963687629839174ea886d3f8314f67eddafa2b16b"; }
{ locale = "ca"; arch = "linux-i686"; sha256 = "bf1c1c3aaa900d66c4684cf48623bb0c9e0313cd919ad0e67e8a2e3ca5987aa6"; }
{ locale = "ca"; arch = "linux-x86_64"; sha256 = "30c0217722c599ed8fc0e713e0b763a01dc0da37dc2f290a2a4d02cb2a86b6a3"; }
{ locale = "cs"; arch = "linux-i686"; sha256 = "5ebd809827cdc85da0e6c973855c60426ab98e2cb898c030acd403577d3bb78a"; }
{ locale = "cs"; arch = "linux-x86_64"; sha256 = "a1d55b7c54fd7eb89bcf5dbdadcaea0f5d2da7110a090c424c52a55ae23150f2"; }
{ locale = "cy"; arch = "linux-i686"; sha256 = "55df045619bbe01af6f33c6cd563d6097b9c9023ab9133fa7def0800cc9aec83"; }
{ locale = "cy"; arch = "linux-x86_64"; sha256 = "2ddb8bcd515aad4ddb029cf4e5c49e771aa1da14394924c4ec532c5125b7ca7b"; }
{ locale = "da"; arch = "linux-i686"; sha256 = "b322bef3e95b24337f294b2786fc5a819d954adb43f98dee69674d41fd234b5c"; }
{ locale = "da"; arch = "linux-x86_64"; sha256 = "3e5164351808ef2f8f4e9cea6bb1121c4d3394de56536d17869a56df3b783d3b"; }
{ locale = "de"; arch = "linux-i686"; sha256 = "a404bf7c19dbc65adea8872b8bd080a17417bc0f1ffa3015513d86750b2903a9"; }
{ locale = "de"; arch = "linux-x86_64"; sha256 = "3590e100bf84f2734d1b3c81508d8fa137fd100bdd1e764ae5da1f88602d5b9d"; }
{ locale = "dsb"; arch = "linux-i686"; sha256 = "c4be1a5cc431f3aeb26694bfd0749da0dfc85c119f75b551e69083a384042833"; }
{ locale = "dsb"; arch = "linux-x86_64"; sha256 = "36f451bb07af47aff7c930a2810ef628e3382f92560efbe396133735275f7075"; }
{ locale = "el"; arch = "linux-i686"; sha256 = "736ee0dffe7c5dc0d5abc7755a83e29da718901252034ee503775fc3f11e31c1"; }
{ locale = "el"; arch = "linux-x86_64"; sha256 = "1638e1fd69d1887bbfd2de95ffe7945f52934055f8e15eb919d9ccac930959e0"; }
{ locale = "en-GB"; arch = "linux-i686"; sha256 = "1f9c8404fd01c1cac530c0e2b1fb488a2b4f7a02d8c2f0e568e0db050dc66f18"; }
{ locale = "en-GB"; arch = "linux-x86_64"; sha256 = "4f7491b919ca7a0563cd3444bd4a1abf48a4448ccdd743c5b5eb58584e5b1e94"; }
{ locale = "en-US"; arch = "linux-i686"; sha256 = "abe3e5d23cf557ee81e7064d6d1b2d3a8f6b6e1a5f80947fc7229f0b2b631380"; }
{ locale = "en-US"; arch = "linux-x86_64"; sha256 = "a4b439e28274feb4bf5494ba180143e6b8617428a63d11fa2fd0e650dda41908"; }
{ locale = "en-ZA"; arch = "linux-i686"; sha256 = "9de2931e926e0b0667f6916283a7ef019d1c067b29d6bd5b4b903fdf87ad9c17"; }
{ locale = "en-ZA"; arch = "linux-x86_64"; sha256 = "6ada8b6a9a2b19f9515a1aaf63ad66cf35a1ab5491fc8ffc86a17fe1378ab553"; }
{ locale = "eo"; arch = "linux-i686"; sha256 = "92db868c78ae49a8275d217327ca442ef6733b955ddc5b4940183c9a596da3de"; }
{ locale = "eo"; arch = "linux-x86_64"; sha256 = "2e8267fb43ba6b7636c98fe386c35ddb9032265565844dcbc90f3dba18a2bc05"; }
{ locale = "es-AR"; arch = "linux-i686"; sha256 = "6343bacb35c929c8f7c5cb554aa0e5f67100032c71bc24203b663409e45cbf40"; }
{ locale = "es-AR"; arch = "linux-x86_64"; sha256 = "0b5a07e745aab7d1e0bb8bcf0afe12ab71a88679024ef6e9edd53bab7518df7f"; }
{ locale = "es-CL"; arch = "linux-i686"; sha256 = "7288765c2222624e69b367ab83686c21a348330a8f26eff7c6ea8dca03a3aabf"; }
{ locale = "es-CL"; arch = "linux-x86_64"; sha256 = "543778259a5d7c4198c8125b72f9e66e9ae98b398bc3b07ac0e103f07ab7ef2c"; }
{ locale = "es-ES"; arch = "linux-i686"; sha256 = "c1aec91c45591eaa6df8b15ba13ea58d15ab2cce20361719ea2549896d26ea1f"; }
{ locale = "es-ES"; arch = "linux-x86_64"; sha256 = "ee3b11c04ca280ff77e3cedd3dc2040b7b1722384639c02507bedc927c7b558b"; }
{ locale = "es-MX"; arch = "linux-i686"; sha256 = "8adb9435f57da461150d8b283161760683e46b068eaade916119c2240f0a9c66"; }
{ locale = "es-MX"; arch = "linux-x86_64"; sha256 = "b624c4345794a22a7c63b4f6b7a1ed6f52472fa5cba4173f69f3c12ee3b4cbe1"; }
{ locale = "et"; arch = "linux-i686"; sha256 = "efb6c6753e8a9d8174e8bd1ae7cbf3f75b479e5da3ebe07dbbbb4ac140e60eb9"; }
{ locale = "et"; arch = "linux-x86_64"; sha256 = "c84bb0597fa14e8a7a2d086f24d71ad2f3c04b3fca794b76977d1a4cb1aea479"; }
{ locale = "eu"; arch = "linux-i686"; sha256 = "d116553c492ec41b811befb35393553b9174da3960034ce5106558befbf9728a"; }
{ locale = "eu"; arch = "linux-x86_64"; sha256 = "16c922f152d5e14c46277e23d30cfe0792c8e9828b8862df603aeff242c7ec96"; }
{ locale = "fa"; arch = "linux-i686"; sha256 = "744ad5a8cb4473d502d1db50b6bf343e23525927b3a982677dd8a68aea111b3f"; }
{ locale = "fa"; arch = "linux-x86_64"; sha256 = "968fea07386b96215af400524062447245fa038766caf0b133c932db6f105077"; }
{ locale = "ff"; arch = "linux-i686"; sha256 = "0fdf06aa42cbd4d031fdad74d8ac9d6056708fc783180d72c5806cc45c5b8eec"; }
{ locale = "ff"; arch = "linux-x86_64"; sha256 = "bfb65ec25192288b2f04f94bdcc9ce36a40a27c8a1f35f728f932c071b6756ce"; }
{ locale = "fi"; arch = "linux-i686"; sha256 = "334c121cbd9a1469996ebc5535d838e3fecfcc419861cc70d5cdeb0cd584d5f5"; }
{ locale = "fi"; arch = "linux-x86_64"; sha256 = "44883a9b819a24bef03c3322681e1b9f3fe61779e382a740900dfc16a5f7db06"; }
{ locale = "fr"; arch = "linux-i686"; sha256 = "cd196dff293aabc39156e82deb5163e139a4b0173de92a2ba72df49bb4b0afe5"; }
{ locale = "fr"; arch = "linux-x86_64"; sha256 = "77da207f48d7af908cb5e95767e61a2e6c04f1851e55430820ff8207da172361"; }
{ locale = "fy-NL"; arch = "linux-i686"; sha256 = "39e8da569f2a6f67abac7782a938a906c810f8474fbb2c799dd26fb846c82707"; }
{ locale = "fy-NL"; arch = "linux-x86_64"; sha256 = "44dbf644b3f96dd607e5c88eece8aaafd61ec42af9f7ba4c6ed06a272a45fa4a"; }
{ locale = "ga-IE"; arch = "linux-i686"; sha256 = "783532acf3967f94232f42c9cd559e288db499c0ff74776543b59d71d281a74c"; }
{ locale = "ga-IE"; arch = "linux-x86_64"; sha256 = "39509082dbeb935f481e95d6038943a17c5053f7001fbf71bdb0edea536adb9d"; }
{ locale = "gd"; arch = "linux-i686"; sha256 = "dd73e1bf159f3d437d69306c5daeb7a06c951d6c5841315363c354f9aa1570c5"; }
{ locale = "gd"; arch = "linux-x86_64"; sha256 = "a2fb4aa1ba4a50bdb308e8c12090158c5e040ae85617171786e93852d4f48de5"; }
{ locale = "gl"; arch = "linux-i686"; sha256 = "8ac3fd13e0f173aa1dfffd44c91511bd457c6a751daa978fbaae3f9901427cae"; }
{ locale = "gl"; arch = "linux-x86_64"; sha256 = "cf52827a18b400f8c3e426b00e2984bd5835014f3e97e9c1279f0b285ca5a5dc"; }
{ locale = "gu-IN"; arch = "linux-i686"; sha256 = "1ef44836085733b52c338fdcaea78e7df5f78a0f0f470b9de3ac7b13e3ec4844"; }
{ locale = "gu-IN"; arch = "linux-x86_64"; sha256 = "374280216142897536979fff6f876253caaf0eeb12a3d12d17b013e7ab3ba722"; }
{ locale = "he"; arch = "linux-i686"; sha256 = "1dcca6ae796da1a1317a4f094f06369242cdf7c0f8ce3df7c9fabd22910996ab"; }
{ locale = "he"; arch = "linux-x86_64"; sha256 = "e032513a673ba091207996b8a6a6b9da6ef05d5c080a93ed326fc4ac4ca6976a"; }
{ locale = "hi-IN"; arch = "linux-i686"; sha256 = "2057287b406513a332d162f03f75ef7ff4c83834809163c8b870d9e5ab3f8cdf"; }
{ locale = "hi-IN"; arch = "linux-x86_64"; sha256 = "8d19043416484c382fc9caec5dff4914fbc28feefd41a089591ef2b21f822a43"; }
{ locale = "hr"; arch = "linux-i686"; sha256 = "995a6dd027a5a6b2123c62b74f524db53940e2c8fa6c7254dc41dca236f7889b"; }
{ locale = "hr"; arch = "linux-x86_64"; sha256 = "4410e7d1cbce028de083b82ee68f442d27c2219544ec1be72ef2c274cb7c445a"; }
{ locale = "hsb"; arch = "linux-i686"; sha256 = "0dcb0de11e35475cab33e11b08b88ff766915d7d98ceeb466a0fee90883ebaed"; }
{ locale = "hsb"; arch = "linux-x86_64"; sha256 = "1695167eea386aec4fca23bb0bf4e5b83876a22f8c584f4e81886be229e9a43b"; }
{ locale = "hu"; arch = "linux-i686"; sha256 = "31026a26c9fa9b3777c2f9dd1d55da7e0204e4d98586f887b67588ccb86c3843"; }
{ locale = "hu"; arch = "linux-x86_64"; sha256 = "82d8fbe932765f100a116b6d572035297be2f027b4f0e0ba84ef88cb4b651000"; }
{ locale = "hy-AM"; arch = "linux-i686"; sha256 = "864c112f13628bd9bc715a6a405dc92c3f8027b0e505722d819b84775fb27066"; }
{ locale = "hy-AM"; arch = "linux-x86_64"; sha256 = "dddd71e651056c373225baab9bb190810f8ed6849abfa76587fcd05cc5060d89"; }
{ locale = "id"; arch = "linux-i686"; sha256 = "3425906d6513d3e06286b9b3c62c30d702a47a3d7a31638a58f926e2fa4a254f"; }
{ locale = "id"; arch = "linux-x86_64"; sha256 = "095d970add8bf54fc2fb2581532013f4792f648b58fa12d49a6a859f26a0e579"; }
{ locale = "is"; arch = "linux-i686"; sha256 = "f3687eb0e7ce24e14621345543abdf2b92435466ededc98a4ec4a117c4593c3c"; }
{ locale = "is"; arch = "linux-x86_64"; sha256 = "dbac8774c64e6c978a3eb900cf61d85a210d0c39c28df4a21e4295ba5febd0ea"; }
{ locale = "it"; arch = "linux-i686"; sha256 = "62091c6f5214f4717462d9e2f6bacd7f30417b7e714de3fdec6fc2f703970eb7"; }
{ locale = "it"; arch = "linux-x86_64"; sha256 = "480b9ffd4326a9a2e2002510027a15d4fdaf8ba1ea023ee6e55b2aa78b119a6c"; }
{ locale = "ja"; arch = "linux-i686"; sha256 = "ef143bf31fa67cab3ccafc0083d81ffa8997e3365312b12312623755eb24f48d"; }
{ locale = "ja"; arch = "linux-x86_64"; sha256 = "f74808de8fb999dceb067b3fda64e891c37bde7190e9eff68f1693f5b5feae0d"; }
{ locale = "kk"; arch = "linux-i686"; sha256 = "a532d49011b632aa83f6b881b39c74bcb66fab0237e3e4f8682445aa0a053d4c"; }
{ locale = "kk"; arch = "linux-x86_64"; sha256 = "7f32ee329e8281e89472b092248a26e1d38089bdc9830d2d1d0b1af8230ca20b"; }
{ locale = "km"; arch = "linux-i686"; sha256 = "34ecf596b0870aca2db30513ef5d6522d86caf70fce38b23a7bff08c55551b69"; }
{ locale = "km"; arch = "linux-x86_64"; sha256 = "6e7efd621e941674038887d1e8d90c36d0ac06a095386caa01d228494228be14"; }
{ locale = "kn"; arch = "linux-i686"; sha256 = "062ebd6b27ef9094e65e60ad64be30470ed58eb2d92f247a87a781b97e0654d9"; }
{ locale = "kn"; arch = "linux-x86_64"; sha256 = "e88428b1cd2e1919336dda303d8795bd02e4967ba8c6d2830205f68fa4c528d0"; }
{ locale = "ko"; arch = "linux-i686"; sha256 = "6c43a7f86f908cccc7ca3a7ed45f95ea84b69e4a21ff1e1d58136ea19bf7bd2c"; }
{ locale = "ko"; arch = "linux-x86_64"; sha256 = "9db2bfd818d82ee0c9bc35b6fd651ad8fe80f8d73d51326fde25fc4c2aaa295c"; }
{ locale = "lij"; arch = "linux-i686"; sha256 = "be87fc2a6863f33f9ff9ad2990e1e6425a65002f2ee411a254dde80cbd5a31c4"; }
{ locale = "lij"; arch = "linux-x86_64"; sha256 = "9cfb239df8195cfa355bc8ddaf63accd865de21086c5bc3180b2ad9886445f3e"; }
{ locale = "lt"; arch = "linux-i686"; sha256 = "11e18e6baac8f31c62a301e8ee51056c707ca47332fbeb6f3492e8eaffa25c57"; }
{ locale = "lt"; arch = "linux-x86_64"; sha256 = "3bb4dca607abc4e08300dfa61667d2f2b06661f47cf0029d078e14fa4686d4b8"; }
{ locale = "lv"; arch = "linux-i686"; sha256 = "bc484992f230229ab4ab6d47fab9664f43341ad1202010f5dea91d2d78200c85"; }
{ locale = "lv"; arch = "linux-x86_64"; sha256 = "42bdc60ad7edf2ed3e82f765abfc3815f98095adc2988f8d809a8834eada63ef"; }
{ locale = "mai"; arch = "linux-i686"; sha256 = "628f0685185f91e695af5ce9a536d9263305cfd747683ef33dccd0c90f3e1bfb"; }
{ locale = "mai"; arch = "linux-x86_64"; sha256 = "688c33b159b4fcd23fb4c6d3a7f845d03929b4a8b02eaa2ebb93682b396c73a2"; }
{ locale = "mk"; arch = "linux-i686"; sha256 = "a59b2a8ee82513ef78f3509afc4dba75ec3128f0f42c657bbbfbad117b981b36"; }
{ locale = "mk"; arch = "linux-x86_64"; sha256 = "3058ff9ac581a65ee0713fe3707f8b98eace0f833b8e7b901fa397538e9503f0"; }
{ locale = "ml"; arch = "linux-i686"; sha256 = "43c80f530ad3eaf7c138e16b23b9eb32afc1f774374fe213f580cf68e4d0e245"; }
{ locale = "ml"; arch = "linux-x86_64"; sha256 = "43f061317f9eb5a174cd13539bb3972535b552113d38c05d9888e7a37346ef22"; }
{ locale = "mr"; arch = "linux-i686"; sha256 = "30c0ee68eadffcc95271f1e7c1c1b0151ee21ca3744fad61a723a9a6bfb751b0"; }
{ locale = "mr"; arch = "linux-x86_64"; sha256 = "d9dd27af41ca021f323499be556d208f69b706aff079c8d7392c7f19092705d8"; }
{ locale = "ms"; arch = "linux-i686"; sha256 = "adb5e1968c66378ff9b59dc57c00a2c953ad1f54f67e1bc40abc499bcf79653f"; }
{ locale = "ms"; arch = "linux-x86_64"; sha256 = "3e4b43a88b3aa2887673e1962fa4ccbd895640113e683c849a3c9733677e1fe1"; }
{ locale = "nb-NO"; arch = "linux-i686"; sha256 = "f4be0cff21abdc80fba10db2bf781fecfb4e503c70cb95a8b083c5f7123f8dc8"; }
{ locale = "nb-NO"; arch = "linux-x86_64"; sha256 = "e9b191268a6694805a5ba86559e798c9a4e29eae39a7f64dab92a925fb31611d"; }
{ locale = "nl"; arch = "linux-i686"; sha256 = "581c73084993be0bf1ab23bb468674d062fb98e99573d823e977a263b4cfaa91"; }
{ locale = "nl"; arch = "linux-x86_64"; sha256 = "3fd8929341ae048187379b7648ec8e008ace53e4a5f0af1421ecabcb5ad3bf61"; }
{ locale = "nn-NO"; arch = "linux-i686"; sha256 = "b2104d5895a727903f6a273888989887542ad9e61c998cc651bb24d64efc6cfd"; }
{ locale = "nn-NO"; arch = "linux-x86_64"; sha256 = "1bf582e66da985cbb01c22f865fc291196c55b14d2f84516f68f184ea842a664"; }
{ locale = "or"; arch = "linux-i686"; sha256 = "1ffbc776fb3ae030e6dedea009b71873bff57f9294e63331404b53e1ba36499c"; }
{ locale = "or"; arch = "linux-x86_64"; sha256 = "b988f433a238b2cb3766042d911a1f002a5f91a47dbed5b937f70cb59ed060d2"; }
{ locale = "pa-IN"; arch = "linux-i686"; sha256 = "6ba4941b5bef7b860194114c2704662a42f9f3007a0b634662e42f38c0aa601a"; }
{ locale = "pa-IN"; arch = "linux-x86_64"; sha256 = "0d9920d4b358cfdcf8cdf4b2d2e07ceb191709eee9dbae4c59f9dbfcfffbf0f5"; }
{ locale = "pl"; arch = "linux-i686"; sha256 = "e080fb35bf49f9eb2fc39a435a188164eedf2ea7a24f8e950d62567620a91954"; }
{ locale = "pl"; arch = "linux-x86_64"; sha256 = "cc37624f0c1e82d2de2048129f58e85fe8a518ee4b0ebdbee0a5205517602cf9"; }
{ locale = "pt-BR"; arch = "linux-i686"; sha256 = "d19bf65889c686cbb284e697e8ba1315b6ec004b57096725fb576898ef105346"; }
{ locale = "pt-BR"; arch = "linux-x86_64"; sha256 = "0d00d2d0bbc6045117c4df93045f70ebe0468e004504a06dfc508bfca6c6df1f"; }
{ locale = "pt-PT"; arch = "linux-i686"; sha256 = "5225afadf2ea62792376dfda1d2b3533d986f1ee3a281781a5be294b8883ac8b"; }
{ locale = "pt-PT"; arch = "linux-x86_64"; sha256 = "0c1d841ba80e32d51d41c99b551e68c6b591e97af4ccee4d7c7d6ef03f8707ea"; }
{ locale = "rm"; arch = "linux-i686"; sha256 = "2cc9200a132c967a7158f5422dad8f4b2d90dfc7e46ada305daebabc44806de8"; }
{ locale = "rm"; arch = "linux-x86_64"; sha256 = "0dff628773d4f2e24b767501b9c768586a27e82c0e8b259ef1cc676985ad0125"; }
{ locale = "ro"; arch = "linux-i686"; sha256 = "500142fe612fe6144a14ebaad486da04050940a755e205297473c1be6b9dc428"; }
{ locale = "ro"; arch = "linux-x86_64"; sha256 = "f3a57abec8553c8b9d8db9fb5600cd7b6e1189ebf0225df96608eaf2863e41b3"; }
{ locale = "ru"; arch = "linux-i686"; sha256 = "1266ed09db881af90794bef049cdfee777d7179026de8c0de2931275f3f288e9"; }
{ locale = "ru"; arch = "linux-x86_64"; sha256 = "0f1b44177633149aaa31574ba3cf343971bd4e11ac6b4bb92a5875b6a30a42af"; }
{ locale = "si"; arch = "linux-i686"; sha256 = "e027afd86b00379c12e014b8d0d11a05811c598f53490edf7070e7acccbf0d79"; }
{ locale = "si"; arch = "linux-x86_64"; sha256 = "518c19c5351a2c1bd05afe63e9d8c2a0be3a9cedccf7aa1d84d1af9de7ecf7fd"; }
{ locale = "sk"; arch = "linux-i686"; sha256 = "e3dcda7406d00166a601b77fbdf0b84181ba5372f760eb08d5476fe9d219caef"; }
{ locale = "sk"; arch = "linux-x86_64"; sha256 = "019c03ecd24f394b0ff76aff5cd9f0db017ffd3b8dd65388c4f5ee3188e77a6c"; }
{ locale = "sl"; arch = "linux-i686"; sha256 = "a88391cc29643277f9d8c58a205ac959af825326b61c16361d4def6f7da31235"; }
{ locale = "sl"; arch = "linux-x86_64"; sha256 = "fcf45e13a0bc543988495a83e5e96400707564d2ed4fcd0579219c999ee71e83"; }
{ locale = "son"; arch = "linux-i686"; sha256 = "a75e273e01df51ffbe2c8666545f1e6f4d00af373d7aac08978947d7afc1e5f4"; }
{ locale = "son"; arch = "linux-x86_64"; sha256 = "9f28df29d980e6c7467e99b2b81740cb078ce8e6896fe4e2a6b1473770e6bef5"; }
{ locale = "sq"; arch = "linux-i686"; sha256 = "2243773d7d38608e17233e1d98e4fc1ca19f40f27a3e87557ad7fbd958c080ba"; }
{ locale = "sq"; arch = "linux-x86_64"; sha256 = "c18faf9d8971c43db18fcc66329a85018a04e8cf4819c4843d826bc86414cadb"; }
{ locale = "sr"; arch = "linux-i686"; sha256 = "0cd5e6a3910923aed9a88fafd95bc11263de7359c38685e209212339bb2f50dc"; }
{ locale = "sr"; arch = "linux-x86_64"; sha256 = "1ec48c65323b15332932060ec5193908d89715736bd0abd88472dc05e639a62a"; }
{ locale = "sv-SE"; arch = "linux-i686"; sha256 = "6718eb3e71a3d4f5487b80bbd784fd61422345f94d3271f6de6f6feab9e2f6da"; }
{ locale = "sv-SE"; arch = "linux-x86_64"; sha256 = "5b356a6334d424b5e47ea4b1c32403a858ff5dc8727bbc0b2f72e6a29c9b625f"; }
{ locale = "ta"; arch = "linux-i686"; sha256 = "fdb4e36497a61af9badb848a067eff4e4dada7dfffefbfe6bb7266ad89a8707a"; }
{ locale = "ta"; arch = "linux-x86_64"; sha256 = "de5f0b871425412f9f261eff5b1abb3ddbd40f588647fd8e174e2d6c5ba17b90"; }
{ locale = "te"; arch = "linux-i686"; sha256 = "0cc82774a46580c9e2f890848f705b1dc4effac197a902f9d244f0b6f6258650"; }
{ locale = "te"; arch = "linux-x86_64"; sha256 = "65ceda67a572053dd4d9e15b9bd47c91364651736417414d4ca4a0a7ded9775a"; }
{ locale = "th"; arch = "linux-i686"; sha256 = "1c0084ed26218713c4606ab073bf09de888051e9dcc49652a87fb58209a8c614"; }
{ locale = "th"; arch = "linux-x86_64"; sha256 = "5a70e29d282961e27350d26cf164472fe51247db1d7d1228dca693423c32d0a6"; }
{ locale = "tr"; arch = "linux-i686"; sha256 = "f7fa2029a36eda63544beebb6534fc2f8432c87d7a8d08d4c8927275e659b686"; }
{ locale = "tr"; arch = "linux-x86_64"; sha256 = "1e3744f5908164e163818522fa902bd57edb62837b2b399983ea5a4ed487cda8"; }
{ locale = "uk"; arch = "linux-i686"; sha256 = "0f465eda0f7e87eef88bc17b3e6868ad90a270e6993d327fecca532637442df4"; }
{ locale = "uk"; arch = "linux-x86_64"; sha256 = "6530af36cfab509fff37519b435c7939110c000dbdd94000fe964283a14b1622"; }
{ locale = "uz"; arch = "linux-i686"; sha256 = "7ee5997bcb4915c3907cee90e350e3bc2b67965975faecffa738a728cf2e12e3"; }
{ locale = "uz"; arch = "linux-x86_64"; sha256 = "d7b34e36bcb423977a2a7667504c096730ca684c9f2e861b17e8f0174f5bb0d0"; }
{ locale = "vi"; arch = "linux-i686"; sha256 = "e9497a8eed98ec34b31e3b1ec7086a4d219121f0edf21fd8f6a01599afa41f12"; }
{ locale = "vi"; arch = "linux-x86_64"; sha256 = "b94fbaee83014b88490bf19cc37dbda87fb9260ed5879be3b688a2abbe709a87"; }
{ locale = "xh"; arch = "linux-i686"; sha256 = "d5a86db6b9f3bb5162a86f976cbbc01f542a924c05729eb54a2c24dabc711065"; }
{ locale = "xh"; arch = "linux-x86_64"; sha256 = "d765b2d324e89119fee522ad8972031c8727841c2fa2700d010be7d23633bbbc"; }
{ locale = "zh-CN"; arch = "linux-i686"; sha256 = "fb3bbc44952207f42112c291dccb82f02fbd23bba7b54b06a1047809d2bb18d2"; }
{ locale = "zh-CN"; arch = "linux-x86_64"; sha256 = "255d19959cb0e0efbcb2eeceb39b43bbb567ab2474af4da6675574a0110781e1"; }
{ locale = "zh-TW"; arch = "linux-i686"; sha256 = "cfc90ac621dc57d7eb922c564aa3a7d5ad7f2aacc95196606d34cba7b7e30d1a"; }
{ locale = "zh-TW"; arch = "linux-x86_64"; sha256 = "ff119be821acb8f99a485a60de506123c76a7a3a13ac678576248f97ff1ab882"; }
{ locale = "ach"; arch = "linux-i686"; sha256 = "795f7db97ecbc58cf3b0f599375d5ce86eccdd1159aba8ea5523229efce84f0a"; }
{ locale = "ach"; arch = "linux-x86_64"; sha256 = "b511f394a8f313fcb8993cc220698150cdf16e6ce962004cb1be768bd26042d8"; }
{ locale = "af"; arch = "linux-i686"; sha256 = "dec09a59488c4e532b409be866560bd4b874fcd6400129a23ed7dc8b272949e3"; }
{ locale = "af"; arch = "linux-x86_64"; sha256 = "b19f3bbcef86ea03dd99cd6f59cdb755c9d724a6c8d6c8d5480f333a73260ed2"; }
{ locale = "an"; arch = "linux-i686"; sha256 = "c9ff3f690d42585f5dbaae7d62305efeebd093c4ffe751fe989cc9d237e0e761"; }
{ locale = "an"; arch = "linux-x86_64"; sha256 = "0dc5385e1bf23e3fbd25c82d32742add279ea293311159d283c7e93eb6e73396"; }
{ locale = "ar"; arch = "linux-i686"; sha256 = "fe690e7fb25d96b830fcd06a88c44118eb06644104c5ed74c69621c128f5dcd8"; }
{ locale = "ar"; arch = "linux-x86_64"; sha256 = "06e7c7e4e37621d7d14e81e79da6a4d35025476f87ed95ed4bb11d6160ce8546"; }
{ locale = "as"; arch = "linux-i686"; sha256 = "f1f1bde8406ecc4275425ef91579f82a49bb9bc33a4c1de95c770e89205dd001"; }
{ locale = "as"; arch = "linux-x86_64"; sha256 = "e31171d2470713b8cc211e5a1193a89890588c7c537a4c0405aa8db4a41b8862"; }
{ locale = "ast"; arch = "linux-i686"; sha256 = "9bdbbc47a1a31ac45cee3222b03b2fd9661e8e9685c672ca5b378abff1a60c76"; }
{ locale = "ast"; arch = "linux-x86_64"; sha256 = "511d340af37b8909006a446de906503a7b0904379597df36f8072790de727fed"; }
{ locale = "az"; arch = "linux-i686"; sha256 = "c9d43c61ef5677a70e19ea3ff7400a93b926aa72edddb793fcc4e502b7f77b91"; }
{ locale = "az"; arch = "linux-x86_64"; sha256 = "6450e41e581f49a76fa4bb7e685b2010899608aaa5c58224eec679b56e9d9d32"; }
{ locale = "be"; arch = "linux-i686"; sha256 = "eef6cb47db9c3909b813d01a78a7af439dccdd00c040e513c4e784ee537a2d38"; }
{ locale = "be"; arch = "linux-x86_64"; sha256 = "f20a4da9edd845a43b7bf85b70e2a67f3a96a4db9c461d0b4b168f0a6f0a3a73"; }
{ locale = "bg"; arch = "linux-i686"; sha256 = "3af1a3fb90685e819fad2c69daf11df29b01a97899045ba49a79588e9e5e2e01"; }
{ locale = "bg"; arch = "linux-x86_64"; sha256 = "d3662db0b9417d68a423b31f9aac7d03c3eccba36bcc0ba9b84ccf194325e521"; }
{ locale = "bn-BD"; arch = "linux-i686"; sha256 = "f867fbbf3dbfe06dc027592543700802270daf2956d45e921f968277e84e75bd"; }
{ locale = "bn-BD"; arch = "linux-x86_64"; sha256 = "08fdde0f76553ca018efeb0e0fd439b42d6e13715aee680ee77435bda20f684f"; }
{ locale = "bn-IN"; arch = "linux-i686"; sha256 = "dc3251e661966174be97c99aa2d332e9c605e99ce6526a0b69daa56e2266f6da"; }
{ locale = "bn-IN"; arch = "linux-x86_64"; sha256 = "9558f4bfb37dfaf3915345702c22fc14c19721c9f283c9824fa30151a8c2065e"; }
{ locale = "br"; arch = "linux-i686"; sha256 = "b3f51cf697aba530f13ed7207b3fdb4416272d7d4324147722c7c9cf3b336485"; }
{ locale = "br"; arch = "linux-x86_64"; sha256 = "c5c6804ae9d730c32c7b97219cbfef63be0ee28b8a3eacc3f21291f228aa0624"; }
{ locale = "bs"; arch = "linux-i686"; sha256 = "099d3845b98baef27225f77b56663f2e290ec75ab0569cea10722c84a779c829"; }
{ locale = "bs"; arch = "linux-x86_64"; sha256 = "d7688be752320867c31de94363f7c8b6321b1d6d11f57b6295e4e58db281fc0f"; }
{ locale = "ca"; arch = "linux-i686"; sha256 = "ec55163d35d4b3e9f5c0a000b389e91aa4c6d8ea0df800f69feaa26840ac5f6e"; }
{ locale = "ca"; arch = "linux-x86_64"; sha256 = "79c99f2dee213d7316060134562db67bbb377e6f44642869e25bd6b7533df464"; }
{ locale = "cs"; arch = "linux-i686"; sha256 = "a2833f106cf999416eed734352873e99d4ac0dce6ebf541d9219e9eaee250604"; }
{ locale = "cs"; arch = "linux-x86_64"; sha256 = "ccc6858d55578a0caa8edc3cd6b44e876266063a08b22c6aa82f6b975ba9265b"; }
{ locale = "cy"; arch = "linux-i686"; sha256 = "0d3b8e10346653b658f31fffc806d3067e1215ce02ba737c38f5a90acf9ddce9"; }
{ locale = "cy"; arch = "linux-x86_64"; sha256 = "0fe6206618a90d50927954dfff9de0653d0780de472c9be9eef7b679e8acbbde"; }
{ locale = "da"; arch = "linux-i686"; sha256 = "c4998f1ac1b80621fc8172d300c473739bd1563fa9eda1560919d359bae0ba81"; }
{ locale = "da"; arch = "linux-x86_64"; sha256 = "adc7129bb0992adc693577eb4846adad01bcf120f740b4fdc5f06f3dd5997a77"; }
{ locale = "de"; arch = "linux-i686"; sha256 = "a19ce1edec32fc3f54444a52de13fbf5d5a9838782b288f39069a6aaa8c0bdc2"; }
{ locale = "de"; arch = "linux-x86_64"; sha256 = "524c4aab74a14f97b42c830f1bca53d8dfcf53102873f47fbdfef21e6fe05170"; }
{ locale = "dsb"; arch = "linux-i686"; sha256 = "965326f3f6fbdd3fe3aeb0d82113b86537db0b70e6eb93aeab154793660a84f4"; }
{ locale = "dsb"; arch = "linux-x86_64"; sha256 = "a750854356b464d898a02ee82eeecfebca13b4217d3c0e427da8635210b3437e"; }
{ locale = "el"; arch = "linux-i686"; sha256 = "fb72a501b2358fb803b0902d7a7c56f20a662d073451d22d85a0e75f9e62a5b4"; }
{ locale = "el"; arch = "linux-x86_64"; sha256 = "cf72cc228f61bdcb94a5f7c508312e1b7c03f9e0828547ac18c08d1020ca9065"; }
{ locale = "en-GB"; arch = "linux-i686"; sha256 = "bd4ad892ce6cc1be8d460bb1306a1f727abfaf4868155d9bab8508181c9f9796"; }
{ locale = "en-GB"; arch = "linux-x86_64"; sha256 = "9f28b5f905b9a7118d7f50ea93c4ce75bf447f052a1ef9daad8a70cf9cd48e95"; }
{ locale = "en-US"; arch = "linux-i686"; sha256 = "310e16225f31ffcda25a70eda0defe2d361946c2705f39f4694059208d9f5223"; }
{ locale = "en-US"; arch = "linux-x86_64"; sha256 = "d86c67b5d12fe7a0e219f823a47644b952cb3ced105fbe428bc89e2a728a9988"; }
{ locale = "en-ZA"; arch = "linux-i686"; sha256 = "55ee09437fe8c2492a5f55682ae18d326c71c13ef88e9444dbdb0b5fe5f7ebde"; }
{ locale = "en-ZA"; arch = "linux-x86_64"; sha256 = "b96c05a0e32604672d2ae420e1e534f4b19a539386360e93caf607e3ea8f5620"; }
{ locale = "eo"; arch = "linux-i686"; sha256 = "75071e72dfd0b6212f6e160cb985964302e689432d226a6c08a5aa9ccf10a43e"; }
{ locale = "eo"; arch = "linux-x86_64"; sha256 = "7d23e926420a7c29af93957b641636d2c23382b23940109b337f17e073445401"; }
{ locale = "es-AR"; arch = "linux-i686"; sha256 = "769f306e31b319dec281fe2afa03f586e83942403b4f1ec40ceef1f522fdaf0a"; }
{ locale = "es-AR"; arch = "linux-x86_64"; sha256 = "d9146b07f48840ca7a33f3c20f99392ea1c10de8cbebd053a60b2ed8e03053bd"; }
{ locale = "es-CL"; arch = "linux-i686"; sha256 = "c95df915aee57fb0e86368378025de462815dd15cf4fbfc1f4cc606f5dcf1fa2"; }
{ locale = "es-CL"; arch = "linux-x86_64"; sha256 = "1b7244f8132135e1f965f59eba6688f40dc377f7b9f7be4df4dd74fd07708778"; }
{ locale = "es-ES"; arch = "linux-i686"; sha256 = "5de57ca5bb98bdd8b6a51e6223800309ccdbb448ee8a0519aa15da03efa3587b"; }
{ locale = "es-ES"; arch = "linux-x86_64"; sha256 = "1bea15feaab6bdb596cdf55e312609b637c79a185c11737939db20c45a130471"; }
{ locale = "es-MX"; arch = "linux-i686"; sha256 = "5edbe5767f96cc197a7e546eef168c5b9543459ef0c6a2bbed1b99d032b3cb12"; }
{ locale = "es-MX"; arch = "linux-x86_64"; sha256 = "4bf18487452db842f5bd5a5ee7658e19a57f1ee16af4773d9647252c9e6c1385"; }
{ locale = "et"; arch = "linux-i686"; sha256 = "41d37a5d2a839c5a9f63fd86939df187ec9f77094071097d80a19d85969b5400"; }
{ locale = "et"; arch = "linux-x86_64"; sha256 = "8a2e8b97563f62c63f55711f0cc54fb57d6927cb7aad89cc4ab2300bccab16b4"; }
{ locale = "eu"; arch = "linux-i686"; sha256 = "40c6722ee1e01281fb2bdccb2cd2239f222174803edd2c7face78e3a1e3eeb17"; }
{ locale = "eu"; arch = "linux-x86_64"; sha256 = "0fe4cd9d4c7eead144596868402e2feacef5f0140765db3f97ee2bb26445dd19"; }
{ locale = "fa"; arch = "linux-i686"; sha256 = "094893d8e4fb045ce68d3342d6f542f33604aa9eb9dd308b16591eba68b0fae6"; }
{ locale = "fa"; arch = "linux-x86_64"; sha256 = "5d4c570aeca30053b5530d4a77ac92a622e6808c073f03273d5f95ec47b61aed"; }
{ locale = "ff"; arch = "linux-i686"; sha256 = "aa13e64b3700f0727798ce0584c1ca458be2d37b854316eb8db95a766a603fc9"; }
{ locale = "ff"; arch = "linux-x86_64"; sha256 = "19bc6d3991835acce993a3ece7d16338c718a4208060a730d197f74e830affdf"; }
{ locale = "fi"; arch = "linux-i686"; sha256 = "d30a56a801c2305ca47b416923f93f9e0f5238d5e2054ca86b2facee25884870"; }
{ locale = "fi"; arch = "linux-x86_64"; sha256 = "9db94e8ca2ca1409b3e0989af4ba9d2aa0101c9c2d5b6f1ee321532327a9a74c"; }
{ locale = "fr"; arch = "linux-i686"; sha256 = "467c744b88987ea094367228175ee1d6f2d1b1deda2db056d143dbd4d214fd80"; }
{ locale = "fr"; arch = "linux-x86_64"; sha256 = "50e4a71de78d4fa1b11a0fb57185456a2cfd01cf755e655324332ec28657680d"; }
{ locale = "fy-NL"; arch = "linux-i686"; sha256 = "b7aa53b6c83ec514f650c1af83cdbda731775c8caadc508e34101161df6757a4"; }
{ locale = "fy-NL"; arch = "linux-x86_64"; sha256 = "d71b1aae6c70176894abfcc3fed8c84b1d3c426ef2125241172259bf4205892e"; }
{ locale = "ga-IE"; arch = "linux-i686"; sha256 = "70555105f42429e574e1df7f860fc1331c5d5c68e7b4fae6a6d1a00d14c2cf07"; }
{ locale = "ga-IE"; arch = "linux-x86_64"; sha256 = "207a0a310b8fbaad1e030e7a3904170b44b6a796bfe8216ea4cf9bac93a08b1f"; }
{ locale = "gd"; arch = "linux-i686"; sha256 = "19884e9d9511156bacb54414e8722fdf5f6579eaa911f5cacf736200ba989e85"; }
{ locale = "gd"; arch = "linux-x86_64"; sha256 = "5e5f343c9367b6c8b67f326269152c0582e4f03b3d5abfc4747d96a3f43c2674"; }
{ locale = "gl"; arch = "linux-i686"; sha256 = "b0495e2078e7f0748bf285a667d46a518297a54dd081d3fd612060528696d736"; }
{ locale = "gl"; arch = "linux-x86_64"; sha256 = "991ca23b93fd2e9306e3b1c3128633e5e147265b95dfa72cff5b00bc4f5faab4"; }
{ locale = "gn"; arch = "linux-i686"; sha256 = "4750afd6310a9be2c8e5697076d436c7321aa6b883971979453fc7148be6cf88"; }
{ locale = "gn"; arch = "linux-x86_64"; sha256 = "2b14b5b286e541bca2465c2d3472a3113946b205da5a0acefdd9db9849d1b921"; }
{ locale = "gu-IN"; arch = "linux-i686"; sha256 = "1c1f03dd683889b4ce80d6fc10d0939c1172b9becf4305989a5a3896a2230043"; }
{ locale = "gu-IN"; arch = "linux-x86_64"; sha256 = "0ddd8706942b4ba46ac126f9eae33945b90ba2e8fce5d85ed61307189c37701d"; }
{ locale = "he"; arch = "linux-i686"; sha256 = "e9c35252df6dc6ffe6d028404ea9d4157042c0743aad8deba42cf5da32ca354f"; }
{ locale = "he"; arch = "linux-x86_64"; sha256 = "ae6b86a28daf441f22ac50adb6205bbbb0ffac978f638fd0558a63b9704dccce"; }
{ locale = "hi-IN"; arch = "linux-i686"; sha256 = "84c638031ea3ac329d683ea282f26c530327ede87a42345f9eae417fd8fd4211"; }
{ locale = "hi-IN"; arch = "linux-x86_64"; sha256 = "62e161cd10cbf6d1cd91067ddff474b0a73e3be93d44255311e3d44b41cb1cd1"; }
{ locale = "hr"; arch = "linux-i686"; sha256 = "7349f78a35747de2a9d7a49526ea555a96e7aba5832f0eeaca4f367db3429555"; }
{ locale = "hr"; arch = "linux-x86_64"; sha256 = "7f269905b76bdf9fbeeaccf1de194a9ff27a6aa3a871636320d46db9a585b3a7"; }
{ locale = "hsb"; arch = "linux-i686"; sha256 = "72a14ca50ed839a9cd448254edb88e8f71d7d0f1de226bd2ba8f558721f249db"; }
{ locale = "hsb"; arch = "linux-x86_64"; sha256 = "b546ee12183aefb64071f503ddf1e11820d2782cbd0984979fa6f6b77c66ab9b"; }
{ locale = "hu"; arch = "linux-i686"; sha256 = "7882259d133231976be807bb170f887830cf2827deb6b9605708a42fcb10caaf"; }
{ locale = "hu"; arch = "linux-x86_64"; sha256 = "55a23b51b3c90fd1936878ee48db16e8ad328ee68cf97170276e84fb5658119e"; }
{ locale = "hy-AM"; arch = "linux-i686"; sha256 = "4cf64098fb6ae55553f5c5c60126e0a9ebcd224eb67240fef013988c21fef165"; }
{ locale = "hy-AM"; arch = "linux-x86_64"; sha256 = "58ffcbfb60b63b06c520a5cf543e6ad8cdcda490fb2baf7c35ad0e7c17c8b255"; }
{ locale = "id"; arch = "linux-i686"; sha256 = "3fad57b21f866534ce73d1a3702038a73aa64e9d28c96249cca890b886bc8817"; }
{ locale = "id"; arch = "linux-x86_64"; sha256 = "eca4ec8568d02af755351db846ceed5bc58b401e2ac3eb6ac25eb235884912c1"; }
{ locale = "is"; arch = "linux-i686"; sha256 = "c7a5b48d8055a46da40d650f18aab8f5aa7aefd59d165d5fdec0cf361b5360e3"; }
{ locale = "is"; arch = "linux-x86_64"; sha256 = "7e0043f25378fafd3176a5b735ab35449c2febc83188d93bbcf12e47b729e0a8"; }
{ locale = "it"; arch = "linux-i686"; sha256 = "e77950e24117e0e25e0a77f40819e9b10711725b2fe8e8772d8875120ae58751"; }
{ locale = "it"; arch = "linux-x86_64"; sha256 = "347ec5d8bb5f61ef3003c2ed106ec7d70534816341c168acf46565571a76c0bf"; }
{ locale = "ja"; arch = "linux-i686"; sha256 = "8ca089d2624572f38d9fe7911d9ab77dae2589b3022de9132215dafdc8f78ce8"; }
{ locale = "ja"; arch = "linux-x86_64"; sha256 = "f5f5825ae34f819744c2a03c7af7ba38a2b2c3f65494f381a6561230c1bfc5a6"; }
{ locale = "kk"; arch = "linux-i686"; sha256 = "58e863ff852874e797c6358bf5f7d52e29e504f03186b8b6c7a92cc44501ea13"; }
{ locale = "kk"; arch = "linux-x86_64"; sha256 = "ece9759a53a5269be626d6f68c49da70f2c8e60b9d8ea2061328050d2c31b7eb"; }
{ locale = "km"; arch = "linux-i686"; sha256 = "9ed22fef8e3d94b7a15fa557d86b05e883ad9d12755ba3420a263232dad7d5a0"; }
{ locale = "km"; arch = "linux-x86_64"; sha256 = "fbba67f3ac60bc8d41e527e7bb7a82266efe47a9a09eb757433a52209c1b9754"; }
{ locale = "kn"; arch = "linux-i686"; sha256 = "8cf7a3036d0221fa162683348ae047338b38e5755e6cf0cd6530a20e43eddc74"; }
{ locale = "kn"; arch = "linux-x86_64"; sha256 = "cd99f17bfc77cb632c7c2d5627f43a98c1591c25a6175cbe88d0b8b5d6c7d4e8"; }
{ locale = "ko"; arch = "linux-i686"; sha256 = "d1e27ad88e411d59448bc7d2aea0fac386d71a9579b246a151ecba7d10cb74eb"; }
{ locale = "ko"; arch = "linux-x86_64"; sha256 = "82ece26a18be4db481a9bd9748bce59d14a2704e5e4c3873d2788e07efddfd67"; }
{ locale = "lij"; arch = "linux-i686"; sha256 = "468085b58dfe815fb6a9b229d876ee6d14737edd7e34ffe7987bce1eec2e0079"; }
{ locale = "lij"; arch = "linux-x86_64"; sha256 = "1e1a210f42e17de155b2f53a94d402be03f3a475e75db73e1aced157edafa9b0"; }
{ locale = "lt"; arch = "linux-i686"; sha256 = "1350737560c2e5e69bc70152fc3ae246b3ab18e4dade066e6b9488ddadba29f5"; }
{ locale = "lt"; arch = "linux-x86_64"; sha256 = "e96616deedc0c1967ca0d17dcd21d1b5f43838cb1c313fcf5394ee7a552ccf0c"; }
{ locale = "lv"; arch = "linux-i686"; sha256 = "e7728d5d0e76df3750f1f5ed9e8585fc6210200f41d9b1a8f6b638582f623dd8"; }
{ locale = "lv"; arch = "linux-x86_64"; sha256 = "5cab37509109146ae3ceb82df40152cf2de4b755c479248cfbc5ee9e7780399b"; }
{ locale = "mai"; arch = "linux-i686"; sha256 = "3014cda0a3b95c7d5ce6e098e220bb107e2ff2974eb7d4b71ea9061cdc102955"; }
{ locale = "mai"; arch = "linux-x86_64"; sha256 = "46b5b4f03bd32f5c84068326a78e5e744bfdc23b68ec067b6774574a6a952dc7"; }
{ locale = "mk"; arch = "linux-i686"; sha256 = "55dcdaa2cf783171bf2e3f3244cb9f8165d7c873b62ee65d2392581585be7b99"; }
{ locale = "mk"; arch = "linux-x86_64"; sha256 = "5002a14dbd07b29dc08f683d28c74429cfc1a924626e93f76f7568465cc550dc"; }
{ locale = "ml"; arch = "linux-i686"; sha256 = "d1e4c7a26cfb2ea04abb1348e7bb57204fa355112537c26877d6e80bcbe3fd25"; }
{ locale = "ml"; arch = "linux-x86_64"; sha256 = "d534c4a30eacff662fb387f1753be7e95fcfc1b0702ba3c98b88f121f1109859"; }
{ locale = "mr"; arch = "linux-i686"; sha256 = "48d8cec7812fa7989a79f4560be33898c83525f383710d60f6dc8a2292851764"; }
{ locale = "mr"; arch = "linux-x86_64"; sha256 = "5df095d48eedcfd1d102ced7b2928585ac1c7fc3e4fa84878b5a34914aec7c9a"; }
{ locale = "ms"; arch = "linux-i686"; sha256 = "d377e167c3154143cceabc931dca1b031f45e9e8bb39dae923bca3842edb661e"; }
{ locale = "ms"; arch = "linux-x86_64"; sha256 = "af023d2ccae69120958a0a5c4613e205972789603b43f11a32b24566fdee2d0c"; }
{ locale = "nb-NO"; arch = "linux-i686"; sha256 = "8e50da27fc1ac9f2707afe7e964473e065de55ef726c03159029e89fa092b520"; }
{ locale = "nb-NO"; arch = "linux-x86_64"; sha256 = "38c214d32b85bf1a55a66605614c72eeab693d39df9e95ec6971b6ba46a0d854"; }
{ locale = "nl"; arch = "linux-i686"; sha256 = "9732ac83b4636b84e9084c0bcefe2ad8e0399e67aa5e9e22aaa40a2bb43c3274"; }
{ locale = "nl"; arch = "linux-x86_64"; sha256 = "d4e424f62748bd9f35a98fe6a01300b13615ff6dba914eb69f4f343ef7630515"; }
{ locale = "nn-NO"; arch = "linux-i686"; sha256 = "a0acef371c32189f78d13e9a7f24601559a5292642330a609267cda8929291ed"; }
{ locale = "nn-NO"; arch = "linux-x86_64"; sha256 = "90fd2eeebebc9c2ca6413cd527697d1566312e099828035ce24204136b568466"; }
{ locale = "or"; arch = "linux-i686"; sha256 = "bb628039e4d3e8e6cba0efb5754d4e61cae6b6a50f88aaf9b034570c5d25ba06"; }
{ locale = "or"; arch = "linux-x86_64"; sha256 = "e1af53035829620db80c0e75ff28738a480ff0c946edd3f5c821dcb8683ef800"; }
{ locale = "pa-IN"; arch = "linux-i686"; sha256 = "20665cc6f3d073530f459d8a14712e59cb5db82957042dc498e112db69957f5d"; }
{ locale = "pa-IN"; arch = "linux-x86_64"; sha256 = "8a912aa7900012512a93e740f078a47340d724a936f4949467e028e2d44adac5"; }
{ locale = "pl"; arch = "linux-i686"; sha256 = "a51c8e58ba89dbf53411b1d61229c1a515c1af53a28b7d39d654d1dd46c3f7bb"; }
{ locale = "pl"; arch = "linux-x86_64"; sha256 = "e060bd9b72ce6feb151ebcb8630598f53c0ab5069a2cbc88c80b369ef5b4e924"; }
{ locale = "pt-BR"; arch = "linux-i686"; sha256 = "d9391656b4e5959dba3eeb3537fe06ec67e56248259af723d09f0dc0d451d5c2"; }
{ locale = "pt-BR"; arch = "linux-x86_64"; sha256 = "35cd35737abdf04ee714177a62b59bb2ecf819b508728ba5ce1ea4b85cbc9db6"; }
{ locale = "pt-PT"; arch = "linux-i686"; sha256 = "22a90cc9e3da6abfc21d2ed039ab1877738b2f2d7aeb4fbfcbf1c3763b6516da"; }
{ locale = "pt-PT"; arch = "linux-x86_64"; sha256 = "b4bca72d7b866de19b18d60a7278c124af9d00f44ff3b635eb80b042077634c5"; }
{ locale = "rm"; arch = "linux-i686"; sha256 = "7d94fe2c2abbe8f27c10e27540cb415f61a338a121f87f4c4e93b923e544c923"; }
{ locale = "rm"; arch = "linux-x86_64"; sha256 = "b55153028773d452c696eab97aff90393caf19d9ed8977c0b0d147284040d075"; }
{ locale = "ro"; arch = "linux-i686"; sha256 = "80ccb9bb187f3b9597f6112ccd13b7274f4a7d9eed82567180a7ac99e0748323"; }
{ locale = "ro"; arch = "linux-x86_64"; sha256 = "3a393002af7c9d6a90f15707e0a6c960f01a4335d647e8dd2ee237d02271a74a"; }
{ locale = "ru"; arch = "linux-i686"; sha256 = "5c4456bc1711203b68467122c1bec0b7a323cd944cd2a2daa7cea3fe9d8bf79d"; }
{ locale = "ru"; arch = "linux-x86_64"; sha256 = "82fe5ab5ffccfa4ae600e084b20ea9d60fe5d1d2f22fb836c6d05eec398239af"; }
{ locale = "si"; arch = "linux-i686"; sha256 = "5cef376fb82f8d952d467f5c5db88282c6a812065a2c64beaae663e2a8c8ff86"; }
{ locale = "si"; arch = "linux-x86_64"; sha256 = "b905f7ece85de9b13e055b93811d3b21bc07b95279b2f89a6837863821db546f"; }
{ locale = "sk"; arch = "linux-i686"; sha256 = "5b671c85ae04e379ee7426f1a7e92c2295edb04362addd612812f39d4d90cac8"; }
{ locale = "sk"; arch = "linux-x86_64"; sha256 = "3bb734435111310df7b8e7e3e52c36378fcbfe388420b3e144c008ee3e142044"; }
{ locale = "sl"; arch = "linux-i686"; sha256 = "8c6af8ab571d42492b8d2aeb6ccbb29a261c1401293cef76b2158ad6e7841eac"; }
{ locale = "sl"; arch = "linux-x86_64"; sha256 = "3cc7b211f88458d1b261ea92ce20fd4f72ba39fe9ec86dd4f0410874c227874d"; }
{ locale = "son"; arch = "linux-i686"; sha256 = "b38286ece3dae0f9998e37ba7494d394daa8ac390ba60f6f75960adc87d0f7a1"; }
{ locale = "son"; arch = "linux-x86_64"; sha256 = "b99b4334c2ca7731db895972d55ecad7420c4a4da825a496aed2fccb81cd6ff4"; }
{ locale = "sq"; arch = "linux-i686"; sha256 = "bdd66c3d22c66c908bf275ee1ad1b7827b4439cf3fb75a537625a39e7acca3c9"; }
{ locale = "sq"; arch = "linux-x86_64"; sha256 = "d7ce54fb3cce04bad41ba5491834e6cbf8daa93e983b7f66d4bc2f6b52c4c41e"; }
{ locale = "sr"; arch = "linux-i686"; sha256 = "20cba6a11d976c036243dd3e55c2a7ad586006b5355bb8b742db4fd71d0bb7eb"; }
{ locale = "sr"; arch = "linux-x86_64"; sha256 = "a9c8be3942abe8d14b89316f32402fae1abadacf5ddb844d0e50a69c7173bf22"; }
{ locale = "sv-SE"; arch = "linux-i686"; sha256 = "f692fbb6fd82d1fdac23cde63687490c1ccebac715003b6212238f6a78289fd6"; }
{ locale = "sv-SE"; arch = "linux-x86_64"; sha256 = "cdd7d6f9ea77f209c1ce3b2c405757ce44a0bdbe1803d32e8bf8e683b7f1894f"; }
{ locale = "ta"; arch = "linux-i686"; sha256 = "064ecf6db5cc65f281e03763acb3512e0e2c54237c6a7a0be3c8828804e2b433"; }
{ locale = "ta"; arch = "linux-x86_64"; sha256 = "33187d93b82edbfd01debc0956c1194539339b3949ef9f65a2aed7791b5a253a"; }
{ locale = "te"; arch = "linux-i686"; sha256 = "ffa689f1111d373300785a5e62b501ac53300e02b520345d8a31de5122302e25"; }
{ locale = "te"; arch = "linux-x86_64"; sha256 = "4d7504b72456d68aec2f73daeaf89112fb8372c00f117a436a5feb7ad5c255b7"; }
{ locale = "th"; arch = "linux-i686"; sha256 = "d22c3e017c1897c6b4f4da0d43647289f35854d43b0dcc18d3e5898d70e163fd"; }
{ locale = "th"; arch = "linux-x86_64"; sha256 = "4f3b91bef8c6d778e33ff17fe97535ddb7bc6d8ecf050d09ee722f065dada050"; }
{ locale = "tr"; arch = "linux-i686"; sha256 = "d8effc19f4f9991c3e0cc8f34aef9040a1e36e0e0c7a4f541a8bc4c5e837a1ea"; }
{ locale = "tr"; arch = "linux-x86_64"; sha256 = "9a6db03d21904d9b5e335137c866c61037d9a0074cdae77bb436ffd6fffe7595"; }
{ locale = "uk"; arch = "linux-i686"; sha256 = "f5053f5d3237ab26971b678ce53d052fc3d87282127577b2590f3a911feef140"; }
{ locale = "uk"; arch = "linux-x86_64"; sha256 = "2a9f26d892db02c97ebeb9486ab582a20b08b73ebd8cc71a4f4f3596bcf875af"; }
{ locale = "uz"; arch = "linux-i686"; sha256 = "b2cca9b4e5a15d80cecee587c7b7738c22fe41f7ea106b3a336d15940cca1f39"; }
{ locale = "uz"; arch = "linux-x86_64"; sha256 = "efd24f9c7ec712ba72b9305f30232b6129af8d75e9bbac7133c9dd3e056d6f0d"; }
{ locale = "vi"; arch = "linux-i686"; sha256 = "3d1ba2ed2615a0543bf6484a130922e3176b07fd91f2c5294ecfb65978fe454c"; }
{ locale = "vi"; arch = "linux-x86_64"; sha256 = "15807c890efbc934385766fa04ced69c9cf125da52a01ac685689a2873b689dd"; }
{ locale = "xh"; arch = "linux-i686"; sha256 = "c9ed7d523d2fe5fe9b60972d48148ca95f56ea801c49dd962e832c7485d368d1"; }
{ locale = "xh"; arch = "linux-x86_64"; sha256 = "f7d1314255490fae9ab31fe36adb7ea8a657a11539a7d2f95fb7d34d18a83322"; }
{ locale = "zh-CN"; arch = "linux-i686"; sha256 = "6fe6f89f22cd9752ad5d91cb0cf7da8b362090aab9e0576483dd14df509732e8"; }
{ locale = "zh-CN"; arch = "linux-x86_64"; sha256 = "1443bc4a7b07d2393d5914df42d3fefe8736e927590d8373f9f7db8d6c903c43"; }
{ locale = "zh-TW"; arch = "linux-i686"; sha256 = "12a793f7033926dcd760c428ae015983e1c5175adc1768609a8859c653ce2272"; }
{ locale = "zh-TW"; arch = "linux-x86_64"; sha256 = "eca47abc014870a7799aedb3f7e5603297dffd1ffd54ce2536c3399881127605"; }
];
}

View File

@ -133,8 +133,8 @@ in {
firefox-unwrapped = common {
pname = "firefox";
version = "44.0.2";
sha256 = "17id7ala1slb2mjqkikryqjadcsmdzqmkxrrnb5m1316m50qichb";
version = "45.0";
sha256 = "1wbrygxj285vs5qbpv3cq26w36bd533779mgi8d0gpxin44hzarn";
};
firefox-esr-unwrapped = common {

View File

@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
homepage = "http://midori-browser.org";
license = stdenv.lib.licenses.lgpl21Plus;
platforms = stdenv.lib.platforms.linux;
maintainers = with stdenv.lib.maintainers; [ raskin iyzsong ];
maintainers = with stdenv.lib.maintainers; [ raskin ];
};
src = fetchurl {

View File

@ -59,11 +59,11 @@ let
in
stdenv.mkDerivation rec {
name = "flashplayer-${version}";
version = "11.2.202.559";
version = "11.2.202.577";
src = fetchurl {
url = "https://fpdownload.macromedia.com/pub/flashplayer/installers/archive/fp_${version}_archive.zip";
sha256 = "1vb01pd1jhhh86r01nwdzcf66d72jksiyiyp92hs4khy6n5qfsl3";
sha256 = "1k02d6c9y8z9lxyqyq04zsc5735cvm30mkwli71mh87fr1va2q4j";
};
buildInputs = [ unzip ];

View File

@ -41,25 +41,43 @@ in stdenv.mkDerivation rec {
preConfigure = ''
substituteInPlace src/Makefile.am --subst-var-by mavenRepo ${mavenRepo}
substituteInPlace 3rdparty/libprocess/include/process/subprocess.hpp \
--replace '"sh"' '"${bash}/bin/bash"'
substituteInPlace 3rdparty/libprocess/3rdparty/stout/include/stout/posix/os.hpp \
--replace '"sh"' '"${bash}/bin/bash"'
substituteInPlace 3rdparty/libprocess/3rdparty/stout/include/stout/os/posix/fork.hpp \
--replace '"sh"' '"${bash}/bin/bash"'
substituteInPlace src/cli/mesos-scp \
--replace "'scp " "'${openssh}/bin/scp "
substituteInPlace src/launcher/executor.cpp \
--replace '"sh"' '"${bash}/bin/bash"'
substituteInPlace src/launcher/fetcher.cpp \
--replace '"gzip' '"${gzip}/bin/gzip' \
--replace '"tar' '"${gnutar}/bin/tar' \
--replace '"unzip' '"${unzip}/bin/unzip'
substituteInPlace src/cli/mesos-scp \
--replace "'scp " "'${openssh}/bin/scp "
substituteInPlace src/python/cli/src/mesos/cli.py \
--replace "['mesos-resolve'" "['$out/bin/mesos-resolve'"
substituteInPlace src/slave/containerizer/mesos/launch.cpp \
--replace '"sh"' '"${bash}/bin/bash"'
'' + lib.optionalString (stdenv.isLinux) ''
'' + lib.optionalString stdenv.isLinux ''
substituteInPlace configure.ac \
--replace /usr/include/libnl3 ${libnl}/include/libnl3
substituteInPlace src/linux/perf.cpp \
--replace '"perf ' '"${perf}/bin/perf '
substituteInPlace src/linux/systemd.cpp \
--replace 'os::realpath("/sbin/init")' '"${systemd}/lib/systemd/systemd"'
substituteInPlace src/slave/containerizer/mesos/isolators/filesystem/shared.cpp \
--replace '"mount ' '"${utillinux}/bin/mount ' \
@ -72,15 +90,6 @@ in stdenv.mkDerivation rec {
--replace '"ip ' '"${iproute}/bin/ip ' \
--replace '"mount ' '"${utillinux}/bin/mount ' \
--replace '/bin/sh' "${stdenv.shell}"
substituteInPlace src/launcher/executor.cpp \
--replace '"sh"' '"${bash}/bin/bash"'
substituteInPlace src/slave/containerizer/mesos/launch.cpp \
--replace '"sh"' '"${bash}/bin/bash"'
substituteInPlace src/linux/systemd.cpp \
--replace 'os::realpath("/sbin/init")' '"${systemd}/lib/systemd/systemd"'
'';
configureFlags = [

View File

@ -1,36 +0,0 @@
{stdenv, fetchurl, sqlite, ruby }:
# Package builds rq with all dependencies into one blob. This to ascertain
# the combination of packages works.
stdenv.mkDerivation {
name = "rq-3.4.0";
src = fetchurl {
url = http://www.codeforpeople.com/lib/ruby/rq/rq-3.4.0.tgz;
sha256 = "1g8wiv83dcn4vzk9wjjzs9vjnwzwpy4h84h34cj32wfz793wfb8b";
};
buildInputs = [ ruby ];
# patch checks for existing stdin file - sent it upstream
patches = [ ./rq.patch ];
buildPhase = ''
cd all
./install.sh $out
cd ..
'';
installPhase = ''
'';
meta = {
license = stdenv.lib.licenses.ruby;
homepage = "http://www.codeforpeople.com/lib/ruby/rq/";
description = "Simple cluster queue runner";
longDescription = "rq creates instant linux clusters by managing priority work queues, even on a multi-core single machine. This cluster runner is easy to install and easy to manage, contrasting with the common complicated solutions.";
pkgMaintainer = "Pjotr Prins";
# rq installs a separate Ruby interpreter, which has lower priority
priority = "10";
};
}

View File

@ -1,12 +0,0 @@
diff -r b58e759f84db lib/rq/jobrunner.rb
--- a/lib/rq/jobrunner.rb Sun Sep 28 13:33:06 2008 +0200
+++ b/lib/rq/jobrunner.rb Sun Sep 28 13:35:09 2008 +0200
@@ -85,7 +85,7 @@ unless defined? $__rq_jobrunner__
command =
if @sh_like
- sin = "0<#{ @stdin }" if @stdin
+ sin = "0<#{ @stdin }" if @stdin and File.exist?(@stdin)
sout = "1>#{ @stdout }" if @stdout
serr = "2>#{ @stderr }" if @stderr
"( PATH=#{ path }:$PATH #{ command } ;) #{ sin } #{ sout } #{ serr }"

View File

@ -1,10 +1,10 @@
{ stdenv, fetchurl, libotr, pidgin, intltool } :
stdenv.mkDerivation rec {
name = "pidgin-otr-4.0.1";
name = "pidgin-otr-4.0.2";
src = fetchurl {
url = "http://www.cypherpunks.ca/otr/${name}.tar.gz";
sha256 = "02pkkf86fh5jvzsdn9y78impsgzj1n0p81kc2girvk3vq941yy0v";
sha256 = "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl";
};
postInstall = "ln -s \$out/lib/pidgin \$out/share/pidgin-otr";

View File

@ -4,7 +4,7 @@
qtbase, qtsvg, qttools, qttranslations, sqlcipher }:
let
version = "1.2.4";
version = "1.3.0";
revision = "v${version}";
in
@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
owner = "tux3";
repo = "qTox";
rev = revision;
sha256 = "0iqnl00kmbpf3pn6z38n3cjzzsqpw2793j60c24kkrydapihknz9";
sha256 = "0z2rxsa23vpl4q0h63mybw7kv8n1sm6nwb93l0cc046a3n9axid8";
};
buildInputs =

View File

@ -1,5 +1,4 @@
{ fetchgit, libcommuni, qt5, stdenv
}:
{ fetchgit, libcommuni, makeQtWrapper, qt5, stdenv }:
stdenv.mkDerivation rec {
name = "communi-${version}";
@ -11,20 +10,32 @@ stdenv.mkDerivation rec {
sha256 = "0gk6gck09zb44qfsal7bs4ln2vl9s9x3vfxh7jvfc7mmf7l3sspd";
};
nativeBuildInputs = [ makeQtWrapper ];
buildInputs = [ libcommuni qt5.qtbase ];
enableParallelBuild = true;
configurePhase = ''
export QMAKEFEATURES=${libcommuni}/features
qmake -r COMMUNI_INSTALL_PREFIX=$out
qmake -r \
COMMUNI_INSTALL_PREFIX=$out \
COMMUNI_INSTALL_BINS=$out/bin \
COMMUNI_INSTALL_PLUGINS=$out/lib/communi/plugins \
COMMUNI_INSTALL_ICONS=$out/share/icons/hicolor \
COMMUNI_INSTALL_DESKTOP=$out/share/applications \
COMMUNI_INSTALL_THEMES=$out/share/communi/themes
'';
postInstall = ''
wrapQtProgram "$out/bin/communi"
'';
meta = with stdenv.lib; {
description = "A simple and elegant cross-platform IRC client";
homepage = https://github.com/communi/communi-desktop;
license = licenses.bsd3;
platforms = platforms.all;
maintainers = with maintainers; [ hrdinka ];
platforms = platforms.all;
};
}

View File

@ -5,6 +5,7 @@
, tag ? "" # tag added to the package name
, withKDE ? stdenv.isLinux # enable KDE integration
, kdelibs ? null
, static ? false # link statically
, stdenv, fetchurl, cmake, makeWrapper, qt, automoc4, phonon, dconf, qca2 }:
@ -42,8 +43,8 @@ in with stdenv; mkDerivation rec {
NIX_CFLAGS_COMPILE = "-fPIC";
cmakeFlags = [
"-DEMBED_DATA=OFF"
"-DSTATIC=OFF" ]
"-DEMBED_DATA=OFF" ]
++ edf static "STATIC"
++ edf monolithic "WANT_MONO"
++ edf daemon "WANT_CORE"
++ edf client "WANT_QTCLIENT"

View File

@ -3,6 +3,7 @@
, client ? false # build Quassel client
, previews ? false # enable webpage previews on hovering over URLs
, tag ? "" # tag added to the package name
, static ? false # link statically
, stdenv, fetchurl, cmake, makeWrapper, dconf
, qtbase, qtscript, qtwebkit
@ -66,9 +67,9 @@ in with stdenv; mkDerivation rec {
cmakeFlags = [
"-DEMBED_DATA=OFF"
"-DSTATIC=OFF"
"-DUSE_QT5=ON"
]
++ edf static "STATIC"
++ edf monolithic "WANT_MONO"
++ edf daemon "WANT_CORE"
++ edf client "WANT_QTCLIENT"

View File

@ -21,9 +21,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "http://archive.mozilla.org/pub/thunderbird/releases/${verName}/source/thunderbird-${verName}.source.tar.bz2";
# https://archive.mozilla.org/pub/thunderbird/releases/${verName}/SHA1SUMS
sha1 = "7c8ef066d6b6516fddbb654b38353f894f85d469";
sha256 = "0sssw45sf4vfy63y0x1lj05zl9g3gjdcvgw232k6zfm44l9p25q4";
};
buildInputs = # from firefox30Pkgs.xulrunner, but without gstreamer and libvpx

View File

@ -4,7 +4,7 @@
}:
let
version = "2.90";
version = "2.92";
in
with { inherit (stdenv.lib) optional optionals optionalString; };
@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "https://transmission.cachefly.net/transmission-${version}.tar.xz";
sha256 = "1lig7y9fhmv2ajgq1isj9wqgpcgignzlczs3dy95ahb8h6pqrzv9";
sha256 = "0pykmhi7pdmzq47glbj8i2im6iarp4wnj4l1pyvsrnba61f0939s";
};
buildInputs = [ pkgconfig intltool file openssl curl libevent inotify-tools zlib ]
@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
'';
configureFlags = [ "--with-systemd-daemon" ]
++ [ "--enable-cli" ]
++ optional enableGTK3 "--with-gtk";
preFixup = optionalString enableGTK3 /* gsettings schemas for file dialogues */ ''

View File

@ -9,11 +9,11 @@
}:
stdenv.mkDerivation rec {
name = "calligra-2.9.8";
name = "calligra-2.9.11";
src = fetchurl {
url = "mirror://kde/stable/${name}/${name}.tar.xz";
sha256 = "08a5k8gjmzp9yzq46xy0p1sw7dpvxmxh8zz6dyj8q1dq29719kkc";
sha256 = "02gaahp7a7m53n0hvrp3868s8w37b457isxir0z7b4mwhw7jv3di";
};
nativeBuildInputs = [ automoc4 cmake perl pkgconfig makeWrapper ];
@ -48,7 +48,7 @@ stdenv.mkDerivation rec {
vector graphics.
'';
homepage = http://calligra.org;
maintainers = with stdenv.lib.maintainers; [ urkud phreedom ];
maintainers = with stdenv.lib.maintainers; [ urkud phreedom ebzzry ];
inherit (kdelibs.meta) platforms;
};
}

View File

@ -9,19 +9,18 @@
buildPythonApplication rec {
name = "zim-${version}";
version = "0.63";
version = "0.65";
namePrefix = "";
src = fetchurl {
url = "http://zim-wiki.org/downloads/${name}.tar.gz";
sha256 = "077vf4h0hjmbk8bxj9l0z9rxcb3dw642n32lvfn6vjdna1qm910m";
sha256 = "15pdq4fxag85qjsrdmmssiq85qsk5vnbp8mrqnpvx8lm8crz6hjl";
};
propagatedBuildInputs = [ pythonPackages.sqlite3 pygtk pythonPackages.pyxdg pygobject ];
preBuild = ''
mkdir -p /tmp/home
export HOME="/tmp/home"
export HOME=$TMP
sed -i '/zim_install_class,/d' setup.py
'';
@ -30,8 +29,14 @@ buildPythonApplication rec {
preFixup = ''
export makeWrapperArgs="--prefix XDG_DATA_DIRS : $out/share --argv0 $out/bin/.zim-wrapped"
'';
# Testing fails.
doCheck = false;
postFixup = ''
wrapPythonPrograms
substituteInPlace $out/bin/.zim-wrapped \
--replace "sys.argv[0] = 'zim'" "sys.argv[0] = '$out/bin/zim'"
'';
doCheck = true;
meta = {
description = "A desktop wiki";

View File

@ -50,7 +50,7 @@ stdenv.mkDerivation {
homepage = "http://www.loria.fr/equipes/calligramme/acg";
description = "A toolkit for developing ACG signatures and lexicon";
license = licenses.cecill20;
platforms = ocaml.meta.platforms;
platforms = ocaml.meta.platforms or [];
maintainers = [ maintainers.jirkamarsik ];
};
}

View File

@ -24,7 +24,7 @@ in
stdenv.mkDerivation rec {
name = "gitlab-${version}";
version = "8.5.1";
version = "8.5.5";
buildInputs = [ ruby bundler tzdata git nodejs procps ];
@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
owner = "gitlabhq";
repo = "gitlabhq";
rev = "v${version}";
sha256 = "1pn5r4axzjkgdjr59y3wgxsd2n83zfd5bry1g2w4c2qw0wcw7zqb";
sha256 = "05cjqjcmwxlc67xr34ki83q8pn6bsvxvywmiys20bksq3maxdyih";
};
patches = [

View File

@ -975,10 +975,10 @@
dependencies = ["actionpack" "activesupport" "rake" "thor"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "07vmyrppa1x80whdjxhjij93qh9wvnmnxpsgn6fr9x2lqmzdyq5l";
sha256 = "cfff64cbc0e409341003c35fa2e576e6a8cd8259a9894d09f15c6123be73f146";
type = "gem";
};
version = "4.2.5.1";
version = "4.2.5.2";
};
rails-html-sanitizer = {
dependencies = ["loofah"];
@ -1011,10 +1011,10 @@
dependencies = ["actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "03j6hfsqdl0bay59m4qjj2081s4vnhqagpl14qpm4wfrqrgpkcqb";
sha256 = "aa93c1b9eb8b535eee58280504e30237f88217699fe9bb016e458e5122eefa2e";
type = "gem";
};
version = "4.2.5.1";
version = "4.2.5.2";
};
rack-test = {
dependencies = ["rack"];
@ -2906,10 +2906,10 @@
dependencies = ["i18n" "json" "minitest" "thread_safe" "tzinfo"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "16zgsvzwwf4hx3ywi2lz0dcm6d1ljsy6zr5k2q41amd7g62d886d";
sha256 = "80ad345adf7e2b72c5d90753c0df91eacc34f4de02b34cfbf60bcf6c83483031";
type = "gem";
};
version = "4.2.5.1";
version = "4.2.5.2";
};
activerecord-session_store = {
dependencies = ["actionpack" "activerecord" "railties"];
@ -2940,55 +2940,55 @@
dependencies = ["activemodel" "activesupport" "arel"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1qj5ii36yn9kb0ljnl05xgpgvs7j9l20yg2phsssy0j31g1ymmc5";
sha256 = "c2b1b6a4c6b8542c2464b457dce4cac4915efcbd3d5acfba57102e58474c33f2";
type = "gem";
};
version = "4.2.5.1";
version = "4.2.5.2";
};
activemodel = {
dependencies = ["activesupport" "builder"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1zr83avw82infmzdzpilk6xpv5r9fr8pxgf5ql16b3vysp6va57p";
sha256 = "09ce967be3086b34ae9fcbd919e714b2bdf72b8ab6e89b64aa74627267d93962";
type = "gem";
};
version = "4.2.5.1";
version = "4.2.5.2";
};
activejob = {
dependencies = ["activesupport" "globalid"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1xfj7lwp1v3k9zscavzq87wbbn6y825angz4zpx4xsvlwf3dn7jc";
sha256 = "cecb9bbc55292dee064ca479990c6e50fa3e2273aac6722ce058d18c22383026";
type = "gem";
};
version = "4.2.5.1";
version = "4.2.5.2";
};
actionview = {
dependencies = ["activesupport" "builder" "erubis" "rails-dom-testing" "rails-html-sanitizer"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1dp1gqh0yxpyydza1ada0jjbpww97qhnkj9c9pm9rg5jbmpzg12m";
sha256 = "e8ce01cf6cc822ec023a15a856a0fae0e078ebb232b95b722c23af4117d2d635";
type = "gem";
};
version = "4.2.5.1";
version = "4.2.5.2";
};
actionpack = {
dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "13shdiwjfyqvfb11k0wqhcd7p7ix168fxd5l8m2pnn0bzskpswxv";
sha256 = "a22e1818f06b707433c9a76867932929751b5d57edbeacc258635a7b23da12cf";
type = "gem";
};
version = "4.2.5.1";
version = "4.2.5.2";
};
actionmailer = {
dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fxn8f53nnpgan5xl9i5lszl1m8yk4q6ayc33d9xfzsnvhavpl4n";
sha256 = "8cee5f2f1e58c8ada17cca696377443c0cbc9675df2b7eef97a04318876484b5";
type = "gem";
};
version = "4.2.5.1";
version = "4.2.5.2";
};
ace-rails-ap = {
source = {
@ -3014,4 +3014,4 @@
};
version = "2.3.2";
};
}
}

View File

@ -8,11 +8,11 @@
stdenv.mkDerivation rec {
name = "smartgithg-${version}";
version = "7_1_0";
version = "7_1_2";
src = fetchurl {
url = "http://www.syntevo.com/downloads/smartgit/smartgit-linux-${version}.tar.gz";
sha256 = "0nlv2ipmv3z1j4642gfsrpsgc2y4mxngiz6mz3nidrbrkz0ylsvy";
url = "http://www.syntevo.com/static/smart/download/smartgit/smartgit-linux-${version}.tar.gz";
sha256 = "18jw4g2akhj6h9w8378kacv7ws35ndcnc3kkhci9iypwy432ak8d";
};
buildInputs = [
@ -58,5 +58,6 @@ stdenv.mkDerivation rec {
homepage = http://www.syntevo.com/smartgit/;
license = licenses.unfree;
platforms = platforms.linux;
maintainers = with stdenv.lib.maintainers; [ jraygauthier ];
};
}

View File

@ -17,13 +17,13 @@ assert javahlBindings -> jdk != null && perl != null;
let
common = { version, sha1 }: stdenv.mkDerivation (rec {
common = { version, sha256 }: stdenv.mkDerivation (rec {
inherit version;
name = "subversion-${version}";
src = fetchurl {
url = "mirror://apache/subversion/${name}.tar.bz2";
inherit sha1;
inherit sha256;
};
buildInputs = [ zlib apr aprutil sqlite ]
@ -89,12 +89,12 @@ in {
subversion18 = common {
version = "1.8.15";
sha1 = "680acf88f0db978fbbeac89ed63776d805b918ef";
sha256 = "8bbf6bb125003d88ee1c22935a36b7b1ab7d957e0c8b5fbfe5cb6310b6e86ae0";
};
subversion19 = common {
version = "1.9.3";
sha1 = "27e8df191c92095f48314a415194ec37c682cbcf";
sha256 = "8bbf6bb125003d88ee1c22935a36b7b1ab7d957e0c8b5fbfe5cb6310b6e86ae0";
};
}

View File

@ -1,34 +1,31 @@
{stdenv, fetchsvn, pkgconfig, libjpeg, imagemagick, libv4l}:
{ stdenv, fetchFromGitHub, cmake, libjpeg }:
stdenv.mkDerivation rec {
rev = "182";
name = "mjpg-streamer-${rev}";
name = "mjpg-streamer-${version}";
version = "2016-03-08";
src = fetchsvn {
url = https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer/mjpg-streamer;
inherit rev;
sha256 = "008k2wk6xagprbiwk8fvzbz4dd6i8kzrr9n62gj5i1zdv7zcb16q";
src = fetchFromGitHub {
owner = "jacksonliam";
repo = "mjpg-streamer";
rev = "4060cb64e3557037fd404d10e1c1d076b672e9e8";
sha256 = "0g7y832jsz4ylmq9qp2l4fq6bm8l6dhsbi60fr5jfqpx4l0pia8m";
};
patchPhase = ''
substituteInPlace Makefile "make -C plugins\/input_gspcav1" "# make -C plugins\/input_gspcav1"
substituteInPlace Makefile "cp plugins\/input_gspcav1\/input_gspcav1.so" "# cp plugins\/input_gspcav1\/input_gspcav1.so"
prePatch = ''
cd mjpg-streamer-experimental
'';
nativeBuildInputs = [ cmake ];
buildInputs = [ libjpeg ];
postFixup = ''
patchelf --set-rpath "$(patchelf --print-rpath $out/bin/mjpg_streamer):$out/lib:$out/lib/plugins" $out/bin/mjpg_streamer
patchelf --set-rpath "$(patchelf --print-rpath $out/bin/mjpg_streamer):$out/lib/mjpg-streamer" $out/bin/mjpg_streamer
'';
makeFlags = "DESTDIR=$(out)";
preInstall = ''
mkdir -p $out/{bin,lib}
'';
buildInputs = [ pkgconfig libjpeg imagemagick libv4l ];
meta = {
meta = with stdenv.lib; {
homepage = http://sourceforge.net/projects/mjpg-streamer/;
description = "MJPG-streamer takes JPGs from Linux-UVC compatible webcams, filesystem or other input plugins and streams them as M-JPEG via HTTP to webbrowsers, VLC and other software";
platforms = platforms.linux;
licenses = licenses.gpl2;
};
}

View File

@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
(optional withGUI qt5.qtbase)
];
preConfigure = "./autogen.sh";
preConfigure = "./autogen.sh; patchShebangs .";
buildPhase = "./drake -j $NIX_BUILD_CORES";
installPhase = "./drake install -j $NIX_BUILD_CORES";

View File

@ -23,7 +23,6 @@ in stdenv.mkDerivation rec {
'';
license = licenses.lgpl21Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ iyzsong ];
};
nativeBuildInputs = [ pkgconfig intltool itstool makeWrapper ];

View File

@ -1,11 +1,15 @@
{ stdenv, fetchurl, python, zlib, pkgconfig, glib, ncurses, perl, pixman
, attr, libcap, vde2, alsaLib, texinfo, libuuid, flex, bison, lzo, snappy
, libseccomp, libaio, libcap_ng, gnutls, nettle, numactl
, vde2, alsaLib, texinfo, libuuid, flex, bison, lzo, snappy
, libaio, gnutls, nettle
, makeWrapper
, pulseSupport ? true, libpulseaudio
, sdlSupport ? true, SDL
, attr, libcap, libcap_ng
, CoreServices, Cocoa, rez, setfile
, numaSupport ? stdenv.isLinux, numactl
, seccompSupport ? stdenv.isLinux, libseccomp
, pulseSupport ? !stdenv.isDarwin, libpulseaudio
, sdlSupport ? !stdenv.isDarwin, SDL
, vncSupport ? true, libjpeg, libpng
, spiceSupport ? true, spice, spice_protocol, usbredir
, spiceSupport ? !stdenv.isDarwin, spice, spice_protocol, usbredir
, x86Only ? false
}:
@ -26,31 +30,35 @@ stdenv.mkDerivation rec {
};
buildInputs =
[ python zlib pkgconfig glib ncurses perl pixman attr libcap
vde2 texinfo libuuid flex bison makeWrapper lzo snappy libseccomp
libcap_ng gnutls nettle numactl
[ python zlib pkgconfig glib ncurses perl pixman
vde2 texinfo libuuid flex bison makeWrapper lzo snappy
gnutls nettle
]
++ optionals stdenv.isDarwin [ CoreServices Cocoa rez setfile ]
++ optionals seccompSupport [ libseccomp ]
++ optionals numaSupport [ numactl ]
++ optionals pulseSupport [ libpulseaudio ]
++ optionals sdlSupport [ SDL ]
++ optionals vncSupport [ libjpeg libpng ]
++ optionals spiceSupport [ spice_protocol spice usbredir ]
++ optionals (hasSuffix "linux" stdenv.system) [ alsaLib libaio ];
++ optionals stdenv.isLinux [ alsaLib libaio libcap_ng libcap attr ];
enableParallelBuilding = true;
patches = [ ./no-etc-install.patch ];
configureFlags =
[ "--enable-seccomp"
"--enable-numa"
"--smbd=smbd" # use `smbd' from $PATH
[ "--smbd=smbd" # use `smbd' from $PATH
"--audio-drv-list=${audio}"
"--sysconfdir=/etc"
"--localstatedir=/var"
]
++ optional numaSupport "--enable-numa"
++ optional seccompSupport "--enable-seccomp"
++ optional spiceSupport "--enable-spice"
++ optional x86Only "--target-list=i386-softmmu,x86_64-softmmu"
++ optional (hasSuffix "linux" stdenv.system) "--enable-linux-aio";
++ optional stdenv.isDarwin "--enable-cocoa"
++ optional stdenv.isLinux "--enable-linux-aio";
postInstall =
''
@ -66,6 +74,6 @@ stdenv.mkDerivation rec {
description = "A generic and open source machine emulator and virtualizer";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ viric eelco ];
platforms = platforms.linux;
platforms = platforms.linux ++ platforms.darwin;
};
}

View File

@ -15,39 +15,12 @@ let
libDir = if stdenv.is64bit then "lib64" else "lib";
# Sources needed to build the stubdoms and tools
# Sources needed to build the tools
# These sources are already rather old and probably do not change frequently
xenExtfiles = [
{ url = http://xenbits.xensource.com/xen-extfiles/lwip-1.3.0.tar.gz;
sha256 = "13wlr85s1hnvia6a698qpryyy12lvmqw0a05xmjnd0h71ralsbkp";
}
{ url = http://xenbits.xensource.com/xen-extfiles/zlib-1.2.3.tar.gz;
sha256 = "0pmh8kifb6sfkqfxc23wqp3f2wzk69sl80yz7w8p8cd4cz8cg58p";
}
{ url = http://xenbits.xensource.com/xen-extfiles/newlib-1.16.0.tar.gz;
sha256 = "01rxk9js833mwadq92jx0flvk9jyjrnwrq93j39c2j2wjsa66hnv";
}
{ url = http://xenbits.xensource.com/xen-extfiles/grub-0.97.tar.gz;
sha256 = "02r6b52r0nsp6ryqfiqchnl7r1d9smm80sqx24494gmx5p8ia7af";
}
{ url = http://xenbits.xensource.com/xen-extfiles/pciutils-2.2.9.tar.bz2;
sha256 = "092v4q478i1gc7f3s2wz6p4xlf1wb4gs5shbkn21vnnmzcffc2pn";
}
{ url = http://xenbits.xensource.com/xen-extfiles/tpm_emulator-0.7.4.tar.gz;
sha256 = "0nd4vs48j0zfzv1g5jymakxbjqf9ss6b2jph3b64356xhc6ylj2f";
}
{ url = http://xenbits.xensource.com/xen-extfiles/tboot-20090330.tar.gz;
sha256 = "0rl1b53g019w2c268pyxhjqsj9ls37i4p74bdv1hdi2yvs0r1y81";
}
{ url = http://xenbits.xensource.com/xen-extfiles/ipxe-git-9a93db3f0947484e30e753bbd61a10b17336e20e.tar.gz;
sha256 = "0p206zaxlhda60ci33h9gipi5gm46fvvsm6k5c0w7b6cjg0yhb33";
}
{ url = http://xenbits.xensource.com/xen-extfiles/polarssl-1.1.4-gpl.tgz;
sha256 = "1dl4fprpwagv9akwqpb62qwqvh24i50znadxwvd2kfnhl02gsa9d";
}
{ url = http://xenbits.xensource.com/xen-extfiles/gmp-4.3.2.tar.bz2;
sha256 = "0x8prpqi9amfcmi7r4zrza609ai9529pjaq0h4aw51i867064qck";
}
];
scriptEnvPath = stdenv.lib.concatStrings (stdenv.lib.intersperse ":" (map (x: "${x}/bin")
@ -116,6 +89,9 @@ stdenv.mkDerivation {
export EXTRA_QEMUU_CONFIGURE_ARGS="--enable-spice --enable-usb-redir --enable-linux-aio"
'';
# https://github.com/NixOS/nixpkgs/issues/13590
configureFlags = ["--disable-stubdom"];
postConfigure =
''
substituteInPlace tools/libfsimage/common/fsimage_plugin.c \
@ -171,7 +147,7 @@ stdenv.mkDerivation {
#makeFlags = "XSM_ENABLE=y FLASK_ENABLE=y PREFIX=$(out) CONFIG_DIR=/etc XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files ";
makeFlags = "PREFIX=$(out) CONFIG_DIR=/etc XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files ";
buildFlags = "xen tools stubdom";
buildFlags = "xen tools";
postBuild =
''

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