mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-21 11:34:13 +00:00
Merge branch master into x-updates
Conflicts (trivial, minor update on master, major here): pkgs/development/libraries/mesa/default.nix
This commit is contained in:
commit
68430cf3d7
50
doc/meta.xml
50
doc/meta.xml
@ -118,6 +118,56 @@ interpretation:</para>
|
|||||||
package).</para></listitem>
|
package).</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>platforms</varname></term>
|
||||||
|
<listitem><para>The list of Nix platform types on which the
|
||||||
|
package is supported. If this attribute is set, the package will
|
||||||
|
refuse to build, and won’t show up in <literal>nix-env
|
||||||
|
-qa</literal> output, on any platform not listed
|
||||||
|
here. An example is:
|
||||||
|
|
||||||
|
<programlisting>
|
||||||
|
meta.platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
The set <varname>lib.platforms</varname> defines various common
|
||||||
|
lists of platforms types, so it’s more typical to write:
|
||||||
|
|
||||||
|
<programlisting>
|
||||||
|
meta.platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>hydraPlatforms</varname></term>
|
||||||
|
<listitem><para>The list of Nix platform types for which the Hydra
|
||||||
|
instance at <literal>hydra.nixos.org</literal> should build the
|
||||||
|
package. (Hydra is the Nix-based continuous build system.) It
|
||||||
|
defaults to the value of <varname>meta.platforms</varname>. Thus,
|
||||||
|
the only reason to set <varname>meta.hydraPlatforms</varname> is
|
||||||
|
if you want <literal>hydra.nixos.org</literal> to build the
|
||||||
|
package on a subset of <varname>meta.platforms</varname>, or not
|
||||||
|
at all, e.g.
|
||||||
|
|
||||||
|
<programlisting>
|
||||||
|
meta.platforms = stdenv.lib.platforms.linux;
|
||||||
|
meta.hydraPlatforms = [];
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>broken</varname></term>
|
||||||
|
<listitem><para>If set to <literal>true</literal>, the package is
|
||||||
|
marked as “broken”, meaning that it won’t show up in
|
||||||
|
<literal>nix-env -qa</literal>, and cannot be built or installed.
|
||||||
|
Sush packages should be removed from Nixpkgs eventually unless
|
||||||
|
they are fixed.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Operations on attribute sets.
|
# Operations on attribute sets.
|
||||||
|
|
||||||
with {
|
with {
|
||||||
inherit (builtins) head tail isString;
|
inherit (builtins) head tail;
|
||||||
inherit (import ./trivial.nix) or;
|
inherit (import ./trivial.nix) or;
|
||||||
inherit (import ./default.nix) fold;
|
inherit (import ./default.nix) fold;
|
||||||
inherit (import ./strings.nix) concatStringsSep;
|
inherit (import ./strings.nix) concatStringsSep;
|
||||||
@ -20,7 +20,7 @@ rec {
|
|||||||
let attr = head attrPath;
|
let attr = head attrPath;
|
||||||
in
|
in
|
||||||
if attrPath == [] then e
|
if attrPath == [] then e
|
||||||
else if builtins ? hasAttr && hasAttr attr e
|
else if hasAttr attr e
|
||||||
then attrByPath (tail attrPath) default (getAttr attr e)
|
then attrByPath (tail attrPath) default (getAttr attr e)
|
||||||
else default;
|
else default;
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ rec {
|
|||||||
(AttrSet -> Bool) -> AttrSet -> AttrSet
|
(AttrSet -> Bool) -> AttrSet -> AttrSet
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
collect builtins.isList { a = { b = ["b"]; }; c = [1]; }
|
collect isList { a = { b = ["b"]; }; c = [1]; }
|
||||||
=> [["b"] [1]]
|
=> [["b"] [1]]
|
||||||
|
|
||||||
collect (x: x ? outPath)
|
collect (x: x ? outPath)
|
||||||
@ -110,7 +110,7 @@ rec {
|
|||||||
collect = pred: attrs:
|
collect = pred: attrs:
|
||||||
if pred attrs then
|
if pred attrs then
|
||||||
[ attrs ]
|
[ attrs ]
|
||||||
else if builtins.isAttrs attrs then
|
else if isAttrs attrs then
|
||||||
concatMap (collect pred) (attrValues attrs)
|
concatMap (collect pred) (attrValues attrs)
|
||||||
else
|
else
|
||||||
[];
|
[];
|
||||||
|
@ -21,8 +21,6 @@ let
|
|||||||
in
|
in
|
||||||
{ inherit trivial lists strings stringsWithDeps attrsets sources options
|
{ inherit trivial lists strings stringsWithDeps attrsets sources options
|
||||||
modules types meta debug maintainers licenses platforms systems;
|
modules types meta debug maintainers licenses platforms systems;
|
||||||
# Pull in some builtins not included elsewhere.
|
|
||||||
inherit (builtins) pathExists readFile;
|
|
||||||
}
|
}
|
||||||
# !!! don't include everything at top-level; perhaps only the most
|
# !!! don't include everything at top-level; perhaps only the most
|
||||||
# commonly used functions.
|
# commonly used functions.
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
# General list operations.
|
# General list operations.
|
||||||
let
|
|
||||||
|
|
||||||
inherit (import ./trivial.nix) deepSeq;
|
with import ./trivial.nix;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
inc = builtins.add 1;
|
inc = builtins.add 1;
|
||||||
|
|
||||||
dec = n: builtins.sub n 1;
|
dec = n: builtins.sub n 1;
|
||||||
|
|
||||||
in rec {
|
in rec {
|
||||||
inherit (builtins) head tail length isList add sub lessThan elemAt;
|
|
||||||
|
inherit (builtins) head tail length isList elemAt concatLists filter elem;
|
||||||
|
|
||||||
|
|
||||||
# Create a list consisting of a single element. `singleton x' is
|
# Create a list consisting of a single element. `singleton x' is
|
||||||
@ -55,10 +57,6 @@ in rec {
|
|||||||
else [ (f (inc n) (elemAt list n)) ] ++ imap' (inc n);
|
else [ (f (inc n) (elemAt list n)) ] ++ imap' (inc n);
|
||||||
in imap' 0;
|
in imap' 0;
|
||||||
|
|
||||||
|
|
||||||
# Concatenate a list of lists.
|
|
||||||
concatLists = builtins.concatLists or (fold (x: y: x ++ y) []);
|
|
||||||
|
|
||||||
|
|
||||||
# Map and concatenate the result.
|
# Map and concatenate the result.
|
||||||
concatMap = f: list: concatLists (map f list);
|
concatMap = f: list: concatLists (map f list);
|
||||||
@ -72,24 +70,10 @@ in rec {
|
|||||||
then fold (x: y: (flatten x) ++ y) [] x
|
then fold (x: y: (flatten x) ++ y) [] x
|
||||||
else [x];
|
else [x];
|
||||||
|
|
||||||
|
|
||||||
# Filter a list using a predicate; that is, return a list containing
|
|
||||||
# every element from `list' for which `pred' returns true.
|
|
||||||
filter =
|
|
||||||
builtins.filter or
|
|
||||||
(pred: list:
|
|
||||||
fold (x: y: if pred x then [x] ++ y else y) [] list);
|
|
||||||
|
|
||||||
|
|
||||||
# Remove elements equal to 'e' from a list. Useful for buildInputs.
|
# Remove elements equal to 'e' from a list. Useful for buildInputs.
|
||||||
remove = e: filter (x: x != e);
|
remove = e: filter (x: x != e);
|
||||||
|
|
||||||
|
|
||||||
# Return true if `list' has an element `x'.
|
|
||||||
elem =
|
|
||||||
builtins.elem or
|
|
||||||
(x: list: fold (a: bs: x == a || bs) false list);
|
|
||||||
|
|
||||||
|
|
||||||
# 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
|
||||||
@ -106,7 +90,7 @@ in rec {
|
|||||||
findFirst = pred: default: list:
|
findFirst = pred: default: list:
|
||||||
let found = filter pred list;
|
let found = filter pred list;
|
||||||
in if found == [] then default else head found;
|
in if found == [] then default else head found;
|
||||||
|
|
||||||
|
|
||||||
# Return true iff function `pred' returns true for at least element
|
# Return true iff function `pred' returns true for at least element
|
||||||
# of `list'.
|
# of `list'.
|
||||||
@ -136,16 +120,16 @@ in rec {
|
|||||||
# If argument is a list, return it; else, wrap it in a singleton
|
# If argument is a list, return it; else, wrap it in a singleton
|
||||||
# list. If you're using this, you should almost certainly
|
# list. If you're using this, you should almost certainly
|
||||||
# reconsider if there isn't a more "well-typed" approach.
|
# reconsider if there isn't a more "well-typed" approach.
|
||||||
toList = x: if builtins.isList x then x else [x];
|
toList = x: if isList x then x else [x];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Return a list of integers from `first' up to and including `last'.
|
# Return a list of integers from `first' up to and including `last'.
|
||||||
range = first: last:
|
range = first: last:
|
||||||
if builtins.lessThan last first
|
if lessThan last first
|
||||||
then []
|
then []
|
||||||
else [first] ++ range (builtins.add first 1) last;
|
else [first] ++ range (add first 1) last;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Partition the elements of a list in two lists, `right' and
|
# Partition 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.
|
||||||
partition = pred:
|
partition = pred:
|
||||||
@ -160,7 +144,7 @@ in rec {
|
|||||||
let
|
let
|
||||||
len1 = length fst;
|
len1 = length fst;
|
||||||
len2 = length snd;
|
len2 = length snd;
|
||||||
len = if builtins.lessThan len1 len2 then len1 else len2;
|
len = if lessThan len1 len2 then len1 else len2;
|
||||||
zipListsWith' = n:
|
zipListsWith' = n:
|
||||||
if n != len then
|
if n != len then
|
||||||
[ (f (elemAt fst n) (elemAt snd n)) ]
|
[ (f (elemAt fst n) (elemAt snd n)) ]
|
||||||
@ -207,7 +191,7 @@ in rec {
|
|||||||
[ (elemAt list n) ] ++ take' (inc n);
|
[ (elemAt list n) ] ++ take' (inc n);
|
||||||
in take' 0;
|
in take' 0;
|
||||||
|
|
||||||
|
|
||||||
# Remove the first (at most) N elements of a list.
|
# Remove the first (at most) N elements of a list.
|
||||||
drop = count: list:
|
drop = count: list:
|
||||||
let
|
let
|
||||||
@ -219,7 +203,8 @@ in rec {
|
|||||||
drop' (dec n) ++ [ (elemAt list n) ];
|
drop' (dec n) ++ [ (elemAt list n) ];
|
||||||
in drop' (dec len);
|
in drop' (dec len);
|
||||||
|
|
||||||
|
|
||||||
|
# Return the last element of a list.
|
||||||
last = list:
|
last = list:
|
||||||
assert list != []; elemAt list (dec (length list));
|
assert list != []; elemAt list (dec (length list));
|
||||||
|
|
||||||
@ -237,5 +222,7 @@ in rec {
|
|||||||
else [];
|
else [];
|
||||||
in zipTwoLists' 0;
|
in zipTwoLists' 0;
|
||||||
|
|
||||||
|
|
||||||
deepSeqList = xs: y: if any (x: deepSeq x false) xs then y else y;
|
deepSeqList = xs: y: if any (x: deepSeq x false) xs then y else y;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -63,4 +63,5 @@
|
|||||||
winden = "Antonio Vargas Gonzalez <windenntw@gmail.com>";
|
winden = "Antonio Vargas Gonzalez <windenntw@gmail.com>";
|
||||||
z77z = "Marco Maggesi <maggesi@math.unifi.it>";
|
z77z = "Marco Maggesi <maggesi@math.unifi.it>";
|
||||||
zef = "Zef Hemel <zef@zef.me>";
|
zef = "Zef Hemel <zef@zef.me>";
|
||||||
|
zoomulator = "Kim Simmons <zoomulator@gmail.com>";
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ rec {
|
|||||||
closeModules = modules: args:
|
closeModules = modules: args:
|
||||||
let
|
let
|
||||||
toClosureList = file: parentKey: imap (n: x:
|
toClosureList = file: parentKey: imap (n: x:
|
||||||
if isAttrs x || builtins.isFunction x then
|
if isAttrs x || isFunction x then
|
||||||
unifyModuleSyntax file "${parentKey}:anon-${toString n}" (applyIfFunction x args)
|
unifyModuleSyntax file "${parentKey}:anon-${toString n}" (applyIfFunction x args)
|
||||||
else
|
else
|
||||||
unifyModuleSyntax (toString x) (toString x) (applyIfFunction (import x) args));
|
unifyModuleSyntax (toString x) (toString x) (applyIfFunction (import x) args));
|
||||||
@ -74,7 +74,7 @@ rec {
|
|||||||
config = removeAttrs m ["key" "_file" "require" "imports"];
|
config = removeAttrs m ["key" "_file" "require" "imports"];
|
||||||
};
|
};
|
||||||
|
|
||||||
applyIfFunction = f: arg: if builtins.isFunction f then f arg else f;
|
applyIfFunction = f: arg: if isFunction f then f arg else f;
|
||||||
|
|
||||||
/* Merge a list of modules. This will recurse over the option
|
/* Merge a list of modules. This will recurse over the option
|
||||||
declarations in all modules, combining them into a single set.
|
declarations in all modules, combining them into a single set.
|
||||||
@ -260,7 +260,7 @@ rec {
|
|||||||
options' = opt.options or
|
options' = opt.options or
|
||||||
(throw "Option `${showOption loc'}' has type optionSet but has no option attribute.");
|
(throw "Option `${showOption loc'}' has type optionSet but has no option attribute.");
|
||||||
coerce = x:
|
coerce = x:
|
||||||
if builtins.isFunction x then x
|
if isFunction x then x
|
||||||
else { config, ... }: { options = x; };
|
else { config, ... }: { options = x; };
|
||||||
options = map coerce (flatten options');
|
options = map coerce (flatten options');
|
||||||
f = tp:
|
f = tp:
|
||||||
|
@ -34,12 +34,12 @@ rec {
|
|||||||
mergeDefaultOption = loc: defs:
|
mergeDefaultOption = loc: defs:
|
||||||
let list = getValues defs; in
|
let list = getValues defs; in
|
||||||
if length list == 1 then head list
|
if length list == 1 then head list
|
||||||
else if all builtins.isFunction list then x: mergeDefaultOption loc (map (f: f x) list)
|
else if all isFunction list then x: mergeDefaultOption loc (map (f: f x) list)
|
||||||
else if all isList list then concatLists list
|
else if all isList list then concatLists list
|
||||||
else if all isAttrs list then fold lib.mergeAttrs {} list
|
else if all isAttrs list then fold lib.mergeAttrs {} list
|
||||||
else if all builtins.isBool list then fold lib.or false list
|
else if all isBool list then fold lib.or false list
|
||||||
else if all builtins.isString list then lib.concatStrings list
|
else if all isString list then lib.concatStrings list
|
||||||
else if all builtins.isInt list && all (x: x == head list) list then head list
|
else if all isInt list && all (x: x == head list) list then head list
|
||||||
else throw "Cannot merge definitions of `${showOption loc}' given in ${showFiles (getFiles defs)}.";
|
else throw "Cannot merge definitions of `${showOption loc}' given in ${showFiles (getFiles defs)}.";
|
||||||
|
|
||||||
/* Obsolete, will remove soon. Specify an option type or apply
|
/* Obsolete, will remove soon. Specify an option type or apply
|
||||||
@ -54,7 +54,7 @@ rec {
|
|||||||
|
|
||||||
mergeListOption = mergeTypedOption "list" isList concatLists;
|
mergeListOption = mergeTypedOption "list" isList concatLists;
|
||||||
|
|
||||||
mergeStringOption = mergeTypedOption "string" builtins.isString lib.concatStrings;
|
mergeStringOption = mergeTypedOption "string" isString lib.concatStrings;
|
||||||
|
|
||||||
mergeOneOption = loc: defs:
|
mergeOneOption = loc: defs:
|
||||||
if defs == [] then abort "This case should never happen."
|
if defs == [] then abort "This case should never happen."
|
||||||
|
@ -2,9 +2,9 @@ let lists = import ./lists.nix; in
|
|||||||
|
|
||||||
rec {
|
rec {
|
||||||
gnu = linux; /* ++ hurd ++ kfreebsd ++ ... */
|
gnu = linux; /* ++ hurd ++ kfreebsd ++ ... */
|
||||||
linux = ["i686-linux" "x86_64-linux" "powerpc-linux" "armv5tel-linux" "armv7l-linux" "mips64el-linux"];
|
linux = ["i686-linux" "x86_64-linux" "armv5tel-linux" "armv7l-linux" "mips64el-linux"];
|
||||||
darwin = ["x86_64-darwin"];
|
darwin = ["x86_64-darwin"];
|
||||||
freebsd = ["i686-freebsd" "x86_64-freebsd" "powerpc-freebsd"];
|
freebsd = ["i686-freebsd" "x86_64-freebsd"];
|
||||||
openbsd = ["i686-openbsd" "x86_64-openbsd"];
|
openbsd = ["i686-openbsd" "x86_64-openbsd"];
|
||||||
netbsd = ["i686-netbsd" "x86_64-netbsd"];
|
netbsd = ["i686-netbsd" "x86_64-netbsd"];
|
||||||
cygwin = ["i686-cygwin"];
|
cygwin = ["i686-cygwin"];
|
||||||
|
@ -7,7 +7,8 @@ inherit (builtins) add sub lessThan length;
|
|||||||
in
|
in
|
||||||
|
|
||||||
rec {
|
rec {
|
||||||
inherit (builtins) stringLength substring head tail;
|
|
||||||
|
inherit (builtins) stringLength substring head tail isString;
|
||||||
|
|
||||||
|
|
||||||
# Concatenate a list of strings.
|
# Concatenate a list of strings.
|
||||||
|
@ -16,7 +16,7 @@ rec {
|
|||||||
or = x: y: x || y;
|
or = x: y: x || y;
|
||||||
and = x: y: x && y;
|
and = x: y: x && y;
|
||||||
mergeAttrs = x: y: x // y;
|
mergeAttrs = x: y: x // y;
|
||||||
|
|
||||||
# Take a function and evaluate it with its own returned value.
|
# Take a function and evaluate it with its own returned value.
|
||||||
fix = f: let result = f result; in result;
|
fix = f: let result = f result; in result;
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ rec {
|
|||||||
# `seq x y' evaluates x, then returns y. That is, it forces strict
|
# `seq x y' evaluates x, then returns y. That is, it forces strict
|
||||||
# evaluation of its first argument.
|
# evaluation of its first argument.
|
||||||
seq = x: y: if x == null then y else y;
|
seq = x: y: if x == null then y else y;
|
||||||
|
|
||||||
# Like `seq', but recurses into lists and attribute sets to force evaluation
|
# Like `seq', but recurses into lists and attribute sets to force evaluation
|
||||||
# of all list elements/attributes.
|
# of all list elements/attributes.
|
||||||
deepSeq = x: y:
|
deepSeq = x: y:
|
||||||
@ -35,4 +35,10 @@ rec {
|
|||||||
else if builtins.isAttrs x
|
else if builtins.isAttrs x
|
||||||
then deepSeqAttrs x y
|
then deepSeqAttrs x y
|
||||||
else seq x y;
|
else seq x y;
|
||||||
|
|
||||||
|
# Pull in some builtins not included elsewhere.
|
||||||
|
inherit (builtins)
|
||||||
|
pathExists readFile isBool isFunction
|
||||||
|
isInt add sub lessThan;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -48,19 +48,19 @@ rec {
|
|||||||
|
|
||||||
bool = mkOptionType {
|
bool = mkOptionType {
|
||||||
name = "boolean";
|
name = "boolean";
|
||||||
check = builtins.isBool;
|
check = isBool;
|
||||||
merge = loc: fold (x: y: x.value || y) false;
|
merge = loc: fold (x: y: x.value || y) false;
|
||||||
};
|
};
|
||||||
|
|
||||||
int = mkOptionType {
|
int = mkOptionType {
|
||||||
name = "integer";
|
name = "integer";
|
||||||
check = builtins.isInt;
|
check = isInt;
|
||||||
merge = mergeOneOption;
|
merge = mergeOneOption;
|
||||||
};
|
};
|
||||||
|
|
||||||
str = mkOptionType {
|
str = mkOptionType {
|
||||||
name = "string";
|
name = "string";
|
||||||
check = builtins.isString;
|
check = isString;
|
||||||
merge = mergeOneOption;
|
merge = mergeOneOption;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ rec {
|
|||||||
# separator between the values).
|
# separator between the values).
|
||||||
separatedString = sep: mkOptionType {
|
separatedString = sep: mkOptionType {
|
||||||
name = "string";
|
name = "string";
|
||||||
check = builtins.isString;
|
check = isString;
|
||||||
merge = loc: defs: concatStringsSep sep (getValues defs);
|
merge = loc: defs: concatStringsSep sep (getValues defs);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -170,7 +170,7 @@ rec {
|
|||||||
|
|
||||||
functionTo = elemType: mkOptionType {
|
functionTo = elemType: mkOptionType {
|
||||||
name = "function that evaluates to a(n) ${elemType.name}";
|
name = "function that evaluates to a(n) ${elemType.name}";
|
||||||
check = builtins.isFunction;
|
check = isFunction;
|
||||||
merge = loc: defs:
|
merge = loc: defs:
|
||||||
fnArgs: elemType.merge loc (map (fn: { inherit (fn) file; value = fn.value fnArgs; }) defs);
|
fnArgs: elemType.merge loc (map (fn: { inherit (fn) file; value = fn.value fnArgs; }) defs);
|
||||||
getSubOptions = elemType.getSubOptions;
|
getSubOptions = elemType.getSubOptions;
|
||||||
@ -183,10 +183,10 @@ rec {
|
|||||||
in
|
in
|
||||||
mkOptionType rec {
|
mkOptionType rec {
|
||||||
name = "submodule";
|
name = "submodule";
|
||||||
check = x: isAttrs x || builtins.isFunction x;
|
check = x: isAttrs x || isFunction x;
|
||||||
merge = loc: defs:
|
merge = loc: defs:
|
||||||
let
|
let
|
||||||
coerce = def: if builtins.isFunction def then def else { config = def; };
|
coerce = def: if isFunction def then def else { config = def; };
|
||||||
modules = opts' ++ map (def: { _file = def.file; imports = [(coerce def.value)]; }) defs;
|
modules = opts' ++ map (def: { _file = def.file; imports = [(coerce def.value)]; }) defs;
|
||||||
in (evalModules { inherit modules; args.name = last loc; prefix = loc; }).config;
|
in (evalModules { inherit modules; args.name = last loc; prefix = loc; }).config;
|
||||||
getSubOptions = prefix: (evalModules
|
getSubOptions = prefix: (evalModules
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
{ pkgs, options
|
{ pkgs, options, version, revision }:
|
||||||
, revision ? "master"
|
|
||||||
}:
|
|
||||||
|
|
||||||
with pkgs.lib;
|
with pkgs.lib;
|
||||||
|
|
||||||
@ -60,6 +58,7 @@ in rec {
|
|||||||
buildCommand = ''
|
buildCommand = ''
|
||||||
ln -s $sources/*.xml . # */
|
ln -s $sources/*.xml . # */
|
||||||
ln -s ${optionsDocBook} options-db.xml
|
ln -s ${optionsDocBook} options-db.xml
|
||||||
|
echo "${version}" > version
|
||||||
|
|
||||||
# Check the validity of the manual sources.
|
# Check the validity of the manual sources.
|
||||||
xmllint --noout --nonet --xinclude --noxincludenode \
|
xmllint --noout --nonet --xinclude --noxincludenode \
|
||||||
|
@ -369,9 +369,23 @@ $ nixos-rebuild build-vm
|
|||||||
$ ./result/bin/run-*-vm
|
$ ./result/bin/run-*-vm
|
||||||
</screen>
|
</screen>
|
||||||
|
|
||||||
The VM does not have use any data from your host system, so your
|
The VM does not have any data from your host system, so your existing
|
||||||
existing user accounts and home directories will not be
|
user accounts and home directories will not be available. You can
|
||||||
available.</para>
|
forward ports on the host to the guest. For instance, the following
|
||||||
|
will forward host port 2222 to guest port 22 (SSH):
|
||||||
|
|
||||||
|
<screen>
|
||||||
|
$ QEMU_NET_OPTS="hostfwd=tcp::2222-:22" ./result/bin/run-*-vm
|
||||||
|
</screen>
|
||||||
|
|
||||||
|
allowing you to log in via SSH (assuming you have set the appropriate
|
||||||
|
passwords or SSH authorized keys):
|
||||||
|
|
||||||
|
<screen>
|
||||||
|
$ ssh -p 2222 localhost
|
||||||
|
</screen>
|
||||||
|
|
||||||
|
</para>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
<info>
|
<info>
|
||||||
|
|
||||||
<title>NixOS Manual</title>
|
<title>NixOS Manual</title>
|
||||||
|
<subtitle>Version <xi:include href="version" parse="text" /></subtitle>
|
||||||
|
|
||||||
<author>
|
<author>
|
||||||
<personname>
|
<personname>
|
||||||
|
@ -16,7 +16,7 @@ parser.add_argument('--hvm', dest='hvm', action='store_true', help='Create HVM i
|
|||||||
parser.add_argument('--key', dest='key_name', action='store_true', help='Keypair used for HVM instance creation', default="rob")
|
parser.add_argument('--key', dest='key_name', action='store_true', help='Keypair used for HVM instance creation', default="rob")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
instance_type = "cc1.4xlarge" if args.hvm else "m1.small"
|
instance_type = "m3.xlarge" if args.hvm else "m1.small"
|
||||||
ebs_size = 8 if args.hvm else 20
|
ebs_size = 8 if args.hvm else 20
|
||||||
|
|
||||||
|
|
||||||
@ -72,7 +72,8 @@ print >> sys.stderr, "NixOS version is {0}".format(version)
|
|||||||
m.upload_file("./amazon-base-config.nix", "/mnt/etc/nixos/configuration.nix")
|
m.upload_file("./amazon-base-config.nix", "/mnt/etc/nixos/configuration.nix")
|
||||||
m.run_command("nixos-install")
|
m.run_command("nixos-install")
|
||||||
if args.hvm:
|
if args.hvm:
|
||||||
m.run_command('cp /mnt/nix/store/*-grub-0.97*/lib/grub/i386-pc/* /mnt/boot/grub')
|
m.run_command('nix-env -iA nixos.pkgs.grub')
|
||||||
|
m.run_command('cp /nix/store/*-grub-0.97*/lib/grub/i386-pc/* /mnt/boot/grub')
|
||||||
m.run_command('sed -i "s|hd0|hd0,0|" /mnt/boot/grub/menu.lst')
|
m.run_command('sed -i "s|hd0|hd0,0|" /mnt/boot/grub/menu.lst')
|
||||||
m.run_command('echo "(hd1) /dev/xvdg" > device.map')
|
m.run_command('echo "(hd1) /dev/xvdg" > device.map')
|
||||||
m.run_command('echo -e "root (hd1,0)\nsetup (hd1)" | grub --device-map=device.map --batch')
|
m.run_command('echo -e "root (hd1,0)\nsetup (hd1)" | grub --device-map=device.map --batch')
|
||||||
@ -98,7 +99,7 @@ def check():
|
|||||||
m.connect()
|
m.connect()
|
||||||
volume = m._conn.get_all_volumes([], filters={'attachment.instance-id': m.resource_id, 'attachment.device': "/dev/sdg"})[0]
|
volume = m._conn.get_all_volumes([], filters={'attachment.instance-id': m.resource_id, 'attachment.device': "/dev/sdg"})[0]
|
||||||
if args.hvm:
|
if args.hvm:
|
||||||
instance = m._conn.run_instances( image_id="ami-6a9e4503"
|
instance = m._conn.run_instances( image_id="ami-5f491f36"
|
||||||
, instance_type=instance_type
|
, instance_type=instance_type
|
||||||
, key_name=args.key_name
|
, key_name=args.key_name
|
||||||
, placement=m.zone
|
, placement=m.zone
|
||||||
@ -185,7 +186,7 @@ f.write(
|
|||||||
'''.format(args.region, ami_id, instance_type))
|
'''.format(args.region, ami_id, instance_type))
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
test_depl = deployment.create_deployment(db)
|
test_depl = db.create_deployment()
|
||||||
test_depl.auto_response = "y"
|
test_depl.auto_response = "y"
|
||||||
test_depl.name = "ebs-creator-test"
|
test_depl.name = "ebs-creator-test"
|
||||||
test_depl.nix_exprs = [os.path.abspath("./ebs-test.nix")]
|
test_depl.nix_exprs = [os.path.abspath("./ebs-test.nix")]
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
#! /bin/sh -e
|
#! /bin/sh -e
|
||||||
|
|
||||||
nixos=$(nix-instantiate --find-file nixos)
|
|
||||||
export NIXOS_CONFIG=$(dirname $(readlink -f $0))/amazon-base-config.nix
|
export NIXOS_CONFIG=$(dirname $(readlink -f $0))/amazon-base-config.nix
|
||||||
|
|
||||||
version=$(nix-instantiate --eval-only '<nixos>' -A config.system.nixosVersion | sed s/'"'//g)
|
version=$(nix-instantiate --eval-only '<nixpkgs/nixos>' -A config.system.nixosVersion | sed s/'"'//g)
|
||||||
echo "NixOS version is $version"
|
echo "NixOS version is $version"
|
||||||
|
|
||||||
buildAndUploadFor() {
|
buildAndUploadFor() {
|
||||||
@ -11,13 +10,13 @@ buildAndUploadFor() {
|
|||||||
arch="$2"
|
arch="$2"
|
||||||
|
|
||||||
echo "building $system image..."
|
echo "building $system image..."
|
||||||
nix-build '<nixos>' \
|
nix-build '<nixpkgs/nixos>' \
|
||||||
-A config.system.build.amazonImage --argstr system "$system" -o ec2-ami
|
-A config.system.build.amazonImage --argstr system "$system" -o ec2-ami
|
||||||
|
|
||||||
ec2-bundle-image -i ./ec2-ami/nixos.img --user "$AWS_ACCOUNT" --arch "$arch" \
|
ec2-bundle-image -i ./ec2-ami/nixos.img --user "$AWS_ACCOUNT" --arch "$arch" \
|
||||||
-c "$EC2_CERT" -k "$EC2_PRIVATE_KEY"
|
-c "$EC2_CERT" -k "$EC2_PRIVATE_KEY"
|
||||||
|
|
||||||
for region in eu-west-1 us-east-1 us-west-1 us-west-2; do
|
for region in eu-west-1; do
|
||||||
echo "uploading $system image for $region..."
|
echo "uploading $system image for $region..."
|
||||||
|
|
||||||
name=nixos-$version-$arch-s3
|
name=nixos-$version-$arch-s3
|
||||||
|
@ -131,7 +131,7 @@ in {
|
|||||||
users.extraGroups.pulse.gid = gid;
|
users.extraGroups.pulse.gid = gid;
|
||||||
|
|
||||||
systemd.services.pulseaudio = {
|
systemd.services.pulseaudio = {
|
||||||
description = "PulseAudio system-wide server";
|
description = "PulseAudio System-Wide Server";
|
||||||
wantedBy = [ "sound.target" ];
|
wantedBy = [ "sound.target" ];
|
||||||
before = [ "sound.target" ];
|
before = [ "sound.target" ];
|
||||||
path = [ cfg.package ];
|
path = [ cfg.package ];
|
||||||
|
@ -31,9 +31,9 @@ in
|
|||||||
res = (head defs').value;
|
res = (head defs').value;
|
||||||
in
|
in
|
||||||
if isList res then concatLists (getValues defs')
|
if isList res then concatLists (getValues defs')
|
||||||
else if builtins.lessThan 1 (length defs') then
|
else if lessThan 1 (length defs') then
|
||||||
throw "The option `${showOption loc}' is defined multiple times, in ${showFiles (getFiles defs)}."
|
throw "The option `${showOption loc}' is defined multiple times, in ${showFiles (getFiles defs)}."
|
||||||
else if !builtins.isString res then
|
else if !isString res then
|
||||||
throw "The option `${showOption loc}' does not have a string value, in ${showFiles (getFiles defs)}."
|
throw "The option `${showOption loc}' does not have a string value, in ${showFiles (getFiles defs)}."
|
||||||
else res;
|
else res;
|
||||||
});
|
});
|
||||||
|
@ -6,7 +6,7 @@ let
|
|||||||
|
|
||||||
sysctlOption = mkOptionType {
|
sysctlOption = mkOptionType {
|
||||||
name = "sysctl option value";
|
name = "sysctl option value";
|
||||||
check = x: builtins.isBool x || builtins.isString x || builtins.isInt x;
|
check = x: isBool x || isString x || isInt x;
|
||||||
merge = args: defs: (last defs).value; # FIXME: hacky way to allow overriding in configuration.nix.
|
merge = args: defs: (last defs).value; # FIXME: hacky way to allow overriding in configuration.nix.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -188,6 +188,20 @@ in
|
|||||||
options = [ groupOpts ];
|
options = [ groupOpts ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
security.initialRootPassword = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "";
|
||||||
|
example = "!";
|
||||||
|
description = ''
|
||||||
|
The (hashed) password for the root account set on initial
|
||||||
|
installation. The empty string denotes that root can login
|
||||||
|
locally without a password (but not via remote services such
|
||||||
|
as SSH, or indirectly via <command>su</command> or
|
||||||
|
<command>sudo</command>). The string <literal>!</literal>
|
||||||
|
prevents root from logging in using a password.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -240,7 +254,23 @@ in
|
|||||||
# Can't use useradd, since it complains that it doesn't know us
|
# Can't use useradd, since it complains that it doesn't know us
|
||||||
# (bootstrap problem!).
|
# (bootstrap problem!).
|
||||||
echo "root:x:0:0:System administrator:$rootHome:${config.users.defaultUserShell}" >> /etc/passwd
|
echo "root:x:0:0:System administrator:$rootHome:${config.users.defaultUserShell}" >> /etc/passwd
|
||||||
echo "root::::::::" >> /etc/shadow
|
echo "root:${config.security.initialRootPassword}:::::::" >> /etc/shadow
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Print a reminder for users to set a root password.
|
||||||
|
environment.interactiveShellInit =
|
||||||
|
''
|
||||||
|
if [ "$UID" = 0 ]; then
|
||||||
|
read _l < /etc/shadow
|
||||||
|
if [ "''${_l:0:6}" = root:: ]; then
|
||||||
|
cat >&2 <<EOF
|
||||||
|
[1;31mWarning:[0m Your root account has a null password, allowing local users
|
||||||
|
to login as root. Please set a non-null password using \`passwd', or
|
||||||
|
disable password-based root logins using \`passwd -l'.
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
unset _l
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
{pkgs, config, ...}:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
with pkgs.lib;
|
||||||
|
|
||||||
let kernelVersion = config.boot.kernelPackages.kernel.version; in
|
let kernelVersion = config.boot.kernelPackages.kernel.version; in
|
||||||
|
|
||||||
@ -8,9 +10,9 @@ let kernelVersion = config.boot.kernelPackages.kernel.version; in
|
|||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
||||||
networking.enableB43Firmware = pkgs.lib.mkOption {
|
networking.enableB43Firmware = mkOption {
|
||||||
default = false;
|
default = false;
|
||||||
type = pkgs.lib.types.bool;
|
type = types.bool;
|
||||||
description = ''
|
description = ''
|
||||||
Turn on this option if you want firmware for the NICs supported by the b43 module.
|
Turn on this option if you want firmware for the NICs supported by the b43 module.
|
||||||
'';
|
'';
|
||||||
@ -21,11 +23,11 @@ let kernelVersion = config.boot.kernelPackages.kernel.version; in
|
|||||||
|
|
||||||
###### implementation
|
###### implementation
|
||||||
|
|
||||||
config = pkgs.lib.mkIf config.networking.enableB43Firmware {
|
config = mkIf config.networking.enableB43Firmware {
|
||||||
assertions = [ {
|
assertions = singleton
|
||||||
assertion = builtins.lessThan 0 (builtins.compareVersions kernelVersion "3.2");
|
{ assertion = lessThan 0 (builtins.compareVersions kernelVersion "3.2");
|
||||||
message = "b43 firmware for kernels older than 3.2 not packaged yet!";
|
message = "b43 firmware for kernels older than 3.2 not packaged yet!";
|
||||||
} ];
|
};
|
||||||
hardware.firmware = [ pkgs.b43Firmware_5_1_138 ];
|
hardware.firmware = [ pkgs.b43Firmware_5_1_138 ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ let
|
|||||||
# CD. These are installed into the "nixos" channel of the root
|
# CD. These are installed into the "nixos" channel of the root
|
||||||
# user, as expected by nixos-rebuild/nixos-install.
|
# user, as expected by nixos-rebuild/nixos-install.
|
||||||
channelSources = pkgs.runCommand "nixos-${config.system.nixosVersion}"
|
channelSources = pkgs.runCommand "nixos-${config.system.nixosVersion}"
|
||||||
{ expr = builtins.readFile ../../../lib/channel-expr.nix; }
|
{ expr = readFile ../../../lib/channel-expr.nix; }
|
||||||
''
|
''
|
||||||
mkdir -p $out/nixos
|
mkdir -p $out/nixos
|
||||||
cp -prd ${pkgs.path} $out/nixos/nixpkgs
|
cp -prd ${pkgs.path} $out/nixos/nixpkgs
|
||||||
|
@ -32,6 +32,12 @@ with pkgs.lib;
|
|||||||
# in the Nix store on the CD.
|
# in the Nix store on the CD.
|
||||||
isoImage.storeContents = [ pkgs.stdenv pkgs.busybox ];
|
isoImage.storeContents = [ pkgs.stdenv pkgs.busybox ];
|
||||||
|
|
||||||
|
# EFI booting
|
||||||
|
isoImage.makeEfiBootable = true;
|
||||||
|
|
||||||
# Add Memtest86+ to the CD.
|
# Add Memtest86+ to the CD.
|
||||||
boot.loader.grub.memtest86 = true;
|
boot.loader.grub.memtest86 = true;
|
||||||
|
|
||||||
|
# Get a console as soon as the initrd loads fbcon on EFI boot
|
||||||
|
boot.initrd.kernelModules = [ "fbcon" ];
|
||||||
}
|
}
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
# Move into base image once using 3.10 or later
|
|
||||||
|
|
||||||
require = [ ./installation-cd-minimal.nix ];
|
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_3_10;
|
|
||||||
|
|
||||||
# Get a console as soon as the initrd loads fbcon on EFI boot
|
|
||||||
boot.initrd.kernelModules = [ "fbcon" ];
|
|
||||||
|
|
||||||
isoImage.makeEfiBootable = true;
|
|
||||||
}
|
|
@ -44,31 +44,29 @@ let
|
|||||||
|
|
||||||
|
|
||||||
# The efi boot image
|
# The efi boot image
|
||||||
|
efiDir = pkgs.runCommand "efi-directory" {} ''
|
||||||
|
mkdir -p $out/efi/boot
|
||||||
|
cp -v ${pkgs.gummiboot}/lib/gummiboot/gummiboot${targetArch}.efi $out/efi/boot/boot${targetArch}.efi
|
||||||
|
mkdir -p $out/loader/entries
|
||||||
|
echo "title NixOS LiveCD" > $out/loader/entries/nixos-livecd.conf
|
||||||
|
echo "linux /boot/bzImage" >> $out/loader/entries/nixos-livecd.conf
|
||||||
|
echo "initrd /boot/initrd" >> $out/loader/entries/nixos-livecd.conf
|
||||||
|
echo "options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}" >> $out/loader/entries/nixos-livecd.conf
|
||||||
|
echo "default nixos-livecd" > $out/loader/loader.conf
|
||||||
|
echo "timeout 5" >> $out/loader/loader.conf
|
||||||
|
'';
|
||||||
|
|
||||||
efiImg = pkgs.runCommand "efi-image_eltorito" { buildInputs = [ pkgs.mtools ]; }
|
efiImg = pkgs.runCommand "efi-image_eltorito" { buildInputs = [ pkgs.mtools ]; }
|
||||||
''
|
''
|
||||||
#Let's hope 10M is enough
|
#Let's hope 10M is enough
|
||||||
dd bs=2048 count=5120 if=/dev/zero of="$out"
|
dd bs=2048 count=5120 if=/dev/zero of="$out"
|
||||||
${pkgs.dosfstools}/sbin/mkfs.vfat "$out"
|
${pkgs.dosfstools}/sbin/mkfs.vfat "$out"
|
||||||
mmd -i "$out" efi
|
mcopy -svi "$out" ${efiDir}/* ::
|
||||||
mmd -i "$out" efi/boot
|
mmd -i "$out" boot
|
||||||
mmd -i "$out" efi/nixos
|
|
||||||
mmd -i "$out" loader
|
|
||||||
mmd -i "$out" loader/entries
|
|
||||||
mcopy -v -i "$out" \
|
mcopy -v -i "$out" \
|
||||||
${pkgs.gummiboot}/lib/gummiboot/gummiboot${targetArch}.efi \
|
${config.boot.kernelPackages.kernel}/bzImage ::boot/bzImage
|
||||||
::efi/boot/boot${targetArch}.efi
|
|
||||||
mcopy -v -i "$out" \
|
mcopy -v -i "$out" \
|
||||||
${config.boot.kernelPackages.kernel}/bzImage ::bzImage
|
${config.system.build.initialRamdisk}/initrd ::boot/initrd
|
||||||
mcopy -v -i "$out" \
|
|
||||||
${config.system.build.initialRamdisk}/initrd ::efi/nixos/initrd
|
|
||||||
echo "title NixOS LiveCD" > boot-params
|
|
||||||
echo "linux /bzImage" >> boot-params
|
|
||||||
echo "initrd /efi/nixos/initrd" >> boot-params
|
|
||||||
echo "options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}" >> boot-params
|
|
||||||
mcopy -v -i "$out" boot-params ::loader/entries/nixos-livecd.conf
|
|
||||||
echo "default nixos-livecd" > boot-params
|
|
||||||
echo "timeout 5" >> boot-params
|
|
||||||
mcopy -v -i "$out" boot-params ::loader/loader.conf
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
targetArch = if pkgs.stdenv.isi686 then
|
targetArch = if pkgs.stdenv.isi686 then
|
||||||
@ -263,6 +261,12 @@ in
|
|||||||
{ source = efiImg;
|
{ source = efiImg;
|
||||||
target = "/boot/efi.img";
|
target = "/boot/efi.img";
|
||||||
}
|
}
|
||||||
|
{ source = "${efiDir}/efi";
|
||||||
|
target = "/efi";
|
||||||
|
}
|
||||||
|
{ source = "${efiDir}/loader";
|
||||||
|
target = "/loader";
|
||||||
|
}
|
||||||
] ++ mapAttrsToList (n: v: { source = v; target = "/boot/${n}"; }) config.boot.loader.grub.extraFiles;
|
] ++ mapAttrsToList (n: v: { source = v; target = "/boot/${n}"; }) config.boot.loader.grub.extraFiles;
|
||||||
|
|
||||||
# The Grub menu.
|
# The Grub menu.
|
||||||
|
@ -386,9 +386,6 @@ if ($showHardwareConfig) {
|
|||||||
boot.loader.grub.enable = false;
|
boot.loader.grub.enable = false;
|
||||||
boot.loader.gummiboot.enable = true;
|
boot.loader.gummiboot.enable = true;
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
# !!! Remove this when nixos is on 3.10 or greater by default
|
|
||||||
# EFI booting requires kernel >= 3.10
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_3_10;
|
|
||||||
EOF
|
EOF
|
||||||
} else {
|
} else {
|
||||||
$bootLoaderConfig = <<EOF;
|
$bootLoaderConfig = <<EOF;
|
||||||
|
@ -106,6 +106,7 @@
|
|||||||
firebird = 95;
|
firebird = 95;
|
||||||
redis = 96;
|
redis = 96;
|
||||||
haproxy = 97;
|
haproxy = 97;
|
||||||
|
mongodb = 98;
|
||||||
|
|
||||||
# When adding a uid, make sure it doesn't match an existing gid.
|
# When adding a uid, make sure it doesn't match an existing gid.
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ with pkgs.lib;
|
|||||||
system.defaultChannel = mkOption {
|
system.defaultChannel = mkOption {
|
||||||
internal = true;
|
internal = true;
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = https://nixos.org/channels/nixos-13.10;
|
default = https://nixos.org/channels/nixos-unstable;
|
||||||
description = "Default NixOS channel to which the root user is subscribed.";
|
description = "Default NixOS channel to which the root user is subscribed.";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ with pkgs.lib;
|
|||||||
mkDefault (if pathExists fn then readFile fn else "master");
|
mkDefault (if pathExists fn then readFile fn else "master");
|
||||||
|
|
||||||
# Note: code names must only increase in alphabetical order.
|
# Note: code names must only increase in alphabetical order.
|
||||||
system.nixosCodeName = "Aardvark";
|
system.nixosCodeName = "Baboon";
|
||||||
|
|
||||||
# Generate /etc/os-release. See
|
# Generate /etc/os-release. See
|
||||||
# http://0pointer.de/public/systemd-man/os-release.html for the
|
# http://0pointer.de/public/systemd-man/os-release.html for the
|
||||||
|
@ -46,7 +46,6 @@
|
|||||||
./programs/bash/command-not-found.nix
|
./programs/bash/command-not-found.nix
|
||||||
./programs/blcr.nix
|
./programs/blcr.nix
|
||||||
./programs/environment.nix
|
./programs/environment.nix
|
||||||
./programs/gurobi.nix
|
|
||||||
./programs/info.nix
|
./programs/info.nix
|
||||||
./programs/shadow.nix
|
./programs/shadow.nix
|
||||||
./programs/shell.nix
|
./programs/shell.nix
|
||||||
@ -55,6 +54,7 @@
|
|||||||
./programs/venus.nix
|
./programs/venus.nix
|
||||||
./programs/wvdial.nix
|
./programs/wvdial.nix
|
||||||
./programs/zsh/zsh.nix
|
./programs/zsh/zsh.nix
|
||||||
|
./programs/screen.nix
|
||||||
./rename.nix
|
./rename.nix
|
||||||
./security/apparmor.nix
|
./security/apparmor.nix
|
||||||
./security/apparmor-suid.nix
|
./security/apparmor-suid.nix
|
||||||
@ -119,7 +119,6 @@
|
|||||||
./services/misc/felix.nix
|
./services/misc/felix.nix
|
||||||
./services/misc/folding-at-home.nix
|
./services/misc/folding-at-home.nix
|
||||||
./services/misc/gpsd.nix
|
./services/misc/gpsd.nix
|
||||||
./services/misc/gurobi.nix
|
|
||||||
./services/misc/nix-daemon.nix
|
./services/misc/nix-daemon.nix
|
||||||
./services/misc/nix-gc.nix
|
./services/misc/nix-gc.nix
|
||||||
./services/misc/nixos-manual.nix
|
./services/misc/nixos-manual.nix
|
||||||
@ -278,5 +277,5 @@
|
|||||||
./virtualisation/libvirtd.nix
|
./virtualisation/libvirtd.nix
|
||||||
#./virtualisation/nova.nix
|
#./virtualisation/nova.nix
|
||||||
./virtualisation/virtualbox-guest.nix
|
./virtualisation/virtualbox-guest.nix
|
||||||
./virtualisation/xen-dom0.nix
|
#./virtualisation/xen-dom0.nix
|
||||||
]
|
]
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
with pkgs.lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.programs.gurobi;
|
|
||||||
in {
|
|
||||||
options = {
|
|
||||||
programs.gurobi = {
|
|
||||||
license = mkOption {
|
|
||||||
default = null;
|
|
||||||
|
|
||||||
description = "Path to the Gurobi license file if not using a token server";
|
|
||||||
|
|
||||||
type = types.nullOr types.path;
|
|
||||||
};
|
|
||||||
|
|
||||||
tokenServerAddress = mkOption {
|
|
||||||
default = null;
|
|
||||||
|
|
||||||
description = "Address of the token server";
|
|
||||||
|
|
||||||
type = types.nullOr types.string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf (cfg.license != null || cfg.tokenServerAddress != null) {
|
|
||||||
assertions = [ {
|
|
||||||
assertion = cfg.license == null || cfg.tokenServerAddress == null;
|
|
||||||
message = "Please only set one of a gurobi license file and a gurobi token server address";
|
|
||||||
} ];
|
|
||||||
|
|
||||||
environment.variables.GRB_LICENSE_FILE = if cfg.license != null
|
|
||||||
then cfg.license
|
|
||||||
else pkgs.writeTextFile {
|
|
||||||
name = "gurobi-generated-license";
|
|
||||||
text = "TOKENSERVER=${cfg.tokenServerAddress}";
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = [ pkgs.gurobi ];
|
|
||||||
};
|
|
||||||
}
|
|
30
nixos/modules/programs/screen.nix
Normal file
30
nixos/modules/programs/screen.nix
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (pkgs.lib) mkOption mkIf types;
|
||||||
|
cfg = config.programs.screen;
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
programs.screen = {
|
||||||
|
|
||||||
|
screenrc = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
The contents of /etc/screenrc file.
|
||||||
|
'';
|
||||||
|
type = types.lines;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = mkIf (cfg.screenrc != "") {
|
||||||
|
environment.etc."screenrc".text = cfg.screenrc;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -40,7 +40,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
dates = mkOption {
|
dates = mkOption {
|
||||||
default = "*:0,15,30,45";
|
default = "*:0/15";
|
||||||
type = types.string;
|
type = types.string;
|
||||||
description = ''
|
description = ''
|
||||||
Specification (in the format described by
|
Specification (in the format described by
|
||||||
@ -161,13 +161,13 @@ in
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
systemd.services.venus =
|
systemd.services.venus =
|
||||||
{ description = "Planet Venus, an awesome ‘river of news’ feed reader";
|
{ description = "Planet Venus Feed Reader";
|
||||||
path = [ pkgs.venus ];
|
path = [ pkgs.venus ];
|
||||||
script = "exec venus-planet ${configFile}";
|
script = "exec venus-planet ${configFile}";
|
||||||
serviceConfig.User = "${cfg.user}";
|
serviceConfig.User = "${cfg.user}";
|
||||||
serviceConfig.Group = "${cfg.group}";
|
serviceConfig.Group = "${cfg.group}";
|
||||||
environment.OPENSSL_X509_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt";
|
environment.OPENSSL_X509_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt";
|
||||||
startOn = cfg.dates;
|
startAt = cfg.dates;
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -90,8 +90,9 @@ in
|
|||||||
|
|
||||||
config = mkIf config.services.mongodb.enable {
|
config = mkIf config.services.mongodb.enable {
|
||||||
|
|
||||||
users.extraUsers = singleton
|
users.extraUsers.mongodb = mkIf (cfg.user == "mongodb")
|
||||||
{ name = cfg.user;
|
{ name = "mongodb";
|
||||||
|
uid = config.ids.uids.mongodb;
|
||||||
description = "MongoDB server user";
|
description = "MongoDB server user";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ with pkgs.lib;
|
|||||||
services.dbus.packages = [ pkgs.bluez ];
|
services.dbus.packages = [ pkgs.bluez ];
|
||||||
|
|
||||||
systemd.services."dbus-org.bluez" = {
|
systemd.services."dbus-org.bluez" = {
|
||||||
description = "Bluetooth service";
|
description = "Bluetooth Service";
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "dbus";
|
Type = "dbus";
|
||||||
BusName = "org.bluez";
|
BusName = "org.bluez";
|
||||||
|
@ -3,72 +3,8 @@
|
|||||||
with pkgs.lib;
|
with pkgs.lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
cfg = config.services.logstash;
|
cfg = config.services.logstash;
|
||||||
|
|
||||||
listToConfig = list: "[ " + (concatStringsSep ", " (map exprToConfig list)) + " ]";
|
|
||||||
|
|
||||||
hashToConfig = attrs:
|
|
||||||
let
|
|
||||||
attrNameToConfigList = name:
|
|
||||||
[ (exprToConfig name) (exprToConfig (getAttr name attrs)) ];
|
|
||||||
in
|
|
||||||
"[ " +
|
|
||||||
(concatStringsSep ", " (map attrNameToConfigList (attrNames attrs))) +
|
|
||||||
" ]";
|
|
||||||
|
|
||||||
valueToConfig = nvpair: let name = nvpair.name; value = nvpair.value; in
|
|
||||||
if (isAttrs value) && ((!(value ? __type)) || value.__type == "repeated")
|
|
||||||
then ''
|
|
||||||
${name} {
|
|
||||||
${exprToConfig value}
|
|
||||||
}
|
|
||||||
''
|
|
||||||
else "${name} => ${exprToConfig value}";
|
|
||||||
|
|
||||||
repeatedAttrsToConfig = values:
|
|
||||||
concatStringsSep "\n" (map valueToConfig values);
|
|
||||||
|
|
||||||
attrsToConfig = attrs:
|
|
||||||
let
|
|
||||||
attrToConfig = name: valueToConfig {
|
|
||||||
inherit name;
|
|
||||||
value = (getAttr name attrs);
|
|
||||||
};
|
|
||||||
in
|
|
||||||
concatStringsSep "\n" (map attrToConfig (attrNames attrs));
|
|
||||||
|
|
||||||
exprToConfig = expr:
|
|
||||||
let
|
|
||||||
isCustomType = expr: (isAttrs expr) && (expr ? __type);
|
|
||||||
|
|
||||||
isFloat = expr: (isCustomType expr) && (expr.__type == "float");
|
|
||||||
|
|
||||||
isHash = expr: (isCustomType expr) && (expr.__type == "hash");
|
|
||||||
|
|
||||||
isRepeatedAttrs = expr: (isCustomType expr) && (expr.__type == "repeated");
|
|
||||||
in
|
|
||||||
if builtins.isBool expr then (if expr then "true" else "false") else
|
|
||||||
if builtins.isString expr then ''"${expr}"'' else
|
|
||||||
if builtins.isInt expr then toString expr else
|
|
||||||
if isFloat expr then expr.value else
|
|
||||||
if isList expr then listToConfig expr else
|
|
||||||
if isHash expr then hashToConfig expr.value else
|
|
||||||
if isRepeatedAttrs expr then repeatedAttrsToConfig expr.values
|
|
||||||
else attrsToConfig expr;
|
|
||||||
|
|
||||||
mergeConfigs = configs:
|
|
||||||
let
|
|
||||||
op = attrs: newAttrs:
|
|
||||||
let
|
|
||||||
isRepeated = newAttrs ? __type && newAttrs.__type == "repeated";
|
|
||||||
in {
|
|
||||||
values = attrs.values ++ (if isRepeated then newAttrs.values else
|
|
||||||
map (name: { inherit name; value = getAttr name newAttrs; })
|
|
||||||
(attrNames newAttrs));
|
|
||||||
};
|
|
||||||
in (foldl op { values = []; } configs) // { __type = "repeated"; };
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -78,48 +14,45 @@ in
|
|||||||
services.logstash = {
|
services.logstash = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = "Enable logstash";
|
||||||
Enable logstash.
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inputConfig = mkOption {
|
inputConfig = mkOption {
|
||||||
default = {};
|
default = ''stdin { type => "example" }'';
|
||||||
description = ''
|
description = "Logstash input configuration";
|
||||||
An attribute set (or an expression generated by mkNameValuePairs)
|
example = ''
|
||||||
representing a logstash configuration's input section.
|
# Read from journal
|
||||||
Logstash configs are name-value pairs, where values can be bools,
|
pipe {
|
||||||
strings, numbers, arrays, hashes, or other name-value pairs,
|
command => "${pkgs.systemd}/bin/journalctl -f -o json"
|
||||||
and names are strings that can be repeated. Name-value pairs with no
|
type => "syslog" codec => json {}
|
||||||
repeats are represented by attr sets. Bools, strings, ints, and
|
}
|
||||||
arrays are mapped directly. Name-value pairs with repeats can be
|
|
||||||
generated by the config.lib.logstash.mkNameValuePairs function, which
|
|
||||||
takes a list of attrsets and combines them while preserving attribute
|
|
||||||
name duplicates if they occur. Similarly, there are the mkFloat and
|
|
||||||
mkHash functions, which take a string representation of a float and an
|
|
||||||
attrset, respectively.
|
|
||||||
'';
|
'';
|
||||||
apply = mergeConfigs;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
filterConfig = mkOption {
|
filterConfig = mkOption {
|
||||||
default = {};
|
default = ''noop {}'';
|
||||||
description = ''
|
description = "logstash filter configuration";
|
||||||
An attribute set (or an expression generated by mkNameValuePairs)
|
example = ''
|
||||||
representing a logstash configuration's filter section.
|
if [type] == "syslog" {
|
||||||
See inputConfig description for details.
|
# Keep only relevant systemd fields
|
||||||
|
# http://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html
|
||||||
|
prune {
|
||||||
|
whitelist_names => [
|
||||||
|
"type", "@timestamp", "@version",
|
||||||
|
"MESSAGE", "PRIORITY", "SYSLOG_FACILITY",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
'';
|
'';
|
||||||
apply = mergeConfigs;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputConfig = mkOption {
|
outputConfig = mkOption {
|
||||||
default = {};
|
default = ''stdout { debug => true debug_format => "json"}'';
|
||||||
description = ''
|
description = "Logstash output configuration";
|
||||||
An attribute set (or an expression generated by mkNameValuePairs)
|
example = ''
|
||||||
representing a logstash configuration's output section.
|
redis { host => "localhost" data_type => "list" key => "logstash" codec => json }
|
||||||
See inputConfig description for details.
|
elasticsearch { embedded => true }
|
||||||
'';
|
'';
|
||||||
apply = mergeConfigs;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -127,35 +60,26 @@ in
|
|||||||
|
|
||||||
###### implementation
|
###### implementation
|
||||||
|
|
||||||
config = mkMerge [ {
|
config = mkIf cfg.enable {
|
||||||
lib.logstash = {
|
|
||||||
mkFloat = stringRep: { __type = "float"; value = stringRep; };
|
|
||||||
|
|
||||||
mkHash = attrs: { __type = "hash"; value = attrs; };
|
|
||||||
|
|
||||||
mkNameValuePairs = mergeConfigs;
|
|
||||||
};
|
|
||||||
} ( mkIf cfg.enable {
|
|
||||||
systemd.services.logstash = with pkgs; {
|
systemd.services.logstash = with pkgs; {
|
||||||
description = "Logstash daemon";
|
description = "Logstash daemon";
|
||||||
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
path = [ jre ];
|
serviceConfig = {
|
||||||
|
ExecStart = "${jre}/bin/java -jar ${logstash} agent -f ${writeText "logstash.conf" ''
|
||||||
|
input {
|
||||||
|
${cfg.inputConfig}
|
||||||
|
}
|
||||||
|
|
||||||
script = "cd /tmp && exec java -jar ${logstash} agent -f ${writeText "logstash.conf" ''
|
filter {
|
||||||
input {
|
${cfg.filterConfig}
|
||||||
${exprToConfig cfg.inputConfig}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
output {
|
||||||
${exprToConfig cfg.filterConfig}
|
${cfg.outputConfig}
|
||||||
}
|
}
|
||||||
|
''}";
|
||||||
output {
|
};
|
||||||
${exprToConfig cfg.outputConfig}
|
|
||||||
}
|
|
||||||
''} &> /var/log/logstash.log";
|
|
||||||
};
|
};
|
||||||
})];
|
};
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ let
|
|||||||
enablePostgreSQLDatabase = config.services.postgresql.enable;
|
enablePostgreSQLDatabase = config.services.postgresql.enable;
|
||||||
enableSubversionRepository = config.services.svnserve.enable;
|
enableSubversionRepository = config.services.svnserve.enable;
|
||||||
enableTomcatWebApplication = config.services.tomcat.enable;
|
enableTomcatWebApplication = config.services.tomcat.enable;
|
||||||
|
enableMongoDatabase = config.services.mongodb.enable;
|
||||||
});
|
});
|
||||||
in
|
in
|
||||||
|
|
||||||
@ -110,7 +111,7 @@ in
|
|||||||
// optionalAttrs (config.services.tomcat.enable) { tomcatPort = 8080; }
|
// optionalAttrs (config.services.tomcat.enable) { tomcatPort = 8080; }
|
||||||
// optionalAttrs (config.services.svnserve.enable) { svnBaseDir = config.services.svnserve.svnBaseDir; }
|
// optionalAttrs (config.services.svnserve.enable) { svnBaseDir = config.services.svnserve.svnBaseDir; }
|
||||||
// optionalAttrs (cfg.publishInfrastructure.enableAuthentication) (
|
// optionalAttrs (cfg.publishInfrastructure.enableAuthentication) (
|
||||||
optionalAttrs (config.services.mysql.enable) { mysqlUsername = "root"; mysqlPassword = builtins.readFile config.services.mysql.rootPassword; })
|
optionalAttrs (config.services.mysql.enable) { mysqlUsername = "root"; mysqlPassword = readFile config.services.mysql.rootPassword; })
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -125,17 +126,18 @@ in
|
|||||||
++ optional config.services.httpd.enable "httpd.service"
|
++ optional config.services.httpd.enable "httpd.service"
|
||||||
++ optional config.services.mysql.enable "mysql.service"
|
++ optional config.services.mysql.enable "mysql.service"
|
||||||
++ optional config.services.tomcat.enable "tomcat.service"
|
++ optional config.services.tomcat.enable "tomcat.service"
|
||||||
++ optional config.services.svnserve.enable "svnserve.service";
|
++ optional config.services.svnserve.enable "svnserve.service"
|
||||||
|
++ optional config.services.mongodb.enable "mongodb.service";
|
||||||
|
|
||||||
restartIfChanged = false;
|
restartIfChanged = false;
|
||||||
|
|
||||||
path = [ pkgs.nix pkgs.disnix ];
|
path = [ pkgs.nix pkgs.disnix pkgs.dysnomia ];
|
||||||
|
|
||||||
script =
|
environment = {
|
||||||
''
|
HOME = "/root";
|
||||||
export HOME=/root
|
};
|
||||||
disnix-service --dysnomia-modules-dir=${dysnomia}/libexec/dysnomia
|
|
||||||
'';
|
exec = "disnix-service";
|
||||||
};
|
};
|
||||||
} // optionalAttrs cfg.publishAvahi {
|
} // optionalAttrs cfg.publishAvahi {
|
||||||
disnixAvahi =
|
disnixAvahi =
|
||||||
@ -150,7 +152,7 @@ in
|
|||||||
${concatMapStrings (infrastructureAttrName:
|
${concatMapStrings (infrastructureAttrName:
|
||||||
let infrastructureAttrValue = getAttr infrastructureAttrName (cfg.infrastructure);
|
let infrastructureAttrValue = getAttr infrastructureAttrName (cfg.infrastructure);
|
||||||
in
|
in
|
||||||
if builtins.isInt infrastructureAttrValue then
|
if isInt infrastructureAttrValue then
|
||||||
''${infrastructureAttrName}=${toString infrastructureAttrValue} \
|
''${infrastructureAttrName}=${toString infrastructureAttrValue} \
|
||||||
''
|
''
|
||||||
else
|
else
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
with pkgs.lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.gurobi.tokenServer;
|
|
||||||
in {
|
|
||||||
options = {
|
|
||||||
services.gurobi.tokenServer = {
|
|
||||||
enable = mkOption {
|
|
||||||
default = false;
|
|
||||||
|
|
||||||
description = "Whether to enable the Gurobi token server";
|
|
||||||
|
|
||||||
type = types.bool;
|
|
||||||
};
|
|
||||||
|
|
||||||
license = mkOption {
|
|
||||||
description = "Path to the Gurobi license file";
|
|
||||||
|
|
||||||
type = types.path;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
systemd.services.gurobi-token-server = {
|
|
||||||
description = "Gurobi token server";
|
|
||||||
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
|
|
||||||
environment.GRB_LICENSE_FILE = cfg.license;
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
ExecStart = "${pkgs.gurobi}/bin/grb_ts";
|
|
||||||
|
|
||||||
Type = "forking";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
@ -23,6 +23,7 @@ let
|
|||||||
|
|
||||||
manual = import ../../../doc/manual {
|
manual = import ../../../doc/manual {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
|
version = config.system.nixosVersion;
|
||||||
revision = config.system.nixosRevision;
|
revision = config.system.nixosRevision;
|
||||||
options = eval.options;
|
options = eval.options;
|
||||||
};
|
};
|
||||||
|
@ -148,7 +148,7 @@ in
|
|||||||
# wall: cannot get tty name: Inappropriate ioctl for device
|
# wall: cannot get tty name: Inappropriate ioctl for device
|
||||||
# The message still gets through.
|
# The message still gets through.
|
||||||
systemd.services.apcupsd = {
|
systemd.services.apcupsd = {
|
||||||
description = "APC UPS daemon";
|
description = "APC UPS Daemon";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
preStart = "mkdir -p /run/apcupsd/";
|
preStart = "mkdir -p /run/apcupsd/";
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
@ -172,7 +172,7 @@ in
|
|||||||
before = [ "final.target" ];
|
before = [ "final.target" ];
|
||||||
wantedBy = [ "shutdown.target" ];
|
wantedBy = [ "shutdown.target" ];
|
||||||
unitConfig = {
|
unitConfig = {
|
||||||
Description = "APC UPS killpower";
|
Description = "APC UPS Kill Power";
|
||||||
ConditionPathExists = "/run/apcupsd/powerfail";
|
ConditionPathExists = "/run/apcupsd/powerfail";
|
||||||
DefaultDependencies = "no";
|
DefaultDependencies = "no";
|
||||||
};
|
};
|
||||||
|
@ -15,6 +15,7 @@ let
|
|||||||
PYTHONPATH = "${pkgs.python27Packages.carbon}/lib/python2.7/site-packages";
|
PYTHONPATH = "${pkgs.python27Packages.carbon}/lib/python2.7/site-packages";
|
||||||
GRAPHITE_ROOT = dataDir;
|
GRAPHITE_ROOT = dataDir;
|
||||||
GRAPHITE_CONF_DIR = "/etc/graphite/";
|
GRAPHITE_CONF_DIR = "/etc/graphite/";
|
||||||
|
GRAPHITE_STORAGE_DIR = dataDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
in {
|
in {
|
||||||
@ -171,7 +172,7 @@ in {
|
|||||||
];
|
];
|
||||||
|
|
||||||
systemd.services.carbonCache = mkIf cfg.carbon.enableCache {
|
systemd.services.carbonCache = mkIf cfg.carbon.enableCache {
|
||||||
description = "Graphite data storage backend";
|
description = "Graphite Data Storage Backend";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-interfaces.target" ];
|
after = [ "network-interfaces.target" ];
|
||||||
environment = carbonEnv;
|
environment = carbonEnv;
|
||||||
@ -189,7 +190,7 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.carbonAggregator = mkIf cfg.carbon.enableAggregator {
|
systemd.services.carbonAggregator = mkIf cfg.carbon.enableAggregator {
|
||||||
description = "Carbon data aggregator";
|
description = "Carbon Data Aggregator";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-interfaces.target" ];
|
after = [ "network-interfaces.target" ];
|
||||||
environment = carbonEnv;
|
environment = carbonEnv;
|
||||||
@ -200,7 +201,7 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.carbonRelay = mkIf cfg.carbon.enableRelay {
|
systemd.services.carbonRelay = mkIf cfg.carbon.enableRelay {
|
||||||
description = "Carbon data relay";
|
description = "Carbon Data Relay";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-interfaces.target" ];
|
after = [ "network-interfaces.target" ];
|
||||||
environment = carbonEnv;
|
environment = carbonEnv;
|
||||||
@ -211,7 +212,7 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.graphiteWeb = mkIf cfg.web.enable {
|
systemd.services.graphiteWeb = mkIf cfg.web.enable {
|
||||||
description = "Graphite web interface";
|
description = "Graphite Web Interface";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-interfaces.target" ];
|
after = [ "network-interfaces.target" ];
|
||||||
environment = {
|
environment = {
|
||||||
|
@ -182,7 +182,7 @@ in
|
|||||||
}) (mkIf nodeCfg.enable {
|
}) (mkIf nodeCfg.enable {
|
||||||
|
|
||||||
systemd.services.munin-node = {
|
systemd.services.munin-node = {
|
||||||
description = "Munin node, the agent process";
|
description = "Munin Node";
|
||||||
after = [ "network.target" ];
|
after = [ "network.target" ];
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
path = [ pkgs.munin ];
|
path = [ pkgs.munin ];
|
||||||
|
@ -57,7 +57,7 @@ let
|
|||||||
nssModulesPath = config.system.nssModules.path;
|
nssModulesPath = config.system.nssModules.path;
|
||||||
|
|
||||||
daemonService = appName: args:
|
daemonService = appName: args:
|
||||||
{ description = "Samba Service daemon ${appName}";
|
{ description = "Samba Service Daemon ${appName}";
|
||||||
|
|
||||||
wantedBy = [ "samba.target" ];
|
wantedBy = [ "samba.target" ];
|
||||||
partOf = [ "samba.target" ];
|
partOf = [ "samba.target" ];
|
||||||
@ -211,7 +211,7 @@ in
|
|||||||
|
|
||||||
systemd = {
|
systemd = {
|
||||||
targets.samba = {
|
targets.samba = {
|
||||||
description = "Samba server";
|
description = "Samba Server";
|
||||||
requires = [ "samba-setup.service" ];
|
requires = [ "samba-setup.service" ];
|
||||||
after = [ "samba-setup.service" "network.target" ];
|
after = [ "samba-setup.service" "network.target" ];
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
@ -222,7 +222,7 @@ in
|
|||||||
"samba-smbd" = daemonService "smbd" "-F";
|
"samba-smbd" = daemonService "smbd" "-F";
|
||||||
"samba-winbindd" = daemonService "winbindd" "-F";
|
"samba-winbindd" = daemonService "winbindd" "-F";
|
||||||
"samba-setup" = {
|
"samba-setup" = {
|
||||||
description = "Samba setup task";
|
description = "Samba Setup Task";
|
||||||
script = setupScript;
|
script = setupScript;
|
||||||
unitConfig.RequiresMountsFor = "/home/smbd /var/samba /var/log/samba";
|
unitConfig.RequiresMountsFor = "/home/smbd /var/samba /var/log/samba";
|
||||||
};
|
};
|
||||||
|
@ -55,15 +55,19 @@ let
|
|||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
ns = xs: writeText "nameservers" (
|
||||||
|
concatStrings (map (s: "nameserver ${s}\n") xs)
|
||||||
|
);
|
||||||
|
|
||||||
overrideNameserversScript = writeScript "02overridedns" ''
|
overrideNameserversScript = writeScript "02overridedns" ''
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
${optionalString cfg.overrideNameservers "${gnused}/bin/sed -i '/nameserver /d' /etc/resolv.conf"}
|
tmp=`${coreutils}/bin/mktemp`
|
||||||
${concatStrings (map (s: ''
|
${gnused}/bin/sed '/nameserver /d' /etc/resolv.conf > $tmp
|
||||||
${optionalString cfg.appendNameservers
|
${gnugrep}/bin/grep 'nameserver ' /etc/resolv.conf | \
|
||||||
"${gnused}/bin/sed -i '/nameserver ${s}/d' /etc/resolv.conf"
|
${gnugrep}/bin/grep -vf ${ns (cfg.appendNameservers ++ cfg.insertNameservers)} > $tmp.ns
|
||||||
}
|
${optionalString (cfg.appendNameservers != []) "${coreutils}/bin/cat $tmp $tmp.ns ${ns cfg.appendNameservers} > /etc/resolv.conf"}
|
||||||
echo 'nameserver ${s}' >> /etc/resolv.conf
|
${optionalString (cfg.insertNameservers != []) "${coreutils}/bin/cat $tmp ${ns cfg.insertNameservers} $tmp.ns > /etc/resolv.conf"}
|
||||||
'') config.networking.nameservers)}
|
${coreutils}/bin/rm -f $tmp $tmp.ns
|
||||||
'';
|
'';
|
||||||
|
|
||||||
in {
|
in {
|
||||||
@ -95,23 +99,21 @@ in {
|
|||||||
apply = list: [ networkmanager modemmanager wpa_supplicant ] ++ list;
|
apply = list: [ networkmanager modemmanager wpa_supplicant ] ++ list;
|
||||||
};
|
};
|
||||||
|
|
||||||
overrideNameservers = mkOption {
|
appendNameservers = mkOption {
|
||||||
default = false;
|
type = types.listOf types.string;
|
||||||
|
default = [];
|
||||||
description = ''
|
description = ''
|
||||||
If enabled, any nameservers received by DHCP or configured in
|
A list of name servers that should be appended
|
||||||
NetworkManager will be replaced by the nameservers configured
|
to the ones configured in NetworkManager or received by DHCP.
|
||||||
in the <literal>networking.nameservers</literal> option. This
|
|
||||||
option overrides the <literal>appendNameservers</literal> option
|
|
||||||
if both are enabled.
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
appendNameservers = mkOption {
|
insertNameservers = mkOption {
|
||||||
default = false;
|
type = types.listOf types.string;
|
||||||
|
default = [];
|
||||||
description = ''
|
description = ''
|
||||||
If enabled, the name servers configured in the
|
A list of name servers that should be inserted before
|
||||||
<literal>networking.nameservers</literal> option will be appended
|
the ones configured in NetworkManager or received by DHCP.
|
||||||
to the ones configured in NetworkManager or received by DHCP.
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -144,7 +146,7 @@ in {
|
|||||||
{ source = "${networkmanager_openconnect}/etc/NetworkManager/VPN/nm-openconnect-service.name";
|
{ source = "${networkmanager_openconnect}/etc/NetworkManager/VPN/nm-openconnect-service.name";
|
||||||
target = "NetworkManager/VPN/nm-openconnect-service.name";
|
target = "NetworkManager/VPN/nm-openconnect-service.name";
|
||||||
}
|
}
|
||||||
] ++ pkgs.lib.optional (cfg.overrideNameservers || cfg.appendNameservers)
|
] ++ pkgs.lib.optional (cfg.appendNameservers == [] || cfg.insertNameservers == [])
|
||||||
{ source = overrideNameserversScript;
|
{ source = overrideNameserversScript;
|
||||||
target = "NetworkManager/dispatcher.d/02overridedns";
|
target = "NetworkManager/dispatcher.d/02overridedns";
|
||||||
};
|
};
|
||||||
|
@ -19,7 +19,7 @@ let
|
|||||||
|
|
||||||
knownHostsFile = pkgs.writeText "ssh_known_hosts" (
|
knownHostsFile = pkgs.writeText "ssh_known_hosts" (
|
||||||
flip concatMapStrings knownHosts (h:
|
flip concatMapStrings knownHosts (h:
|
||||||
"${concatStringsSep "," h.hostNames} ${builtins.readFile h.publicKeyFile}"
|
"${concatStringsSep "," h.hostNames} ${readFile h.publicKeyFile}"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ let
|
|||||||
mode = "0444";
|
mode = "0444";
|
||||||
source = pkgs.writeText "${u.name}-authorized_keys" ''
|
source = pkgs.writeText "${u.name}-authorized_keys" ''
|
||||||
${concatStringsSep "\n" u.openssh.authorizedKeys.keys}
|
${concatStringsSep "\n" u.openssh.authorizedKeys.keys}
|
||||||
${concatMapStrings (f: builtins.readFile f + "\n") u.openssh.authorizedKeys.keyFiles}
|
${concatMapStrings (f: readFile f + "\n") u.openssh.authorizedKeys.keyFiles}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
usersWithKeys = attrValues (flip filterAttrs config.users.extraUsers (n: u:
|
usersWithKeys = attrValues (flip filterAttrs config.users.extraUsers (n: u:
|
||||||
|
@ -24,6 +24,7 @@ let
|
|||||||
cfgText = "${vsftpdName}=${if getAttr nixosName cfg then "YES" else "NO"}";
|
cfgText = "${vsftpdName}=${if getAttr nixosName cfg then "YES" else "NO"}";
|
||||||
|
|
||||||
nixosOption = {
|
nixosOption = {
|
||||||
|
type = types.bool;
|
||||||
name = nixosName;
|
name = nixosName;
|
||||||
value = mkOption {
|
value = mkOption {
|
||||||
inherit description default;
|
inherit description default;
|
||||||
@ -33,27 +34,26 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
optionDescription = [
|
optionDescription = [
|
||||||
|
|
||||||
(yesNoOption "anonymousUser" "anonymous_enable" false ''
|
(yesNoOption "anonymousUser" "anonymous_enable" false ''
|
||||||
Whether to enable the anonymous FTP user.
|
Whether to enable the anonymous FTP user.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "localUsers" "local_enable" false ''
|
(yesNoOption "localUsers" "local_enable" false ''
|
||||||
Whether to enable FTP for local users.
|
Whether to enable FTP for local users.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "writeEnable" "write_enable" false ''
|
(yesNoOption "writeEnable" "write_enable" false ''
|
||||||
Whether any write activity is permitted to users.
|
Whether any write activity is permitted to users.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "anonymousUploadEnable" "anon_upload_enable" false ''
|
(yesNoOption "anonymousUploadEnable" "anon_upload_enable" false ''
|
||||||
Whether any uploads are permitted to anonymous users.
|
Whether any uploads are permitted to anonymous users.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "anonymousMkdirEnable" "anon_mkdir_write_enable" false ''
|
(yesNoOption "anonymousMkdirEnable" "anon_mkdir_write_enable" false ''
|
||||||
Whether any uploads are permitted to anonymous users.
|
Whether any uploads are permitted to anonymous users.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "chrootlocalUser" "chroot_local_user" false ''
|
(yesNoOption "chrootlocalUser" "chroot_local_user" false ''
|
||||||
Whether local users are confined to their home directory.
|
Whether local users are confined to their home directory.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "userlistEnable" "userlist_enable" false ''
|
(yesNoOption "userlistEnable" "userlist_enable" false ''
|
||||||
Whether users are included.
|
Whether users are included.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "userlistDeny" "userlist_deny" false ''
|
(yesNoOption "userlistDeny" "userlist_deny" false ''
|
||||||
Specifies whether <option>userlistFile</option> is a list of user
|
Specifies whether <option>userlistFile</option> is a list of user
|
||||||
@ -61,35 +61,37 @@ let
|
|||||||
The default <literal>false</literal> means whitelist/allow.
|
The default <literal>false</literal> means whitelist/allow.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "forceLocalLoginsSSL" "force_local_logins_ssl" false ''
|
(yesNoOption "forceLocalLoginsSSL" "force_local_logins_ssl" false ''
|
||||||
Only applies if <option>sslEnable</option> is true. Non anonymous (local) users
|
Only applies if <option>sslEnable</option> is true. Non anonymous (local) users
|
||||||
must use a secure SSL connection to send a password.
|
must use a secure SSL connection to send a password.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "forceLocalDataSSL" "force_local_data_ssl" false ''
|
(yesNoOption "forceLocalDataSSL" "force_local_data_ssl" false ''
|
||||||
Only applies if <option>sslEnable</option> is true. Non anonymous (local) users
|
Only applies if <option>sslEnable</option> is true. Non anonymous (local) users
|
||||||
must use a secure SSL connection for sending/receiving data on data connection.
|
must use a secure SSL connection for sending/receiving data on data connection.
|
||||||
'')
|
'')
|
||||||
(yesNoOption "ssl_tlsv1" "ssl_tlsv1" true '' '')
|
(yesNoOption "ssl_tlsv1" "ssl_tlsv1" true '' '')
|
||||||
(yesNoOption "ssl_sslv2" "ssl_sslv2" false '' '')
|
(yesNoOption "ssl_sslv2" "ssl_sslv2" false '' '')
|
||||||
(yesNoOption "ssl_sslv3" "ssl_sslv3" false '' '')
|
(yesNoOption "ssl_sslv3" "ssl_sslv3" false '' '')
|
||||||
|
];
|
||||||
|
|
||||||
{
|
configFile = pkgs.writeText "vsftpd.conf"
|
||||||
cfgText = if cfg.rsaCertFile == null then ""
|
''
|
||||||
else ''
|
${concatMapStrings (x: "${x.cfgText}\n") optionDescription}
|
||||||
|
${optionalString (cfg.rsaCertFile != null) ''
|
||||||
ssl_enable=YES
|
ssl_enable=YES
|
||||||
rsa_cert_file=${cfg.rsaCertFile}
|
rsa_cert_file=${cfg.rsaCertFile}
|
||||||
'';
|
''}
|
||||||
|
${optionalString (cfg.userlistFile != null) ''
|
||||||
nixosOption = {
|
userlist_file=${cfg.userlistFile}
|
||||||
name = "rsaCertFile";
|
''}
|
||||||
value = mkOption {
|
background=YES
|
||||||
default = null;
|
listen=YES
|
||||||
description = ''
|
nopriv_user=vsftpd
|
||||||
rsa certificate file.
|
secure_chroot_dir=/var/empty
|
||||||
'';
|
syslog_enable=YES
|
||||||
};
|
${optionalString (pkgs.stdenv.system == "x86_64-linux") ''
|
||||||
};
|
seccomp_sandbox=NO
|
||||||
}
|
''}
|
||||||
];
|
'';
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
@ -108,10 +110,7 @@ in
|
|||||||
|
|
||||||
userlist = mkOption {
|
userlist = mkOption {
|
||||||
default = [];
|
default = [];
|
||||||
|
description = "See <option>userlistFile</option>.";
|
||||||
description = ''
|
|
||||||
See <option>userlistFile</option>.
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
userlistFile = mkOption {
|
userlistFile = mkOption {
|
||||||
@ -127,13 +126,20 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
anonymousUserHome = mkOption {
|
anonymousUserHome = mkOption {
|
||||||
|
type = types.path;
|
||||||
default = "/home/ftp/";
|
default = "/home/ftp/";
|
||||||
description = ''
|
description = ''
|
||||||
Directory to consider the HOME of the anonymous user.
|
Directory to consider the HOME of the anonymous user.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
} // (listToAttrs (catAttrs "nixosOption" optionDescription)) ;
|
rsaCertFile = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
default = null;
|
||||||
|
description = "RSA certificate file.";
|
||||||
|
};
|
||||||
|
|
||||||
|
} // (listToAttrs (catAttrs "nixosOption" optionDescription));
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -142,14 +148,12 @@ in
|
|||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
assertions = [
|
assertions = singleton
|
||||||
{
|
{ assertion =
|
||||||
assertion =
|
|
||||||
(cfg.forceLocalLoginsSSL -> cfg.rsaCertFile != null)
|
(cfg.forceLocalLoginsSSL -> cfg.rsaCertFile != null)
|
||||||
&& (cfg.forceLocalDataSSL -> cfg.rsaCertFile != null);
|
&& (cfg.forceLocalDataSSL -> cfg.rsaCertFile != null);
|
||||||
message = "vsftpd: If forceLocalLoginsSSL or forceLocalDataSSL is true then a rsaCertFile must be provided!";
|
message = "vsftpd: If forceLocalLoginsSSL or forceLocalDataSSL is true then a rsaCertFile must be provided!";
|
||||||
}
|
};
|
||||||
];
|
|
||||||
|
|
||||||
users.extraUsers =
|
users.extraUsers =
|
||||||
[ { name = "vsftpd";
|
[ { name = "vsftpd";
|
||||||
@ -157,7 +161,7 @@ in
|
|||||||
description = "VSFTPD user";
|
description = "VSFTPD user";
|
||||||
home = "/homeless-shelter";
|
home = "/homeless-shelter";
|
||||||
}
|
}
|
||||||
] ++ pkgs.lib.optional cfg.anonymousUser
|
] ++ optional cfg.anonymousUser
|
||||||
{ name = "ftp";
|
{ name = "ftp";
|
||||||
uid = config.ids.uids.ftp;
|
uid = config.ids.uids.ftp;
|
||||||
group = "ftp";
|
group = "ftp";
|
||||||
@ -165,41 +169,27 @@ in
|
|||||||
home = cfg.anonymousUserHome;
|
home = cfg.anonymousUserHome;
|
||||||
};
|
};
|
||||||
|
|
||||||
users.extraGroups = singleton
|
users.extraGroups.ftp.gid = config.ids.gids.ftp;
|
||||||
{ name = "ftp";
|
|
||||||
gid = config.ids.gids.ftp;
|
|
||||||
};
|
|
||||||
|
|
||||||
# If you really have to access root via FTP use mkOverride or userlistDeny
|
# If you really have to access root via FTP use mkOverride or userlistDeny
|
||||||
# = false and whitelist root
|
# = false and whitelist root
|
||||||
services.vsftpd.userlist = if cfg.userlistDeny then ["root"] else [];
|
services.vsftpd.userlist = if cfg.userlistDeny then ["root"] else [];
|
||||||
|
|
||||||
environment.etc."vsftpd.conf".text =
|
systemd.services.vsftpd =
|
||||||
concatMapStrings (x: "${x.cfgText}\n") optionDescription
|
{ description = "Vsftpd Server";
|
||||||
+ ''
|
|
||||||
${if cfg.userlistFile == null then ""
|
|
||||||
else "userlist_file=${cfg.userlistFile}"}
|
|
||||||
background=NO
|
|
||||||
listen=YES
|
|
||||||
nopriv_user=vsftpd
|
|
||||||
secure_chroot_dir=/var/empty
|
|
||||||
'';
|
|
||||||
|
|
||||||
jobs.vsftpd =
|
wantedBy = [ "multi-user.target" ];
|
||||||
{ description = "vsftpd server";
|
|
||||||
|
|
||||||
startOn = "started network-interfaces";
|
|
||||||
stopOn = "stopping network-interfaces";
|
|
||||||
|
|
||||||
preStart =
|
preStart =
|
||||||
''
|
optionalString cfg.anonymousUser
|
||||||
${if cfg.anonymousUser then ''
|
''
|
||||||
mkdir -p -m 555 ${cfg.anonymousUserHome}
|
mkdir -p -m 555 ${cfg.anonymousUserHome}
|
||||||
chown -R ftp:ftp ${cfg.anonymousUserHome}
|
chown -R ftp:ftp ${cfg.anonymousUserHome}
|
||||||
'' else ""}
|
'';
|
||||||
'';
|
|
||||||
|
|
||||||
exec = "${vsftpd}/sbin/vsftpd /etc/vsftpd.conf";
|
serviceConfig.ExecStart = "@${vsftpd}/sbin/vsftpd vsftpd ${configFile}";
|
||||||
|
serviceConfig.Restart = "always";
|
||||||
|
serviceConfig.Type = "forking";
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -8,11 +8,14 @@ let
|
|||||||
|
|
||||||
queuelen = if cfg.queuelen == null then "" else "-q ${toString cfg.queuelen}";
|
queuelen = if cfg.queuelen == null then "" else "-q ${toString cfg.queuelen}";
|
||||||
|
|
||||||
|
# Duplicate code, also found in cron.nix. Needs deduplication.
|
||||||
systemCronJobs =
|
systemCronJobs =
|
||||||
''
|
''
|
||||||
SHELL=${pkgs.bash}/bin/bash
|
SHELL=${pkgs.bash}/bin/bash
|
||||||
PATH=${config.system.path}/bin:${config.system.path}/sbin
|
PATH=${config.system.path}/bin:${config.system.path}/sbin
|
||||||
MAILTO="${config.services.cron.mailto}"
|
${optionalString (config.services.cron.mailto != null) ''
|
||||||
|
MAILTO="${config.services.cron.mailto}"
|
||||||
|
''}
|
||||||
NIX_CONF_DIR=/etc/nix
|
NIX_CONF_DIR=/etc/nix
|
||||||
${pkgs.lib.concatStrings (map (job: job + "\n") config.services.cron.systemCronJobs)}
|
${pkgs.lib.concatStrings (map (job: job + "\n") config.services.cron.systemCronJobs)}
|
||||||
'';
|
'';
|
||||||
|
@ -91,7 +91,7 @@ in {
|
|||||||
target = "elasticsearch/logging.yml"; }
|
target = "elasticsearch/logging.yml"; }
|
||||||
];
|
];
|
||||||
|
|
||||||
systemd.services.elasticsearch = mkIf cfg.enable {
|
systemd.services.elasticsearch = {
|
||||||
description = "Elasticsearch daemon";
|
description = "Elasticsearch daemon";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-interfaces.target" ];
|
after = [ "network-interfaces.target" ];
|
||||||
|
@ -15,7 +15,7 @@ let
|
|||||||
toOption = x:
|
toOption = x:
|
||||||
if x == true then "true"
|
if x == true then "true"
|
||||||
else if x == false then "false"
|
else if x == false then "false"
|
||||||
else if builtins.isInt x then toString x
|
else if isInt x then toString x
|
||||||
else toString ''\"${x}\"'';
|
else toString ''\"${x}\"'';
|
||||||
|
|
||||||
# All lines in settings.json end with a ',' (comma), except for the last
|
# All lines in settings.json end with a ',' (comma), except for the last
|
||||||
|
@ -17,8 +17,8 @@ let
|
|||||||
getPort = cfg: if cfg.port != 0 then cfg.port else if cfg.enableSSL then 443 else 80;
|
getPort = cfg: if cfg.port != 0 then cfg.port else if cfg.enableSSL then 443 else 80;
|
||||||
|
|
||||||
extraModules = attrByPath ["extraModules"] [] mainCfg;
|
extraModules = attrByPath ["extraModules"] [] mainCfg;
|
||||||
extraForeignModules = filter builtins.isAttrs extraModules;
|
extraForeignModules = filter isAttrs extraModules;
|
||||||
extraApacheModules = filter (x: !(builtins.isAttrs x)) extraModules; # I'd prefer using builtins.isString here, but doesn't exist yet
|
extraApacheModules = filter isString extraModules;
|
||||||
|
|
||||||
|
|
||||||
makeServerInfo = cfg: {
|
makeServerInfo = cfg: {
|
||||||
|
@ -72,11 +72,11 @@ let
|
|||||||
|
|
||||||
# Unpack Mediawiki and put the config file in its root directory.
|
# Unpack Mediawiki and put the config file in its root directory.
|
||||||
mediawikiRoot = pkgs.stdenv.mkDerivation rec {
|
mediawikiRoot = pkgs.stdenv.mkDerivation rec {
|
||||||
name= "mediawiki-1.20.5";
|
name= "mediawiki-1.20.7";
|
||||||
|
|
||||||
src = pkgs.fetchurl {
|
src = pkgs.fetchurl {
|
||||||
url = "http://download.wikimedia.org/mediawiki/1.20/${name}.tar.gz";
|
url = "http://download.wikimedia.org/mediawiki/1.20/${name}.tar.gz";
|
||||||
sha256 = "0ix6khrilfdncjqnh41xjs0bd49i1q0rywycjaixjfpwj6vjbqbl";
|
sha256 = "0cdl2mq3nw1jymanlxn7pi3qbf5y5003q53kmc8dip73nvrwnfxm";
|
||||||
};
|
};
|
||||||
|
|
||||||
skins = config.skins;
|
skins = config.skins;
|
||||||
|
@ -4,7 +4,7 @@ with pkgs.lib;
|
|||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.services.nginx;
|
cfg = config.services.nginx;
|
||||||
nginx = pkgs.nginx.override { fullWebDAV = cfg.fullWebDAV; };
|
nginx = cfg.package;
|
||||||
configFile = pkgs.writeText "nginx.conf" ''
|
configFile = pkgs.writeText "nginx.conf" ''
|
||||||
user ${cfg.user} ${cfg.group};
|
user ${cfg.user} ${cfg.group};
|
||||||
daemon off;
|
daemon off;
|
||||||
@ -22,6 +22,13 @@ in
|
|||||||
";
|
";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
package = mkOption {
|
||||||
|
default = pkgs.nginx;
|
||||||
|
description = "
|
||||||
|
Nginx package to use.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
|
||||||
config = mkOption {
|
config = mkOption {
|
||||||
default = "events {}";
|
default = "events {}";
|
||||||
description = "
|
description = "
|
||||||
@ -46,10 +53,6 @@ in
|
|||||||
description = "Group account under which nginx runs.";
|
description = "Group account under which nginx runs.";
|
||||||
};
|
};
|
||||||
|
|
||||||
fullWebDAV = mkOption {
|
|
||||||
default = false;
|
|
||||||
description = "Compile in a third party module providing full WebDAV support";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -17,7 +17,7 @@ in
|
|||||||
# Note: the order in which desktop manager modules are imported here
|
# Note: the order in which desktop manager modules are imported here
|
||||||
# determines the default: later modules (if enabled) are preferred.
|
# determines the default: later modules (if enabled) are preferred.
|
||||||
# E.g., if KDE is enabled, it supersedes xterm.
|
# E.g., if KDE is enabled, it supersedes xterm.
|
||||||
imports = [ ./none.nix ./xterm.nix ./xfce.nix ./gnome.nix ./kde4.nix ./e17.nix ];
|
imports = [ ./none.nix ./xterm.nix ./xfce.nix ./kde4.nix ./e17.nix ];
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
with pkgs.lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
cfg = config.services.xserver.desktopManager.gnome;
|
|
||||||
gnome = pkgs.gnome;
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
options = {
|
|
||||||
|
|
||||||
services.xserver.desktopManager.gnome.enable = mkOption {
|
|
||||||
default = false;
|
|
||||||
example = true;
|
|
||||||
description = "Enable a gnome terminal as a desktop manager.";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
|
|
||||||
services.xserver.desktopManager.session = singleton
|
|
||||||
{ name = "gnome";
|
|
||||||
start = ''
|
|
||||||
${gnome.gnometerminal}/bin/gnome-terminal -ls &
|
|
||||||
waitPID=$!
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages =
|
|
||||||
[ gnome.gnometerminal
|
|
||||||
gnome.GConf
|
|
||||||
gnome.gconfeditor
|
|
||||||
];
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -72,6 +72,7 @@ in
|
|||||||
pkgs.xfce.thunar_volman
|
pkgs.xfce.thunar_volman
|
||||||
pkgs.xfce.gvfs
|
pkgs.xfce.gvfs
|
||||||
pkgs.xfce.xfce4_appfinder
|
pkgs.xfce.xfce4_appfinder
|
||||||
|
pkgs.xfce.tumbler
|
||||||
]
|
]
|
||||||
++ optional config.powerManagement.enable pkgs.xfce.xfce4_power_manager;
|
++ optional config.powerManagement.enable pkgs.xfce.xfce4_power_manager;
|
||||||
|
|
||||||
|
@ -44,7 +44,9 @@ let
|
|||||||
# since presumably the desktop environment will handle these.
|
# since presumably the desktop environment will handle these.
|
||||||
if [ -z "$_INHIBITION_LOCK_TAKEN" ]; then
|
if [ -z "$_INHIBITION_LOCK_TAKEN" ]; then
|
||||||
export _INHIBITION_LOCK_TAKEN=1
|
export _INHIBITION_LOCK_TAKEN=1
|
||||||
exec ${config.systemd.package}/bin/systemd-inhibit --what=handle-lid-switch:handle-power-key "$0" "$sessionType"
|
if ! ${config.systemd.package}/bin/loginctl show-session $XDG_SESSION_ID | grep -q '^RemoteHost='; then
|
||||||
|
exec ${config.systemd.package}/bin/systemd-inhibit --what=handle-lid-switch:handle-power-key "$0" "$sessionType"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
''}
|
''}
|
||||||
|
@ -57,6 +57,13 @@ let cfg = config.services.xserver.synaptics; in
|
|||||||
description = "Whether to enable tap buttons.";
|
description = "Whether to enable tap buttons.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
buttonsMap = mkOption {
|
||||||
|
default = [1 2 3];
|
||||||
|
example = [1 3 2];
|
||||||
|
description = "Remap touchpad buttons.";
|
||||||
|
apply = map toString;
|
||||||
|
};
|
||||||
|
|
||||||
palmDetect = mkOption {
|
palmDetect = mkOption {
|
||||||
default = false;
|
default = false;
|
||||||
example = true;
|
example = true;
|
||||||
@ -104,10 +111,13 @@ let cfg = config.services.xserver.synaptics; in
|
|||||||
Option "MinSpeed" "${cfg.minSpeed}"
|
Option "MinSpeed" "${cfg.minSpeed}"
|
||||||
Option "MaxSpeed" "${cfg.maxSpeed}"
|
Option "MaxSpeed" "${cfg.maxSpeed}"
|
||||||
Option "AccelFactor" "${cfg.accelFactor}"
|
Option "AccelFactor" "${cfg.accelFactor}"
|
||||||
Option "TapButton1" "${if cfg.tapButtons then "1" else "0"}"
|
|
||||||
Option "TapButton2" "${if cfg.tapButtons then "2" else "0"}"
|
|
||||||
Option "TapButton3" "${if cfg.tapButtons then "3" else "0"}"
|
|
||||||
${if cfg.tapButtons then "" else ''Option "MaxTapTime" "0"''}
|
${if cfg.tapButtons then "" else ''Option "MaxTapTime" "0"''}
|
||||||
|
Option "TapButton1" "${builtins.elemAt cfg.buttonsMap 0}"
|
||||||
|
Option "TapButton2" "${builtins.elemAt cfg.buttonsMap 1}"
|
||||||
|
Option "TapButton3" "${builtins.elemAt cfg.buttonsMap 2}"
|
||||||
|
Option "ClickFinger1" "${builtins.elemAt cfg.buttonsMap 0}"
|
||||||
|
Option "ClickFinger2" "${builtins.elemAt cfg.buttonsMap 1}"
|
||||||
|
Option "ClickFinger3" "${builtins.elemAt cfg.buttonsMap 2}"
|
||||||
Option "VertTwoFingerScroll" "${if cfg.twoFingerScroll then "1" else "0"}"
|
Option "VertTwoFingerScroll" "${if cfg.twoFingerScroll then "1" else "0"}"
|
||||||
Option "HorizTwoFingerScroll" "${if cfg.twoFingerScroll then "1" else "0"}"
|
Option "HorizTwoFingerScroll" "${if cfg.twoFingerScroll then "1" else "0"}"
|
||||||
Option "VertEdgeScroll" "${if cfg.vertEdgeScroll then "1" else "0"}"
|
Option "VertEdgeScroll" "${if cfg.vertEdgeScroll then "1" else "0"}"
|
||||||
|
@ -17,27 +17,17 @@ let
|
|||||||
#! ${pkgs.stdenv.shell}
|
#! ${pkgs.stdenv.shell}
|
||||||
export XKB_BINDIR=${pkgs.xorg.xkbcomp}/bin
|
export XKB_BINDIR=${pkgs.xorg.xkbcomp}/bin
|
||||||
export XORG_DRI_DRIVER_PATH=${pkgs.mesa}/lib/dri
|
export XORG_DRI_DRIVER_PATH=${pkgs.mesa}/lib/dri
|
||||||
exec ${pkgs.xorg.xorgserver}/bin/Xvfb "$@" -xkbdir "${pkgs.xkeyboard_config}/etc/X11/xkb"
|
exec ${pkgs.xorg.xorgserver}/bin/Xvfb "$@" -xkbdir ${pkgs.xkeyboard_config}/etc/X11/xkb
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# ‘xinetd’ is insanely braindamaged in that it sends stderr to
|
in
|
||||||
# stdout. Thus requires just about any xinetd program to be
|
|
||||||
# wrapped to redirect its stderr. Sigh.
|
|
||||||
x11vncWrapper = pkgs.writeScriptBin "x11vnc-wrapper"
|
|
||||||
''
|
|
||||||
#! ${pkgs.stdenv.shell}
|
|
||||||
export PATH=${makeSearchPath "bin" [ xvfbWrapper pkgs.gawk pkgs.which pkgs.openssl pkgs.xorg.xauth pkgs.nettools pkgs.shadow pkgs.procps pkgs.utillinux pkgs.bash ]}:$PATH
|
|
||||||
export FD_GEOM=1024x786x24
|
|
||||||
exec ${pkgs.x11vnc}/bin/x11vnc -inetd -display WAIT:1024x786:cmd=FINDCREATEDISPLAY-Xvfb.xdmcp -unixpw -ssl SAVE 2> /var/log/x11vnc.log
|
|
||||||
'';
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
|
|
||||||
services.xserver.enable = true;
|
services.xserver.enable = true;
|
||||||
|
services.xserver.videoDrivers = [];
|
||||||
|
|
||||||
# Enable KDM. Any display manager will do as long as it supports XDMCP.
|
# Enable KDM. Any display manager will do as long as it supports XDMCP.
|
||||||
services.xserver.displayManager.kdm.enable = true;
|
services.xserver.displayManager.kdm.enable = true;
|
||||||
@ -52,13 +42,38 @@ in
|
|||||||
Xaccess=${pkgs.writeText "Xaccess" "localhost"}
|
Xaccess=${pkgs.writeText "Xaccess" "localhost"}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
services.xinetd.enable = true;
|
networking.firewall.allowedTCPPorts = [ 5900 ];
|
||||||
services.xinetd.services = singleton
|
|
||||||
{ name = "x11vnc";
|
systemd.sockets.terminal-server =
|
||||||
port = 5900;
|
{ description = "Terminal Server Socket";
|
||||||
unlisted = true;
|
wantedBy = [ "sockets.target" ];
|
||||||
user = "root";
|
before = [ "multi-user.target" ];
|
||||||
server = "${x11vncWrapper}/bin/x11vnc-wrapper";
|
socketConfig.Accept = true;
|
||||||
|
socketConfig.ListenStream = 5900;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services."terminal-server@" =
|
||||||
|
{ description = "Terminal Server";
|
||||||
|
|
||||||
|
path =
|
||||||
|
[ xvfbWrapper pkgs.gawk pkgs.which pkgs.openssl pkgs.xorg.xauth
|
||||||
|
pkgs.nettools pkgs.shadow pkgs.procps pkgs.utillinux pkgs.bash
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.FD_GEOM = "1024x786x24";
|
||||||
|
environment.FD_XDMCP_IF = "127.0.0.1";
|
||||||
|
#environment.FIND_DISPLAY_OUTPUT = "/tmp/foo"; # to debug the "find display" script
|
||||||
|
|
||||||
|
serviceConfig =
|
||||||
|
{ StandardInput = "socket";
|
||||||
|
StandardOutput = "socket";
|
||||||
|
StandardError = "journal";
|
||||||
|
ExecStart = "@${pkgs.x11vnc}/bin/x11vnc x11vnc -inetd -display WAIT:1024x786:cmd=FINDCREATEDISPLAY-Xvfb.xdmcp -unixpw -ssl SAVE";
|
||||||
|
# Don't kill the X server when the user quits the VNC
|
||||||
|
# connection. FIXME: the X server should run in a
|
||||||
|
# separate systemd session.
|
||||||
|
KillMode = "process";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -343,6 +343,18 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
serverFlagsSection = mkOption {
|
||||||
|
default = "";
|
||||||
|
example =
|
||||||
|
''
|
||||||
|
Option "BlankTime" "0"
|
||||||
|
Option "StandbyTime" "0"
|
||||||
|
Option "SuspendTime" "0"
|
||||||
|
Option "OffTime" "0"
|
||||||
|
'';
|
||||||
|
description = "Contents of the ServerFlags section of the X server configuration file.";
|
||||||
|
};
|
||||||
|
|
||||||
moduleSection = mkOption {
|
moduleSection = mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
default = "";
|
default = "";
|
||||||
@ -586,6 +598,7 @@ in
|
|||||||
''
|
''
|
||||||
Section "ServerFlags"
|
Section "ServerFlags"
|
||||||
Option "AllowMouseOpenFail" "on"
|
Option "AllowMouseOpenFail" "on"
|
||||||
|
${cfg.serverFlagsSection}
|
||||||
EndSection
|
EndSection
|
||||||
|
|
||||||
Section "Module"
|
Section "Module"
|
||||||
|
@ -71,7 +71,7 @@ in
|
|||||||
|
|
||||||
${
|
${
|
||||||
let
|
let
|
||||||
set' = mapAttrs (n: v: if builtins.isString v then noDepEntry v else v) set;
|
set' = mapAttrs (n: v: if isString v then noDepEntry v else v) set;
|
||||||
withHeadlines = addAttributeName set';
|
withHeadlines = addAttributeName set';
|
||||||
in textClosureMap id (withHeadlines) (attrNames withHeadlines)
|
in textClosureMap id (withHeadlines) (attrNames withHeadlines)
|
||||||
}
|
}
|
||||||
|
@ -348,14 +348,14 @@ let
|
|||||||
|
|
||||||
${concatStrings (mapAttrsToList (name: unit:
|
${concatStrings (mapAttrsToList (name: unit:
|
||||||
concatMapStrings (name2: ''
|
concatMapStrings (name2: ''
|
||||||
mkdir -p $out/${name2}.wants
|
mkdir -p $out/'${name2}.wants'
|
||||||
ln -sfn ../${name} $out/${name2}.wants/
|
ln -sfn '../${name}' $out/'${name2}.wants'/
|
||||||
'') unit.wantedBy) cfg.units)}
|
'') unit.wantedBy) cfg.units)}
|
||||||
|
|
||||||
${concatStrings (mapAttrsToList (name: unit:
|
${concatStrings (mapAttrsToList (name: unit:
|
||||||
concatMapStrings (name2: ''
|
concatMapStrings (name2: ''
|
||||||
mkdir -p $out/${name2}.requires
|
mkdir -p $out/'${name2}.requires'
|
||||||
ln -sfn ../${name} $out/${name2}.requires/
|
ln -sfn '../${name}' $out/'${name2}.requires'/
|
||||||
'') unit.requiredBy) cfg.units)}
|
'') unit.requiredBy) cfg.units)}
|
||||||
|
|
||||||
ln -s ${cfg.defaultUnit} $out/default.target
|
ln -s ${cfg.defaultUnit} $out/default.target
|
||||||
@ -486,6 +486,16 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.extraConfig = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = types.lines;
|
||||||
|
example = "DefaultLimitCORE=infinity";
|
||||||
|
description = ''
|
||||||
|
Extra config options for systemd. See man systemd-system.conf for
|
||||||
|
available options.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
services.journald.console = mkOption {
|
services.journald.console = mkOption {
|
||||||
default = "";
|
default = "";
|
||||||
type = types.str;
|
type = types.str;
|
||||||
@ -518,7 +528,7 @@ in
|
|||||||
|
|
||||||
services.logind.extraConfig = mkOption {
|
services.logind.extraConfig = mkOption {
|
||||||
default = "";
|
default = "";
|
||||||
type = types.str;
|
type = types.lines;
|
||||||
example = "HandleLidSwitch=ignore";
|
example = "HandleLidSwitch=ignore";
|
||||||
description = ''
|
description = ''
|
||||||
Extra config options for systemd-logind. See man logind.conf for
|
Extra config options for systemd-logind. See man logind.conf for
|
||||||
@ -555,6 +565,7 @@ in
|
|||||||
environment.etc."systemd/system.conf".text =
|
environment.etc."systemd/system.conf".text =
|
||||||
''
|
''
|
||||||
[Manager]
|
[Manager]
|
||||||
|
${config.systemd.extraConfig}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
environment.etc."systemd/journald.conf".text =
|
environment.etc."systemd/journald.conf".text =
|
||||||
|
@ -76,7 +76,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services."zfs-mount" = {
|
systemd.services."zfs-mount" = {
|
||||||
description = "Mount zfs volumes";
|
description = "Mount ZFS Volumes";
|
||||||
after = [ "zpool-import.service" ];
|
after = [ "zpool-import.service" ];
|
||||||
wantedBy = [ "local-fs.target" ];
|
wantedBy = [ "local-fs.target" ];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
|
@ -160,4 +160,9 @@ with pkgs.lib;
|
|||||||
environment.systemPackages = [ pkgs.cryptsetup ];
|
environment.systemPackages = [ pkgs.cryptsetup ];
|
||||||
|
|
||||||
boot.initrd.supportedFilesystems = [ "unionfs-fuse" ];
|
boot.initrd.supportedFilesystems = [ "unionfs-fuse" ];
|
||||||
|
|
||||||
|
# Prevent logging in as root without a password. This doesn't really matter,
|
||||||
|
# since the only PAM services that allow logging in with a null
|
||||||
|
# password are local ones that are inaccessible on EC2 machines.
|
||||||
|
security.initialRootPassword = "!";
|
||||||
}
|
}
|
||||||
|
@ -82,8 +82,11 @@ in
|
|||||||
mkdir -p /var/log/libvirt/qemu -m 755
|
mkdir -p /var/log/libvirt/qemu -m 755
|
||||||
rm -f /var/run/libvirtd.pid
|
rm -f /var/run/libvirtd.pid
|
||||||
|
|
||||||
mkdir -p /var/lib/libvirt -m 700
|
mkdir -p /var/lib/libvirt
|
||||||
mkdir -p /var/lib/libvirt/dnsmasq -m 700
|
mkdir -p /var/lib/libvirt/dnsmasq
|
||||||
|
|
||||||
|
chmod 755 /var/lib/libvirt
|
||||||
|
chmod 755 /var/lib/libvirt/dnsmasq
|
||||||
|
|
||||||
# Libvirt unfortunately writes mutable state (such as
|
# Libvirt unfortunately writes mutable state (such as
|
||||||
# runtime changes to VM, network or filter configurations)
|
# runtime changes to VM, network or filter configurations)
|
||||||
|
@ -113,7 +113,7 @@ in
|
|||||||
jobs.nova_objectstore =
|
jobs.nova_objectstore =
|
||||||
{ name = "nova-objectstore";
|
{ name = "nova-objectstore";
|
||||||
|
|
||||||
description = "Nova simple object store service";
|
description = "Nova Simple Object Store Service";
|
||||||
|
|
||||||
startOn = "ip-up";
|
startOn = "ip-up";
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ in
|
|||||||
jobs.nova_scheduler =
|
jobs.nova_scheduler =
|
||||||
{ name = "nova-scheduler";
|
{ name = "nova-scheduler";
|
||||||
|
|
||||||
description = "Nova scheduler service";
|
description = "Nova Scheduler Service";
|
||||||
|
|
||||||
startOn = "ip-up";
|
startOn = "ip-up";
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ in
|
|||||||
jobs.nova_compute =
|
jobs.nova_compute =
|
||||||
{ name = "nova-compute";
|
{ name = "nova-compute";
|
||||||
|
|
||||||
description = "Nova compute service";
|
description = "Nova Compute Service";
|
||||||
|
|
||||||
startOn = "ip-up";
|
startOn = "ip-up";
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ in
|
|||||||
jobs.nova_network =
|
jobs.nova_network =
|
||||||
{ name = "nova-network";
|
{ name = "nova-network";
|
||||||
|
|
||||||
description = "Nova network service";
|
description = "Nova Network Service";
|
||||||
|
|
||||||
startOn = "ip-up";
|
startOn = "ip-up";
|
||||||
|
|
||||||
|
@ -107,4 +107,9 @@ with pkgs.lib;
|
|||||||
boot.loader.grub.device = "/dev/sda";
|
boot.loader.grub.device = "/dev/sda";
|
||||||
|
|
||||||
services.virtualbox.enable = true;
|
services.virtualbox.enable = true;
|
||||||
|
|
||||||
|
# Prevent logging in as root without a password. For NixOps, we
|
||||||
|
# don't need this because the user can login via SSH, and for the
|
||||||
|
# demo images, there is a demo user account that can sudo to root.
|
||||||
|
security.initialRootPassword = "!";
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ in
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
jobs.xend =
|
jobs.xend =
|
||||||
{ description = "Xen control daemon";
|
{ description = "Xen Control Daemon";
|
||||||
|
|
||||||
startOn = "stopped udevtrigger";
|
startOn = "stopped udevtrigger";
|
||||||
|
|
||||||
|
@ -123,11 +123,13 @@ in rec {
|
|||||||
inherit system;
|
inherit system;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
iso_minimal_new_kernel = forAllSystems (system: makeIso {
|
iso_minimal_new_kernel = forAllSystems (system: makeIso {
|
||||||
module = ./modules/installer/cd-dvd/installation-cd-minimal-new-kernel.nix;
|
module = ./modules/installer/cd-dvd/installation-cd-minimal-new-kernel.nix;
|
||||||
type = "minimal-new-kernel";
|
type = "minimal-new-kernel";
|
||||||
inherit system;
|
inherit system;
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
iso_graphical = forAllSystems (system: makeIso {
|
iso_graphical = forAllSystems (system: makeIso {
|
||||||
module = ./modules/installer/cd-dvd/installation-cd-graphical.nix;
|
module = ./modules/installer/cd-dvd/installation-cd-graphical.nix;
|
||||||
@ -137,20 +139,13 @@ in rec {
|
|||||||
|
|
||||||
# A variant with a more recent (but possibly less stable) kernel
|
# A variant with a more recent (but possibly less stable) kernel
|
||||||
# that might support more hardware.
|
# that might support more hardware.
|
||||||
|
/*
|
||||||
iso_new_kernel = forAllSystems (system: makeIso {
|
iso_new_kernel = forAllSystems (system: makeIso {
|
||||||
module = ./modules/installer/cd-dvd/installation-cd-new-kernel.nix;
|
module = ./modules/installer/cd-dvd/installation-cd-new-kernel.nix;
|
||||||
type = "new-kernel";
|
type = "new-kernel";
|
||||||
inherit system;
|
inherit system;
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
# A variant with efi booting support. Once cd-minimal has a newer kernel,
|
|
||||||
# this should be enabled by default.
|
|
||||||
iso_efi = forAllSystems (system: makeIso {
|
|
||||||
module = ./modules/installer/cd-dvd/installation-cd-efi.nix;
|
|
||||||
type = "efi";
|
|
||||||
maintainers = [ "shlevy" ];
|
|
||||||
inherit system;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
# A bootable VirtualBox virtual appliance as an OVA file (i.e. packaged OVF).
|
# A bootable VirtualBox virtual appliance as an OVA file (i.e. packaged OVF).
|
||||||
|
@ -16,6 +16,7 @@ with import ../lib/testing.nix { inherit system minimal; };
|
|||||||
kde4 = makeTest (import ./kde4.nix);
|
kde4 = makeTest (import ./kde4.nix);
|
||||||
#kexec = makeTest (import ./kexec.nix);
|
#kexec = makeTest (import ./kexec.nix);
|
||||||
login = makeTest (import ./login.nix {});
|
login = makeTest (import ./login.nix {});
|
||||||
|
logstash = makeTest (import ./logstash.nix);
|
||||||
latestKernel.login = makeTest (import ./login.nix ({ config, pkgs, ... }: { boot.kernelPackages = pkgs.linuxPackages_latest; }));
|
latestKernel.login = makeTest (import ./login.nix ({ config, pkgs, ... }: { boot.kernelPackages = pkgs.linuxPackages_latest; }));
|
||||||
misc = makeTest (import ./misc.nix);
|
misc = makeTest (import ./misc.nix);
|
||||||
#mpich = makeTest (import ./mpich.nix);
|
#mpich = makeTest (import ./mpich.nix);
|
||||||
|
@ -12,7 +12,7 @@ let
|
|||||||
(import ../lib/eval-config.nix {
|
(import ../lib/eval-config.nix {
|
||||||
inherit system;
|
inherit system;
|
||||||
modules =
|
modules =
|
||||||
[ ../modules/installer/cd-dvd/installation-cd-efi.nix
|
[ ../modules/installer/cd-dvd/installation-cd-minimal.nix
|
||||||
../modules/testing/test-instrumentation.nix
|
../modules/testing/test-instrumentation.nix
|
||||||
{ key = "serial";
|
{ key = "serial";
|
||||||
|
|
||||||
@ -38,7 +38,6 @@ let
|
|||||||
config = builtins.toFile "configuration.nix" ''
|
config = builtins.toFile "configuration.nix" ''
|
||||||
{ pkgs, ... }: {
|
{ pkgs, ... }: {
|
||||||
imports = [ ./hardware-configuration.nix <nixos/modules/testing/test-instrumentation.nix> ];
|
imports = [ ./hardware-configuration.nix <nixos/modules/testing/test-instrumentation.nix> ];
|
||||||
boot.kernelPackages = pkgs.linuxPackages_3_10;
|
|
||||||
boot.loader.grub.enable = false;
|
boot.loader.grub.enable = false;
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
boot.loader.gummiboot.enable = true;
|
boot.loader.gummiboot.enable = true;
|
||||||
|
40
nixos/tests/logstash.nix
Normal file
40
nixos/tests/logstash.nix
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
# This test runs logstash and checks if messages flows and elasticsearch is
|
||||||
|
# started
|
||||||
|
|
||||||
|
{
|
||||||
|
nodes = {
|
||||||
|
one =
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
services = {
|
||||||
|
logstash = {
|
||||||
|
enable = true;
|
||||||
|
inputConfig = ''
|
||||||
|
exec { command => "echo flowers" interval => 1 type => "test" }
|
||||||
|
exec { command => "echo dragons" interval => 1 type => "test" }
|
||||||
|
'';
|
||||||
|
filterConfig = ''
|
||||||
|
if [type] == "test" {
|
||||||
|
grep { match => ["message", "flowers"] drop => true }
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
outputConfig = ''
|
||||||
|
stdout { codec => rubydebug }
|
||||||
|
elasticsearch { embedded => true }
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
startAll;
|
||||||
|
|
||||||
|
$one->waitForUnit("logstash.service");
|
||||||
|
$one->waitUntilSucceeds("journalctl -n 20 _SYSTEMD_UNIT=logstash.service | grep flowers");
|
||||||
|
$one->fail("journalctl -n 20 _SYSTEMD_UNIT=logstash.service | grep dragons");
|
||||||
|
$one->waitUntilSucceeds("curl -s http://127.0.0.1:9200/_status?pretty=true | grep logstash");
|
||||||
|
'';
|
||||||
|
}
|
20
pkgs/applications/audio/milkytracker/decompressor_gzip.patch
Normal file
20
pkgs/applications/audio/milkytracker/decompressor_gzip.patch
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
https://bugs.archlinux.org/task/31324
|
||||||
|
https://410333.bugs.gentoo.org/attachment.cgi?id=322456
|
||||||
|
|
||||||
|
diff -ur src.old/compression/DecompressorGZIP.cpp src/compression/DecompressorGZIP.cpp
|
||||||
|
--- src.old/compression/DecompressorGZIP.cpp 2012-08-28 17:54:46.000000000 +0200
|
||||||
|
+++ src/compression/DecompressorGZIP.cpp 2012-08-28 17:55:21.000000000 +0200
|
||||||
|
@@ -57,11 +57,11 @@
|
||||||
|
|
||||||
|
bool DecompressorGZIP::decompress(const PPSystemString& outFileName, Hints hint)
|
||||||
|
{
|
||||||
|
- gzFile *gz_input_file = NULL;
|
||||||
|
+ gzFile gz_input_file = NULL;
|
||||||
|
int len = 0;
|
||||||
|
pp_uint8 *buf;
|
||||||
|
|
||||||
|
- if ((gz_input_file = (void **)gzopen (fileName.getStrBuffer(), "r")) == NULL)
|
||||||
|
+ if ((gz_input_file = gzopen (fileName.getStrBuffer(), "r")) == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ((buf = new pp_uint8[0x10000]) == NULL)
|
44
pkgs/applications/audio/milkytracker/default.nix
Normal file
44
pkgs/applications/audio/milkytracker/default.nix
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{ stdenv, fetchurl, SDL, alsaLib, autoconf, automake, jackaudio, perl
|
||||||
|
, zlib, zziplib
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
version = "0.90.85";
|
||||||
|
name = "milkytracker-${version}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "http://milkytracker.org/files/milkytracker-0.90.85.tar.gz";
|
||||||
|
sha256 = "184pk0k9nv461a61sh6lb62wfadjwwk8ri3z5kpdbqnyssz0zfpv";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Get two official patches.
|
||||||
|
no_zzip_patch = fetchurl {
|
||||||
|
url = "http://www.milkytracker.org/files/patches-0.90.85/no_zziplib_dep.patch";
|
||||||
|
sha256 = "1w550q7pxa7w6v2v19ljk03hayacrs6y887izg11a1983wk7qzb3";
|
||||||
|
};
|
||||||
|
|
||||||
|
fix_64bit_patch = fetchurl {
|
||||||
|
url = "http://www.milkytracker.org/files/patches-0.90.85/64bit_freebsd_fix.patch";
|
||||||
|
sha256 = "0gwd4zslbd8kih80k4v7n2c65kvm2cq3kl6d7y33z1l007vzyvf6";
|
||||||
|
};
|
||||||
|
|
||||||
|
patchPhase = ''
|
||||||
|
patch ./src/tracker/sdl/SDL_Main.cpp < ${fix_64bit_patch}
|
||||||
|
patch < ${no_zzip_patch}
|
||||||
|
patch ./src/compression/DecompressorGZIP.cpp < ${./decompressor_gzip.patch}
|
||||||
|
'';
|
||||||
|
|
||||||
|
preBuild=''
|
||||||
|
export CPATH=${zlib}/lib
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildInputs = [ SDL alsaLib autoconf automake jackaudio perl zlib zziplib ];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Music tracker application, similar to Fasttracker II.";
|
||||||
|
homepage = http://milkytracker.org;
|
||||||
|
license = stdenv.lib.licenses.gpl3Plus;
|
||||||
|
platforms = [ "x86_64-linux" "i686-linux" ];
|
||||||
|
maintainers = [ stdenv.lib.maintainers.zoomulator ];
|
||||||
|
};
|
||||||
|
}
|
@ -39,6 +39,6 @@ pythonPackages.buildPythonPackage rec {
|
|||||||
local hard drive.
|
local hard drive.
|
||||||
'';
|
'';
|
||||||
maintainers = [ stdenv.lib.maintainers.rickynils ];
|
maintainers = [ stdenv.lib.maintainers.rickynils ];
|
||||||
platforms = [];
|
hydraPlatforms = [];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,18 @@
|
|||||||
{ stdenv, fetchurl, python, buildPythonPackage, mutagen, pygtk, pygobject
|
{ stdenv, fetchurl, python, buildPythonPackage, mutagen, pygtk, pygobject
|
||||||
, pythonDBus, gst_python, gst_plugins_base, gst_plugins_good, gst_plugins_ugly }:
|
, pythonDBus, gst_python, withGstPlugins ? false, gst_plugins_base ? null
|
||||||
|
, gst_plugins_good ? null, gst_plugins_ugly ? null, gst_plugins_bad ? null }:
|
||||||
|
|
||||||
let version = "2.5"; in
|
assert withGstPlugins -> gst_plugins_base != null
|
||||||
|
|| gst_plugins_good != null
|
||||||
|
|| gst_plugins_ugly != null
|
||||||
|
|| gst_plugins_bad != null;
|
||||||
|
|
||||||
|
let version = "2.6.3"; in
|
||||||
|
|
||||||
buildPythonPackage {
|
buildPythonPackage {
|
||||||
# call the package quodlibet and just quodlibet
|
# call the package quodlibet and just quodlibet
|
||||||
name = "quodlibet-${version}";
|
name = "quodlibet-${version}"
|
||||||
|
+ stdenv.lib.optionalString withGstPlugins "-with-gst-plugins";
|
||||||
namePrefix = "";
|
namePrefix = "";
|
||||||
|
|
||||||
# XXX, tests fail
|
# XXX, tests fail
|
||||||
@ -13,12 +20,12 @@ buildPythonPackage {
|
|||||||
|
|
||||||
src = [
|
src = [
|
||||||
(fetchurl {
|
(fetchurl {
|
||||||
url = "https://quodlibet.googlecode.com/files/quodlibet-${version}.tar.gz";
|
url = "https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-${version}.tar.gz";
|
||||||
sha256 = "0qrmlz7m1jpmriy8bgycjiwzbf3annznkn4x5k32yy9bylxa7lwb";
|
sha256 = "0ilasi4b0ay8r6v6ba209wsm80fq2nmzigzc5kvphrk71jwypx6z";
|
||||||
})
|
})
|
||||||
(fetchurl {
|
(fetchurl {
|
||||||
url = "https://quodlibet.googlecode.com/files/quodlibet-plugins-${version}.tar.gz";
|
url = "https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-plugins-${version}.tar.gz";
|
||||||
sha256 = "0kf2mkq2zk38626bn48gscvy6ir04f5b2z57ahlxlqy8imv2cjff";
|
sha256 = "1rv08rhdjad8sjhplqsspcf4vkazgkxyshsqmbfbrrk5kvv57ybc";
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -30,19 +37,23 @@ buildPythonPackage {
|
|||||||
'';
|
'';
|
||||||
patches = [ ./quodlibet-package-plugins.patch ];
|
patches = [ ./quodlibet-package-plugins.patch ];
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = stdenv.lib.optionals withGstPlugins [
|
||||||
gst_plugins_base gst_plugins_good gst_plugins_ugly
|
gst_plugins_base gst_plugins_good gst_plugins_ugly gst_plugins_bad
|
||||||
];
|
];
|
||||||
|
|
||||||
propagatedBuildInputs = [
|
propagatedBuildInputs = [
|
||||||
mutagen pygtk pygobject pythonDBus gst_python
|
mutagen pygtk pygobject pythonDBus gst_python
|
||||||
];
|
];
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = stdenv.lib.optionalString withGstPlugins ''
|
||||||
# Wrap quodlibet so it finds the GStreamer plug-ins
|
# Wrap quodlibet so it finds the GStreamer plug-ins
|
||||||
wrapProgram "$out/bin/quodlibet" --prefix \
|
wrapProgram "$out/bin/quodlibet" --prefix \
|
||||||
GST_PLUGIN_PATH ":" \
|
GST_PLUGIN_PATH ":" \
|
||||||
"${gst_plugins_base}/lib/gstreamer-0.10:${gst_plugins_good}/lib/gstreamer-0.10:${gst_plugins_ugly}/lib/gstreamer-0.10"
|
${ stdenv.lib.concatStringsSep ":"
|
||||||
|
(map (s: s+"/lib/gstreamer-0.10")
|
||||||
|
(stdenv.lib.filter (s: s != null) [
|
||||||
|
gst_plugins_base gst_plugins_good gst_plugins_ugly gst_plugins_bad
|
||||||
|
])) }
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
@ -62,6 +73,7 @@ buildPythonPackage {
|
|||||||
& internet radio, and all major audio formats.
|
& internet radio, and all major audio formats.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
maintainer = [ stdenv.lib.maintainers.coroa ];
|
||||||
homepage = http://code.google.com/p/quodlibet/;
|
homepage = http://code.google.com/p/quodlibet/;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
{ stdenv, fetchgit, emacs }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
rev = "646482203aacdf847d57d0a96263fddcfc33fb61";
|
||||||
|
name = "emacs-offlineimap-${rev}";
|
||||||
|
|
||||||
|
src = fetchgit {
|
||||||
|
inherit rev;
|
||||||
|
url = "git://git.naquadah.org/offlineimap-el.git";
|
||||||
|
sha256 = "0az4llfgva4wvpljyc5s2m7ggfnj06ssp32x8bncr5fzksha3r7b";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [ emacs ];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
substituteInPlace offlineimap.el --replace "Machine.MachineUI" "machineui"
|
||||||
|
emacs --batch -f batch-byte-compile offlineimap.el
|
||||||
|
install -d $out/share/emacs/site-lisp
|
||||||
|
install offlineimap.el offlineimap.elc $out/share/emacs/site-lisp
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "OfflineIMAP support for Emacs";
|
||||||
|
homepage = "http://julien.danjou.info/projects/emacs-packages#offlineimap";
|
||||||
|
platforms = stdenv.lib.platforms.all;
|
||||||
|
maintainers = [ stdenv.lib.maintainers.garbas ];
|
||||||
|
};
|
||||||
|
}
|
115
pkgs/applications/editors/vim/qvim.nix
Normal file
115
pkgs/applications/editors/vim/qvim.nix
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
args@{...}: with args;
|
||||||
|
|
||||||
|
|
||||||
|
let inherit (args.composableDerivation) composableDerivation edf; in
|
||||||
|
composableDerivation {
|
||||||
|
# use gccApple to compile on darwin
|
||||||
|
mkDerivation = ( if stdenv.isDarwin
|
||||||
|
then stdenvAdapters.overrideGCC stdenv gccApple
|
||||||
|
else stdenv ).mkDerivation;
|
||||||
|
} (fix: {
|
||||||
|
|
||||||
|
name = "qvim-7.4";
|
||||||
|
|
||||||
|
enableParallelBuilding = true; # test this
|
||||||
|
|
||||||
|
src = fetchgit {
|
||||||
|
url = https://bitbucket.org/equalsraf/vim-qt.git ;
|
||||||
|
rev = "4160bfd5c1380e899d2f426b494fc4f1cf6ae85e";
|
||||||
|
sha256 = "1qa3xl1b9gqw66p71h53l7ibs4y3zfyj553jss70ybxaxchbhi5b";
|
||||||
|
};
|
||||||
|
|
||||||
|
# FIXME: adopt Darwin fixes from vim/default.nix, then chage meta.platforms.linux
|
||||||
|
# to meta.platforms.unix
|
||||||
|
preConfigure = assert (! stdenv.isDarwin); "";
|
||||||
|
|
||||||
|
configureFlags = [ "--with-vim-name=qvim" "--enable-gui=qt" "--with-features=${args.features}" ];
|
||||||
|
|
||||||
|
nativeBuildInputs
|
||||||
|
= [ ncurses pkgconfig libX11 libXext libSM libXpm libXt libXaw libXau
|
||||||
|
libXmu libICE qt4];
|
||||||
|
|
||||||
|
# most interpreters aren't tested yet.. (see python for example how to do it)
|
||||||
|
flags = {
|
||||||
|
ftNix = {
|
||||||
|
# because we cd to src in the main patch phase, we can't just add this
|
||||||
|
# patch to the list, we have to apply it manually
|
||||||
|
postPatch = ''
|
||||||
|
cd runtime
|
||||||
|
patch -p2 < ${./ft-nix-support.patch}
|
||||||
|
cd ..
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// edf { name = "darwin"; } #Disable Darwin (Mac OS X) support.
|
||||||
|
// edf { name = "xsmp"; } #Disable XSMP session management
|
||||||
|
// edf { name = "xsmp_interact"; } #Disable XSMP interaction
|
||||||
|
// edf { name = "mzscheme"; } #Include MzScheme interpreter.
|
||||||
|
// edf { name = "perl"; feat = "perlinterp"; enable = { nativeBuildInputs = [perl]; };} #Include Perl interpreter.
|
||||||
|
|
||||||
|
// edf {
|
||||||
|
name = "python";
|
||||||
|
feat = "pythoninterp";
|
||||||
|
enable = {
|
||||||
|
nativeBuildInputs = [ python ];
|
||||||
|
} // lib.optionalAttrs stdenv.isDarwin {
|
||||||
|
configureFlags
|
||||||
|
= [ "--enable-pythoninterp=yes"
|
||||||
|
"--with-python-config-dir=${python}/lib" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// edf { name = "tcl"; enable = { nativeBuildInputs = [tcl]; }; } #Include Tcl interpreter.
|
||||||
|
// edf { name = "ruby"; feat = "rubyinterp"; enable = { nativeBuildInputs = [ruby]; };} #Include Ruby interpreter.
|
||||||
|
// edf { name = "lua" ; feat = "luainterp"; enable = { nativeBuildInputs = [lua]; configureFlags = ["--with-lua-prefix=${args.lua}"];};}
|
||||||
|
// edf { name = "cscope"; } #Include cscope interface.
|
||||||
|
// edf { name = "workshop"; } #Include Sun Visual Workshop support.
|
||||||
|
// edf { name = "netbeans"; } #Disable NetBeans integration support.
|
||||||
|
// edf { name = "sniff"; feat = "sniff" ; } #Include Sniff interface.
|
||||||
|
// edf { name = "multibyte"; } #Include multibyte editing support.
|
||||||
|
// edf { name = "hangulinput"; feat = "hangulinput" ;} #Include Hangul input support.
|
||||||
|
// edf { name = "xim"; } #Include XIM input support.
|
||||||
|
// edf { name = "fontset"; } #Include X fontset output support.
|
||||||
|
// edf { name = "acl"; } #Don't check for ACL support.
|
||||||
|
// edf { name = "gpm"; } #Don't use gpm (Linux mouse daemon).
|
||||||
|
// edf { name = "nls"; enable = {nativeBuildInputs = [gettext];}; } #Don't support NLS (gettext()).
|
||||||
|
;
|
||||||
|
|
||||||
|
cfg = {
|
||||||
|
pythonSupport = config.vim.python or true;
|
||||||
|
rubySupport = config.vim.ruby or true;
|
||||||
|
nlsSupport = config.vim.nls or false;
|
||||||
|
tclSupport = config.vim.tcl or false;
|
||||||
|
multibyteSupport = config.vim.multibyte or false;
|
||||||
|
cscopeSupport = config.vim.cscope or false;
|
||||||
|
netbeansSupport = config.netbeans or true; # eg envim is using it
|
||||||
|
|
||||||
|
# by default, compile with darwin support if we're compiling on darwin, but
|
||||||
|
# allow this to be disabled by setting config.vim.darwin to false
|
||||||
|
darwinSupport = stdenv.isDarwin && (config.vim.darwin or true);
|
||||||
|
|
||||||
|
# add .nix filetype detection and minimal syntax highlighting support
|
||||||
|
ftNixSupport = config.vim.ftNix or true;
|
||||||
|
};
|
||||||
|
|
||||||
|
postInstall = stdenv.lib.optionalString stdenv.isLinux ''
|
||||||
|
rpath=`patchelf --print-rpath $out/bin/qvim`;
|
||||||
|
for i in $nativeBuildInputs; do
|
||||||
|
echo adding $i/lib
|
||||||
|
rpath=$rpath:$i/lib
|
||||||
|
done
|
||||||
|
echo $nativeBuildInputs
|
||||||
|
echo $rpath
|
||||||
|
patchelf --set-rpath $rpath $out/bin/qvim
|
||||||
|
'';
|
||||||
|
|
||||||
|
dontStrip = 1;
|
||||||
|
|
||||||
|
meta = with stdenv.lib; {
|
||||||
|
description = "The most popular clone of the VI editor (Qt GUI fork)";
|
||||||
|
homepage = https://bitbucket.org/equalsraf/vim-qt/wiki/Home;
|
||||||
|
maintainers = with maintainers; [ smironov ];
|
||||||
|
platforms = platforms.linux;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|
@ -1,6 +1,8 @@
|
|||||||
{ stdenv
|
{ stdenv
|
||||||
, fetchurl
|
, fetchurl
|
||||||
|
, pkgconfig
|
||||||
, bzip2
|
, bzip2
|
||||||
|
, fontconfig
|
||||||
, freetype
|
, freetype
|
||||||
, ghostscript ? null
|
, ghostscript ? null
|
||||||
, libjpeg
|
, libjpeg
|
||||||
@ -16,14 +18,14 @@
|
|||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
version = "6.8.6-9";
|
version = "6.8.7-5";
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "ImageMagick-${version}";
|
name = "ImageMagick-${version}";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "mirror://imagemagick/${name}.tar.xz";
|
url = "mirror://imagemagick/${name}.tar.xz";
|
||||||
sha256 = "1bpj8676mph5cvyjsdgf27i6yg2iw9iskk5c69mvpxkyawgjw1vg";
|
sha256 = "1cn1kg7scs6r7r00qlqirhnmqjnmyczbidab3vgqarw9qszh2ri6";
|
||||||
};
|
};
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
@ -42,17 +44,18 @@ stdenv.mkDerivation rec {
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
propagatedBuildInputs =
|
propagatedBuildInputs =
|
||||||
[ bzip2 freetype libjpeg libpng libtiff libxml2 zlib librsvg
|
[ bzip2 fontconfig freetype libjpeg libpng libtiff libxml2 zlib librsvg
|
||||||
libtool jasper libX11
|
libtool jasper libX11
|
||||||
] ++ stdenv.lib.optional (ghostscript != null && stdenv.system != "x86_64-darwin") ghostscript;
|
] ++ stdenv.lib.optional (ghostscript != null && stdenv.system != "x86_64-darwin") ghostscript;
|
||||||
|
|
||||||
buildInputs = [ tetex ];
|
buildInputs = [ tetex pkgconfig ];
|
||||||
|
|
||||||
postInstall = ''(cd "$out/include" && ln -s ImageMagick* ImageMagick)'';
|
postInstall = ''(cd "$out/include" && ln -s ImageMagick* ImageMagick)'';
|
||||||
|
|
||||||
meta = {
|
meta = with stdenv.lib; {
|
||||||
homepage = http://www.imagemagick.org/;
|
homepage = http://www.imagemagick.org/;
|
||||||
description = "A software suite to create, edit, compose, or convert bitmap images";
|
description = "A software suite to create, edit, compose, or convert bitmap images";
|
||||||
platforms = stdenv.lib.platforms.linux;
|
platforms = platforms.linux ++ [ "x86_64-darwin" ];
|
||||||
|
maintainers = with maintainers; [ the-kenny ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -4,11 +4,11 @@
|
|||||||
, python, pygtk, libart_lgpl, libexif, gettext, xlibs }:
|
, python, pygtk, libart_lgpl, libexif, gettext, xlibs }:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "gimp-2.8.6";
|
name = "gimp-2.8.8";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "ftp://ftp.gimp.org/pub/gimp/v2.8/${name}.tar.bz2";
|
url = "ftp://ftp.gimp.org/pub/gimp/v2.8/${name}.tar.bz2";
|
||||||
md5 = "12b3fdf33d1f07ae79b412a9e38b9693";
|
md5 = "ef2547c3514a1096931637bd6250635a";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs =
|
buildInputs =
|
||||||
|
@ -68,18 +68,18 @@ rec {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
fourier = pluginDerivation {
|
fourier = pluginDerivation rec {
|
||||||
/* menu:
|
/* menu:
|
||||||
Filters/Generic/FFT Forward
|
Filters/Generic/FFT Forward
|
||||||
Filters/Generic/FFT Inverse
|
Filters/Generic/FFT Inverse
|
||||||
*/
|
*/
|
||||||
name = "fourier-0.3.3";
|
name = "fourier-0.4.1";
|
||||||
buildInputs = [ gimp pkgs.fftwSinglePrec pkgconfig glib] ++ gimp.nativeBuildInputs;
|
buildInputs = [ gimp pkgs.fftw pkgconfig glib] ++ gimp.nativeBuildInputs;
|
||||||
postInstall = "fail";
|
postInstall = "fail";
|
||||||
installPhase = "installPlugins fourier";
|
installPhase = "installPlugins fourier";
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = http://people.via.ecp.fr/~remi/soft/gimp/fourier-0.3.3.tar.gz;
|
url = "http://registry.gimp.org/files/${name}.tar.gz";
|
||||||
sha256 = "0xxgp0lrjxsj54sgygi31c7q41jkqzn0v18qyznrviv8r099v29p";
|
sha256 = "1pr3y3zl9w8xs1circdrxpr98myz9m8wfzy022al79z4pdanwvs1";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -110,6 +110,9 @@ rec {
|
|||||||
url = mirror://sourceforge/gimp-texturize/texturize-2.1_src.tgz;
|
url = mirror://sourceforge/gimp-texturize/texturize-2.1_src.tgz;
|
||||||
sha256 = "0cdjq25g3yfxx6bzx6nid21kq659s1vl9id4wxyjs2dhcv229cg3";
|
sha256 = "0cdjq25g3yfxx6bzx6nid21kq659s1vl9id4wxyjs2dhcv229cg3";
|
||||||
};
|
};
|
||||||
|
patchPhase = ''
|
||||||
|
sed -i '/.*gimpimage_pdb.h.*/ d' src/*.c*
|
||||||
|
'';
|
||||||
installPhase = "installPlugins src/texturize";
|
installPhase = "installPlugins src/texturize";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -140,21 +143,23 @@ rec {
|
|||||||
installPhase = "installPlugins src/gimp-lqr-plugin";
|
installPhase = "installPlugins src/gimp-lqr-plugin";
|
||||||
};
|
};
|
||||||
|
|
||||||
# this is more than a gimp plugin !
|
|
||||||
# it can be made to compile the gimp plugin only though..
|
|
||||||
gmic =
|
gmic =
|
||||||
let imagemagick = pkgs.imagemagickBig; # maybe the non big version is enough?
|
let
|
||||||
in pluginDerivation {
|
imagemagick = pkgs.imagemagickBig; # maybe the non big version is enough?
|
||||||
name = "gmic-1.3.2.0";
|
fftw = pkgs.fftw.override {pthreads = true;};
|
||||||
buildInputs = [ imagemagick pkgconfig gimp pkgs.fftwSinglePrec ] ++ gimp.nativeBuildInputs;
|
in pluginDerivation rec {
|
||||||
|
name = "gmic-1.5.7.2";
|
||||||
|
buildInputs = [imagemagick pkgconfig fftw gimp] ++ gimp.nativeBuildInputs;
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = mirror://sourceforge/gmic/gmic_1.3.2.0.tar.gz;
|
url = mirror://sourceforge/gmic/gmic_1.5.7.2.tar.gz;
|
||||||
sha256 = "0mxq664vzzc2l6k6sqm9syp34mihhi262i6fixk1g12lmc28797h";
|
sha256 = "1cpbxb3p2c8bcv2cbr150whapzjc7w09i3jza0z9x3xj8c0vdyv1";
|
||||||
};
|
};
|
||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${imagemagick}/include/ImageMagick"
|
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${imagemagick}/include/ImageMagick"
|
||||||
'';
|
'';
|
||||||
installPhase = "installPlugins src/gmic4gimp";
|
sourceRoot = "${name}/src";
|
||||||
|
buildPhase = "make gimp";
|
||||||
|
installPhase = "installPlugins gmic_gimp";
|
||||||
meta = {
|
meta = {
|
||||||
description = "script language for image processing which comes with its open-source interpreter";
|
description = "script language for image processing which comes with its open-source interpreter";
|
||||||
homepage = http://gmic.sourceforge.net/repository.shtml;
|
homepage = http://gmic.sourceforge.net/repository.shtml;
|
||||||
@ -170,9 +175,9 @@ rec {
|
|||||||
# this is more than a gimp plugin !
|
# this is more than a gimp plugin !
|
||||||
# either load the raw image with gimp (and the import dialog will popup)
|
# either load the raw image with gimp (and the import dialog will popup)
|
||||||
# or use the binary
|
# or use the binary
|
||||||
ufraw = pluginDerivation {
|
ufraw = pluginDerivation rec {
|
||||||
name = "ufraw-0.15";
|
name = "ufraw-0.19.2";
|
||||||
buildInputs = [pkgs.lcms gimp] ++ gimp.nativeBuildInputs;
|
buildInputs = [pkgs.gtkimageview pkgs.lcms gimp] ++ gimp.nativeBuildInputs;
|
||||||
# --enable-mime - install mime files, see README for more information
|
# --enable-mime - install mime files, see README for more information
|
||||||
# --enable-extras - build extra (dcraw, nikon-curve) executables
|
# --enable-extras - build extra (dcraw, nikon-curve) executables
|
||||||
# --enable-dst-correction - enable DST correction for file timestamps.
|
# --enable-dst-correction - enable DST correction for file timestamps.
|
||||||
@ -184,8 +189,8 @@ rec {
|
|||||||
configureFlags = "--enable-extras --enable-dst-correction --enable-contrast";
|
configureFlags = "--enable-extras --enable-dst-correction --enable-contrast";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = mirror://sourceforge/ufraw/ufraw-0.15.tar.gz;
|
url = "mirror://sourceforge/ufraw/${name}.tar.gz";
|
||||||
sha256 = "0cf3csksjkyl91zxhjnn74vc31l14nm6n1i02s76xdvvkk9ics8k";
|
sha256 = "1lxba7pb3vcsq94dwapg9bk9mb3ww6r3pvvcyb0ah5gh2sgzxgkk";
|
||||||
};
|
};
|
||||||
installPhase = "
|
installPhase = "
|
||||||
installPlugins ufraw-gimp
|
installPlugins ufraw-gimp
|
||||||
|
@ -17,6 +17,10 @@ buildPythonPackage rec {
|
|||||||
|
|
||||||
buildInputs = [ stdenv libX11 gettext ];
|
buildInputs = [ stdenv libX11 gettext ];
|
||||||
|
|
||||||
|
patchPhase = ''
|
||||||
|
sed -i "s@/usr/local/share/locale@$out/share/locale@" mirage.py
|
||||||
|
'';
|
||||||
|
|
||||||
pythonPath = [ pygtk pil ];
|
pythonPath = [ pygtk pil ];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
{ stdenv, fetchurl, fetchgit, hotplugSupport ? true, libusb ? null, gt68xxFirmware ? null }:
|
{ stdenv, fetchurl, fetchgit, hotplugSupport ? true, libusb ? null
|
||||||
|
, gt68xxFirmware ? null, snapscanFirmware ? null
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
firmware = gt68xxFirmware { inherit fetchurl; };
|
firmware = gt68xxFirmware { inherit fetchurl; };
|
||||||
in
|
in
|
||||||
@ -29,6 +31,11 @@ stdenv.mkDerivation {
|
|||||||
if gt68xxFirmware != null then
|
if gt68xxFirmware != null then
|
||||||
"mkdir -p \${out}/share/sane/gt68xx ; ln -s " + firmware.fw +
|
"mkdir -p \${out}/share/sane/gt68xx ; ln -s " + firmware.fw +
|
||||||
" \${out}/share/sane/gt68xx/" + firmware.name
|
" \${out}/share/sane/gt68xx/" + firmware.name
|
||||||
|
else if snapscanFirmware != null then
|
||||||
|
"mkdir -p \${out}/share/sane/snapscan ; ln -s " + snapscanFirmware +
|
||||||
|
" \${out}/share/sane/snapscan/your-firmwarefile.bin ;" +
|
||||||
|
"mkdir -p \${out}/etc/sane.d ; " +
|
||||||
|
"echo epson2 > \${out}/etc/sane.d/dll.conf"
|
||||||
else "";
|
else "";
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
{ stdenv, fetchurl, hotplugSupport ? true, libusb ? null, libv4l ? null, pkgconfig ? null , gt68xxFirmware ? null }:
|
{ stdenv, fetchurl, hotplugSupport ? true, libusb ? null, libv4l ? null
|
||||||
|
, pkgconfig ? null, gt68xxFirmware ? null, snapscanFirmware ? null
|
||||||
|
}:
|
||||||
|
|
||||||
assert hotplugSupport -> (stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux");
|
assert hotplugSupport -> (stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux");
|
||||||
|
|
||||||
@ -36,6 +38,9 @@ stdenv.mkDerivation rec {
|
|||||||
if gt68xxFirmware != null then
|
if gt68xxFirmware != null then
|
||||||
"mkdir -p \${out}/share/sane/gt68xx ; ln -s " + firmware.fw +
|
"mkdir -p \${out}/share/sane/gt68xx ; ln -s " + firmware.fw +
|
||||||
" \${out}/share/sane/gt68xx/" + firmware.name
|
" \${out}/share/sane/gt68xx/" + firmware.name
|
||||||
|
else if snapscanFirmware != null then
|
||||||
|
"mkdir -p \${out}/share/sane/snapscan ; ln -s " + snapscanFirmware +
|
||||||
|
" \${out}/share/sane/snapscan/your-firmwarefile.bin"
|
||||||
else "";
|
else "";
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
{ stdenv, fetchurl, saneBackends, saneFrontends, libX11, gtk, pkgconfig, libpng, libusb ? null }:
|
{ stdenv, fetchurl, saneBackends, saneFrontends, libX11, gtk, pkgconfig, libpng
|
||||||
|
, libusb ? null
|
||||||
|
, gimpSupport ? false, gimp_2_8 ? null
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert gimpSupport -> gimp_2_8 != null;
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "xsane-0.998";
|
name = "xsane-0.998";
|
||||||
@ -12,8 +17,9 @@ stdenv.mkDerivation rec {
|
|||||||
sed -e '/SANE_CAP_ALWAYS_SETTABLE/d' -i src/xsane-back-gtk.c
|
sed -e '/SANE_CAP_ALWAYS_SETTABLE/d' -i src/xsane-back-gtk.c
|
||||||
'';
|
'';
|
||||||
|
|
||||||
buildInputs = [libpng saneBackends saneFrontends libX11 gtk pkgconfig ] ++
|
buildInputs = [libpng saneBackends saneFrontends libX11 gtk pkgconfig ]
|
||||||
(if libusb != null then [libusb] else []);
|
++ (if libusb != null then [libusb] else [])
|
||||||
|
++ stdenv.lib.optional gimpSupport gimp_2_8;
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = http://www.sane-project.org/;
|
homepage = http://www.sane-project.org/;
|
||||||
|
33
pkgs/applications/graphics/smartdeblur/default.nix
Normal file
33
pkgs/applications/graphics/smartdeblur/default.nix
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{ fetchurl, stdenv, cmake, qt4, fftw }:
|
||||||
|
|
||||||
|
let
|
||||||
|
rev = "9895036d26";
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "smartdeblur-git-${rev}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://github.com/Y-Vladimir/SmartDeblur/tarball/${rev}";
|
||||||
|
name = "${name}.tar.gz";
|
||||||
|
sha256 = "126x9x1zhqdarjz9in0p1qhmqg3jwz7frizadjvx723g2ppi33s4";
|
||||||
|
};
|
||||||
|
|
||||||
|
preConfigure = ''
|
||||||
|
cd src
|
||||||
|
'';
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
buildInputs = [ cmake qt4 fftw ];
|
||||||
|
|
||||||
|
cmakeFlags = "-DUSE_SYSTEM_FFTW=ON";
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://github.com/Y-Vladimir/SmartDeblur";
|
||||||
|
description = "Tool for restoring blurry and defocused images";
|
||||||
|
license = "GPLv3";
|
||||||
|
maintainers = with stdenv.lib.maintainers; [ viric ];
|
||||||
|
platforms = with stdenv.lib.platforms; linux;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
|
|||||||
'';
|
'';
|
||||||
meta = {
|
meta = {
|
||||||
# Quicker to unpack locally than load Hydra
|
# Quicker to unpack locally than load Hydra
|
||||||
platforms = [];
|
hydraPlatforms = [];
|
||||||
maintainers = with stdenv.lib.maintainers; [raskin];
|
maintainers = with stdenv.lib.maintainers; [raskin];
|
||||||
license = with stdenv.lib.licenses; lgpl21Plus;
|
license = with stdenv.lib.licenses; lgpl21Plus;
|
||||||
description = "GraphViz graph viewer/navigator";
|
description = "GraphViz graph viewer/navigator";
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
assert stdenv.system == "i686-linux";
|
assert stdenv.system == "i686-linux";
|
||||||
|
|
||||||
let version = "9.5.1"; in
|
let version = "9.5.5"; in
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "adobe-reader-${version}-1";
|
name = "adobe-reader-${version}-1";
|
||||||
@ -12,7 +12,7 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/${version}/enu/AdbeRdr${version}-1_i486linux_enu.tar.bz2";
|
url = "http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/${version}/enu/AdbeRdr${version}-1_i486linux_enu.tar.bz2";
|
||||||
sha256 = "19mwhbfsivb21zmrz2hllf0kh4i225ac697y026bakyysn0vig56";
|
sha256 = "0h35misxrqkl5zlmmvray1bqf4ywczkm89n9qw7d9arqbg3aj3pf";
|
||||||
};
|
};
|
||||||
|
|
||||||
# !!! Adobe Reader contains copies of OpenSSL, libcurl, and libicu.
|
# !!! Adobe Reader contains copies of OpenSSL, libcurl, and libicu.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
rev = "6a3a855b48a3db64821d1cf8a91c5ee2815a2b2d";
|
rev = "6a3a855b48a3db64821d1cf8a91c5ee2815a2b2d";
|
||||||
name = "dunst-${rev}";
|
name = "dunst-0-${stdenv.lib.strings.substring 0 7 rev}";
|
||||||
|
|
||||||
# 1.0.0 release doesn't include 100% CPU fix
|
# 1.0.0 release doesn't include 100% CPU fix
|
||||||
# https://github.com/knopwob/dunst/issues/98
|
# https://github.com/knopwob/dunst/issues/98
|
||||||
|
@ -25,10 +25,11 @@ stdenv.mkDerivation {
|
|||||||
--replace "/usr/share" "$out/share"
|
--replace "/usr/share" "$out/share"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = {
|
meta = with stdenv.lib; {
|
||||||
description = "An e-book reader for Linux";
|
description = "An e-book reader for Linux";
|
||||||
homepage = http://www.fbreader.org/;
|
homepage = http://www.fbreader.org/;
|
||||||
license = "GPL";
|
license = licenses.gpl3;
|
||||||
maintainer = [ stdenv.lib.maintainers.coroa ];
|
platforms = platforms.linux; # possibly also on unix general
|
||||||
|
maintainer = [ maintainers.coroa ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
76
pkgs/applications/misc/gnuradio/default.nix
Normal file
76
pkgs/applications/misc/gnuradio/default.nix
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
{ stdenv, fetchurl
|
||||||
|
# core dependencies
|
||||||
|
, cmake, pkgconfig, git, boost, cppunit, fftw
|
||||||
|
# python wrappers
|
||||||
|
, python, swig2, numpy, scipy, matplotlib
|
||||||
|
# grc - the gnu radio companion
|
||||||
|
, cheetahTemplate, pygtk
|
||||||
|
# gr-wavelet: collection of wavelet blocks
|
||||||
|
, gsl
|
||||||
|
# gr-qtgui: the Qt-based GUI
|
||||||
|
, qt4, qwt, pyqt4 #, pyqwt
|
||||||
|
# gr-wxgui: the Wx-based GUI
|
||||||
|
, wxPython, lxml
|
||||||
|
# gr-audio: audio subsystems (system/OS dependent)
|
||||||
|
, alsaLib
|
||||||
|
# uhd: the Ettus USRP Hardware Driver Interface
|
||||||
|
, uhd
|
||||||
|
# gr-video-sdl: PAL and NTSC display
|
||||||
|
, SDL
|
||||||
|
, libusb1, orc, pyopengl
|
||||||
|
, makeWrapper }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "gnuradio-${version}";
|
||||||
|
version = "3.7.1";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "http://gnuradio.org/releases/gnuradio/${name}.tar.gz";
|
||||||
|
sha256 = "1kfni8vpgr6v9rdiz3zsmwc07qj6zka9x22z2y0y4rak2xnzdxz9";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
cmake pkgconfig git boost cppunit fftw python swig2 orc lxml qt4 qwt
|
||||||
|
alsaLib SDL libusb1 uhd gsl makeWrapper
|
||||||
|
];
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
cheetahTemplate numpy scipy matplotlib pyqt4 pygtk wxPython pyopengl
|
||||||
|
];
|
||||||
|
|
||||||
|
preConfigure = ''
|
||||||
|
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-unused-variable"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# - Ensure we get an interactive backend for matplotlib. If not the gr_plot_*
|
||||||
|
# programs will not display anything. Yes, $MATPLOTLIBRC must point to the
|
||||||
|
# *dirname* where matplotlibrc is located, not the file itself.
|
||||||
|
# - GNU Radio core is C++ but the user interface (GUI and API) is Python, so
|
||||||
|
# we must wrap the stuff in bin/.
|
||||||
|
postInstall = ''
|
||||||
|
printf "backend : Qt4Agg\n" > "$out/share/gnuradio/matplotlibrc"
|
||||||
|
|
||||||
|
for file in "$out"/bin/*; do
|
||||||
|
wrapProgram "$file" \
|
||||||
|
--set PYTHONPATH $PYTHONPATH:$(toPythonPath "$out") \
|
||||||
|
--set MATPLOTLIBRC "$out/share/gnuradio"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with stdenv.lib; {
|
||||||
|
description = "Software Defined Radio (SDR) software";
|
||||||
|
longDescription = ''
|
||||||
|
GNU Radio is a free & open-source software development toolkit that
|
||||||
|
provides signal processing blocks to implement software radios. It can be
|
||||||
|
used with readily-available low-cost external RF hardware to create
|
||||||
|
software-defined radios, or without hardware in a simulation-like
|
||||||
|
environment. It is widely used in hobbyist, academic and commercial
|
||||||
|
environments to support both wireless communications research and
|
||||||
|
real-world radio systems.
|
||||||
|
'';
|
||||||
|
homepage = http://www.gnuradio.org;
|
||||||
|
license = licenses.gpl3;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
maintainers = [ maintainers.bjornfor ];
|
||||||
|
};
|
||||||
|
}
|
@ -23,7 +23,7 @@ assert mercurialSupport -> (mercurial != null);
|
|||||||
|
|
||||||
let
|
let
|
||||||
name = "ikiwiki";
|
name = "ikiwiki";
|
||||||
version = "3.20130518";
|
version = "3.20130904.1";
|
||||||
|
|
||||||
lib = stdenv.lib;
|
lib = stdenv.lib;
|
||||||
in
|
in
|
||||||
@ -32,7 +32,7 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "http://ftp.de.debian.org/debian/pool/main/i/ikiwiki/${name}_${version}.tar.gz";
|
url = "http://ftp.de.debian.org/debian/pool/main/i/ikiwiki/${name}_${version}.tar.gz";
|
||||||
sha256 = "00mmxxlbzv6bz3cz3746r5lqwby6liwsg7m3jfba8258y52w13qp";
|
sha256 = "1nxycsz49y6801lbrvazzg7qc9q2vpr2ny1sba26f9gwc00c650h";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [ perl TextMarkdown URI HTMLParser HTMLScrubber HTMLTemplate
|
buildInputs = [ perl TextMarkdown URI HTMLParser HTMLScrubber HTMLTemplate
|
||||||
|
@ -10,8 +10,10 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
buildInputs = [ pkgconfig zlib freetype libjpeg jbig2dec openjpeg libX11 libXext ];
|
buildInputs = [ pkgconfig zlib freetype libjpeg jbig2dec openjpeg libX11 libXext ];
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
preBuild = ''
|
preBuild = ''
|
||||||
export makeFlags="prefix=$out"
|
export makeFlags="prefix=$out build=release"
|
||||||
export NIX_CFLAGS_COMPILE=" $NIX_CFLAGS_COMPILE -I$(echo ${openjpeg}/include/openjpeg-*) "
|
export NIX_CFLAGS_COMPILE=" $NIX_CFLAGS_COMPILE -I$(echo ${openjpeg}/include/openjpeg-*) "
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
|
|||||||
wrapProgram "$out/bin/redshift-gtk" --prefix PYTHONPATH : $PYTHONPATH:${pygtk}/lib/${python.libPrefix}/site-packages/gtk-2.0:${pyxdg}/lib/${python.libPrefix}/site-packages/pyxdg:$out/lib/${python.libPrefix}/site-packages
|
wrapProgram "$out/bin/redshift-gtk" --prefix PYTHONPATH : $PYTHONPATH:${pygtk}/lib/${python.libPrefix}/site-packages/gtk-2.0:${pyxdg}/lib/${python.libPrefix}/site-packages/pyxdg:$out/lib/${python.libPrefix}/site-packages
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = {
|
meta = with stdenv.lib; {
|
||||||
description = "changes the color temperature of your screen gradually";
|
description = "changes the color temperature of your screen gradually";
|
||||||
longDescription = ''
|
longDescription = ''
|
||||||
The color temperature is set according to the position of the
|
The color temperature is set according to the position of the
|
||||||
@ -39,5 +39,6 @@ stdenv.mkDerivation rec {
|
|||||||
'';
|
'';
|
||||||
license = "GPLv3+";
|
license = "GPLv3+";
|
||||||
homepage = "http://jonls.dk/redshift";
|
homepage = "http://jonls.dk/redshift";
|
||||||
|
platforms = platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -114,5 +114,6 @@ stdenv.mkDerivation {
|
|||||||
passthru = {
|
passthru = {
|
||||||
inherit gtk version;
|
inherit gtk version;
|
||||||
isFirefox3Like = true;
|
isFirefox3Like = true;
|
||||||
|
broken = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -44,9 +44,9 @@ let
|
|||||||
throw "no x86_64 debugging version available"
|
throw "no x86_64 debugging version available"
|
||||||
else rec {
|
else rec {
|
||||||
# -> http://labs.adobe.com/downloads/flashplayer10.html
|
# -> http://labs.adobe.com/downloads/flashplayer10.html
|
||||||
version = "11.2.202.297";
|
version = "11.2.202.310";
|
||||||
url = "http://fpdownload.macromedia.com/get/flashplayer/pdc/${version}/install_flash_player_11_linux.x86_64.tar.gz";
|
url = "http://fpdownload.macromedia.com/get/flashplayer/pdc/${version}/install_flash_player_11_linux.x86_64.tar.gz";
|
||||||
sha256 = "0jfigq56p6zp61pmc4jl12p8gv2jhfmim18j1b30iikw3iv26lh8";
|
sha256 = "03r9r7h3l4i15hw62k9il6pjzq122nldbgxr37b4y10xp08a9izj";
|
||||||
}
|
}
|
||||||
else if stdenv.system == "i686-linux" then
|
else if stdenv.system == "i686-linux" then
|
||||||
if debug then {
|
if debug then {
|
||||||
@ -55,9 +55,9 @@ let
|
|||||||
url = http://fpdownload.macromedia.com/pub/flashplayer/updaters/11/flashplayer_11_plugin_debug.i386.tar.gz;
|
url = http://fpdownload.macromedia.com/pub/flashplayer/updaters/11/flashplayer_11_plugin_debug.i386.tar.gz;
|
||||||
sha256 = "1z3649lv9sh7jnwl8d90a293nkaswagj2ynhsr4xmwiy7c0jz2lk";
|
sha256 = "1z3649lv9sh7jnwl8d90a293nkaswagj2ynhsr4xmwiy7c0jz2lk";
|
||||||
} else rec {
|
} else rec {
|
||||||
version = "11.2.202.297";
|
version = "11.2.202.310";
|
||||||
url = "http://fpdownload.macromedia.com/get/flashplayer/pdc/${version}/install_flash_player_11_linux.i386.tar.gz";
|
url = "http://fpdownload.macromedia.com/get/flashplayer/pdc/${version}/install_flash_player_11_linux.i386.tar.gz";
|
||||||
sha256 = "0mpj25b2ar7gccqmw5lffdzlr3yyfalphpgwnl18s05wy1fx484y";
|
sha256 = "0qf09p92silp81pjfcg2vcfcfi1padizmb58q5iaarnapgkawlbh";
|
||||||
}
|
}
|
||||||
else throw "Flash Player is not supported on this platform";
|
else throw "Flash Player is not supported on this platform";
|
||||||
|
|
||||||
|
@ -21,5 +21,6 @@ stdenv.mkDerivation {
|
|||||||
license = "ZLIB/LIBPNG"; # see README.
|
license = "ZLIB/LIBPNG"; # see README.
|
||||||
maintainers = [args.lib.maintainers.marcweber];
|
maintainers = [args.lib.maintainers.marcweber];
|
||||||
platforms = args.lib.platforms.linux;
|
platforms = args.lib.platforms.linux;
|
||||||
|
broken = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -16,5 +16,6 @@ stdenv.mkDerivation {
|
|||||||
license = "MIT";
|
license = "MIT";
|
||||||
maintainers = [args.lib.maintainers.marcweber];
|
maintainers = [args.lib.maintainers.marcweber];
|
||||||
platforms = args.lib.platforms.linux;
|
platforms = args.lib.platforms.linux;
|
||||||
|
broken = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -16,5 +16,6 @@ stdenv.mkDerivation {
|
|||||||
license = "MIT";
|
license = "MIT";
|
||||||
maintainers = [args.lib.maintainers.marcweber];
|
maintainers = [args.lib.maintainers.marcweber];
|
||||||
platforms = args.lib.platforms.linux;
|
platforms = args.lib.platforms.linux;
|
||||||
|
broken = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,30 +1,33 @@
|
|||||||
{ stdenv, fetchurl, dbus, gnutls2, wxGTK28, libidn, tinyxml, gettext, pkgconfig, xdg_utils, gtk2, sqlite }:
|
{ stdenv, fetchurl, dbus, gnutls2, wxGTK28, libidn, tinyxml, gettext
|
||||||
|
, pkgconfig, xdg_utils, gtk2, sqlite }:
|
||||||
|
|
||||||
let version = "3.6.0.2"; in
|
let version = "3.7.3"; in
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "filezilla-${version}";
|
name = "filezilla-${version}";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "mirror://sourceforge/project/filezilla/FileZilla_Client/${version}/FileZilla_${version}_src.tar.bz2";
|
url = "mirror://sourceforge/project/filezilla/FileZilla_Client/${version}/FileZilla_${version}_src.tar.bz2";
|
||||||
sha256 = "01n6k1q21i21451rdx3rgc4hhxghdn5b0ldzpjsp44ipgww5wsjk";
|
sha256 = "0hn043jjb7qh040dgyhffp9jrrmca1xxbc998vyqyg83lrq2j09b";
|
||||||
};
|
};
|
||||||
|
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--disable-manualupdatecheck"
|
"--disable-manualupdatecheck"
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [ dbus gnutls2 wxGTK28 libidn tinyxml gettext pkgconfig xdg_utils gtk2 sqlite ];
|
buildInputs = [
|
||||||
|
dbus gnutls2 wxGTK28 libidn tinyxml gettext pkgconfig xdg_utils gtk2 sqlite
|
||||||
|
];
|
||||||
|
|
||||||
meta = {
|
meta = with stdenv.lib; {
|
||||||
homepage = "http://filezilla-project.org/";
|
homepage = "http://filezilla-project.org/";
|
||||||
description = "Graphical FTP, FTPS and SFTP client";
|
description = "Graphical FTP, FTPS and SFTP client";
|
||||||
license = "GPLv2";
|
license = licenses.gpl2;
|
||||||
|
|
||||||
longDescription = ''
|
longDescription = ''
|
||||||
FileZilla Client is a free, open source FTP client. It supports
|
FileZilla Client is a free, open source FTP client. It supports
|
||||||
FTP, SFTP, and FTPS (FTP over SSL/TLS). The client is available
|
FTP, SFTP, and FTPS (FTP over SSL/TLS). The client is available
|
||||||
under many platforms, binaries for Windows, Linux and Mac OS X are
|
under many platforms, binaries for Windows, Linux and Mac OS X are
|
||||||
provided.
|
provided.
|
||||||
'';
|
'';
|
||||||
|
platforms = platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
, libtoxcore, pkgconfig }:
|
, libtoxcore, pkgconfig }:
|
||||||
|
|
||||||
let
|
let
|
||||||
version = "75d356e52a";
|
version = "5570b7c98aa";
|
||||||
date = "20131011";
|
date = "20131112";
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "toxic-${date}-${version}";
|
name = "toxic-${date}-${version}";
|
||||||
@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
|
|||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://github.com/Tox/toxic/tarball/${version}";
|
url = "https://github.com/Tox/toxic/tarball/${version}";
|
||||||
name = "${name}.tar.gz";
|
name = "${name}.tar.gz";
|
||||||
sha256 = "14wyvms8l07sl88g8y6g2jv95sq7cnhbaqf4n32xxilch8rymq47";
|
sha256 = "02jfdp10qcw4w62qpra59m9yzzk7a3k2nypkbq5q7ydksbqlx8sj";
|
||||||
};
|
};
|
||||||
|
|
||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user