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; inherit (builtins) attrNames listToAttrs hasAttr isAttrs getAttr;
/* Return an attribute from nested attribute sets. For instance /* Return an attribute from nested attribute sets.
["x" "y"] applied to some set e returns e.x.y, if it exists. The
default value is returned otherwise. */ Example:
x = { a = { b = 3; }; }
attrByPath ["a" "b"] 6 x
=> 3
attrByPath ["z" "z"] 6 x
=> 6
*/
attrByPath = attrPath: default: e: attrByPath = attrPath: default: e:
let attr = head attrPath; let attr = head attrPath;
in in
@ -24,8 +30,15 @@ rec {
else default; else default;
/* Return if an attribute from nested attribute set exists. /* 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: hasAttrByPath = attrPath: e:
let attr = head attrPath; let attr = head attrPath;
in in
@ -35,14 +48,28 @@ rec {
else false; else false;
/* Return nested attribute set in which an attribute is set. For instance /* Return nested attribute set in which an attribute is set.
["x" "y"] applied with some value v returns `x.y = v;' */
Example:
setAttrByPath ["a" "b"] 3
=> { a = { b = 3; }; }
*/
setAttrByPath = attrPath: value: setAttrByPath = attrPath: value:
if attrPath == [] then value if attrPath == [] then value
else listToAttrs else listToAttrs
[ { name = head attrPath; value = setAttrByPath (tail attrPath) value; } ]; [ { 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: getAttrFromPath = attrPath: set:
let errorMsg = "cannot find attribute `" + concatStringsSep "." attrPath + "'"; let errorMsg = "cannot find attribute `" + concatStringsSep "." attrPath + "'";
in attrByPath attrPath (abort errorMsg) set; in attrByPath attrPath (abort errorMsg) set;
@ -109,9 +136,11 @@ rec {
) (attrNames set) ) (attrNames set)
); );
/* foldAttrs: apply fold functions to values grouped by key. Eg accumulate values as list: /* Apply fold functions to values grouped by key.
foldAttrs (n: a: [n] ++ a) [] [{ a = 2; } { a = 3; }]
=> { a = [ 2 3 ]; } Example:
foldAttrs (n: a: [n] ++ a) [] [{ a = 2; } { a = 3; }]
=> { a = [ 2 3 ]; }
*/ */
foldAttrs = op: nul: list_of_attrs: foldAttrs = op: nul: list_of_attrs:
fold (n: a: fold (n: a:
@ -147,7 +176,12 @@ rec {
/* Utility function that creates a {name, value} pair as expected by /* 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; }; nameValuePair = name: value: { inherit name value; };
@ -248,11 +282,19 @@ rec {
listToAttrs (map (n: nameValuePair n (f n)) names); 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"; isDerivation = x: isAttrs x && x ? type && x.type == "derivation";
/* Converts a store path to a fake derivation. */
/* Convert a store path to a fake derivation. */
toDerivation = path: toDerivation = path:
let path' = builtins.storePath path; in let path' = builtins.storePath path; in
{ type = "derivation"; { type = "derivation";
@ -262,32 +304,49 @@ rec {
}; };
/* If the Boolean `cond' is true, return the attribute set `as', /* If `cond' is true, return the attribute set `as',
otherwise an empty attribute set. */ otherwise an empty attribute set.
Example:
optionalAttrs (true) { my = "set"; }
=> { my = "set"; }
optionalAttrs (false) { my = "set"; }
=> { }
*/
optionalAttrs = cond: as: if cond then as else {}; optionalAttrs = cond: as: if cond then as else {};
/* Merge sets of attributes and use the function f to merge attributes /* 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: zipAttrsWithNames = names: f: sets:
listToAttrs (map (name: { listToAttrs (map (name: {
inherit name; inherit name;
value = f name (catAttrs name sets); value = f name (catAttrs name sets);
}) names); }) names);
# implentation note: Common names appear multiple times in the list of /* Implentation note: Common names appear multiple times in the list of
# names, hopefully this does not affect the system because the maximal names, hopefully this does not affect the system because the maximal
# laziness avoid computing twice the same expression and listToAttrs does laziness avoid computing twice the same expression and listToAttrs does
# not care about duplicated attribute names. 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; 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); 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 /* Does the same as the update operator '//' except that attributes are
merged until the given pedicate is verified. The predicate should merged until the given pedicate is verified. The predicate should
accept 3 arguments which are the path to reach the attribute, a part of accept 3 arguments which are the path to reach the attribute, a part of
@ -351,6 +410,15 @@ rec {
!(isAttrs lhs && isAttrs rhs) !(isAttrs lhs && isAttrs rhs)
) lhs 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: matchAttrs = pattern: attrs:
fold or false (attrValues (zipAttrsWithNames (attrNames pattern) (n: values: fold or false (attrValues (zipAttrsWithNames (attrNames pattern) (n: values:
let pat = head values; val = head (tail values); in let pat = head values; val = head (tail values); in
@ -359,10 +427,23 @@ rec {
else pat == val else pat == val
) [pattern attrs])); ) [pattern attrs]));
# override only the attributes that are already present in the old set /* Override only the attributes that are already present in the old set
# useful for deep-overriding 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: overrideExisting = old: new:
old // listToAttrs (map (attr: nameValuePair attr (attrByPath [attr] old.${attr} new)) (attrNames old)); 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"; 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 { fdl12 = spdx {
spdxId = "GFDL-1.2"; spdxId = "GFDL-1.2";
fullName = "GNU Free Documentation License v1.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; 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 Example:
# sometimes more convenient with respect to indentation than `[x]' singleton "foo"
# when x spans multiple lines. => [ "foo" ]
*/
singleton = x: [x]; 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 Example:
# `list' with `nul' as the starting value, i.e., `fold op nul [x_1 concat = fold (a: b: a + b) "z"
# x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))'. (This is concat [ "a" "b" "c" ]
# Haskell's foldr). => "abcnul"
*/
fold = op: nul: list: fold = op: nul: list:
let let
len = length list; len = length list;
@ -26,8 +35,14 @@ rec {
else op (elemAt list n) (fold' (n + 1)); else op (elemAt list n) (fold' (n + 1));
in fold' 0; in fold' 0;
# Left fold: `fold op nul [x_1 x_2 ... x_n] == op (... (op (op nul /* Left fold: `fold op nul [x_1 x_2 ... x_n] == op (... (op (op nul
# x_1) x_2) ... x_n)'. x_1) x_2) ... x_n)'.
Example:
lconcat = foldl (a: b: a + b) "z"
lconcat [ "a" "b" "c" ]
=> "zabc"
*/
foldl = op: nul: list: foldl = op: nul: list:
let let
len = length list; len = length list;
@ -37,13 +52,22 @@ rec {
else op (foldl' (n - 1)) (elemAt list n); else op (foldl' (n - 1)) (elemAt list n);
in foldl' (length list - 1); 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; foldl' = builtins.foldl' or foldl;
/* Map with index
# Map with index: `imap (i: v: "${v}-${toString i}") ["a" "b"] == FIXME(zimbatm): why does this start to count at 1?
# ["a-1" "b-2"]'. FIXME: why does this start to count at 1?
Example:
imap (i: v: "${v}-${toString i}") ["a" "b"]
=> [ "a-1" "b-2" ]
*/
imap = imap =
if builtins ? genList then if builtins ? genList then
f: list: genList (n: f (n + 1) (elemAt list n)) (length list) 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); else [ (f (n + 1) (elemAt list n)) ] ++ imap' (n + 1);
in imap' 0; 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); 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 Example:
# spliced into the top-level lists. E.g., `flatten [1 [2 [3] 4] 5] flatten [1 [2 [3] 4] 5]
# == [1 2 3 4 5]' and `flatten 1 == [1]'. => [1 2 3 4 5]
flatten 1
=> [1]
*/
flatten = x: flatten = x:
if isList x if isList x
then foldl' (x: y: x ++ (flatten y)) [] x then foldl' (x: y: x ++ (flatten y)) [] x
else [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); 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 Example:
# predicate, returns `default' if no such element exists, or findSingle (x: x == 3) "none" "multiple" [ 1 3 3 ]
# `multiple' if there are multiple matching elements. => "multiple"
findSingle (x: x == 3) "none" "multiple" [ 1 3 ]
=> 3
findSingle (x: x == 3) "none" "multiple" [ 1 9 ]
=> "none"
*/
findSingle = pred: default: multiple: list: findSingle = pred: default: multiple: list:
let found = filter pred list; len = length found; let found = filter pred list; len = length found;
in if len == 0 then default in if len == 0 then default
else if len != 1 then multiple else if len != 1 then multiple
else head found; 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 Example:
# predicate or returns `default' if no such element exists. findFirst (x: x > 3) 7 [ 1 6 4 ]
=> 6
findFirst (x: x > 9) 7 [ 1 6 4 ]
=> 7
*/
findFirst = pred: default: list: findFirst = pred: default: list:
let found = filter pred list; let found = filter pred list;
in if found == [] then default else head found; 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 Example:
# of `list'. 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); 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 Example:
# `list'. 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); 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 Example:
# of `list'. count (x: x == 3) [ 3 2 3 4 6 ]
=> 2
*/
count = pred: foldl' (c: x: if pred x then c + 1 else c) 0; 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 Example:
# value. Useful when building lists with optional elements optional true "foo"
# (e.g. `++ optional (system == "i686-linux") flashplayer'). => [ "foo" ]
optional false "foo"
=> [ ]
*/
optional = cond: elem: if cond then [elem] else []; 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 []; optionals = cond: elems: if cond then elems else [];
# If argument is a list, return it; else, wrap it in a singleton /* If argument is a list, return it; else, wrap it in a singleton
# list. If you're using this, you should almost certainly list. If you're using this, you should almost certainly
# reconsider if there isn't a more "well-typed" approach. 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]; 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 = range =
if builtins ? genList then if builtins ? genList then
first: last: first: last:
@ -136,9 +228,13 @@ rec {
then [] then []
else [first] ++ range (first + 1) last; 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 Example:
# `wrong', depending on the evaluation of a predicate. partition (x: x > 2) [ 5 1 2 3 4 ]
=> { right = [ 5 3 4 ]; wrong = [ 1 2 ]; }
*/
partition = pred: partition = pred:
fold (h: t: fold (h: t:
if pred h if pred h
@ -146,7 +242,14 @@ rec {
else { right = t.right; wrong = [h] ++ t.wrong; } else { right = t.right; wrong = [h] ++ t.wrong; }
) { right = []; 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 = zipListsWith =
if builtins ? genList then if builtins ? genList then
f: fst: snd: genList (n: f (elemAt fst n) (elemAt snd n)) (min (length fst) (length snd)) f: fst: snd: genList (n: f (elemAt fst n) (elemAt snd n)) (min (length fst) (length snd))
@ -161,21 +264,37 @@ rec {
else []; else [];
in zipListsWith' 0; 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; }); 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 = reverseList =
if builtins ? genList then if builtins ? genList then
xs: let l = length xs; in genList (n: elemAt xs (l - n - 1)) l xs: let l = length xs; in genList (n: elemAt xs (l - n - 1)) l
else else
fold (e: acc: acc ++ [ e ]) []; 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 Example:
# elements and returns true if the first argument is strictly below sort (a: b: a < b) [ 5 3 7 ]
# the second argument. The returned list is sorted in an increasing => [ 3 5 7 ]
# order. The implementation does a quick-sort. */
sort = builtins.sort or ( sort = builtins.sort or (
strictLess: list: strictLess: list:
let let
@ -193,8 +312,14 @@ rec {
if len < 2 then list if len < 2 then list
else (sort strictLess pivot.left) ++ [ first ] ++ (sort strictLess pivot.right)); 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 = take =
if builtins ? genList then if builtins ? genList then
count: sublist 0 count count: sublist 0 count
@ -209,8 +334,14 @@ rec {
[ (elemAt list n) ] ++ take' (n + 1); [ (elemAt list n) ] ++ take' (n + 1);
in take' 0; 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 = drop =
if builtins ? genList then if builtins ? genList then
count: list: sublist count (length list) list count: list: sublist count (length list) list
@ -225,9 +356,15 @@ rec {
drop' (n - 1) ++ [ (elemAt list n) ]; drop' (n - 1) ++ [ (elemAt list n) ];
in drop' (len - 1); 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, Example:
# starting at index start. sublist 1 3 [ "a" "b" "c" "d" "e" ]
=> [ "b" "c" "d" ]
sublist 1 3 [ ]
=> [ ]
*/
sublist = start: count: list: sublist = start: count: list:
let len = length list; in let len = length list; in
genList genList
@ -236,23 +373,36 @@ rec {
else if start + count > len then len - start else if start + count > len then len - start
else count); else count);
/* Return the last element of a list.
# Return the last element of a list. Example:
last [ 1 2 3 ]
=> 3
*/
last = list: last = list:
assert list != []; elemAt list (length list - 1); 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; 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]; 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: unique = list:
if list == [] then if list == [] then
[] []
@ -262,12 +412,24 @@ rec {
xs = unique (drop 1 list); xs = unique (drop 1 list);
in [x] ++ remove x xs; 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); 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)); 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>"; fpletz = "Franz Pletz <fpletz@fnordicwalking.de>";
fps = "Florian Paul Schmidt <mista.tapas@gmx.net>"; fps = "Florian Paul Schmidt <mista.tapas@gmx.net>";
fridh = "Frederik Rietdijk <fridh@fridh.nl>"; fridh = "Frederik Rietdijk <fridh@fridh.nl>";
frlan = "Frank Lanitz <frank@frank.uvena.de>";
fro_ozen = "fro_ozen <fro_ozen@gmx.de>"; fro_ozen = "fro_ozen <fro_ozen@gmx.de>";
ftrvxmtrx = "Siarhei Zirukin <ftrvxmtrx@gmail.com>"; ftrvxmtrx = "Siarhei Zirukin <ftrvxmtrx@gmail.com>";
funfunctor = "Edward O'Callaghan <eocallaghan@alterapraxis.com>"; funfunctor = "Edward O'Callaghan <eocallaghan@alterapraxis.com>";
@ -152,7 +153,6 @@
iElectric = "Domen Kozar <domen@dev.si>"; iElectric = "Domen Kozar <domen@dev.si>";
igsha = "Igor Sharonov <igor.sharonov@gmail.com>"; igsha = "Igor Sharonov <igor.sharonov@gmail.com>";
ikervagyok = "Balázs Lengyel <ikervagyok@gmail.com>"; ikervagyok = "Balázs Lengyel <ikervagyok@gmail.com>";
iyzsong = "Song Wenwu <iyzsong@gmail.com>";
j-keck = "Jürgen Keck <jhyphenkeck@gmail.com>"; j-keck = "Jürgen Keck <jhyphenkeck@gmail.com>";
jagajaga = "Arseniy Seroka <ars.seroka@gmail.com>"; jagajaga = "Arseniy Seroka <ars.seroka@gmail.com>";
javaguirre = "Javier Aguirre <contacto@javaguirre.net>"; javaguirre = "Javier Aguirre <contacto@javaguirre.net>";
@ -208,10 +208,12 @@
malyn = "Michael Alyn Miller <malyn@strangeGizmo.com>"; malyn = "Michael Alyn Miller <malyn@strangeGizmo.com>";
manveru = "Michael Fellinger <m.fellinger@gmail.com>"; manveru = "Michael Fellinger <m.fellinger@gmail.com>";
marcweber = "Marc Weber <marco-oweber@gmx.de>"; marcweber = "Marc Weber <marco-oweber@gmx.de>";
markus1189 = "Markus Hauck <markus1189@gmail.com>";
markWot = "Markus Wotringer <markus@wotringer.de>"; markWot = "Markus Wotringer <markus@wotringer.de>";
matejc = "Matej Cotman <cotman.matej@gmail.com>"; matejc = "Matej Cotman <cotman.matej@gmail.com>";
mathnerd314 = "Mathnerd314 <mathnerd314.gph+hs@gmail.com>"; mathnerd314 = "Mathnerd314 <mathnerd314.gph+hs@gmail.com>";
matthiasbeyer = "Matthias Beyer <mail@beyermatthias.de>"; matthiasbeyer = "Matthias Beyer <mail@beyermatthias.de>";
mbauer = "Matthew Bauer <mjbauer95@gmail.com>";
maurer = "Matthew Maurer <matthew.r.maurer+nix@gmail.com>"; maurer = "Matthew Maurer <matthew.r.maurer+nix@gmail.com>";
mbakke = "Marius Bakke <ymse@tuta.io>"; mbakke = "Marius Bakke <ymse@tuta.io>";
mbe = "Brandon Edens <brandonedens@gmail.com>"; mbe = "Brandon Edens <brandonedens@gmail.com>";
@ -299,7 +301,9 @@
sander = "Sander van der Burg <s.vanderburg@tudelft.nl>"; sander = "Sander van der Burg <s.vanderburg@tudelft.nl>";
schmitthenner = "Fabian Schmitthenner <development@schmitthenner.eu>"; schmitthenner = "Fabian Schmitthenner <development@schmitthenner.eu>";
schristo = "Scott Christopher <schristopher@konputa.com>"; schristo = "Scott Christopher <schristopher@konputa.com>";
scolobb = "Sergiu Ivanov <sivanov@colimite.fr>";
sepi = "Raffael Mancini <raffael@mancini.lu>"; sepi = "Raffael Mancini <raffael@mancini.lu>";
sheenobu = "Sheena Artrip <sheena.artrip@gmail.com>";
sheganinans = "Aistis Raulinaitis <sheganinans@gmail.com>"; sheganinans = "Aistis Raulinaitis <sheganinans@gmail.com>";
shell = "Shell Turner <cam.turn@gmail.com>"; shell = "Shell Turner <cam.turn@gmail.com>";
shlevy = "Shea Levy <shea@shealevy.com>"; shlevy = "Shea Levy <shea@shealevy.com>";

View File

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

View File

@ -10,65 +10,147 @@ rec {
inherit (builtins) stringLength substring head tail isString replaceStrings; inherit (builtins) stringLength substring head tail isString replaceStrings;
/* Concatenate a list of strings.
# Concatenate a list of strings. Example:
concatStrings ["foo" "bar"]
=> "foobar"
*/
concatStrings = concatStrings =
if builtins ? concatStringsSep then if builtins ? concatStringsSep then
builtins.concatStringsSep "" builtins.concatStringsSep ""
else else
lib.foldl' (x: y: x + y) ""; 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); 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); 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., Example:
# `intersperse "," ["a" "b" "c"]' returns ["a" "," "b" "," "c"]. intersperse "/" ["usr" "local" "bin"]
=> ["usr" "/" "local" "/" "bin"].
*/
intersperse = separator: list: intersperse = separator: list:
if list == [] || length list == 1 if list == [] || length list == 1
then list then list
else tail (lib.concatMap (x: [separator x]) 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. Example:
# concatStringsSep " " ["foo" "bar" "xyzzy"] == "foo bar xyzzy" concatStringsSep "/" ["usr" "local" "bin"]
=> "usr/local/bin"
*/
concatStringsSep = builtins.concatStringsSep or (separator: list: concatStringsSep = builtins.concatStringsSep or (separator: list:
concatStrings (intersperse 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); 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); 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" Example:
# directory of the given list of packages. For example, makeSearchPath "bin" ["/root" "/usr" "/usr/local"]
# `makeSearchPath "bin" ["x" "y" "z"]' returns "x/bin:y/bin:z/bin". => "/root/bin:/usr/bin:/usr/local/bin"
makeSearchPath "bin" ["/"]
=> "//bin"
*/
makeSearchPath = subDir: packages: makeSearchPath = subDir: packages:
concatStringsSep ":" (map (path: path + "/" + 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 Example:
# libraries for a set of packages, e.g. "${pkg1}/lib:${pkg2}/lib:...". 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"; makeLibraryPath = makeSearchPath "lib";
# Construct a binary search path (such as $PATH) containing the /* Construct a binary search path (such as $PATH) containing the
# binaries for a set of packages, e.g. "${pkg1}/bin:${pkg2}/bin:...". binaries for a set of packages.
Example:
makeBinPath ["/root" "/usr" "/usr/local"]
=> "/root/bin:/usr/bin:/usr/local/bin"
*/
makeBinPath = makeSearchPath "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"; 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 Example:
# or the empty string. optionalString true "some-string"
=> "some-string"
optionalString false "some-string"
=> ""
*/
optionalString = cond: string: if cond then string else ""; 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: hasPrefix = pref: str:
substring 0 (stringLength pref) str == pref; 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: hasSuffix = suff: str:
let let
lenStr = stringLength str; lenStr = stringLength str;
@ -76,36 +158,55 @@ rec {
in lenStr >= lenSuff && in lenStr >= lenSuff &&
substring (lenStr - lenSuff) lenStr str == suff; 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). Example:
# For instance, "abc" becomes ["a" "b" "c"]. This allows you to, stringToCharacters ""
# e.g., map a function over each character. However, note that this => [ ]
# will likely be horribly inefficient; Nix is not a general purpose stringToCharacters "abc"
# programming language. Complex string manipulations should, if => [ "a" "b" "c" ]
# appropriate, be done in a derivation. stringToCharacters "💩"
=> [ "<EFBFBD>" "<EFBFBD>" "<EFBFBD>" "<EFBFBD>" ]
*/
stringToCharacters = s: stringToCharacters = s:
map (p: substring p 1 s) (lib.range 0 (stringLength s - 1)); 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 Example:
# strings before concatenating the results. stringAsChars (x: if x == "a" then "i" else x) "nax"
=> "nix"
*/
stringAsChars = f: s: stringAsChars = f: s:
concatStrings ( concatStrings (
map f (stringToCharacters s) 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 Example:
# prefixing it with a backslash. For example, escape ["(" ")"] escape ["(" ")"] "(foo)"
# "(foo)" returns the string \(foo\). => "\\(foo\\)"
*/
escape = list: replaceChars list (map (c: "\\${c}") list); 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*[]"); escapeShellArg = lib.escape (stringToCharacters "\\ ';$`()|<>\t*[]");
/* Obsolete - use replaceStrings instead. */
# Obsolete - use replaceStrings instead.
replaceChars = builtins.replaceStrings or ( replaceChars = builtins.replaceStrings or (
del: new: s: del: new: s:
let let
@ -119,21 +220,52 @@ rec {
in in
stringAsChars subst s); stringAsChars subst s);
# Case conversion utilities. # Case conversion utilities.
lowerChars = stringToCharacters "abcdefghijklmnopqrstuvwxyz"; lowerChars = stringToCharacters "abcdefghijklmnopqrstuvwxyz";
upperChars = stringToCharacters "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; upperChars = stringToCharacters "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/* Converts an ASCII string to lower-case.
Example:
toLower "HOME"
=> "home"
*/
toLower = replaceChars upperChars lowerChars; toLower = replaceChars upperChars lowerChars;
/* Converts an ASCII string to upper-case.
Example:
toLower "home"
=> "HOME"
*/
toUpper = replaceChars lowerChars upperChars; 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; 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 NOTE: this function is not performant and should be avoided
# were separated by this separator; e.g., `splitString "."
# "foo.bar.baz"' returns ["foo" "bar" "baz"]. Example:
splitString "." "foo.bar.baz"
=> [ "foo" "bar" "baz" ]
splitString "/" "/usr/local/bin"
=> [ "" "usr" "local" "bin" ]
*/
splitString = _sep: _s: splitString = _sep: _s:
let let
sep = addContextFrom _s _sep; sep = addContextFrom _s _sep;
@ -157,10 +289,15 @@ rec {
in in
recurse 0 0; 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 Example:
# prefix. e.g., removePrefix "foo." "foo.bar.baz"
# `removePrefix "foo." "foo.bar.baz"' returns "bar.baz". => "bar.baz"
removePrefix "xxx" "foo.bar.baz"
=> "foo.bar.baz"
*/
removePrefix = pre: s: removePrefix = pre: s:
let let
preLen = stringLength pre; preLen = stringLength pre;
@ -171,6 +308,15 @@ rec {
else else
s; 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: removeSuffix = suf: s:
let let
sufLen = stringLength suf; sufLen = stringLength suf;
@ -181,25 +327,49 @@ rec {
else else
s; 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; 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; 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 Example:
# derivation's "name" attribute and extracts the version part from that getVersion "youtube-dl-2016.01.01"
# argument. For example: => "2016.01.01"
# getVersion pkgs.youtube-dl
# lib.getVersion "youtube-dl-2016.01.01" ==> "2016.01.01" => "2016.01.01"
# lib.getVersion pkgs.youtube-dl ==> "2016.01.01" */
getVersion = x: (builtins.parseDrvName (x.name or x)).version; 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 Example:
# supposed to start extension. 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: nameFromURL = url: sep:
let let
components = splitString "/" url; components = splitString "/" url;
@ -207,14 +377,24 @@ rec {
name = builtins.head (splitString sep filename); name = builtins.head (splitString sep filename);
in assert name != filename; name; 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 Example:
# standard GNU Autoconf scripts. enableFeature true "shared"
=> "--enable-shared"
enableFeature false "shared"
=> "--disable-shared"
*/
enableFeature = enable: feat: "--${if enable then "enable" else "disable"}-${feat}"; 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 Example:
# required width. fixedWidthString 5 "0" (toString 15)
=> "00015"
*/
fixedWidthString = width: filler: str: fixedWidthString = width: filler: str:
let let
strw = lib.stringLength str; strw = lib.stringLength str;
@ -223,25 +403,58 @@ rec {
assert strw <= width; assert strw <= width;
if strw == width then str else filler + fixedWidthString reqWidth filler str; 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); 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; isStorePath = x: builtins.substring 0 1 (toString x) == "/" && dirOf (builtins.toPath x) == builtins.storeDir;
# Convert string to int /* Convert string to int
# Obviously, it is a bit hacky to use fromJSON that way. 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: toInt = str:
let may_be_int = builtins.fromJSON str; in let may_be_int = builtins.fromJSON str; in
if builtins.isInt may_be_int if builtins.isInt may_be_int
then may_be_int then may_be_int
else throw "Could not convert ${str} to int."; else throw "Could not convert ${str} to int.";
# Read a list of paths from `file', relative to the `rootPath'. Lines /* Read a list of paths from `file', relative to the `rootPath'. Lines
# beginning with `#' are treated as comments and ignored. Whitespace beginning with `#' are treated as comments and ignored. Whitespace
# is significant. 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: readPathsFromFile = rootPath: file:
let let
root = toString rootPath; root = toString rootPath;
@ -253,5 +466,4 @@ rec {
absolutePaths = builtins.map (path: builtins.toPath (root + "/" + path)) relativePaths; absolutePaths = builtins.map (path: builtins.toPath (root + "/" + path)) relativePaths;
in in
absolutePaths; absolutePaths;
} }

View File

@ -247,6 +247,21 @@ $TTL 1800
</programlisting> </programlisting>
</listitem> </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> </itemizedlist>

View File

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

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: nvidiaForKernel = kernelPackages:
if elem "nvidia" drivers then if elem "nvidia" drivers then
kernelPackages.nvidia_x11 kernelPackages.nvidia_x11
else if elem "nvidiaBeta" drivers then
kernelPackages.nvidia_x11_beta
else if elem "nvidiaLegacy173" drivers then else if elem "nvidiaLegacy173" drivers then
kernelPackages.nvidia_x11_legacy173 kernelPackages.nvidia_x11_legacy173
else if elem "nvidiaLegacy304" drivers then else if elem "nvidiaLegacy304" drivers then

View File

@ -254,6 +254,7 @@
octoprint = 230; octoprint = 230;
avahi-autoipd = 231; avahi-autoipd = 231;
nntp-proxy = 232; 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! # 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)); nixosVersion = mkDefault (maybeEnv "NIXOS_VERSION" (cfg.nixosRelease + cfg.nixosVersionSuffix));
# Note: code names must only increase in alphabetical order. # Note: code names must only increase in alphabetical order.
nixosCodeName = "Emu"; nixosCodeName = "Flounder";
}; };
# Generate /etc/os-release. See # Generate /etc/os-release. See

View File

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

View File

@ -98,6 +98,9 @@ with lib;
(mkRenamedOptionModule [ "services" "hostapd" "extraCfg" ] [ "services" "hostapd" "extraConfig" ]) (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. # Options that are obsolete and have no replacement.
(mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ]) (mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ])
(mkRemovedOptionModule [ "programs" "bash" "enable" ]) (mkRemovedOptionModule [ "programs" "bash" "enable" ])

View File

@ -26,19 +26,11 @@ in
''; '';
}; };
stable = mkOption { kernelPatch = mkOption {
type = types.bool; type = types.attrs;
default = false; example = lib.literalExample "pkgs.kernelPatches.grsecurity_4_1";
description = '' description = ''
Enable the stable grsecurity patch, based on Linux 3.14. Grsecurity patch to use.
'';
};
testing = mkOption {
type = types.bool;
default = false;
description = ''
Enable the testing grsecurity patch, based on Linux 4.0.
''; '';
}; };
@ -219,16 +211,7 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
assertions = 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) || { assertion = (cfg.config.restrictProc -> !cfg.config.restrictProcWithGroup) ||
(cfg.config.restrictProcWithGroup -> !cfg.config.restrictProc); (cfg.config.restrictProcWithGroup -> !cfg.config.restrictProc);
message = "You cannot enable both restrictProc and restrictProcWithGroup"; 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 { systemd.services.grsec-lock = mkIf cfg.config.sysctl {
description = "grsecurity sysctl-lock Service"; description = "grsecurity sysctl-lock Service";
requires = [ "systemd-sysctl.service" ]; requires = [ "systemd-sysctl.service" ];

View File

@ -293,7 +293,7 @@ in
# make sure that the tarsnap server is reachable after systemd starts up # make sure that the tarsnap server is reachable after systemd starts up
# the service - therefore we sleep in a loop until we can ping the # the service - therefore we sleep in a loop until we can ping the
# endpoint. # endpoint.
preStart = "while ! ping -q -c 1 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"; scriptArgs = "%i";
script = '' script = ''
mkdir -p -m 0755 ${dirOf cfg.cachedir} 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 = mainCf =
'' ''
compatibility_level = 2 compatibility_level = 9999
mail_owner = ${user} mail_owner = ${user}
default_privs = nobody default_privs = nobody

View File

@ -79,6 +79,11 @@ in
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
after = [ "network.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 = { 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 ""}"; 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"; ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";

View File

@ -328,7 +328,7 @@ in {
Group = cfg.group; Group = cfg.group;
TimeoutSec = "300"; TimeoutSec = "300";
WorkingDirectory = "${cfg.packages.gitlab}/share/gitlab"; 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; cfg = config.services.octoprint;
cfgUpdate = pkgs.writeText "octoprint-config.yaml" (builtins.toJSON { baseConfig = {
plugins.cura.cura_engine = "${pkgs.curaengine}/bin/CuraEngine"; plugins.cura.cura_engine = "${pkgs.curaengine}/bin/CuraEngine";
server.host = cfg.host; server.host = cfg.host;
server.port = cfg.port; server.port = cfg.port;
webcam.ffmpeg = "${pkgs.ffmpeg}/bin/ffmpeg"; 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 { pluginsEnv = pkgs.python.buildEnv.override {
extraLibs = cfg.plugins pkgs.octoprint-plugins; extraLibs = cfg.plugins pkgs.octoprint-plugins;
@ -62,13 +66,18 @@ in
}; };
plugins = mkOption { plugins = mkOption {
#type = types.functionTo (types.listOf types.package);
default = plugins: []; default = plugins: [];
defaultText = "plugins: []"; defaultText = "plugins: []";
example = literalExample "plugins: [ m3d-fio ]"; example = literalExample "plugins: [ m3d-fio ]";
description = "Additional plugins."; 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 = { 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_ROOT = dataDir;
GRAPHITE_CONF_DIR = configDir; GRAPHITE_CONF_DIR = configDir;
GRAPHITE_STORAGE_DIR = dataDir; GRAPHITE_STORAGE_DIR = dataDir;
@ -445,10 +451,21 @@ in {
after = [ "network-interfaces.target" ]; after = [ "network-interfaces.target" ];
path = [ pkgs.perl ]; path = [ pkgs.perl ];
environment = { 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"; DJANGO_SETTINGS_MODULE = "graphite.settings";
GRAPHITE_CONF_DIR = configDir; GRAPHITE_CONF_DIR = configDir;
GRAPHITE_STORAGE_DIR = dataDir; GRAPHITE_STORAGE_DIR = dataDir;
LD_LIBRARY_PATH = "${pkgs.cairo}/lib";
}; };
serviceConfig = { serviceConfig = {
ExecStart = '' ExecStart = ''
@ -486,9 +503,11 @@ in {
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
after = [ "network-interfaces.target" ]; after = [ "network-interfaces.target" ];
environment = { environment = {
PYTHONPATH = PYTHONPATH = let
"${cfg.api.package}/lib/python2.7/site-packages:" + aenv = pkgs.python.buildEnv.override {
concatMapStringsSep ":" (f: f + "/lib/python2.7/site-packages") cfg.api.finders; extraLibs = [ cfg.api.package pkgs.cairo ] ++ cfg.api.finders;
};
in "${aenv}/${pkgs.python.sitePackages}";
GRAPHITE_API_CONFIG = graphiteApiConfig; GRAPHITE_API_CONFIG = graphiteApiConfig;
LD_LIBRARY_PATH = "${pkgs.cairo}/lib"; LD_LIBRARY_PATH = "${pkgs.cairo}/lib";
}; };

View File

@ -49,7 +49,7 @@ in
''; '';
}; };
resolverName = mkOption { resolverName = mkOption {
default = "opendns"; default = "cisco";
type = types.nullOr types.string; type = types.nullOr types.string;
description = '' description = ''
The name of the upstream DNSCrypt resolver to use. See The name of the upstream DNSCrypt resolver to use. See
@ -130,6 +130,9 @@ in
${pkgs.xz}/lib/liblzma.so.* mr, ${pkgs.xz}/lib/liblzma.so.* mr,
${pkgs.libgcrypt}/lib/libgcrypt.so.* mr, ${pkgs.libgcrypt}/lib/libgcrypt.so.* mr,
${pkgs.libgpgerror}/lib/libgpg-error.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, ${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}')"; 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: { mkEndpointOpt = name: addr: port: {
enable = mkEnableOption name;
name = mkOption { name = mkOption {
type = types.str; type = types.str;
default = name; default = name;
@ -63,9 +64,9 @@ let
} // mkEndpointOpt name "127.0.0.1" 0; } // mkEndpointOpt name "127.0.0.1" 0;
i2pdConf = pkgs.writeText "i2pd.conf" '' i2pdConf = pkgs.writeText "i2pd.conf" ''
ipv6 = ${toOneZero cfg.enableIPv6} ipv6 = ${toYesNo cfg.enableIPv6}
notransit = ${toOneZero cfg.notransit} notransit = ${toYesNo cfg.notransit}
floodfill = ${toOneZero cfg.floodfill} floodfill = ${toYesNo cfg.floodfill}
${if isNull cfg.port then "" else "port = ${toString cfg.port}"} ${if isNull cfg.port then "" else "port = ${toString cfg.port}"}
${flip concatMapStrings ${flip concatMapStrings
(collect (proto: proto ? port && proto ? address && proto ? name) cfg.proto) (collect (proto: proto ? port && proto ? address && proto ? name) cfg.proto)
@ -73,6 +74,7 @@ let
[${proto.name}] [${proto.name}]
address = ${proto.address} address = ${proto.address}
port = ${toString proto.port} 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 ssl_enable=YES
rsa_cert_file=${cfg.rsaCertFile} rsa_cert_file=${cfg.rsaCertFile}
''} ''}
${optionalString (cfg.rsaKeyFile != null) ''
rsa_private_key_file=${cfg.rsaKeyFile}
''}
${optionalString (cfg.userlistFile != null) '' ${optionalString (cfg.userlistFile != null) ''
userlist_file=${cfg.userlistFile} userlist_file=${cfg.userlistFile}
''} ''}
@ -147,6 +150,12 @@ in
description = "RSA certificate file."; description = "RSA certificate file.";
}; };
rsaKeyFile = mkOption {
type = types.nullOr types.path;
default = null;
description = "RSA private key file.";
};
anonymousUmask = mkOption { anonymousUmask = mkOption {
type = types.string; type = types.string;
default = "077"; default = "077";

View File

@ -238,7 +238,8 @@ in
example = literalExample "[ pkgs.splix ]"; example = literalExample "[ pkgs.splix ]";
description = '' description = ''
CUPS drivers to use. Drivers provided by CUPS, cups-filters, Ghostscript 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. # E.g., if KDE is enabled, it supersedes xterm.
imports = [ imports = [
./none.nix ./xterm.nix ./xfce.nix ./kde4.nix ./kde5.nix ./none.nix ./xterm.nix ./xfce.nix ./kde4.nix ./kde5.nix
./e19.nix ./gnome3.nix ./kodi.nix ./enlightenment.nix ./gnome3.nix ./kodi.nix
]; ];
options = { options = {

View File

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

View File

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

View File

@ -17,6 +17,7 @@ in
./fluxbox.nix ./fluxbox.nix
./herbstluftwm.nix ./herbstluftwm.nix
./i3.nix ./i3.nix
./jwm.nix
./metacity.nix ./metacity.nix
./openbox.nix ./openbox.nix
./notion.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. # Add RAID mdadm tool.
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdadm copy_bin_and_libs ${pkgs.mdadm}/sbin/mdadm
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdmon
# Copy udev. # Copy udev.
copy_bin_and_libs ${udev}/lib/systemd/systemd-udevd copy_bin_and_libs ${udev}/lib/systemd/systemd-udevd

View File

@ -93,7 +93,7 @@ let
config = { config = {
mountPoint = mkDefault name; mountPoint = mkDefault name;
device = mkIf (config.fsType == "tmpfs") (mkDefault config.fsType); 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 # -F needed to allow bare block device without partitions
formatOptions = mkIf ((builtins.substring 0 3 config.fsType) == "ext") (mkDefault "-F"); 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/ 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 # Force udev to exit to prevent random "Device or resource busy
# while trying to open /dev/xvda" errors from fsck. # while trying to open /dev/xvda" errors from fsck.
udevadm control --exit || true udevadm control --exit || true
kill -9 -1
''; '';
boot.initrd.network.enable = true; 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"; rev = "1b3a8407a95344d9d12a2a377f64140975f1e8e4";
sha256 = "10byzvmpgrmr4d5mdn2kq04aapqb3sgr1admk13wjmy5cd6bwd2x"; sha256 = "10byzvmpgrmr4d5mdn2kq04aapqb3sgr1admk13wjmy5cd6bwd2x";
}; };
patches = [ ./azure-agent-entropy.patch ];
buildInputs = [ makeWrapper python pythonPackages.wrapPython ]; buildInputs = [ makeWrapper python pythonPackages.wrapPython ];
runtimeDeps = [ findutils gnugrep gawk coreutils openssl openssh runtimeDeps = [ findutils gnugrep gawk coreutils openssl openssh
nettools # for hostname nettools # for hostname
@ -54,9 +57,15 @@ in
###### interface ###### interface
options.virtualisation.azure.agent.enable = mkOption { options.virtualisation.azure.agent = {
default = false; enable = mkOption {
description = "Whether to enable the Windows Azure Linux Agent."; default = false;
description = "Whether to enable the Windows Azure Linux Agent.";
};
verboseLogging = mkOption {
default = false;
description = "Whether to enable verbose logging.";
};
}; };
###### implementation ###### implementation
@ -88,7 +97,7 @@ in
Provisioning.DeleteRootPassword=n Provisioning.DeleteRootPassword=n
# Generate fresh host key pair. # Generate fresh host key pair.
Provisioning.RegenerateSshHostKeyPair=y Provisioning.RegenerateSshHostKeyPair=n
# Supported values are "rsa", "dsa" and "ecdsa". # Supported values are "rsa", "dsa" and "ecdsa".
Provisioning.SshHostKeyPairType=ed25519 Provisioning.SshHostKeyPairType=ed25519
@ -121,7 +130,7 @@ in
Logs.Console=y Logs.Console=y
# Enable verbose logging (y|n) # Enable verbose logging (y|n)
Logs.Verbose=n Logs.Verbose=${if cfg.verboseLogging then "y" else "n"}
# Root device timeout in seconds. # Root device timeout in seconds.
OS.RootDeviceScsiTimeout=300 OS.RootDeviceScsiTimeout=300
@ -146,16 +155,30 @@ in
systemd.targets.provisioned = { systemd.targets.provisioned = {
description = "Services Requiring Azure VM provisioning to have finished"; 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 = { systemd.services.waagent = {
wantedBy = [ "sshd.service" ]; wantedBy = [ "multi-user.target" ];
before = [ "sshd.service" ]; after = [ "ip-up.target" "sshd.service" ];
after = [ "ip-up.target" ];
wants = [ "ip-up.target" ];
path = [ pkgs.e2fsprogs ]; path = [ pkgs.e2fsprogs ];
description = "Windows Azure Agent Service"; description = "Windows Azure Agent Service";

View File

@ -2,7 +2,7 @@
with lib; with lib;
let let
diskSize = "4096"; diskSize = "30720";
in in
{ {
system.build.azureImage = system.build.azureImage =
@ -23,7 +23,7 @@ in
postVM = postVM =
'' ''
mkdir -p $out 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 rm $diskImage
''; '';
diskImageBase = "nixos-image-${config.system.nixosLabel}-${pkgs.stdenv.system}.raw"; 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.containers = callTest tests/containers.nix {};
tests.docker = hydraJob (import tests/docker.nix { system = "x86_64-linux"; }); tests.docker = hydraJob (import tests/docker.nix { system = "x86_64-linux"; });
tests.dockerRegistry = hydraJob (import tests/docker-registry.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.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-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; 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; license = licenses.gpl2Plus;
platforms = platforms.linux; platforms = platforms.linux;
hydraPlatforms = []; hydraPlatforms = [];
maintainers = with maintainers; [ iyzsong ];
}; };
src = fetchurl { src = fetchurl {

View File

@ -37,7 +37,8 @@ let
inherit src; inherit src;
buildInputs = [ makeWrapper llvm emscripten openssl libsndfile pkgconfig libmicrohttpd vim ]; nativeBuildInputs = [ makeWrapper pkgconfig vim ];
buildInputs = [ llvm emscripten openssl libsndfile libmicrohttpd ];
passthru = { passthru = {
@ -53,6 +54,20 @@ let
# correct system. # correct system.
unset system unset system
sed -e "232s/LLVM_STATIC_LIBS/LLVMLIBS/" -i compiler/Makefile.unix sed -e "232s/LLVM_STATIC_LIBS/LLVMLIBS/" -i compiler/Makefile.unix
# The makefile sets LLVM_<version> depending on the current llvm
# version, but the detection code is quite brittle.
#
# 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 # Remove most faust2appl scripts since they won't run properly

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,12 +3,12 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "${pname}-${version}"; name = "${pname}-${version}";
version = "4.7.1"; version = "4.7.3";
pname = "kdevelop"; pname = "kdevelop";
src = fetchurl { src = fetchurl {
url = "mirror://kde/stable/${pname}/${version}/src/${name}.tar.xz"; url = "mirror://kde/stable/${pname}/${version}/src/${name}.tar.bz2";
sha256 = "e3ad5377f53739a67216d37cda3f88c03f8fbb0c96e2a9ef4056df3c124e95c1"; sha256 = "9db388d1c8274da7d168c13db612c7e94ece7815757b945b0aa0371620a06b35";
}; };
buildInputs = [ kdevplatform kdebase_workspace okteta qjson ]; buildInputs = [ kdevplatform kdebase_workspace okteta qjson ];
@ -17,6 +17,8 @@ stdenv.mkDerivation rec {
propagatedUserEnvPkgs = [ kdevplatform kate konsole kde_runtime oxygen_icons ]; propagatedUserEnvPkgs = [ kdevplatform kate konsole kde_runtime oxygen_icons ];
patches = [ ./gettext.patch ];
NIX_CFLAGS_COMPILE = "-I${okteta}/include/KDE"; NIX_CFLAGS_COMPILE = "-I${okteta}/include/KDE";
meta = with stdenv.lib; { meta = with stdenv.lib; {
@ -31,6 +33,6 @@ stdenv.mkDerivation rec {
programing languages. It is based on KDevPlatform, KDE and Qt programing languages. It is based on KDevPlatform, KDE and Qt
libraries and is under development since 1998. 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 { stdenv.mkDerivation rec {
name = "nano-${version}"; name = "nano-${version}";
version = "2.5.0"; version = "2.5.3";
src = fetchurl { src = fetchurl {
url = "mirror://gnu/nano/${name}.tar.gz"; 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" ]; outputs = [ "out" "info" ];
configureFlags = '' configureFlags = ''
--sysconfdir=/etc --sysconfdir=/etc

View File

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

View File

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

View File

@ -16,6 +16,15 @@ in
}; };
patches = [ ./paths-fix.patch ]; 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 = [ buildInputs = [
libpng python3 (boost.override { python = python3; }) libpng python3 (boost.override { python = python3; })
@ -32,6 +41,8 @@ in
qmake antimony.pro PREFIX=$out qmake antimony.pro PREFIX=$out
''; '';
enableParallelBuilding = true;
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "A computer-aided design (CAD) tool from a parallel universe"; description = "A computer-aided design (CAD) tool from a parallel universe";
homepage = "https://github.com/mkeeter/antimony"; homepage = "https://github.com/mkeeter/antimony";

View File

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

View File

@ -3,42 +3,222 @@
, libgphoto2, libjpeg, libkdcraw, libkexiv2, libkipi, libpgf, libtiff , libgphoto2, libjpeg, libkdcraw, libkexiv2, libkipi, libpgf, libtiff
, libusb1, liblqr1, marble, mysql, opencv, perl, phonon, pkgconfig , libusb1, liblqr1, marble, mysql, opencv, perl, phonon, pkgconfig
, qca2, qimageblitz, qjson, qt4, soprano , 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 { let
name = "digikam-4.12.0"; version = "4.12.0";
pName = "digikam-${version}";
src = fetchurl { build = stdenv.mkDerivation rec {
url = "http://download.kde.org/stable/digikam/${name}.tar.bz2"; name = "digikam-build-${version}";
sha256 = "081ldsaf3frf5khznjd3sxkjmi4dyp6w6nqnc2a0agkk0kxkl10m";
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 = [ kdePkgs = [
boost eigen jasper kdelibs kdepimlibs lcms lensfun libgphoto2 build # digikam's own build
libjpeg libkdcraw libkexiv2 libkipi liblqr1 libpgf libtiff marble kdelibs kdepimlibs kde_runtime kde_baseapps libkdcraw oxygen_icons
mysql.lib opencv phonon qca2 qimageblitz qjson qt4 /*phonon_backend_gstreamer*/ phonon_backend_vlc
shared_desktop_ontologies soprano 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 # TODO: It should be the responsability of these packages to add themselves to `KDEDIRS`. See
cmakeFlags = [ # <https://github.com/ttuegel/nixpkgs/commit/a0efeacc0ef2cf63bbb768bfb172a483307d080b> for
"-DLIBUSB_LIBRARIES=${libusb1}/lib" # a practical example.
"-DLIBUSB_INCLUDE_DIR=${libusb1}/include/libusb-1.0" # IMPORTANT: Note that using `XDG_DATA_DIRS` here instead of `KDEDIRS` won't work properly.
"-DDIGIKAMSC_COMPILE_LIBKFACE=ON" 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 = { meta = {
description = "Photo Management Program"; description = "Photo Management Program";
license = stdenv.lib.licenses.gpl2; license = stdenv.lib.licenses.gpl2;
homepage = http://www.digikam.org; homepage = http://www.digikam.org;
maintainers = with stdenv.lib.maintainers; [ goibhniu viric urkud ]; maintainers = with stdenv.lib.maintainers; [ /*jraygauthier*/ ];
inherit (kdelibs.meta) platforms; 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 { stdenv.mkDerivation rec {
name = "simple-scan-${version}"; name = "simple-scan-${version}";
version = "3.19.91"; version = "3.19.92";
src = fetchurl { src = fetchurl {
sha256 = "1c5glf5vxgld41w4jxfqcv17q76qnh43fawpv33hncgh8d283xkf"; sha256 = "1zz6y4cih1v0npxjfxvnqz3bz7i5aripdsfy0hg9mhr1f4r0ig19";
url = "https://launchpad.net/simple-scan/3.19/${version}/+download/${name}.tar.xz"; url = "https://launchpad.net/simple-scan/3.19/${version}/+download/${name}.tar.xz";
}; };

View File

@ -6,7 +6,7 @@ stdenv.mkDerivation {
inherit boost; inherit boost;
src = fetchurl { 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"; sha256 = "1i1jj02bxynisqapv31481sz9jpfp3f023ky47spz1v1wlwbs13m";
}; };

View File

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

View File

@ -24,6 +24,7 @@ python3Packages.buildPythonApplication rec {
urwid urwid
pkginfo pkginfo
]; ];
buildInputs = with python3Packages; [ setuptools_scm ];
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = http://lostpackets.de/khal/; 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 { stdenv.mkDerivation rec {
version = "0.7.82"; version = "0.7.83";
name = "mediainfo-gui-${version}"; name = "mediainfo-gui-${version}";
src = fetchurl { src = fetchurl {
url = "http://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz"; 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/"; sourceRoot = "./MediaInfo/Project/GNU/GUI/";
preConfigure = "sh autogen.sh"; meta = with stdenv.lib; {
meta = {
description = "Supplies technical and tag information about a video or audio file (GUI version)"; description = "Supplies technical and tag information about a video or audio file (GUI version)";
longDescription = '' longDescription = ''
MediaInfo is a convenient unified display of the most relevant technical MediaInfo is a convenient unified display of the most relevant technical
and tag data for video and audio files. and tag data for video and audio files.
''; '';
homepage = http://mediaarea.net/; homepage = http://mediaarea.net/;
license = stdenv.lib.licenses.bsd2; license = licenses.bsd2;
platforms = stdenv.lib.platforms.linux; platforms = platforms.linux;
maintainers = [ stdenv.lib.maintainers.devhell ]; 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 { stdenv.mkDerivation rec {
version = "0.7.82"; version = "0.7.83";
name = "mediainfo-${version}"; name = "mediainfo-${version}";
src = fetchurl { src = fetchurl {
url = "http://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz"; 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/"; sourceRoot = "./MediaInfo/Project/GNU/CLI/";
configureFlags = [ "--with-libmediainfo=${libmediainfo}" ]; configureFlags = [ "--with-libmediainfo=${libmediainfo}" ];
preConfigure = "sh autogen.sh";
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Supplies technical and tag information about a video or audio file"; 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> From: Nikolay Amiantov <ab@fmap.me>
Date: Wed, 17 Feb 2016 14:37:31 +0300 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 +----------------------------------------- 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(-) 2 files changed, 5 insertions(+), 68 deletions(-)
diff --git a/octoprint_m3dfio/__init__.py b/octoprint_m3dfio/__init__.py 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 --- a/octoprint_m3dfio/__init__.py
+++ b/octoprint_m3dfio/__init__.py +++ b/octoprint_m3dfio/__init__.py
@@ -764,72 +764,7 @@ class M3DFioPlugin( @@ -793,72 +793,7 @@ class M3DFioPlugin(
# Set file locations # Set file locations
self.setFileLocations() self.setFileLocations()
- # Check if running on Linux - # Check if running on Linux
- if platform.uname()[0].startswith("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" : - if platform.uname()[4].startswith("armv6l") and self.getCpuHardware() == "BCM2708" :
- -
- # Set shared library - # Set shared library
- self.sharedLibrary = ctypes.cdll.LoadLibrary(self._basefolder.replace('\\', '/') + "/static/libraries/preprocessor_arm1176jzf-s.so") - 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" : - elif platform.uname()[4].startswith("armv7l") and self.getCpuHardware() == "BCM2709" :
- -
- # Set shared library - # Set shared library
@ -87,7 +87,7 @@ index 5e5369b..9f59768 100644
if self.sharedLibrary : if self.sharedLibrary :
diff --git a/shared library source/Makefile b/shared library source/Makefile 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 --- a/shared library source/Makefile
+++ b/shared library source/Makefile +++ b/shared library source/Makefile
@@ -58,13 +58,15 @@ ifeq ($(TARGET_PLATFORM), OSX64) @@ -58,13 +58,15 @@ ifeq ($(TARGET_PLATFORM), OSX64)
@ -109,5 +109,5 @@ index 4062a91..89dab71 100644
clean: clean:
rm -f ../octoprint_m3dfio/static/libraries/$(PROG) rm -f ../octoprint_m3dfio/static/libraries/$(PROG)
-- --
2.7.0 2.7.1

View File

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

View File

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

View File

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

View File

@ -183,7 +183,7 @@ let
configurePhase = '' configurePhase = ''
# Precompile .pyc files to prevent race conditions during build # 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. # This is to ensure expansion of $out.
libExecPath="${libExecPath}" libExecPath="${libExecPath}"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -41,25 +41,43 @@ in stdenv.mkDerivation rec {
preConfigure = '' preConfigure = ''
substituteInPlace src/Makefile.am --subst-var-by mavenRepo ${mavenRepo} 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 \ substituteInPlace src/launcher/fetcher.cpp \
--replace '"gzip' '"${gzip}/bin/gzip' \ --replace '"gzip' '"${gzip}/bin/gzip' \
--replace '"tar' '"${gnutar}/bin/tar' \ --replace '"tar' '"${gnutar}/bin/tar' \
--replace '"unzip' '"${unzip}/bin/unzip' --replace '"unzip' '"${unzip}/bin/unzip'
substituteInPlace src/cli/mesos-scp \
--replace "'scp " "'${openssh}/bin/scp "
substituteInPlace src/python/cli/src/mesos/cli.py \ substituteInPlace src/python/cli/src/mesos/cli.py \
--replace "['mesos-resolve'" "['$out/bin/mesos-resolve'" --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 \ substituteInPlace configure.ac \
--replace /usr/include/libnl3 ${libnl}/include/libnl3 --replace /usr/include/libnl3 ${libnl}/include/libnl3
substituteInPlace src/linux/perf.cpp \ substituteInPlace src/linux/perf.cpp \
--replace '"perf ' '"${perf}/bin/perf ' --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 \ substituteInPlace src/slave/containerizer/mesos/isolators/filesystem/shared.cpp \
--replace '"mount ' '"${utillinux}/bin/mount ' \ --replace '"mount ' '"${utillinux}/bin/mount ' \
@ -72,15 +90,6 @@ in stdenv.mkDerivation rec {
--replace '"ip ' '"${iproute}/bin/ip ' \ --replace '"ip ' '"${iproute}/bin/ip ' \
--replace '"mount ' '"${utillinux}/bin/mount ' \ --replace '"mount ' '"${utillinux}/bin/mount ' \
--replace '/bin/sh' "${stdenv.shell}" --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 = [ 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, fetchurl, libotr, pidgin, intltool } :
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "pidgin-otr-4.0.1"; name = "pidgin-otr-4.0.2";
src = fetchurl { src = fetchurl {
url = "http://www.cypherpunks.ca/otr/${name}.tar.gz"; url = "http://www.cypherpunks.ca/otr/${name}.tar.gz";
sha256 = "02pkkf86fh5jvzsdn9y78impsgzj1n0p81kc2girvk3vq941yy0v"; sha256 = "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl";
}; };
postInstall = "ln -s \$out/lib/pidgin \$out/share/pidgin-otr"; postInstall = "ln -s \$out/lib/pidgin \$out/share/pidgin-otr";

View File

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

View File

@ -1,5 +1,4 @@
{ fetchgit, libcommuni, qt5, stdenv { fetchgit, libcommuni, makeQtWrapper, qt5, stdenv }:
}:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "communi-${version}"; name = "communi-${version}";
@ -11,20 +10,32 @@ stdenv.mkDerivation rec {
sha256 = "0gk6gck09zb44qfsal7bs4ln2vl9s9x3vfxh7jvfc7mmf7l3sspd"; sha256 = "0gk6gck09zb44qfsal7bs4ln2vl9s9x3vfxh7jvfc7mmf7l3sspd";
}; };
nativeBuildInputs = [ makeQtWrapper ];
buildInputs = [ libcommuni qt5.qtbase ]; buildInputs = [ libcommuni qt5.qtbase ];
enableParallelBuild = true; enableParallelBuild = true;
configurePhase = '' configurePhase = ''
export QMAKEFEATURES=${libcommuni}/features 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; { meta = with stdenv.lib; {
description = "A simple and elegant cross-platform IRC client"; description = "A simple and elegant cross-platform IRC client";
homepage = https://github.com/communi/communi-desktop; homepage = https://github.com/communi/communi-desktop;
license = licenses.bsd3; license = licenses.bsd3;
platforms = platforms.all;
maintainers = with maintainers; [ hrdinka ]; maintainers = with maintainers; [ hrdinka ];
platforms = platforms.all;
}; };
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -9,19 +9,18 @@
buildPythonApplication rec { buildPythonApplication rec {
name = "zim-${version}"; name = "zim-${version}";
version = "0.63"; version = "0.65";
namePrefix = ""; namePrefix = "";
src = fetchurl { src = fetchurl {
url = "http://zim-wiki.org/downloads/${name}.tar.gz"; url = "http://zim-wiki.org/downloads/${name}.tar.gz";
sha256 = "077vf4h0hjmbk8bxj9l0z9rxcb3dw642n32lvfn6vjdna1qm910m"; sha256 = "15pdq4fxag85qjsrdmmssiq85qsk5vnbp8mrqnpvx8lm8crz6hjl";
}; };
propagatedBuildInputs = [ pythonPackages.sqlite3 pygtk pythonPackages.pyxdg pygobject ]; propagatedBuildInputs = [ pythonPackages.sqlite3 pygtk pythonPackages.pyxdg pygobject ];
preBuild = '' preBuild = ''
mkdir -p /tmp/home export HOME=$TMP
export HOME="/tmp/home"
sed -i '/zim_install_class,/d' setup.py sed -i '/zim_install_class,/d' setup.py
''; '';
@ -30,8 +29,14 @@ buildPythonApplication rec {
preFixup = '' preFixup = ''
export makeWrapperArgs="--prefix XDG_DATA_DIRS : $out/share --argv0 $out/bin/.zim-wrapped" 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 = { meta = {
description = "A desktop wiki"; description = "A desktop wiki";

View File

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

View File

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

View File

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

View File

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

View File

@ -17,13 +17,13 @@ assert javahlBindings -> jdk != null && perl != null;
let let
common = { version, sha1 }: stdenv.mkDerivation (rec { common = { version, sha256 }: stdenv.mkDerivation (rec {
inherit version; inherit version;
name = "subversion-${version}"; name = "subversion-${version}";
src = fetchurl { src = fetchurl {
url = "mirror://apache/subversion/${name}.tar.bz2"; url = "mirror://apache/subversion/${name}.tar.bz2";
inherit sha1; inherit sha256;
}; };
buildInputs = [ zlib apr aprutil sqlite ] buildInputs = [ zlib apr aprutil sqlite ]
@ -89,12 +89,12 @@ in {
subversion18 = common { subversion18 = common {
version = "1.8.15"; version = "1.8.15";
sha1 = "680acf88f0db978fbbeac89ed63776d805b918ef"; sha256 = "8bbf6bb125003d88ee1c22935a36b7b1ab7d957e0c8b5fbfe5cb6310b6e86ae0";
}; };
subversion19 = common { subversion19 = common {
version = "1.9.3"; 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 { stdenv.mkDerivation rec {
rev = "182"; name = "mjpg-streamer-${version}";
name = "mjpg-streamer-${rev}"; version = "2016-03-08";
src = fetchsvn { src = fetchFromGitHub {
url = https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer/mjpg-streamer; owner = "jacksonliam";
inherit rev; repo = "mjpg-streamer";
sha256 = "008k2wk6xagprbiwk8fvzbz4dd6i8kzrr9n62gj5i1zdv7zcb16q"; rev = "4060cb64e3557037fd404d10e1c1d076b672e9e8";
sha256 = "0g7y832jsz4ylmq9qp2l4fq6bm8l6dhsbi60fr5jfqpx4l0pia8m";
}; };
patchPhase = '' prePatch = ''
substituteInPlace Makefile "make -C plugins\/input_gspcav1" "# make -C plugins\/input_gspcav1" cd mjpg-streamer-experimental
substituteInPlace Makefile "cp plugins\/input_gspcav1\/input_gspcav1.so" "# cp plugins\/input_gspcav1\/input_gspcav1.so"
''; '';
nativeBuildInputs = [ cmake ];
buildInputs = [ libjpeg ];
postFixup = '' 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)"; meta = with stdenv.lib; {
preInstall = ''
mkdir -p $out/{bin,lib}
'';
buildInputs = [ pkgconfig libjpeg imagemagick libv4l ];
meta = {
homepage = http://sourceforge.net/projects/mjpg-streamer/; 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"; 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) (optional withGUI qt5.qtbase)
]; ];
preConfigure = "./autogen.sh"; preConfigure = "./autogen.sh; patchShebangs .";
buildPhase = "./drake -j $NIX_BUILD_CORES"; buildPhase = "./drake -j $NIX_BUILD_CORES";
installPhase = "./drake install -j $NIX_BUILD_CORES"; installPhase = "./drake install -j $NIX_BUILD_CORES";

View File

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

View File

@ -1,11 +1,15 @@
{ stdenv, fetchurl, python, zlib, pkgconfig, glib, ncurses, perl, pixman { stdenv, fetchurl, python, zlib, pkgconfig, glib, ncurses, perl, pixman
, attr, libcap, vde2, alsaLib, texinfo, libuuid, flex, bison, lzo, snappy , vde2, alsaLib, texinfo, libuuid, flex, bison, lzo, snappy
, libseccomp, libaio, libcap_ng, gnutls, nettle, numactl , libaio, gnutls, nettle
, makeWrapper , makeWrapper
, pulseSupport ? true, libpulseaudio , attr, libcap, libcap_ng
, sdlSupport ? true, SDL , CoreServices, Cocoa, rez, setfile
, numaSupport ? stdenv.isLinux, numactl
, seccompSupport ? stdenv.isLinux, libseccomp
, pulseSupport ? !stdenv.isDarwin, libpulseaudio
, sdlSupport ? !stdenv.isDarwin, SDL
, vncSupport ? true, libjpeg, libpng , vncSupport ? true, libjpeg, libpng
, spiceSupport ? true, spice, spice_protocol, usbredir , spiceSupport ? !stdenv.isDarwin, spice, spice_protocol, usbredir
, x86Only ? false , x86Only ? false
}: }:
@ -26,31 +30,35 @@ stdenv.mkDerivation rec {
}; };
buildInputs = buildInputs =
[ python zlib pkgconfig glib ncurses perl pixman attr libcap [ python zlib pkgconfig glib ncurses perl pixman
vde2 texinfo libuuid flex bison makeWrapper lzo snappy libseccomp vde2 texinfo libuuid flex bison makeWrapper lzo snappy
libcap_ng gnutls nettle numactl gnutls nettle
] ]
++ optionals stdenv.isDarwin [ CoreServices Cocoa rez setfile ]
++ optionals seccompSupport [ libseccomp ]
++ optionals numaSupport [ numactl ]
++ optionals pulseSupport [ libpulseaudio ] ++ optionals pulseSupport [ libpulseaudio ]
++ optionals sdlSupport [ SDL ] ++ optionals sdlSupport [ SDL ]
++ optionals vncSupport [ libjpeg libpng ] ++ optionals vncSupport [ libjpeg libpng ]
++ optionals spiceSupport [ spice_protocol spice usbredir ] ++ optionals spiceSupport [ spice_protocol spice usbredir ]
++ optionals (hasSuffix "linux" stdenv.system) [ alsaLib libaio ]; ++ optionals stdenv.isLinux [ alsaLib libaio libcap_ng libcap attr ];
enableParallelBuilding = true; enableParallelBuilding = true;
patches = [ ./no-etc-install.patch ]; patches = [ ./no-etc-install.patch ];
configureFlags = configureFlags =
[ "--enable-seccomp" [ "--smbd=smbd" # use `smbd' from $PATH
"--enable-numa"
"--smbd=smbd" # use `smbd' from $PATH
"--audio-drv-list=${audio}" "--audio-drv-list=${audio}"
"--sysconfdir=/etc" "--sysconfdir=/etc"
"--localstatedir=/var" "--localstatedir=/var"
] ]
++ optional numaSupport "--enable-numa"
++ optional seccompSupport "--enable-seccomp"
++ optional spiceSupport "--enable-spice" ++ optional spiceSupport "--enable-spice"
++ optional x86Only "--target-list=i386-softmmu,x86_64-softmmu" ++ 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 = postInstall =
'' ''
@ -66,6 +74,6 @@ stdenv.mkDerivation rec {
description = "A generic and open source machine emulator and virtualizer"; description = "A generic and open source machine emulator and virtualizer";
license = licenses.gpl2Plus; license = licenses.gpl2Plus;
maintainers = with maintainers; [ viric eelco ]; 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"; 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 # These sources are already rather old and probably do not change frequently
xenExtfiles = [ 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; { url = http://xenbits.xensource.com/xen-extfiles/ipxe-git-9a93db3f0947484e30e753bbd61a10b17336e20e.tar.gz;
sha256 = "0p206zaxlhda60ci33h9gipi5gm46fvvsm6k5c0w7b6cjg0yhb33"; 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") 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" export EXTRA_QEMUU_CONFIGURE_ARGS="--enable-spice --enable-usb-redir --enable-linux-aio"
''; '';
# https://github.com/NixOS/nixpkgs/issues/13590
configureFlags = ["--disable-stubdom"];
postConfigure = postConfigure =
'' ''
substituteInPlace tools/libfsimage/common/fsimage_plugin.c \ 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 = "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 "; makeFlags = "PREFIX=$(out) CONFIG_DIR=/etc XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files ";
buildFlags = "xen tools stubdom"; buildFlags = "xen tools";
postBuild = postBuild =
'' ''

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