Merge branch master into staging
This commit is contained in:
commit
6ec373d776
@ -612,15 +612,45 @@ sed -i '/ = data_files/d' setup.py</programlisting>
|
|||||||
|
|
||||||
|
|
||||||
<section xml:id="ssec-language-ruby"><title>Ruby</title>
|
<section xml:id="ssec-language-ruby"><title>Ruby</title>
|
||||||
<para>For example, to package yajl-ruby package, use gem-nix:</para>
|
<para>There currently is support to bundle applications that are packaged as Ruby gems. The utility "bundix" allows you to write a <filename>Gemfile</filename>, let bundler create a <filename>Gemfile.lock</filename>, and then convert
|
||||||
|
this into a nix expression that contains all Gem dependencies automatically.</para>
|
||||||
|
|
||||||
|
<para>For example, to package sensu, we did:</para>
|
||||||
|
|
||||||
<screen>
|
<screen>
|
||||||
$ nix-env -i gem-nix
|
<![CDATA[$ cd pkgs/servers/monitoring
|
||||||
$ gem-nix --no-user-install --nix-file=pkgs/development/interpreters/ruby/generated.nix yajl-ruby
|
$ mkdir sensu
|
||||||
$ nix-build -A rubyPackages.yajl-ruby
|
$ cat > Gemfile
|
||||||
</screen>
|
source 'https://rubygems.org'
|
||||||
</section>
|
gem 'sensu'
|
||||||
|
$ bundler package --path /tmp/vendor/bundle
|
||||||
|
$ $(nix-build '&nixpkgs>' -A bundix)/bin/bundix
|
||||||
|
$ cat > default.nix
|
||||||
|
{ lib, bundlerEnv, ruby }:
|
||||||
|
|
||||||
|
bundlerEnv {
|
||||||
|
name = "sensu-0.17.1";
|
||||||
|
|
||||||
|
inherit ruby;
|
||||||
|
gemfile = ./Gemfile;
|
||||||
|
lockfile = ./Gemfile.lock;
|
||||||
|
gemset = ./gemset.nix;
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "A monitoring framework that aims to be simple, malleable,
|
||||||
|
and scalable.";
|
||||||
|
homepage = http://sensuapp.org/;
|
||||||
|
license = with licenses; mit;
|
||||||
|
maintainers = with maintainers; [ theuni ];
|
||||||
|
platforms = platforms.unix;
|
||||||
|
};
|
||||||
|
}]]>
|
||||||
|
</screen>
|
||||||
|
|
||||||
|
<para>Please check in the <filename>Gemfile</filename>, <filename>Gemfile.lock</filename> and the <filename>gemset.nix</filename> so future updates can be run easily.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
<section xml:id="ssec-language-go"><title>Go</title>
|
<section xml:id="ssec-language-go"><title>Go</title>
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@
|
|||||||
copumpkin = "Dan Peebles <pumpkingod@gmail.com>";
|
copumpkin = "Dan Peebles <pumpkingod@gmail.com>";
|
||||||
coroa = "Jonas Hörsch <jonas@chaoflow.net>";
|
coroa = "Jonas Hörsch <jonas@chaoflow.net>";
|
||||||
cstrahan = "Charles Strahan <charles.c.strahan@gmail.com>";
|
cstrahan = "Charles Strahan <charles.c.strahan@gmail.com>";
|
||||||
|
cwoac = "Oliver Matthews <oliver@codersoffortune.net>";
|
||||||
DamienCassou = "Damien Cassou <damien.cassou@gmail.com>";
|
DamienCassou = "Damien Cassou <damien.cassou@gmail.com>";
|
||||||
davidrusu = "David Rusu <davidrusu.me@gmail.com>";
|
davidrusu = "David Rusu <davidrusu.me@gmail.com>";
|
||||||
dbohdan = "Danyil Bohdan <danyil.bohdan@gmail.com>";
|
dbohdan = "Danyil Bohdan <danyil.bohdan@gmail.com>";
|
||||||
@ -102,6 +103,7 @@
|
|||||||
jirkamarsik = "Jirka Marsik <jiri.marsik89@gmail.com>";
|
jirkamarsik = "Jirka Marsik <jiri.marsik89@gmail.com>";
|
||||||
joachifm = "Joachim Fasting <joachifm@fastmail.fm>";
|
joachifm = "Joachim Fasting <joachifm@fastmail.fm>";
|
||||||
joamaki = "Jussi Maki <joamaki@gmail.com>";
|
joamaki = "Jussi Maki <joamaki@gmail.com>";
|
||||||
|
joelmo = "Joel Moberg <joel.moberg@gmail.com>";
|
||||||
joelteon = "Joel Taylor <me@joelt.io>";
|
joelteon = "Joel Taylor <me@joelt.io>";
|
||||||
jpbernardy = "Jean-Philippe Bernardy <jeanphilippe.bernardy@gmail.com>";
|
jpbernardy = "Jean-Philippe Bernardy <jeanphilippe.bernardy@gmail.com>";
|
||||||
jwiegley = "John Wiegley <johnw@newartisans.com>";
|
jwiegley = "John Wiegley <johnw@newartisans.com>";
|
||||||
@ -153,6 +155,7 @@
|
|||||||
pjones = "Peter Jones <pjones@devalot.com>";
|
pjones = "Peter Jones <pjones@devalot.com>";
|
||||||
pkmx = "Chih-Mao Chen <pkmx.tw@gmail.com>";
|
pkmx = "Chih-Mao Chen <pkmx.tw@gmail.com>";
|
||||||
plcplc = "Philip Lykke Carlsen <plcplc@gmail.com>";
|
plcplc = "Philip Lykke Carlsen <plcplc@gmail.com>";
|
||||||
|
pmahoney = "Patrick Mahoney <pat@polycrystal.org>";
|
||||||
prikhi = "Pavan Rikhi <pavan.rikhi@gmail.com>";
|
prikhi = "Pavan Rikhi <pavan.rikhi@gmail.com>";
|
||||||
pSub = "Pascal Wittmann <mail@pascal-wittmann.de>";
|
pSub = "Pascal Wittmann <mail@pascal-wittmann.de>";
|
||||||
puffnfresh = "Brian McKenna <brian@brianmckenna.org>";
|
puffnfresh = "Brian McKenna <brian@brianmckenna.org>";
|
||||||
@ -189,6 +192,7 @@
|
|||||||
tailhook = "Paul Colomiets <paul@colomiets.name>";
|
tailhook = "Paul Colomiets <paul@colomiets.name>";
|
||||||
thammers = "Tobias Hammerschmidt <jawr@gmx.de>";
|
thammers = "Tobias Hammerschmidt <jawr@gmx.de>";
|
||||||
the-kenny = "Moritz Ulrich <moritz@tarn-vedra.de>";
|
the-kenny = "Moritz Ulrich <moritz@tarn-vedra.de>";
|
||||||
|
theuni = "Christian Theune <ct@flyingcircus.io>";
|
||||||
thoughtpolice = "Austin Seipp <aseipp@pobox.com>";
|
thoughtpolice = "Austin Seipp <aseipp@pobox.com>";
|
||||||
titanous = "Jonathan Rudenberg <jonathan@titanous.com>";
|
titanous = "Jonathan Rudenberg <jonathan@titanous.com>";
|
||||||
tomberek = "Thomas Bereknyei <tomberek@gmail.com>";
|
tomberek = "Thomas Bereknyei <tomberek@gmail.com>";
|
||||||
|
170
lib/modules.nix
170
lib/modules.nix
@ -9,25 +9,69 @@ rec {
|
|||||||
|
|
||||||
/* Evaluate a set of modules. The result is a set of two
|
/* Evaluate a set of modules. The result is a set of two
|
||||||
attributes: ‘options’: the nested set of all option declarations,
|
attributes: ‘options’: the nested set of all option declarations,
|
||||||
and ‘config’: the nested set of all option values. */
|
and ‘config’: the nested set of all option values.
|
||||||
evalModules = { modules, prefix ? [], args ? {}, check ? true }:
|
!!! Please think twice before adding to this argument list! The more
|
||||||
|
that is specified here instead of in the modules themselves the harder
|
||||||
|
it is to transparently move a set of modules to be a submodule of another
|
||||||
|
config (as the proper arguments need to be replicated at each call to
|
||||||
|
evalModules) and the less declarative the module set is. */
|
||||||
|
evalModules = { modules
|
||||||
|
, prefix ? []
|
||||||
|
, # This would be remove in the future, Prefer _module.args option instead.
|
||||||
|
args ? {}
|
||||||
|
, # This would be remove in the future, Prefer _module.check option instead.
|
||||||
|
check ? true
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
args' = args // { lib = import ./.; } // result;
|
# This internal module declare internal options under the `_module'
|
||||||
closed = closeModules modules args';
|
# attribute. These options are fragile, as they are used by the
|
||||||
|
# module system to change the interpretation of modules.
|
||||||
|
internalModule = rec {
|
||||||
|
_file = ./modules.nix;
|
||||||
|
|
||||||
|
key = _file;
|
||||||
|
|
||||||
|
options = {
|
||||||
|
_module.args = mkOption {
|
||||||
|
type = types.attrsOf types.unspecified;
|
||||||
|
internal = true;
|
||||||
|
description = "Arguments passed to each module.";
|
||||||
|
};
|
||||||
|
|
||||||
|
_module.check = mkOption {
|
||||||
|
type = types.uniq types.bool;
|
||||||
|
internal = true;
|
||||||
|
default = check;
|
||||||
|
description = "Whether to check whether all option definitions have matching declarations.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
_module.args = args;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
closed = closeModules (modules ++ [ internalModule ]) { inherit config options; lib = import ./.; };
|
||||||
|
|
||||||
# Note: the list of modules is reversed to maintain backward
|
# Note: the list of modules is reversed to maintain backward
|
||||||
# compatibility with the old module system. Not sure if this is
|
# compatibility with the old module system. Not sure if this is
|
||||||
# the most sensible policy.
|
# the most sensible policy.
|
||||||
options = mergeModules prefix (reverseList closed);
|
options = mergeModules prefix (reverseList closed);
|
||||||
|
|
||||||
# Traverse options and extract the option values into the final
|
# Traverse options and extract the option values into the final
|
||||||
# config set. At the same time, check whether all option
|
# config set. At the same time, check whether all option
|
||||||
# definitions have matching declarations.
|
# definitions have matching declarations.
|
||||||
|
# !!! _module.check's value can't depend on any other config values
|
||||||
|
# without an infinite recursion. One way around this is to make the
|
||||||
|
# 'config' passed around to the modules be unconditionally unchecked,
|
||||||
|
# and only do the check in 'result'.
|
||||||
config = yieldConfig prefix options;
|
config = yieldConfig prefix options;
|
||||||
yieldConfig = prefix: set:
|
yieldConfig = prefix: set:
|
||||||
let res = removeAttrs (mapAttrs (n: v:
|
let res = removeAttrs (mapAttrs (n: v:
|
||||||
if isOption v then v.value
|
if isOption v then v.value
|
||||||
else yieldConfig (prefix ++ [n]) v) set) ["_definedNames"];
|
else yieldConfig (prefix ++ [n]) v) set) ["_definedNames"];
|
||||||
in
|
in
|
||||||
if check && set ? _definedNames then
|
if options._module.check.value && set ? _definedNames then
|
||||||
fold (m: res:
|
fold (m: res:
|
||||||
fold (name: res:
|
fold (name: res:
|
||||||
if set ? ${name} then res else throw "The option `${showOption (prefix ++ [name])}' defined in `${m.file}' does not exist.")
|
if set ? ${name} then res else throw "The option `${showOption (prefix ++ [name])}' defined in `${m.file}' does not exist.")
|
||||||
@ -43,7 +87,7 @@ rec {
|
|||||||
let
|
let
|
||||||
toClosureList = file: parentKey: imap (n: x:
|
toClosureList = file: parentKey: imap (n: x:
|
||||||
if isAttrs x || isFunction x then
|
if isAttrs x || isFunction x then
|
||||||
unifyModuleSyntax file "${parentKey}:anon-${toString n}" (applyIfFunction x args)
|
unifyModuleSyntax file "${parentKey}:anon-${toString n}" (unpackSubmodule applyIfFunction x args)
|
||||||
else
|
else
|
||||||
unifyModuleSyntax (toString x) (toString x) (applyIfFunction (import x) args));
|
unifyModuleSyntax (toString x) (toString x) (applyIfFunction (import x) args));
|
||||||
in
|
in
|
||||||
@ -74,7 +118,39 @@ rec {
|
|||||||
config = removeAttrs m ["key" "_file" "require" "imports"];
|
config = removeAttrs m ["key" "_file" "require" "imports"];
|
||||||
};
|
};
|
||||||
|
|
||||||
applyIfFunction = f: arg: if isFunction f then f arg else f;
|
applyIfFunction = f: arg@{ config, options, lib }: if isFunction f then
|
||||||
|
let
|
||||||
|
# Module arguments are resolved in a strict manner when attribute set
|
||||||
|
# deconstruction is used. As the arguments are now defined with the
|
||||||
|
# config._module.args option, the strictness used on the attribute
|
||||||
|
# set argument would cause an infinite loop, if the result of the
|
||||||
|
# option is given as argument.
|
||||||
|
#
|
||||||
|
# To work-around the strictness issue on the deconstruction of the
|
||||||
|
# attributes set argument, we create a new attribute set which is
|
||||||
|
# constructed to satisfy the expected set of attributes. Thus calling
|
||||||
|
# a module will resolve strictly the attributes used as argument but
|
||||||
|
# not their values. The values are forwarding the result of the
|
||||||
|
# evaluation of the option.
|
||||||
|
requiredArgs = builtins.attrNames (builtins.functionArgs f);
|
||||||
|
extraArgs = builtins.listToAttrs (map (name: {
|
||||||
|
inherit name;
|
||||||
|
value = config._module.args.${name};
|
||||||
|
}) requiredArgs);
|
||||||
|
in f (extraArgs // arg)
|
||||||
|
else
|
||||||
|
f;
|
||||||
|
|
||||||
|
/* We have to pack and unpack submodules. We cannot wrap the expected
|
||||||
|
result of the function as we would no longer be able to list the arguments
|
||||||
|
of the submodule. (see applyIfFunction) */
|
||||||
|
unpackSubmodule = unpack: m: args:
|
||||||
|
if isType "submodule" m then
|
||||||
|
{ _file = m.file; } // (unpack m.submodule args)
|
||||||
|
else unpack m args;
|
||||||
|
|
||||||
|
packSubmodule = file: m:
|
||||||
|
{ _type = "submodule"; file = file; submodule = m; };
|
||||||
|
|
||||||
/* 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.
|
||||||
@ -106,12 +182,9 @@ rec {
|
|||||||
else []
|
else []
|
||||||
) configs);
|
) configs);
|
||||||
nrOptions = count (m: isOption m.options) decls;
|
nrOptions = count (m: isOption m.options) decls;
|
||||||
# Process mkMerge and mkIf properties.
|
# Extract the definitions for this loc
|
||||||
defns' = concatMap (m:
|
defns' = map (m: { inherit (m) file; value = m.config.${name}; })
|
||||||
if m.config ? ${name}
|
(filter (m: m.config ? ${name}) configs);
|
||||||
then map (m': { inherit (m) file; value = m'; }) (dischargeProperties m.config.${name})
|
|
||||||
else []
|
|
||||||
) configs;
|
|
||||||
in
|
in
|
||||||
if nrOptions == length decls then
|
if nrOptions == length decls then
|
||||||
let opt = fixupOptionType loc (mergeOptionDecls loc decls);
|
let opt = fixupOptionType loc (mergeOptionDecls loc decls);
|
||||||
@ -156,15 +229,12 @@ rec {
|
|||||||
current option declaration as the file use for the submodule. If the
|
current option declaration as the file use for the submodule. If the
|
||||||
submodule defines any filename, then we ignore the enclosing option file. */
|
submodule defines any filename, then we ignore the enclosing option file. */
|
||||||
options' = toList opt.options.options;
|
options' = toList opt.options.options;
|
||||||
addModuleFile = m:
|
|
||||||
if isFunction m then args: { _file = opt.file; } // (m args)
|
|
||||||
else { _file = opt.file; } // m;
|
|
||||||
coerceOption = file: opt:
|
coerceOption = file: opt:
|
||||||
if isFunction opt then args: { _file = file; } // (opt args)
|
if isFunction opt then packSubmodule file opt
|
||||||
else { _file = file; options = opt; };
|
else packSubmodule file { options = opt; };
|
||||||
getSubModules = opt.options.type.getSubModules or null;
|
getSubModules = opt.options.type.getSubModules or null;
|
||||||
submodules =
|
submodules =
|
||||||
if getSubModules != null then map addModuleFile getSubModules ++ res.options
|
if getSubModules != null then map (packSubmodule opt.file) getSubModules ++ res.options
|
||||||
else if opt.options ? options then map (coerceOption opt.file) options' ++ res.options
|
else if opt.options ? options then map (coerceOption opt.file) options' ++ res.options
|
||||||
else res.options;
|
else res.options;
|
||||||
in opt.options // res //
|
in opt.options // res //
|
||||||
@ -177,27 +247,17 @@ rec {
|
|||||||
config value. */
|
config value. */
|
||||||
evalOptionValue = loc: opt: defs:
|
evalOptionValue = loc: opt: defs:
|
||||||
let
|
let
|
||||||
# Process mkOverride properties, adding in the default
|
# Add in the default value for this option, if any.
|
||||||
# value specified in the option declaration (if any).
|
defs' = (optional (opt ? default)
|
||||||
defsFinal' = filterOverrides
|
{ file = head opt.declarations; value = mkOptionDefault opt.default; }) ++ defs;
|
||||||
((if opt ? default then [{ file = head opt.declarations; value = mkOptionDefault opt.default; }] else []) ++ defs);
|
|
||||||
# Sort mkOrder properties.
|
# Handle properties, check types, and merge everything together
|
||||||
defsFinal =
|
inherit (mergeDefinitions loc opt.type defs') isDefined defsFinal mergedValue;
|
||||||
# Avoid sorting if we don't have to.
|
|
||||||
if any (def: def.value._type or "" == "order") defsFinal'
|
|
||||||
then sortProperties defsFinal'
|
|
||||||
else defsFinal';
|
|
||||||
files = map (def: def.file) defsFinal;
|
files = map (def: def.file) defsFinal;
|
||||||
# Type-check the remaining definitions, and merge them if
|
|
||||||
# possible.
|
|
||||||
merged =
|
merged =
|
||||||
if defsFinal == [] then
|
if isDefined then mergedValue
|
||||||
throw "The option `${showOption loc}' is used but not defined."
|
else throw "The option `${showOption loc}' is used but not defined.";
|
||||||
else
|
|
||||||
fold (def: res:
|
|
||||||
if opt.type.check def.value then res
|
|
||||||
else throw "The option value `${showOption loc}' in `${def.file}' is not a ${opt.type.name}.")
|
|
||||||
(opt.type.merge loc defsFinal) defsFinal;
|
|
||||||
# Finally, apply the ‘apply’ function to the merged
|
# Finally, apply the ‘apply’ function to the merged
|
||||||
# value. This allows options to yield a value computed
|
# value. This allows options to yield a value computed
|
||||||
# from the definitions.
|
# from the definitions.
|
||||||
@ -205,8 +265,40 @@ rec {
|
|||||||
in opt //
|
in opt //
|
||||||
{ value = addErrorContext "while evaluating the option `${showOption loc}':" value;
|
{ value = addErrorContext "while evaluating the option `${showOption loc}':" value;
|
||||||
definitions = map (def: def.value) defsFinal;
|
definitions = map (def: def.value) defsFinal;
|
||||||
|
inherit isDefined files;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Merge definitions of a value of a given type
|
||||||
|
mergeDefinitions = loc: type: defs: rec {
|
||||||
|
defsFinal =
|
||||||
|
let
|
||||||
|
# Process mkMerge and mkIf properties
|
||||||
|
processIfAndMerge = defs: concatMap (m:
|
||||||
|
map (value: { inherit (m) file; inherit value; }) (dischargeProperties m.value)
|
||||||
|
) defs;
|
||||||
|
|
||||||
|
# Process mkOverride properties
|
||||||
|
processOverride = defs: filterOverrides defs;
|
||||||
|
|
||||||
|
# Sort mkOrder properties
|
||||||
|
processOrder = defs:
|
||||||
|
# Avoid sorting if we don't have to.
|
||||||
|
if any (def: def.value._type or "" == "order") defs
|
||||||
|
then sortProperties defs
|
||||||
|
else defs;
|
||||||
|
in
|
||||||
|
processOrder (processOverride (processIfAndMerge defs));
|
||||||
|
|
||||||
|
# Type-check the remaining definitions, and merge them
|
||||||
|
mergedValue = fold (def: res:
|
||||||
|
if type.check def.value then res
|
||||||
|
else throw "The option value `${showOption loc}' in `${def.file}' is not a ${type.name}.")
|
||||||
|
(type.merge loc defsFinal) defsFinal;
|
||||||
|
|
||||||
isDefined = defsFinal != [];
|
isDefined = defsFinal != [];
|
||||||
inherit files;
|
optionalValue =
|
||||||
|
if isDefined then { value = mergedValue; }
|
||||||
|
else {};
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Given a config set, expand mkMerge properties, and push down the
|
/* Given a config set, expand mkMerge properties, and push down the
|
||||||
|
@ -57,13 +57,17 @@ checkConfigError() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check boolean option.
|
||||||
checkConfigOutput "false" config.enable ./declare-enable.nix
|
checkConfigOutput "false" config.enable ./declare-enable.nix
|
||||||
checkConfigError 'The option .* defined in .* does not exist.' config.enable ./define-enable.nix
|
checkConfigError 'The option .* defined in .* does not exist.' config.enable ./define-enable.nix
|
||||||
|
|
||||||
|
# Check mkForce without submodules.
|
||||||
set -- config.enable ./declare-enable.nix ./define-enable.nix
|
set -- config.enable ./declare-enable.nix ./define-enable.nix
|
||||||
checkConfigOutput "true" "$@"
|
checkConfigOutput "true" "$@"
|
||||||
checkConfigOutput "false" "$@" ./define-force-enable.nix
|
checkConfigOutput "false" "$@" ./define-force-enable.nix
|
||||||
checkConfigOutput "false" "$@" ./define-enable-force.nix
|
checkConfigOutput "false" "$@" ./define-enable-force.nix
|
||||||
|
|
||||||
|
# Check mkForce with option and submodules.
|
||||||
checkConfigError 'attribute .*foo.* .* not found' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix
|
checkConfigError 'attribute .*foo.* .* not found' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix
|
||||||
checkConfigOutput 'false' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix
|
checkConfigOutput 'false' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix
|
||||||
set -- config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo-enable.nix
|
set -- config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo-enable.nix
|
||||||
@ -73,6 +77,7 @@ checkConfigOutput 'false' "$@" ./define-loaOfSub-force-foo-enable.nix
|
|||||||
checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-force-enable.nix
|
checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-force-enable.nix
|
||||||
checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-enable-force.nix
|
checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-enable-force.nix
|
||||||
|
|
||||||
|
# Check overriding effect of mkForce on submodule definitions.
|
||||||
checkConfigError 'attribute .*bar.* .* not found' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix
|
checkConfigError 'attribute .*bar.* .* not found' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix
|
||||||
checkConfigOutput 'false' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar.nix
|
checkConfigOutput 'false' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar.nix
|
||||||
set -- config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar-enable.nix
|
set -- config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar-enable.nix
|
||||||
@ -82,6 +87,26 @@ checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-loaOfSub-force-f
|
|||||||
checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-force-enable.nix
|
checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-force-enable.nix
|
||||||
checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-enable-force.nix
|
checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-enable-force.nix
|
||||||
|
|
||||||
|
# Check mkIf with submodules.
|
||||||
|
checkConfigError 'attribute .*foo.* .* not found' config.loaOfSub.foo.enable ./declare-enable.nix ./declare-loaOfSub-any-enable.nix
|
||||||
|
set -- config.loaOfSub.foo.enable ./declare-enable.nix ./declare-loaOfSub-any-enable.nix
|
||||||
|
checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-if-loaOfSub-foo-enable.nix
|
||||||
|
checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-loaOfSub-if-foo-enable.nix
|
||||||
|
checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-loaOfSub-foo-if-enable.nix
|
||||||
|
checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-enable-if.nix
|
||||||
|
checkConfigOutput 'true' "$@" ./define-enable.nix ./define-if-loaOfSub-foo-enable.nix
|
||||||
|
checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-if-foo-enable.nix
|
||||||
|
checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-foo-if-enable.nix
|
||||||
|
checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-foo-enable-if.nix
|
||||||
|
|
||||||
|
# Check _module.args.
|
||||||
|
checkConfigOutput "true" config.enable ./declare-enable.nix ./custom-arg-define-enable.nix
|
||||||
|
|
||||||
|
# Check _module.check.
|
||||||
|
set -- config.enable ./declare-enable.nix ./define-enable.nix ./define-loaOfSub-foo.nix
|
||||||
|
checkConfigError 'The option .* defined in .* does not exist.' "$@"
|
||||||
|
checkConfigOutput "true" "$@" ./define-module-check.nix
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
====== module tests ======
|
====== module tests ======
|
||||||
$pass Pass
|
$pass Pass
|
||||||
|
8
lib/tests/modules/custom-arg-define-enable.nix
Normal file
8
lib/tests/modules/custom-arg-define-enable.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ lib, custom, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
_module.args.custom = true;
|
||||||
|
enable = custom;
|
||||||
|
};
|
||||||
|
}
|
5
lib/tests/modules/define-if-loaOfSub-foo-enable.nix
Normal file
5
lib/tests/modules/define-if-loaOfSub-foo-enable.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
lib.mkIf config.enable {
|
||||||
|
loaOfSub.foo.enable = true;
|
||||||
|
}
|
5
lib/tests/modules/define-loaOfSub-foo-enable-if.nix
Normal file
5
lib/tests/modules/define-loaOfSub-foo-enable-if.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
loaOfSub.foo.enable = lib.mkIf config.enable true;
|
||||||
|
}
|
7
lib/tests/modules/define-loaOfSub-foo-if-enable.nix
Normal file
7
lib/tests/modules/define-loaOfSub-foo-if-enable.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
loaOfSub.foo = lib.mkIf config.enable {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
7
lib/tests/modules/define-loaOfSub-if-foo-enable.nix
Normal file
7
lib/tests/modules/define-loaOfSub-if-foo-enable.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
loaOfSub = lib.mkIf config.enable {
|
||||||
|
foo.enable = true;
|
||||||
|
};
|
||||||
|
}
|
3
lib/tests/modules/define-module-check.nix
Normal file
3
lib/tests/modules/define-module-check.nix
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
_module.check = false;
|
||||||
|
}
|
@ -6,6 +6,7 @@ with import ./attrsets.nix;
|
|||||||
with import ./options.nix;
|
with import ./options.nix;
|
||||||
with import ./trivial.nix;
|
with import ./trivial.nix;
|
||||||
with import ./strings.nix;
|
with import ./strings.nix;
|
||||||
|
with {inherit (import ./modules.nix) mergeDefinitions; };
|
||||||
|
|
||||||
rec {
|
rec {
|
||||||
|
|
||||||
@ -109,11 +110,15 @@ rec {
|
|||||||
|
|
||||||
listOf = elemType: mkOptionType {
|
listOf = elemType: mkOptionType {
|
||||||
name = "list of ${elemType.name}s";
|
name = "list of ${elemType.name}s";
|
||||||
check = value: isList value && all elemType.check value;
|
check = isList;
|
||||||
merge = loc: defs:
|
merge = loc: defs:
|
||||||
concatLists (imap (n: def: imap (m: def':
|
map (x: x.value) (filter (x: x ? value) (concatLists (imap (n: def: imap (m: def':
|
||||||
elemType.merge (loc ++ ["[${toString n}-${toString m}]"])
|
(mergeDefinitions
|
||||||
[{ inherit (def) file; value = def'; }]) def.value) defs);
|
(loc ++ ["[definition ${toString n}-entry ${toString m}]"])
|
||||||
|
elemType
|
||||||
|
[{ inherit (def) file; value = def'; }]
|
||||||
|
).optionalValue
|
||||||
|
) def.value) defs)));
|
||||||
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["*"]);
|
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["*"]);
|
||||||
getSubModules = elemType.getSubModules;
|
getSubModules = elemType.getSubModules;
|
||||||
substSubModules = m: listOf (elemType.substSubModules m);
|
substSubModules = m: listOf (elemType.substSubModules m);
|
||||||
@ -121,12 +126,14 @@ rec {
|
|||||||
|
|
||||||
attrsOf = elemType: mkOptionType {
|
attrsOf = elemType: mkOptionType {
|
||||||
name = "attribute set of ${elemType.name}s";
|
name = "attribute set of ${elemType.name}s";
|
||||||
check = x: isAttrs x && all elemType.check (attrValues x);
|
check = isAttrs;
|
||||||
merge = loc: defs:
|
merge = loc: defs:
|
||||||
zipAttrsWith (name: elemType.merge (loc ++ [name]))
|
mapAttrs (n: v: v.value) (filterAttrs (n: v: v ? value) (zipAttrsWith (name: defs:
|
||||||
|
(mergeDefinitions (loc ++ [name]) elemType defs).optionalValue
|
||||||
|
)
|
||||||
# Push down position info.
|
# Push down position info.
|
||||||
(map (def: listToAttrs (mapAttrsToList (n: def':
|
(map (def: listToAttrs (mapAttrsToList (n: def':
|
||||||
{ name = n; value = { inherit (def) file; value = def'; }; }) def.value)) defs);
|
{ name = n; value = { inherit (def) file; value = def'; }; }) def.value)) defs)));
|
||||||
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name>"]);
|
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name>"]);
|
||||||
getSubModules = elemType.getSubModules;
|
getSubModules = elemType.getSubModules;
|
||||||
substSubModules = m: attrsOf (elemType.substSubModules m);
|
substSubModules = m: attrsOf (elemType.substSubModules m);
|
||||||
@ -150,10 +157,7 @@ rec {
|
|||||||
attrOnly = attrsOf elemType;
|
attrOnly = attrsOf elemType;
|
||||||
in mkOptionType {
|
in mkOptionType {
|
||||||
name = "list or attribute set of ${elemType.name}s";
|
name = "list or attribute set of ${elemType.name}s";
|
||||||
check = x:
|
check = x: isList x || isAttrs x;
|
||||||
if isList x then listOnly.check x
|
|
||||||
else if isAttrs x then attrOnly.check x
|
|
||||||
else false;
|
|
||||||
merge = loc: defs: attrOnly.merge loc (imap convertIfList defs);
|
merge = loc: defs: attrOnly.merge loc (imap convertIfList defs);
|
||||||
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name?>"]);
|
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name?>"]);
|
||||||
getSubModules = elemType.getSubModules;
|
getSubModules = elemType.getSubModules;
|
||||||
@ -194,7 +198,11 @@ rec {
|
|||||||
let
|
let
|
||||||
coerce = def: if 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
|
||||||
{ modules = opts'; inherit prefix;
|
{ modules = opts'; inherit prefix;
|
||||||
# FIXME: hack to get shit to evaluate.
|
# FIXME: hack to get shit to evaluate.
|
||||||
|
@ -25,6 +25,22 @@
|
|||||||
<arg choice='plain'><option>--root</option></arg>
|
<arg choice='plain'><option>--root</option></arg>
|
||||||
<replaceable>root</replaceable>
|
<replaceable>root</replaceable>
|
||||||
</arg>
|
</arg>
|
||||||
|
<arg>
|
||||||
|
<group choice='req'>
|
||||||
|
<arg choice='plain'><option>--max-jobs</option></arg>
|
||||||
|
<arg choice='plain'><option>-j</option></arg>
|
||||||
|
</group>
|
||||||
|
<replaceable>number</replaceable>
|
||||||
|
</arg>
|
||||||
|
<arg>
|
||||||
|
<option>--cores</option>
|
||||||
|
<replaceable>number</replaceable>
|
||||||
|
</arg>
|
||||||
|
<arg>
|
||||||
|
<option>--option</option>
|
||||||
|
<replaceable>name</replaceable>
|
||||||
|
<replaceable>value</replaceable>
|
||||||
|
</arg>
|
||||||
<arg>
|
<arg>
|
||||||
<arg choice='plain'><option>--show-trace</option></arg>
|
<arg choice='plain'><option>--show-trace</option></arg>
|
||||||
</arg>
|
</arg>
|
||||||
@ -96,6 +112,37 @@ it.</para>
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry><term><option>--max-jobs</option></term>
|
||||||
|
<term><option>-j</option></term>
|
||||||
|
|
||||||
|
<listitem><para>Sets the maximum number of build jobs that Nix will
|
||||||
|
perform in parallel to the specified number. The default is <literal>1</literal>.
|
||||||
|
A higher value is useful on SMP systems or to exploit I/O latency.</para></listitem>
|
||||||
|
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
|
||||||
|
<varlistentry><term><option>--cores</option></term>
|
||||||
|
|
||||||
|
<listitem><para>Sets the value of the <envar>NIX_BUILD_CORES</envar>
|
||||||
|
environment variable in the invocation of builders. Builders can
|
||||||
|
use this variable at their discretion to control the maximum amount
|
||||||
|
of parallelism. For instance, in Nixpkgs, if the derivation
|
||||||
|
attribute <varname>enableParallelBuilding</varname> is set to
|
||||||
|
<literal>true</literal>, the builder passes the
|
||||||
|
<option>-j<replaceable>N</replaceable></option> flag to GNU Make.
|
||||||
|
The value <literal>0</literal> means that the builder should use all
|
||||||
|
available CPU cores in the system.</para></listitem>
|
||||||
|
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry><term><option>--option</option> <replaceable>name</replaceable> <replaceable>value</replaceable></term>
|
||||||
|
|
||||||
|
<listitem><para>Set the Nix configuration option
|
||||||
|
<replaceable>name</replaceable> to <replaceable>value</replaceable>.</para></listitem>
|
||||||
|
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>--show-trace</option></term>
|
<term><option>--show-trace</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -2,27 +2,51 @@
|
|||||||
# configuration object (`config') from which we can retrieve option
|
# configuration object (`config') from which we can retrieve option
|
||||||
# values.
|
# values.
|
||||||
|
|
||||||
{ system ? builtins.currentSystem
|
# !!! Please think twice before adding to this argument list!
|
||||||
, pkgs ? null
|
# Ideally eval-config.nix would be an extremely thin wrapper
|
||||||
, baseModules ? import ../modules/module-list.nix
|
# around lib.evalModules, so that modular systems that have nixos configs
|
||||||
, extraArgs ? {}
|
# as subcomponents (e.g. the container feature, or nixops if network
|
||||||
|
# expressions are ever made modular at the top level) can just use
|
||||||
|
# types.submodule instead of using eval-config.nix
|
||||||
|
{ # !!! system can be set modularly, would be nice to remove
|
||||||
|
system ? builtins.currentSystem
|
||||||
|
, # !!! is this argument needed any more? The pkgs argument can
|
||||||
|
# be set modularly anyway.
|
||||||
|
pkgs ? null
|
||||||
|
, # !!! what do we gain by making this configurable?
|
||||||
|
baseModules ? import ../modules/module-list.nix
|
||||||
|
, # !!! See comment about args in lib/modules.nix
|
||||||
|
extraArgs ? {}
|
||||||
, modules
|
, modules
|
||||||
, check ? true
|
, # !!! See comment about check in lib/modules.nix
|
||||||
|
check ? true
|
||||||
, prefix ? []
|
, prefix ? []
|
||||||
|
, lib ? import ../../lib
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let extraArgs_ = extraArgs; pkgs_ = pkgs; system_ = system;
|
let extraArgs_ = extraArgs; pkgs_ = pkgs; system_ = system;
|
||||||
extraModules = let e = builtins.getEnv "NIXOS_EXTRA_MODULE_PATH";
|
extraModules = let e = builtins.getEnv "NIXOS_EXTRA_MODULE_PATH";
|
||||||
in if e == "" then [] else [(import (builtins.toPath e))];
|
in if e == "" then [] else [(import (builtins.toPath e))];
|
||||||
|
in
|
||||||
|
|
||||||
|
let
|
||||||
|
pkgsModule = rec {
|
||||||
|
_file = ./eval-config.nix;
|
||||||
|
key = _file;
|
||||||
|
config = {
|
||||||
|
nixpkgs.system = lib.mkDefault system_;
|
||||||
|
_module.args.pkgs = lib.mkIf (pkgs_ != null) (lib.mkForce pkgs_);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
in rec {
|
in rec {
|
||||||
|
|
||||||
# Merge the option definitions in all modules, forming the full
|
# Merge the option definitions in all modules, forming the full
|
||||||
# system configuration.
|
# system configuration.
|
||||||
inherit (pkgs.lib.evalModules {
|
inherit (lib.evalModules {
|
||||||
inherit prefix;
|
inherit prefix check;
|
||||||
modules = modules ++ extraModules ++ baseModules;
|
modules = modules ++ extraModules ++ baseModules ++ [ pkgsModule ];
|
||||||
args = extraArgs;
|
args = extraArgs;
|
||||||
check = check && options.environment.checkConfigurationOptions.value;
|
|
||||||
}) config options;
|
}) config options;
|
||||||
|
|
||||||
# These are the extra arguments passed to every module. In
|
# These are the extra arguments passed to every module. In
|
||||||
@ -33,40 +57,8 @@ in rec {
|
|||||||
# the 64-bit package anyway. However, it would be cleaner to respect
|
# the 64-bit package anyway. However, it would be cleaner to respect
|
||||||
# nixpkgs.config here.
|
# nixpkgs.config here.
|
||||||
extraArgs = extraArgs_ // {
|
extraArgs = extraArgs_ // {
|
||||||
inherit pkgs modules baseModules;
|
inherit modules baseModules;
|
||||||
modulesPath = ../modules;
|
|
||||||
pkgs_i686 = import ./nixpkgs.nix { system = "i686-linux"; config.allowUnfree = true; };
|
|
||||||
utils = import ./utils.nix pkgs;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Import Nixpkgs, allowing the NixOS option nixpkgs.config to
|
inherit (config._module.args) pkgs;
|
||||||
# specify the Nixpkgs configuration (e.g., to set package options
|
|
||||||
# such as firefox.enableGeckoMediaPlayer, or to apply global
|
|
||||||
# overrides such as changing GCC throughout the system), and the
|
|
||||||
# option nixpkgs.system to override the platform type. This is
|
|
||||||
# tricky, because we have to prevent an infinite recursion: "pkgs"
|
|
||||||
# is passed as an argument to NixOS modules, but the value of "pkgs"
|
|
||||||
# depends on config.nixpkgs.config, which we get from the modules.
|
|
||||||
# So we call ourselves here with "pkgs" explicitly set to an
|
|
||||||
# instance that doesn't depend on nixpkgs.config.
|
|
||||||
pkgs =
|
|
||||||
if pkgs_ != null
|
|
||||||
then pkgs_
|
|
||||||
else import ./nixpkgs.nix (
|
|
||||||
let
|
|
||||||
system = if nixpkgsOptions.system != "" then nixpkgsOptions.system else system_;
|
|
||||||
nixpkgsOptions = (import ./eval-config.nix {
|
|
||||||
inherit system extraArgs modules prefix;
|
|
||||||
# For efficiency, leave out most NixOS modules; they don't
|
|
||||||
# define nixpkgs.config, so it's pointless to evaluate them.
|
|
||||||
baseModules = [ ../modules/misc/nixpkgs.nix ../modules/config/no-x-libs.nix ];
|
|
||||||
pkgs = import ./nixpkgs.nix { system = system_; config = {}; };
|
|
||||||
check = false;
|
|
||||||
}).config.nixpkgs;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
inherit system;
|
|
||||||
inherit (nixpkgsOptions) config;
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ stdenv, perl, cdrkit, pathsFromGraph
|
{ stdenv, perl, pathsFromGraph, xorriso, syslinux
|
||||||
|
|
||||||
, # The file name of the resulting ISO image.
|
, # The file name of the resulting ISO image.
|
||||||
isoName ? "cd.iso"
|
isoName ? "cd.iso"
|
||||||
@ -22,12 +22,18 @@
|
|||||||
, # Whether this should be an efi-bootable El-Torito CD.
|
, # Whether this should be an efi-bootable El-Torito CD.
|
||||||
efiBootable ? false
|
efiBootable ? false
|
||||||
|
|
||||||
|
, # Wheter this should be an hybrid CD (bootable from USB as well as CD).
|
||||||
|
usbBootable ? false
|
||||||
|
|
||||||
, # The path (in the ISO file system) of the boot image.
|
, # The path (in the ISO file system) of the boot image.
|
||||||
bootImage ? ""
|
bootImage ? ""
|
||||||
|
|
||||||
, # The path (in the ISO file system) of the efi boot image.
|
, # The path (in the ISO file system) of the efi boot image.
|
||||||
efiBootImage ? ""
|
efiBootImage ? ""
|
||||||
|
|
||||||
|
, # The path (outside the ISO file system) of the isohybrid-mbr image.
|
||||||
|
isohybridMbrImage ? ""
|
||||||
|
|
||||||
, # Whether to compress the resulting ISO image with bzip2.
|
, # Whether to compress the resulting ISO image with bzip2.
|
||||||
compressImage ? false
|
compressImage ? false
|
||||||
|
|
||||||
@ -38,13 +44,14 @@
|
|||||||
|
|
||||||
assert bootable -> bootImage != "";
|
assert bootable -> bootImage != "";
|
||||||
assert efiBootable -> efiBootImage != "";
|
assert efiBootable -> efiBootImage != "";
|
||||||
|
assert usbBootable -> isohybridMbrImage != "";
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "iso9660-image";
|
name = "iso9660-image";
|
||||||
builder = ./make-iso9660-image.sh;
|
builder = ./make-iso9660-image.sh;
|
||||||
buildInputs = [perl cdrkit];
|
buildInputs = [perl xorriso syslinux];
|
||||||
|
|
||||||
inherit isoName bootable bootImage compressImage volumeID pathsFromGraph efiBootImage efiBootable;
|
inherit isoName bootable bootImage compressImage volumeID pathsFromGraph efiBootImage efiBootable isohybridMbrImage usbBootable;
|
||||||
|
|
||||||
# !!! should use XML.
|
# !!! should use XML.
|
||||||
sources = map (x: x.source) contents;
|
sources = map (x: x.source) contents;
|
||||||
|
@ -13,6 +13,20 @@ stripSlash() {
|
|||||||
if test "${res:0:1}" = /; then res=${res:1}; fi
|
if test "${res:0:1}" = /; then res=${res:1}; fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Escape potential equal signs (=) with backslash (\=)
|
||||||
|
escapeEquals() {
|
||||||
|
echo "$1" | sed -e 's/\\/\\\\/g' -e 's/=/\\=/g'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Queues an file/directory to be placed on the ISO.
|
||||||
|
# An entry consists of a local source path (2) and
|
||||||
|
# a destination path on the ISO (1).
|
||||||
|
addPath() {
|
||||||
|
target="$1"
|
||||||
|
source="$2"
|
||||||
|
echo "$(escapeEquals "$target")=$(escapeEquals "$source")" >> pathlist
|
||||||
|
}
|
||||||
|
|
||||||
stripSlash "$bootImage"; bootImage="$res"
|
stripSlash "$bootImage"; bootImage="$res"
|
||||||
|
|
||||||
|
|
||||||
@ -31,11 +45,20 @@ if test -n "$bootable"; then
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
bootFlags="-b $bootImage -c .boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table"
|
isoBootFlags="-eltorito-boot ${bootImage}
|
||||||
|
-eltorito-catalog .boot.cat
|
||||||
|
-no-emul-boot -boot-load-size 4 -boot-info-table"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$usbBootable"; then
|
||||||
|
usbBootFlags="-isohybrid-mbr ${isohybridMbrImage}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -n "$efiBootable"; then
|
if test -n "$efiBootable"; then
|
||||||
bootFlags="$bootFlags -eltorito-alt-boot -e $efiBootImage -no-emul-boot"
|
efiBootFlags="-eltorito-alt-boot
|
||||||
|
-e $efiBootImage
|
||||||
|
-no-emul-boot
|
||||||
|
-isohybrid-gpt-basdat"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
touch pathlist
|
touch pathlist
|
||||||
@ -44,14 +67,14 @@ touch pathlist
|
|||||||
# Add the individual files.
|
# Add the individual files.
|
||||||
for ((i = 0; i < ${#targets_[@]}; i++)); do
|
for ((i = 0; i < ${#targets_[@]}; i++)); do
|
||||||
stripSlash "${targets_[$i]}"
|
stripSlash "${targets_[$i]}"
|
||||||
echo "$res=${sources_[$i]}" >> pathlist
|
addPath "$res" "${sources_[$i]}"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
# Add the closures of the top-level store objects.
|
# Add the closures of the top-level store objects.
|
||||||
storePaths=$(perl $pathsFromGraph closure-*)
|
storePaths=$(perl $pathsFromGraph closure-*)
|
||||||
for i in $storePaths; do
|
for i in $storePaths; do
|
||||||
echo "${i:1}=$i" >> pathlist
|
addPath "${i:1}" "$i"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
@ -59,7 +82,7 @@ done
|
|||||||
# nix-store --load-db.
|
# nix-store --load-db.
|
||||||
if [ -n "$object" ]; then
|
if [ -n "$object" ]; then
|
||||||
printRegistration=1 perl $pathsFromGraph closure-* > nix-path-registration
|
printRegistration=1 perl $pathsFromGraph closure-* > nix-path-registration
|
||||||
echo "nix-path-registration=nix-path-registration" >> pathlist
|
addPath "nix-path-registration" "nix-path-registration"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@ -70,22 +93,39 @@ for ((n = 0; n < ${#objects[*]}; n++)); do
|
|||||||
if test "$symlink" != "none"; then
|
if test "$symlink" != "none"; then
|
||||||
mkdir -p $(dirname ./$symlink)
|
mkdir -p $(dirname ./$symlink)
|
||||||
ln -s $object ./$symlink
|
ln -s $object ./$symlink
|
||||||
echo "$symlink=./$symlink" >> pathlist
|
addPath "$symlink" "./$symlink"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# !!! what does this do?
|
|
||||||
cat pathlist | sed -e 's/=\(.*\)=\(.*\)=/\\=\1=\2\\=/' | tee pathlist.safer
|
|
||||||
|
|
||||||
|
|
||||||
mkdir -p $out/iso
|
mkdir -p $out/iso
|
||||||
genCommand="genisoimage -iso-level 4 -r -J $bootFlags -hide-rr-moved -graft-points -path-list pathlist.safer ${volumeID:+-V $volumeID}"
|
|
||||||
if test -z "$compressImage"; then
|
xorriso="xorriso
|
||||||
$genCommand -o $out/iso/$isoName
|
-as mkisofs
|
||||||
else
|
-iso-level 3
|
||||||
$genCommand | bzip2 > $out/iso/$isoName.bz2
|
-volid ${volumeID}
|
||||||
|
-appid nixos
|
||||||
|
-publisher nixos
|
||||||
|
-graft-points
|
||||||
|
-full-iso9660-filenames
|
||||||
|
${isoBootFlags}
|
||||||
|
${usbBootFlags}
|
||||||
|
${efiBootFlags}
|
||||||
|
-r
|
||||||
|
-path-list pathlist
|
||||||
|
--sort-weight 0 /
|
||||||
|
--sort-weight 1 /isolinux" # Make sure isolinux is near the beginning of the ISO
|
||||||
|
|
||||||
|
$xorriso -output $out/iso/$isoName
|
||||||
|
|
||||||
|
if test -n "$usbBootable"; then
|
||||||
|
echo "Making image hybrid..."
|
||||||
|
isohybrid --uefi $out/iso/$isoName
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test -n "$compressImage"; then
|
||||||
|
echo "Compressing image..."
|
||||||
|
bzip2 $out/iso/$isoName
|
||||||
|
fi
|
||||||
|
|
||||||
mkdir -p $out/nix-support
|
mkdir -p $out/nix-support
|
||||||
echo $system > $out/nix-support/system
|
echo $system > $out/nix-support/system
|
||||||
|
@ -37,6 +37,10 @@ sub new {
|
|||||||
if defined $args->{hda};
|
if defined $args->{hda};
|
||||||
$startCommand .= "-cdrom $args->{cdrom} "
|
$startCommand .= "-cdrom $args->{cdrom} "
|
||||||
if defined $args->{cdrom};
|
if defined $args->{cdrom};
|
||||||
|
$startCommand .= "-device piix3-usb-uhci -drive id=usbdisk,file=$args->{usb},if=none,readonly -device usb-storage,drive=usbdisk "
|
||||||
|
if defined $args->{usb};
|
||||||
|
$startCommand .= "-bios $args->{bios} "
|
||||||
|
if defined $args->{bios};
|
||||||
$startCommand .= $args->{qemuFlags} || "";
|
$startCommand .= $args->{qemuFlags} || "";
|
||||||
} else {
|
} else {
|
||||||
$startCommand = Cwd::abs_path $startCommand;
|
$startCommand = Cwd::abs_path $startCommand;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{ config, pkgs, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
with pkgs.lib;
|
with lib;
|
||||||
|
|
||||||
let fcBool = x: if x then "<bool>true</bool>" else "<bool>false</bool>";
|
let fcBool = x: if x then "<bool>true</bool>" else "<bool>false</bool>";
|
||||||
in
|
in
|
||||||
|
@ -27,6 +27,6 @@ with lib;
|
|||||||
fonts.fontconfig.enable = false;
|
fonts.fontconfig.enable = false;
|
||||||
|
|
||||||
nixpkgs.config.packageOverrides = pkgs:
|
nixpkgs.config.packageOverrides = pkgs:
|
||||||
{ dbus = pkgs.dbus.override { useX11 = false; }; };
|
{ dbus = pkgs.dbus.override { x11Support = false; }; };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,6 @@ in
|
|||||||
#
|
#
|
||||||
# Removed under grsecurity.
|
# Removed under grsecurity.
|
||||||
boot.kernel.sysctl."kernel.kptr_restrict" =
|
boot.kernel.sysctl."kernel.kptr_restrict" =
|
||||||
if config.security.grsecurity.enable then null else 1;
|
if (config.boot.kernelPackages.kernel.features.grsecurity or false) then null else 1;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ let
|
|||||||
|
|
||||||
shell = mkOption {
|
shell = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "/run/current-system/sw/sbin/nologin";
|
default = "/run/current-system/sw/bin/nologin";
|
||||||
description = "The path to the user's shell.";
|
description = "The path to the user's shell.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
18
nixos/modules/hardware/ksm.nix
Normal file
18
nixos/modules/hardware/ksm.nix
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
options.hardware.enableKSM = lib.mkEnableOption "Kernel Same-Page Merging";
|
||||||
|
|
||||||
|
config = lib.mkIf config.hardware.enableKSM {
|
||||||
|
systemd.services.enable-ksm = {
|
||||||
|
description = "Enable Kernel Same-Page Merging";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "systemd-udev-settle.service" ];
|
||||||
|
script = ''
|
||||||
|
if [ -e /sys/kernel/mm/ksm ]; then
|
||||||
|
echo 1 > /sys/kernel/mm/ksm/run
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -13,6 +13,9 @@ let
|
|||||||
# driver.
|
# driver.
|
||||||
nvidiaForKernel = kernelPackages:
|
nvidiaForKernel = kernelPackages:
|
||||||
if elem "nvidia" drivers then
|
if elem "nvidia" drivers then
|
||||||
|
if versionAtLeast kernelPackages.kernel.version "4.0" then
|
||||||
|
kernelPackages.nvidia_x11_beta
|
||||||
|
else
|
||||||
kernelPackages.nvidia_x11
|
kernelPackages.nvidia_x11
|
||||||
else if elem "nvidiaLegacy173" drivers then
|
else if elem "nvidiaLegacy173" drivers then
|
||||||
kernelPackages.nvidia_x11_legacy173
|
kernelPackages.nvidia_x11_legacy173
|
||||||
|
@ -36,6 +36,9 @@ with lib;
|
|||||||
# EFI booting
|
# EFI booting
|
||||||
isoImage.makeEfiBootable = true;
|
isoImage.makeEfiBootable = true;
|
||||||
|
|
||||||
|
# USB booting
|
||||||
|
isoImage.makeUsbBootable = true;
|
||||||
|
|
||||||
# Add Memtest86+ to the CD.
|
# Add Memtest86+ to the CD.
|
||||||
boot.loader.grub.memtest86.enable = true;
|
boot.loader.grub.memtest86.enable = true;
|
||||||
|
|
||||||
|
@ -7,53 +7,65 @@
|
|||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
|
# Timeout in syslinux is in units of 1/10 of a second.
|
||||||
# The Grub image.
|
# 0 is used to disable timeouts.
|
||||||
grubImage = pkgs.runCommand "grub_eltorito" {}
|
syslinuxTimeout = if config.boot.loader.timeout == null then
|
||||||
''
|
0
|
||||||
${pkgs.grub2}/bin/grub-mkimage -p /boot/grub -O i386-pc -o tmp biosdisk iso9660 help linux linux16 chain png jpeg echo gfxmenu reboot
|
|
||||||
cat ${pkgs.grub2}/lib/grub/*/cdboot.img tmp > $out
|
|
||||||
''; # */
|
|
||||||
|
|
||||||
|
|
||||||
# The configuration file for Grub.
|
|
||||||
grubCfg =
|
|
||||||
''
|
|
||||||
set default=${builtins.toString config.boot.loader.grub.default}
|
|
||||||
set timeout=${builtins.toString config.boot.loader.grub.timeout}
|
|
||||||
|
|
||||||
if loadfont /boot/grub/unicode.pf2; then
|
|
||||||
set gfxmode=640x480
|
|
||||||
insmod gfxterm
|
|
||||||
insmod vbe
|
|
||||||
terminal_output gfxterm
|
|
||||||
|
|
||||||
insmod png
|
|
||||||
if background_image /boot/grub/splash.png; then
|
|
||||||
set color_normal=white/black
|
|
||||||
set color_highlight=black/white
|
|
||||||
else
|
else
|
||||||
set menu_color_normal=cyan/blue
|
max (config.boot.loader.timeout * 10) 1;
|
||||||
set menu_color_highlight=white/blue
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
${config.boot.loader.grub.extraEntries}
|
max = x: y: if x > y then x else y;
|
||||||
|
|
||||||
|
# The configuration file for syslinux.
|
||||||
|
|
||||||
|
# Notes on syslinux configuration and UNetbootin compatiblity:
|
||||||
|
# * Do not use '/syslinux/syslinux.cfg' as the path for this
|
||||||
|
# configuration. UNetbootin will not parse the file and use it as-is.
|
||||||
|
# This results in a broken configuration if the partition label does
|
||||||
|
# not match the specified config.isoImage.volumeID. For this reason
|
||||||
|
# we're using '/isolinux/isolinux.cfg'.
|
||||||
|
# * Use APPEND instead of adding command-line arguments directly after
|
||||||
|
# the LINUX entries.
|
||||||
|
# * COM32 entries (chainload, reboot, poweroff) are not recognized. They
|
||||||
|
# result in incorrect boot entries.
|
||||||
|
|
||||||
|
baseIsolinuxCfg =
|
||||||
|
''
|
||||||
|
SERIAL 0 38400
|
||||||
|
TIMEOUT ${builtins.toString syslinuxTimeout}
|
||||||
|
UI vesamenu.c32
|
||||||
|
MENU TITLE NixOS
|
||||||
|
MENU BACKGROUND /isolinux/background.png
|
||||||
|
DEFAULT boot
|
||||||
|
|
||||||
|
LABEL boot
|
||||||
|
MENU LABEL NixOS ${config.system.nixosVersion} Installer
|
||||||
|
LINUX /boot/bzImage
|
||||||
|
APPEND init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}
|
||||||
|
INITRD /boot/initrd
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
isolinuxMemtest86Entry = ''
|
||||||
|
LABEL memtest
|
||||||
|
MENU LABEL Memtest86+
|
||||||
|
LINUX /boot/memtest.bin
|
||||||
|
APPEND ${toString config.boot.loader.grub.memtest86.params}
|
||||||
|
'';
|
||||||
|
|
||||||
|
isolinuxCfg = baseIsolinuxCfg + (optionalString config.boot.loader.grub.memtest86.enable isolinuxMemtest86Entry);
|
||||||
|
|
||||||
# The efi boot image
|
# The efi boot image
|
||||||
efiDir = pkgs.runCommand "efi-directory" {} ''
|
efiDir = pkgs.runCommand "efi-directory" {} ''
|
||||||
mkdir -p $out/efi/boot
|
mkdir -p $out/EFI/boot
|
||||||
cp -v ${pkgs.gummiboot}/lib/gummiboot/gummiboot${targetArch}.efi $out/efi/boot/boot${targetArch}.efi
|
cp -v ${pkgs.gummiboot}/lib/gummiboot/gummiboot${targetArch}.efi $out/EFI/boot/boot${targetArch}.efi
|
||||||
mkdir -p $out/loader/entries
|
mkdir -p $out/loader/entries
|
||||||
echo "title NixOS LiveCD" > $out/loader/entries/nixos-livecd.conf
|
echo "title NixOS LiveCD" > $out/loader/entries/nixos-livecd.conf
|
||||||
echo "linux /boot/bzImage" >> $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 "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 "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 "default nixos-livecd" > $out/loader/loader.conf
|
||||||
echo "timeout 5" >> $out/loader/loader.conf
|
echo "timeout ${builtins.toString config.boot.loader.gummiboot.timeout}" >> $out/loader/loader.conf
|
||||||
'';
|
'';
|
||||||
|
|
||||||
efiImg = pkgs.runCommand "efi-image_eltorito" { buildInputs = [ pkgs.mtools pkgs.libfaketime ]; }
|
efiImg = pkgs.runCommand "efi-image_eltorito" { buildInputs = [ pkgs.mtools pkgs.libfaketime ]; }
|
||||||
@ -163,6 +175,22 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
isoImage.makeUsbBootable = mkOption {
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether the ISO image should be bootable from CD as well as USB.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
isoImage.splashImage = mkOption {
|
||||||
|
default = pkgs.fetchurl {
|
||||||
|
url = https://raw.githubusercontent.com/NixOS/nixos-artwork/5729ab16c6a5793c10a2913b5a1b3f59b91c36ee/ideas/grub-splash/grub-nixos-1.png;
|
||||||
|
sha256 = "43fd8ad5decf6c23c87e9026170a13588c2eba249d9013cb9f888da5e2002217";
|
||||||
|
};
|
||||||
|
description = ''
|
||||||
|
The splash image to use in the bootloader.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -176,7 +204,7 @@ in
|
|||||||
|
|
||||||
# !!! Hack - attributes expected by other modules.
|
# !!! Hack - attributes expected by other modules.
|
||||||
system.boot.loader.kernelFile = "bzImage";
|
system.boot.loader.kernelFile = "bzImage";
|
||||||
environment.systemPackages = [ pkgs.grub2 ];
|
environment.systemPackages = [ pkgs.grub2 pkgs.syslinux ];
|
||||||
|
|
||||||
# In stage 1 of the boot, mount the CD as the root FS by label so
|
# In stage 1 of the boot, mount the CD as the root FS by label so
|
||||||
# that we don't need to know its device. We pass the label of the
|
# that we don't need to know its device. We pass the label of the
|
||||||
@ -226,7 +254,7 @@ in
|
|||||||
options = "allow_other,cow,nonempty,chroot=/mnt-root,max_files=32768,hide_meta_files,dirs=/nix/.rw-store=rw:/nix/.ro-store=ro";
|
options = "allow_other,cow,nonempty,chroot=/mnt-root,max_files=32768,hide_meta_files,dirs=/nix/.rw-store=rw:/nix/.ro-store=ro";
|
||||||
};
|
};
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "squashfs" "iso9660" ];
|
boot.initrd.availableKernelModules = [ "squashfs" "iso9660" "usb-storage" ];
|
||||||
|
|
||||||
boot.initrd.kernelModules = [ "loop" ];
|
boot.initrd.kernelModules = [ "loop" ];
|
||||||
|
|
||||||
@ -246,15 +274,12 @@ in
|
|||||||
# Individual files to be included on the CD, outside of the Nix
|
# Individual files to be included on the CD, outside of the Nix
|
||||||
# store on the CD.
|
# store on the CD.
|
||||||
isoImage.contents =
|
isoImage.contents =
|
||||||
[ { source = grubImage;
|
[ { source = pkgs.substituteAll {
|
||||||
target = "/boot/grub/grub_eltorito";
|
name = "isolinux.cfg";
|
||||||
}
|
src = pkgs.writeText "isolinux.cfg-in" isolinuxCfg;
|
||||||
{ source = pkgs.substituteAll {
|
|
||||||
name = "grub.cfg";
|
|
||||||
src = pkgs.writeText "grub.cfg-in" grubCfg;
|
|
||||||
bootRoot = "/boot";
|
bootRoot = "/boot";
|
||||||
};
|
};
|
||||||
target = "/boot/grub/grub.cfg";
|
target = "/isolinux/isolinux.cfg";
|
||||||
}
|
}
|
||||||
{ source = config.boot.kernelPackages.kernel + "/bzImage";
|
{ source = config.boot.kernelPackages.kernel + "/bzImage";
|
||||||
target = "/boot/bzImage";
|
target = "/boot/bzImage";
|
||||||
@ -262,51 +287,44 @@ in
|
|||||||
{ source = config.system.build.initialRamdisk + "/initrd";
|
{ source = config.system.build.initialRamdisk + "/initrd";
|
||||||
target = "/boot/initrd";
|
target = "/boot/initrd";
|
||||||
}
|
}
|
||||||
{ source = "${pkgs.grub2}/share/grub/unicode.pf2";
|
|
||||||
target = "/boot/grub/unicode.pf2";
|
|
||||||
}
|
|
||||||
{ source = config.boot.loader.grub.splashImage;
|
|
||||||
target = "/boot/grub/splash.png";
|
|
||||||
}
|
|
||||||
{ source = config.system.build.squashfsStore;
|
{ source = config.system.build.squashfsStore;
|
||||||
target = "/nix-store.squashfs";
|
target = "/nix-store.squashfs";
|
||||||
}
|
}
|
||||||
|
{ source = "${pkgs.syslinux}/share/syslinux";
|
||||||
|
target = "/isolinux";
|
||||||
|
}
|
||||||
|
{ source = config.isoImage.splashImage;
|
||||||
|
target = "/isolinux/background.png";
|
||||||
|
}
|
||||||
] ++ optionals config.isoImage.makeEfiBootable [
|
] ++ optionals config.isoImage.makeEfiBootable [
|
||||||
{ source = efiImg;
|
{ source = efiImg;
|
||||||
target = "/boot/efi.img";
|
target = "/boot/efi.img";
|
||||||
}
|
}
|
||||||
{ source = "${efiDir}/efi";
|
{ source = "${efiDir}/EFI";
|
||||||
target = "/efi";
|
target = "/EFI";
|
||||||
}
|
}
|
||||||
{ source = "${efiDir}/loader";
|
{ source = "${efiDir}/loader";
|
||||||
target = "/loader";
|
target = "/loader";
|
||||||
}
|
}
|
||||||
] ++ mapAttrsToList (n: v: { source = v; target = "/boot/${n}"; }) config.boot.loader.grub.extraFiles;
|
] ++ optionals config.boot.loader.grub.memtest86.enable [
|
||||||
|
{ source = "${pkgs.memtest86plus}/memtest.bin";
|
||||||
# The Grub menu.
|
target = "/boot/memtest.bin";
|
||||||
boot.loader.grub.extraEntries =
|
|
||||||
''
|
|
||||||
menuentry "NixOS ${config.system.nixosVersion} Installer" {
|
|
||||||
linux /boot/bzImage init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}
|
|
||||||
initrd /boot/initrd
|
|
||||||
}
|
}
|
||||||
|
];
|
||||||
|
|
||||||
menuentry "Boot from hard disk" {
|
boot.loader.timeout = 10;
|
||||||
set root=(hd0)
|
|
||||||
chainloader +1
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
|
|
||||||
boot.loader.grub.timeout = 10;
|
|
||||||
|
|
||||||
# Create the ISO image.
|
# Create the ISO image.
|
||||||
system.build.isoImage = import ../../../lib/make-iso9660-image.nix ({
|
system.build.isoImage = import ../../../lib/make-iso9660-image.nix ({
|
||||||
inherit (pkgs) stdenv perl cdrkit pathsFromGraph;
|
inherit (pkgs) stdenv perl pathsFromGraph xorriso syslinux;
|
||||||
|
|
||||||
inherit (config.isoImage) isoName compressImage volumeID contents;
|
inherit (config.isoImage) isoName compressImage volumeID contents;
|
||||||
|
|
||||||
bootable = true;
|
bootable = true;
|
||||||
bootImage = "/boot/grub/grub_eltorito";
|
bootImage = "/isolinux/isolinux.bin";
|
||||||
|
} // optionalAttrs config.isoImage.makeUsbBootable {
|
||||||
|
usbBootable = true;
|
||||||
|
isohybridMbrImage = "${pkgs.syslinux}/share/syslinux/isohdpfx.bin";
|
||||||
} // optionalAttrs config.isoImage.makeEfiBootable {
|
} // optionalAttrs config.isoImage.makeEfiBootable {
|
||||||
efiBootable = true;
|
efiBootable = true;
|
||||||
efiBootImage = "boot/efi.img";
|
efiBootImage = "boot/efi.img";
|
||||||
|
@ -28,9 +28,14 @@ chrootCommand=(/run/current-system/sw/bin/bash)
|
|||||||
while [ "$#" -gt 0 ]; do
|
while [ "$#" -gt 0 ]; do
|
||||||
i="$1"; shift 1
|
i="$1"; shift 1
|
||||||
case "$i" in
|
case "$i" in
|
||||||
-I)
|
--max-jobs|-j|--cores|-I)
|
||||||
given_path="$1"; shift 1
|
j="$1"; shift 1
|
||||||
extraBuildFlags+=("$i" "$given_path")
|
extraBuildFlags+=("$i" "$j")
|
||||||
|
;;
|
||||||
|
--option)
|
||||||
|
j="$1"; shift 1
|
||||||
|
k="$1"; shift 1
|
||||||
|
extraBuildFlags+=("$i" "$j" "$k")
|
||||||
;;
|
;;
|
||||||
--root)
|
--root)
|
||||||
mountPoint="$1"; shift 1
|
mountPoint="$1"; shift 1
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
{
|
|
||||||
options = {
|
|
||||||
environment.checkConfigurationOptions = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = true;
|
|
||||||
description = ''
|
|
||||||
Whether to check the validity of the entire configuration.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
14
nixos/modules/misc/extra-arguments.nix
Normal file
14
nixos/modules/misc/extra-arguments.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{ lib, pkgs, config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
_module.args = {
|
||||||
|
modulesPath = ../.;
|
||||||
|
|
||||||
|
pkgs_i686 = import ../../lib/nixpkgs.nix {
|
||||||
|
system = "i686-linux";
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
utils = import ../../lib/utils.nix pkgs;
|
||||||
|
};
|
||||||
|
}
|
@ -212,6 +212,8 @@
|
|||||||
uptimed = 184;
|
uptimed = 184;
|
||||||
zope2 = 185;
|
zope2 = 185;
|
||||||
ripple-data-api = 186;
|
ripple-data-api = 186;
|
||||||
|
mediatomb = 187;
|
||||||
|
rdnssd = 188;
|
||||||
|
|
||||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||||
|
|
||||||
@ -401,6 +403,8 @@
|
|||||||
#uptimed = 184; # unused
|
#uptimed = 184; # unused
|
||||||
#zope2 = 185; # unused
|
#zope2 = 185; # unused
|
||||||
#ripple-data-api = 186; #unused
|
#ripple-data-api = 186; #unused
|
||||||
|
mediatomb = 187;
|
||||||
|
#rdnssd = 188; # unused
|
||||||
|
|
||||||
# When adding a gid, make sure it doesn't match an existing
|
# When adding a gid, make sure it doesn't match an existing
|
||||||
# uid. Users and groups with the same name should have equal
|
# uid. Users and groups with the same name should have equal
|
||||||
|
@ -60,6 +60,7 @@ in
|
|||||||
|
|
||||||
nixpkgs.system = mkOption {
|
nixpkgs.system = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
|
default = builtins.currentSystem;
|
||||||
description = ''
|
description = ''
|
||||||
Specifies the Nix platform type for which NixOS should be built.
|
Specifies the Nix platform type for which NixOS should be built.
|
||||||
If unset, it defaults to the platform type of your host system.
|
If unset, it defaults to the platform type of your host system.
|
||||||
@ -71,6 +72,10 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
nixpkgs.system = mkDefault pkgs.stdenv.system;
|
_module.args.pkgs = import ../../lib/nixpkgs.nix {
|
||||||
|
system = config.nixpkgs.system;
|
||||||
|
|
||||||
|
inherit (config.nixpkgs) config;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
./hardware/all-firmware.nix
|
./hardware/all-firmware.nix
|
||||||
./hardware/cpu/amd-microcode.nix
|
./hardware/cpu/amd-microcode.nix
|
||||||
./hardware/cpu/intel-microcode.nix
|
./hardware/cpu/intel-microcode.nix
|
||||||
|
./hardware/ksm.nix
|
||||||
./hardware/network/b43.nix
|
./hardware/network/b43.nix
|
||||||
./hardware/network/intel-2100bg.nix
|
./hardware/network/intel-2100bg.nix
|
||||||
./hardware/network/intel-2200bg.nix
|
./hardware/network/intel-2200bg.nix
|
||||||
@ -43,8 +44,8 @@
|
|||||||
./installer/tools/nixos-checkout.nix
|
./installer/tools/nixos-checkout.nix
|
||||||
./installer/tools/tools.nix
|
./installer/tools/tools.nix
|
||||||
./misc/assertions.nix
|
./misc/assertions.nix
|
||||||
./misc/check-config.nix
|
|
||||||
./misc/crashdump.nix
|
./misc/crashdump.nix
|
||||||
|
./misc/extra-arguments.nix
|
||||||
./misc/ids.nix
|
./misc/ids.nix
|
||||||
./misc/lib.nix
|
./misc/lib.nix
|
||||||
./misc/locate.nix
|
./misc/locate.nix
|
||||||
@ -146,6 +147,7 @@
|
|||||||
./services/desktops/telepathy.nix
|
./services/desktops/telepathy.nix
|
||||||
./services/games/ghost-one.nix
|
./services/games/ghost-one.nix
|
||||||
./services/games/minecraft-server.nix
|
./services/games/minecraft-server.nix
|
||||||
|
./services/games/minetest-server.nix
|
||||||
./services/hardware/acpid.nix
|
./services/hardware/acpid.nix
|
||||||
./services/hardware/amd-hybrid-graphics.nix
|
./services/hardware/amd-hybrid-graphics.nix
|
||||||
./services/hardware/bluetooth.nix
|
./services/hardware/bluetooth.nix
|
||||||
@ -191,6 +193,7 @@
|
|||||||
./services/misc/gitlab.nix
|
./services/misc/gitlab.nix
|
||||||
./services/misc/gitolite.nix
|
./services/misc/gitolite.nix
|
||||||
./services/misc/gpsd.nix
|
./services/misc/gpsd.nix
|
||||||
|
./services/misc/mediatomb.nix
|
||||||
./services/misc/mesos-master.nix
|
./services/misc/mesos-master.nix
|
||||||
./services/misc/mesos-slave.nix
|
./services/misc/mesos-slave.nix
|
||||||
./services/misc/nix-daemon.nix
|
./services/misc/nix-daemon.nix
|
||||||
@ -223,6 +226,7 @@
|
|||||||
./services/monitoring/smartd.nix
|
./services/monitoring/smartd.nix
|
||||||
./services/monitoring/statsd.nix
|
./services/monitoring/statsd.nix
|
||||||
./services/monitoring/systemhealth.nix
|
./services/monitoring/systemhealth.nix
|
||||||
|
./services/monitoring/teamviewer.nix
|
||||||
./services/monitoring/ups.nix
|
./services/monitoring/ups.nix
|
||||||
./services/monitoring/uptime.nix
|
./services/monitoring/uptime.nix
|
||||||
./services/monitoring/zabbix-agent.nix
|
./services/monitoring/zabbix-agent.nix
|
||||||
|
@ -100,7 +100,7 @@ in
|
|||||||
chgpasswd = { rootOK = true; };
|
chgpasswd = { rootOK = true; };
|
||||||
};
|
};
|
||||||
|
|
||||||
security.setuidPrograms = [ "passwd" "chfn" "su" "newgrp"
|
security.setuidPrograms = [ "passwd" "chfn" "su" "sg" "newgrp"
|
||||||
"newuidmap" "newgidmap" # new in shadow 4.2.x
|
"newuidmap" "newgidmap" # new in shadow 4.2.x
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -107,7 +107,6 @@ in zipModules ([]
|
|||||||
++ obsolete [ "services" "sshd" "permitRootLogin" ] [ "services" "openssh" "permitRootLogin" ]
|
++ obsolete [ "services" "sshd" "permitRootLogin" ] [ "services" "openssh" "permitRootLogin" ]
|
||||||
++ obsolete [ "services" "xserver" "startSSHAgent" ] [ "services" "xserver" "startOpenSSHAgent" ]
|
++ obsolete [ "services" "xserver" "startSSHAgent" ] [ "services" "xserver" "startOpenSSHAgent" ]
|
||||||
++ obsolete [ "services" "xserver" "startOpenSSHAgent" ] [ "programs" "ssh" "startAgent" ]
|
++ obsolete [ "services" "xserver" "startOpenSSHAgent" ] [ "programs" "ssh" "startAgent" ]
|
||||||
++ obsolete [ "services" "xserver" "windowManager" "xbmc" ] [ "services" "xserver" "desktopManager" "xbmc" ]
|
|
||||||
|
|
||||||
# VirtualBox
|
# VirtualBox
|
||||||
++ obsolete [ "services" "virtualbox" "enable" ] [ "services" "virtualboxGuest" "enable" ]
|
++ obsolete [ "services" "virtualbox" "enable" ] [ "services" "virtualboxGuest" "enable" ]
|
||||||
@ -136,6 +135,12 @@ in zipModules ([]
|
|||||||
|
|
||||||
++ obsolete [ "services" "mysql55" ] [ "services" "mysql" ]
|
++ obsolete [ "services" "mysql55" ] [ "services" "mysql" ]
|
||||||
|
|
||||||
|
++ obsolete [ "environment" "checkConfigurationOptions" ] [ "_module" "check" ]
|
||||||
|
|
||||||
|
# XBMC
|
||||||
|
++ obsolete [ "services" "xserver" "windowManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ]
|
||||||
|
++ obsolete [ "services" "xserver" "desktopManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ]
|
||||||
|
|
||||||
# Options that are obsolete and have no replacement.
|
# Options that are obsolete and have no replacement.
|
||||||
++ obsolete' [ "boot" "loader" "grub" "bootDevice" ]
|
++ obsolete' [ "boot" "loader" "grub" "bootDevice" ]
|
||||||
++ obsolete' [ "boot" "initrd" "luks" "enable" ]
|
++ obsolete' [ "boot" "initrd" "luks" "enable" ]
|
||||||
|
@ -44,53 +44,41 @@ in
|
|||||||
|
|
||||||
config = {
|
config = {
|
||||||
mode = mkOption {
|
mode = mkOption {
|
||||||
type = types.str;
|
type = types.enum [ "auto" "custom" ];
|
||||||
default = "auto";
|
default = "auto";
|
||||||
example = "custom";
|
|
||||||
description = ''
|
description = ''
|
||||||
grsecurity configuration mode. This specifies whether
|
grsecurity configuration mode. This specifies whether
|
||||||
grsecurity is auto-configured or otherwise completely
|
grsecurity is auto-configured or otherwise completely
|
||||||
manually configured. Can either be
|
manually configured.
|
||||||
<literal>custom</literal> or <literal>auto</literal>.
|
|
||||||
|
|
||||||
<literal>auto</literal> is recommended.
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
priority = mkOption {
|
priority = mkOption {
|
||||||
type = types.str;
|
type = types.enum [ "security" "performance" ];
|
||||||
default = "security";
|
default = "security";
|
||||||
example = "performance";
|
|
||||||
description = ''
|
description = ''
|
||||||
grsecurity configuration priority. This specifies whether
|
grsecurity configuration priority. This specifies whether
|
||||||
the kernel configuration should emphasize speed or
|
the kernel configuration should emphasize speed or
|
||||||
security. Can either be <literal>security</literal> or
|
security.
|
||||||
<literal>performance</literal>.
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
system = mkOption {
|
system = mkOption {
|
||||||
type = types.str;
|
type = types.enum [ "desktop" "server" ];
|
||||||
default = "";
|
default = "desktop";
|
||||||
example = "desktop";
|
|
||||||
description = ''
|
description = ''
|
||||||
grsecurity system configuration. This specifies whether
|
grsecurity system configuration.
|
||||||
the kernel configuration should be suitable for a Desktop
|
|
||||||
or a Server. Can either be <literal>server</literal> or
|
|
||||||
<literal>desktop</literal>.
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualisationConfig = mkOption {
|
virtualisationConfig = mkOption {
|
||||||
type = types.str;
|
type = types.nullOr (types.enum [ "host" "guest" ]);
|
||||||
default = "none";
|
default = null;
|
||||||
example = "host";
|
|
||||||
description = ''
|
description = ''
|
||||||
grsecurity virtualisation configuration. This specifies
|
grsecurity virtualisation configuration. This specifies
|
||||||
the virtualisation role of the machine - that is, whether
|
the virtualisation role of the machine - that is, whether
|
||||||
it will be a virtual machine guest, a virtual machine
|
it will be a virtual machine guest, a virtual machine
|
||||||
host, or neither. Can be one of <literal>none</literal>,
|
host, or neither.
|
||||||
<literal>host</literal>, or <literal>guest</literal>.
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -106,17 +94,10 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
virtualisationSoftware = mkOption {
|
virtualisationSoftware = mkOption {
|
||||||
type = types.str;
|
type = types.nullOr (types.enum [ "kvm" "xen" "vmware" "virtualbox" ]);
|
||||||
default = "";
|
default = null;
|
||||||
example = "kvm";
|
|
||||||
description = ''
|
description = ''
|
||||||
grsecurity virtualisation software. Set this to the
|
Configure grsecurity for use with this virtualisation software.
|
||||||
specified virtual machine technology if the machine is
|
|
||||||
running as a guest, or a host.
|
|
||||||
|
|
||||||
Can be one of <literal>kvm</literal>,
|
|
||||||
<literal>xen</literal>, <literal>vmware</literal> or
|
|
||||||
<literal>virtualbox</literal>.
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -262,25 +243,13 @@ in
|
|||||||
&& config.boot.kernelPackages.kernel.features.grsecurity;
|
&& config.boot.kernelPackages.kernel.features.grsecurity;
|
||||||
message = "grsecurity enabled, but kernel doesn't have grsec support";
|
message = "grsecurity enabled, but kernel doesn't have grsec support";
|
||||||
}
|
}
|
||||||
{ assertion = elem cfg.config.mode [ "auto" "custom" ];
|
{ assertion = (cfg.config.mode == "auto" && (cfg.config.virtualisationConfig != null)) ->
|
||||||
message = "grsecurity mode must either be 'auto' or 'custom'.";
|
|
||||||
}
|
|
||||||
{ assertion = cfg.config.mode == "auto" -> elem cfg.config.system [ "desktop" "server" ];
|
|
||||||
message = "when using auto grsec mode, system must be either 'desktop' or 'server'";
|
|
||||||
}
|
|
||||||
{ assertion = cfg.config.mode == "auto" -> elem cfg.config.priority [ "performance" "security" ];
|
|
||||||
message = "when using auto grsec mode, priority must be 'performance' or 'security'.";
|
|
||||||
}
|
|
||||||
{ assertion = cfg.config.mode == "auto" -> elem cfg.config.virtualisationConfig [ "host" "guest" "none" ];
|
|
||||||
message = "when using auto grsec mode, 'virt' must be 'host', 'guest' or 'none'.";
|
|
||||||
}
|
|
||||||
{ assertion = (cfg.config.mode == "auto" && (elem cfg.config.virtualisationConfig [ "host" "guest" ])) ->
|
|
||||||
cfg.config.hardwareVirtualisation != null;
|
cfg.config.hardwareVirtualisation != null;
|
||||||
message = "when using auto grsec mode with virtualisation, you must specify if your hardware has virtualisation extensions";
|
message = "when using auto grsec mode with virtualisation, you must specify if your hardware has virtualisation extensions";
|
||||||
}
|
}
|
||||||
{ assertion = (cfg.config.mode == "auto" && (elem cfg.config.virtualisationConfig [ "host" "guest" ])) ->
|
{ assertion = (cfg.config.mode == "auto" && (cfg.config.virtualisationConfig != null)) ->
|
||||||
elem cfg.config.virtualisationSoftware [ "kvm" "xen" "virtualbox" "vmware" ];
|
cfg.config.virtualisationSoftware != null;
|
||||||
message = "virtualisation software must be 'kvm', 'xen', 'vmware' or 'virtualbox'";
|
message = "grsecurity configured for virtualisation but no virtualisation software specified";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -6,8 +6,9 @@
|
|||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
|
parentConfig = config;
|
||||||
|
|
||||||
pamOpts = args: {
|
pamOpts = { config, name, ... }: let cfg = config; in let config = parentConfig; in {
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
||||||
@ -180,8 +181,8 @@ let
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = let cfg = args.config; in {
|
config = {
|
||||||
name = mkDefault args.name;
|
name = mkDefault name;
|
||||||
setLoginUid = mkDefault cfg.startSession;
|
setLoginUid = mkDefault cfg.startSession;
|
||||||
limits = mkDefault config.security.pam.loginLimits;
|
limits = mkDefault config.security.pam.loginLimits;
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ in
|
|||||||
root ALL=(ALL) SETENV: ALL
|
root ALL=(ALL) SETENV: ALL
|
||||||
|
|
||||||
# Users in the "wheel" group can do anything.
|
# Users in the "wheel" group can do anything.
|
||||||
%wheel ALL=(ALL) ${if cfg.wheelNeedsPassword then "" else "NOPASSWD: ALL, "}SETENV: ALL
|
%wheel ALL=(ALL:ALL) ${if cfg.wheelNeedsPassword then "" else "NOPASSWD: ALL, "}SETENV: ALL
|
||||||
${cfg.extraConfig}
|
${cfg.extraConfig}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ let
|
|||||||
|
|
||||||
mysql = cfg.package;
|
mysql = cfg.package;
|
||||||
|
|
||||||
is55 = mysql.mysqlVersion == "5.5";
|
atLeast55 = versionAtLeast mysql.mysqlVersion "5.5";
|
||||||
|
|
||||||
pidFile = "${cfg.pidDir}/mysqld.pid";
|
pidFile = "${cfg.pidDir}/mysqld.pid";
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ let
|
|||||||
port = ${toString cfg.port}
|
port = ${toString cfg.port}
|
||||||
${optionalString (cfg.replication.role == "master" || cfg.replication.role == "slave") "log-bin=mysql-bin"}
|
${optionalString (cfg.replication.role == "master" || cfg.replication.role == "slave") "log-bin=mysql-bin"}
|
||||||
${optionalString (cfg.replication.role == "master" || cfg.replication.role == "slave") "server-id = ${toString cfg.replication.serverId}"}
|
${optionalString (cfg.replication.role == "master" || cfg.replication.role == "slave") "server-id = ${toString cfg.replication.serverId}"}
|
||||||
${optionalString (cfg.replication.role == "slave" && !is55)
|
${optionalString (cfg.replication.role == "slave" && !atLeast55)
|
||||||
''
|
''
|
||||||
master-host = ${cfg.replication.masterHost}
|
master-host = ${cfg.replication.masterHost}
|
||||||
master-user = ${cfg.replication.masterUser}
|
master-user = ${cfg.replication.masterUser}
|
||||||
@ -73,7 +73,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
pidDir = mkOption {
|
pidDir = mkOption {
|
||||||
default = "/var/run/mysql";
|
default = "/run/mysqld";
|
||||||
description = "Location of the file which stores the PID of the MySQL server";
|
description = "Location of the file which stores the PID of the MySQL server";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -178,6 +178,10 @@ in
|
|||||||
|
|
||||||
mkdir -m 0700 -p ${cfg.pidDir}
|
mkdir -m 0700 -p ${cfg.pidDir}
|
||||||
chown -R ${cfg.user} ${cfg.pidDir}
|
chown -R ${cfg.user} ${cfg.pidDir}
|
||||||
|
|
||||||
|
# Make the socket directory
|
||||||
|
mkdir -m 0700 -p /run/mysqld
|
||||||
|
chown -R ${cfg.user} /run/mysqld
|
||||||
'';
|
'';
|
||||||
|
|
||||||
serviceConfig.ExecStart = "${mysql}/bin/mysqld --defaults-extra-file=${myCnf} ${mysqldOptions}";
|
serviceConfig.ExecStart = "${mysql}/bin/mysqld --defaults-extra-file=${myCnf} ${mysqldOptions}";
|
||||||
@ -186,7 +190,7 @@ in
|
|||||||
''
|
''
|
||||||
# Wait until the MySQL server is available for use
|
# Wait until the MySQL server is available for use
|
||||||
count=0
|
count=0
|
||||||
while [ ! -e /tmp/mysql.sock ]
|
while [ ! -e /run/mysqld/mysqld.sock ]
|
||||||
do
|
do
|
||||||
if [ $count -eq 30 ]
|
if [ $count -eq 30 ]
|
||||||
then
|
then
|
||||||
@ -220,7 +224,7 @@ in
|
|||||||
fi
|
fi
|
||||||
'') cfg.initialDatabases}
|
'') cfg.initialDatabases}
|
||||||
|
|
||||||
${optionalString (cfg.replication.role == "slave" && is55)
|
${optionalString (cfg.replication.role == "slave" && atLeast55)
|
||||||
''
|
''
|
||||||
# Set up the replication master
|
# Set up the replication master
|
||||||
|
|
||||||
|
104
nixos/modules/services/games/minetest-server.nix
Normal file
104
nixos/modules/services/games/minetest-server.nix
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.minetest-server;
|
||||||
|
flag = val: name: if val != null then "--${name} ${val} " else "";
|
||||||
|
flags = [
|
||||||
|
(flag cfg.gameId "gameid")
|
||||||
|
(flag cfg.world "world")
|
||||||
|
(flag cfg.configPath "config")
|
||||||
|
(flag cfg.logPath "logfile")
|
||||||
|
(flag cfg.port "port")
|
||||||
|
];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
services.minetest-server = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "If enabled, starts a Minetest Server.";
|
||||||
|
};
|
||||||
|
|
||||||
|
gameId = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Id of the game to use. To list available games run
|
||||||
|
`minetestserver --gameid list`.
|
||||||
|
|
||||||
|
If only one game exists, this option can be null.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
world = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Name of the world to use. To list available worlds run
|
||||||
|
`minetestserver --world list`.
|
||||||
|
|
||||||
|
If only one world exists, this option can be null.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
configPath = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Path to the config to use.
|
||||||
|
|
||||||
|
If set to null, the config of the running user will be used:
|
||||||
|
`~/.minetest/minetest.conf`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
logPath = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Path to logfile for logging.
|
||||||
|
|
||||||
|
If set to null, logging will be output to stdout which means
|
||||||
|
all output will be catched by systemd.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
type = types.nullOr types.int;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Port number to bind to.
|
||||||
|
|
||||||
|
If set to null, the default 30000 will be used.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
users.extraUsers.minetest = {
|
||||||
|
description = "Minetest Server Service user";
|
||||||
|
home = "/var/lib/minetest";
|
||||||
|
createHome = true;
|
||||||
|
uid = config.ids.uids.minetest;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.minetest-server = {
|
||||||
|
description = "Minetest Server Service";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
|
||||||
|
serviceConfig.Restart = "always";
|
||||||
|
serviceConfig.User = "minetest";
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
cd /var/lib/minetest
|
||||||
|
|
||||||
|
exec ${pkgs.minetest}/bin/minetestserver ${concatStrings flags}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -237,7 +237,10 @@ in
|
|||||||
|
|
||||||
system.activationScripts.udevd =
|
system.activationScripts.udevd =
|
||||||
''
|
''
|
||||||
|
# The deprecated hotplug uevent helper is not used anymore
|
||||||
|
if [ -e /proc/sys/kernel/hotplug ]; then
|
||||||
echo "" > /proc/sys/kernel/hotplug
|
echo "" > /proc/sys/kernel/hotplug
|
||||||
|
fi
|
||||||
|
|
||||||
# Regenerate the hardware database /var/lib/udev/hwdb.bin
|
# Regenerate the hardware database /var/lib/udev/hwdb.bin
|
||||||
# whenever systemd changes.
|
# whenever systemd changes.
|
||||||
|
282
nixos/modules/services/misc/mediatomb.nix
Normal file
282
nixos/modules/services/misc/mediatomb.nix
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
uid = config.ids.uids.mediatomb;
|
||||||
|
gid = config.ids.gids.mediatomb;
|
||||||
|
cfg = config.services.mediatomb;
|
||||||
|
|
||||||
|
mtConf = pkgs.writeText "config.xml" ''
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<config version="2" xmlns="http://mediatomb.cc/config/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/2 http://mediatomb.cc/config/2.xsd">
|
||||||
|
<server>
|
||||||
|
<ui enabled="yes" show-tooltips="yes">
|
||||||
|
<accounts enabled="no" session-timeout="30">
|
||||||
|
<account user="mediatomb" password="mediatomb"/>
|
||||||
|
</accounts>
|
||||||
|
</ui>
|
||||||
|
<name>${cfg.serverName}</name>
|
||||||
|
<udn>uuid:${cfg.uuid}</udn>
|
||||||
|
<home>${cfg.dataDir}</home>
|
||||||
|
<webroot>${pkgs.mediatomb}/share/mediatomb/web</webroot>
|
||||||
|
<storage>
|
||||||
|
<sqlite3 enabled="yes">
|
||||||
|
<database-file>mediatomb.db</database-file>
|
||||||
|
</sqlite3>
|
||||||
|
</storage>
|
||||||
|
<protocolInfo extend="${if cfg.ps3Support then "yes" else "no"}"/>
|
||||||
|
${if cfg.dsmSupport then ''
|
||||||
|
<custom-http-headers>
|
||||||
|
<add header="X-User-Agent: redsonic"/>
|
||||||
|
</custom-http-headers>
|
||||||
|
|
||||||
|
<manufacturerURL>redsonic.com</manufacturerURL>
|
||||||
|
<modelNumber>105</modelNumber>
|
||||||
|
'' else ""}
|
||||||
|
${if cfg.tg100Support then ''
|
||||||
|
<upnp-string-limit>101</upnp-string-limit>
|
||||||
|
'' else ""}
|
||||||
|
<extended-runtime-options>
|
||||||
|
<mark-played-items enabled="yes" suppress-cds-updates="yes">
|
||||||
|
<string mode="prepend">*</string>
|
||||||
|
<mark>
|
||||||
|
<content>video</content>
|
||||||
|
</mark>
|
||||||
|
</mark-played-items>
|
||||||
|
</extended-runtime-options>
|
||||||
|
</server>
|
||||||
|
<import hidden-files="no">
|
||||||
|
<scripting script-charset="UTF-8">
|
||||||
|
<common-script>/nix/store/cngbzn39vidd6jm4wgzxfafqll74ybfa-mediatomb-0.12.1/share/mediatomb/js/common.js</common-script>
|
||||||
|
<playlist-script>/nix/store/cngbzn39vidd6jm4wgzxfafqll74ybfa-mediatomb-0.12.1/share/mediatomb/js/playlists.js</playlist-script>
|
||||||
|
<virtual-layout type="builtin">
|
||||||
|
<import-script>/nix/store/cngbzn39vidd6jm4wgzxfafqll74ybfa-mediatomb-0.12.1/share/mediatomb/js/import.js</import-script>
|
||||||
|
</virtual-layout>
|
||||||
|
</scripting>
|
||||||
|
<mappings>
|
||||||
|
<extension-mimetype ignore-unknown="no">
|
||||||
|
<map from="mp3" to="audio/mpeg"/>
|
||||||
|
<map from="ogx" to="application/ogg"/>
|
||||||
|
<map from="ogv" to="video/ogg"/>
|
||||||
|
<map from="oga" to="audio/ogg"/>
|
||||||
|
<map from="ogg" to="audio/ogg"/>
|
||||||
|
<map from="ogm" to="video/ogg"/>
|
||||||
|
<map from="asf" to="video/x-ms-asf"/>
|
||||||
|
<map from="asx" to="video/x-ms-asf"/>
|
||||||
|
<map from="wma" to="audio/x-ms-wma"/>
|
||||||
|
<map from="wax" to="audio/x-ms-wax"/>
|
||||||
|
<map from="wmv" to="video/x-ms-wmv"/>
|
||||||
|
<map from="wvx" to="video/x-ms-wvx"/>
|
||||||
|
<map from="wm" to="video/x-ms-wm"/>
|
||||||
|
<map from="wmx" to="video/x-ms-wmx"/>
|
||||||
|
<map from="m3u" to="audio/x-mpegurl"/>
|
||||||
|
<map from="pls" to="audio/x-scpls"/>
|
||||||
|
<map from="flv" to="video/x-flv"/>
|
||||||
|
<map from="mkv" to="video/x-matroska"/>
|
||||||
|
<map from="mka" to="audio/x-matroska"/>
|
||||||
|
${if cfg.ps3Support then ''
|
||||||
|
<map from="avi" to="video/divx"/>
|
||||||
|
'' else ""}
|
||||||
|
${if cfg.dsmSupport then ''
|
||||||
|
<map from="avi" to="video/avi"/>
|
||||||
|
'' else ""}
|
||||||
|
</extension-mimetype>
|
||||||
|
<mimetype-upnpclass>
|
||||||
|
<map from="audio/*" to="object.item.audioItem.musicTrack"/>
|
||||||
|
<map from="video/*" to="object.item.videoItem"/>
|
||||||
|
<map from="image/*" to="object.item.imageItem"/>
|
||||||
|
</mimetype-upnpclass>
|
||||||
|
<mimetype-contenttype>
|
||||||
|
<treat mimetype="audio/mpeg" as="mp3"/>
|
||||||
|
<treat mimetype="application/ogg" as="ogg"/>
|
||||||
|
<treat mimetype="audio/ogg" as="ogg"/>
|
||||||
|
<treat mimetype="audio/x-flac" as="flac"/>
|
||||||
|
<treat mimetype="audio/x-ms-wma" as="wma"/>
|
||||||
|
<treat mimetype="audio/x-wavpack" as="wv"/>
|
||||||
|
<treat mimetype="image/jpeg" as="jpg"/>
|
||||||
|
<treat mimetype="audio/x-mpegurl" as="playlist"/>
|
||||||
|
<treat mimetype="audio/x-scpls" as="playlist"/>
|
||||||
|
<treat mimetype="audio/x-wav" as="pcm"/>
|
||||||
|
<treat mimetype="audio/L16" as="pcm"/>
|
||||||
|
<treat mimetype="video/x-msvideo" as="avi"/>
|
||||||
|
<treat mimetype="video/mp4" as="mp4"/>
|
||||||
|
<treat mimetype="audio/mp4" as="mp4"/>
|
||||||
|
<treat mimetype="application/x-iso9660" as="dvd"/>
|
||||||
|
<treat mimetype="application/x-iso9660-image" as="dvd"/>
|
||||||
|
</mimetype-contenttype>
|
||||||
|
</mappings>
|
||||||
|
<online-content>
|
||||||
|
<YouTube enabled="no" refresh="28800" update-at-start="no" purge-after="604800" racy-content="exclude" format="mp4" hd="no">
|
||||||
|
<favorites user="mediatomb"/>
|
||||||
|
<standardfeed feed="most_viewed" time-range="today"/>
|
||||||
|
<playlists user="mediatomb"/>
|
||||||
|
<uploads user="mediatomb"/>
|
||||||
|
<standardfeed feed="recently_featured" time-range="today"/>
|
||||||
|
</YouTube>
|
||||||
|
</online-content>
|
||||||
|
</import>
|
||||||
|
<transcoding enabled="${if cfg.transcoding then "yes" else "no"}">
|
||||||
|
<mimetype-profile-mappings>
|
||||||
|
<transcode mimetype="video/x-flv" using="vlcmpeg"/>
|
||||||
|
<transcode mimetype="application/ogg" using="vlcmpeg"/>
|
||||||
|
<transcode mimetype="application/ogg" using="oggflac2raw"/>
|
||||||
|
<transcode mimetype="audio/x-flac" using="oggflac2raw"/>
|
||||||
|
</mimetype-profile-mappings>
|
||||||
|
<profiles>
|
||||||
|
<profile name="oggflac2raw" enabled="no" type="external">
|
||||||
|
<mimetype>audio/L16</mimetype>
|
||||||
|
<accept-url>no</accept-url>
|
||||||
|
<first-resource>yes</first-resource>
|
||||||
|
<accept-ogg-theora>no</accept-ogg-theora>
|
||||||
|
<agent command="ogg123" arguments="-d raw -o byteorder:big -f %out %in"/>
|
||||||
|
<buffer size="1048576" chunk-size="131072" fill-size="262144"/>
|
||||||
|
</profile>
|
||||||
|
<profile name="vlcmpeg" enabled="no" type="external">
|
||||||
|
<mimetype>video/mpeg</mimetype>
|
||||||
|
<accept-url>yes</accept-url>
|
||||||
|
<first-resource>yes</first-resource>
|
||||||
|
<accept-ogg-theora>yes</accept-ogg-theora>
|
||||||
|
<agent command="vlc" arguments="-I dummy %in --sout #transcode{venc=ffmpeg,vcodec=mp2v,vb=4096,fps=25,aenc=ffmpeg,acodec=mpga,ab=192,samplerate=44100,channels=2}:standard{access=file,mux=ps,dst=%out} vlc:quit"/>
|
||||||
|
<buffer size="14400000" chunk-size="512000" fill-size="120000"/>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
</transcoding>
|
||||||
|
</config>
|
||||||
|
'';
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
services.mediatomb = {
|
||||||
|
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable the mediatomb DLNA server.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
serverName = mkOption {
|
||||||
|
type = types.string;
|
||||||
|
default = "mediatomb";
|
||||||
|
description = ''
|
||||||
|
How to identify the server on the network.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
ps3Support = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable ps3 specific tweaks.
|
||||||
|
WARNING: incompatible with DSM 320 support.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dsmSupport = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable D-Link DSM 320 specific tweaks.
|
||||||
|
WARNING: incompatible with ps3 support.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
tg100Support = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable Telegent TG100 specific tweaks.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
transcoding = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable transcoding.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dataDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "/var/lib/mediatomb";
|
||||||
|
description = ''
|
||||||
|
The directory where mediatomb stores its state, data, etc.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
user = mkOption {
|
||||||
|
default = "mediatomb";
|
||||||
|
description = "User account under which mediatomb runs.";
|
||||||
|
};
|
||||||
|
|
||||||
|
group = mkOption {
|
||||||
|
default = "mediatomb";
|
||||||
|
description = "Group account under which mediatomb runs.";
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
default = 49152;
|
||||||
|
description = ''
|
||||||
|
The network port to listen on.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
uuid = mkOption {
|
||||||
|
default = "fdfc8a4e-a3ad-4c1d-b43d-a2eedb03a687";
|
||||||
|
description = ''
|
||||||
|
A unique (on your network) to identify the server by.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
customCfg = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Allow mediatomb to create and use its own config file inside ${cfg.dataDir}.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
systemd.services.mediatomb = {
|
||||||
|
description = "MediaTomb media Server";
|
||||||
|
after = [ "local-fs.target" "network.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
path = [ pkgs.mediatomb ];
|
||||||
|
serviceConfig.ExecStart = "${pkgs.mediatomb}/bin/mediatomb -p ${toString cfg.port} ${if cfg.customCfg then "" else "-c ${mtConf}"} -m ${cfg.dataDir}";
|
||||||
|
serviceConfig.User = "${cfg.user}";
|
||||||
|
};
|
||||||
|
|
||||||
|
users.extraGroups = optionalAttrs (cfg.group == "mediatomb") (singleton {
|
||||||
|
name = "mediatomb";
|
||||||
|
gid = gid;
|
||||||
|
});
|
||||||
|
|
||||||
|
users.extraUsers = optionalAttrs (cfg.user == "mediatomb") (singleton {
|
||||||
|
name = "mediatomb";
|
||||||
|
isSystemUser = true;
|
||||||
|
group = cfg.group;
|
||||||
|
home = "${cfg.dataDir}";
|
||||||
|
createHome = true;
|
||||||
|
description = "Mediatomb DLNA Server User";
|
||||||
|
});
|
||||||
|
|
||||||
|
networking.firewall = {
|
||||||
|
allowedUDPPorts = [ 1900 cfg.port ];
|
||||||
|
allowedTCPPorts = [ cfg.port ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -379,9 +379,6 @@ in
|
|||||||
/nix/var/nix/gcroots/per-user \
|
/nix/var/nix/gcroots/per-user \
|
||||||
/nix/var/nix/profiles/per-user \
|
/nix/var/nix/profiles/per-user \
|
||||||
/nix/var/nix/gcroots/tmp
|
/nix/var/nix/gcroots/tmp
|
||||||
|
|
||||||
ln -sf /nix/var/nix/profiles /nix/var/nix/gcroots/
|
|
||||||
ln -sf /nix/var/nix/manifests /nix/var/nix/gcroots/
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# of the virtual consoles. The latter is useful for the installation
|
# of the virtual consoles. The latter is useful for the installation
|
||||||
# CD.
|
# CD.
|
||||||
|
|
||||||
{ config, lib, pkgs, baseModules, ... } @ extraArgs:
|
{ config, lib, pkgs, baseModules, ... }:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ let
|
|||||||
|
|
||||||
eval = evalModules {
|
eval = evalModules {
|
||||||
modules = [ versionModule ] ++ baseModules;
|
modules = [ versionModule ] ++ baseModules;
|
||||||
args = (removeAttrs extraArgs ["config" "options"]) // { modules = [ ]; };
|
args = (config._module.args) // { modules = [ ]; };
|
||||||
};
|
};
|
||||||
|
|
||||||
manual = import ../../../doc/manual {
|
manual = import ../../../doc/manual {
|
||||||
|
@ -34,7 +34,7 @@ let
|
|||||||
cap=$(sed -nr 's/.*#%#\s+capabilities\s*=\s*(.+)/\1/p' $file)
|
cap=$(sed -nr 's/.*#%#\s+capabilities\s*=\s*(.+)/\1/p' $file)
|
||||||
|
|
||||||
wrapProgram $file \
|
wrapProgram $file \
|
||||||
--set PATH "/var/setuid-wrappers:/run/current-system/sw/bin:/run/current-system/sw/sbin" \
|
--set PATH "/var/setuid-wrappers:/run/current-system/sw/bin:/run/current-system/sw/bin" \
|
||||||
--set MUNIN_LIBDIR "${pkgs.munin}/lib" \
|
--set MUNIN_LIBDIR "${pkgs.munin}/lib" \
|
||||||
--set MUNIN_PLUGSTATE "/var/run/munin"
|
--set MUNIN_PLUGSTATE "/var/run/munin"
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ in
|
|||||||
|
|
||||||
mkdir -p /etc/munin/plugins
|
mkdir -p /etc/munin/plugins
|
||||||
rm -rf /etc/munin/plugins/*
|
rm -rf /etc/munin/plugins/*
|
||||||
PATH="/var/setuid-wrappers:/run/current-system/sw/bin:/run/current-system/sw/sbin" ${pkgs.munin}/sbin/munin-node-configure --shell --families contrib,auto,manual --config ${nodeConf} --libdir=${muninPlugins} --servicedir=/etc/munin/plugins 2>/dev/null | ${pkgs.bash}/bin/bash
|
PATH="/var/setuid-wrappers:/run/current-system/sw/bin:/run/current-system/sw/bin" ${pkgs.munin}/sbin/munin-node-configure --shell --families contrib,auto,manual --config ${nodeConf} --libdir=${muninPlugins} --servicedir=/etc/munin/plugins 2>/dev/null | ${pkgs.bash}/bin/bash
|
||||||
'';
|
'';
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "${pkgs.munin}/sbin/munin-node --config ${nodeConf} --servicedir /etc/munin/plugins/";
|
ExecStart = "${pkgs.munin}/sbin/munin-node --config ${nodeConf} --servicedir /etc/munin/plugins/";
|
||||||
|
45
nixos/modules/services/monitoring/teamviewer.nix
Normal file
45
nixos/modules/services/monitoring/teamviewer.nix
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
cfg = config.services.teamviewer;
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
services.teamviewer.enable = mkEnableOption "teamviewer daemon";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = mkIf (cfg.enable) {
|
||||||
|
|
||||||
|
environment.systemPackages = [ pkgs.teamviewer ];
|
||||||
|
|
||||||
|
systemd.services.teamviewerd = {
|
||||||
|
description = "TeamViewer remote control daemon";
|
||||||
|
|
||||||
|
wantedBy = [ "graphical.target" ];
|
||||||
|
after = [ "NetworkManager-wait-online.service" "network.target" ];
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "forking";
|
||||||
|
ExecStart = "${pkgs.teamviewer}/bin/teamviewerd -d";
|
||||||
|
PIDFile = "/run/teamviewerd.pid";
|
||||||
|
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||||
|
Restart = "on-abort";
|
||||||
|
StartLimitInterval = "60";
|
||||||
|
StartLimitBurst = "10";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -44,7 +44,7 @@ let cfg = config.services.drbd; in
|
|||||||
|
|
||||||
boot.extraModprobeConfig =
|
boot.extraModprobeConfig =
|
||||||
''
|
''
|
||||||
options drbd usermode_helper=/run/current-system/sw/sbin/drbdadm
|
options drbd usermode_helper=/run/current-system/sw/bin/drbdadm
|
||||||
'';
|
'';
|
||||||
|
|
||||||
environment.etc = singleton
|
environment.etc = singleton
|
||||||
|
@ -4,6 +4,9 @@ with lib;
|
|||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.services.btsync;
|
cfg = config.services.btsync;
|
||||||
|
|
||||||
|
bittorrentSync = cfg.package;
|
||||||
|
|
||||||
listenAddr = cfg.httpListenAddr + ":" + (toString cfg.httpListenPort);
|
listenAddr = cfg.httpListenAddr + ":" + (toString cfg.httpListenPort);
|
||||||
|
|
||||||
boolStr = x: if x then "true" else "false";
|
boolStr = x: if x then "true" else "false";
|
||||||
@ -57,7 +60,7 @@ let
|
|||||||
''
|
''
|
||||||
{
|
{
|
||||||
"device_name": "${cfg.deviceName}",
|
"device_name": "${cfg.deviceName}",
|
||||||
"storage_path": "/var/lib/btsync/",
|
"storage_path": "${cfg.storagePath}",
|
||||||
"listening_port": ${toString cfg.listeningPort},
|
"listening_port": ${toString cfg.listeningPort},
|
||||||
"use_gui": false,
|
"use_gui": false,
|
||||||
|
|
||||||
@ -195,6 +198,24 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
package = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.bittorrentSync14;
|
||||||
|
example = literalExample "pkgs.bittorrentSync20";
|
||||||
|
description = ''
|
||||||
|
Branch of bittorrent sync to use.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
storagePath = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "/var/lib/btsync";
|
||||||
|
example = "/var/lib/btsync";
|
||||||
|
description = ''
|
||||||
|
Where to store the bittorrent sync files.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
apiKey = mkOption {
|
apiKey = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
@ -258,7 +279,7 @@ in
|
|||||||
|
|
||||||
users.extraUsers.btsync = {
|
users.extraUsers.btsync = {
|
||||||
description = "Bittorrent Sync Service user";
|
description = "Bittorrent Sync Service user";
|
||||||
home = "/var/lib/btsync";
|
home = cfg.storagePath;
|
||||||
createHome = true;
|
createHome = true;
|
||||||
uid = config.ids.uids.btsync;
|
uid = config.ids.uids.btsync;
|
||||||
group = "btsync";
|
group = "btsync";
|
||||||
@ -292,6 +313,6 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [ pkgs.bittorrentSync ];
|
environment.systemPackages = [ cfg.package ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -183,6 +183,9 @@ in {
|
|||||||
{ source = "${networkmanager_pptp}/etc/NetworkManager/VPN/nm-pptp-service.name";
|
{ source = "${networkmanager_pptp}/etc/NetworkManager/VPN/nm-pptp-service.name";
|
||||||
target = "NetworkManager/VPN/nm-pptp-service.name";
|
target = "NetworkManager/VPN/nm-pptp-service.name";
|
||||||
}
|
}
|
||||||
|
{ source = "${networkmanager_l2tp}/etc/NetworkManager/VPN/nm-l2tp-service.name";
|
||||||
|
target = "NetworkManager/VPN/nm-l2tp-service.name";
|
||||||
|
}
|
||||||
] ++ optional (cfg.appendNameservers == [] || cfg.insertNameservers == [])
|
] ++ optional (cfg.appendNameservers == [] || cfg.insertNameservers == [])
|
||||||
{ source = overrideNameserversScript;
|
{ source = overrideNameserversScript;
|
||||||
target = "NetworkManager/dispatcher.d/02overridedns";
|
target = "NetworkManager/dispatcher.d/02overridedns";
|
||||||
@ -197,6 +200,7 @@ in {
|
|||||||
networkmanager_vpnc
|
networkmanager_vpnc
|
||||||
networkmanager_openconnect
|
networkmanager_openconnect
|
||||||
networkmanager_pptp
|
networkmanager_pptp
|
||||||
|
networkmanager_l2tp
|
||||||
modemmanager
|
modemmanager
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -240,6 +244,7 @@ in {
|
|||||||
networkmanager_vpnc
|
networkmanager_vpnc
|
||||||
networkmanager_openconnect
|
networkmanager_openconnect
|
||||||
networkmanager_pptp
|
networkmanager_pptp
|
||||||
|
networkmanager_l2tp
|
||||||
modemmanager
|
modemmanager
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -4,7 +4,12 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
let
|
||||||
|
mergeHook = pkgs.writeScript "rdnssd-merge-hook" ''
|
||||||
|
#! ${pkgs.stdenv.shell} -e
|
||||||
|
${pkgs.openresolv}/bin/resolvconf -u
|
||||||
|
'';
|
||||||
|
in
|
||||||
{
|
{
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
@ -30,17 +35,38 @@ with lib;
|
|||||||
|
|
||||||
config = mkIf config.services.rdnssd.enable {
|
config = mkIf config.services.rdnssd.enable {
|
||||||
|
|
||||||
jobs.rdnssd =
|
systemd.services.rdnssd = {
|
||||||
{ description = "RDNSS daemon";
|
description = "RDNSS daemon";
|
||||||
|
after = [ "network.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
# Start before the network interfaces are brought up so that
|
preStart = ''
|
||||||
# the daemon receives RDNSS advertisements from the kernel.
|
# Create the proper run directory
|
||||||
startOn = "starting network-interfaces";
|
mkdir -p /run/rdnssd
|
||||||
|
touch /run/rdnssd/resolv.conf
|
||||||
|
chown -R rdnssd /run/rdnssd
|
||||||
|
|
||||||
# !!! Should write to /var/run/rdnssd/resolv.conf and run the daemon under another uid.
|
# Link the resolvconf interfaces to rdnssd
|
||||||
exec = "${pkgs.ndisc6}/sbin/rdnssd --resolv-file /etc/resolv.conf -u root";
|
rm -f /run/resolvconf/interfaces/rdnssd
|
||||||
|
ln -s /run/rdnssd/resolv.conf /run/resolvconf/interfaces/rdnssd
|
||||||
|
${mergeHook}
|
||||||
|
'';
|
||||||
|
|
||||||
daemonType = "fork";
|
postStop = ''
|
||||||
|
rm -f /run/resolvconf/interfaces/rdnssd
|
||||||
|
${mergeHook}
|
||||||
|
'';
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "@${pkgs.ndisc6}/bin/rdnssd rdnssd -p /run/rdnssd/rdnssd.pid -r /run/rdnssd/resolv.conf -u rdnssd -H ${mergeHook}";
|
||||||
|
Type = "forking";
|
||||||
|
PIDFile = "/run/rdnssd/rdnssd.pid";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
users.extraUsers.rdnssd = {
|
||||||
|
description = "RDNSSD Daemon User";
|
||||||
|
uid = config.ids.uids.rdnssd;
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -130,6 +130,9 @@ in
|
|||||||
config.system.path
|
config.system.path
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# Don't restart dbus-daemon. Bad things tend to happen if we do.
|
||||||
|
systemd.services.dbus.reloadIfChanged = true;
|
||||||
|
|
||||||
environment.pathsToLink = [ "/etc/dbus-1" "/share/dbus-1" ];
|
environment.pathsToLink = [ "/etc/dbus-1" "/share/dbus-1" ];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -19,7 +19,7 @@ in
|
|||||||
# E.g., if KDE is enabled, it supersedes xterm.
|
# E.g., if KDE is enabled, it supersedes xterm.
|
||||||
imports = [
|
imports = [
|
||||||
./none.nix ./xterm.nix ./xfce.nix ./kde4.nix ./kde5.nix
|
./none.nix ./xterm.nix ./xfce.nix ./kde4.nix ./kde5.nix
|
||||||
./e19.nix ./gnome3.nix ./xbmc.nix ./kodi.nix
|
./e19.nix ./gnome3.nix ./kodi.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.xserver.desktopManager.xbmc;
|
|
||||||
in
|
|
||||||
|
|
||||||
{
|
|
||||||
options = {
|
|
||||||
services.xserver.desktopManager.xbmc = {
|
|
||||||
enable = mkOption {
|
|
||||||
default = false;
|
|
||||||
example = true;
|
|
||||||
description = "Enable the xbmc multimedia center.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
services.xserver.desktopManager.session = [{
|
|
||||||
name = "xbmc";
|
|
||||||
start = ''
|
|
||||||
${pkgs.xbmc}/bin/xbmc --lircdev /var/run/lirc/lircd --standalone &
|
|
||||||
waitPID=$!
|
|
||||||
'';
|
|
||||||
}];
|
|
||||||
|
|
||||||
environment.systemPackages = [ pkgs.xbmc ];
|
|
||||||
};
|
|
||||||
}
|
|
@ -55,7 +55,7 @@ let
|
|||||||
[UserList]
|
[UserList]
|
||||||
minimum-uid=500
|
minimum-uid=500
|
||||||
hidden-users=${concatStringsSep " " dmcfg.hiddenUsers}
|
hidden-users=${concatStringsSep " " dmcfg.hiddenUsers}
|
||||||
hidden-shells=/run/current-system/sw/sbin/nologin
|
hidden-shells=/run/current-system/sw/bin/nologin
|
||||||
'';
|
'';
|
||||||
|
|
||||||
lightdmConf = writeText "lightdm.conf"
|
lightdmConf = writeText "lightdm.conf"
|
||||||
|
@ -26,7 +26,7 @@ let
|
|||||||
[Users]
|
[Users]
|
||||||
MaximumUid=${toString config.ids.uids.nixbld}
|
MaximumUid=${toString config.ids.uids.nixbld}
|
||||||
HideUsers=${concatStringsSep "," dmcfg.hiddenUsers}
|
HideUsers=${concatStringsSep "," dmcfg.hiddenUsers}
|
||||||
HideShells=/run/current-system/sw/sbin/nologin
|
HideShells=/run/current-system/sw/bin/nologin
|
||||||
|
|
||||||
[XDisplay]
|
[XDisplay]
|
||||||
MinimumVT=${toString xcfg.tty}
|
MinimumVT=${toString xcfg.tty}
|
||||||
|
@ -384,9 +384,13 @@ system("@systemd@/bin/systemctl", "reset-failed");
|
|||||||
# Make systemd reload its units.
|
# Make systemd reload its units.
|
||||||
system("@systemd@/bin/systemctl", "daemon-reload") == 0 or $res = 3;
|
system("@systemd@/bin/systemctl", "daemon-reload") == 0 or $res = 3;
|
||||||
|
|
||||||
# Signal dbus to reload its configuration before starting other units.
|
# Reload units that need it. This includes remounting changed mount
|
||||||
# Other units may rely on newly installed policy files under /etc/dbus-1
|
# units.
|
||||||
system("@systemd@/bin/systemctl", "reload-or-restart", "dbus.service");
|
if (scalar(keys %unitsToReload) > 0) {
|
||||||
|
print STDERR "reloading the following units: ", join(", ", sort(keys %unitsToReload)), "\n";
|
||||||
|
system("@systemd@/bin/systemctl", "reload", "--", sort(keys %unitsToReload)) == 0 or $res = 4;
|
||||||
|
unlink($reloadListFile);
|
||||||
|
}
|
||||||
|
|
||||||
# Restart changed services (those that have to be restarted rather
|
# Restart changed services (those that have to be restarted rather
|
||||||
# than stopped and started).
|
# than stopped and started).
|
||||||
@ -407,14 +411,6 @@ print STDERR "starting the following units: ", join(", ", @unitsToStartFiltered)
|
|||||||
system("@systemd@/bin/systemctl", "start", "--", sort(keys %unitsToStart)) == 0 or $res = 4;
|
system("@systemd@/bin/systemctl", "start", "--", sort(keys %unitsToStart)) == 0 or $res = 4;
|
||||||
unlink($startListFile);
|
unlink($startListFile);
|
||||||
|
|
||||||
# Reload units that need it. This includes remounting changed mount
|
|
||||||
# units.
|
|
||||||
if (scalar(keys %unitsToReload) > 0) {
|
|
||||||
print STDERR "reloading the following units: ", join(", ", sort(keys %unitsToReload)), "\n";
|
|
||||||
system("@systemd@/bin/systemctl", "reload", "--", sort(keys %unitsToReload)) == 0 or $res = 4;
|
|
||||||
unlink($reloadListFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Print failed and new units.
|
# Print failed and new units.
|
||||||
my (@failed, @new, @restarting);
|
my (@failed, @new, @restarting);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{ config, lib, pkgs, utils, ... }:
|
{ config, lib, pkgs, utils, ... }:
|
||||||
|
|
||||||
with lib;
|
|
||||||
with utils;
|
with utils;
|
||||||
|
with lib;
|
||||||
with import ./systemd-unit-options.nix { inherit config lib; };
|
with import ./systemd-unit-options.nix { inherit config lib; };
|
||||||
|
|
||||||
let
|
let
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
{ config, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [ "${modulesPath}/virtualisation/amazon-image.nix" ];
|
imports = [ ./amazon-image.nix ];
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@ in rec {
|
|||||||
(all nixos.tests.installer.simple)
|
(all nixos.tests.installer.simple)
|
||||||
(all nixos.tests.installer.simpleLabels)
|
(all nixos.tests.installer.simpleLabels)
|
||||||
(all nixos.tests.installer.simpleProvided)
|
(all nixos.tests.installer.simpleProvided)
|
||||||
|
(all nixos.tests.installer.swraid)
|
||||||
(all nixos.tests.installer.btrfsSimple)
|
(all nixos.tests.installer.btrfsSimple)
|
||||||
(all nixos.tests.installer.btrfsSubvols)
|
(all nixos.tests.installer.btrfsSubvols)
|
||||||
(all nixos.tests.installer.btrfsSubvolDefault)
|
(all nixos.tests.installer.btrfsSubvolDefault)
|
||||||
|
@ -260,6 +260,7 @@ in rec {
|
|||||||
tests.installer.simple = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).simple.test);
|
tests.installer.simple = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).simple.test);
|
||||||
tests.installer.simpleLabels = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).simpleLabels.test);
|
tests.installer.simpleLabels = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).simpleLabels.test);
|
||||||
tests.installer.simpleProvided = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).simpleProvided.test);
|
tests.installer.simpleProvided = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).simpleProvided.test);
|
||||||
|
tests.installer.swraid = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).swraid.test);
|
||||||
tests.installer.btrfsSimple = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).btrfsSimple.test);
|
tests.installer.btrfsSimple = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).btrfsSimple.test);
|
||||||
tests.installer.btrfsSubvols = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).btrfsSubvols.test);
|
tests.installer.btrfsSubvols = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).btrfsSubvols.test);
|
||||||
tests.installer.btrfsSubvolDefault = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).btrfsSubvolDefault.test);
|
tests.installer.btrfsSubvolDefault = forAllSystems (system: hydraJob (import tests/installer.nix { inherit system; }).btrfsSubvolDefault.test);
|
||||||
@ -297,6 +298,7 @@ in rec {
|
|||||||
# TODO: put in networking.nix after the test becomes more complete
|
# TODO: put in networking.nix after the test becomes more complete
|
||||||
tests.networkingProxy = callTest tests/networking-proxy.nix {};
|
tests.networkingProxy = callTest tests/networking-proxy.nix {};
|
||||||
tests.nfs3 = callTest tests/nfs.nix { version = 3; };
|
tests.nfs3 = callTest tests/nfs.nix { version = 3; };
|
||||||
|
tests.nfs4 = callTest tests/nfs.nix { version = 4; };
|
||||||
tests.nsd = callTest tests/nsd.nix {};
|
tests.nsd = callTest tests/nsd.nix {};
|
||||||
tests.openssh = callTest tests/openssh.nix {};
|
tests.openssh = callTest tests/openssh.nix {};
|
||||||
tests.panamax = hydraJob (import tests/panamax.nix { system = "x86_64-linux"; });
|
tests.panamax = hydraJob (import tests/panamax.nix { system = "x86_64-linux"; });
|
||||||
@ -308,8 +310,12 @@ in rec {
|
|||||||
tests.simple = callTest tests/simple.nix {};
|
tests.simple = callTest tests/simple.nix {};
|
||||||
tests.tomcat = callTest tests/tomcat.nix {};
|
tests.tomcat = callTest tests/tomcat.nix {};
|
||||||
tests.udisks2 = callTest tests/udisks2.nix {};
|
tests.udisks2 = callTest tests/udisks2.nix {};
|
||||||
tests.virtualbox = callTest tests/virtualbox.nix {};
|
tests.virtualbox = hydraJob (import tests/virtualbox.nix { system = "x86_64-linux"; });
|
||||||
tests.xfce = callTest tests/xfce.nix {};
|
tests.xfce = callTest tests/xfce.nix {};
|
||||||
|
tests.bootBiosCdrom = forAllSystems (system: hydraJob (import tests/boot.nix { inherit system; }).bootBiosCdrom);
|
||||||
|
tests.bootBiosUsb = forAllSystems (system: hydraJob (import tests/boot.nix { inherit system; }).bootBiosUsb);
|
||||||
|
tests.bootUefiCdrom = forAllSystems (system: hydraJob (import tests/boot.nix { inherit system; }).bootUefiCdrom);
|
||||||
|
tests.bootUefiUsb = forAllSystems (system: hydraJob (import tests/boot.nix { inherit system; }).bootUefiUsb);
|
||||||
|
|
||||||
|
|
||||||
/* Build a bunch of typical closures so that Hydra can keep track of
|
/* Build a bunch of typical closures so that Hydra can keep track of
|
||||||
|
63
nixos/tests/boot.nix
Normal file
63
nixos/tests/boot.nix
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
{ system ? builtins.currentSystem }:
|
||||||
|
|
||||||
|
with import ../lib/testing.nix { inherit system; };
|
||||||
|
with import ../lib/qemu-flags.nix;
|
||||||
|
with pkgs.lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
iso =
|
||||||
|
(import ../lib/eval-config.nix {
|
||||||
|
inherit system;
|
||||||
|
modules =
|
||||||
|
[ ../modules/installer/cd-dvd/installation-cd-minimal.nix
|
||||||
|
../modules/testing/test-instrumentation.nix
|
||||||
|
{ key = "serial";
|
||||||
|
boot.loader.grub.timeout = mkOverride 0 0;
|
||||||
|
|
||||||
|
# The test cannot access the network, so any sources we
|
||||||
|
# need must be included in the ISO.
|
||||||
|
isoImage.storeContents =
|
||||||
|
[ pkgs.glibcLocales
|
||||||
|
pkgs.sudo
|
||||||
|
pkgs.docbook5
|
||||||
|
pkgs.docbook5_xsl
|
||||||
|
pkgs.grub
|
||||||
|
pkgs.perlPackages.XMLLibXML
|
||||||
|
pkgs.unionfs-fuse
|
||||||
|
pkgs.gummiboot
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}).config.system.build.isoImage;
|
||||||
|
|
||||||
|
makeBootTest = name: machineConfig:
|
||||||
|
makeTest {
|
||||||
|
inherit iso;
|
||||||
|
name = "boot-" + name;
|
||||||
|
nodes = { };
|
||||||
|
testScript =
|
||||||
|
''
|
||||||
|
my $machine = createMachine({ ${machineConfig}, qemuFlags => '-m 768' });
|
||||||
|
$machine->start;
|
||||||
|
$machine->waitForUnit("multi-user.target");
|
||||||
|
$machine->shutdown;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
bootBiosCdrom = makeBootTest "bios-cdrom" ''
|
||||||
|
cdrom => glob("${iso}/iso/*.iso")
|
||||||
|
'';
|
||||||
|
bootBiosUsb = makeBootTest "bios-usb" ''
|
||||||
|
usb => glob("${iso}/iso/*.iso")
|
||||||
|
'';
|
||||||
|
bootUefiCdrom = makeBootTest "uefi-cdrom" ''
|
||||||
|
cdrom => glob("${iso}/iso/*.iso"),
|
||||||
|
bios => '${pkgs.OVMF}/FV/OVMF.fd'
|
||||||
|
'';
|
||||||
|
bootUefiUsb = makeBootTest "uefi-usb" ''
|
||||||
|
usb => glob("${iso}/iso/*.iso"),
|
||||||
|
bios => '${pkgs.OVMF}/FV/OVMF.fd'
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
|
@ -109,7 +109,12 @@ import ./make-test.nix (
|
|||||||
$machine->waitUntilSucceeds("${xdo "check-startup" ''
|
$machine->waitUntilSucceeds("${xdo "check-startup" ''
|
||||||
search --sync --onlyvisible --name "startup done"
|
search --sync --onlyvisible --name "startup done"
|
||||||
# close first start help popup
|
# close first start help popup
|
||||||
key Escape
|
key -delay 1000 Escape
|
||||||
|
# XXX: This is to make sure the popup is closed, but we better do
|
||||||
|
# screenshots to detect visual changes.
|
||||||
|
key -delay 2000 Escape
|
||||||
|
key -delay 3000 Escape
|
||||||
|
key -delay 4000 Escape
|
||||||
windowfocus --sync
|
windowfocus --sync
|
||||||
windowactivate --sync
|
windowactivate --sync
|
||||||
''}");
|
''}");
|
||||||
|
@ -327,12 +327,12 @@ in {
|
|||||||
$machine->succeed(
|
$machine->succeed(
|
||||||
"parted /dev/vda --"
|
"parted /dev/vda --"
|
||||||
. " mklabel msdos"
|
. " mklabel msdos"
|
||||||
. " mkpart primary ext2 1M 30MB" # /boot
|
. " mkpart primary ext2 1M 100MB" # /boot
|
||||||
. " mkpart extended 30M -1s"
|
. " mkpart extended 100M -1s"
|
||||||
. " mkpart logical 31M 1531M" # md0 (root), first device
|
. " mkpart logical 102M 1602M" # md0 (root), first device
|
||||||
. " mkpart logical 1540M 3040M" # md0 (root), second device
|
. " mkpart logical 1603M 3103M" # md0 (root), second device
|
||||||
. " mkpart logical 3050M 3306M" # md1 (swap), first device
|
. " mkpart logical 3104M 3360M" # md1 (swap), first device
|
||||||
. " mkpart logical 3320M 3576M", # md1 (swap), second device
|
. " mkpart logical 3361M 3617M", # md1 (swap), second device
|
||||||
"udevadm settle",
|
"udevadm settle",
|
||||||
"ls -l /dev/vda* >&2",
|
"ls -l /dev/vda* >&2",
|
||||||
"cat /proc/partitions >&2",
|
"cat /proc/partitions >&2",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import ./make-test.nix ({ version, ... }:
|
import ./make-test.nix ({ version ? 4, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
|
@ -244,6 +244,7 @@ import ./make-test.nix ({ pkgs, ... }: with pkgs.lib; let
|
|||||||
for (my $i = 0; $i <= 120; $i += 10) {
|
for (my $i = 0; $i <= 120; $i += 10) {
|
||||||
$machine->sleep(10);
|
$machine->sleep(10);
|
||||||
return if checkRunning_${name};
|
return if checkRunning_${name};
|
||||||
|
eval { $_[0]->() } if defined $_[0];
|
||||||
}
|
}
|
||||||
die "VirtualBox VM didn't start up within 2 minutes";
|
die "VirtualBox VM didn't start up within 2 minutes";
|
||||||
}
|
}
|
||||||
@ -335,7 +336,9 @@ in {
|
|||||||
$machine->screenshot("gui_manager_started");
|
$machine->screenshot("gui_manager_started");
|
||||||
$machine->sendKeys("ret");
|
$machine->sendKeys("ret");
|
||||||
$machine->screenshot("gui_manager_sent_startup");
|
$machine->screenshot("gui_manager_sent_startup");
|
||||||
waitForStartup_simple;
|
waitForStartup_simple (sub {
|
||||||
|
$machine->sendKeys("ret");
|
||||||
|
});
|
||||||
$machine->screenshot("gui_started");
|
$machine->screenshot("gui_started");
|
||||||
waitForVMBoot_simple;
|
waitForVMBoot_simple;
|
||||||
$machine->screenshot("gui_booted");
|
$machine->screenshot("gui_booted");
|
||||||
|
@ -9,7 +9,9 @@ stdenv.mkDerivation rec{
|
|||||||
version = "0.10.0";
|
version = "0.10.0";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://bitcoin.org/bin/bitcoin-core-0.10.0/bitcoin-${version}.tar.gz";
|
url = [ "https://bitcoin.org/bin/bitcoin-core-0.10.0/bitcoin-${version}.tar.gz"
|
||||||
|
"mirror://sourceforge/bitcoin/Bitcoin/bitcoin-0.10.0/bitcoin-${version}.tar.gz"
|
||||||
|
];
|
||||||
sha256 = "a516cf6d9f58a117607148405334b35d3178df1ba1c59229609d2bcd08d30624";
|
sha256 = "a516cf6d9f58a117607148405334b35d3178df1ba1c59229609d2bcd08d30624";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
|
|||||||
QT_PLUGIN_PATH="${qtscriptgenerator}/lib/qt4/plugins";
|
QT_PLUGIN_PATH="${qtscriptgenerator}/lib/qt4/plugins";
|
||||||
|
|
||||||
buildInputs = [ qtscriptgenerator stdenv.cc.libc gettext curl
|
buildInputs = [ qtscriptgenerator stdenv.cc.libc gettext curl
|
||||||
libxml2 mysql taglib taglib_extras loudmouth kdelibs automoc4 phonon strigi
|
libxml2 mysql.lib taglib taglib_extras loudmouth kdelibs automoc4 phonon strigi
|
||||||
soprano qca2 libmtp liblastfm libgpod pkgconfig qjson ffmpeg libofa nepomuk_core ];
|
soprano qca2 libmtp liblastfm libgpod pkgconfig qjson ffmpeg libofa nepomuk_core ];
|
||||||
|
|
||||||
cmakeFlags = "-DKDE4_BUILD_TESTS=OFF";
|
cmakeFlags = "-DKDE4_BUILD_TESTS=OFF";
|
||||||
|
@ -1,110 +0,0 @@
|
|||||||
{ fetchgit, stdenv, unzip, pkgconfig, makeWrapper, libsndfile, libmicrohttpd, vim }:
|
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
|
||||||
|
|
||||||
version = "8-1-2015";
|
|
||||||
name = "faust-compiler-${version}";
|
|
||||||
src = fetchgit {
|
|
||||||
url = git://git.code.sf.net/p/faudiostream/code;
|
|
||||||
rev = "4db76fdc02b6aec8d15a5af77fcd5283abe963ce";
|
|
||||||
sha256 = "f1ac92092ee173e4bcf6b2cb1ac385a7c390fb362a578a403b2b6edd5dc7d5d0";
|
|
||||||
};
|
|
||||||
|
|
||||||
# this version has a bug that manifests when doing faust2jack:
|
|
||||||
/*version = "0.9.67";*/
|
|
||||||
/*name = "faust-compiler-${version}";*/
|
|
||||||
/*src = fetchurl {*/
|
|
||||||
/*url = "http://downloads.sourceforge.net/project/faudiostream/faust-${version}.zip";*/
|
|
||||||
/*sha256 = "068vl9536zn0j4pknwfcchzi90rx5pk64wbcbd67z32w0csx8xm1";*/
|
|
||||||
/*};*/
|
|
||||||
|
|
||||||
buildInputs = [ unzip pkgconfig makeWrapper libsndfile libmicrohttpd vim];
|
|
||||||
|
|
||||||
|
|
||||||
makeFlags="PREFIX = $(out)";
|
|
||||||
FPATH="$out"; # <- where to search
|
|
||||||
|
|
||||||
patchPhase = ''
|
|
||||||
sed -i 's@?= $(shell uname -s)@:= Linux@g' architecture/osclib/oscpack/Makefile
|
|
||||||
sed -i 's@faust/misc.h@../../architecture/faust/misc.h@g' tools/sound2faust/sound2faust.cpp
|
|
||||||
sed -i 's@faust/gui/@../../architecture/faust/gui/@g' architecture/faust/misc.h
|
|
||||||
'';
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
make -C compiler -f Makefile.unix
|
|
||||||
make -C architecture/osclib
|
|
||||||
g++ -O3 tools/sound2faust/sound2faust.cpp `pkg-config --cflags --static --libs sndfile` -o tools/sound2faust/sound2faust
|
|
||||||
make httpd
|
|
||||||
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
|
|
||||||
echo install faust itself
|
|
||||||
mkdir -p $out/bin/
|
|
||||||
mkdir -p $out/include/
|
|
||||||
mkdir -p $out/include/faust/
|
|
||||||
mkdir -p $out/include/faust/osc/
|
|
||||||
install compiler/faust $out/bin/
|
|
||||||
|
|
||||||
echo install architecture and faust library files
|
|
||||||
mkdir -p $out/lib/faust
|
|
||||||
cp architecture/*.lib $out/lib/faust/
|
|
||||||
cp architecture/*.cpp $out/lib/faust/
|
|
||||||
|
|
||||||
echo install math documentation files
|
|
||||||
cp architecture/mathdoctexts-*.txt $out/lib/faust/
|
|
||||||
cp architecture/latexheader.tex $out/lib/faust/
|
|
||||||
|
|
||||||
echo install additional binary libraries: osc, http
|
|
||||||
([ -e architecture/httpdlib/libHTTPDFaust.a ] && cp architecture/httpdlib/libHTTPDFaust.a $out/lib/faust/) || echo libHTTPDFaust not available
|
|
||||||
cp architecture/osclib/*.a $out/lib/faust/
|
|
||||||
cp -r architecture/httpdlib/html/js $out/lib/faust/js
|
|
||||||
([ -e architecture/httpdlib/src/hexa/stylesheet ] && cp architecture/httpdlib/src/hexa/stylesheet $out/lib/faust/js/stylesheet.js) || echo stylesheet not available
|
|
||||||
([ -e architecture/httpdlib/src/hexa/jsscripts ] && cp architecture/httpdlib/src/hexa/jsscripts $out/lib/faust/js/jsscripts.js) || echo jsscripts not available
|
|
||||||
|
|
||||||
echo install includes files for architectures
|
|
||||||
cp -r architecture/faust $out/include/
|
|
||||||
|
|
||||||
echo install additional includes files for binary libraries: osc, http
|
|
||||||
cp architecture/osclib/faust/faust/OSCControler.h $out/include/faust/gui/
|
|
||||||
cp architecture/osclib/faust/faust/osc/*.h $out/include/faust/osc/
|
|
||||||
cp architecture/httpdlib/src/include/*.h $out/include/faust/gui/
|
|
||||||
|
|
||||||
|
|
||||||
echo patch header and cpp files
|
|
||||||
find $out/include/ -name "*.h" -type f | xargs sed "s@#include \"faust/@#include \"$out/include/faust/@g" -i
|
|
||||||
find $out/lib/faust/ -name "*.cpp" -type f | xargs sed "s@#include \"faust/@#include \"$out/include/faust/@g" -i
|
|
||||||
sed -i "s@../../architecture/faust/gui/@$out/include/faust/gui/@g" $out/include/faust/misc.h
|
|
||||||
|
|
||||||
wrapProgram $out/bin/faust \
|
|
||||||
--set FAUSTLIB $out/lib/faust \
|
|
||||||
--set FAUST_LIB_PATH $out/lib/faust \
|
|
||||||
--set FAUSTINC $out/include/
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
|
||||||
description = "A functional programming language for realtime audio signal processing";
|
|
||||||
longDescription = ''
|
|
||||||
FAUST (Functional Audio Stream) is a functional programming
|
|
||||||
language specifically designed for real-time signal processing
|
|
||||||
and synthesis. FAUST targets high-performance signal processing
|
|
||||||
applications and audio plug-ins for a variety of platforms and
|
|
||||||
standards.
|
|
||||||
The Faust compiler translates DSP specifications into very
|
|
||||||
efficient C++ code. Thanks to the notion of architecture,
|
|
||||||
FAUST programs can be easily deployed on a large variety of
|
|
||||||
audio platforms and plugin formats (jack, alsa, ladspa, maxmsp,
|
|
||||||
puredata, csound, supercollider, pure, vst, coreaudio) without
|
|
||||||
any change to the FAUST code.
|
|
||||||
This package has just the compiler. Install faust for the full
|
|
||||||
set of faust2somethingElse tools.
|
|
||||||
'';
|
|
||||||
homepage = http://faust.grame.fr/;
|
|
||||||
downloadPage = http://sourceforge.net/projects/faudiostream/files/;
|
|
||||||
license = licenses.gpl2;
|
|
||||||
platforms = platforms.linux;
|
|
||||||
maintainers = [ maintainers.magnetophon ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,81 +1,79 @@
|
|||||||
{ fetchgit, stdenv, bash, alsaLib, atk, cairo, faust-compiler, fontconfig, freetype
|
{ stdenv
|
||||||
, gcc, gdk_pixbuf, glib, gtk, jack2, makeWrapper, opencv, pango, pkgconfig, unzip
|
, coreutils
|
||||||
, gtkSupport ? true
|
, fetchgit
|
||||||
, jackaudioSupport ? true
|
, makeWrapper
|
||||||
|
, pkgconfig
|
||||||
}:
|
}:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
with stdenv.lib.strings;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
version = "8-1-2015";
|
version = "8-1-2015";
|
||||||
name = "faust-${version}";
|
|
||||||
src = fetchgit {
|
src = fetchgit {
|
||||||
url = git://git.code.sf.net/p/faudiostream/code;
|
url = git://git.code.sf.net/p/faudiostream/code;
|
||||||
rev = "4db76fdc02b6aec8d15a5af77fcd5283abe963ce";
|
rev = "4db76fdc02b6aec8d15a5af77fcd5283abe963ce";
|
||||||
sha256 = "f1ac92092ee173e4bcf6b2cb1ac385a7c390fb362a578a403b2b6edd5dc7d5d0";
|
sha256 = "f1ac92092ee173e4bcf6b2cb1ac385a7c390fb362a578a403b2b6edd5dc7d5d0";
|
||||||
};
|
};
|
||||||
|
|
||||||
# this version has a bug that manifests when doing faust2jack:
|
meta = with stdenv.lib; {
|
||||||
/*version = "0.9.67";*/
|
homepage = http://faust.grame.fr/;
|
||||||
/*name = "faust-${version}";*/
|
downloadPage = http://sourceforge.net/projects/faudiostream/files/;
|
||||||
/*src = fetchurl {*/
|
license = licenses.gpl2;
|
||||||
/*url = "http://downloads.sourceforge.net/project/faudiostream/faust-${version}.zip";*/
|
platforms = platforms.linux;
|
||||||
/*sha256 = "068vl9536zn0j4pknwfcchzi90rx5pk64wbcbd67z32w0csx8xm1";*/
|
maintainers = with maintainers; [ magnetophon pmahoney ];
|
||||||
/*};*/
|
};
|
||||||
|
|
||||||
buildInputs = [ bash unzip faust-compiler gcc makeWrapper pkgconfig ]
|
faust = stdenv.mkDerivation {
|
||||||
++ stdenv.lib.optionals gtkSupport [
|
|
||||||
alsaLib atk cairo fontconfig freetype gdk_pixbuf glib gtk pango
|
|
||||||
]
|
|
||||||
++ stdenv.lib.optional jackaudioSupport jack2
|
|
||||||
;
|
|
||||||
|
|
||||||
makeFlags="PREFIX=$(out)";
|
name = "faust-${version}";
|
||||||
FPATH="$out"; # <- where to search
|
|
||||||
|
|
||||||
phases = [ "unpackPhase installPhase postInstall" ];
|
inherit src;
|
||||||
|
|
||||||
installPhase = ''
|
buildInputs = [ makeWrapper ];
|
||||||
sed -i 23,24d tools/faust2appls/faust2jack
|
|
||||||
mkdir $out/bin
|
|
||||||
install tools/faust2appls/faust2alsaconsole $out/bin
|
|
||||||
install tools/faust2appls/faustpath $out/bin
|
|
||||||
install tools/faust2appls/faustoptflags $out/bin
|
|
||||||
install tools/faust2appls/faust2alsa $out/bin
|
|
||||||
install tools/faust2appls/faust2jack $out/bin
|
|
||||||
|
|
||||||
patchShebangs $out/bin
|
passthru = {
|
||||||
|
inherit wrap wrapWithBuildEnv;
|
||||||
|
};
|
||||||
|
|
||||||
wrapProgram $out/bin/faust2alsaconsole \
|
preConfigure = ''
|
||||||
--prefix PKG_CONFIG_PATH : ${alsaLib}/lib/pkgconfig \
|
makeFlags="$makeFlags prefix=$out"
|
||||||
--set FAUSTLIB ${faust-compiler}/lib/faust \
|
|
||||||
--set FAUSTINC ${faust-compiler}/include/
|
|
||||||
|
|
||||||
GTK_PKGCONFIG_PATHS=${gtk}/lib/pkgconfig:${pango}/lib/pkgconfig:${glib}/lib/pkgconfig:${cairo}/lib/pkgconfig:${gdk_pixbuf}/lib/pkgconfig:${atk}/lib/pkgconfig:${freetype}/lib/pkgconfig:${fontconfig}/lib/pkgconfig
|
# The faust makefiles use 'system ?= $(shell uname -s)' but nix
|
||||||
|
# defines 'system' env var, so undefine that so faust detects the
|
||||||
wrapProgram $out/bin/faust2alsa \
|
# correct system.
|
||||||
--prefix PKG_CONFIG_PATH : ${alsaLib}/lib/pkgconfig:$GTK_PKGCONFIG_PATHS \
|
unset system
|
||||||
--set FAUSTLIB ${faust-compiler}/lib/faust \
|
|
||||||
--set FAUSTINC ${faust-compiler}/include/ \
|
|
||||||
|
|
||||||
|
|
||||||
wrapProgram $out/bin/faust2jack \
|
|
||||||
--prefix PKG_CONFIG_PATH : ${jack2}/lib/pkgconfig:${opencv}/lib/pkgconfig:$GTK_PKGCONFIG_PATHS \
|
|
||||||
--set FAUSTLIB ${faust-compiler}/lib/faust \
|
|
||||||
--set FAUSTINC ${faust-compiler}/include/ \
|
|
||||||
|
|
||||||
''
|
|
||||||
+ stdenv.lib.optionalString (!gtkSupport) "rm $out/bin/faust2alsa"
|
|
||||||
+ stdenv.lib.optionalString (!gtkSupport || !jackaudioSupport) "rm $out/bin/faust2jack"
|
|
||||||
;
|
|
||||||
postInstall = ''
|
|
||||||
sed -e "s@\$FAUST_INSTALL /usr/local /usr /opt /opt/local@${faust-compiler}@g" -i $out/bin/faustpath
|
|
||||||
sed -i "s@/bin/bash@${bash}/bin/bash@g" $out/bin/faustoptflags
|
|
||||||
find $out/bin/ -name "*faust2*" -type f | xargs sed "s@pkg-config@${pkgconfig}/bin/pkg-config@g" -i
|
|
||||||
find $out/bin/ -name "*faust2*" -type f | xargs sed "s@CXX=g++@CXX=${gcc}/bin/g++@g" -i
|
|
||||||
find $out/bin/ -name "*faust2*" -type f | xargs sed "s@faust -i -a @${faust-compiler}/bin/faust -i -a ${faust-compiler}/lib/faust/@g" -i
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
# Remove most faust2appl scripts since they won't run properly
|
||||||
|
# without additional paths setup. See faust.wrap,
|
||||||
|
# faust.wrapWithBuildEnv.
|
||||||
|
postInstall = ''
|
||||||
|
# syntax error when eval'd directly
|
||||||
|
pattern="faust2!(svg)"
|
||||||
|
(shopt -s extglob; rm "$out"/bin/$pattern)
|
||||||
|
'';
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
# Set faustpath explicitly.
|
||||||
|
substituteInPlace "$out"/bin/faustpath \
|
||||||
|
--replace "/usr/local /usr /opt /opt/local" "$out"
|
||||||
|
|
||||||
|
# The 'faustoptflags' is 'source'd into other faust scripts and
|
||||||
|
# not used as an executable, so patch 'uname' usage directly
|
||||||
|
# rather than use makeWrapper.
|
||||||
|
substituteInPlace "$out"/bin/faustoptflags \
|
||||||
|
--replace uname "${coreutils}/bin/uname"
|
||||||
|
|
||||||
|
# wrapper for scripts that don't need faust.wrap*
|
||||||
|
for script in "$out"/bin/faust2*; do
|
||||||
|
wrapProgram "$script" \
|
||||||
|
--prefix PATH : "$out"/bin
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = meta // {
|
||||||
description = "A functional programming language for realtime audio signal processing";
|
description = "A functional programming language for realtime audio signal processing";
|
||||||
longDescription = ''
|
longDescription = ''
|
||||||
FAUST (Functional Audio Stream) is a functional programming
|
FAUST (Functional Audio Stream) is a functional programming
|
||||||
@ -89,12 +87,123 @@ stdenv.mkDerivation rec {
|
|||||||
audio platforms and plugin formats (jack, alsa, ladspa, maxmsp,
|
audio platforms and plugin formats (jack, alsa, ladspa, maxmsp,
|
||||||
puredata, csound, supercollider, pure, vst, coreaudio) without
|
puredata, csound, supercollider, pure, vst, coreaudio) without
|
||||||
any change to the FAUST code.
|
any change to the FAUST code.
|
||||||
'';
|
|
||||||
homepage = http://faust.grame.fr/;
|
|
||||||
downloadPage = http://sourceforge.net/projects/faudiostream/files/;
|
|
||||||
license = licenses.gpl2;
|
|
||||||
platforms = platforms.linux;
|
|
||||||
maintainers = [ maintainers.magnetophon ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
This package has just the compiler, libraries, and headers.
|
||||||
|
Install faust2* for specific faust2appl scripts.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# Default values for faust2appl.
|
||||||
|
faust2ApplBase =
|
||||||
|
{ baseName
|
||||||
|
, dir ? "tools/faust2appls"
|
||||||
|
, scripts ? [ baseName ]
|
||||||
|
, ...
|
||||||
|
}@args:
|
||||||
|
|
||||||
|
args // {
|
||||||
|
name = "${baseName}-${version}";
|
||||||
|
|
||||||
|
inherit src;
|
||||||
|
|
||||||
|
configurePhase = ":";
|
||||||
|
|
||||||
|
buildPhase = ":";
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p "$out/bin"
|
||||||
|
for script in ${concatStringsSep " " scripts}; do
|
||||||
|
cp "${dir}/$script" "$out/bin/"
|
||||||
|
done
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
# For the faust2appl script, change 'faustpath' and
|
||||||
|
# 'faustoptflags' to absolute paths.
|
||||||
|
for script in "$out"/bin/*; do
|
||||||
|
substituteInPlace "$script" \
|
||||||
|
--replace ". faustpath" ". '${faust}/bin/faustpath'" \
|
||||||
|
--replace ". faustoptflags" ". '${faust}/bin/faustoptflags'"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = meta // {
|
||||||
|
description = "The ${baseName} script, part of faust functional programming language for realtime audio signal processing";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Some 'faust2appl' scripts, such as faust2alsa, run faust to
|
||||||
|
# generate cpp code, then invoke the c++ compiler to build the code.
|
||||||
|
# This builder wraps these scripts in parts of the stdenv such that
|
||||||
|
# when the scripts are called outside any nix build, they behave as
|
||||||
|
# if they were running inside a nix build in terms of compilers and
|
||||||
|
# paths being configured (e.g. rpath is set so that compiled
|
||||||
|
# binaries link to the libs inside the nix store)
|
||||||
|
#
|
||||||
|
# The function takes two main args: the appl name (e.g.
|
||||||
|
# 'faust2alsa') and an optional list of propagatedBuildInputs. It
|
||||||
|
# returns a derivation that contains only the bin/${appl} script,
|
||||||
|
# wrapped up so that it will run as if it was inside a nix build
|
||||||
|
# with those build inputs.
|
||||||
|
#
|
||||||
|
# The build input 'faust' is automatically added to the
|
||||||
|
# propagatedBuildInputs.
|
||||||
|
wrapWithBuildEnv =
|
||||||
|
{ baseName
|
||||||
|
, propagatedBuildInputs ? [ ]
|
||||||
|
, ...
|
||||||
|
}@args:
|
||||||
|
|
||||||
|
stdenv.mkDerivation ((faust2ApplBase args) // {
|
||||||
|
|
||||||
|
buildInputs = [ makeWrapper pkgconfig ];
|
||||||
|
|
||||||
|
propagatedBuildInputs = [ faust ] ++ propagatedBuildInputs;
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
|
||||||
|
# export parts of the build environment
|
||||||
|
for script in "$out"/bin/*; do
|
||||||
|
wrapProgram "$script" \
|
||||||
|
--set FAUST_LIB_PATH "${faust}/lib/faust" \
|
||||||
|
--prefix PATH : "$PATH" \
|
||||||
|
--prefix PKG_CONFIG_PATH : "$PKG_CONFIG_PATH" \
|
||||||
|
--set NIX_CFLAGS_COMPILE "\"$NIX_CFLAGS_COMPILE\"" \
|
||||||
|
--set NIX_LDFLAGS "\"$NIX_LDFLAGS\""
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
# Builder for 'faust2appl' scripts, such as faust2firefox that
|
||||||
|
# simply need to be wrapped with some dependencies on PATH.
|
||||||
|
#
|
||||||
|
# The build input 'faust' is automatically added to the PATH.
|
||||||
|
wrap =
|
||||||
|
{ baseName
|
||||||
|
, runtimeInputs ? [ ]
|
||||||
|
, ...
|
||||||
|
}@args:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
runtimePath = concatStringsSep ":" (map (p: "${p}/bin") ([ faust ] ++ runtimeInputs));
|
||||||
|
|
||||||
|
in stdenv.mkDerivation ((faust2ApplBase args) // {
|
||||||
|
|
||||||
|
buildInputs = [ makeWrapper ];
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
for script in "$out"/bin/*; do
|
||||||
|
wrapProgram "$script" --prefix PATH : "${runtimePath}"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
in faust
|
||||||
|
15
pkgs/applications/audio/faust/faust2alqt.nix
Normal file
15
pkgs/applications/audio/faust/faust2alqt.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ faust
|
||||||
|
, alsaLib
|
||||||
|
, qt4
|
||||||
|
}:
|
||||||
|
|
||||||
|
faust.wrapWithBuildEnv {
|
||||||
|
|
||||||
|
baseName = "faust2alqt";
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
alsaLib
|
||||||
|
qt4
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
29
pkgs/applications/audio/faust/faust2alsa.nix
Normal file
29
pkgs/applications/audio/faust/faust2alsa.nix
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{ faust
|
||||||
|
, alsaLib
|
||||||
|
, atk
|
||||||
|
, cairo
|
||||||
|
, fontconfig
|
||||||
|
, freetype
|
||||||
|
, gdk_pixbuf
|
||||||
|
, glib
|
||||||
|
, gtk
|
||||||
|
, pango
|
||||||
|
}:
|
||||||
|
|
||||||
|
faust.wrapWithBuildEnv {
|
||||||
|
|
||||||
|
baseName = "faust2alsa";
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
alsaLib
|
||||||
|
atk
|
||||||
|
cairo
|
||||||
|
fontconfig
|
||||||
|
freetype
|
||||||
|
gdk_pixbuf
|
||||||
|
glib
|
||||||
|
gtk
|
||||||
|
pango
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
20
pkgs/applications/audio/faust/faust2csound.nix
Normal file
20
pkgs/applications/audio/faust/faust2csound.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ faust
|
||||||
|
, csound
|
||||||
|
}:
|
||||||
|
|
||||||
|
faust.wrapWithBuildEnv {
|
||||||
|
|
||||||
|
baseName = "faust2csound";
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
csound
|
||||||
|
];
|
||||||
|
|
||||||
|
# faust2csound generated .cpp files have
|
||||||
|
# #include "csdl.h"
|
||||||
|
# but that file is in the csound/ subdirectory
|
||||||
|
preFixup = ''
|
||||||
|
NIX_CFLAGS_COMPILE="$(printf '%s' "$NIX_CFLAGS_COMPILE" | sed 's%${csound}/include%${csound}/include/csound%')"
|
||||||
|
'';
|
||||||
|
|
||||||
|
}
|
14
pkgs/applications/audio/faust/faust2firefox.nix
Normal file
14
pkgs/applications/audio/faust/faust2firefox.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{ faust
|
||||||
|
, xdg_utils
|
||||||
|
}:
|
||||||
|
|
||||||
|
# This just runs faust2svg, then attempts to open a browser using
|
||||||
|
# 'xdg-open'.
|
||||||
|
|
||||||
|
faust.wrap {
|
||||||
|
|
||||||
|
baseName = "faust2firefox";
|
||||||
|
|
||||||
|
runtimeInputs = [ xdg_utils ];
|
||||||
|
|
||||||
|
}
|
23
pkgs/applications/audio/faust/faust2jack.nix
Normal file
23
pkgs/applications/audio/faust/faust2jack.nix
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{ faust
|
||||||
|
, gtk
|
||||||
|
, jack2
|
||||||
|
, opencv
|
||||||
|
}:
|
||||||
|
|
||||||
|
faust.wrapWithBuildEnv {
|
||||||
|
|
||||||
|
baseName = "faust2jack";
|
||||||
|
|
||||||
|
scripts = [
|
||||||
|
"faust2jack"
|
||||||
|
"faust2jackinternal"
|
||||||
|
"faust2jackconsole"
|
||||||
|
];
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
gtk
|
||||||
|
jack2
|
||||||
|
opencv
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
22
pkgs/applications/audio/faust/faust2jaqt.nix
Normal file
22
pkgs/applications/audio/faust/faust2jaqt.nix
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{ faust
|
||||||
|
, jack2
|
||||||
|
, opencv
|
||||||
|
, qt4
|
||||||
|
}:
|
||||||
|
|
||||||
|
faust.wrapWithBuildEnv {
|
||||||
|
|
||||||
|
baseName = "faust2jaqt";
|
||||||
|
|
||||||
|
scripts = [
|
||||||
|
"faust2jaqt"
|
||||||
|
"faust2jackserver"
|
||||||
|
];
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
jack2
|
||||||
|
opencv
|
||||||
|
qt4
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
11
pkgs/applications/audio/faust/faust2lv2.nix
Normal file
11
pkgs/applications/audio/faust/faust2lv2.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ faust
|
||||||
|
, lv2
|
||||||
|
}:
|
||||||
|
|
||||||
|
faust.wrapWithBuildEnv {
|
||||||
|
|
||||||
|
baseName = "faust2lv2";
|
||||||
|
|
||||||
|
propagatedBuildInputs = [ lv2 ];
|
||||||
|
|
||||||
|
}
|
17
pkgs/applications/audio/gnaural/default.nix
Normal file
17
pkgs/applications/audio/gnaural/default.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{ stdenv, fetchurl, pkgconfig, gtk2, libsndfile, portaudio }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "gnaural-1.0.20110606";
|
||||||
|
buildInputs = [ pkgconfig gtk2 libsndfile portaudio ];
|
||||||
|
src = fetchurl {
|
||||||
|
url = "mirror://sourceforge/gnaural/Gnaural/${name}.tar.gz";
|
||||||
|
sha256 = "0p9rasz1jmxf16vnpj17g3vzdjygcyz3l6nmbq6wr402l61f1vy5";
|
||||||
|
};
|
||||||
|
meta = with stdenv.lib;
|
||||||
|
{ description = "Auditory binaural-beat generator";
|
||||||
|
homepage = http://gnaural.sourceforge.net/;
|
||||||
|
licenses = licenses.gpl2;
|
||||||
|
maintainers = [ maintainers.emery ];
|
||||||
|
platforms = platforms.linux;
|
||||||
|
};
|
||||||
|
}
|
@ -10,11 +10,11 @@
|
|||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
|
|
||||||
name = "kid3-${version}";
|
name = "kid3-${version}";
|
||||||
version = "3.1.1";
|
version = "3.1.2";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "http://downloads.sourceforge.net/project/kid3/kid3/${version}/${name}.tar.gz";
|
url = "http://downloads.sourceforge.net/project/kid3/kid3/${version}/${name}.tar.gz";
|
||||||
sha256 = "0mr617k712zpd99rgsy313jrb6jcjn1malj4lirzqhp7307wsf34";
|
sha256 = "0ik2bxg2im7nwcgi85g2dj148n80mfhks20rsxnzazl7afk9fl08";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = with stdenv.lib;
|
buildInputs = with stdenv.lib;
|
||||||
|
@ -3,11 +3,11 @@
|
|||||||
pythonPackages.buildPythonPackage rec {
|
pythonPackages.buildPythonPackage rec {
|
||||||
name = "mopidy-moped-${version}";
|
name = "mopidy-moped-${version}";
|
||||||
|
|
||||||
version = "0.3.3";
|
version = "0.5.0";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://github.com/martijnboland/moped/archive/v${version}.tar.gz";
|
url = "https://github.com/martijnboland/moped/archive/v${version}.tar.gz";
|
||||||
sha256 = "19f3asqx7wmla53nhrxzdwj6qlkjv2rcwh34jxp27bz7nkhn0ihv";
|
sha256 = "1bkx0c4yi48nxm1vzacdil9scn0ilwkbd1rgiga34p77lcg16qb2";
|
||||||
};
|
};
|
||||||
|
|
||||||
propagatedBuildInputs = [ mopidy ];
|
propagatedBuildInputs = [ mopidy ];
|
||||||
|
@ -3,11 +3,11 @@
|
|||||||
pythonPackages.buildPythonPackage rec {
|
pythonPackages.buildPythonPackage rec {
|
||||||
name = "mopidy-mopify-${version}";
|
name = "mopidy-mopify-${version}";
|
||||||
|
|
||||||
version = "0.1.6";
|
version = "1.4.1";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://github.com/dirkgroenen/mopidy-mopify/archive/${version}.tar.gz";
|
url = "https://github.com/dirkgroenen/mopidy-mopify/archive/${version}.tar.gz";
|
||||||
sha256 = "3581de6b0b42d2ece63bc153dcdba0594fbbeaacf695f2cd1e5d199670d83775";
|
sha256 = "1i752vnkgqfps5vym63rbsh1xm141z8r68d80bi076zr6zbzdjj9";
|
||||||
};
|
};
|
||||||
|
|
||||||
propagatedBuildInputs = [ mopidy ];
|
propagatedBuildInputs = [ mopidy ];
|
||||||
|
@ -3,11 +3,11 @@
|
|||||||
pythonPackages.buildPythonPackage rec {
|
pythonPackages.buildPythonPackage rec {
|
||||||
name = "mopidy-spotify-${version}";
|
name = "mopidy-spotify-${version}";
|
||||||
|
|
||||||
version = "1.2.0";
|
version = "1.3.0";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://github.com/mopidy/mopidy-spotify/archive/v${version}.tar.gz";
|
url = "https://github.com/mopidy/mopidy-spotify/archive/v${version}.tar.gz";
|
||||||
sha256 = "1fgxakylsx0nggis11v6bxfy8h3dl1n1v86liyfcj0xazb1mx69m";
|
sha256 = "0pwgg9xw86sjhv6w735fm0k81v0lv3gqlidgw90hr47hc4wajnzx";
|
||||||
};
|
};
|
||||||
|
|
||||||
propagatedBuildInputs = [ mopidy pythonPackages.pyspotify ];
|
propagatedBuildInputs = [ mopidy pythonPackages.pyspotify ];
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
pythonPackages.buildPythonPackage rec {
|
pythonPackages.buildPythonPackage rec {
|
||||||
name = "mopidy-${version}";
|
name = "mopidy-${version}";
|
||||||
|
|
||||||
version = "0.19.4";
|
version = "1.0.0";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://github.com/mopidy/mopidy/archive/v${version}.tar.gz";
|
url = "https://github.com/mopidy/mopidy/archive/v${version}.tar.gz";
|
||||||
sha256 = "13dyn9pgq0jns6915diizviqyn64yfysb08k77xsmxrr4bhm1156";
|
sha256 = "15cz6mqw8ihqxhlssnbbssl3bi1xxbmq7krf3hv0zmmdj73ilsd6";
|
||||||
};
|
};
|
||||||
|
|
||||||
propagatedBuildInputs = with pythonPackages; [
|
propagatedBuildInputs = with pythonPackages; [
|
||||||
|
35
pkgs/applications/audio/nova-filters/default.nix
Normal file
35
pkgs/applications/audio/nova-filters/default.nix
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{stdenv, fetchurl, scons, boost, ladspaH, pkgconfig }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
version = "0.2-2";
|
||||||
|
name = "nova-filters-${version}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = http://klingt.org/~tim/nova-filters/nova-filters_0.2-2.tar.gz;
|
||||||
|
sha256 = "16064vvl2w5lz4xi3lyjk4xx7fphwsxc14ajykvndiz170q32s6i";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [ scons boost ladspaH pkgconfig ];
|
||||||
|
|
||||||
|
patchPhase = ''
|
||||||
|
# remove TERM:
|
||||||
|
sed -i -e '4d' SConstruct
|
||||||
|
sed -i "s@mfpmath=sse@mfpmath=sse -I ${boost.dev}/include@g" SConstruct
|
||||||
|
sed -i "s@ladspa.h@${ladspaH}/include/ladspa.h@g" filters.cpp
|
||||||
|
sed -i "s/= check/= detail::filter_base<internal_type, checked>::check/" nova/source/dsp/filter.hpp
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
scons
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
scons $sconsFlags "prefix=$out" install
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = http://klingt.org/~tim/nova-filters/;
|
||||||
|
description = "LADSPA plugins based on filters of nova";
|
||||||
|
license = stdenv.lib.licenses.gpl2Plus;
|
||||||
|
};
|
||||||
|
}
|
50
pkgs/applications/audio/sound-juicer/default.nix
Normal file
50
pkgs/applications/audio/sound-juicer/default.nix
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{ stdenv, fetchurl, pkgconfig, gtk3, intltool, itstool, libxml2, brasero
|
||||||
|
, libcanberra_gtk3, gnome3, gst_all_1, libmusicbrainz5, libdiscid, isocodes
|
||||||
|
, makeWrapper }:
|
||||||
|
|
||||||
|
let
|
||||||
|
major = "3.15";
|
||||||
|
minor = "92";
|
||||||
|
GST_PLUGIN_PATH = stdenv.lib.makeSearchPath "lib/gstreamer-1.0" [
|
||||||
|
gst_all_1.gst-plugins-base
|
||||||
|
gst_all_1.gst-plugins-good
|
||||||
|
gst_all_1.gst-plugins-bad
|
||||||
|
gst_all_1.gst-libav ];
|
||||||
|
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
version = "${major}.${minor}";
|
||||||
|
name = "sound-juicer-${version}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "http://download.gnome.org/sources/sound-juicer/${major}/${name}.tar.xz";
|
||||||
|
sha256 = "b1420f267a4c553f6ca242d3b6082b60682c3d7b431ac3c979bd1ccfbf2687dd";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [ pkgconfig gtk3 intltool itstool libxml2 brasero libcanberra_gtk3
|
||||||
|
gnome3.gsettings_desktop_schemas libmusicbrainz5 libdiscid isocodes
|
||||||
|
makeWrapper gnome3.dconf
|
||||||
|
gst_all_1.gstreamer gst_all_1.gst-plugins-base
|
||||||
|
gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad ];
|
||||||
|
|
||||||
|
preFixup = ''
|
||||||
|
for f in $out/bin/* $out/libexec/*; do
|
||||||
|
wrapProgram "$f" \
|
||||||
|
--prefix XDG_DATA_DIRS : "${gnome3.gnome_themes_standard}/share:$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" \
|
||||||
|
--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0" \
|
||||||
|
--prefix GIO_EXTRA_MODULES : "${gnome3.dconf}/lib/gio/modules" \
|
||||||
|
--prefix GST_PLUGIN_PATH : "${GST_PLUGIN_PATH}"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
rm $out/share/icons/hicolor/icon-theme.cache
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with stdenv.lib; {
|
||||||
|
description = "A Gnome CD Ripper";
|
||||||
|
homepage = https://wiki.gnome.org/Apps/SoundJuicer;
|
||||||
|
maintainers = [ maintainers.bdimcheff ];
|
||||||
|
license = licenses.gpl2;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
};
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
{ stdenv, fetchurl, cmake, pkgconfig, attica, boost, gnutls, libechonest
|
{ stdenv, fetchurl, cmake, pkgconfig, attica, boost, gnutls, libechonest
|
||||||
, liblastfm, lucenepp, phonon, phonon_backend_vlc, qca2, qca2_ossl, qjson, qt4
|
, liblastfm, lucenepp, phonon, phonon_backend_vlc, qca2, qjson, qt4
|
||||||
, qtkeychain, quazip, sparsehash, taglib, websocketpp, makeWrapper
|
, qtkeychain, quazip, sparsehash, taglib, websocketpp, makeWrapper
|
||||||
|
|
||||||
, enableXMPP ? true, libjreen ? null
|
, enableXMPP ? true, libjreen ? null
|
||||||
@ -38,7 +38,6 @@ in stdenv.mkDerivation rec {
|
|||||||
postInstall = let
|
postInstall = let
|
||||||
pluginPath = stdenv.lib.concatStringsSep ":" [
|
pluginPath = stdenv.lib.concatStringsSep ":" [
|
||||||
"${phonon_backend_vlc}/lib/kde4/plugins"
|
"${phonon_backend_vlc}/lib/kde4/plugins"
|
||||||
"${qca2_ossl}/lib/qt4/plugins"
|
|
||||||
];
|
];
|
||||||
in ''
|
in ''
|
||||||
for i in "$out"/bin/*; do
|
for i in "$out"/bin/*; do
|
||||||
|
@ -26,15 +26,12 @@ stdenv.mkDerivation rec {
|
|||||||
"--sysconfdir=/etc"
|
"--sysconfdir=/etc"
|
||||||
] ++ stdenv.lib.optional useGTK2 "--with-gtk2";
|
] ++ stdenv.lib.optional useGTK2 "--with-gtk2";
|
||||||
|
|
||||||
installFlags = [ "DESTDIR=\${out}" ];
|
installFlags = [
|
||||||
|
"localstatedir=\${TMPDIR}"
|
||||||
|
"sysconfdir=\${out}/etc"
|
||||||
|
];
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mv $out/$out/* $out
|
|
||||||
DIR=$out/$out
|
|
||||||
while rmdir $DIR 2>/dev/null; do
|
|
||||||
DIR="$(dirname "$DIR")"
|
|
||||||
done
|
|
||||||
|
|
||||||
substituteInPlace "$out/share/xgreeters/lightdm-gtk-greeter.desktop" \
|
substituteInPlace "$out/share/xgreeters/lightdm-gtk-greeter.desktop" \
|
||||||
--replace "Exec=lightdm-gtk-greeter" "Exec=$out/sbin/lightdm-gtk-greeter"
|
--replace "Exec=lightdm-gtk-greeter" "Exec=$out/sbin/lightdm-gtk-greeter"
|
||||||
wrapProgram "$out/sbin/lightdm-gtk-greeter" \
|
wrapProgram "$out/sbin/lightdm-gtk-greeter" \
|
||||||
|
@ -27,16 +27,10 @@ stdenv.mkDerivation rec {
|
|||||||
] ++ stdenv.lib.optional (qt4 != null) "--enable-liblightdm-qt"
|
] ++ stdenv.lib.optional (qt4 != null) "--enable-liblightdm-qt"
|
||||||
++ stdenv.lib.optional (qt5 != null) "--enable-liblightdm-qt5";
|
++ stdenv.lib.optional (qt5 != null) "--enable-liblightdm-qt5";
|
||||||
|
|
||||||
installFlags = [ "DESTDIR=\${out}" ];
|
installFlags = [
|
||||||
|
"sysconfdir=\${out}/etc"
|
||||||
# Correct for the nested nix folder tree
|
"localstatedir=\${TMPDIR}"
|
||||||
postInstall = ''
|
];
|
||||||
mv $out/$out/* $out
|
|
||||||
DIR=$out/$out
|
|
||||||
while rmdir $DIR 2>/dev/null; do
|
|
||||||
DIR="$(dirname "$DIR")"
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
meta = with stdenv.lib; {
|
||||||
homepage = http://launchpad.net/lightdm;
|
homepage = http://launchpad.net/lightdm;
|
||||||
|
@ -1,26 +1,61 @@
|
|||||||
{stdenv, fetchgit
|
{ stdenv, fetchurl, fetchgit
|
||||||
, autoconf, automake, pkgconfig, shared_mime_info, intltool
|
, autoconf, automake, pkgconfig, shared_mime_info, intltool
|
||||||
, glib, mono, gtk-sharp, gnome-sharp
|
, glib, mono, gtk-sharp, gnome, gnome-sharp, unzip
|
||||||
}:
|
}:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
version = "5.1.4.0";
|
version = "5.7.0.660";
|
||||||
revision = "7d45bbe2ee22625f125d0c52548524f02d005cca";
|
revision = "6a74f9bdb90d9415b597064d815c9be38b401fee";
|
||||||
name = "monodevelop-${version}";
|
name = "monodevelop-${version}";
|
||||||
src = fetchgit {
|
|
||||||
url = https://github.com/mono/monodevelop.git;
|
srcs = [
|
||||||
rev = revision;
|
(fetchurl {
|
||||||
sha256 = "0qy12zdvb0jiic3pq1w9mcsz2wwxrn0m92abd184q06yg5m48g1b";
|
url = "http://download.mono-project.com/sources/monodevelop/${name}.tar.bz2";
|
||||||
};
|
sha256 = "0i9fpjkcys991dhxh02zf9imar3aj6fldk9ymy09vmr10f4d7vbf";
|
||||||
|
})
|
||||||
|
(fetchurl {
|
||||||
|
url = "https://launchpadlibrarian.net/153448659/NUnit-2.6.3.zip";
|
||||||
|
sha256 = "0vzbziq44zy7fyyhb44mf9ypfi7gvs17rxpg8c9d9lvvdpkshhcp";
|
||||||
|
})
|
||||||
|
(fetchurl {
|
||||||
|
url = "https://launchpadlibrarian.net/68057829/NUnit-2.5.10.11092.zip";
|
||||||
|
sha256 = "0k5h5bz1p2v3d0w0hpkpbpvdkcszgp8sr9ik498r1bs72w5qlwnc";
|
||||||
|
})
|
||||||
|
(fetchgit {
|
||||||
|
url = "https://github.com/mono/nuget-binary.git";
|
||||||
|
rev = "ecb27dd49384d70b6c861d28763906f2b25b7c8";
|
||||||
|
sha256 = "0dj0yglgwn07xw2crr66vl0vcgnr6m041pynyq0kdd0z8nlp92ki";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
sourceRoot = "monodevelop-5.7";
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
# From https://bugzilla.xamarin.com/show_bug.cgi?id=23696#c19
|
||||||
|
|
||||||
|
# it seems parts of MonoDevelop 5.2+ need NUnit 2.6.4, which isn't included
|
||||||
|
# (?), so download it and put it in the right place in the tree
|
||||||
|
mkdir -v -p packages/NUnit.2.6.3/lib
|
||||||
|
cp -vfR ../NUnit-2.6.3/bin/framework/* packages/NUnit.2.6.3/lib
|
||||||
|
mkdir -v -p packages/NUnit.Runners.2.6.3/tools/lib
|
||||||
|
cp -vfR ../NUnit-2.6.3/bin/lib/* packages/NUnit.Runners.2.6.3/tools/lib
|
||||||
|
|
||||||
|
# cecil needs NUnit 2.5.10 - this is also missing from the tar
|
||||||
|
cp -vfR ../NUnit-2.5.10.11092/bin/net-2.0/framework/* external/cecil/Test/libs/nunit-2.5.10
|
||||||
|
|
||||||
|
# the tar doesn't include the nuget binary, so grab it from github and copy it
|
||||||
|
# into the right place
|
||||||
|
cp -vfR ../nuget-binary-*/* external/nuget-binary/
|
||||||
|
'';
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
autoconf automake pkgconfig shared_mime_info intltool
|
autoconf automake pkgconfig shared_mime_info intltool
|
||||||
mono gtk-sharp gnome-sharp
|
mono gtk-sharp gnome-sharp unzip
|
||||||
];
|
];
|
||||||
|
|
||||||
preConfigure = "patchShebangs ./configure";
|
preConfigure = "patchShebangs ./configure";
|
||||||
preBuild = ''
|
preBuild = ''
|
||||||
cat > ./main/buildinfo <<EOF
|
cat > ./buildinfo <<EOF
|
||||||
Release ID: ${version}
|
Release ID: ${version}
|
||||||
Git revision: ${revision}
|
Git revision: ${revision}
|
||||||
Build date: 1970-01-01 00:00:01
|
Build date: 1970-01-01 00:00:01
|
||||||
@ -31,9 +66,9 @@ stdenv.mkDerivation rec {
|
|||||||
for prog in monodevelop mdtool; do
|
for prog in monodevelop mdtool; do
|
||||||
patch -p 0 $out/bin/$prog <<EOF
|
patch -p 0 $out/bin/$prog <<EOF
|
||||||
2a3,5
|
2a3,5
|
||||||
> export MONO_GAC_PREFIX=${gtk-sharp}:\$MONO_GAC_PREFIX
|
> export MONO_GAC_PREFIX=${gnome-sharp}:${gtk-sharp}:\$MONO_GAC_PREFIX
|
||||||
> export PATH=${mono}/bin:\$PATH
|
> export PATH=${mono}/bin:\$PATH
|
||||||
> export LD_LIBRARY_PATH=${glib}/lib:${gnome-sharp}/lib:${gtk-sharp}/lib:${gtk-sharp.gtk}/lib:\$LD_LIBRARY_PATH
|
> export LD_LIBRARY_PATH=${glib}/lib:${gnome.libgnomeui}/lib:${gnome.gnome_vfs}/lib:${gnome-sharp}/lib:${gtk-sharp}/lib:${gtk-sharp.gtk}/lib:\$LD_LIBRARY_PATH
|
||||||
>
|
>
|
||||||
EOF
|
EOF
|
||||||
done
|
done
|
||||||
@ -43,5 +78,6 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
meta = with stdenv.lib; {
|
meta = with stdenv.lib; {
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
|
maintainers = with maintainers; [ obadz ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
|
assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
|
||||||
|
|
||||||
let
|
let
|
||||||
build = "3065";
|
build = "3083";
|
||||||
libPath = stdenv.lib.makeLibraryPath [glib xlibs.libX11 gtk cairo pango];
|
libPath = stdenv.lib.makeLibraryPath [glib xlibs.libX11 gtk cairo pango];
|
||||||
in let
|
in let
|
||||||
# package with just the binaries
|
# package with just the binaries
|
||||||
@ -13,15 +13,15 @@ in let
|
|||||||
src =
|
src =
|
||||||
if stdenv.system == "i686-linux" then
|
if stdenv.system == "i686-linux" then
|
||||||
fetchurl {
|
fetchurl {
|
||||||
name = "sublimetext-3.0.65.tar.bz2";
|
name = "sublimetext-3.0.83.tar.bz2";
|
||||||
url = "http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_${build}_x32.tar.bz2";
|
url = "http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_${build}_x32.tar.bz2";
|
||||||
sha256 = "e25f84fe0d0c02ce71274d334fd42ce6313adcd4ec1d588b165d25f5e93ad78d";
|
sha256 = "0r9irk2gdwdx0dk7lgssr4krfvf3lf71pzaz5hyjc704zaxf5s49";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fetchurl {
|
fetchurl {
|
||||||
name = "sublimetext-3.0.65.tar.bz2";
|
name = "sublimetext-3.0.83.tar.bz2";
|
||||||
url = "http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_${build}_x64.tar.bz2";
|
url = "http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_${build}_x64.tar.bz2";
|
||||||
sha256 = "fe548e6d86d72cd7e90eee9d5396b590ae6e8f8b0dfc661d86c814214e60faea";
|
sha256 = "1vhlrqz7xscmjnxpz60mdpvflanl26d7673ml7psd75n0zvcfra5";
|
||||||
};
|
};
|
||||||
|
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ stdenv, fetchurl, qt4, popplerQt4, zlib, pkgconfig, poppler}:
|
{ stdenv, fetchurl, qt4, poppler_qt4, zlib, pkgconfig, poppler}:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "texmaker";
|
pname = "texmaker";
|
||||||
@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
|
|||||||
sha256 = "1h5rxdq6f05wk3lnlw96fxwrb14k77cx1mwy648127h2c8nsgw4z";
|
sha256 = "1h5rxdq6f05wk3lnlw96fxwrb14k77cx1mwy648127h2c8nsgw4z";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [ qt4 popplerQt4 zlib ];
|
buildInputs = [ qt4 poppler_qt4 zlib ];
|
||||||
|
|
||||||
nativeBuildInputs = [ pkgconfig poppler ];
|
nativeBuildInputs = [ pkgconfig poppler ];
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ stdenv, fetchurl, qt4, popplerQt4, zlib}:
|
{ stdenv, fetchurl, qt4, poppler_qt4, zlib}:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "texstudio";
|
pname = "texstudio";
|
||||||
@ -11,10 +11,10 @@ stdenv.mkDerivation rec {
|
|||||||
sha256 = "167d78nfk265jjvl129nr70v8ladb2rav2qyhw7ngr6m54gak831";
|
sha256 = "167d78nfk265jjvl129nr70v8ladb2rav2qyhw7ngr6m54gak831";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [ qt4 popplerQt4 zlib ];
|
buildInputs = [ qt4 poppler_qt4 zlib ];
|
||||||
|
|
||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I$(echo ${popplerQt4}/include/poppler/qt4) "
|
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I$(echo ${poppler_qt4}/include/poppler/qt4) "
|
||||||
qmake PREFIX=$out texstudio.pro
|
qmake PREFIX=$out texstudio.pro
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
|
|||||||
(mkEnable (libcl != null) "opencl")
|
(mkEnable (libcl != null) "opencl")
|
||||||
(mkWith true "modules")
|
(mkWith true "modules")
|
||||||
(mkWith true "gcc-arch=${arch}")
|
(mkWith true "gcc-arch=${arch}")
|
||||||
(mkEnable true "hdri")
|
#(mkEnable true "hdri") This breaks some dependencies
|
||||||
(mkWith (perl != null) "perl")
|
(mkWith (perl != null) "perl")
|
||||||
(mkWith (jemalloc != null) "jemalloc")
|
(mkWith (jemalloc != null) "jemalloc")
|
||||||
(mkWith true "frozenpaths")
|
(mkWith true "frozenpaths")
|
||||||
@ -79,6 +79,18 @@ stdenv.mkDerivation rec {
|
|||||||
libxml2
|
libxml2
|
||||||
];
|
];
|
||||||
|
|
||||||
|
propagatedBuildInputs = []
|
||||||
|
++ (stdenv.lib.optional (lcms2 != null) lcms2)
|
||||||
|
++ (stdenv.lib.optional (liblqr1 != null) liblqr1)
|
||||||
|
++ (stdenv.lib.optional (fftw != null) fftw)
|
||||||
|
++ (stdenv.lib.optional (libtool != null) libtool)
|
||||||
|
++ (stdenv.lib.optional (jemalloc != null) jemalloc)
|
||||||
|
++ (stdenv.lib.optional (libXext != null) libXext)
|
||||||
|
++ (stdenv.lib.optional (libX11 != null) libX11)
|
||||||
|
++ (stdenv.lib.optional (libXt != null) libXt)
|
||||||
|
++ (stdenv.lib.optional (bzip2 != null) bzip2)
|
||||||
|
;
|
||||||
|
|
||||||
postInstall = ''(cd "$out/include" && ln -s ImageMagick* ImageMagick)'';
|
postInstall = ''(cd "$out/include" && ln -s ImageMagick* ImageMagick)'';
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
meta = with stdenv.lib; {
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
{stdenv, fetchurl, fetchurlGnome, gtk, pkgconfig, perl, perlXMLParser, libxml2, gettext
|
{stdenv, fetchurl, gtk, pkgconfig, perl, perlXMLParser, libxml2, gettext
|
||||||
, python, libxml2Python, docbook5, docbook_xsl, libxslt, intltool, libart_lgpl
|
, python, libxml2Python, docbook5, docbook_xsl, libxslt, intltool, libart_lgpl
|
||||||
, withGNOME ? false, libgnomeui }:
|
, withGNOME ? false, libgnomeui }:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = src.pkgname;
|
name = "dia-${minVer}.3";
|
||||||
|
minVer = "0.97";
|
||||||
|
|
||||||
src = fetchurlGnome {
|
src = fetchurl {
|
||||||
project = "dia";
|
url = "mirror://gnome/sources/dia/${minVer}/${name}.tar.xz";
|
||||||
major = "0"; minor = "97"; patchlevel = "3"; extension = "xz";
|
|
||||||
sha256 = "0d3x6w0l6fwd0l8xx06y1h56xf8ss31yzia3a6xr9y28xx44x492";
|
sha256 = "0d3x6w0l6fwd0l8xx06y1h56xf8ss31yzia3a6xr9y28xx44x492";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
buildInputs = [ qt4 kdelibs phonon qimageblitz qca2 eigen lcms libjpeg libtiff
|
buildInputs = [ qt4 kdelibs phonon qimageblitz qca2 eigen lcms libjpeg libtiff
|
||||||
jasper libgphoto2 kdepimlibs gettext soprano liblqr1 lensfun qjson libkdcraw
|
jasper libgphoto2 kdepimlibs gettext soprano liblqr1 lensfun qjson libkdcraw
|
||||||
opencv libkexiv2 libkipi boost shared_desktop_ontologies marble mysql ];
|
opencv libkexiv2 libkipi boost shared_desktop_ontologies marble mysql.lib ];
|
||||||
|
|
||||||
# Make digikam find some FindXXXX.cmake
|
# Make digikam find some FindXXXX.cmake
|
||||||
KDEDIRS="${marble}:${qjson}";
|
KDEDIRS="${marble}:${qjson}";
|
||||||
|
@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
|
|||||||
buildInputs = [
|
buildInputs = [
|
||||||
boost eigen gettext jasper kdelibs kdepimlibs lcms lensfun
|
boost eigen gettext jasper kdelibs kdepimlibs lcms lensfun
|
||||||
libgphoto2 libjpeg libkdcraw libkexiv2 libkipi liblqr1 libpgf
|
libgphoto2 libjpeg libkdcraw libkexiv2 libkipi liblqr1 libpgf
|
||||||
libtiff marble mysql opencv phonon qca2 qimageblitz qjson qt4
|
libtiff marble mysql.lib opencv phonon qca2 qimageblitz qjson qt4
|
||||||
shared_desktop_ontologies soprano
|
shared_desktop_ontologies soprano
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -28,12 +28,13 @@ stdenv.mkDerivation rec {
|
|||||||
#configureFlags = [ "--disable-print" ];
|
#configureFlags = [ "--disable-print" ];
|
||||||
|
|
||||||
# "screenshot" needs this.
|
# "screenshot" needs this.
|
||||||
NIX_LDFLAGS = "-rpath ${xlibs.libX11}/lib";
|
NIX_LDFLAGS = "-rpath ${xlibs.libX11}/lib"
|
||||||
|
+ stdenv.lib.optionalString stdenv.isDarwin " -lintl";
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "The GNU Image Manipulation Program";
|
description = "The GNU Image Manipulation Program";
|
||||||
homepage = http://www.gimp.org/;
|
homepage = http://www.gimp.org/;
|
||||||
license = stdenv.lib.licenses.gpl3Plus;
|
license = stdenv.lib.licenses.gpl3Plus;
|
||||||
platforms = stdenv.lib.platforms.linux;
|
platforms = stdenv.lib.platforms.unix;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,33 +1,32 @@
|
|||||||
{ stdenv, fetchurl, xulrunner }:
|
{ stdenv, fetchurl, xulrunner }:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "pencil-2.0.5";
|
version = "2.0.8";
|
||||||
|
name = "pencil-${version}";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "http://evoluspencil.googlecode.com/files/${name}.tar.gz";
|
url = "https://github.com/prikhi/pencil/releases/download/v${version}/Pencil-${version}-linux-pkg.tar.gz";
|
||||||
sha256 = "0rn5nb08p8wph5s5gajkil6y06zgrm86p4gnjdgv76czx1fqazm0";
|
sha256 = "3426d0222b213649e448b06384556718c833667394f442682ff66da3cda1b881";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Pre-built package
|
buildPhase = "";
|
||||||
buildPhase = "true";
|
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p "$out"
|
mkdir -p "$out"
|
||||||
cp -r usr/* "$out"
|
cp -r usr/* "$out"
|
||||||
cp COPYING "$out/share/pencil"
|
|
||||||
sed -e "s|/usr/bin/xulrunner|${xulrunner}/bin/xulrunner|" \
|
sed -e "s|/usr/bin/xulrunner|${xulrunner}/bin/xulrunner|" \
|
||||||
-e "s|/usr/share/pencil|$out/share/pencil|" \
|
-e "s|/usr/share/evolus-pencil|$out/share/evolus-pencil|" \
|
||||||
-i "$out/bin/pencil"
|
-i "$out/bin/pencil"
|
||||||
sed -e "s|/usr/bin/pencil|$out/bin/pencil|" \
|
sed -e "s|/usr/bin/pencil|$out/bin/pencil|" \
|
||||||
-e "s|Icon=.*|Icon=$out/share/pencil/skin/classic/icon.svg|" \
|
-e "s|Icon=.*|Icon=$out/share/evolus-pencil/skin/classic/icon.svg|" \
|
||||||
-i "$out/share/applications/pencil.desktop"
|
-i "$out/share/applications/pencil.desktop"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
meta = with stdenv.lib; {
|
||||||
description = "GUI prototyping/mockup tool";
|
description = "GUI prototyping/mockup tool";
|
||||||
homepage = http://pencil.evolus.vn/;
|
homepage = http://github.com/prikhi/pencil;
|
||||||
license = licenses.gpl2; # Commercial license is also available
|
license = licenses.gpl2; # Commercial license is also available
|
||||||
maintainers = [ maintainers.bjornfor ];
|
maintainers = with maintainers; [ bjornfor prikhi ];
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
40
pkgs/applications/graphics/simple-scan/default.nix
Normal file
40
pkgs/applications/graphics/simple-scan/default.nix
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{ stdenv, fetchurl, cairo, colord, glib, gtk3, intltool, itstool, libxml2
|
||||||
|
, makeWrapper, pkgconfig, saneBackends, systemd, vala }:
|
||||||
|
|
||||||
|
let version = "3.16.0.1"; in
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "simple-scan-${version}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
sha256 = "0p1knmbrdwrnjjk5x0szh3ja2lfamaaynj2ai92zgci2ma5xh2ma";
|
||||||
|
url = "https://launchpad.net/simple-scan/3.16/${version}/+download/${name}.tar.xz";
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = with stdenv.lib; {
|
||||||
|
description = "Simple scanning utility";
|
||||||
|
longDescription = ''
|
||||||
|
A really easy way to scan both documents and photos. You can crop out the
|
||||||
|
bad parts of a photo and rotate it if it is the wrong way round. You can
|
||||||
|
print your scans, export them to pdf, or save them in a range of image
|
||||||
|
formats. Basically a frontend for SANE - which is the same backend as
|
||||||
|
XSANE uses. This means that all existing scanners will work and the
|
||||||
|
interface is well tested.
|
||||||
|
'';
|
||||||
|
homepage = https://launchpad.net/simple-scan;
|
||||||
|
license = with licenses; gpl3Plus;
|
||||||
|
platforms = with platforms; linux;
|
||||||
|
maintainers = with maintainers; [ nckx ];
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [ cairo colord glib gtk3 intltool itstool libxml2 makeWrapper
|
||||||
|
pkgconfig saneBackends systemd vala ];
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
|
||||||
|
preFixup = ''
|
||||||
|
wrapProgram "$out/bin/simple-scan" \
|
||||||
|
--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
|
||||||
|
'';
|
||||||
|
}
|
@ -107,7 +107,7 @@ let
|
|||||||
OggVorbis = libvorbis;
|
OggVorbis = libvorbis;
|
||||||
OpenAL = openal;
|
OpenAL = openal;
|
||||||
OpenEXR = openexr;
|
OpenEXR = openexr;
|
||||||
Poppler = poppler.poppler_qt4;
|
Poppler = poppler_qt4;
|
||||||
Prison = prison;
|
Prison = prison;
|
||||||
PulseAudio = pulseaudio;
|
PulseAudio = pulseaudio;
|
||||||
PythonLibrary = python;
|
PythonLibrary = python;
|
||||||
|
@ -10,11 +10,11 @@
|
|||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "blender-2.73a";
|
name = "blender-2.74";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "http://download.blender.org/source/${name}.tar.gz";
|
url = "http://download.blender.org/source/${name}.tar.gz";
|
||||||
sha256 = "114ipidrja6ryi6wv0w55wmh10ikazy24r8js596g7b9fpkzpymc";
|
sha256 = "178i19pz7jl79b4wn92869j6qymawsa0kaw1dxaprbjnqsvcx8qc";
|
||||||
};
|
};
|
||||||
|
|
||||||
patches = [ ./sm52.patch ];
|
patches = [ ./sm52.patch ];
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
{ stdenv, cmake, fetchurl, pkgconfig, qt4, zlib, bzip2 }:
|
{ stdenv, cmake, fetchurl, pkgconfig, qt4, zlib, bzip2 }:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "doomseeker-0.12.2b";
|
name = "doomseeker-1.0";
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "http://doomseeker.drdteam.org/files/${name}_src.tar.bz2";
|
url = "http://doomseeker.drdteam.org/files/${name}_src.tar.bz2";
|
||||||
sha256 = "1bcrxc3g9c6b4d8dbm2rx0ldxkqc5fc91jndkwiaykf8hajm0jnr";
|
sha256 = "172ybxg720r64hp6aah0hqvxklqv1cf8v7kwx0ng5ap0h20jydbw";
|
||||||
};
|
};
|
||||||
|
|
||||||
cmakeFlags = ''
|
cmakeFlags = ''
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
{ stdenv, fetchurl, buildPythonPackage, pythonPackages, slowaes }:
|
{ stdenv, fetchurl, buildPythonPackage, pythonPackages, slowaes }:
|
||||||
|
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
namePrefix = "";
|
|
||||||
name = "electrum-${version}";
|
name = "electrum-${version}";
|
||||||
version = "2.0.3";
|
version = "2.0.4";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://download.electrum.org/Electrum-${version}.tar.gz";
|
url = "https://download.electrum.org/Electrum-${version}.tar.gz";
|
||||||
sha256 = "1kzrbnkl5jps0kf0420vzpiqjk3v1jxvlrxwhc0f58xbqyc7l4mj";
|
sha256 = "0q9vrrzy2iypfg2zvs3glzvqyq65dnwn1ijljvfqfwrkpvpp0zxp";
|
||||||
};
|
};
|
||||||
|
|
||||||
propagatedBuildInputs = with pythonPackages; [
|
propagatedBuildInputs = with pythonPackages; [
|
||||||
@ -24,16 +23,21 @@ buildPythonPackage rec {
|
|||||||
tlslite
|
tlslite
|
||||||
];
|
];
|
||||||
|
|
||||||
postPatch = ''
|
preInstall = ''
|
||||||
mkdir -p $out/share
|
mkdir -p $out/share
|
||||||
sed -i 's@usr_share = .*@usr_share = os.getenv("out")+"/share"@' setup.py
|
sed -i 's@usr_share = .*@usr_share = os.getenv("out")+"/share"@' setup.py
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = {
|
meta = with stdenv.lib; {
|
||||||
description = "Bitcoin thin-wallet";
|
description = "Bitcoin thin-client";
|
||||||
long-description = "Electrum is an easy to use Bitcoin client. It protects you from losing coins in a backup mistake or computer failure, because your wallet can be recovered from a secret phrase that you can write on paper or learn by heart. There is no waiting time when you start the client, because it does not download the Bitcoin blockchain.";
|
longDescription = ''
|
||||||
homepage = "https://electrum.org";
|
An easy-to-use Bitcoin client featuring wallets generated from
|
||||||
license = stdenv.lib.licenses.gpl3;
|
mnemonic seeds (in addition to other, more advanced, wallet options)
|
||||||
maintainers = [ "emery@vfemail.net" stdenv.lib.maintainers.joachifm ];
|
and the ability to perform transactions without downloading a copy
|
||||||
|
of the blockchain.
|
||||||
|
'';
|
||||||
|
homepage = https://electrum.org;
|
||||||
|
license = licenses.gpl3;
|
||||||
|
maintainers = with maintainers; [ emery joachifm ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
{stdenv, fetchgit, bzip2, qt4, libX11}:
|
{stdenv, fetchgit, bzip2, qt4, libX11}:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "evopedia-0.4.2";
|
name = "evopedia-${version}";
|
||||||
|
version = "0.4.4";
|
||||||
|
|
||||||
src = fetchgit {
|
src = fetchgit {
|
||||||
url = git://gitorious.org/evopedia/evopedia.git;
|
url = https://github.com/evopedia/evopedia_qt;
|
||||||
rev = "v0.4.2" ;
|
rev = "refs/tags/v${version}";
|
||||||
md5 = "a2f19ed6e4d936c28cee28d44387b682";
|
sha256 = "1biq9zaj8nhxx1pixidsn97iwp9qy1yslgl0znpa4d4p35jcg48g";
|
||||||
};
|
};
|
||||||
|
|
||||||
configurePhase = ''
|
configurePhase = ''
|
||||||
@ -19,7 +20,7 @@ stdenv.mkDerivation rec {
|
|||||||
description = "Offline Wikipedia Viewer";
|
description = "Offline Wikipedia Viewer";
|
||||||
homepage = http://www.evopedia.info;
|
homepage = http://www.evopedia.info;
|
||||||
license = stdenv.lib.licenses.gpl3Plus;
|
license = stdenv.lib.licenses.gpl3Plus;
|
||||||
maintainers = with stdenv.lib.maintainers; [viric];
|
maintainers = with stdenv.lib.maintainers; [ qknight ];
|
||||||
platforms = with stdenv.lib.platforms; linux;
|
platforms = with stdenv.lib.platforms; linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user