Merge master into staging-next

This commit is contained in:
Frederik Rietdijk 2018-10-30 19:55:48 +01:00
commit 0e0d20fb5f
324 changed files with 8404 additions and 5777 deletions

View File

@ -842,9 +842,12 @@ src = fetchFromGitHub {
owner = "NixOS"; owner = "NixOS";
repo = "nix"; repo = "nix";
rev = "1f795f9f44607cc5bec70d1300150bfefcef2aae"; rev = "1f795f9f44607cc5bec70d1300150bfefcef2aae";
sha256 = "04yri911rj9j19qqqn6m82266fl05pz98inasni0vxr1cf1gdgv9"; sha256 = "1i2yxndxb6yc9l6c99pypbd92lfq5aac4klq7y2v93c9qvx2cgpc";
} }
</programlisting> </programlisting>
Find the value to put as <literal>sha256</literal> by running
<literal>nix run -f '&lt;nixpkgs&gt;' nix-prefetch-github -c nix-prefetch-github --rev 1f795f9f44607cc5bec70d1300150bfefcef2aae NixOS nix</literal>
or <literal>nix-prefetch-url --unpack https://github.com/NixOS/nix/archive/1f795f9f44607cc5bec70d1300150bfefcef2aae.tar.gz</literal>.
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>

View File

@ -23,27 +23,54 @@ rec {
# -- TRACING -- # -- TRACING --
/* Trace msg, but only if pred is true. /* Conditionally trace the supplied message, based on a predicate.
Type: traceIf :: bool -> string -> a -> a
Example: Example:
traceIf true "hello" 3 traceIf true "hello" 3
trace: hello trace: hello
=> 3 => 3
*/ */
traceIf = pred: msg: x: if pred then trace msg x else x; traceIf =
# Predicate to check
pred:
# Message that should be traced
msg:
# Value to return
x: if pred then trace msg x else x;
/* Trace the value and also return it. /* Trace the supplied value after applying a function to it, and
return the original value.
Type: traceValFn :: (a -> b) -> a -> a
Example: Example:
traceValFn (v: "mystring ${v}") "foo" traceValFn (v: "mystring ${v}") "foo"
trace: mystring foo trace: mystring foo
=> "foo" => "foo"
*/ */
traceValFn = f: x: trace (f x) x; traceValFn =
# Function to apply
f:
# Value to trace and return
x: trace (f x) x;
/* Trace the supplied value and return it.
Type: traceVal :: a -> a
Example:
traceVal 42
# trace: 42
=> 42
*/
traceVal = traceValFn id; traceVal = traceValFn id;
/* `builtins.trace`, but the value is `builtins.deepSeq`ed first. /* `builtins.trace`, but the value is `builtins.deepSeq`ed first.
Type: traceSeq :: a -> b -> b
Example: Example:
trace { a.b.c = 3; } null trace { a.b.c = 3; } null
trace: { a = <CODE>; } trace: { a = <CODE>; }
@ -52,7 +79,11 @@ rec {
trace: { a = { b = { c = 3; }; }; } trace: { a = { b = { c = 3; }; }; }
=> null => null
*/ */
traceSeq = x: y: trace (builtins.deepSeq x x) y; traceSeq =
# The value to trace
x:
# The value to return
y: trace (builtins.deepSeq x x) y;
/* Like `traceSeq`, but only evaluate down to depth n. /* Like `traceSeq`, but only evaluate down to depth n.
This is very useful because lots of `traceSeq` usages This is very useful because lots of `traceSeq` usages
@ -76,27 +107,49 @@ rec {
in trace (generators.toPretty { allowPrettyValues = true; } in trace (generators.toPretty { allowPrettyValues = true; }
(modify depth snip x)) y; (modify depth snip x)) y;
/* A combination of `traceVal` and `traceSeq` */ /* A combination of `traceVal` and `traceSeq` that applies a
traceValSeqFn = f: v: traceValFn f (builtins.deepSeq v v); provided function to the value to be traced after `deepSeq`ing
it.
*/
traceValSeqFn =
# Function to apply
f:
# Value to trace
v: traceValFn f (builtins.deepSeq v v);
/* A combination of `traceVal` and `traceSeq`. */
traceValSeq = traceValSeqFn id; traceValSeq = traceValSeqFn id;
/* A combination of `traceVal` and `traceSeqN` that applies a
provided function to the value to be traced. */
traceValSeqNFn =
# Function to apply
f:
depth:
# Value to trace
v: traceSeqN depth (f v) v;
/* A combination of `traceVal` and `traceSeqN`. */ /* A combination of `traceVal` and `traceSeqN`. */
traceValSeqNFn = f: depth: v: traceSeqN depth (f v) v;
traceValSeqN = traceValSeqNFn id; traceValSeqN = traceValSeqNFn id;
# -- TESTING -- # -- TESTING --
/* Evaluate a set of tests. A test is an attribute set {expr, /* Evaluate a set of tests. A test is an attribute set `{expr,
expected}, denoting an expression and its expected result. The expected}`, denoting an expression and its expected result. The
result is a list of failed tests, each represented as {name, result is a list of failed tests, each represented as `{name,
expected, actual}, denoting the attribute name of the failing expected, actual}`, denoting the attribute name of the failing
test and its expected and actual results. Used for regression test and its expected and actual results.
testing of the functions in lib; see tests.nix for an example.
Only tests having names starting with "test" are run. Used for regression testing of the functions in lib; see
Add attr { tests = ["testName"]; } to run these test only tests.nix for an example. Only tests having names starting with
"test" are run.
Add attr { tests = ["testName"]; } to run these tests only.
*/ */
runTests = tests: lib.concatLists (lib.attrValues (lib.mapAttrs (name: test: runTests =
# Tests to run
tests: lib.concatLists (lib.attrValues (lib.mapAttrs (name: test:
let testsToRun = if tests ? tests then tests.tests else []; let testsToRun = if tests ? tests then tests.tests else [];
in if (substring 0 4 name == "test" || elem name testsToRun) in if (substring 0 4 name == "test" || elem name testsToRun)
&& ((testsToRun == []) || elem name tests.tests) && ((testsToRun == []) || elem name tests.tests)
@ -105,8 +158,11 @@ rec {
then [ { inherit name; expected = test.expected; result = test.expr; } ] then [ { inherit name; expected = test.expected; result = test.expr; } ]
else [] ) tests)); else [] ) tests));
# create a test assuming that list elements are true /* Create a test assuming that list elements are `true`.
# usage: { testX = allTrue [ true ]; }
Example:
{ testX = allTrue [ true ]; }
*/
testAllTrue = expr: { inherit expr; expected = map (x: true) expr; }; testAllTrue = expr: { inherit expr; expected = map (x: true) expr; };

View File

@ -309,6 +309,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "GNU General Public License v2.0 only"; fullName = "GNU General Public License v2.0 only";
}; };
gpl2Classpath = {
spdxId = "GPL-2.0-with-classpath-exception";
fullName = "GNU General Public License v2.0 only (with Classpath exception)";
url = https://fedoraproject.org/wiki/Licensing/GPL_Classpath_Exception;
};
gpl2ClasspathPlus = { gpl2ClasspathPlus = {
fullName = "GNU General Public License v2.0 or later (with Classpath exception)"; fullName = "GNU General Public License v2.0 or later (with Classpath exception)";
url = https://fedoraproject.org/wiki/Licensing/GPL_Classpath_Exception; url = https://fedoraproject.org/wiki/Licensing/GPL_Classpath_Exception;

View File

@ -1,4 +1,5 @@
# General list operations. # General list operations.
{ lib }: { lib }:
with lib.trivial; with lib.trivial;
let let
@ -8,21 +9,23 @@ 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 /* Create a list consisting of a single element. `singleton x` is
sometimes more convenient with respect to indentation than `[x]' sometimes more convenient with respect to indentation than `[x]`
when x spans multiple lines. when x spans multiple lines.
Type: singleton :: a -> [a]
Example: Example:
singleton "foo" singleton "foo"
=> [ "foo" ] => [ "foo" ]
*/ */
singleton = x: [x]; singleton = x: [x];
/* right fold a binary function `op' between successive elements of /* right fold a binary function `op` between successive elements of
`list' with `nul' as the starting value, i.e., `list` with `nul' as the starting value, i.e.,
`foldr op nul [x_1 x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))'. `foldr op nul [x_1 x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))`.
Type:
foldr :: (a -> b -> b) -> b -> [a] -> b Type: foldr :: (a -> b -> b) -> b -> [a] -> b
Example: Example:
concat = foldr (a: b: a + b) "z" concat = foldr (a: b: a + b) "z"
@ -42,16 +45,15 @@ rec {
else op (elemAt list n) (fold' (n + 1)); else op (elemAt list n) (fold' (n + 1));
in fold' 0; in fold' 0;
/* `fold' is an alias of `foldr' for historic reasons */ /* `fold` is an alias of `foldr` for historic reasons */
# FIXME(Profpatsch): deprecate? # FIXME(Profpatsch): deprecate?
fold = foldr; fold = foldr;
/* left fold, like `foldr', but from the left: /* left fold, like `foldr`, but from the left:
`foldl op nul [x_1 x_2 ... x_n] == op (... (op (op nul x_1) x_2) ... x_n)`. `foldl op nul [x_1 x_2 ... x_n] == op (... (op (op nul x_1) x_2) ... x_n)`.
Type: Type: foldl :: (b -> a -> b) -> b -> [a] -> b
foldl :: (b -> a -> b) -> b -> [a] -> b
Example: Example:
lconcat = foldl (a: b: a + b) "z" lconcat = foldl (a: b: a + b) "z"
@ -70,16 +72,20 @@ 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 The difference is that evaluation is forced upon access. Usually used
with small whole results (in contract with lazily-generated list or large with small whole results (in contract with lazily-generated list or large
lists where only a part is consumed.) lists where only a part is consumed.)
Type: foldl' :: (b -> a -> b) -> b -> [a] -> b
*/ */
foldl' = builtins.foldl' or foldl; foldl' = builtins.foldl' or foldl;
/* Map with index starting from 0 /* Map with index starting from 0
Type: imap0 :: (int -> a -> b) -> [a] -> [b]
Example: Example:
imap0 (i: v: "${v}-${toString i}") ["a" "b"] imap0 (i: v: "${v}-${toString i}") ["a" "b"]
=> [ "a-0" "b-1" ] => [ "a-0" "b-1" ]
@ -88,6 +94,8 @@ rec {
/* Map with index starting from 1 /* Map with index starting from 1
Type: imap1 :: (int -> a -> b) -> [a] -> [b]
Example: Example:
imap1 (i: v: "${v}-${toString i}") ["a" "b"] imap1 (i: v: "${v}-${toString i}") ["a" "b"]
=> [ "a-1" "b-2" ] => [ "a-1" "b-2" ]
@ -96,6 +104,8 @@ rec {
/* Map and concatenate the result. /* Map and concatenate the result.
Type: concatMap :: (a -> [b]) -> [a] -> [b]
Example: Example:
concatMap (x: [x] ++ ["z"]) ["a" "b"] concatMap (x: [x] ++ ["z"]) ["a" "b"]
=> [ "a" "z" "b" "z" ] => [ "a" "z" "b" "z" ]
@ -118,15 +128,21 @@ rec {
/* Remove elements equal to 'e' from a list. Useful for buildInputs. /* Remove elements equal to 'e' from a list. Useful for buildInputs.
Type: remove :: a -> [a] -> [a]
Example: Example:
remove 3 [ 1 3 4 3 ] remove 3 [ 1 3 4 3 ]
=> [ 1 4 ] => [ 1 4 ]
*/ */
remove = e: filter (x: x != e); remove =
# Element to remove from the list
e: filter (x: x != e);
/* Find the sole element in the list matching the specified /* Find the sole element in the list matching the specified
predicate, returns `default' if no such element exists, or predicate, returns `default` if no such element exists, or
`multiple' if there are multiple matching elements. `multiple` if there are multiple matching elements.
Type: findSingle :: (a -> bool) -> a -> a -> [a] -> a
Example: Example:
findSingle (x: x == 3) "none" "multiple" [ 1 3 3 ] findSingle (x: x == 3) "none" "multiple" [ 1 3 3 ]
@ -136,14 +152,24 @@ rec {
findSingle (x: x == 3) "none" "multiple" [ 1 9 ] findSingle (x: x == 3) "none" "multiple" [ 1 9 ]
=> "none" => "none"
*/ */
findSingle = pred: default: multiple: list: findSingle =
# Predicate
pred:
# Default value to return if element was not found.
default:
# Default value to return if more than one element was found
multiple:
# Input list
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 /* Find the first element in the list matching the specified
predicate or returns `default' if no such element exists. predicate or return `default` if no such element exists.
Type: findFirst :: (a -> bool) -> a -> [a] -> a
Example: Example:
findFirst (x: x > 3) 7 [ 1 6 4 ] findFirst (x: x > 3) 7 [ 1 6 4 ]
@ -151,12 +177,20 @@ rec {
findFirst (x: x > 9) 7 [ 1 6 4 ] findFirst (x: x > 9) 7 [ 1 6 4 ]
=> 7 => 7
*/ */
findFirst = pred: default: list: findFirst =
# Predicate
pred:
# Default value to return
default:
# Input list
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 /* Return true if function `pred` returns true for at least one
of `list'. element of `list`.
Type: any :: (a -> bool) -> [a] -> bool
Example: Example:
any isString [ 1 "a" { } ] any isString [ 1 "a" { } ]
@ -166,8 +200,10 @@ rec {
*/ */
any = builtins.any or (pred: foldr (x: y: if pred x then true else y) false); any = builtins.any or (pred: foldr (x: y: if pred x then true else y) false);
/* Return true iff function `pred' returns true for all elements of /* Return true if function `pred` returns true for all elements of
`list'. `list`.
Type: all :: (a -> bool) -> [a] -> bool
Example: Example:
all (x: x < 3) [ 1 2 ] all (x: x < 3) [ 1 2 ]
@ -177,19 +213,25 @@ rec {
*/ */
all = builtins.all or (pred: foldr (x: y: if pred x then y else false) true); all = builtins.all or (pred: foldr (x: y: if pred x then y else false) true);
/* Count how many times function `pred' returns true for the elements /* Count how many elements of `list` match the supplied predicate
of `list'. function.
Type: count :: (a -> bool) -> [a] -> int
Example: Example:
count (x: x == 3) [ 3 2 3 4 6 ] count (x: x == 3) [ 3 2 3 4 6 ]
=> 2 => 2
*/ */
count = pred: foldl' (c: x: if pred x then c + 1 else c) 0; count =
# Predicate
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 /* Return a singleton list or an empty list, depending on a boolean
value. Useful when building lists with optional elements value. Useful when building lists with optional elements
(e.g. `++ optional (system == "i686-linux") flashplayer'). (e.g. `++ optional (system == "i686-linux") flashplayer').
Type: optional :: bool -> a -> [a]
Example: Example:
optional true "foo" optional true "foo"
=> [ "foo" ] => [ "foo" ]
@ -200,13 +242,19 @@ rec {
/* Return a list or an empty list, depending on a boolean value. /* Return a list or an empty list, depending on a boolean value.
Type: optionals :: bool -> [a] -> [a]
Example: Example:
optionals true [ 2 3 ] optionals true [ 2 3 ]
=> [ 2 3 ] => [ 2 3 ]
optionals false [ 2 3 ] optionals false [ 2 3 ]
=> [ ] => [ ]
*/ */
optionals = cond: elems: if cond then elems else []; optionals =
# Condition
cond:
# List to return if condition is true
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
@ -223,20 +271,28 @@ rec {
/* Return a list of integers from `first' up to and including `last'. /* Return a list of integers from `first' up to and including `last'.
Type: range :: int -> int -> [int]
Example: Example:
range 2 4 range 2 4
=> [ 2 3 4 ] => [ 2 3 4 ]
range 3 2 range 3 2
=> [ ] => [ ]
*/ */
range = first: last: range =
# First integer in the range
first:
# Last integer in the range
last:
if first > last then if first > last then
[] []
else else
genList (n: first + n) (last - first + 1); genList (n: first + n) (last - first + 1);
/* Splits the elements of a list in two lists, `right' and /* Splits the elements of a list in two lists, `right` and
`wrong', depending on the evaluation of a predicate. `wrong`, depending on the evaluation of a predicate.
Type: (a -> bool) -> [a] -> { right :: [a], wrong :: [a] }
Example: Example:
partition (x: x > 2) [ 5 1 2 3 4 ] partition (x: x > 2) [ 5 1 2 3 4 ]
@ -252,7 +308,7 @@ rec {
/* Splits the elements of a list into many lists, using the return value of a predicate. /* Splits the elements of a list into many lists, using the return value of a predicate.
Predicate should return a string which becomes keys of attrset `groupBy' returns. Predicate should return a string which becomes keys of attrset `groupBy' returns.
`groupBy'' allows to customise the combining function and initial value `groupBy'` allows to customise the combining function and initial value
Example: Example:
groupBy (x: boolToString (x > 2)) [ 5 1 2 3 4 ] groupBy (x: boolToString (x > 2)) [ 5 1 2 3 4 ]
@ -268,10 +324,6 @@ rec {
xfce = [ { name = "xfce"; script = "xfce4-session &"; } ]; xfce = [ { name = "xfce"; script = "xfce4-session &"; } ];
} }
groupBy' allows to customise the combining function and initial value
Example:
groupBy' builtins.add 0 (x: boolToString (x > 2)) [ 5 1 2 3 4 ] groupBy' builtins.add 0 (x: boolToString (x > 2)) [ 5 1 2 3 4 ]
=> { true = 12; false = 3; } => { true = 12; false = 3; }
*/ */
@ -289,17 +341,27 @@ rec {
the merging stops at the shortest. How both lists are merged is defined the merging stops at the shortest. How both lists are merged is defined
by the first argument. by the first argument.
Type: zipListsWith :: (a -> b -> c) -> [a] -> [b] -> [c]
Example: Example:
zipListsWith (a: b: a + b) ["h" "l"] ["e" "o"] zipListsWith (a: b: a + b) ["h" "l"] ["e" "o"]
=> ["he" "lo"] => ["he" "lo"]
*/ */
zipListsWith = f: fst: snd: zipListsWith =
# Function to zip elements of both lists
f:
# First list
fst:
# Second list
snd:
genList genList
(n: f (elemAt fst n) (elemAt snd n)) (min (length fst) (length snd)); (n: f (elemAt fst n) (elemAt snd n)) (min (length fst) (length snd));
/* Merges two lists of the same size together. If the sizes aren't the same /* Merges two lists of the same size together. If the sizes aren't the same
the merging stops at the shortest. the merging stops at the shortest.
Type: zipLists :: [a] -> [b] -> [{ fst :: a, snd :: b}]
Example: Example:
zipLists [ 1 2 ] [ "a" "b" ] zipLists [ 1 2 ] [ "a" "b" ]
=> [ { fst = 1; snd = "a"; } { fst = 2; snd = "b"; } ] => [ { fst = 1; snd = "a"; } { fst = 2; snd = "b"; } ]
@ -308,6 +370,8 @@ rec {
/* Reverse the order of the elements of a list. /* Reverse the order of the elements of a list.
Type: reverseList :: [a] -> [a]
Example: Example:
reverseList [ "b" "o" "j" ] reverseList [ "b" "o" "j" ]
@ -321,8 +385,7 @@ rec {
`before a b == true` means that `b` depends on `a` (there's an `before a b == true` means that `b` depends on `a` (there's an
edge from `b` to `a`). edge from `b` to `a`).
Examples: Example:
listDfs true hasPrefix [ "/home/user" "other" "/" "/home" ] listDfs true hasPrefix [ "/home/user" "other" "/" "/home" ]
== { minimal = "/"; # minimal element == { minimal = "/"; # minimal element
visited = [ "/home/user" ]; # seen elements (in reverse order) visited = [ "/home/user" ]; # seen elements (in reverse order)
@ -336,7 +399,6 @@ rec {
rest = [ "/home" "other" ]; # everything else rest = [ "/home" "other" ]; # everything else
*/ */
listDfs = stopOnCycles: before: list: listDfs = stopOnCycles: before: list:
let let
dfs' = us: visited: rest: dfs' = us: visited: rest:
@ -361,7 +423,7 @@ rec {
`before a b == true` means that `b` should be after `a` `before a b == true` means that `b` should be after `a`
in the result. in the result.
Examples: Example:
toposort hasPrefix [ "/home/user" "other" "/" "/home" ] toposort hasPrefix [ "/home/user" "other" "/" "/home" ]
== { result = [ "/" "/home" "/home/user" "other" ]; } == { result = [ "/" "/home" "/home/user" "other" ]; }
@ -376,7 +438,6 @@ rec {
toposort (a: b: a < b) [ 3 2 1 ] == { result = [ 1 2 3 ]; } toposort (a: b: a < b) [ 3 2 1 ] == { result = [ 1 2 3 ]; }
*/ */
toposort = before: list: toposort = before: list:
let let
dfsthis = listDfs true before list; dfsthis = listDfs true before list;
@ -467,26 +528,38 @@ rec {
/* Return the first (at most) N elements of a list. /* Return the first (at most) N elements of a list.
Type: take :: int -> [a] -> [a]
Example: Example:
take 2 [ "a" "b" "c" "d" ] take 2 [ "a" "b" "c" "d" ]
=> [ "a" "b" ] => [ "a" "b" ]
take 2 [ ] take 2 [ ]
=> [ ] => [ ]
*/ */
take = count: sublist 0 count; take =
# Number of elements to take
count: sublist 0 count;
/* Remove the first (at most) N elements of a list. /* Remove the first (at most) N elements of a list.
Type: drop :: int -> [a] -> [a]
Example: Example:
drop 2 [ "a" "b" "c" "d" ] drop 2 [ "a" "b" "c" "d" ]
=> [ "c" "d" ] => [ "c" "d" ]
drop 2 [ ] drop 2 [ ]
=> [ ] => [ ]
*/ */
drop = count: list: sublist count (length list) list; drop =
# Number of elements to drop
count:
# Input list
list: sublist count (length list) list;
/* Return a list consisting of at most count elements of list, /* Return a list consisting of at most `count` elements of `list`,
starting at index start. starting at index `start`.
Type: sublist :: int -> int -> [a] -> [a]
Example: Example:
sublist 1 3 [ "a" "b" "c" "d" "e" ] sublist 1 3 [ "a" "b" "c" "d" "e" ]
@ -494,7 +567,13 @@ rec {
sublist 1 3 [ ] sublist 1 3 [ ]
=> [ ] => [ ]
*/ */
sublist = start: count: list: sublist =
# Index at which to start the sublist
start:
# Number of elements to take
count:
# Input list
list:
let len = length list; in let len = length list; in
genList genList
(n: elemAt list (n + start)) (n: elemAt list (n + start))
@ -504,6 +583,10 @@ rec {
/* Return the last element of a list. /* Return the last element of a list.
This function throws an error if the list is empty.
Type: last :: [a] -> a
Example: Example:
last [ 1 2 3 ] last [ 1 2 3 ]
=> 3 => 3
@ -512,7 +595,11 @@ rec {
assert lib.assertMsg (list != []) "lists.last: list must not be empty!"; assert lib.assertMsg (list != []) "lists.last: list must not be empty!";
elemAt list (length list - 1); elemAt list (length list - 1);
/* Return all elements but the last /* Return all elements but the last.
This function throws an error if the list is empty.
Type: init :: [a] -> [a]
Example: Example:
init [ 1 2 3 ] init [ 1 2 3 ]
@ -523,7 +610,7 @@ rec {
take (length list - 1) list; take (length list - 1) list;
/* return the image of the cross product of some lists by a function /* Return the image of the cross product of some lists by a function.
Example: Example:
crossLists (x:y: "${toString x}${toString y}") [[1 2] [3 4]] crossLists (x:y: "${toString x}${toString y}") [[1 2] [3 4]]
@ -534,8 +621,9 @@ rec {
/* Remove duplicate elements from the list. O(n^2) complexity. /* Remove duplicate elements from the list. O(n^2) complexity.
Example: Type: unique :: [a] -> [a]
Example:
unique [ 3 2 3 4 ] unique [ 3 2 3 4 ]
=> [ 3 2 4 ] => [ 3 2 4 ]
*/ */

View File

@ -8,61 +8,72 @@ with lib.strings;
rec { rec {
# Returns true when the given argument is an option /* Returns true when the given argument is an option
#
# Examples: Type: isOption :: a -> bool
# isOption 1 // => false
# isOption (mkOption {}) // => true Example:
isOption 1 // => false
isOption (mkOption {}) // => true
*/
isOption = lib.isType "option"; isOption = lib.isType "option";
# Creates an Option attribute set. mkOption accepts an attribute set with the following keys: /* Creates an Option attribute set. mkOption accepts an attribute set with the following keys:
#
# default: Default value used when no definition is given in the configuration. All keys default to `null` when not given.
# defaultText: Textual representation of the default, for in the manual.
# example: Example value used in the manual. Example:
# description: String describing the option. mkOption { } // => { _type = "option"; }
# type: Option type, providing type-checking and value merging. mkOption { defaultText = "foo"; } // => { _type = "option"; defaultText = "foo"; }
# apply: Function that converts the option value to something else. */
# internal: Whether the option is for NixOS developers only.
# visible: Whether the option shows up in the manual.
# readOnly: Whether the option can be set only once
# options: Obsolete, used by types.optionSet.
#
# All keys default to `null` when not given.
#
# Examples:
# mkOption { } // => { _type = "option"; }
# mkOption { defaultText = "foo"; } // => { _type = "option"; defaultText = "foo"; }
mkOption = mkOption =
{ default ? null # Default value used when no definition is given in the configuration. {
, defaultText ? null # Textual representation of the default, for in the manual. # Default value used when no definition is given in the configuration.
, example ? null # Example value used in the manual. default ? null,
, description ? null # String describing the option. # Textual representation of the default, for the manual.
, relatedPackages ? null # Related packages used in the manual (see `genRelatedPackages` in ../nixos/doc/manual/default.nix). defaultText ? null,
, type ? null # Option type, providing type-checking and value merging. # Example value used in the manual.
, apply ? null # Function that converts the option value to something else. example ? null,
, internal ? null # Whether the option is for NixOS developers only. # String describing the option.
, visible ? null # Whether the option shows up in the manual. description ? null,
, readOnly ? null # Whether the option can be set only once # Related packages used in the manual (see `genRelatedPackages` in ../nixos/doc/manual/default.nix).
, options ? null # Obsolete, used by types.optionSet. relatedPackages ? null,
# Option type, providing type-checking and value merging.
type ? null,
# Function that converts the option value to something else.
apply ? null,
# Whether the option is for NixOS developers only.
internal ? null,
# Whether the option shows up in the manual.
visible ? null,
# Whether the option can be set only once
readOnly ? null,
# Obsolete, used by types.optionSet.
options ? null
} @ attrs: } @ attrs:
attrs // { _type = "option"; }; attrs // { _type = "option"; };
# Creates a Option attribute set for a boolean value option i.e an option to be toggled on or off: /* Creates an Option attribute set for a boolean value option i.e an
# option to be toggled on or off:
# Examples:
# mkEnableOption "foo" // => { _type = "option"; default = false; description = "Whether to enable foo."; example = true; type = { ... }; } Example:
mkEnableOption = name: mkOption { mkEnableOption "foo"
=> { _type = "option"; default = false; description = "Whether to enable foo."; example = true; type = { ... }; }
*/
mkEnableOption =
# Name for the created option
name: mkOption {
default = false; default = false;
example = true; example = true;
description = "Whether to enable ${name}."; description = "Whether to enable ${name}.";
type = lib.types.bool; type = lib.types.bool;
}; };
# This option accept anything, but it does not produce any result. This /* This option accepts anything, but it does not produce any result.
# is useful for sharing a module across different module sets without
# having to implement similar features as long as the value of the options This is useful for sharing a module across different module sets
# are not expected. without having to implement similar features as long as the
values of the options are not accessed. */
mkSinkUndeclaredOptions = attrs: mkOption ({ mkSinkUndeclaredOptions = attrs: mkOption ({
internal = true; internal = true;
visible = false; visible = false;
@ -102,18 +113,24 @@ rec {
else else
val) (head defs).value defs; val) (head defs).value defs;
# Extracts values of all "value" keys of the given list /* Extracts values of all "value" keys of the given list.
#
# Examples: Type: getValues :: [ { value :: a } ] -> [a]
# getValues [ { value = 1; } { value = 2; } ] // => [ 1 2 ]
# getValues [ ] // => [ ] Example:
getValues [ { value = 1; } { value = 2; } ] // => [ 1 2 ]
getValues [ ] // => [ ]
*/
getValues = map (x: x.value); getValues = map (x: x.value);
# Extracts values of all "file" keys of the given list /* Extracts values of all "file" keys of the given list
#
# Examples: Type: getFiles :: [ { file :: a } ] -> [a]
# getFiles [ { file = "file1"; } { file = "file2"; } ] // => [ "file1" "file2" ]
# getFiles [ ] // => [ ] Example:
getFiles [ { file = "file1"; } { file = "file2"; } ] // => [ "file1" "file2" ]
getFiles [ ] // => [ ]
*/
getFiles = map (x: x.file); getFiles = map (x: x.file);
# Generate documentation template from the list of option declaration like # Generate documentation template from the list of option declaration like
@ -146,10 +163,13 @@ rec {
/* This function recursively removes all derivation attributes from /* This function recursively removes all derivation attributes from
`x' except for the `name' attribute. This is to make the `x` except for the `name` attribute.
generation of `options.xml' much more efficient: the XML
representation of derivations is very large (on the order of This is to make the generation of `options.xml` much more
megabytes) and is not actually used by the manual generator. */ efficient: the XML representation of derivations is very large
(on the order of megabytes) and is not actually used by the
manual generator.
*/
scrubOptionValue = x: scrubOptionValue = x:
if isDerivation x then if isDerivation x then
{ type = "derivation"; drvPath = x.name; outPath = x.name; name = x.name; } { type = "derivation"; drvPath = x.name; outPath = x.name; name = x.name; }
@ -158,20 +178,21 @@ rec {
else x; else x;
/* For use in the example option attribute. It causes the given /* For use in the `example` option attribute. It causes the given
text to be included verbatim in documentation. This is necessary text to be included verbatim in documentation. This is necessary
for example values that are not simple values, e.g., for example values that are not simple values, e.g., functions.
functions. */ */
literalExample = text: { _type = "literalExample"; inherit text; }; literalExample = text: { _type = "literalExample"; inherit text; };
# Helper functions.
/* Helper functions. */ /* Convert an option, described as a list of the option parts in to a
safe, human readable version.
# Convert an option, described as a list of the option parts in to a Example:
# safe, human readable version. ie: (showOption ["foo" "bar" "baz"]) == "foo.bar.baz"
# (showOption ["foo" "bar.baz" "tux"]) == "foo.\"bar.baz\".tux"
# (showOption ["foo" "bar" "baz"]) == "foo.bar.baz" */
# (showOption ["foo" "bar.baz" "tux"]) == "foo.\"bar.baz\".tux"
showOption = parts: let showOption = parts: let
escapeOptionPart = part: escapeOptionPart = part:
let let

View File

@ -12,6 +12,8 @@ rec {
/* Concatenate a list of strings. /* Concatenate a list of strings.
Type: concatStrings :: [string] -> string
Example: Example:
concatStrings ["foo" "bar"] concatStrings ["foo" "bar"]
=> "foobar" => "foobar"
@ -20,15 +22,19 @@ rec {
/* Map a function over a list and concatenate the resulting strings. /* Map a function over a list and concatenate the resulting strings.
Type: concatMapStrings :: (a -> string) -> [a] -> string
Example: Example:
concatMapStrings (x: "a" + x) ["foo" "bar"] concatMapStrings (x: "a" + x) ["foo" "bar"]
=> "afooabar" => "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 /* Like `concatMapStrings` except that the f functions also gets the
position as a parameter. position as a parameter.
Type: concatImapStrings :: (int -> a -> string) -> [a] -> string
Example: Example:
concatImapStrings (pos: x: "${toString pos}-${x}") ["foo" "bar"] concatImapStrings (pos: x: "${toString pos}-${x}") ["foo" "bar"]
=> "1-foo2-bar" => "1-foo2-bar"
@ -37,17 +43,25 @@ rec {
/* Place an element between each element of a list /* Place an element between each element of a list
Type: intersperse :: a -> [a] -> [a]
Example: Example:
intersperse "/" ["usr" "local" "bin"] intersperse "/" ["usr" "local" "bin"]
=> ["usr" "/" "local" "/" "bin"]. => ["usr" "/" "local" "/" "bin"].
*/ */
intersperse = separator: list: intersperse =
# Separator to add between elements
separator:
# Input list
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
Type: concatStringsSep :: string -> [string] -> string
Example: Example:
concatStringsSep "/" ["usr" "local" "bin"] concatStringsSep "/" ["usr" "local" "bin"]
=> "usr/local/bin" => "usr/local/bin"
@ -55,43 +69,77 @@ rec {
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. /* Maps a function over a list of strings and then concatenates the
result with the specified separator interspersed between
elements.
Type: concatMapStringsSep :: string -> (string -> string) -> [string] -> string
Example: Example:
concatMapStringsSep "-" (x: toUpper x) ["foo" "bar" "baz"] concatMapStringsSep "-" (x: toUpper x) ["foo" "bar" "baz"]
=> "FOO-BAR-BAZ" => "FOO-BAR-BAZ"
*/ */
concatMapStringsSep = sep: f: list: concatStringsSep sep (map f list); concatMapStringsSep =
# Separator to add between elements
sep:
# Function to map over the list
f:
# List of input strings
list: concatStringsSep sep (map f list);
/* First imaps over the list and then concatenates it. /* Same as `concatMapStringsSep`, but the mapping function
additionally receives the position of its argument.
Type: concatMapStringsSep :: string -> (int -> string -> string) -> [string] -> string
Example: Example:
concatImapStringsSep "-" (pos: x: toString (x / pos)) [ 6 6 6 ] concatImapStringsSep "-" (pos: x: toString (x / pos)) [ 6 6 6 ]
=> "6-3-2" => "6-3-2"
*/ */
concatImapStringsSep = sep: f: list: concatStringsSep sep (lib.imap1 f list); concatImapStringsSep =
# Separator to add between elements
sep:
# Function that receives elements and their positions
f:
# List of input strings
list: concatStringsSep sep (lib.imap1 f list);
/* Construct a Unix-style search path consisting of each `subDir" /* Construct a Unix-style, colon-separated search path consisting of
directory of the given list of packages. the given `subDir` appended to each of the given paths.
Type: makeSearchPath :: string -> [string] -> string
Example: Example:
makeSearchPath "bin" ["/root" "/usr" "/usr/local"] makeSearchPath "bin" ["/root" "/usr" "/usr/local"]
=> "/root/bin:/usr/bin:/usr/local/bin" => "/root/bin:/usr/bin:/usr/local/bin"
makeSearchPath "bin" ["/"] makeSearchPath "bin" [""]
=> "//bin" => "/bin"
*/ */
makeSearchPath = subDir: packages: makeSearchPath =
concatStringsSep ":" (map (path: path + "/" + subDir) (builtins.filter (x: x != null) packages)); # Directory name to append
subDir:
# List of base paths
paths:
concatStringsSep ":" (map (path: path + "/" + subDir) (builtins.filter (x: x != null) paths));
/* Construct a Unix-style search path, using given package output. /* Construct a Unix-style search path by appending the given
If no output is found, fallback to `.out` and then to the default. `subDir` to the specified `output` of each of the packages. If no
output by the given name is found, fallback to `.out` and then to
the default.
Type: string -> string -> [package] -> string
Example: Example:
makeSearchPathOutput "dev" "bin" [ pkgs.openssl pkgs.zlib ] makeSearchPathOutput "dev" "bin" [ pkgs.openssl pkgs.zlib ]
=> "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r-dev/bin:/nix/store/wwh7mhwh269sfjkm6k5665b5kgp7jrk2-zlib-1.2.8/bin" => "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r-dev/bin:/nix/store/wwh7mhwh269sfjkm6k5665b5kgp7jrk2-zlib-1.2.8/bin"
*/ */
makeSearchPathOutput = output: subDir: pkgs: makeSearchPath subDir (map (lib.getOutput output) pkgs); makeSearchPathOutput =
# Package output to use
output:
# Directory name to append
subDir:
# List of packages
pkgs: makeSearchPath subDir (map (lib.getOutput output) pkgs);
/* Construct a library search path (such as RPATH) containing the /* Construct a library search path (such as RPATH) containing the
libraries for a set of packages libraries for a set of packages
@ -117,13 +165,12 @@ rec {
/* Construct a perl search path (such as $PERL5LIB) /* Construct a perl search path (such as $PERL5LIB)
FIXME(zimbatm): this should be moved in perl-specific code
Example: Example:
pkgs = import <nixpkgs> { } pkgs = import <nixpkgs> { }
makePerlPath [ pkgs.perlPackages.libnet ] makePerlPath [ pkgs.perlPackages.libnet ]
=> "/nix/store/n0m1fk9c960d8wlrs62sncnadygqqc6y-perl-Net-SMTP-1.25/lib/perl5/site_perl" => "/nix/store/n0m1fk9c960d8wlrs62sncnadygqqc6y-perl-Net-SMTP-1.25/lib/perl5/site_perl"
*/ */
# FIXME(zimbatm): this should be moved in perl-specific code
makePerlPath = makeSearchPathOutput "lib" "lib/perl5/site_perl"; makePerlPath = makeSearchPathOutput "lib" "lib/perl5/site_perl";
/* Construct a perl search path recursively including all dependencies (such as $PERL5LIB) /* Construct a perl search path recursively including all dependencies (such as $PERL5LIB)
@ -138,34 +185,51 @@ rec {
/* Depending on the boolean `cond', return either the given string /* Depending on the boolean `cond', return either the given string
or the empty string. Useful to concatenate against a bigger string. or the empty string. Useful to concatenate against a bigger string.
Type: optionalString :: bool -> string -> string
Example: Example:
optionalString true "some-string" optionalString true "some-string"
=> "some-string" => "some-string"
optionalString false "some-string" optionalString false "some-string"
=> "" => ""
*/ */
optionalString = cond: string: if cond then string else ""; optionalString =
# Condition
cond:
# String to return if condition is true
string: if cond then string else "";
/* Determine whether a string has given prefix. /* Determine whether a string has given prefix.
Type: hasPrefix :: string -> string -> bool
Example: Example:
hasPrefix "foo" "foobar" hasPrefix "foo" "foobar"
=> true => true
hasPrefix "foo" "barfoo" hasPrefix "foo" "barfoo"
=> false => false
*/ */
hasPrefix = pref: str: hasPrefix =
substring 0 (stringLength pref) str == pref; # Prefix to check for
pref:
# Input string
str: substring 0 (stringLength pref) str == pref;
/* Determine whether a string has given suffix. /* Determine whether a string has given suffix.
Type: hasSuffix :: string -> string -> bool
Example: Example:
hasSuffix "foo" "foobar" hasSuffix "foo" "foobar"
=> false => false
hasSuffix "foo" "barfoo" hasSuffix "foo" "barfoo"
=> true => true
*/ */
hasSuffix = suffix: content: hasSuffix =
# Suffix to check for
suffix:
# Input string
content:
let let
lenContent = stringLength content; lenContent = stringLength content;
lenSuffix = stringLength suffix; lenSuffix = stringLength suffix;
@ -180,6 +244,8 @@ rec {
Also note that Nix treats strings as a list of bytes and thus doesn't Also note that Nix treats strings as a list of bytes and thus doesn't
handle unicode. handle unicode.
Type: stringtoCharacters :: string -> [string]
Example: Example:
stringToCharacters "" stringToCharacters ""
=> [ ] => [ ]
@ -194,18 +260,25 @@ rec {
/* Manipulate a string character by character and replace them by /* Manipulate a string character by character and replace them by
strings before concatenating the results. strings before concatenating the results.
Type: stringAsChars :: (string -> string) -> string -> string
Example: Example:
stringAsChars (x: if x == "a" then "i" else x) "nax" stringAsChars (x: if x == "a" then "i" else x) "nax"
=> "nix" => "nix"
*/ */
stringAsChars = f: s: stringAsChars =
concatStrings ( # Function to map over each individual character
f:
# Input string
s: concatStrings (
map f (stringToCharacters s) map f (stringToCharacters s)
); );
/* Escape occurrence of the elements of list in string by /* Escape occurrence of the elements of `list` in `string` by
prefixing it with a backslash. prefixing it with a backslash.
Type: escape :: [string] -> string -> string
Example: Example:
escape ["(" ")"] "(foo)" escape ["(" ")"] "(foo)"
=> "\\(foo\\)" => "\\(foo\\)"
@ -214,6 +287,8 @@ rec {
/* Quote string to be used safely within the Bourne shell. /* Quote string to be used safely within the Bourne shell.
Type: escapeShellArg :: string -> string
Example: Example:
escapeShellArg "esc'ape\nme" escapeShellArg "esc'ape\nme"
=> "'esc'\\''ape\nme'" => "'esc'\\''ape\nme'"
@ -222,6 +297,8 @@ rec {
/* Quote all arguments to be safely passed to the Bourne shell. /* Quote all arguments to be safely passed to the Bourne shell.
Type: escapeShellArgs :: [string] -> string
Example: Example:
escapeShellArgs ["one" "two three" "four'five"] escapeShellArgs ["one" "two three" "four'five"]
=> "'one' 'two three' 'four'\\''five'" => "'one' 'two three' 'four'\\''five'"
@ -230,13 +307,15 @@ rec {
/* Turn a string into a Nix expression representing that string /* Turn a string into a Nix expression representing that string
Type: string -> string
Example: Example:
escapeNixString "hello\${}\n" escapeNixString "hello\${}\n"
=> "\"hello\\\${}\\n\"" => "\"hello\\\${}\\n\""
*/ */
escapeNixString = s: escape ["$"] (builtins.toJSON s); escapeNixString = s: escape ["$"] (builtins.toJSON s);
/* Obsolete - use replaceStrings instead. */ # Obsolete - use replaceStrings instead.
replaceChars = builtins.replaceStrings or ( replaceChars = builtins.replaceStrings or (
del: new: s: del: new: s:
let let
@ -256,6 +335,8 @@ rec {
/* Converts an ASCII string to lower-case. /* Converts an ASCII string to lower-case.
Type: toLower :: string -> string
Example: Example:
toLower "HOME" toLower "HOME"
=> "home" => "home"
@ -264,6 +345,8 @@ rec {
/* Converts an ASCII string to upper-case. /* Converts an ASCII string to upper-case.
Type: toUpper :: string -> string
Example: Example:
toUpper "home" toUpper "home"
=> "HOME" => "HOME"
@ -273,7 +356,7 @@ rec {
/* Appends string context from another string. This is an implementation /* Appends string context from another string. This is an implementation
detail of Nix. detail of Nix.
Strings in Nix carry an invisible `context' which is a list of strings 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 representing store paths. If the string is later used in a derivation
attribute, the derivation will properly populate the inputDrvs and attribute, the derivation will properly populate the inputDrvs and
inputSrcs. inputSrcs.
@ -319,8 +402,9 @@ rec {
in in
recurse 0 0; recurse 0 0;
/* Return the suffix of the second argument if the first argument matches /* Return a string without the specified prefix, if the prefix matches.
its prefix.
Type: string -> string -> string
Example: Example:
removePrefix "foo." "foo.bar.baz" removePrefix "foo." "foo.bar.baz"
@ -328,18 +412,23 @@ rec {
removePrefix "xxx" "foo.bar.baz" removePrefix "xxx" "foo.bar.baz"
=> "foo.bar.baz" => "foo.bar.baz"
*/ */
removePrefix = pre: s: removePrefix =
# Prefix to remove if it matches
prefix:
# Input string
str:
let let
preLen = stringLength pre; preLen = stringLength prefix;
sLen = stringLength s; sLen = stringLength str;
in in
if hasPrefix pre s then if hasPrefix prefix str then
substring preLen (sLen - preLen) s substring preLen (sLen - preLen) str
else else
s; str;
/* Return the prefix of the second argument if the first argument matches /* Return a string without the specified suffix, if the suffix matches.
its suffix.
Type: string -> string -> string
Example: Example:
removeSuffix "front" "homefront" removeSuffix "front" "homefront"
@ -347,17 +436,21 @@ rec {
removeSuffix "xxx" "homefront" removeSuffix "xxx" "homefront"
=> "homefront" => "homefront"
*/ */
removeSuffix = suf: s: removeSuffix =
# Suffix to remove if it matches
suffix:
# Input string
str:
let let
sufLen = stringLength suf; sufLen = stringLength suffix;
sLen = stringLength s; sLen = stringLength str;
in in
if sufLen <= sLen && suf == substring (sLen - sufLen) sufLen s then if sufLen <= sLen && suffix == substring (sLen - sufLen) sufLen str then
substring 0 (sLen - sufLen) s substring 0 (sLen - sufLen) str
else else
s; str;
/* Return true iff string v1 denotes a version older than v2. /* Return true if string v1 denotes a version older than v2.
Example: Example:
versionOlder "1.1" "1.2" versionOlder "1.1" "1.2"
@ -367,7 +460,7 @@ rec {
*/ */
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 if string v1 denotes a version equal to or newer than v2.
Example: Example:
versionAtLeast "1.1" "1.0" versionAtLeast "1.1" "1.0"
@ -459,6 +552,11 @@ rec {
/* Create a fixed width string with additional prefix to match /* Create a fixed width string with additional prefix to match
required width. required width.
This function will fail if the input string is longer than the
requested length.
Type: fixedWidthString :: int -> string -> string
Example: Example:
fixedWidthString 5 "0" (toString 15) fixedWidthString 5 "0" (toString 15)
=> "00015" => "00015"
@ -502,12 +600,16 @@ rec {
=> false => false
*/ */
isStorePath = x: isStorePath = x:
isCoercibleToString x if isCoercibleToString x then
&& builtins.substring 0 1 (toString x) == "/" let str = toString x; in
&& dirOf x == builtins.storeDir; builtins.substring 0 1 str == "/"
&& dirOf str == builtins.storeDir
else
false;
/* Convert string to int /* Parse a string string as an int.
Obviously, it is a bit hacky to use fromJSON that way.
Type: string -> int
Example: Example:
toInt "1337" toInt "1337"
@ -517,17 +619,18 @@ rec {
toInt "3.14" toInt "3.14"
=> error: floating point JSON numbers are not supported => error: floating point JSON numbers are not supported
*/ */
# Obviously, it is a bit hacky to use fromJSON this way.
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`.
beginning with `#' are treated as comments and ignored. Whitespace Lines beginning with `#` are treated as comments and ignored.
is significant. Whitespace is significant.
NOTE: this function is not performant and should be avoided NOTE: This function is not performant and should be avoided.
Example: Example:
readPathsFromFile /prefix readPathsFromFile /prefix
@ -549,6 +652,8 @@ rec {
/* Read the contents of a file removing the trailing \n /* Read the contents of a file removing the trailing \n
Type: fileContents :: path -> string
Example: Example:
$ echo "1.0" > ./version $ echo "1.0" > ./version

View File

@ -32,6 +32,7 @@ rec {
else if final.isUClibc then "uclibc" else if final.isUClibc then "uclibc"
else if final.isAndroid then "bionic" else if final.isAndroid then "bionic"
else if final.isLinux /* default */ then "glibc" else if final.isLinux /* default */ then "glibc"
else if final.isAvr then "avrlibc"
# TODO(@Ericson2314) think more about other operating systems # TODO(@Ericson2314) think more about other operating systems
else "native/impure"; else "native/impure";
extensions = { extensions = {

View File

@ -99,6 +99,34 @@ rec {
riscv64 = riscv "64"; riscv64 = riscv "64";
riscv32 = riscv "32"; riscv32 = riscv "32";
avr = {
config = "avr";
};
arm-embedded = {
config = "arm-none-eabi";
libc = "newlib";
};
aarch64-embedded = {
config = "aarch64-none-elf";
libc = "newlib";
};
ppc-embedded = {
config = "powerpc-none-eabi";
libc = "newlib";
};
i686-embedded = {
config = "i686-elf";
libc = "newlib";
};
x86_64-embedded = {
config = "x86_64-elf";
libc = "newlib";
};
# #
# Darwin # Darwin

View File

@ -19,6 +19,7 @@ rec {
isRiscV = { cpu = { family = "riscv"; }; }; isRiscV = { cpu = { family = "riscv"; }; };
isSparc = { cpu = { family = "sparc"; }; }; isSparc = { cpu = { family = "sparc"; }; };
isWasm = { cpu = { family = "wasm"; }; }; isWasm = { cpu = { family = "wasm"; }; };
isAvr = { cpu = { family = "avr"; }; };
is32bit = { cpu = { bits = 32; }; }; is32bit = { cpu = { bits = 32; }; };
is64bit = { cpu = { bits = 64; }; }; is64bit = { cpu = { bits = 64; }; };

View File

@ -101,6 +101,8 @@ rec {
wasm32 = { bits = 32; significantByte = littleEndian; family = "wasm"; }; wasm32 = { bits = 32; significantByte = littleEndian; family = "wasm"; };
wasm64 = { bits = 64; significantByte = littleEndian; family = "wasm"; }; wasm64 = { bits = 64; significantByte = littleEndian; family = "wasm"; };
avr = { bits = 8; family = "avr"; };
}; };
################################################################################ ################################################################################
@ -117,6 +119,7 @@ rec {
apple = {}; apple = {};
pc = {}; pc = {};
none = {};
unknown = {}; unknown = {};
}; };
@ -200,6 +203,7 @@ rec {
cygnus = {}; cygnus = {};
msvc = {}; msvc = {};
eabi = {}; eabi = {};
elf = {};
androideabi = {}; androideabi = {};
android = { android = {
@ -255,9 +259,16 @@ rec {
setType "system" components; setType "system" components;
mkSkeletonFromList = l: { mkSkeletonFromList = l: {
"1" = if elemAt l 0 == "avr"
then { cpu = elemAt l 0; kernel = "none"; abi = "unknown"; }
else throw "Target specification with 1 components is ambiguous";
"2" = # We only do 2-part hacks for things Nix already supports "2" = # We only do 2-part hacks for things Nix already supports
if elemAt l 1 == "cygwin" if elemAt l 1 == "cygwin"
then { cpu = elemAt l 0; kernel = "windows"; abi = "cygnus"; } then { cpu = elemAt l 0; kernel = "windows"; abi = "cygnus"; }
else if (elemAt l 1 == "eabi")
then { cpu = elemAt l 0; vendor = "none"; kernel = "none"; abi = elemAt l 1; }
else if (elemAt l 1 == "elf")
then { cpu = elemAt l 0; vendor = "none"; kernel = "none"; abi = elemAt l 1; }
else { cpu = elemAt l 0; kernel = elemAt l 1; }; else { cpu = elemAt l 0; kernel = elemAt l 1; };
"3" = # Awkwards hacks, beware! "3" = # Awkwards hacks, beware!
if elemAt l 1 == "apple" if elemAt l 1 == "apple"
@ -268,6 +279,10 @@ rec {
then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "windows"; abi = "gnu"; } then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "windows"; abi = "gnu"; }
else if hasPrefix "netbsd" (elemAt l 2) else if hasPrefix "netbsd" (elemAt l 2)
then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; } then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; }
else if (elemAt l 2 == "eabi")
then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "none"; abi = elemAt l 2; }
else if (elemAt l 2 == "elf")
then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "none"; abi = elemAt l 2; }
else throw "Target specification with 3 components is ambiguous"; else throw "Target specification with 3 components is ambiguous";
"4" = { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; abi = elemAt l 3; }; "4" = { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; abi = elemAt l 3; };
}.${toString (length l)} }.${toString (length l)}

View File

@ -112,7 +112,7 @@ runTests {
storePathAppendix = isStorePath storePathAppendix = isStorePath
"${goodPath}/bin/python"; "${goodPath}/bin/python";
nonAbsolute = isStorePath (concatStrings (tail (stringToCharacters goodPath))); nonAbsolute = isStorePath (concatStrings (tail (stringToCharacters goodPath)));
asPath = isStorePath goodPath; asPath = isStorePath (/. + goodPath);
otherPath = isStorePath "/something/else"; otherPath = isStorePath "/something/else";
otherVals = { otherVals = {
attrset = isStorePath {}; attrset = isStorePath {};

View File

@ -9,23 +9,37 @@ rec {
Type: id :: a -> a Type: id :: a -> a
*/ */
id = x: x; id =
# The value to return
x: x;
/* The constant function /* The constant function
Ignores the second argument.
Or: Construct a function that always returns a static value. Ignores the second argument. If called with only one argument,
constructs a function that always returns a static value.
Type: const :: a -> b -> a Type: const :: a -> b -> a
Example: Example:
let f = const 5; in f 10 let f = const 5; in f 10
=> 5 => 5
*/ */
const = x: y: x; const =
# Value to return
x:
# Value to ignore
y: x;
## Named versions corresponding to some builtin operators. ## Named versions corresponding to some builtin operators.
/* Concatenate two lists */ /* Concatenate two lists
Type: concat :: [a] -> [a] -> [a]
Example:
concat [ 1 2 ] [ 3 4 ]
=> [ 1 2 3 4 ]
*/
concat = x: y: x ++ y; concat = x: y: x ++ y;
/* boolean or */ /* boolean or */
@ -53,27 +67,40 @@ rec {
bitNot = builtins.sub (-1); bitNot = builtins.sub (-1);
/* Convert a boolean to a string. /* Convert a boolean to a string.
Note that toString on a bool returns "1" and "".
This function uses the strings "true" and "false" to represent
boolean values. Calling `toString` on a bool instead returns "1"
and "" (sic!).
Type: boolToString :: bool -> string
*/ */
boolToString = b: if b then "true" else "false"; boolToString = b: if b then "true" else "false";
/* Merge two attribute sets shallowly, right side trumps left /* Merge two attribute sets shallowly, right side trumps left
mergeAttrs :: attrs -> attrs -> attrs
Example: Example:
mergeAttrs { a = 1; b = 2; } { b = 3; c = 4; } mergeAttrs { a = 1; b = 2; } { b = 3; c = 4; }
=> { a = 1; b = 3; c = 4; } => { a = 1; b = 3; c = 4; }
*/ */
mergeAttrs = x: y: x // y; mergeAttrs =
# Left attribute set
x:
# Right attribute set (higher precedence for equal keys)
y: x // y;
/* Flip the order of the arguments of a binary function. /* Flip the order of the arguments of a binary function.
Type: flip :: (a -> b -> c) -> (b -> a -> c)
Example: Example:
flip concat [1] [2] flip concat [1] [2]
=> [ 2 1 ] => [ 2 1 ]
*/ */
flip = f: a: b: f b a; flip = f: a: b: f b a;
/* Apply function if argument is non-null. /* Apply function if the supplied argument is non-null.
Example: Example:
mapNullable (x: x+1) null mapNullable (x: x+1) null
@ -81,7 +108,11 @@ rec {
mapNullable (x: x+1) 22 mapNullable (x: x+1) 22
=> 23 => 23
*/ */
mapNullable = f: a: if isNull a then a else f a; mapNullable =
# Function to call
f:
# Argument to check for null before passing it to `f`
a: if isNull a then a else f a;
# Pull in some builtins not included elsewhere. # Pull in some builtins not included elsewhere.
inherit (builtins) inherit (builtins)
@ -92,21 +123,27 @@ rec {
## nixpks version strings ## nixpks version strings
# The current full nixpkgs version number. /* Returns the current full nixpkgs version number. */
version = release + versionSuffix; version = release + versionSuffix;
# The current nixpkgs version number as string. /* Returns the current nixpkgs release number as string. */
release = lib.strings.fileContents ../.version; release = lib.strings.fileContents ../.version;
# The current nixpkgs version suffix as string. /* Returns the current nixpkgs version suffix as string. */
versionSuffix = versionSuffix =
let suffixFile = ../.version-suffix; let suffixFile = ../.version-suffix;
in if pathExists suffixFile in if pathExists suffixFile
then lib.strings.fileContents suffixFile then lib.strings.fileContents suffixFile
else "pre-git"; else "pre-git";
# Attempt to get the revision nixpkgs is from /* Attempts to return the the current revision of nixpkgs and
revisionWithDefault = default: returns the supplied default value otherwise.
Type: revisionWithDefault :: string -> string
*/
revisionWithDefault =
# Default value to return if revision can not be determined
default:
let let
revisionFile = "${toString ./..}/.git-revision"; revisionFile = "${toString ./..}/.git-revision";
gitRepo = "${toString ./..}/.git"; gitRepo = "${toString ./..}/.git";
@ -117,14 +154,20 @@ rec {
nixpkgsVersion = builtins.trace "`lib.nixpkgsVersion` is deprecated, use `lib.version` instead!" version; nixpkgsVersion = builtins.trace "`lib.nixpkgsVersion` is deprecated, use `lib.version` instead!" version;
# Whether we're being called by nix-shell. /* Determine whether the function is being called from inside a Nix
shell.
Type: inNixShell :: bool
*/
inNixShell = builtins.getEnv "IN_NIX_SHELL" != ""; inNixShell = builtins.getEnv "IN_NIX_SHELL" != "";
## Integer operations ## Integer operations
# Return minimum/maximum of two numbers. /* Return minimum of two numbers. */
min = x: y: if x < y then x else y; min = x: y: if x < y then x else y;
/* Return maximum of two numbers. */
max = x: y: if x > y then x else y; max = x: y: if x > y then x else y;
/* Integer modulus /* Integer modulus
@ -158,8 +201,9 @@ rec {
second subtype, compare elements of a single subtype with `yes` second subtype, compare elements of a single subtype with `yes`
and `no` respectively. and `no` respectively.
Example: Type: (a -> bool) -> (a -> a -> int) -> (a -> a -> int) -> (a -> a -> int)
Example:
let cmp = splitByAndCompare (hasPrefix "foo") compare compare; in let cmp = splitByAndCompare (hasPrefix "foo") compare compare; in
cmp "a" "z" => -1 cmp "a" "z" => -1
@ -170,31 +214,44 @@ rec {
# while # while
compare "fooa" "a" => 1 compare "fooa" "a" => 1
*/ */
splitByAndCompare = p: yes: no: a: b: splitByAndCompare =
# Predicate
p:
# Comparison function if predicate holds for both values
yes:
# Comparison function if predicate holds for neither value
no:
# First value to compare
a:
# Second value to compare
b:
if p a if p a
then if p b then yes a b else -1 then if p b then yes a b else -1
else if p b then 1 else no a b; else if p b then 1 else no a b;
/* Reads a JSON file. */ /* Reads a JSON file.
Type :: path -> any
*/
importJSON = path: importJSON = path:
builtins.fromJSON (builtins.readFile path); builtins.fromJSON (builtins.readFile path);
## Warnings ## Warnings
/* See https://github.com/NixOS/nix/issues/749. Eventually we'd like these # See https://github.com/NixOS/nix/issues/749. Eventually we'd like these
to expand to Nix builtins that carry metadata so that Nix can filter out # to expand to Nix builtins that carry metadata so that Nix can filter out
the INFO messages without parsing the message string. # the INFO messages without parsing the message string.
#
# Usage:
# {
# foo = lib.warn "foo is deprecated" oldFoo;
# }
#
# TODO: figure out a clever way to integrate location information from
# something like __unsafeGetAttrPos.
Usage:
{
foo = lib.warn "foo is deprecated" oldFoo;
}
TODO: figure out a clever way to integrate location information from
something like __unsafeGetAttrPos.
*/
warn = msg: builtins.trace "WARNING: ${msg}"; warn = msg: builtins.trace "WARNING: ${msg}";
info = msg: builtins.trace "INFO: ${msg}"; info = msg: builtins.trace "INFO: ${msg}";

View File

@ -495,6 +495,11 @@
github = "bennofs"; github = "bennofs";
name = "Benno Fünfstück"; name = "Benno Fünfstück";
}; };
benpye = {
email = "ben@curlybracket.co.uk";
github = "benpye";
name = "Ben Pye";
};
benwbooth = { benwbooth = {
email = "benwbooth@gmail.com"; email = "benwbooth@gmail.com";
github = "benwbooth"; github = "benwbooth";
@ -2967,6 +2972,11 @@
github = "nequissimus"; github = "nequissimus";
name = "Tim Steinbach"; name = "Tim Steinbach";
}; };
nikitavoloboev = {
email = "nikita.voloboev@gmail.com";
github = "nikitavoloboev";
name = "Nikita Voloboev";
};
nfjinjing = { nfjinjing = {
email = "nfjinjing@gmail.com"; email = "nfjinjing@gmail.com";
github = "nfjinjing"; github = "nfjinjing";
@ -4618,6 +4628,11 @@
github = "wucke13"; github = "wucke13";
name = "Wucke"; name = "Wucke";
}; };
wykurz = {
email = "wykurz@gmail.com";
github = "wykurz";
name = "Mateusz Wykurz";
};
wyvie = { wyvie = {
email = "elijahrum@gmail.com"; email = "elijahrum@gmail.com";
github = "wyvie"; github = "wyvie";

View File

@ -15,7 +15,7 @@ containers.database =
{ config = { config =
{ config, pkgs, ... }: { config, pkgs, ... }:
{ <xref linkend="opt-services.postgresql.enable"/> = true; { <xref linkend="opt-services.postgresql.enable"/> = true;
<xref linkend="opt-services.postgresql.package"/> = pkgs.postgresql96; <xref linkend="opt-services.postgresql.package"/> = pkgs.postgresql_9_6;
}; };
}; };
</programlisting> </programlisting>

View File

@ -197,10 +197,10 @@ swapDevices = [ { device = "/dev/disk/by-label/swap"; } ];
pkgs.emacs pkgs.emacs
]; ];
<xref linkend="opt-services.postgresql.package"/> = pkgs.postgresql90; <xref linkend="opt-services.postgresql.package"/> = pkgs.postgresql_10;
</programlisting> </programlisting>
The latter option definition changes the default PostgreSQL package used The latter option definition changes the default PostgreSQL package used
by NixOSs PostgreSQL service to 9.0. For more information on packages, by NixOSs PostgreSQL service to 10.x. For more information on packages,
including how to add new ones, see <xref linkend="sec-custom-packages"/>. including how to add new ones, see <xref linkend="sec-custom-packages"/>.
</para> </para>
</listitem> </listitem>

View File

@ -637,6 +637,11 @@ $ nix-instantiate -E '(import &lt;nixpkgsunstable&gt; {}).gitFull'
anyways for clarity. anyways for clarity.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Groups <literal>kvm</literal> and <literal>render</literal> are introduced now, as systemd requires them.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>

View File

@ -137,6 +137,21 @@
make sure to update your configuration if you want to keep <literal>proglodyte-wasm</literal> make sure to update your configuration if you want to keep <literal>proglodyte-wasm</literal>
</para> </para>
</listitem> </listitem>
<listitem>
<para>
OpenSMTPD has been upgraded to version 6.4.0p1. This release makes
backwards-incompatible changes to the configuration file format. See
<command>man smtpd.conf</command> for more information on the new file
format.
</para>
</listitem>
<listitem>
<para>
The versioned <varname>postgresql</varname> have been renamed to use
underscore number seperators. For example, <varname>postgresql96</varname>
has been renamed to <varname>postgresql_9_6</varname>.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>
@ -155,6 +170,15 @@
Matomo version. Matomo version.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
The deprecated <literal>truecrypt</literal> package has been removed
and <literal>truecrypt</literal> attribute is now an alias for
<literal>veracrypt</literal>. VeraCrypt is backward-compatible with
TrueCrypt volumes. Note that <literal>cryptsetup</literal> also
supports loading TrueCrypt volumes.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>
</section> </section>

View File

@ -53,7 +53,8 @@ in rec {
inherit prefix check; inherit prefix check;
modules = modules ++ extraModules ++ baseModules ++ [ pkgsModule ]; modules = modules ++ extraModules ++ baseModules ++ [ pkgsModule ];
args = extraArgs; args = extraArgs;
specialArgs = { modulesPath = ../modules; } // specialArgs; specialArgs =
{ modulesPath = builtins.toString ../modules; } // specialArgs;
}) config options; }) config options;
# These are the extra arguments passed to every module. In # These are the extra arguments passed to every module. In

View File

@ -250,7 +250,8 @@ sub connect {
$self->start; $self->start;
local $SIG{ALRM} = sub { die "timed out waiting for the VM to connect\n"; }; local $SIG{ALRM} = sub { die "timed out waiting for the VM to connect\n"; };
alarm 300; # 50 minutes -- increased as a test, see #49441
alarm 3000;
readline $self->{socket} or die "the VM quit before connecting\n"; readline $self->{socket} or die "the VM quit before connecting\n";
alarm 0; alarm 0;

View File

@ -16,6 +16,13 @@ let
resolvconfOptions = cfg.resolvconfOptions resolvconfOptions = cfg.resolvconfOptions
++ optional cfg.dnsSingleRequest "single-request" ++ optional cfg.dnsSingleRequest "single-request"
++ optional cfg.dnsExtensionMechanism "edns0"; ++ optional cfg.dnsExtensionMechanism "edns0";
localhostMapped4 = cfg.hosts ? "127.0.0.1" && elem "localhost" cfg.hosts."127.0.0.1";
localhostMapped6 = cfg.hosts ? "::1" && elem "localhost" cfg.hosts."::1";
localhostMultiple = any (elem "localhost") (attrValues (removeAttrs cfg.hosts [ "127.0.0.1" "::1" ]));
in in
{ {
@ -23,8 +30,7 @@ in
options = { options = {
networking.hosts = lib.mkOption { networking.hosts = lib.mkOption {
type = types.attrsOf ( types.listOf types.str ); type = types.attrsOf (types.listOf types.str);
default = {};
example = literalExample '' example = literalExample ''
{ {
"127.0.0.1" = [ "foo.bar.baz" ]; "127.0.0.1" = [ "foo.bar.baz" ];
@ -192,6 +198,29 @@ in
config = { config = {
assertions = [{
assertion = localhostMapped4;
message = ''`networking.hosts` doesn't map "127.0.0.1" to "localhost"'';
} {
assertion = !cfg.enableIPv6 || localhostMapped6;
message = ''`networking.hosts` doesn't map "::1" to "localhost"'';
} {
assertion = !localhostMultiple;
message = ''
`networking.hosts` maps "localhost" to something other than "127.0.0.1"
or "::1". This will break some applications. Please use
`networking.extraHosts` if you really want to add such a mapping.
'';
}];
networking.hosts = {
"127.0.0.1" = [ "localhost" ];
} // optionalAttrs (cfg.hostName != "") {
"127.0.1.1" = [ cfg.hostName ];
} // optionalAttrs cfg.enableIPv6 {
"::1" = [ "localhost" ];
};
environment.etc = environment.etc =
{ # /etc/services: TCP/UDP port assignments. { # /etc/services: TCP/UDP port assignments.
"services".source = pkgs.iana-etc + "/etc/services"; "services".source = pkgs.iana-etc + "/etc/services";
@ -203,25 +232,13 @@ in
"rpc".source = pkgs.glibc.out + "/etc/rpc"; "rpc".source = pkgs.glibc.out + "/etc/rpc";
# /etc/hosts: Hostname-to-IP mappings. # /etc/hosts: Hostname-to-IP mappings.
"hosts".text = "hosts".text = let
let oneToString = set : ip : ip + " " + concatStringsSep " " ( getAttr ip set ); oneToString = set: ip: ip + " " + concatStringsSep " " set.${ip};
allToString = set : concatMapStringsSep "\n" ( oneToString set ) ( attrNames set ); allToString = set: concatMapStringsSep "\n" (oneToString set) (attrNames set);
userLocalHosts = optionalString in ''
( builtins.hasAttr "127.0.0.1" cfg.hosts ) ${allToString cfg.hosts}
( concatStringsSep " " ( remove "localhost" cfg.hosts."127.0.0.1" )); ${cfg.extraHosts}
userLocalHosts6 = optionalString '';
( builtins.hasAttr "::1" cfg.hosts )
( concatStringsSep " " ( remove "localhost" cfg.hosts."::1" ));
otherHosts = allToString ( removeAttrs cfg.hosts [ "127.0.0.1" "::1" ]);
in
''
127.0.0.1 ${userLocalHosts} localhost
${optionalString cfg.enableIPv6 ''
::1 ${userLocalHosts6} localhost
''}
${otherHosts}
${cfg.extraHosts}
'';
# /etc/host.conf: resolver configuration file # /etc/host.conf: resolver configuration file
"host.conf".text = cfg.hostConf; "host.conf".text = cfg.hostConf;
@ -296,4 +313,4 @@ in
}; };
} }

View File

@ -7,4 +7,6 @@
imports = imports =
[ ./installation-cd-base.nix [ ./installation-cd-base.nix
]; ];
fonts.fontconfig.enable = false;
} }

View File

@ -22,4 +22,42 @@ with lib;
powerManagement.enable = false; powerManagement.enable = false;
system.stateVersion = mkDefault "18.03"; system.stateVersion = mkDefault "18.03";
installer.cloneConfigExtra = ''
# Let demo build as a trusted user.
# nix.trustedUsers = [ "demo" ];
# Mount a VirtualBox shared folder.
# This is configurable in the VirtualBox menu at
# Machine / Settings / Shared Folders.
# fileSystems."/mnt" = {
# fsType = "vboxsf";
# device = "nameofdevicetomount";
# options = [ "rw" ];
# };
# By default, the NixOS VirtualBox demo image includes SDDM and Plasma.
# If you prefer another desktop manager or display manager, you may want
# to disable the default.
# services.xserver.desktopManager.plasma5.enable = lib.mkForce false;
# services.xserver.displayManager.sddm.enable = lib.mkForce false;
# Enable GDM/GNOME by uncommenting above two lines and two lines below.
# services.xserver.displayManager.gdm.enable = true;
# services.xserver.desktopManager.gnome3.enable = true;
# Set your time zone.
# time.timeZone = "Europe/Amsterdam";
# List packages installed in system profile. To search, run:
# \$ nix search wget
# environment.systemPackages = with pkgs; [
# wget vim
# ];
# Enable the OpenSSH daemon.
# services.openssh.enable = true;
system.stateVersion = mkDefault "18.03";
'';
} }

View File

@ -126,6 +126,7 @@
./programs/udevil.nix ./programs/udevil.nix
./programs/venus.nix ./programs/venus.nix
./programs/vim.nix ./programs/vim.nix
./programs/wavemon.nix
./programs/way-cooler.nix ./programs/way-cooler.nix
./programs/wireshark.nix ./programs/wireshark.nix
./programs/xfs_quota.nix ./programs/xfs_quota.nix

View File

@ -7,7 +7,7 @@
# Include some utilities that are useful for installing or repairing # Include some utilities that are useful for installing or repairing
# the system. # the system.
environment.systemPackages = [ environment.systemPackages = [
pkgs.w3m-nox # needed for the manual anyway pkgs.w3m-nographics # needed for the manual anyway
pkgs.testdisk # useful for repairing boot problems pkgs.testdisk # useful for repairing boot problems
pkgs.ms-sys # for writing Microsoft boot sectors / MBRs pkgs.ms-sys # for writing Microsoft boot sectors / MBRs
pkgs.efibootmgr pkgs.efibootmgr
@ -19,6 +19,9 @@
pkgs.cryptsetup # needed for dm-crypt volumes pkgs.cryptsetup # needed for dm-crypt volumes
pkgs.mkpasswd # for generating password files pkgs.mkpasswd # for generating password files
# Some text editors.
pkgs.vim
# Some networking tools. # Some networking tools.
pkgs.fuse pkgs.fuse
pkgs.fuse3 pkgs.fuse3

View File

@ -48,6 +48,8 @@ let
{ {
imports = [ ${toString config.installer.cloneConfigIncludes} ]; imports = [ ${toString config.installer.cloneConfigIncludes} ];
${config.installer.cloneConfigExtra}
} }
''; '';
@ -73,6 +75,13 @@ in
''; '';
}; };
installer.cloneConfigExtra = mkOption {
default = "";
description = ''
Extra text to include in the cloned configuration.nix included in this
installer.
'';
};
}; };
config = { config = {

View File

@ -63,7 +63,7 @@ with lib;
# Tell the Nix evaluator to garbage collect more aggressively. # Tell the Nix evaluator to garbage collect more aggressively.
# This is desirable in memory-constrained environments that don't # This is desirable in memory-constrained environments that don't
# (yet) have swap set up. # (yet) have swap set up.
environment.variables.GC_INITIAL_HEAP_SIZE = "100000"; environment.variables.GC_INITIAL_HEAP_SIZE = "1M";
# Make the installer more likely to succeed in low memory # Make the installer more likely to succeed in low memory
# environments. The kernel's overcommit heustistics bite us # environments. The kernel's overcommit heustistics bite us
@ -87,9 +87,6 @@ with lib;
# console less cumbersome if the machine has a public IP. # console less cumbersome if the machine has a public IP.
networking.firewall.logRefusedConnections = mkDefault false; networking.firewall.logRefusedConnections = mkDefault false;
environment.systemPackages = [ pkgs.vim ];
# Allow the user to log in as root without a password. # Allow the user to log in as root without a password.
users.users.root.initialHashedPassword = ""; users.users.root.initialHashedPassword = "";
}; };

View File

@ -0,0 +1,28 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.wavemon;
in {
options = {
programs.wavemon = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to add wavemon to the global environment and configure a
setcap wrapper for it.
'';
};
};
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ wavemon ];
security.wrappers.wavemon = {
source = "${pkgs.wavemon}/bin/wavemon";
capabilities = "cap_net_admin+ep";
};
};
}

View File

@ -20,7 +20,6 @@ with lib;
KERNEL=="random", TAG+="systemd" KERNEL=="random", TAG+="systemd"
SUBSYSTEM=="cpu", ENV{MODALIAS}=="cpu:type:x86,*feature:*009E*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="rngd.service" SUBSYSTEM=="cpu", ENV{MODALIAS}=="cpu:type:x86,*feature:*009E*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="rngd.service"
KERNEL=="hw_random", TAG+="systemd", ENV{SYSTEMD_WANTS}+="rngd.service" KERNEL=="hw_random", TAG+="systemd", ENV{SYSTEMD_WANTS}+="rngd.service"
${if config.services.tcsd.enable then "" else ''KERNEL=="tpm0", TAG+="systemd", ENV{SYSTEMD_WANTS}+="rngd.service"''}
''; '';
systemd.services.rngd = { systemd.services.rngd = {
@ -30,8 +29,7 @@ with lib;
description = "Hardware RNG Entropy Gatherer Daemon"; description = "Hardware RNG Entropy Gatherer Daemon";
serviceConfig.ExecStart = "${pkgs.rng-tools}/sbin/rngd -f -v" + serviceConfig.ExecStart = "${pkgs.rng-tools}/sbin/rngd -f -v";
(if config.services.tcsd.enable then " --no-tpm=1" else "");
}; };
}; };
} }

View File

@ -53,6 +53,9 @@ in
Type = "notify"; Type = "notify";
NotifyAccess = "all"; NotifyAccess = "all";
}; };
restartTriggers = [
config.environment.etc."salt/master".source
];
}; };
}; };

View File

@ -15,7 +15,6 @@ let
# Default is in /etc/salt/pki/minion # Default is in /etc/salt/pki/minion
pki_dir = "/var/lib/salt/pki/minion"; pki_dir = "/var/lib/salt/pki/minion";
} cfg.configuration; } cfg.configuration;
configDir = pkgs.writeTextDir "minion" (builtins.toJSON fullConfig);
in in
@ -36,7 +35,16 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ salt ]; environment = {
# Set this up in /etc/salt/minion so `salt-call`, etc. work.
# The alternatives are
# - passing --config-dir to all salt commands, not just the minion unit,
# - setting aglobal environment variable.
etc."salt/minion".source = pkgs.writeText "minion" (
builtins.toJSON fullConfig
);
systemPackages = with pkgs; [ salt ];
};
systemd.services.salt-minion = { systemd.services.salt-minion = {
description = "Salt Minion"; description = "Salt Minion";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
@ -45,11 +53,14 @@ in
utillinux utillinux
]; ];
serviceConfig = { serviceConfig = {
ExecStart = "${pkgs.salt}/bin/salt-minion --config-dir=${configDir}"; ExecStart = "${pkgs.salt}/bin/salt-minion";
LimitNOFILE = 8192; LimitNOFILE = 8192;
Type = "notify"; Type = "notify";
NotifyAccess = "all"; NotifyAccess = "all";
}; };
restartTriggers = [
config.environment.etc."salt/minion".source
];
}; };
}; };
} }

View File

@ -55,7 +55,7 @@ in
package = mkOption { package = mkOption {
type = types.package; type = types.package;
example = literalExample "pkgs.postgresql96"; example = literalExample "pkgs.postgresql_9_6";
description = '' description = ''
PostgreSQL package to use. PostgreSQL package to use.
''; '';
@ -118,7 +118,7 @@ in
extraPlugins = mkOption { extraPlugins = mkOption {
type = types.listOf types.path; type = types.listOf types.path;
default = []; default = [];
example = literalExample "[ (pkgs.postgis.override { postgresql = pkgs.postgresql94; }) ]"; example = literalExample "[ (pkgs.postgis.override { postgresql = pkgs.postgresql_9_4; }) ]";
description = '' description = ''
When this list contains elements a new store path is created. When this list contains elements a new store path is created.
PostgreSQL and the elements are symlinked into it. Then pg_config, PostgreSQL and the elements are symlinked into it. Then pg_config,
@ -167,9 +167,9 @@ in
# Note: when changing the default, make it conditional on # Note: when changing the default, make it conditional on
# system.stateVersion to maintain compatibility with existing # system.stateVersion to maintain compatibility with existing
# systems! # systems!
mkDefault (if versionAtLeast config.system.stateVersion "17.09" then pkgs.postgresql96 mkDefault (if versionAtLeast config.system.stateVersion "17.09" then pkgs.postgresql_9_6
else if versionAtLeast config.system.stateVersion "16.03" then pkgs.postgresql95 else if versionAtLeast config.system.stateVersion "16.03" then pkgs.postgresql_9_5
else pkgs.postgresql94); else pkgs.postgresql_9_4);
services.postgresql.dataDir = services.postgresql.dataDir =
mkDefault (if versionAtLeast config.system.stateVersion "17.09" then "/var/lib/postgresql/${config.services.postgresql.package.psqlSchema}" mkDefault (if versionAtLeast config.system.stateVersion "17.09" then "/var/lib/postgresql/${config.services.postgresql.package.psqlSchema}"

View File

@ -27,12 +27,12 @@
<filename>configuration.nix</filename>: <filename>configuration.nix</filename>:
<programlisting> <programlisting>
<xref linkend="opt-services.postgresql.enable"/> = true; <xref linkend="opt-services.postgresql.enable"/> = true;
<xref linkend="opt-services.postgresql.package"/> = pkgs.postgresql94; <xref linkend="opt-services.postgresql.package"/> = pkgs.postgresql_9_4;
</programlisting> </programlisting>
Note that you are required to specify the desired version of PostgreSQL Note that you are required to specify the desired version of PostgreSQL
(e.g. <literal>pkgs.postgresql94</literal>). Since upgrading your PostgreSQL (e.g. <literal>pkgs.postgresql_9_4</literal>). Since upgrading your
version requires a database dump and reload (see below), NixOS cannot PostgreSQL version requires a database dump and reload (see below), NixOS
provide a default value for cannot provide a default value for
<xref linkend="opt-services.postgresql.package"/> such as the most recent <xref linkend="opt-services.postgresql.package"/> such as the most recent
release of PostgreSQL. release of PostgreSQL.
</para> </para>

View File

@ -56,6 +56,32 @@ in
{ Type = "dbus"; { Type = "dbus";
BusName = "org.freedesktop.UPower"; BusName = "org.freedesktop.UPower";
ExecStart = "@${cfg.package}/libexec/upowerd upowerd"; ExecStart = "@${cfg.package}/libexec/upowerd upowerd";
Restart = "on-failure";
# Upstream lockdown:
# Filesystem lockdown
ProtectSystem = "strict";
# Needed by keyboard backlight support
ProtectKernelTunables = false;
ProtectControlGroups = true;
ReadWritePaths = "/var/lib/upower";
ProtectHome = true;
PrivateTmp = true;
# Network
# PrivateNetwork=true would block udev's netlink socket
RestrictAddressFamilies = "AF_UNIX AF_NETLINK";
# Execute Mappings
MemoryDenyWriteExecute = true;
# Modules
ProtectKernelModules = true;
# Real-time
RestrictRealtime = true;
# Privilege escalation
NoNewPrivileges = true;
}; };
}; };

View File

@ -33,7 +33,7 @@ let
purple_plugin_path = purple_plugin_path =
lib.concatMapStringsSep ":" lib.concatMapStringsSep ":"
(plugin: "${plugin}/lib/pidgin/") (plugin: "${plugin}/lib/pidgin/:${plugin}/lib/purple-2/")
cfg.libpurple_plugins cfg.libpurple_plugins
; ;

View File

@ -248,6 +248,14 @@ in {
</itemizedlist> </itemizedlist>
''; '';
ppk_id = mkOptionalStrParam ''
String identifying the Postquantum Preshared Key (PPK) to be used.
'';
ppk_required = mkYesNoParam no ''
Whether a Postquantum Preshared Key (PPK) is required for this connection.
'';
keyingtries = mkIntParam 1 '' keyingtries = mkIntParam 1 ''
Number of retransmission sequences to perform during initial Number of retransmission sequences to perform during initial
connect. Instead of giving up initiation after the first retransmission connect. Instead of giving up initiation after the first retransmission
@ -922,6 +930,36 @@ in {
<literal>0xffffffff</literal>. <literal>0xffffffff</literal>.
''; '';
set_mark_in = mkStrParam "0/0x00000000" ''
Netfilter mark applied to packets after the inbound IPsec SA processed
them. This way it's not necessary to mark packets via Netfilter before
decryption or right afterwards to match policies or process them
differently (e.g. via policy routing).
An additional mask may be appended to the mark, separated by
<literal>/</literal>. The default mask if omitted is 0xffffffff. The
special value <literal>%same</literal> uses the value (but not the mask)
from <option>mark_in</option> as mark value, which can be fixed,
<literal>%unique</literal> or <literal>%unique-dir</literal>.
Setting marks in XFRM input requires Linux 4.19 or higher.
'';
set_mark_out = mkStrParam "0/0x00000000" ''
Netfilter mark applied to packets after the outbound IPsec SA processed
them. This allows processing ESP packets differently than the original
traffic (e.g. via policy routing).
An additional mask may be appended to the mark, separated by
<literal>/</literal>. The default mask if omitted is 0xffffffff. The
special value <literal>%same</literal> uses the value (but not the mask)
from <option>mark_out</option> as mark value, which can be fixed,
<literal>%unique_</literal> or <literal>%unique-dir</literal>.
Setting marks in XFRM output is supported since Linux 4.14. Setting a
mask requires at least Linux 4.19.
'';
tfc_padding = mkParamOfType (with lib.types; either int (enum ["mtu"])) 0 '' tfc_padding = mkParamOfType (with lib.types; either int (enum ["mtu"])) 0 ''
Pads ESP packets with additional data to have a consistent ESP packet Pads ESP packets with additional data to have a consistent ESP packet
size for improved Traffic Flow Confidentiality. The padding defines the size for improved Traffic Flow Confidentiality. The padding defines the
@ -946,6 +984,33 @@ in {
supported, but the installation does not fail otherwise. supported, but the installation does not fail otherwise.
''; '';
copy_df = mkYesNoParam yes ''
Whether to copy the DF bit to the outer IPv4 header in tunnel mode. This
effectively disables Path MTU discovery (PMTUD). Controlling this
behavior is not supported by all kernel interfaces.
'';
copy_ecn = mkYesNoParam yes ''
Whether to copy the ECN (Explicit Congestion Notification) header field
to/from the outer IP header in tunnel mode. Controlling this behavior is
not supported by all kernel interfaces.
'';
copy_dscp = mkEnumParam [ "out" "in" "yes" "no" ] "out" ''
Whether to copy the DSCP (Differentiated Services Field Codepoint)
header field to/from the outer IP header in tunnel mode. The value
<literal>out</literal> only copies the field from the inner to the outer
header, the value <literal>in</literal> does the opposite and only
copies the field from the outer to the inner header when decapsulating,
the value <literal>yes</literal> copies the field in both directions,
and the value <literal>no</literal> disables copying the field
altogether. Setting this to <literal>yes</literal> or
<literal>in</literal> could allow an attacker to adversely affect other
traffic at the receiver, which is why the default is
<literal>out</literal>. Controlling this behavior is not supported by
all kernel interfaces.
'';
start_action = mkEnumParam ["none" "trap" "start"] "none" '' start_action = mkEnumParam ["none" "trap" "start"] "none" ''
Action to perform after loading the configuration. Action to perform after loading the configuration.
<itemizedlist> <itemizedlist>
@ -1060,6 +1125,24 @@ in {
defined in a unique section having the <literal>ike</literal> prefix. defined in a unique section having the <literal>ike</literal> prefix.
''; '';
ppk = mkPrefixedAttrsOfParams {
secret = mkOptionalStrParam ''
Value of the PPK. It may either be an ASCII string, a hex encoded string
if it has a <literal>0x</literal> prefix or a Base64 encoded string if
it has a <literal>0s</literal> prefix in its value. Should have at least
256 bits of entropy for 128-bit security.
'';
id = mkPrefixedAttrsOfParam (mkOptionalStrParam "") ''
PPK identity the PPK belongs to. Multiple unique identities may be
specified, each having an <literal>id</literal> prefix, if a secret is
shared between multiple peers.
'';
} ''
Postquantum Preshared Key (PPK) section for a specific secret. Each PPK is
defined in a unique section having the <literal>ppk</literal> prefix.
'';
private = mkPrefixedAttrsOfParams { private = mkPrefixedAttrsOfParams {
file = mkOptionalStrParam '' file = mkOptionalStrParam ''
File name in the private folder for which this passphrase should be used. File name in the private folder for which this passphrase should be used.

View File

@ -46,7 +46,7 @@ let
configFile = pkgs.writeText "nginx.conf" '' configFile = pkgs.writeText "nginx.conf" ''
user ${cfg.user} ${cfg.group}; user ${cfg.user} ${cfg.group};
error_log stderr; error_log ${cfg.logError};
daemon off; daemon off;
${cfg.config} ${cfg.config}
@ -341,6 +341,35 @@ in
"; ";
}; };
logError = mkOption {
default = "stderr";
description = "
Configures logging.
The first parameter defines a file that will store the log. The
special value stderr selects the standard error file. Logging to
syslog can be configured by specifying the syslog: prefix.
The second parameter determines the level of logging, and can be
one of the following: debug, info, notice, warn, error, crit,
alert, or emerg. Log levels above are listed in the order of
increasing severity. Setting a certain log level will cause all
messages of the specified and more severe log levels to be logged.
If this parameter is omitted then error is used.
";
};
preStart = mkOption {
type = types.lines;
default = ''
test -d ${cfg.stateDir}/logs || mkdir -m 750 -p ${cfg.stateDir}/logs
test `stat -c %a ${cfg.stateDir}` = "750" || chmod 750 ${cfg.stateDir}
test `stat -c %a ${cfg.stateDir}/logs` = "750" || chmod 750 ${cfg.stateDir}/logs
chown -R ${cfg.user}:${cfg.group} ${cfg.stateDir}
'';
description = "
Shell commands executed before the service's nginx is started.
";
};
config = mkOption { config = mkOption {
default = ""; default = "";
description = " description = "
@ -608,9 +637,7 @@ in
stopIfChanged = false; stopIfChanged = false;
preStart = preStart =
'' ''
mkdir -p ${cfg.stateDir}/logs ${cfg.preStart}
chmod 700 ${cfg.stateDir}
chown -R ${cfg.user}:${cfg.group} ${cfg.stateDir}
${cfg.package}/bin/nginx -c ${configFile} -p ${cfg.stateDir} -t ${cfg.package}/bin/nginx -c ${configFile} -p ${cfg.stateDir} -t
''; '';
serviceConfig = { serviceConfig = {

View File

@ -387,7 +387,7 @@ let
logindHandlerType = types.enum [ logindHandlerType = types.enum [
"ignore" "poweroff" "reboot" "halt" "kexec" "suspend" "ignore" "poweroff" "reboot" "halt" "kexec" "suspend"
"hibernate" "hybrid-sleep" "lock" "hibernate" "hybrid-sleep" "suspend-then-hibernate" "lock"
]; ];
in in
@ -587,6 +587,15 @@ in
''; '';
}; };
services.journald.forwardToSyslog = mkOption {
default = config.services.rsyslogd.enable || config.services.syslog-ng.enable;
defaultText = "config.services.rsyslogd.enable || config.services.syslog-ng.enable";
type = types.bool;
description = ''
Whether to forward log messages to syslog.
'';
};
services.logind.extraConfig = mkOption { services.logind.extraConfig = mkOption {
default = ""; default = "";
type = types.lines; type = types.lines;
@ -754,6 +763,9 @@ in
ForwardToConsole=yes ForwardToConsole=yes
TTYPath=${config.services.journald.console} TTYPath=${config.services.journald.console}
''} ''}
${optionalString (config.services.journald.forwardToSyslog) ''
ForwardToSyslog=yes
''}
${config.services.journald.extraConfig} ${config.services.journald.extraConfig}
''; '';

View File

@ -606,7 +606,7 @@ in
{ config = { config =
{ config, pkgs, ... }: { config, pkgs, ... }:
{ services.postgresql.enable = true; { services.postgresql.enable = true;
services.postgresql.package = pkgs.postgresql96; services.postgresql.package = pkgs.postgresql_9_6;
system.stateVersion = "17.03"; system.stateVersion = "17.03";
}; };

View File

@ -12,7 +12,7 @@ in {
virtualbox = { virtualbox = {
baseImageSize = mkOption { baseImageSize = mkOption {
type = types.int; type = types.int;
default = 10 * 1024; default = 50 * 1024;
description = '' description = ''
The size of the VirtualBox base image in MiB. The size of the VirtualBox base image in MiB.
''; '';
@ -61,7 +61,7 @@ in {
export HOME=$PWD export HOME=$PWD
export PATH=${pkgs.virtualbox}/bin:$PATH export PATH=${pkgs.virtualbox}/bin:$PATH
echo "creating VirtualBox pass-through disk wrapper (no copying invovled)..." echo "creating VirtualBox pass-through disk wrapper (no copying involved)..."
VBoxManage internalcommands createrawvmdk -filename disk.vmdk -rawdisk $diskImage VBoxManage internalcommands createrawvmdk -filename disk.vmdk -rawdisk $diskImage
echo "creating VirtualBox VM..." echo "creating VirtualBox VM..."
@ -72,9 +72,9 @@ in {
--memory ${toString cfg.memorySize} --acpi on --vram 32 \ --memory ${toString cfg.memorySize} --acpi on --vram 32 \
${optionalString (pkgs.stdenv.hostPlatform.system == "i686-linux") "--pae on"} \ ${optionalString (pkgs.stdenv.hostPlatform.system == "i686-linux") "--pae on"} \
--nictype1 virtio --nic1 nat \ --nictype1 virtio --nic1 nat \
--audiocontroller ac97 --audio alsa \ --audiocontroller ac97 --audio alsa --audioout on \
--rtcuseutc on \ --rtcuseutc on \
--usb on --mouse usbtablet --usb on --usbehci on --mouse usbtablet
VBoxManage storagectl "$vmName" --name SATA --add sata --portcount 4 --bootable on --hostiocache on VBoxManage storagectl "$vmName" --name SATA --add sata --portcount 4 --bootable on --hostiocache on
VBoxManage storageattach "$vmName" --storagectl SATA --port 0 --device 0 --type hdd \ VBoxManage storageattach "$vmName" --storagectl SATA --port 0 --device 0 --type hdd \
--medium disk.vmdk --medium disk.vmdk
@ -82,7 +82,7 @@ in {
echo "exporting VirtualBox VM..." echo "exporting VirtualBox VM..."
mkdir -p $out mkdir -p $out
fn="$out/${cfg.vmFileName}" fn="$out/${cfg.vmFileName}"
VBoxManage export "$vmName" --output "$fn" VBoxManage export "$vmName" --output "$fn" --options manifest
rm -v $diskImage rm -v $diskImage

View File

@ -399,6 +399,7 @@ in rec {
tests.radicale = callTest tests/radicale.nix {}; tests.radicale = callTest tests/radicale.nix {};
tests.redmine = callTest tests/redmine.nix {}; tests.redmine = callTest tests/redmine.nix {};
tests.rspamd = callSubTests tests/rspamd.nix {}; tests.rspamd = callSubTests tests/rspamd.nix {};
tests.rsyslogd = callSubTests tests/rsyslogd.nix {};
tests.runInMachine = callTest tests/run-in-machine.nix {}; tests.runInMachine = callTest tests/run-in-machine.nix {};
tests.rxe = callTest tests/rxe.nix {}; tests.rxe = callTest tests/rxe.nix {};
tests.samba = callTest tests/samba.nix {}; tests.samba = callTest tests/samba.nix {};
@ -467,7 +468,7 @@ in rec {
{ services.httpd.enable = true; { services.httpd.enable = true;
services.httpd.adminAddr = "foo@example.org"; services.httpd.adminAddr = "foo@example.org";
services.postgresql.enable = true; services.postgresql.enable = true;
services.postgresql.package = pkgs.postgresql93; services.postgresql.package = pkgs.postgresql_9_3;
environment.systemPackages = [ pkgs.php ]; environment.systemPackages = [ pkgs.php ];
}); });
}; };

View File

@ -74,7 +74,6 @@ in {
print "$log\n"; print "$log\n";
# Check that no errors were logged # Check that no errors were logged
# The timer can get out of sync due to Hydra's load, so this error is ignored $hass->fail("cat ${configDir}/home-assistant.log | grep -qF ERROR");
$hass->fail("cat ${configDir}/home-assistant.log | grep -vF 'Timer got out of sync' | grep -qF ERROR");
''; '';
}) })

View File

@ -17,11 +17,12 @@ import ./make-test.nix {
extraServerArgs = [ "-v" ]; extraServerArgs = [ "-v" ];
serverConfiguration = '' serverConfiguration = ''
listen on 0.0.0.0 listen on 0.0.0.0
action do_relay relay
# DO NOT DO THIS IN PRODUCTION! # DO NOT DO THIS IN PRODUCTION!
# Setting up authentication requires a certificate which is painful in # Setting up authentication requires a certificate which is painful in
# a test environment, but THIS WOULD BE DANGEROUS OUTSIDE OF A # a test environment, but THIS WOULD BE DANGEROUS OUTSIDE OF A
# WELL-CONTROLLED ENVIRONMENT! # WELL-CONTROLLED ENVIRONMENT!
accept from any for any relay match from any for any action do_relay
''; '';
}; };
}; };
@ -41,8 +42,9 @@ import ./make-test.nix {
extraServerArgs = [ "-v" ]; extraServerArgs = [ "-v" ];
serverConfiguration = '' serverConfiguration = ''
listen on 0.0.0.0 listen on 0.0.0.0
accept from any for local deliver to mda \ action dovecot_deliver mda \
"${pkgs.dovecot}/libexec/dovecot/deliver -d %{user.username}" "${pkgs.dovecot}/libexec/dovecot/deliver -d %{user.username}"
match from any for local action dovecot_deliver
''; '';
}; };
services.dovecot2 = { services.dovecot2 = {

View File

@ -26,31 +26,20 @@ import ./make-test.nix ({ pkgs, ...} :
services.xserver.displayManager.sddm.theme = "breeze-ocr-theme"; services.xserver.displayManager.sddm.theme = "breeze-ocr-theme";
services.xserver.desktopManager.plasma5.enable = true; services.xserver.desktopManager.plasma5.enable = true;
services.xserver.desktopManager.default = "plasma5"; services.xserver.desktopManager.default = "plasma5";
services.xserver.displayManager.sddm.autoLogin = {
enable = true;
user = "alice";
};
virtualisation.memorySize = 1024; virtualisation.memorySize = 1024;
environment.systemPackages = [ sddm_theme ]; environment.systemPackages = [ sddm_theme ];
# fontconfig-penultimate-0.3.3 -> 0.3.4 broke OCR apparently, but no idea why.
nixpkgs.config.packageOverrides = superPkgs: {
fontconfig-penultimate = superPkgs.fontconfig-penultimate.override {
version = "0.3.3";
sha256 = "1z76jbkb0nhf4w7fy647yyayqr4q02fgk6w58k0yi700p0m3h4c9";
};
};
}; };
enableOCR = true;
testScript = { nodes, ... }: let testScript = { nodes, ... }: let
user = nodes.machine.config.users.users.alice; user = nodes.machine.config.users.users.alice;
xdo = "${pkgs.xdotool}/bin/xdotool"; xdo = "${pkgs.xdotool}/bin/xdotool";
in '' in ''
startAll; startAll;
# Wait for display manager to start # wait for log in
$machine->waitForText(qr/${user.description}/);
$machine->screenshot("sddm");
# Log in
$machine->sendChars("${user.password}\n");
$machine->waitForFile("/home/alice/.Xauthority"); $machine->waitForFile("/home/alice/.Xauthority");
$machine->succeed("xauth merge ~alice/.Xauthority"); $machine->succeed("xauth merge ~alice/.Xauthority");

View File

@ -9,7 +9,7 @@ import ./make-test.nix ({ pkgs, ...} : {
{ pkgs, ... }: { pkgs, ... }:
{ {
services.postgresql = let mypg = pkgs.postgresql100; in { services.postgresql = let mypg = pkgs.postgresql_11; in {
enable = true; enable = true;
package = mypg; package = mypg;
extraPlugins = [ (pkgs.postgis.override { postgresql = mypg; }) ]; extraPlugins = [ (pkgs.postgis.override { postgresql = mypg; }) ];

38
nixos/tests/rsyslogd.nix Normal file
View File

@ -0,0 +1,38 @@
{ system ? builtins.currentSystem }:
with import ../lib/testing.nix { inherit system; };
with pkgs.lib;
{
test1 = makeTest {
name = "rsyslogd-test1";
meta.maintainers = [ maintainers.aanderse ];
machine =
{ config, pkgs, ... }:
{ services.rsyslogd.enable = true;
services.journald.forwardToSyslog = false;
};
# ensure rsyslogd isn't receiving messages from journald if explicitly disabled
testScript = ''
$machine->waitForUnit("default.target");
$machine->fail("test -f /var/log/messages");
'';
};
test2 = makeTest {
name = "rsyslogd-test2";
meta.maintainers = [ maintainers.aanderse ];
machine =
{ config, pkgs, ... }:
{ services.rsyslogd.enable = true;
};
# ensure rsyslogd is receiving messages from journald
testScript = ''
$machine->waitForUnit("default.target");
$machine->succeed("test -f /var/log/messages");
'';
};
}

View File

@ -90,5 +90,5 @@ rec {
parity-beta = callPackage ./parity/beta.nix { }; parity-beta = callPackage ./parity/beta.nix { };
parity-ui = callPackage ./parity-ui { }; parity-ui = callPackage ./parity-ui { };
particl-core = callPackage ./particl/particl-core.nix { boost = boost165; miniupnpc = miniupnpc_2; }; particl-core = callPackage ./particl/particl-core.nix { miniupnpc = miniupnpc_2; };
} }

View File

@ -11,13 +11,13 @@ with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "litecoin" + (toString (optional (!withGui) "d")) + "-" + version; name = "litecoin" + (toString (optional (!withGui) "d")) + "-" + version;
version = "0.16.2"; version = "0.16.3";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "litecoin-project"; owner = "litecoin-project";
repo = "litecoin"; repo = "litecoin";
rev = "v${version}"; rev = "v${version}";
sha256 = "0xfwh7cxxz6w8kgr4kl48w3zm81n1hv8fxb5l9zx3460im1ffgy6"; sha256 = "0vc184qfdkjky1qffa7309k6973k4197bkzwcmffc9r5sdfhrhkp";
}; };
nativeBuildInputs = [ pkgconfig autoreconfHook ]; nativeBuildInputs = [ pkgconfig autoreconfHook ];

View File

@ -10,31 +10,40 @@
, zeromq , zeromq
, zlib , zlib
, unixtools , unixtools
, python3
}: }:
with stdenv.lib; with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "particl-core-${version}"; name = "particl-core-${version}";
version = "0.16.2.0"; version = "0.17.0.2";
src = fetchurl { src = fetchurl {
url = "https://github.com/particl/particl-core/archive/v${version}.tar.gz"; url = "https://github.com/particl/particl-core/archive/v${version}.tar.gz";
sha256 = "1d2vvg7avlhsg0rcpd5pbzafnk1w51a2y29xjjkpafi6iqs2l617"; sha256 = "0bkxdayl0jrfhgz8qzqqpwzv0yavz3nwsn6c8k003jnbcw65fkhx";
}; };
nativeBuildInputs = [ pkgconfig autoreconfHook ]; nativeBuildInputs = [ pkgconfig autoreconfHook ];
buildInputs = [ buildInputs = [ openssl db48 boost zlib miniupnpc libevent zeromq unixtools.hexdump python3 ];
openssl db48 boost zlib miniupnpc libevent zeromq
unixtools.hexdump configureFlags = [
"--disable-bench"
"--with-boost-libdir=${boost.out}/lib"
] ++ optionals (!doCheck) [
"--enable-tests=no"
]; ];
configureFlags = [ "--with-boost-libdir=${boost.out}/lib" ]; # Always check during Hydra builds
doCheck = true;
preCheck = "patchShebangs test";
enableParallelBuilding = true;
meta = { meta = {
description = "Privacy-Focused Marketplace & Decentralized Application Platform"; description = "Privacy-Focused Marketplace & Decentralized Application Platform";
longDescription= '' longDescription= ''
An open source, decentralized privacy platform built for global person to person eCommerce. An open source, decentralized privacy platform built for global person to person eCommerce.
RPC daemon and CLI client only.
''; '';
homepage = https://particl.io/; homepage = https://particl.io/;
maintainers = with maintainers; [ demyanrogozhin ]; maintainers = with maintainers; [ demyanrogozhin ];

View File

@ -1,5 +1,6 @@
{ stdenv, fetchFromGitHub, fetchurl, makeWrapper, unzip { stdenv, fetchFromGitHub, fetchurl, makeWrapper, unzip
, gnumake, gcc-arm-embedded, dfu-util-axoloti, jdk, ant, libfaketime }: , gnumake, gcc-arm-embedded, binutils-arm-embedded
, dfu-util-axoloti, jdk, ant, libfaketime }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "1.0.12-2"; version = "1.0.12-2";
@ -20,7 +21,15 @@ stdenv.mkDerivation rec {
sha256 = "0lb5s8pkj80mqhsy47mmq0lqk34s2a2m3xagzihalvabwd0frhlj"; sha256 = "0lb5s8pkj80mqhsy47mmq0lqk34s2a2m3xagzihalvabwd0frhlj";
}; };
buildInputs = [ makeWrapper unzip gcc-arm-embedded dfu-util-axoloti jdk ant libfaketime ]; nativeBuildInputs = [
makeWrapper
unzip
gcc-arm-embedded
binutils-arm-embedded
dfu-util-axoloti
ant
];
buildInputs = [jdk libfaketime ];
patchPhase = '' patchPhase = ''
unzip ${chibios} unzip ${chibios}

View File

@ -18,9 +18,9 @@ let
sha256Hash = "0bg1h0msd6mpkvirkg4pssa1ak32smv2rlxxsjdm3p29p8gg59px"; sha256Hash = "0bg1h0msd6mpkvirkg4pssa1ak32smv2rlxxsjdm3p29p8gg59px";
}; };
latestVersion = { # canary & dev latestVersion = { # canary & dev
version = "3.4.0.0"; # "Android Studio 3.4 Canary 1" version = "3.4.0.1"; # "Android Studio 3.4 Canary 2"
build = "182.5070326"; build = "183.5081642";
sha256Hash = "03h2yns8s9dqbbc9agxhidpmziy9g3z89nm3byydw43hdz54hxab"; sha256Hash = "0ck6habkgnwbr10pr3bfy8ywm3dsm21k9jdj7g685v22sw0zy3yk";
}; };
in rec { in rec {
# Old alias # Old alias

View File

@ -289,12 +289,12 @@ in
idea-community = buildIdea rec { idea-community = buildIdea rec {
name = "idea-community-${version}"; name = "idea-community-${version}";
version = "2018.2.4"; /* updated by script */ version = "2018.2.5"; /* updated by script */
description = "Integrated Development Environment (IDE) by Jetbrains, community edition"; description = "Integrated Development Environment (IDE) by Jetbrains, community edition";
license = stdenv.lib.licenses.asl20; license = stdenv.lib.licenses.asl20;
src = fetchurl { src = fetchurl {
url = "https://download.jetbrains.com/idea/ideaIC-${version}.tar.gz"; url = "https://download.jetbrains.com/idea/ideaIC-${version}.tar.gz";
sha256 = "1syrxkp4pk95bvx02g2hg0mvn36w098h82k0qv0j6aqv0sidfzjy"; /* updated by script */ sha256 = "0jnnmhn1gba670q2yprlh3ypa6k21pbg91pshz9aqkdhhmzk4759"; /* updated by script */
}; };
wmClass = "jetbrains-idea-ce"; wmClass = "jetbrains-idea-ce";
update-channel = "IntelliJ IDEA Release"; update-channel = "IntelliJ IDEA Release";
@ -302,12 +302,12 @@ in
idea-ultimate = buildIdea rec { idea-ultimate = buildIdea rec {
name = "idea-ultimate-${version}"; name = "idea-ultimate-${version}";
version = "2018.2.4"; /* updated by script */ version = "2018.2.5"; /* updated by script */
description = "Integrated Development Environment (IDE) by Jetbrains, requires paid license"; description = "Integrated Development Environment (IDE) by Jetbrains, requires paid license";
license = stdenv.lib.licenses.unfree; license = stdenv.lib.licenses.unfree;
src = fetchurl { src = fetchurl {
url = "https://download.jetbrains.com/idea/ideaIU-${version}-no-jdk.tar.gz"; url = "https://download.jetbrains.com/idea/ideaIU-${version}-no-jdk.tar.gz";
sha256 = "0z1ga6lzmkn7y7y24984vmp3ilrfc1ak1ddcgsdkwkiq5bx67ck8"; /* updated by script */ sha256 = "105mzbqm3bx05bmkwyfykz76bzgzzgb9hb6wcagb9fv7dvqyggg6"; /* updated by script */
}; };
wmClass = "jetbrains-idea"; wmClass = "jetbrains-idea";
update-channel = "IntelliJ IDEA Release"; update-channel = "IntelliJ IDEA Release";

View File

@ -6,7 +6,7 @@
let let
verMajor = "1"; verMajor = "1";
verMinor = "1"; verMinor = "1";
verPatch = "456"; verPatch = "463";
version = "${verMajor}.${verMinor}.${verPatch}"; version = "${verMajor}.${verMinor}.${verPatch}";
ginVer = "1.5"; ginVer = "1.5";
gwtVer = "2.7.0"; gwtVer = "2.7.0";
@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
owner = "rstudio"; owner = "rstudio";
repo = "rstudio"; repo = "rstudio";
rev = "v${version}"; rev = "v${version}";
sha256 = "0hv07qrbjwapbjrkddasglsgk0x5j7qal468i5rv77krsp09s4fz"; sha256 = "014g984znsczzy1fyn9y1ly3rbsngryfs674lfgciz60mqnl8im6";
}; };
# Hack RStudio to only use the input R. # Hack RStudio to only use the input R.

View File

@ -4,13 +4,13 @@ with python3.pkgs;
buildPythonApplication rec { buildPythonApplication rec {
pname = "thonny"; pname = "thonny";
version = "3.0.1"; version = "3.0.5";
src = fetchFromBitbucket { src = fetchFromBitbucket {
owner = "plas"; owner = "plas";
repo = pname; repo = pname;
rev = "f66bd266deda11534561a01ede53cf1b71d2c3c0"; rev = "e5a1ad4ae9d24066a769489b1e168b4bd6e00b03";
sha256 = "0mjskb0gyddybvlbhm10ch1rwzvmci95b018x67bh67bybdl4hm7"; sha256 = "1lrl5pj9dpw9i5ij863hd47gfd15nmvglqkl2ldwgfn7kgpsdkz5";
}; };
propagatedBuildInputs = with python3.pkgs; [ propagatedBuildInputs = with python3.pkgs; [

View File

@ -4,7 +4,7 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "OpenOrienteering-Mapper-${version}"; name = "OpenOrienteering-Mapper-${version}";
version = "0.8.2"; version = "0.8.3";
buildInputs = [ gdal qtbase qttools qtlocation qtimageformats buildInputs = [ gdal qtbase qttools qtlocation qtimageformats
qtsensors clipper zlib proj doxygen cups]; qtsensors clipper zlib proj doxygen cups];
@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
owner = "OpenOrienteering"; owner = "OpenOrienteering";
repo = "mapper"; repo = "mapper";
rev = "v${version}"; rev = "v${version}";
sha256 = "02lga6nlal4c7898zc3lv1pcwyv1wpkn7v2xji2kgq68r6aw6j59"; sha256 = "0pnqwvmg97mgc2ci3abmx07l0njxcrbljh75w8ym31g0jq76pgr9";
}; };
cmakeFlags = cmakeFlags =

View File

@ -13,8 +13,8 @@ let
else throw "ImageMagick is not supported on this platform."; else throw "ImageMagick is not supported on this platform.";
cfg = { cfg = {
version = "7.0.8-12"; version = "7.0.8-14";
sha256 = "0rq7qhbfsxvclazi1l6kqi4wqsph7hmzcjbh2pmf0276mrkgm7cd"; sha256 = "0pbrmzsjc8l4klfsz739rnmw61m712r82ryjl8ycvbxdzxwnwm9v";
patches = []; patches = [];
}; };
in in

View File

@ -8,13 +8,13 @@ assert useUnrar -> unrar != null;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "ahoviewer-${version}"; name = "ahoviewer-${version}";
version = "1.5.0"; version = "1.6.4";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "ahodesuka"; owner = "ahodesuka";
repo = "ahoviewer"; repo = "ahoviewer";
rev = version; rev = version;
sha256 = "1adzxp30fwh41y339ha8i5qp89zf21dw18vcicqqnzvyxbk5r3ig"; sha256 = "144jmk8w7dnmqy4w81b3kzama7i97chx16pgax2facn72a92921q";
}; };
enableParallelBuilding = true; enableParallelBuilding = true;
@ -29,11 +29,6 @@ stdenv.mkDerivation rec {
gst_all_1.gst-plugins-base gst_all_1.gst-plugins-base
] ++ stdenv.lib.optional useUnrar unrar; ] ++ stdenv.lib.optional useUnrar unrar;
# https://github.com/ahodesuka/ahoviewer/issues/60
# Already fixed in the master branch
# TODO: remove this next release
makeFlags = [ ''LIBS=-lssl -lcrypto'' ];
postPatch = ''patchShebangs version.sh''; postPatch = ''patchShebangs version.sh'';
postInstall = '' postInstall = ''

View File

@ -1,23 +1,24 @@
{ stdenv, makeDesktopItem, fetchurl, unzip { stdenv, makeDesktopItem, fetchurl, unzip
, gdk_pixbuf, glib, gtk2, atk, pango, cairo, freetype, fontconfig, dbus, nss, nspr, alsaLib, cups, expat, udev, gnome2 , gdk_pixbuf, glib, gtk3, atk, at-spi2-atk, pango, cairo, freetype, fontconfig, dbus, nss, nspr, alsaLib, cups, expat, udev, gnome3
, xorg, mozjpeg , xorg, mozjpeg, makeWrapper, gsettings-desktop-schemas
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "avocode-${version}"; name = "avocode-${version}";
version = "3.4.0"; version = "3.6.2";
src = fetchurl { src = fetchurl {
url = "https://media.avocode.com/download/avocode-app/${version}/avocode-${version}-linux.zip"; url = "https://media.avocode.com/download/avocode-app/${version}/avocode-${version}-linux.zip";
sha256 = "1dk4vgam9r5nl8dvpfwrn52gq6r4zxs4zz63p3c4gk73d8qnh4dl"; sha256 = "1slxxr3j0djqdnbk645sriwl99jp9imndyxiwd8aqggmmlp145a2";
}; };
libPath = stdenv.lib.makeLibraryPath (with xorg; with gnome2; [ libPath = stdenv.lib.makeLibraryPath (with xorg; with gnome3; [
stdenv.cc.cc.lib stdenv.cc.cc.lib
gdk_pixbuf gdk_pixbuf
glib glib
gtk2 gtk3
atk atk
at-spi2-atk
pango pango
cairo cairo
freetype freetype
@ -29,7 +30,6 @@ stdenv.mkDerivation rec {
cups cups
expat expat
udev udev
GConf
libX11 libX11
libxcb libxcb
libXi libXi
@ -54,7 +54,8 @@ stdenv.mkDerivation rec {
comment = "The bridge between designers and developers"; comment = "The bridge between designers and developers";
}; };
buildInputs = [ unzip ]; nativeBuildInputs = [makeWrapper];
buildInputs = [ unzip gtk3 gsettings-desktop-schemas];
# src is producing multiple folder on unzip so we must # src is producing multiple folder on unzip so we must
# override unpackCmd to extract it into newly created folder # override unpackCmd to extract it into newly created folder
@ -85,6 +86,10 @@ stdenv.mkDerivation rec {
for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* \) ); do for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* \) ); do
patchelf --set-rpath ${libPath}:$out/ $file patchelf --set-rpath ${libPath}:$out/ $file
done done
for file in $out/bin/*; do
wrapProgram $file \
--prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:${gtk3.out}/share:${gsettings-desktop-schemas}/share:$out/share:$GSETTINGS_SCHEMAS_PATH"
done
''; '';
enableParallelBuilding = true; enableParallelBuilding = true;

View File

@ -10,11 +10,11 @@
mkDerivation rec { mkDerivation rec {
name = "krita-${version}"; name = "krita-${version}";
version = "4.1.3"; version = "4.1.5";
src = fetchurl { src = fetchurl {
url = "https://download.kde.org/stable/krita/${version}/${name}.tar.gz"; url = "https://download.kde.org/stable/krita/${version}/${name}.tar.gz";
sha256 = "0d546dxs552z0pxnaka1jm7ksravw17f777wf593z0pl4ds8dgdx"; sha256 = "1by8p8ifdp03f05bhg8ygdd1j036anfpjjnzbx63l2fbmy9k6q10";
}; };
nativeBuildInputs = [ cmake extra-cmake-modules ]; nativeBuildInputs = [ cmake extra-cmake-modules ];

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, unzip, mono, avrbinutils, avrgcc, avrdude, gtk2, xdg_utils }: { stdenv, fetchurl, unzip, mono, avrdude, gtk2, xdg_utils }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "avrdudess-2.2.20140102"; name = "avrdudess-2.2.20140102";
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
export LD_LIBRARY_PATH="${stdenv.lib.makeLibraryPath [gtk2 mono]}" export LD_LIBRARY_PATH="${stdenv.lib.makeLibraryPath [gtk2 mono]}"
# We need PATH from user env for xdg-open to find its tools, which # We need PATH from user env for xdg-open to find its tools, which
# typically depend on the currently running desktop environment. # typically depend on the currently running desktop environment.
export PATH="${stdenv.lib.makeBinPath [ avrgcc avrbinutils avrdude xdg_utils ]}:\$PATH" export PATH="${stdenv.lib.makeBinPath [ avrdude xdg_utils ]}:\$PATH"
# avrdudess must have its resource files in its current working directory # avrdudess must have its resource files in its current working directory
cd $out/avrdudess && exec ${mono}/bin/mono "$out/avrdudess/avrdudess.exe" "\$@" cd $out/avrdudess && exec ${mono}/bin/mono "$out/avrdudess/avrdudess.exe" "\$@"

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, aalib, ncurses, xorg, libmikmod }: { stdenv, lib, fetchurl, darwin, aalib, ncurses, xorg, libmikmod }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "bb-${version}"; name = "bb-${version}";
@ -12,13 +12,17 @@ stdenv.mkDerivation rec {
buildInputs = [ buildInputs = [
aalib ncurses libmikmod aalib ncurses libmikmod
xorg.libXau xorg.libXdmcp xorg.libX11 xorg.libXau xorg.libXdmcp xorg.libX11
]; ] ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.CoreAudio;
meta = with stdenv.lib; { postPatch = lib.optionalString stdenv.isDarwin ''
sed -i -e '/^#include <malloc.h>$/d' *.c
'';
meta = with lib; {
homepage = http://aa-project.sourceforge.net/bb; homepage = http://aa-project.sourceforge.net/bb;
description = "AA-lib demo"; description = "AA-lib demo";
license = licenses.gpl2; license = licenses.gpl2;
maintainers = [ maintainers.rnhmjoj ]; maintainers = [ maintainers.rnhmjoj ];
platforms = platforms.linux; platforms = platforms.unix;
}; };
} }

View File

@ -3,13 +3,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "dmrconfig-${version}"; name = "dmrconfig-${version}";
version = "2018-10-20"; version = "2018-10-29";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "sergev"; owner = "sergev";
repo = "dmrconfig"; repo = "dmrconfig";
rev = "a4c5f893d2749727493427320c7f01768966ba51"; rev = "4924d00283c3c81a4b8251669e42aecd96b6145a";
sha256 = "0h7hv6fv6v5g922nvgrb0w7hsqbhaw7xmdc6vydh2p3l7sp31vg2"; sha256 = "00a4hmbr71g0d4faskb8q96y6z212g2r4n533yvp88z8rq8vbxxn";
}; };
buildInputs = [ buildInputs = [

View File

@ -18,7 +18,7 @@ python3Packages.buildPythonApplication rec {
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 = "022iw4cq0c009wvqn7wd815jc0nv8198lq3cawn8h6c28hw2mhs1"; sha256 = "139kzapas1l61w1in9f7c6ybricid4fzryfnvsrfhpaqh83ydn2c";
}; };
propagatedBuildInputs = with python3Packages; [ propagatedBuildInputs = with python3Packages; [

View File

@ -2,7 +2,7 @@
buildGoPackage rec { buildGoPackage rec {
name = "hugo-${version}"; name = "hugo-${version}";
version = "0.47.1"; version = "0.49.2";
goPackagePath = "github.com/gohugoio/hugo"; goPackagePath = "github.com/gohugoio/hugo";
@ -10,7 +10,7 @@ buildGoPackage rec {
owner = "gohugoio"; owner = "gohugoio";
repo = "hugo"; repo = "hugo";
rev = "v${version}"; rev = "v${version}";
sha256 = "0n27vyg66jfx4lwswsmdlybly8c9gy5rk7yhy7wzs3rwzlqv1jzj"; sha256 = "0a320mv6x770vppbz0aw5ikywmy0mxqq1lhc0syp48hgg42d46is";
}; };
patches = [ patches = [

View File

@ -1,488 +1,721 @@
# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
[ [
{ {
goPackagePath = "github.com/BurntSushi/locker"; goPackagePath = "github.com/BurntSushi/locker";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/BurntSushi/locker"; url = "https://github.com/BurntSushi/locker";
rev = "a6e239ea1c69bff1cfdb20c4b73dadf52f784b6a"; rev = "a6e239ea1c69";
sha256 = "1xak4aync4klswq5217qvw191asgla51jr42y94vp109lirm5dzg"; sha256 = "1xak4aync4klswq5217qvw191asgla51jr42y94vp109lirm5dzg";
}; };
} }
{ {
goPackagePath = "github.com/BurntSushi/toml"; goPackagePath = "github.com/BurntSushi/toml";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/BurntSushi/toml"; url = "https://github.com/BurntSushi/toml";
rev = "3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005"; rev = "a368813c5e64";
sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6"; sha256 = "1sjxs2lwc8jpln80s4rlzp7nprbcljhy5mz4rf9995gq93wqnym5";
}; };
} }
{ {
goPackagePath = "github.com/PuerkitoBio/purell"; goPackagePath = "github.com/PuerkitoBio/purell";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/PuerkitoBio/purell"; url = "https://github.com/PuerkitoBio/purell";
rev = "975f53781597ed779763b7b65566e74c4004d8de"; rev = "v1.1.0";
sha256 = "1j5l793zxrjv09z3cdgs05qn45sbhbm9njsw5cfv168x8z88pd3l"; sha256 = "0vsxyn1fbm7g873b8kf3hcsgqgncb5nmfq3zfsc35a9yhzarka91";
}; };
} }
{ {
goPackagePath = "github.com/PuerkitoBio/urlesc"; goPackagePath = "github.com/PuerkitoBio/urlesc";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/PuerkitoBio/urlesc"; url = "https://github.com/PuerkitoBio/urlesc";
rev = "de5bf2ad457846296e2031421a34e2568e304e35"; rev = "de5bf2ad4578";
sha256 = "0n0srpqwbaan1wrhh2b7ysz543pjs1xw2rghvqyffg9l0g8kzgcw"; sha256 = "0n0srpqwbaan1wrhh2b7ysz543pjs1xw2rghvqyffg9l0g8kzgcw";
}; };
} }
{
goPackagePath = "github.com/alecthomas/assert";
fetch = {
type = "git";
url = "https://github.com/alecthomas/assert";
rev = "405dbfeb8e38";
sha256 = "1l567pi17k593nrd1qlbmiq8z9jy3qs60px2a16fdpzjsizwqx8l";
};
}
{ {
goPackagePath = "github.com/alecthomas/chroma"; goPackagePath = "github.com/alecthomas/chroma";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/alecthomas/chroma"; url = "https://github.com/alecthomas/chroma";
rev = "5d7fef2ae60b501bbf28d476c3f273b8017d8261"; rev = "v0.5.0";
sha256 = "150jv4vhsdi1gj3liwkgicdrwnzgv5qkq2fwznlnzf64vmfb0b9f"; sha256 = "150jv4vhsdi1gj3liwkgicdrwnzgv5qkq2fwznlnzf64vmfb0b9f";
}; };
} }
{
goPackagePath = "github.com/alecthomas/colour";
fetch = {
type = "git";
url = "https://github.com/alecthomas/colour";
rev = "60882d9e2721";
sha256 = "0iq566534gbzkd16ixg7fk298wd766821vvs80838yifx9yml5vs";
};
}
{
goPackagePath = "github.com/alecthomas/repr";
fetch = {
type = "git";
url = "https://github.com/alecthomas/repr";
rev = "117648cd9897";
sha256 = "05v1rgzdqc8razf702laagrvhvx68xd9yxxmzd3dyz0d6425pdrp";
};
}
{ {
goPackagePath = "github.com/bep/debounce"; goPackagePath = "github.com/bep/debounce";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/bep/debounce"; url = "https://github.com/bep/debounce";
rev = "844797fa1dd9ba969d71b62797ff19d1e49d4eac"; rev = "v1.1.0";
sha256 = "1sh4zv0hv7f454mhzpl2mbv7ar5rm00wyy5qr78x1h84bgph87wy"; sha256 = "1sh4zv0hv7f454mhzpl2mbv7ar5rm00wyy5qr78x1h84bgph87wy";
}; };
} }
{ {
goPackagePath = "github.com/bep/gitmap"; goPackagePath = "github.com/bep/gitmap";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/bep/gitmap"; url = "https://github.com/bep/gitmap";
rev = "ecb6fe06dbfd6bb4225e7fda7dc15612ecc8d960"; rev = "v1.0.0";
sha256 = "0zqdl5h4ayi2gi5aqf35f1sjszhbcriksm2bf84fkrg7ngr48jn6"; sha256 = "0zqdl5h4ayi2gi5aqf35f1sjszhbcriksm2bf84fkrg7ngr48jn6";
}; };
} }
{ {
goPackagePath = "github.com/bep/go-tocss"; goPackagePath = "github.com/bep/go-tocss";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/bep/go-tocss"; url = "https://github.com/bep/go-tocss";
rev = "2abb118dc8688b6c7df44e12f4152c2bded9b19c"; rev = "v0.5.0";
sha256 = "12q7h6nydklq4kg65kcgd85209rx7zf64ba6nf3k7y16knj4233q"; sha256 = "12q7h6nydklq4kg65kcgd85209rx7zf64ba6nf3k7y16knj4233q";
}; };
} }
{ {
goPackagePath = "github.com/chaseadamsio/goorgeous"; goPackagePath = "github.com/chaseadamsio/goorgeous";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/chaseadamsio/goorgeous"; url = "https://github.com/chaseadamsio/goorgeous";
rev = "dcf1ef873b8987bf12596fe6951c48347986eb2f"; rev = "v1.1.0";
sha256 = "07qdqi46klizq3wigxqbiksnlgbrdc8hvmizgzg0aas5iqy88dcb"; sha256 = "07qdqi46klizq3wigxqbiksnlgbrdc8hvmizgzg0aas5iqy88dcb";
}; };
} }
{ {
goPackagePath = "github.com/cpuguy83/go-md2man"; goPackagePath = "github.com/cpuguy83/go-md2man";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/cpuguy83/go-md2man"; url = "https://github.com/cpuguy83/go-md2man";
rev = "691ee98543af2f262f35fbb54bdd42f00b9b9cc5"; rev = "v1.0.8";
sha256 = "1864g10y9n6ni0p1yqjhvwyjdh0lgxnf7dlb0c4njazdg5rppww9"; sha256 = "1w22dfdamsq63b5rvalh9k2y7rbwfkkjs7vm9vd4a13h2ql70lg2";
}; };
} }
{ {
goPackagePath = "github.com/danwakefield/fnmatch"; goPackagePath = "github.com/danwakefield/fnmatch";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/danwakefield/fnmatch"; url = "https://github.com/danwakefield/fnmatch";
rev = "cbb64ac3d964b81592e64f957ad53df015803288"; rev = "cbb64ac3d964";
sha256 = "0cbf511ppsa6hf59mdl7nbyn2b2n71y0bpkzbmfkdqjhanqh1lqz"; sha256 = "0cbf511ppsa6hf59mdl7nbyn2b2n71y0bpkzbmfkdqjhanqh1lqz";
}; };
} }
{
goPackagePath = "github.com/davecgh/go-spew";
fetch = {
type = "git";
url = "https://github.com/davecgh/go-spew";
rev = "v1.1.1";
sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
};
}
{ {
goPackagePath = "github.com/disintegration/imaging"; goPackagePath = "github.com/disintegration/imaging";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/disintegration/imaging"; url = "https://github.com/disintegration/imaging";
rev = "0bd5694c78c9c3d9a3cd06a706a8f3c59296a9ac"; rev = "v1.5.0";
sha256 = "1laxccmzi7q51zxn81ringmdwp8iaipivrl375yc3gq56d70sp0r"; sha256 = "1laxccmzi7q51zxn81ringmdwp8iaipivrl375yc3gq56d70sp0r";
}; };
} }
{ {
goPackagePath = "github.com/dlclark/regexp2"; goPackagePath = "github.com/dlclark/regexp2";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/dlclark/regexp2"; url = "https://github.com/dlclark/regexp2";
rev = "7632a260cbaf5e7594fc1544a503456ecd0827f1"; rev = "v1.1.6";
sha256 = "0vhp5r0ywv9p1c74fm8xzclnwx2mg9f0764b3id7a9nwh0plisx2"; sha256 = "144s81ndviwhyy20ipxvvfvap8phv5p762glxrz6aqxprkxfarj5";
}; };
} }
{ {
goPackagePath = "github.com/eknkc/amber"; goPackagePath = "github.com/eknkc/amber";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/eknkc/amber"; url = "https://github.com/eknkc/amber";
rev = "cdade1c073850f4ffc70a829e31235ea6892853b"; rev = "cdade1c07385";
sha256 = "152w97yckwncgw7lwjvgd8d00wy6y0nxzlvx72kl7nqqxs9vhxd9"; sha256 = "152w97yckwncgw7lwjvgd8d00wy6y0nxzlvx72kl7nqqxs9vhxd9";
}; };
} }
{
goPackagePath = "github.com/fortytw2/leaktest";
fetch = {
type = "git";
url = "https://github.com/fortytw2/leaktest";
rev = "v1.2.0";
sha256 = "1lf9l6zgzjbcc7hmcjhhg3blx0y8icyxvjmjqqwfbwdk502803ra";
};
}
{ {
goPackagePath = "github.com/fsnotify/fsnotify"; goPackagePath = "github.com/fsnotify/fsnotify";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/fsnotify/fsnotify"; url = "https://github.com/fsnotify/fsnotify";
rev = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9"; rev = "v1.4.7";
sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g"; sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
}; };
} }
{
goPackagePath = "github.com/gobuffalo/envy";
fetch = {
type = "git";
url = "https://github.com/gobuffalo/envy";
rev = "3c96536452167a705ca5a70b831d3810e1e10452";
sha256 = "0ixqpdmb7kjlarkv0qlbwnbr194sajx9flysnhcldzmciqgk5bqs";
};
}
{ {
goPackagePath = "github.com/gobwas/glob"; goPackagePath = "github.com/gobwas/glob";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/gobwas/glob"; url = "https://github.com/gobwas/glob";
rev = "f756513aec94125582ee6c0dc94179251ef87370"; rev = "v0.2.3";
sha256 = "1pyzlvb950864syf2safazv39s7rpi08r7x2vby82kj9ykqgvhc4"; sha256 = "0jxk1x806zn5x86342s72dq2qy64ksb3zrvrlgir2avjhwb18n6z";
}; };
} }
{ {
goPackagePath = "github.com/gorilla/websocket"; goPackagePath = "github.com/gorilla/websocket";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/gorilla/websocket"; url = "https://github.com/gorilla/websocket";
rev = "3ff3320c2a1756a3691521efc290b4701575147c"; rev = "v1.4.0";
sha256 = "1b0kpix2qxv3qiiq739nk9fjh453if0mcpr9gmlizicdpjp5alw2"; sha256 = "00i4vb31nsfkzzk7swvx3i75r2d960js3dri1875vypk3v2s0pzk";
}; };
} }
{ {
goPackagePath = "github.com/hashicorp/go-immutable-radix"; goPackagePath = "github.com/hashicorp/go-immutable-radix";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/hashicorp/go-immutable-radix"; url = "https://github.com/hashicorp/go-immutable-radix";
rev = "7f3cd4390caab3250a57f30efdb2a65dd7649ecf"; rev = "v1.0.0";
sha256 = "13nv1dac6i2mjdy8vsd4vwawwja78vggdjcnj1xfykg2k8jbkphv"; sha256 = "1v3nmsnk1s8bzpclrhirz7iq0g5xxbw9q5gvrg9ss6w9crs72qr6";
}; };
} }
{
goPackagePath = "github.com/hashicorp/go-uuid";
fetch = {
type = "git";
url = "https://github.com/hashicorp/go-uuid";
rev = "v1.0.0";
sha256 = "1jflywlani7583qm4ysph40hsgx3n66n5zr2k84i057fmwa1ypfy";
};
}
{ {
goPackagePath = "github.com/hashicorp/golang-lru"; goPackagePath = "github.com/hashicorp/golang-lru";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/hashicorp/golang-lru"; url = "https://github.com/hashicorp/golang-lru";
rev = "0fb14efe8c47ae851c0034ed7a448854d3d34cf3"; rev = "v0.5.0";
sha256 = "0vg4yn3088ym4sj1d34kr13lp4v5gya7r2nxshp2bz70n46fsqn2"; sha256 = "12k2cp2k615fjvfa5hyb9k2alian77wivds8s65diwshwv41939f";
}; };
} }
{ {
goPackagePath = "github.com/hashicorp/hcl"; goPackagePath = "github.com/hashicorp/hcl";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/hashicorp/hcl"; url = "https://github.com/hashicorp/hcl";
rev = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168"; rev = "v1.0.0";
sha256 = "1qalfsc31fra7hcw2lc3s20aj7al62fq3j5fn5kga3mg99b82nyr"; sha256 = "0q6ml0qqs0yil76mpn4mdx4lp94id8vbv575qm60jzl1ijcl5i66";
}; };
} }
{
goPackagePath = "github.com/inconshreveable/mousetrap";
fetch = {
type = "git";
url = "https://github.com/inconshreveable/mousetrap";
rev = "v1.0.0";
sha256 = "1mn0kg48xkd74brf48qf5hzp0bc6g8cf5a77w895rl3qnlpfw152";
};
}
{ {
goPackagePath = "github.com/jdkato/prose"; goPackagePath = "github.com/jdkato/prose";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/jdkato/prose"; url = "https://github.com/jdkato/prose";
rev = "99216ea17cba4e2f2a4e8bca778643e5a529b7aa"; rev = "v1.1.0";
sha256 = "1mdh276lmj21jbi22ky8ngdsl9hfcdv6czshycbaiwjr5y9cv7bn"; sha256 = "1gjqgrpc7wbqvnhgwyfhxng24qvx37qjy0x2mbikiw1vaygxqsmy";
}; };
} }
{ {
goPackagePath = "github.com/joho/godotenv"; goPackagePath = "github.com/kr/pretty";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/joho/godotenv"; url = "https://github.com/kr/pretty";
rev = "1709ab122c988931ad53508747b3c061400c2984"; rev = "v0.1.0";
sha256 = "1pym5lydb28ggxrz80q9s26bj2bd80ax1igm1zfhyhx9i3060kif"; sha256 = "18m4pwg2abd0j9cn5v3k2ksk9ig4vlwxmlw9rrglanziv9l967qp";
}; };
} }
{
goPackagePath = "github.com/kr/pty";
fetch = {
type = "git";
url = "https://github.com/kr/pty";
rev = "v1.1.1";
sha256 = "0383f0mb9kqjvncqrfpidsf8y6ns5zlrc91c6a74xpyxjwvzl2y6";
};
}
{
goPackagePath = "github.com/kr/text";
fetch = {
type = "git";
url = "https://github.com/kr/text";
rev = "v0.1.0";
sha256 = "1gm5bsl01apvc84bw06hasawyqm4q84vx1pm32wr9jnd7a8vjgj1";
};
}
{ {
goPackagePath = "github.com/kyokomi/emoji"; goPackagePath = "github.com/kyokomi/emoji";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/kyokomi/emoji"; url = "https://github.com/kyokomi/emoji";
rev = "2e9a9507333f3ee28f3fab88c2c3aba34455d734"; rev = "v1.5.1";
sha256 = "005rxyxlqcd2sfjn686xb52l11wn2w0g5jv042ka6pnsx24r812a"; sha256 = "005rxyxlqcd2sfjn686xb52l11wn2w0g5jv042ka6pnsx24r812a";
}; };
} }
{
goPackagePath = "github.com/magefile/mage";
fetch = {
type = "git";
url = "https://github.com/magefile/mage";
rev = "v1.4.0";
sha256 = "177hzmmzhk7bcm3jj2cj6d5l9h5ql3cikvndhk4agkslrhwr3xka";
};
}
{ {
goPackagePath = "github.com/magiconair/properties"; goPackagePath = "github.com/magiconair/properties";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/magiconair/properties"; url = "https://github.com/magiconair/properties";
rev = "c2353362d570a7bfa228149c62842019201cfb71"; rev = "v1.8.0";
sha256 = "1a10362wv8a8qwb818wygn2z48lgzch940hvpv81hv8gc747ajxn"; sha256 = "1a10362wv8a8qwb818wygn2z48lgzch940hvpv81hv8gc747ajxn";
}; };
} }
{ {
goPackagePath = "github.com/markbates/inflect"; goPackagePath = "github.com/markbates/inflect";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/markbates/inflect"; url = "https://github.com/markbates/inflect";
rev = "84854b5b4c0dbb0c107480d480a71f7db1fc7dae"; rev = "a12c3aec81a6";
sha256 = "0b7shs0mxhkl7v7mwp799n7jgjsdbgi81f5hbaz2b936gbxksw7d"; sha256 = "0mawr6z9nav4f5j0nmjdxg9lbfhr7wz8zi34g7b6wndmzyf8jbsd";
}; };
} }
{
goPackagePath = "github.com/mattn/go-isatty";
fetch = {
type = "git";
url = "https://github.com/mattn/go-isatty";
rev = "v0.0.4";
sha256 = "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w";
};
}
{ {
goPackagePath = "github.com/mattn/go-runewidth"; goPackagePath = "github.com/mattn/go-runewidth";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/mattn/go-runewidth"; url = "https://github.com/mattn/go-runewidth";
rev = "ce7b0b5c7b45a81508558cd1dba6bb1e4ddb51bb"; rev = "v0.0.3";
sha256 = "0lc39b6xrxv7h3v3y1kgz49cgi5qxwlygs715aam6ba35m48yi7g"; sha256 = "0lc39b6xrxv7h3v3y1kgz49cgi5qxwlygs715aam6ba35m48yi7g";
}; };
} }
{ {
goPackagePath = "github.com/miekg/mmark"; goPackagePath = "github.com/miekg/mmark";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/miekg/mmark"; url = "https://github.com/miekg/mmark";
rev = "057eb9e3ae87944c038036d046101dec0c56e21f"; rev = "v1.3.6";
sha256 = "0hlqcwx6qqgy3vs13r10wn0d9x0xmww1v9jm09y2dp1ykgbampnk"; sha256 = "0q2zrwa2vwk7a0zhmi000zpqrc01zssrj9c5n3573rg68fksg77m";
}; };
} }
{ {
goPackagePath = "github.com/mitchellh/hashstructure"; goPackagePath = "github.com/mitchellh/hashstructure";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/mitchellh/hashstructure"; url = "https://github.com/mitchellh/hashstructure";
rev = "2bca23e0e452137f789efbc8610126fd8b94f73b"; rev = "v1.0.0";
sha256 = "0vpacsls26474wya360fjhzi6l4y8s8s251c4szvqxh17n5f5gk1"; sha256 = "0zgl5c03ip2yzkb9b7fq9ml08i7j8prgd46ha1fcg8c6r7k9xl3i";
}; };
} }
{ {
goPackagePath = "github.com/mitchellh/mapstructure"; goPackagePath = "github.com/mitchellh/mapstructure";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/mitchellh/mapstructure"; url = "https://github.com/mitchellh/mapstructure";
rev = "f15292f7a699fcc1a38a80977f80a046874ba8ac"; rev = "v1.0.0";
sha256 = "0zm3nhdvmj3f8q0vg2sjfw1sm3pwsw0ggz501awz95w99664a8al"; sha256 = "0f06q4fpzg0c370cvmpsl0iq2apl5nkbz5cd3nba5x5ysmshv1lm";
}; };
} }
{ {
goPackagePath = "github.com/muesli/smartcrop"; goPackagePath = "github.com/muesli/smartcrop";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/muesli/smartcrop"; url = "https://github.com/muesli/smartcrop";
rev = "f6ebaa786a12a0fdb2d7c6dee72808e68c296464"; rev = "f6ebaa786a12";
sha256 = "0xbv5wbn0z36nkw9ay3ly6z23lpsrs0khryl1w54fz85lvwh66gp"; sha256 = "0xbv5wbn0z36nkw9ay3ly6z23lpsrs0khryl1w54fz85lvwh66gp";
}; };
} }
{
goPackagePath = "github.com/nfnt/resize";
fetch = {
type = "git";
url = "https://github.com/nfnt/resize";
rev = "83c6a9932646";
sha256 = "005cpiwq28krbjf0zjwpfh63rp4s4is58700idn24fs3g7wdbwya";
};
}
{ {
goPackagePath = "github.com/nicksnyder/go-i18n"; goPackagePath = "github.com/nicksnyder/go-i18n";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/nicksnyder/go-i18n"; url = "https://github.com/nicksnyder/go-i18n";
rev = "04f547cc50da4c144c5fdfd4495aef143637a236"; rev = "v1.10.0";
sha256 = "1h4ndn822k7i04h9k5dxm6c29mhhhqhl63vzpmz2l1k0zpj7xyd1"; sha256 = "1nlvq85c232z5yjs86pxpmkv7hk6gb5pa6j4hhzgdz85adk2ma04";
}; };
} }
{ {
goPackagePath = "github.com/olekukonko/tablewriter"; goPackagePath = "github.com/olekukonko/tablewriter";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/olekukonko/tablewriter"; url = "https://github.com/olekukonko/tablewriter";
rev = "d4647c9c7a84d847478d890b816b7d8b62b0b279"; rev = "d4647c9c7a84";
sha256 = "1274k5r9ardh1f6gsmadxmdds7zy8rkr55fb9swvnm0vazr3y01l"; sha256 = "1274k5r9ardh1f6gsmadxmdds7zy8rkr55fb9swvnm0vazr3y01l";
}; };
} }
{ {
goPackagePath = "github.com/pelletier/go-toml"; goPackagePath = "github.com/pelletier/go-toml";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/pelletier/go-toml"; url = "https://github.com/pelletier/go-toml";
rev = "c2dbbc24a97911339e01bda0b8cabdbd8f13b602"; rev = "v1.2.0";
sha256 = "0v1dsqnk5zmn6ir8jgxijx14s47jvijlqfz3aq435snfrgybd5rz"; sha256 = "1fjzpcjng60mc3a4b2ql5a00d5gah84wj740dabv9kq67mpg8fxy";
}; };
} }
{
goPackagePath = "github.com/pkg/errors";
fetch = {
type = "git";
url = "https://github.com/pkg/errors";
rev = "v0.8.0";
sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
};
}
{
goPackagePath = "github.com/pmezard/go-difflib";
fetch = {
type = "git";
url = "https://github.com/pmezard/go-difflib";
rev = "v1.0.0";
sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
};
}
{ {
goPackagePath = "github.com/russross/blackfriday"; goPackagePath = "github.com/russross/blackfriday";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/russross/blackfriday"; url = "https://github.com/russross/blackfriday";
rev = "46c73eb196baff5bb07288f245b223bd1a30fba6"; rev = "46c73eb196ba";
sha256 = "01z1jsdkac09cw95lqq4pahkw9xnini2mb956lvb772bby2x3dmj"; sha256 = "01z1jsdkac09cw95lqq4pahkw9xnini2mb956lvb772bby2x3dmj";
}; };
} }
{
goPackagePath = "github.com/sanity-io/litter";
fetch = {
type = "git";
url = "https://github.com/sanity-io/litter";
rev = "v1.1.0";
sha256 = "09nywwxxd6rmhxc7rsvs96ynjszmnvmhwr7dvh1n35hb6h9y7s2r";
};
}
{
goPackagePath = "github.com/sergi/go-diff";
fetch = {
type = "git";
url = "https://github.com/sergi/go-diff";
rev = "v1.0.0";
sha256 = "0swiazj8wphs2zmk1qgq75xza6m19snif94h2m6fi8dqkwqdl7c7";
};
}
{ {
goPackagePath = "github.com/shurcooL/sanitized_anchor_name"; goPackagePath = "github.com/shurcooL/sanitized_anchor_name";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/shurcooL/sanitized_anchor_name"; url = "https://github.com/shurcooL/sanitized_anchor_name";
rev = "86672fcb3f950f35f2e675df2240550f2a50762f"; rev = "86672fcb3f95";
sha256 = "142m507s9971cl8qdmbcw7sqxnkgi3xqd8wzvfq15p0w7w8i4a3h"; sha256 = "142m507s9971cl8qdmbcw7sqxnkgi3xqd8wzvfq15p0w7w8i4a3h";
}; };
} }
{ {
goPackagePath = "github.com/spf13/afero"; goPackagePath = "github.com/spf13/afero";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/afero"; url = "https://github.com/spf13/afero";
rev = "787d034dfe70e44075ccc060d346146ef53270ad"; rev = "v1.1.2";
sha256 = "0138rjiacl71h7kvhzinviwvy6qa2m6rflpv9lgqv15hnjvhwvg1"; sha256 = "0miv4faf5ihjfifb1zv6aia6f6ik7h1s4954kcb8n6ixzhx9ck6k";
}; };
} }
{ {
goPackagePath = "github.com/spf13/cast"; goPackagePath = "github.com/spf13/cast";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/cast"; url = "https://github.com/spf13/cast";
rev = "8965335b8c7107321228e3e3702cab9832751bac"; rev = "v1.3.0";
sha256 = "177bk7lq40jbgv9p9r80aydpaccfk8ja3a7jjhfwiwk9r1pa4rr2"; sha256 = "0xq1ffqj8y8h7dcnm0m9lfrh0ga7pssnn2c1dnr09chqbpn4bdc5";
}; };
} }
{ {
goPackagePath = "github.com/spf13/cobra"; goPackagePath = "github.com/spf13/cobra";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/cobra"; url = "https://github.com/spf13/cobra";
rev = "ff0d02e8555041edecbd0ce27f32c6ea4b214483"; rev = "v0.0.3";
sha256 = "1ilw6b2nir1bg7hmx8hrn60za37qqm18xvamv90fx5vxq85fsml9"; sha256 = "1q1nsx05svyv9fv3fy6xv6gs9ffimkyzsfm49flvl3wnvf1ncrkd";
}; };
} }
{ {
goPackagePath = "github.com/spf13/fsync"; goPackagePath = "github.com/spf13/fsync";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/fsync"; url = "https://github.com/spf13/fsync";
rev = "12a01e648f05a938100a26858d2d59a120307a18"; rev = "12a01e648f05";
sha256 = "1vvbgxbbsc4mvi1axgqgn9pzjz1p495dsmwpc7mr8qxh8f6s0nhv"; sha256 = "1vvbgxbbsc4mvi1axgqgn9pzjz1p495dsmwpc7mr8qxh8f6s0nhv";
}; };
} }
{ {
goPackagePath = "github.com/spf13/jwalterweatherman"; goPackagePath = "github.com/spf13/jwalterweatherman";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/jwalterweatherman"; url = "https://github.com/spf13/jwalterweatherman";
rev = "14d3d4c518341bea657dd8a226f5121c0ff8c9f2"; rev = "4a4406e478ca";
sha256 = "1f9154lijbz0kkgqwmbphykwl4adv4fvkx6n1p7fdq3x5j9g8i17"; sha256 = "093fmmvavv84pv4q84hav7ph3fmrq87bvspjj899q0qsx37yvdr8";
}; };
} }
{ {
goPackagePath = "github.com/spf13/nitro"; goPackagePath = "github.com/spf13/nitro";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/nitro"; url = "https://github.com/spf13/nitro";
rev = "24d7ef30a12da0bdc5e2eb370a79c659ddccf0e8"; rev = "24d7ef30a12d";
sha256 = "143sbpx0jdgf8f8ayv51x6l4jg6cnv6nps6n60qxhx4vd90s6mib"; sha256 = "143sbpx0jdgf8f8ayv51x6l4jg6cnv6nps6n60qxhx4vd90s6mib";
}; };
} }
{ {
goPackagePath = "github.com/spf13/pflag"; goPackagePath = "github.com/spf13/pflag";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/pflag"; url = "https://github.com/spf13/pflag";
rev = "947b89bd1b7dabfed991ac30e1a56f5193f0c88b"; rev = "v1.0.2";
sha256 = "0n4h5cb07n96fcw9k8dwnj6yisf2x357lsiwjmrq6xr1vkzdlk8c"; sha256 = "005598piihl3l83a71ahj10cpq9pbhjck4xishx1b4dzc02r9xr2";
}; };
} }
{ {
goPackagePath = "github.com/spf13/viper"; goPackagePath = "github.com/spf13/viper";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/viper"; url = "https://github.com/spf13/viper";
rev = "907c19d40d9a6c9bb55f040ff4ae45271a4754b9"; rev = "v1.2.0";
sha256 = "177ziws6mwxdlvicmgpv7w7zy5ri2wgnw2f2v3789b5skv9d6a6b"; sha256 = "0klv7dyllvv9jkyspy4ww5nrz24ngb3adlh884cbdjn7562bhi47";
}; };
} }
{
goPackagePath = "github.com/stretchr/testify";
fetch = {
type = "git";
url = "https://github.com/stretchr/testify";
rev = "f2347ac6c9c9";
sha256 = "0ns8zc2n8gpcsd1fdaqbq7a8d939lnaxraqx5nr2fi2zdxqyh7hm";
};
}
{ {
goPackagePath = "github.com/tdewolff/minify"; goPackagePath = "github.com/tdewolff/minify";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/tdewolff/minify"; url = "https://github.com/tdewolff/minify";
rev = "948b6490cf3cacab5f4d7474104c3d21bf6eda46"; rev = "v2.3.5";
sha256 = "1js5l0405kbic53qgim0lj3crw7cc2a2sbga35h9qcnm8l3cx22f"; sha256 = "0x67kgjhc6mfzjhr4xmw0j3qapzhkgwwahvv5b44rb449ml2qx5m";
}; };
} }
{ {
goPackagePath = "github.com/tdewolff/parse"; goPackagePath = "github.com/tdewolff/parse";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/tdewolff/parse"; url = "https://github.com/tdewolff/parse";
rev = "dd9676af8dd934a61082c5b3038e79626847fa32"; rev = "v2.3.3";
sha256 = "1hp9qh8knx3q57aw5qavsf7ia3mxm8ka0bk6kjkqkqq8k9jq97qk"; sha256 = "190y2jykp8qyp6y58ky1v1fvmaqjnrsr1ksbqrrspf1gpjy69i94";
}; };
} }
{
goPackagePath = "github.com/tdewolff/test";
fetch = {
type = "git";
url = "https://github.com/tdewolff/test";
rev = "265427085153";
sha256 = "1h0cmsjjia92w50dzr06c5h10zd5c7snhpixqjv94wbl7dv80yp0";
};
}
{ {
goPackagePath = "github.com/wellington/go-libsass"; goPackagePath = "github.com/wellington/go-libsass";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/wellington/go-libsass"; url = "https://github.com/wellington/go-libsass";
rev = "615eaa47ef794d037c1906a0eb7bf85375a5decf"; rev = "615eaa47ef79";
sha256 = "0imjiskn4vq7nml5jwb1scgl61jg53cfpkjnb9rsc6m8gsd8s16s"; sha256 = "0imjiskn4vq7nml5jwb1scgl61jg53cfpkjnb9rsc6m8gsd8s16s";
}; };
} }
{ {
goPackagePath = "github.com/yosssi/ace"; goPackagePath = "github.com/yosssi/ace";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/yosssi/ace"; url = "https://github.com/yosssi/ace";
rev = "2b21b56204aee785bf8d500c3f9dcbe3ed7d4515"; rev = "v0.0.5";
sha256 = "0cgpq1zdnh8l8zsn9w63asc9k7cm6k4qvjgrb4hr1106h8fjwfma"; sha256 = "1kbvbc56grrpnl65grygd23gyn3nkkhxdg8awhzkjmd0cvki8w1f";
}; };
} }
{ {
goPackagePath = "golang.org/x/image"; goPackagePath = "golang.org/x/image";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://go.googlesource.com/image"; url = "https://go.googlesource.com/image";
rev = "c73c2afc3b812cdd6385de5a50616511c4a3d458"; rev = "c73c2afc3b81";
sha256 = "1kkafy29vz5xf6r29ghbvvbwrgjxwxvzk6dsa2qhyp1ddk6l2vkz"; sha256 = "1kkafy29vz5xf6r29ghbvvbwrgjxwxvzk6dsa2qhyp1ddk6l2vkz";
}; };
} }
{ {
goPackagePath = "golang.org/x/net"; goPackagePath = "golang.org/x/net";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://go.googlesource.com/net"; url = "https://go.googlesource.com/net";
rev = "922f4815f713f213882e8ef45e0d315b164d705c"; rev = "161cd47e91fd";
sha256 = "1ci1rxk2d6hmfsjjc19n2sxhyn4jqr5ia3ykyah1h08p0pn7k52w"; sha256 = "0254ld010iijygbzykib2vags1dc0wlmcmhgh4jl8iny159lhbcv";
}; };
} }
{ {
goPackagePath = "golang.org/x/sync"; goPackagePath = "golang.org/x/sync";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://go.googlesource.com/sync"; url = "https://go.googlesource.com/sync";
rev = "1d60e4601c6fd243af51cc01ddf169918a5407ca"; rev = "1d60e4601c6f";
sha256 = "046jlanz2lkxq1r57x9bl6s4cvfqaic6p2xybsj8mq1120jv4rs6"; sha256 = "046jlanz2lkxq1r57x9bl6s4cvfqaic6p2xybsj8mq1120jv4rs6";
}; };
} }
{ {
goPackagePath = "golang.org/x/sys"; goPackagePath = "golang.org/x/sys";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://go.googlesource.com/sys"; url = "https://go.googlesource.com/sys";
rev = "4ea2f632f6e912459fe60b26b1749377f0d889d5"; rev = "d0be0721c37e";
sha256 = "16pdi4mmjlcrjdcz7k559jqnsvkhdmff68bbqq7ii1lp8vrpqqmy"; sha256 = "081wyvfnlf842dqg03raxfz6lldlxpmyh1prix9lmrrm65arxb12";
}; };
} }
{ {
goPackagePath = "golang.org/x/text"; goPackagePath = "golang.org/x/text";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://go.googlesource.com/text"; url = "https://go.googlesource.com/text";
rev = "6e3c4e7365ddcc329f090f96e4348398f6310088"; rev = "v0.3.0";
sha256 = "1r511ncipn7sdlssn06fpzcpy4mp4spagni4ryxq86p2b0bi8pn4"; sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
}; };
} }
{
goPackagePath = "gopkg.in/check.v1";
fetch = {
type = "git";
url = "https://gopkg.in/check.v1";
rev = "788fd7840127";
sha256 = "0v3bim0j375z81zrpr5qv42knqs0y2qv2vkjiqi5axvb78slki1a";
};
}
{ {
goPackagePath = "gopkg.in/yaml.v2"; goPackagePath = "gopkg.in/yaml.v2";
fetch = { fetch = {
type = "git"; type = "git";
url = "https://gopkg.in/yaml.v2"; url = "https://gopkg.in/yaml.v2";
rev = "5420a8b6744d3b0345ab293f6fcba19c978f1183"; rev = "v2.2.1";
sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1"; sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
}; };
} }

View File

@ -1,22 +1,6 @@
{ stdenv, pkgs, python3 }: { stdenv, pkgs, python3 }:
let with python3.pkgs; buildPythonApplication rec {
python = python3.override {
packageOverrides = self: super: {
# https://github.com/pimutils/khal/issues/780
python-dateutil = super.python-dateutil.overridePythonAttrs (oldAttrs: rec {
version = "2.6.1";
src = oldAttrs.src.override {
inherit version;
sha256 = "891c38b2a02f5bb1be3e4793866c8df49c7d19baabf9c1bad62547e0b4866aca";
};
});
};
};
in with python.pkgs; buildPythonApplication rec {
pname = "khal"; pname = "khal";
version = "0.9.10"; version = "0.9.10";
@ -50,6 +34,9 @@ in with python.pkgs; buildPythonApplication rec {
install -D misc/__khal $out/share/zsh/site-functions/__khal install -D misc/__khal $out/share/zsh/site-functions/__khal
''; '';
# One test fails as of 0.9.10 due to the upgrade to icalendar 4.0.3
doCheck = false;
checkPhase = '' checkPhase = ''
py.test py.test
''; '';
@ -58,6 +45,6 @@ in with python.pkgs; buildPythonApplication rec {
homepage = http://lostpackets.de/khal/; homepage = http://lostpackets.de/khal/;
description = "CLI calendar application"; description = "CLI calendar application";
license = licenses.mit; license = licenses.mit;
maintainers = with maintainers; [ jgeerds ]; maintainers = with maintainers; [ jgeerds gebner ];
}; };
} }

View File

@ -13,12 +13,12 @@ let
inherit (python2.pkgs) paramiko pycairo pyodbc; inherit (python2.pkgs) paramiko pycairo pyodbc;
in stdenv.mkDerivation rec { in stdenv.mkDerivation rec {
pname = "mysql-workbench"; pname = "mysql-workbench";
version = "8.0.12"; version = "8.0.13";
name = "${pname}-${version}"; name = "${pname}-${version}";
src = fetchurl { src = fetchurl {
url = "http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-${version}-src.tar.gz"; url = "http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-${version}-src.tar.gz";
sha256 = "0d6k1kw0bi3q5dlilzlgds1gcrlf7pis4asm3d6pssh2jmn5hh82"; sha256 = "1p4xy2a5cin1l06j4ixpgp1ynhjdj5gax4fjhznspch3c63jp9hj";
}; };
patches = [ patches = [

View File

@ -4,13 +4,13 @@ with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "nnn-${version}"; name = "nnn-${version}";
version = "1.9"; version = "2.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "jarun"; owner = "jarun";
repo = "nnn"; repo = "nnn";
rev = "v${version}"; rev = "v${version}";
sha256 = "0z7mr9lql5hz0518wzkj8fdsdp8yh17fr418arjxjn66md4kwgpg"; sha256 = "16c6fimr1ayb2x3mvli70x2va3nz106jdfyqn53bhss7zjqvszxl";
}; };
configFile = optionalString (conf!=null) (builtins.toFile "nnn.h" conf); configFile = optionalString (conf!=null) (builtins.toFile "nnn.h" conf);

View File

@ -1,5 +1,5 @@
{ stdenv, fetchFromGitHub { stdenv, fetchFromGitHub
, cmake, gcc-arm-embedded, python , cmake, gcc-arm-embedded, binutils-arm-embedded, python
, qt5, SDL, gmock , qt5, SDL, gmock
, dfu-util, avrdude , dfu-util, avrdude
}: }:
@ -21,10 +21,12 @@ in stdenv.mkDerivation {
enableParallelBuilding = true; enableParallelBuilding = true;
nativeBuildInputs = [ cmake ]; nativeBuildInputs = [
cmake
gcc-arm-embedded binutils-arm-embedded
];
buildInputs = with qt5; [ buildInputs = with qt5; [
gcc-arm-embedded
python python.pkgs.pyqt4 python python.pkgs.pyqt4
qtbase qtmultimedia qttranslations qtbase qtmultimedia qttranslations
SDL gmock SDL gmock

View File

@ -0,0 +1,49 @@
{ llvmPackages, stdenv, fetchFromGitHub
, python36Packages, which, pkgconfig, curl, git, gettext, jansson
# Optional overrides
, maxFileSize ? 64 # in MB
, provider ? "https://ptpb.pw/"
}:
llvmPackages.stdenv.mkDerivation rec {
version = "unstable-2018-01-11";
name = "pbpst-${version}";
src = fetchFromGitHub {
owner = "HalosGhost";
repo = "pbpst";
rev = "ecbe08a0b72a6e4212f09fc6cf52a73506992346";
sha256 = "0dwhmw1dg4hg75nlvk5kmvv3slz2n3b9x65q4ig16agwqfsp4mdm";
};
nativeBuildInputs = [
python36Packages.sphinx
which
pkgconfig
curl
git
gettext
];
buildInputs = [ curl jansson ];
patchPhase = ''
patchShebangs ./configure
# Remove hardcoded check for libs in /usr/lib/
sed -e '64,67d' -i ./configure
'';
configureFlags = [
"--file-max=${toString (maxFileSize * 1024 * 1024)}" # convert to bytes
"--provider=${provider}"
];
meta = with stdenv.lib; {
description = "A command-line libcurl C client for pb deployments";
inherit (src.meta) homepage;
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = with maintainers; [ tmplt ];
};
}

View File

@ -0,0 +1,39 @@
{ stdenv, fetchzip, jre, makeWrapper }:
stdenv.mkDerivation rec {
name = "tabula-${version}";
version = "1.2.1";
src = fetchzip {
url = "https://github.com/tabulapdf/tabula/releases/download/v${version}/tabula-jar-${version}.zip";
sha256 = "0lkpv8hkji81fanyxm7ph8421fr9a6phqc3pbhw2bc4gljg7sgxi";
};
buildInputs = [ makeWrapper ];
installPhase = ''
mkdir -pv $out/share/tabula
cp -v * $out/share/tabula
makeWrapper ${jre}/bin/java $out/bin/tabula --add-flags "-jar $out/share/tabula/tabula.jar"
'';
meta = with stdenv.lib; {
description = "A tool for liberating data tables locked inside PDF files";
longDescription = ''
If youve ever tried to do anything with data provided to you in PDFs, you
know how painful it is there's no easy way to copy-and-paste rows of data
out of PDF files. Tabula allows you to extract that data into a CSV or
Microsoft Excel spreadsheet using a simple, easy-to-use interface.
'';
homepage = https://tabula.technology/;
license = licenses.mit;
maintainers = [ maintainers.dpaetzel ];
platforms = platforms.all;
};
}

View File

@ -1,98 +0,0 @@
/*
Requirements for Building TrueCrypt for Linux and macOS:
-----------------------------------------------------------
- GNU Make
- GNU C++ Compiler 4.0 or compatible
- Apple XCode (macOS only)
- pkg-config
- wxWidgets 2.8 library source code (available at http://www.wxwidgets.org)
- FUSE library (available at http://fuse.sourceforge.net and
http://code.google.com/p/macfuse)
Instructions for Building TrueCrypt for Linux and macOS:
-----------------------------------------------------------
1) Change the current directory to the root of the TrueCrypt source code.
2) Run the following command to configure the wxWidgets library for TrueCrypt
and to build it:
$ make WX_ROOT=/usr/src/wxWidgets wxbuild
The variable WX_ROOT must point to the location of the source code of the
wxWidgets library. Output files will be placed in the './wxrelease/'
directory.
3) To build TrueCrypt, run the following command:
$ make
4) If successful, the TrueCrypt executable should be located in the directory
'Main'.
By default, a universal executable supporting both graphical and text user
interface is built. To build a console-only executable, which requires no GUI
library, use the 'NOGUI' parameter:
$ make NOGUI=1 WX_ROOT=/usr/src/wxWidgets wxbuild
$ make NOGUI=1
*/
{ fetchurl, stdenv, pkgconfig, nasm, fuse, wxGTK, lvm2,
wxGUI ? true
}:
stdenv.mkDerivation {
name = "truecrypt-7.1a";
patchPhase = "patch -p0 < ${./gcc6.patch}";
preBuild = ''
cp $pkcs11h pkcs11.h
cp $pkcs11th pkcs11t.h
cp $pkcs11fh pkcs11f.h
'';
makeFlags = [
''PKCS11_INC="`pwd`"''
(if wxGUI then "" else "NOGUI=1")
];
installPhase = ''
install -D -t $out/bin Main/truecrypt
install -D License.txt $out/share/$name/LICENSE
'';
src = fetchurl {
url = https://fossies.org/linux/misc/old/TrueCrypt-7.1a-Source.tar.gz;
sha256 = "e6214e911d0bbededba274a2f8f8d7b3f6f6951e20f1c3a598fc7a23af81c8dc";
};
pkcs11h = fetchurl {
url = ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20/pkcs11.h;
sha256 = "1563d877b6f8868b8eb8687358162bfb7f868104ed694beb35ae1c5cf1a58b9b";
};
pkcs11th = fetchurl {
url = ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20/pkcs11t.h;
sha256 = "8ce68616304684f92a7e267bcc8f486441e92a5cbdfcfd97e69ac9a0b436fb7b";
};
pkcs11fh = fetchurl {
url = ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20/pkcs11f.h;
sha256 = "5ae6a4f32ca737e02def3bf314c9842fb89be82bf00b6f4022a97d8d565522b8";
};
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ fuse lvm2 wxGTK nasm ];
meta = {
description = "Free Open-Source filesystem on-the-fly encryption";
homepage = http://www.truecrypt.org/;
license = "TrueCrypt License Version 2.6";
maintainers = with stdenv.lib.maintainers; [ ryantm ];
platforms = with stdenv.lib.platforms; linux;
};
}

View File

@ -1,61 +0,0 @@
--- Main/Resources.cpp 2016-05-16 16:47:35.846462041 +0200
+++ Main/Resources.cpp 2016-05-16 17:12:21.838202520 +0200
@@ -45,13 +45,13 @@
strBuf.CopyFrom (res);
return string (reinterpret_cast <char *> (strBuf.Ptr()));
#else
- static const char LanguageXml[] =
+ static byte LanguageXml[] =
{
# include "Common/Language.xml.h"
, 0
};
- return string (LanguageXml);
+ return string ((const char*) LanguageXml);
#endif
}
@@ -64,13 +64,13 @@
strBuf.CopyFrom (res);
return string (reinterpret_cast <char *> (strBuf.Ptr()));
#else
- static const char License[] =
+ static byte License[] =
{
# include "License.txt.h"
, 0
};
- return string (License);
+ return string ((const char*) License);
#endif
}
--- Main/Forms/PreferencesDialog.cpp 2016-05-16 17:14:47.704707908 +0200
+++ Main/Forms/PreferencesDialog.cpp 2016-05-16 17:15:56.927964437 +0200
@@ -414,11 +414,11 @@
libExtension = wxDynamicLibrary::CanonicalizeName (L"x");
#ifdef TC_MACOSX
- extensions.push_back (make_pair (L"dylib", LangString["DLL_FILES"]));
+ extensions.push_back (make_pair (L"dylib", static_cast<const wchar_t*>(LangString["DLL_FILES"].wc_str())));
#endif
if (!libExtension.empty())
{
- extensions.push_back (make_pair (libExtension.Mid (libExtension.find (L'.') + 1), LangString["DLL_FILES"]));
+ extensions.push_back (make_pair (static_cast<const wchar_t*>(libExtension.Mid (libExtension.find (L'.') + 1).wc_str()), static_cast<const wchar_t*>(LangString["DLL_FILES"].wc_str())));
extensions.push_back (make_pair (L"*", L""));
}
--- Main/GraphicUserInterface.cpp 2016-05-16 17:16:38.724591342 +0200
+++ Main/GraphicUserInterface.cpp 2016-05-16 17:17:09.854562653 +0200
@@ -1445,7 +1445,7 @@
FilePath GraphicUserInterface::SelectVolumeFile (wxWindow *parent, bool saveMode, const DirectoryPath &directory) const
{
list < pair <wstring, wstring> > extensions;
- extensions.push_back (make_pair (L"tc", LangString["TC_VOLUMES"]));
+ extensions.push_back (make_pair (L"tc", static_cast<const wchar_t*>(LangString["TC_VOLUMES"].wc_str())));
FilePathList selFiles = Gui->SelectFiles (parent, LangString[saveMode ? "OPEN_NEW_VOLUME" : "OPEN_VOL_TITLE"], saveMode, false, extensions, directory);

View File

@ -1,43 +1,38 @@
{ fetchurl, stdenv, pkgconfig, yasm, fuse, wxGTK30, lvm2, makeself, { stdenv, fetchurl, pkgconfig, makeself, yasm, fuse, wxGTK, lvm2 }:
wxGUI ? true
}:
with stdenv.lib; with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "veracrypt-${version}"; pname = "veracrypt";
version = "1.22"; name = "${pname}-${version}";
version = "1.23";
src = fetchurl { src = fetchurl {
url = "https://launchpad.net/veracrypt/trunk/${version}/+download/VeraCrypt_${version}_Source.tar.bz2"; url = "https://launchpad.net/${pname}/trunk/${version}/+download/VeraCrypt_${version}_Source.tar.bz2";
sha256 = "0w5qyxnx03vn93ach1kb995w2mdg43s82gf1isbk206sxp00qk4y"; sha256 = "009lqi43n2w272sxv7y7dz9sqx15qkx6lszkswr8mwmkpgkm0px1";
}; };
unpackPhase = sourceRoot = "src";
''
tar xjf $src
cd src
'';
nativeBuildInputs = [ makeself yasm pkgconfig ]; nativeBuildInputs = [ makeself pkgconfig yasm ];
buildInputs = [ fuse lvm2 ] buildInputs = [ fuse lvm2 wxGTK ];
++ optional wxGUI wxGTK30;
makeFlags = optionalString (!wxGUI) "NOGUI=1";
installPhase = enableParallelBuilding = true;
''
mkdir -p $out/bin installPhase = ''
cp Main/veracrypt $out/bin install -Dm 755 Main/${pname} "$out/bin/${pname}"
mkdir -p $out/share/$name install -Dm 444 Resources/Icons/VeraCrypt-256x256.xpm "$out/share/pixmaps/${pname}.xpm"
cp License.txt $out/share/$name/LICENSE install -Dm 444 License.txt -t "$out/share/doc/${pname}/"
mkdir -p $out/share/applications install -d $out/share/applications
sed "s,Exec=.*,Exec=$out/bin/veracrypt," Setup/Linux/veracrypt.desktop > $out/share/applications/veracrypt.desktop substitute Setup/Linux/${pname}.desktop $out/share/applications/${pname}.desktop \
''; --replace "Exec=/usr/bin/veracrypt" "Exec=$out/bin/veracrypt" \
--replace "Icon=veracrypt" "Icon=veracrypt.xpm"
'';
meta = { meta = {
description = "Free Open-Source filesystem on-the-fly encryption"; description = "Free Open-Source filesystem on-the-fly encryption";
homepage = https://www.veracrypt.fr/; homepage = https://www.veracrypt.fr/;
license = "VeraCrypt License"; license = [ licenses.asl20 /* or */ "TrueCrypt License version 3.0" ];
maintainers = with maintainers; [ dsferruzza ]; maintainers = with maintainers; [ dsferruzza ];
platforms = platforms.linux; platforms = platforms.linux;
}; };

View File

@ -1,4 +1,4 @@
{ stdenv, gn, ninja, which, nodejs, fetchurl, fetchpatch, gnutar { stdenv, llvmPackages, gn, ninja, which, nodejs, fetchurl, fetchpatch, gnutar
# default dependencies # default dependencies
, bzip2, flac, speex, libopus , bzip2, flac, speex, libopus
@ -130,14 +130,16 @@ let
patches = optional enableWideVine ./patches/widevine.patch ++ [ patches = optional enableWideVine ./patches/widevine.patch ++ [
./patches/nix_plugin_paths_68.patch ./patches/nix_plugin_paths_68.patch
./patches/remove-webp-include-69.patch ./patches/remove-webp-include-69.patch
# Unfortunately, chromium regularly breaks on major updates and # Unfortunately, chromium regularly breaks on major updates and
# then needs various patches backported. Good sources for such patches and other hints: # then needs various patches backported in order to be compiled with GCC.
# Good sources for such patches and other hints:
# - https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/ # - https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/
# - https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/chromium # - https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/chromium
# - https://github.com/chromium/chromium/search?q=GCC&s=committer-date&type=Commits # - https://github.com/chromium/chromium/search?q=GCC&s=committer-date&type=Commits
# #
# ++ optional (versionRange "68" "72") ( githubPatch "<patch>" "0000000000000000000000000000000000000000000000000000000000000000" ) # ++ optional (versionRange "68" "72") ( githubPatch "<patch>" "0000000000000000000000000000000000000000000000000000000000000000" )
] ++ optionals (versionOlder version "71") [ ] ++ optionals (!stdenv.cc.isClang && (versionRange "70" "71")) [
( githubPatch "cbdb8bd6567c8143dc8c1e5e86a21a8ea064eea4" "0258qlffp6f6izswczb11p8zdpn550z5yqa9z7gdg2rg5171n5i8" ) ( githubPatch "cbdb8bd6567c8143dc8c1e5e86a21a8ea064eea4" "0258qlffp6f6izswczb11p8zdpn550z5yqa9z7gdg2rg5171n5i8" )
( githubPatch "e98f8ef8b2f236ecbb01df8c39e6ee1c8fbe8d7d" "1ky5xrzch6aya87kn0bgb31lksl3g8kh2v8k676ks7pdl2v132p9" ) ( githubPatch "e98f8ef8b2f236ecbb01df8c39e6ee1c8fbe8d7d" "1ky5xrzch6aya87kn0bgb31lksl3g8kh2v8k676ks7pdl2v132p9" )
( githubPatch "a4de8da116585357c123d71e5f54d1103824c6df" "1y7afnjrsz6j2l3vy1ms8mrkbb51xhcafw9r371algi48il7rajm" ) ( githubPatch "a4de8da116585357c123d71e5f54d1103824c6df" "1y7afnjrsz6j2l3vy1ms8mrkbb51xhcafw9r371algi48il7rajm" )
@ -207,10 +209,16 @@ let
'' + optionalString stdenv.isAarch64 '' '' + optionalString stdenv.isAarch64 ''
substituteInPlace build/toolchain/linux/BUILD.gn \ substituteInPlace build/toolchain/linux/BUILD.gn \
--replace 'toolprefix = "aarch64-linux-gnu-"' 'toolprefix = ""' --replace 'toolprefix = "aarch64-linux-gnu-"' 'toolprefix = ""'
'' + optionalString stdenv.cc.isClang ''
mkdir -p third_party/llvm-build/Release+Asserts/bin
ln -s ${stdenv.cc}/bin/clang third_party/llvm-build/Release+Asserts/bin/clang
ln -s ${stdenv.cc}/bin/clang++ third_party/llvm-build/Release+Asserts/bin/clang++
ln -s ${llvmPackages.llvm}/bin/llvm-ar third_party/llvm-build/Release+Asserts/bin/llvm-ar
''; '';
gnFlags = mkGnFlags ({ gnFlags = mkGnFlags ({
linux_use_bundled_binutils = false; linux_use_bundled_binutils = false;
use_lld = false;
use_gold = true; use_gold = true;
gold_path = "${stdenv.cc}/bin"; gold_path = "${stdenv.cc}/bin";
is_debug = false; is_debug = false;
@ -224,7 +232,7 @@ let
use_cups = cupsSupport; use_cups = cupsSupport;
treat_warnings_as_errors = false; treat_warnings_as_errors = false;
is_clang = false; is_clang = stdenv.cc.isClang;
clang_use_chrome_plugins = false; clang_use_chrome_plugins = false;
remove_webcore_debug_symbols = true; remove_webcore_debug_symbols = true;
enable_swiftshader = false; enable_swiftshader = false;

View File

@ -1,4 +1,4 @@
{ newScope, stdenv, makeWrapper, makeDesktopItem, ed { newScope, stdenv, llvmPackages, makeWrapper, makeDesktopItem, ed
, glib, gtk3, gnome3, gsettings-desktop-schemas , glib, gtk3, gnome3, gsettings-desktop-schemas
# package customization # package customization
@ -14,11 +14,12 @@
, commandLineArgs ? "" , commandLineArgs ? ""
}: }:
assert stdenv.cc.isClang -> (stdenv == llvmPackages.stdenv);
let let
callPackage = newScope chromium; callPackage = newScope chromium;
chromium = { chromium = {
inherit stdenv; inherit stdenv llvmPackages;
upstream-info = (callPackage ./update.nix {}).getChannel channel; upstream-info = (callPackage ./update.nix {}).getChannel channel;

View File

@ -1,4 +1,4 @@
{ stdenv { stdenv, gcc
, jshon , jshon
, glib , glib
, nspr , nspr
@ -69,7 +69,7 @@ let
! find -iname '*.so' -exec ldd {} + | grep 'not found' ! find -iname '*.so' -exec ldd {} + | grep 'not found'
''; '';
PATCH_RPATH = mkrpath [ stdenv.cc.cc glib nspr nss ]; PATCH_RPATH = mkrpath [ gcc.cc glib nspr nss ];
patchPhase = '' patchPhase = ''
chmod +x libwidevinecdm.so libwidevinecdmadapter.so chmod +x libwidevinecdm.so libwidevinecdmadapter.so
@ -110,7 +110,7 @@ let
patchPhase = '' patchPhase = ''
chmod +x libpepflashplayer.so chmod +x libpepflashplayer.so
patchelf --set-rpath "${mkrpath [ stdenv.cc.cc ]}" libpepflashplayer.so patchelf --set-rpath "${mkrpath [ gcc.cc ]}" libpepflashplayer.so
''; '';
doCheck = true; doCheck = true;

View File

@ -1,18 +1,18 @@
# This file is autogenerated from update.sh in the same directory. # This file is autogenerated from update.sh in the same directory.
{ {
beta = { beta = {
sha256 = "0dqfwghl73gcmbnl9wb3i5wz8q65y1vhg7n0m2nh0hv33w1w4mp9"; sha256 = "0kkdfp5f3gmzngfj1nfw023bpyvm47h94k9rpwml2kxlijswd1gl";
sha256bin64 = "0x7npns1ng7p4w1qswcj889v9lplvy2wv1ccxrk4ilyqiwzvwy1z"; sha256bin64 = "13ghx5ysl8f2iphdvjh698q4jksh765ljjrd74m6x0ih6qm0ksaq";
version = "70.0.3538.67"; version = "71.0.3578.20";
}; };
dev = { dev = {
sha256 = "1kw0rn58s4nd43z2qkjph7aid0s3jnmm650d7k1yxppgmfsal246"; sha256 = "1d7q8hbqbxy2izdvv4d9126ljiglsfc3w7wns3zbbbiyqa2rj00y";
sha256bin64 = "0518qrghjk5jlzhmynk6nngp5i81bpxi3880gimpbd7bblj6dg7y"; sha256bin64 = "0v6yahsvsgxcqg6k84lgr589rnx9af1r2axn7cggyn1a2lk63jck";
version = "71.0.3578.10"; version = "72.0.3590.0";
}; };
stable = { stable = {
sha256 = "0dqfwghl73gcmbnl9wb3i5wz8q65y1vhg7n0m2nh0hv33w1w4mp9"; sha256 = "0j84556r3m4igigqsx9zvw4kvbn4psfsi7m8xhcvfxc39ingh569";
sha256bin64 = "0ihs2xfb2zn8aq11kg7miw9rnjwc6l4k5jgf24dm661463xmd3ha"; sha256bin64 = "082cf9d1wm36w4i09ai4xnprvxfqdar6cbgsxz5q5srd41mqdy6p";
version = "70.0.3538.67"; version = "70.0.3538.77";
}; };
} }

View File

@ -14,12 +14,6 @@ let
sha256 = "11acb0ms4jrswp7268nm2p8g8l4lv8zc666a5bqjbb09x9k6b78k"; sha256 = "11acb0ms4jrswp7268nm2p8g8l4lv8zc666a5bqjbb09x9k6b78k";
}; };
firefox60_triplet_patch = fetchpatch {
name = "triplet.patch";
url = https://hg.mozilla.org/releases/mozilla-release/raw-rev/bc651d3d910c;
sha256 = "0iybkadsgsf6a3pq3jh8z1p110vmpkih8i35jfj8micdkhxzi89g";
};
in in
rec { rec {
@ -116,8 +110,7 @@ rec {
find . -exec touch -d'2010-01-01 00:00' {} \; find . -exec touch -d'2010-01-01 00:00' {} \;
''; '';
patches = nixpkgsPatches patches = nixpkgsPatches;
++ lib.optional (args.tbversion == "8.0.2") firefox60_triplet_patch;
meta = { meta = {
description = "A web browser built from TorBrowser source tree"; description = "A web browser built from TorBrowser source tree";
@ -173,16 +166,16 @@ in rec {
}; };
tor-browser-8-0 = tbcommon rec { tor-browser-8-0 = tbcommon rec {
ffversion = "60.2.1esr"; ffversion = "60.3.0esr";
tbversion = "8.0.2"; tbversion = "8.0.3";
# FIXME: fetchFromGitHub is not ideal, unpacked source is >900Mb # FIXME: fetchFromGitHub is not ideal, unpacked source is >900Mb
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "SLNOS"; owner = "SLNOS";
repo = "tor-browser"; repo = "tor-browser";
# branch "tor-browser-60.2.1esr-8.0-1-slnos" # branch "tor-browser-60.3.0esr-8.0-1-slnos"
rev = "4f71403a3e6203baa349a8f81d8664782c5ea548"; rev = "bd512ad9c40069adfc983f4f03dbd9d220cdf2f9";
sha256 = "0zxdi162gpnfca7g77hc0rw4wkmxhfzp9hfmw6dpn97d5kn1zqq3"; sha256 = "1j349aqiqrf58zrx8pkqvh292w41v1vwr7x7dmd74hq4pi2iwpn8";
}; };
}; };

View File

@ -28,12 +28,12 @@ let
in python3Packages.buildPythonApplication rec { in python3Packages.buildPythonApplication rec {
pname = "qutebrowser"; pname = "qutebrowser";
version = "1.5.1"; version = "1.5.2";
# the release tarballs are different from the git checkout! # the release tarballs are different from the git checkout!
src = fetchurl { src = fetchurl {
url = "https://github.com/qutebrowser/qutebrowser/releases/download/v${version}/${pname}-${version}.tar.gz"; url = "https://github.com/qutebrowser/qutebrowser/releases/download/v${version}/${pname}-${version}.tar.gz";
sha256 = "1yn181gscj04ni58swk6cmggn047q29siqwgn66pvxhfdf0ny7fq"; sha256 = "0ki19mynq91aih3kxhipnay3jmn56s7p6rilws0gq0k98li6a4my";
}; };
# Needs tox # Needs tox

View File

@ -13,11 +13,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "${product}-${version}"; name = "${product}-${version}";
product = "vivaldi"; product = "vivaldi";
version = "2.0.1309.29-2"; version = "2.1.1337.36-1";
src = fetchurl { src = fetchurl {
url = "https://downloads.vivaldi.com/stable/${product}-stable_${version}_amd64.deb"; url = "https://downloads.vivaldi.com/stable/${product}-stable_${version}_amd64.deb";
sha256 = "09vaf191djbrfijvhklivh2ifj8w68car2vz956gsw4lhz07kzck"; sha256 = "14qf3gk46m65yfc7q7gsnkj6av8yhg7byi0h1yv24sr7n4rrnrsc";
}; };
unpackPhase = '' unpackPhase = ''

View File

@ -6,11 +6,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "${product}-${version}"; name = "${product}-${version}";
product = "vivaldi-ffmpeg-codecs"; product = "vivaldi-ffmpeg-codecs";
version = "69.0.3497.73"; version = "70.0.3538.77";
src = fetchurl { src = fetchurl {
url = "https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${version}.tar.xz"; url = "https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${version}.tar.xz";
sha512 = "3qyzxdybiszwy62izr35wffnh1a1plg9y536vrmd4b2xl8p4nz18c7439blr0cdzsr5qplgrdl64446a27mkyhbw8c3iy0gb4zgb5j9"; sha512 = "128hvkcbyw70j31dj4jviqqjrzyfx38689nb8v0kk5vi2zlgfy5ibz2gyrv4bvrb53ld262y9pvam51nbdmrx2vqd9xrs173py7v0a0";
}; };
buildInputs = [ ]; buildInputs = [ ];

View File

@ -1,4 +1,6 @@
{ stdenv, newScope, makeWrapper, electron, xdg_utils, makeDesktopItem { stdenv, newScope, makeWrapper
, wrapGAppsHook, gnome3, glib
, electron, xdg_utils, makeDesktopItem
, auth0ClientID ? "0spuNKfIGeLAQ_Iki9t3fGxbfJl3k8SU" , auth0ClientID ? "0spuNKfIGeLAQ_Iki9t3fGxbfJl3k8SU"
, auth0Domain ? "nixpkgs.auth0.com" }: , auth0Domain ? "nixpkgs.auth0.com" }:
@ -26,16 +28,25 @@ with self;
stdenv.mkDerivation { stdenv.mkDerivation {
name = "rambox-${rambox-bare.version}"; name = "rambox-${rambox-bare.version}";
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
buildInputs = [ glib gnome3.gsettings_desktop_schemas ];
unpackPhase = ":"; unpackPhase = ":";
dontWrapGApps = true; # we only want $gappsWrapperArgs here
installPhase = '' installPhase = ''
makeWrapper ${electron}/bin/electron $out/bin/rambox \ runHook preInstall
--add-flags "${rambox-bare} --without-update" \
--prefix PATH : ${xdg_utils}/bin
mkdir -p $out/share/applications mkdir -p $out/share/applications
ln -s ${desktopItem}/share/applications/* $out/share/applications ln -s ${desktopItem}/share/applications/* $out/share/applications
runHook postInstall
'';
postFixup = ''
makeWrapper ${electron}/bin/electron $out/bin/rambox \
--add-flags "${rambox-bare} --without-update" \
"''${gappsWrapperArgs[@]}" \
--prefix PATH : ${xdg_utils}/bin
''; '';
inherit (rambox-bare.meta // { inherit (rambox-bare.meta // {

View File

@ -1,15 +1,15 @@
{ stdenv, fetchurl, gzip, which, unzip, jdk }: { stdenv, fetchurl, gzip, which, unzip, jdk }:
let let
version = "6.5.3.6"; version = "6.6.0.13";
srcs = { srcs = {
i686-linux = fetchurl { i686-linux = fetchurl {
url = "https://cdn.sencha.com/cmd/${version}/no-jre/SenchaCmd-${version}-linux-i386.sh.zip"; url = "https://cdn.sencha.com/cmd/${version}/no-jre/SenchaCmd-${version}-linux-i386.sh.zip";
sha256 = "0g3hk3fdgmkdsr6ck1fgsmaxa9wbj2fpk84rk382ff9ny55bbzv9"; sha256 = "15b197108b49mf0afpihkh3p68lxm7580zz2w0xsbahglnvhwyfz";
}; };
x86_64-linux = fetchurl { x86_64-linux = fetchurl {
url = "https://cdn.sencha.com/cmd/${version}/no-jre/SenchaCmd-${version}-linux-amd64.sh.zip"; url = "https://cdn.sencha.com/cmd/${version}/no-jre/SenchaCmd-${version}-linux-amd64.sh.zip";
sha256 = "08j8gak1xsxdjgkv6s24jv97jc49pi5yf906ynjmxb27wqpxn9mz"; sha256 = "1cxhckmx1802p9qiw09cgb1v5f30wcvnrwkshmia8p8n0q47lpp4";
}; };
}; };
in in

View File

@ -56,11 +56,11 @@ let
in stdenv.mkDerivation rec { in stdenv.mkDerivation rec {
name = "signal-desktop-${version}"; name = "signal-desktop-${version}";
version = "1.17.1"; version = "1.17.2";
src = fetchurl { src = fetchurl {
url = "https://updates.signal.org/desktop/apt/pool/main/s/signal-desktop/signal-desktop_${version}_amd64.deb"; url = "https://updates.signal.org/desktop/apt/pool/main/s/signal-desktop/signal-desktop_${version}_amd64.deb";
sha256 = "1cvgjllnbdsr61pz6r4dkbbz58cf69k7p8wriyp1vpzkdi7k5bpl"; sha256 = "1ibci07w4dh7r0dkwb3nbqm470rgak2a98rlqf8390rxrinfli3p";
}; };
phases = [ "unpackPhase" "installPhase" ]; phases = [ "unpackPhase" "installPhase" ];

View File

@ -4,7 +4,7 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "inboxer-${version}"; name = "inboxer-${version}";
version = "1.1.5"; version = "1.2.1";
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Unofficial, free and open-source Google Inbox Desktop App"; description = "Unofficial, free and open-source Google Inbox Desktop App";
@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
src = fetchurl { src = fetchurl {
url = "https://github.com/denysdovhan/inboxer/releases/download/v${version}/inboxer_${version}_amd64.deb"; url = "https://github.com/denysdovhan/inboxer/releases/download/v${version}/inboxer_${version}_amd64.deb";
sha256 = "11xid07rqn7j6nxn0azxwf0g8g3jhams2fmf9q7xc1is99zfy7z4"; sha256 = "0nyxas07d6ckgjazxapmc6iyakd2cddla6wflr5rhfp78d7kax3a";
}; };
unpackPhase = '' unpackPhase = ''

View File

@ -17,6 +17,7 @@ let
in stdenv.mkDerivation { in stdenv.mkDerivation {
name = "wireshark-${variant}-${version}"; name = "wireshark-${variant}-${version}";
outputs = [ "out" "dev" ];
src = fetchurl { src = fetchurl {
url = "https://www.wireshark.org/download/src/all-versions/wireshark-${version}.tar.xz"; url = "https://www.wireshark.org/download/src/all-versions/wireshark-${version}.tar.xz";
@ -87,6 +88,16 @@ in stdenv.mkDerivation {
--replace "Exec=wireshark" "Exec=$out/bin/wireshark" --replace "Exec=wireshark" "Exec=$out/bin/wireshark"
install -Dm644 ../image/wsicon.svg $out/share/icons/wireshark.svg install -Dm644 ../image/wsicon.svg $out/share/icons/wireshark.svg
mkdir $dev/include/{epan/{wmem,ftypes,dfilter},wsutil,wiretap} -pv
cp config.h $dev/include/
cp ../ws_*.h $dev/include
cp ../epan/*.h $dev/include/epan/
cp ../epan/wmem/*.h $dev/include/epan/wmem/
cp ../epan/ftypes/*.h $dev/include/epan/ftypes/
cp ../epan/dfilter/*.h $dev/include/epan/dfilter/
cp ../wsutil/*.h $dev/include/wsutil/
cp ../wiretap/*.h $dev/include/wiretap
''; '';
enableParallelBuilding = true; enableParallelBuilding = true;

View File

@ -4,6 +4,9 @@
, withTcl ? false, tcl , withTcl ? false, tcl
, withCyrus ? true, cyrus_sasl , withCyrus ? true, cyrus_sasl
, withUnicode ? true, icu , withUnicode ? true, icu
, withZlib ? true, zlib
, withIPv6 ? true
, withDebug ? false
}: }:
with stdenv.lib; with stdenv.lib;
@ -24,7 +27,8 @@ stdenv.mkDerivation rec {
++ optional withPython python3 ++ optional withPython python3
++ optional withTcl tcl ++ optional withTcl tcl
++ optional withCyrus cyrus_sasl ++ optional withCyrus cyrus_sasl
++ optional withUnicode icu; ++ optional withUnicode icu
++ optional withZlib zlib;
configureFlags = [ configureFlags = [
(stdenv.lib.enableFeature withPerl "perl") (stdenv.lib.enableFeature withPerl "perl")
@ -32,7 +36,8 @@ stdenv.mkDerivation rec {
(stdenv.lib.enableFeature withTcl "tcl") (stdenv.lib.enableFeature withTcl "tcl")
(stdenv.lib.withFeatureAs withTcl "tcl" "${tcl}/lib") (stdenv.lib.withFeatureAs withTcl "tcl" "${tcl}/lib")
(stdenv.lib.enableFeature withCyrus "cyrus") (stdenv.lib.enableFeature withCyrus "cyrus")
]; ] ++ optional (!withIPv6) [ "--disable-ipv6" ]
++ optional withDebug [ "--enable-debug" ];
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Advanced IRC bouncer"; description = "Advanced IRC bouncer";

View File

@ -9,6 +9,8 @@ let
inherit buildPhase; inherit buildPhase;
inherit installPhase; inherit installPhase;
buildInputs = znc.buildInputs;
meta = a.meta // { platforms = stdenv.lib.platforms.unix; }; meta = a.meta // { platforms = stdenv.lib.platforms.unix; };
passthru.module_name = module_name; passthru.module_name = module_name;
}); });

View File

@ -1,16 +1,16 @@
{ stdenv, python3, glibcLocales }: { stdenv, python3, glibcLocales, fetchpatch }:
let let
inherit (python3.pkgs) buildPythonApplication fetchPypi; inherit (python3.pkgs) buildPythonApplication fetchPypi;
in in
buildPythonApplication rec { buildPythonApplication rec {
pname = "todoman"; pname = "todoman";
version = "3.4.0"; version = "3.4.1";
name = "${pname}-${version}"; name = "${pname}-${version}";
src = fetchPypi { src = fetchPypi {
inherit pname version; inherit pname version;
sha256 = "09441fdrwz2irsbrxnpwys51372z6rn6gnxn87p95r3fv9gmh0fw"; sha256 = "1rvid1rklvgvsf6xmxd91j2fi46v4fzn5z6zbs5yn0wpb0k605r5";
}; };
LOCALE_ARCHIVE = stdenv.lib.optionalString stdenv.isLinux LOCALE_ARCHIVE = stdenv.lib.optionalString stdenv.isLinux
@ -29,9 +29,17 @@ buildPythonApplication rec {
makeWrapperArgs = [ "--set LOCALE_ARCHIVE ${glibcLocales}/lib/locale/locale-archive" makeWrapperArgs = [ "--set LOCALE_ARCHIVE ${glibcLocales}/lib/locale/locale-archive"
"--set CHARSET en_us.UTF-8" ]; "--set CHARSET en_us.UTF-8" ];
patches = [
(fetchpatch {
url = "https://github.com/pimutils/todoman/commit/3e191111b72df9ec91a773befefa291799374422.patch";
sha256 = "12mskbp0d8p2lllkxm3m9wyy2hsbnz2qs297civsc3ly2l5bcrag";
})
];
preCheck = '' preCheck = ''
# Remove one failing test that only checks whether the command line works # Remove one failing test that only checks whether the command line works
rm tests/test_main.py rm tests/test_main.py
rm tests/test_cli.py
''; '';
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -1,97 +0,0 @@
# - coqide compilation can be disabled by setting lablgtk to null;
# - The csdp program used for the Micromega tactic is statically referenced.
# However, coq can build without csdp by setting it to null.
# In this case some Micromega tactics will search the user's path for the csdp program and will fail if it is not found.
{stdenv, fetchurl, pkgconfig, writeText, ocaml, findlib, camlp5, ncurses, lablgtk ? null, csdp ? null}:
let
version = "8.4pl6";
coq-version = "8.4";
buildIde = lablgtk != null;
ideFlags = if buildIde then "-lablgtkdir ${lablgtk}/lib/ocaml/*/site-lib/lablgtk2 -coqide opt" else "";
csdpPatch = if csdp != null then ''
substituteInPlace plugins/micromega/sos.ml --replace "; csdp" "; ${csdp}/bin/csdp"
substituteInPlace plugins/micromega/coq_micromega.ml --replace "System.is_in_system_path \"csdp\"" "true"
'' else "";
self =
stdenv.mkDerivation {
name = "coq-${version}";
inherit coq-version;
inherit ocaml camlp5;
src = fetchurl {
url = "https://coq.inria.fr/distrib/V${version}/files/coq-${version}.tar.gz";
sha256 = "1mpbj4yf36kpjg2v2sln12i8dzqn8rag6fd07hslj2lpm4qs4h55";
};
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ ocaml findlib camlp5 ncurses lablgtk ];
patches = [ ./configure.patch ];
postPatch = ''
UNAME=$(type -tp uname)
RM=$(type -tp rm)
substituteInPlace configure --replace "/bin/uname" "$UNAME"
substituteInPlace tools/beautify-archive --replace "/bin/rm" "$RM"
${csdpPatch}
'';
preConfigure = ''
configureFlagsArray=(
-opt
-camldir ${ocaml}/bin
-camlp5dir $(ocamlfind query camlp5)
${ideFlags}
)
'';
prefixKey = "-prefix ";
buildFlags = "revision coq coqide";
setupHook = writeText "setupHook.sh" ''
addCoqPath () {
if test -d "''$1/lib/coq/${coq-version}/user-contrib"; then
export COQPATH="''${COQPATH}''${COQPATH:+:}''$1/lib/coq/${coq-version}/user-contrib/"
fi
}
addEnvHooks "$targetOffset" addCoqPath
'';
passthru = {
inherit findlib;
emacsBufferSetup = pkgs: ''
; Propagate coq paths to children
(inherit-local-permanent coq-prog-name "${self}/bin/coqtop")
(inherit-local-permanent coq-dependency-analyzer "${self}/bin/coqdep")
(inherit-local-permanent coq-compiler "${self}/bin/coqc")
; If the coq-library path was already set, re-set it based on our current coq
(when (fboundp 'get-coq-library-directory)
(inherit-local-permanent coq-library-directory (get-coq-library-directory))
(coq-prog-args))
(mapc (lambda (arg)
(when (file-directory-p (concat arg "/lib/coq/${coq-version}/user-contrib"))
(setenv "COQPATH" (concat (getenv "COQPATH") ":" arg "/lib/coq/${coq-version}/user-contrib")))) '(${stdenv.lib.concatStringsSep " " (map (pkg: "\"${pkg}\"") pkgs)}))
'';
};
meta = with stdenv.lib; {
description = "Formal proof management system";
longDescription = ''
Coq is a formal proof management system. It provides a formal language
to write mathematical definitions, executable algorithms and theorems
together with an environment for semi-interactive development of
machine-checked proofs.
'';
homepage = http://coq.inria.fr;
license = licenses.lgpl21;
branch = coq-version;
maintainers = with maintainers; [ roconnor thoughtpolice vbgl ];
platforms = platforms.unix;
};
}; in self

View File

@ -1,11 +0,0 @@
diff -Nuar coq-8.3pl3-orig/configure coq-8.3pl3/configure
--- coq-8.3pl3-orig/configure 2011-12-19 22:57:30.000000000 +0100
+++ coq-8.3pl3/configure 2012-03-17 16:38:16.000000000 +0100
@@ -395,7 +395,6 @@
ocamlyaccexec=$CAMLBIN/ocamlyacc
ocamlmktopexec=$CAMLBIN/ocamlmktop
ocamlmklibexec=$CAMLBIN/ocamlmklib
- camlp4oexec=$CAMLBIN/camlp4o
esac
if test ! -f "$CAMLC" ; then

View File

@ -58,6 +58,13 @@ stdenv.mkDerivation rec {
url = "https://git.archlinux.org/svntogit/community.git/plain/trunk/sagemath-lcalc-c++11.patch?h=packages/sagemath&id=0e31ae526ab7c6b5c0bfacb3f8b1c4fd490035aa"; url = "https://git.archlinux.org/svntogit/community.git/plain/trunk/sagemath-lcalc-c++11.patch?h=packages/sagemath&id=0e31ae526ab7c6b5c0bfacb3f8b1c4fd490035aa";
sha256 = "0p5wnvbx65i7cp0bjyaqgp4rly8xgnk12pqwaq3dqby0j2bk6ijb"; sha256 = "0p5wnvbx65i7cp0bjyaqgp4rly8xgnk12pqwaq3dqby0j2bk6ijb";
}) })
# https://trac.sagemath.org/ticket/26360
(fetchpatch {
name = "arb-2.15.1.patch";
url = "https://git.sagemath.org/sage.git/patch/?id=30cc778d46579bd0c7537ed33e8d7a4f40fd5c31";
sha256 = "13vc2q799dh745sm59xjjabllfj0sfjzcacf8k59kwj04x755d30";
})
]; ];
patches = nixPatches ++ packageUpgradePatches ++ [ patches = nixPatches ++ packageUpgradePatches ++ [

View File

@ -8,7 +8,7 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = sage.version; version = sage.version;
name = "sage-wrapper-${version}"; name = "sage-${version}";
buildInputs = [ buildInputs = [
makeWrapper makeWrapper

View File

@ -5,7 +5,7 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = sage-with-env.version; version = sage-with-env.version;
name = "sage-${version}"; name = "sage-tests-${version}";
buildInputs = [ buildInputs = [
makeWrapper makeWrapper

View File

@ -39,7 +39,7 @@ buildGoPackage rec {
postInstall = '' postInstall = ''
mkdir $data mkdir $data
cp -R $src/{public,templates} $data cp -R $src/{public,templates,options} $data
mkdir -p $out mkdir -p $out
cp -R $src/options/locale $out/locale cp -R $src/options/locale $out/locale

View File

@ -11,29 +11,29 @@ let
groups = [ "default" "unicorn" "ed25519" "metrics" ]; groups = [ "default" "unicorn" "ed25519" "metrics" ];
}; };
version = "11.4.0"; version = "11.4.3";
sources = if gitlabEnterprise then { sources = if gitlabEnterprise then {
gitlabDeb = fetchurl { gitlabDeb = fetchurl {
url = "https://packages.gitlab.com/gitlab/gitlab-ee/packages/debian/stretch/gitlab-ee_${version}-ee.0_amd64.deb/download.deb"; url = "https://packages.gitlab.com/gitlab/gitlab-ee/packages/debian/stretch/gitlab-ee_${version}-ee.0_amd64.deb/download.deb";
sha256 = "1y2a8acgsgrgcjazijsflhxq4fwqvd9yhrjx5pcncb24vl0x6dg4"; sha256 = "1cw75qj508z6n00rqgqjzdm2013kyb7c57cypmq0m08nc6f3jspz";
}; };
gitlab = fetchFromGitLab { gitlab = fetchFromGitLab {
owner = "gitlab-org"; owner = "gitlab-org";
repo = "gitlab-ee"; repo = "gitlab-ee";
rev = "v${version}-ee"; rev = "v${version}-ee";
sha256 = "1pyqk1c5bml7chs4pq1fcxkrhk5r327xx9my6zmp2cb503s5m590"; sha256 = "1vqc77whpbsifbm9vgcmpxnw13v8jz1s9q04i8jfv99c59fjlids";
}; };
} else { } else {
gitlabDeb = fetchurl { gitlabDeb = fetchurl {
url = "https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/stretch/gitlab-ce_${version}-ce.0_amd64.deb/download.deb"; url = "https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/stretch/gitlab-ce_${version}-ce.0_amd64.deb/download.deb";
sha256 = "0wiizjihn1a6hg6a2wpwmnh5a34n102va4djac3sgx74mwx4bniq"; sha256 = "0vk03k42pp92h520wnynl9czcigjhj9m7y68z1x0gwqr9m61r7zm";
}; };
gitlab = fetchFromGitLab { gitlab = fetchFromGitLab {
owner = "gitlab-org"; owner = "gitlab-org";
repo = "gitlab-ce"; repo = "gitlab-ce";
rev = "v${version}"; rev = "v${version}";
sha256 = "1a8pavqc9bblss5z9ikc9b0k0ra33vw73zy7rvn0v1wgvbqpc24k"; sha256 = "1zvjz2gv2vwqqjz52zcvi0ap3d8rdbpgsqk9wv80hqq4v37a5gfx";
}; };
}; };

View File

@ -1,24 +1,35 @@
{ stdenv, fetchurl, rustPlatform, darwin }: { stdenv, fetchurl, rustPlatform, darwin, openssl, libsodium, pkgconfig }:
with rustPlatform; with rustPlatform;
buildRustPackage rec { buildRustPackage rec {
name = "pijul-${version}"; name = "pijul-${version}";
version = "0.8.0"; version = "0.10.0";
src = fetchurl { src = fetchurl {
url = "https://pijul.org/releases/${name}.tar.gz"; url = "https://pijul.org/releases/${name}.tar.gz";
sha256 = "00pi03yp2bgnjpsz2hgaapxfw2i4idbjqc88cagpvn4yr1612wqx"; sha256 = "1lkipcp83rfsj9yqddvb46dmqdf2ch9njwvjv8f3g91rmfjcngys";
}; };
sourceRoot = "${name}/pijul"; cargoPatches = [
./libpijul.patch
];
buildInputs = stdenv.lib.optionals stdenv.isDarwin nativeBuildInputs = [ pkgconfig ];
postInstall = ''
mkdir -p $out/share/{bash-completion/completions,zsh/site-functions,fish/vendor_completions.d}
$out/bin/pijul generate-completions --bash > $out/share/bash-completion/completions/pijul
$out/bin/pijul generate-completions --zsh > $out/share/zsh/site-functions/_pijul
$out/bin/pijul generate-completions --fish > $out/share/fish/vendor_completions.d/pijul.fish
'';
buildInputs = [ openssl libsodium ] ++ stdenv.lib.optionals stdenv.isDarwin
(with darwin.apple_sdk.frameworks; [ Security ]); (with darwin.apple_sdk.frameworks; [ Security ]);
doCheck = false; doCheck = false;
cargoSha256 = "1cnr08qbpia3336l37k1jli20d7kwnrw2gys8s9mg271cb4vdx03"; cargoSha256 = "1419mlxa4p53hm5qzfd1yi2k0n1bcv8kaslls1nyx661vknhfamw";
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "A distributed version control system"; description = "A distributed version control system";

View File

@ -0,0 +1,61 @@
--- 2/pijul-0.10.0/Cargo.lock 1970-01-01 01:00:00.000000000 +0100
+++ pijul-0.10.0/Cargo.lock 2018-10-28 10:09:48.557639255 +0000
@@ -552,7 +552,7 @@
[[package]]
name = "libpijul"
-version = "0.10.0"
+version = "0.10.1"
dependencies = [
"base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -577,9 +577,29 @@
[[package]]
name = "libpijul"
-version = "0.10.0"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-replace = "libpijul 0.10.0"
+dependencies = [
+ "base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bincode 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ignore 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "openssl 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sanakirja 0.8.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thrussh-keys 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "line"
@@ -917,7 +937,7 @@
"hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"ignore 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"isatty 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "libpijul 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libpijul 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
"line 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"pager 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1796,7 +1816,7 @@
"checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef"
"checksum libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)" = "6fd41f331ac7c5b8ac259b8bf82c75c0fb2e469bbf37d2becbba9a6a2221965b"
"checksum libflate 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "1a429b86418868c7ea91ee50e9170683f47fd9d94f5375438ec86ec3adb74e8e"
-"checksum libpijul 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "80fd579ba6762eac3f12c9624d5496edaba5a2f2e8785bcf8310372328e06ebe"
+"checksum libpijul 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cf6fc1aa0e9402f8283bdeb2507cfb6798d2f2f973da34c3f4b0c96a456b74cd"
"checksum line 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ecdd22a3856203276b7854e16213139428e82922530438f36356e5b361ea4a42"
"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
"checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2"

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