This commit is contained in:
Alexander Krupenkin 2018-04-08 10:08:17 +03:00
commit 27f20884b5
No known key found for this signature in database
GPG Key ID: 0D0A7FA67911873E
679 changed files with 18549 additions and 12513 deletions

View File

@ -12,12 +12,12 @@ build daemon as so-called channels. To get channel information via git, add
``` ```
For stability and maximum binary package support, it is recommended to maintain For stability and maximum binary package support, it is recommended to maintain
custom changes on top of one of the channels, e.g. `nixos-17.09` for the latest custom changes on top of one of the channels, e.g. `nixos-18.03` for the latest
release and `nixos-unstable` for the latest successful build of master: release and `nixos-unstable` for the latest successful build of master:
``` ```
% git remote update channels % git remote update channels
% git rebase channels/nixos-17.09 % git rebase channels/nixos-18.03
``` ```
For pull-requests, please rebase onto nixpkgs `master`. For pull-requests, please rebase onto nixpkgs `master`.
@ -31,9 +31,9 @@ For pull-requests, please rebase onto nixpkgs `master`.
* [Manual (NixOS)](https://nixos.org/nixos/manual/) * [Manual (NixOS)](https://nixos.org/nixos/manual/)
* [Community maintained wiki](https://nixos.wiki/) * [Community maintained wiki](https://nixos.wiki/)
* [Continuous package builds for unstable/master](https://hydra.nixos.org/jobset/nixos/trunk-combined) * [Continuous package builds for unstable/master](https://hydra.nixos.org/jobset/nixos/trunk-combined)
* [Continuous package builds for 17.09 release](https://hydra.nixos.org/jobset/nixos/release-17.09) * [Continuous package builds for 18.03 release](https://hydra.nixos.org/jobset/nixos/release-18.03)
* [Tests for unstable/master](https://hydra.nixos.org/job/nixos/trunk-combined/tested#tabs-constituents) * [Tests for unstable/master](https://hydra.nixos.org/job/nixos/trunk-combined/tested#tabs-constituents)
* [Tests for 17.09 release](https://hydra.nixos.org/job/nixos/release-17.09/tested#tabs-constituents) * [Tests for 18.03 release](https://hydra.nixos.org/job/nixos/release-18.03/tested#tabs-constituents)
Communication: Communication:

View File

@ -25,13 +25,6 @@ out/html/index.html: manual-full.xml style.css highlightjs
./manual-full.xml ./manual-full.xml
mkdir -p out/html/highlightjs/ mkdir -p out/html/highlightjs/
echo "document.onreadystatechange = function () { \
var listings = document.querySelectorAll('.programlisting, .screen'); \
for (i = 0; i < listings.length; ++i) { \
hljs.highlightBlock(listings[i]); \
} \
} " > out/html/highlightjs/loader.js
cp -r highlightjs out/html/ cp -r highlightjs out/html/
cp ./overrides.css out/html/ cp ./overrides.css out/html/
@ -63,6 +56,7 @@ highlightjs:
cp -r "$$HIGHLIGHTJS/highlight.pack.js" highlightjs/ cp -r "$$HIGHLIGHTJS/highlight.pack.js" highlightjs/
cp -r "$$HIGHLIGHTJS/LICENSE" highlightjs/ cp -r "$$HIGHLIGHTJS/LICENSE" highlightjs/
cp -r "$$HIGHLIGHTJS/mono-blue.css" highlightjs/ cp -r "$$HIGHLIGHTJS/mono-blue.css" highlightjs/
cp -r "$$HIGHLIGHTJS/loader.js" highlightjs/
manual-full.xml: ${MD_TARGETS} .version *.xml manual-full.xml: ${MD_TARGETS} .version *.xml

View File

@ -221,16 +221,69 @@
<para> <para>
All generators follow a similar call interface: <code>generatorName All generators follow a similar call interface: <code>generatorName
configFunctions data</code>, where <literal>configFunctions</literal> is a configFunctions data</code>, where <literal>configFunctions</literal> is
set of user-defined functions that format variable parts of the content. an attrset of user-defined functions that format nested parts of the
content.
They each have common defaults, so often they do not need to be set They each have common defaults, so often they do not need to be set
manually. An example is <code>mkSectionName ? (name: libStr.escape [ "[" "]" manually. An example is <code>mkSectionName ? (name: libStr.escape [ "[" "]"
] name)</code> from the <literal>INI</literal> generator. It gets the name ] name)</code> from the <literal>INI</literal> generator. It receives the
of a section and returns a sanitized name. The default name of a section and sanitizes it. The default
<literal>mkSectionName</literal> escapes <literal>[</literal> and <literal>mkSectionName</literal> escapes <literal>[</literal> and
<literal>]</literal> with a backslash. <literal>]</literal> with a backslash.
</para> </para>
<para>
Generators can be fine-tuned to produce exactly the file format required
by your application/service. One example is an INI-file format which uses
<literal>: </literal> as separator, the strings
<literal>"yes"</literal>/<literal>"no"</literal> as boolean values
and requires all string values to be quoted:
</para>
<programlisting>
with lib;
let
customToINI = generators.toINI {
# specifies how to format a key/value pair
mkKeyValue = generators.mkKeyValueDefault {
# specifies the generated string for a subset of nix values
mkValueString = v:
if v == true then ''"yes"''
else if v == false then ''"no"''
else if isString v then ''"${v}"''
# and delegats all other values to the default generator
else generators.mkValueStringDefault {} v;
} ":";
};
# the INI file can now be given as plain old nix values
in customToINI {
main = {
pushinfo = true;
autopush = false;
host = "localhost";
port = 42;
};
mergetool = {
merge = "diff3";
};
}
</programlisting>
<para>This will produce the following INI file as nix string:</para>
<programlisting>
[main]
autopush:"no"
host:"localhost"
port:42
pushinfo:"yes"
str\:ange:"very::strange"
[mergetool]
merge:"diff3"
</programlisting>
<note><para>Nix store paths can be converted to strings by enclosing a <note><para>Nix store paths can be converted to strings by enclosing a
derivation attribute like so: <code>"${drv}"</code>.</para></note> derivation attribute like so: <code>"${drv}"</code>.</para></note>

View File

@ -62,16 +62,7 @@ depending on the JDK at runtime.</para>
<para>It is possible to use a different Java compiler than <para>It is possible to use a different Java compiler than
<command>javac</command> from the OpenJDK. For instance, to use the <command>javac</command> from the OpenJDK. For instance, to use the
Eclipse Java Compiler: GNU Java Compiler:
<programlisting>
buildInputs = [ jre ant ecj ];
</programlisting>
(Note that here you dont need the full JDK as an input, but just the
JRE.) The ECJ has a stdenv setup hook that sets some environment
variables to cause Ant to use ECJ, but this doesnt work with all Ant
files. Similarly, you can use the GNU Java Compiler:
<programlisting> <programlisting>
buildInputs = [ gcj ant ]; buildInputs = [ gcj ant ];

View File

@ -16,6 +16,12 @@ cargo
into the `environment.systemPackages` or bring them into into the `environment.systemPackages` or bring them into
scope with `nix-shell -p rustc cargo`. scope with `nix-shell -p rustc cargo`.
> If you are using NixOS and you want to use rust without a nix expression you
> probably want to add the following in your `configuration.nix` to build
> crates with C dependencies.
>
> environment.systemPackages = [binutils gcc gnumake openssl pkgconfig]
For daily builds (beta and nightly) use either rustup from For daily builds (beta and nightly) use either rustup from
nixpkgs or use the [Rust nightlies nixpkgs or use the [Rust nightlies
overlay](#using-the-rust-nightlies-overlay). overlay](#using-the-rust-nightlies-overlay).
@ -76,7 +82,7 @@ an example for a minimal `hello` crate:
Compiling hello v0.1.0 (file:///tmp/hello) Compiling hello v0.1.0 (file:///tmp/hello)
Finished dev [unoptimized + debuginfo] target(s) in 0.20 secs Finished dev [unoptimized + debuginfo] target(s) in 0.20 secs
$ carnix -o hello.nix --src ./. Cargo.lock --standalone $ carnix -o hello.nix --src ./. Cargo.lock --standalone
$ nix-build hello.nix $ nix-build hello.nix -A hello_0_1_0
Now, the file produced by the call to `carnix`, called `hello.nix`, looks like: Now, the file produced by the call to `carnix`, called `hello.nix`, looks like:
@ -276,6 +282,84 @@ features, we would write:
Where `diesel.nix` is the file generated by Carnix, as explained above. Where `diesel.nix` is the file generated by Carnix, as explained above.
## Setting Up `nix-shell`
Oftentimes you want to develop code from within `nix-shell`. Unfortunately
`buildRustCrate` does not support common `nix-shell` operations directly
(see [this issue](https://github.com/NixOS/nixpkgs/issues/37945))
so we will use `stdenv.mkDerivation` instead.
Using the example `hello` project above, we want to do the following:
- Have access to `cargo` and `rustc`
- Have the `openssl` library available to a crate through it's _normal_
compilation mechanism (`pkg-config`).
A typical `shell.nix` might look like:
```
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "rust-env";
buildInputs = [
rustc cargo
# Example Additional Dependencies
pkgconfig openssl
];
# Set Environment Variables
RUST_BACKTRACE = 1;
}
```
You should now be able to run the following:
```
$ nix-shell --pure
$ cargo build
$ cargo test
```
### Controlling Rust Version Inside `nix-shell`
To control your rust version (i.e. use nightly) from within `shell.nix` (or
other nix expressions) you can use the following `shell.nix`
```
# Latest Nightly
with import <nixpkgs> {};
let src = fetchFromGitHub {
owner = "mozilla";
repo = "nixpkgs-mozilla";
# commit from: 2018-03-27
rev = "2945b0b6b2fd19e7d23bac695afd65e320efcebe";
sha256 = "034m1dryrzh2lmjvk3c0krgip652dql46w5yfwpvh7gavd3iypyw";
};
in
with import "${src.out}/rust-overlay.nix" pkgs pkgs;
stdenv.mkDerivation {
name = "rust-env";
buildInputs = [
# Note: to use use stable, just replace `nightly` with `stable`
latest.rustChannels.nightly.rust
# Add some extra dependencies from `pkgs`
pkgconfig openssl
];
# Set Environment Variables
RUST_BACKTRACE = 1;
}
```
Now run:
```
$ rustc --version
rustc 1.26.0-nightly (188e693b3 2018-03-26)
```
To see that you are using nightly.
## Using the Rust nightlies overlay ## Using the Rust nightlies overlay
Mozilla provides an overlay for nixpkgs to bring a nightly version of Rust into scope. Mozilla provides an overlay for nixpkgs to bring a nightly version of Rust into scope.

View File

@ -713,7 +713,7 @@ the <literal>inotify.py</literal> script in weechat-scripts requires
D-Bus or libnotify, and the <literal>fish.py</literal> script requires D-Bus or libnotify, and the <literal>fish.py</literal> script requires
pycrypto. To use these scripts, use the <literal>python</literal> pycrypto. To use these scripts, use the <literal>python</literal>
plugin's <literal>withPackages</literal> attribute: plugin's <literal>withPackages</literal> attribute:
<programlisting>weechat.override {configure = {availablePlugins, ...}: { <programlisting>weechat.override { configure = {availablePlugins, ...}: {
plugins = with availablePlugins; [ plugins = with availablePlugins; [
(python.withPackages (ps: with ps; [ pycrypto python-dbus ])) (python.withPackages (ps: with ps; [ pycrypto python-dbus ]))
]; ];
@ -721,5 +721,15 @@ plugin's <literal>withPackages</literal> attribute:
} }
</programlisting> </programlisting>
</para> </para>
<para>
In order to also keep all default plugins installed, it is possible to use
the following method:
<programlisting>weechat.override { configure = { availablePlugins, ... }: {
plugins = builtins.attrValues (availablePlugins // {
python = availablePlugins.python.withPackages (ps: with ps; [ pycrypto python-dbus ]);
});
}; }
</programlisting>
</para>
</section> </section>
</chapter> </chapter>

View File

@ -248,6 +248,23 @@ table
box-shadow: 0.4em 0.4em 0.5em #e0e0e0; box-shadow: 0.4em 0.4em 0.5em #e0e0e0;
} }
table.simplelist
{
text-align: left;
color: #005aa0;
border: 0;
padding: 5px;
background: #fffff5;
font-weight: normal;
font-style: italic;
box-shadow: none;
margin-bottom: 1em;
}
div.navheader table, div.navfooter table {
box-shadow: none;
}
div.affiliation div.affiliation
{ {
font-style: italic; font-style: italic;

View File

@ -317,11 +317,11 @@ Additional information.
</para> </para>
<para> <para>
review uncommitted changes: review uncommitted changes:
<screen>nix-shell -p nox --run nox-review wip</screen> <screen>nix-shell -p nox --run "nox-review wip"</screen>
</para> </para>
<para> <para>
review changes from pull request number 12345: review changes from pull request number 12345:
<screen>nix-shell -p nox --run nox-review pr 12345</screen> <screen>nix-shell -p nox --run "nox-review pr 12345"</screen>
</para> </para>
</section> </section>
<section> <section>

View File

@ -5,9 +5,11 @@
*/ */
let let
callLibs = file: import file { inherit lib; }; inherit (import ./fixed-points.nix {}) makeExtensible;
lib = rec { lib = makeExtensible (self: let
callLibs = file: import file { lib = self; };
in with self; {
# often used, or depending on very little # often used, or depending on very little
trivial = callLibs ./trivial.nix; trivial = callLibs ./trivial.nix;
@ -128,5 +130,5 @@ let
mergeAttrsNoOverride mergeAttrByFunc mergeAttrsByFuncDefaults mergeAttrsNoOverride mergeAttrByFunc mergeAttrsByFuncDefaults
mergeAttrsByFuncDefaultsClean mergeAttrBy mergeAttrsByFuncDefaultsClean mergeAttrBy
prepareDerivationArgs nixType imap overridableDelayableArgs; prepareDerivationArgs nixType imap overridableDelayableArgs;
}; });
in lib in lib

View File

@ -4,6 +4,12 @@
* They all follow a similar interface: * They all follow a similar interface:
* generator { config-attrs } data * generator { config-attrs } data
* *
* `config-attrs` are holes in the generators
* with sensible default implementations that
* can be overwritten. The default implementations
* are mostly generators themselves, called with
* their respective default values; they can be reused.
*
* Tests can be found in ./tests.nix * Tests can be found in ./tests.nix
* Documentation in the manual, #sec-generators * Documentation in the manual, #sec-generators
*/ */
@ -20,6 +26,32 @@ in
rec { rec {
## -- HELPER FUNCTIONS & DEFAULTS --
/* Convert a value to a sensible default string representation.
* The builtin `toString` function has some strange defaults,
* suitable for bash scripts but not much else.
*/
mkValueStringDefault = {}: v: with builtins;
let err = t: v: abort
("generators.mkValueStringDefault: " +
"${t} not supported: ${toPretty {} v}");
in if isInt v then toString v
# we default to not quoting strings
else if isString v then v
# isString returns "1", which is not a good default
else if true == v then "true"
# here it returns to "", which is even less of a good default
else if false == v then "false"
else if null == v then "null"
# if you have lists you probably want to replace this
else if isList v then err "lists" v
# same as for lists, might want to replace
else if isAttrs v then err "attrsets" v
else if isFunction v then err "functions" v
else err "this value is" (toString v);
/* Generate a line of key k and value v, separated by /* Generate a line of key k and value v, separated by
* character sep. If sep appears in k, it is escaped. * character sep. If sep appears in k, it is escaped.
* Helper for synaxes with different separators. * Helper for synaxes with different separators.
@ -30,11 +62,14 @@ rec {
* > "f\:oo:bar" * > "f\:oo:bar"
*/ */
mkKeyValueDefault = { mkKeyValueDefault = {
mkValueString ? toString mkValueString ? mkValueStringDefault {}
}: sep: k: v: }: sep: k: v:
"${libStr.escape [sep] k}${sep}${mkValueString v}"; "${libStr.escape [sep] k}${sep}${mkValueString v}";
## -- FILE FORMAT GENERATORS --
/* Generate a key-value-style config file from an attrset. /* Generate a key-value-style config file from an attrset.
* *
* mkKeyValue is the same as in toINI. * mkKeyValue is the same as in toINI.
@ -98,6 +133,7 @@ rec {
*/ */
toYAML = {}@args: toJSON args; toYAML = {}@args: toJSON args;
/* Pretty print a value, akin to `builtins.trace`. /* Pretty print a value, akin to `builtins.trace`.
* Should probably be a builtin as well. * Should probably be a builtin as well.
*/ */
@ -108,8 +144,9 @@ rec {
allowPrettyValues ? false allowPrettyValues ? false
}@args: v: with builtins; }@args: v: with builtins;
if isInt v then toString v if isInt v then toString v
else if isBool v then (if v == true then "true" else "false") else if isString v then ''"${libStr.escape [''"''] v}"''
else if isString v then "\"" + v + "\"" else if true == v then "true"
else if false == v then "false"
else if null == v then "null" else if null == v then "null"
else if isFunction v then else if isFunction v then
let fna = lib.functionArgs v; let fna = lib.functionArgs v;
@ -132,6 +169,6 @@ rec {
(name: value: (name: value:
"${toPretty args name} = ${toPretty args value};") v) "${toPretty args name} = ${toPretty args value};") v)
+ " }" + " }"
else abort "toPretty: should never happen (v = ${v})"; else abort "generators.toPretty: should never happen (v = ${v})";
} }

View File

@ -59,7 +59,7 @@ rec {
}; };
}; };
closed = closeModules (modules ++ [ internalModule ]) ({ inherit config options; lib = import ./.; } // specialArgs); closed = closeModules (modules ++ [ internalModule ]) ({ inherit config options lib; } // specialArgs);
options = mergeModules prefix (reverseList (filterModules (specialArgs.modulesPath or "") closed)); options = mergeModules prefix (reverseList (filterModules (specialArgs.modulesPath or "") closed));
@ -660,7 +660,7 @@ rec {
doRename = { from, to, visible, warn, use }: doRename = { from, to, visible, warn, use }:
let let
toOf = attrByPath to toOf = attrByPath to
(abort "Renaming error: option `${showOption to}' does not exists."); (abort "Renaming error: option `${showOption to}' does not exist.");
in in
{ config, options, ... }: { config, options, ... }:
{ options = setAttrByPath from (mkOption { { options = setAttrByPath from (mkOption {

View File

@ -207,6 +207,29 @@ runTests {
expected = ''f\:oo:bar''; expected = ''f\:oo:bar'';
}; };
testMkValueString = {
expr = let
vals = {
int = 42;
string = ''fo"o'';
bool = true;
bool2 = false;
null = null;
# float = 42.23; # floats are strange
};
in mapAttrs
(const (generators.mkValueStringDefault {}))
vals;
expected = {
int = "42";
string = ''fo"o'';
bool = "true";
bool2 = "false";
null = "null";
# float = "42.23" true false [ "bar" ] ]'';
};
};
testToKeyValue = { testToKeyValue = {
expr = generators.toKeyValue {} { expr = generators.toKeyValue {} {
key = "value"; key = "value";
@ -249,6 +272,8 @@ runTests {
"section 1" = { "section 1" = {
attribute1 = 5; attribute1 = 5;
x = "Me-se JarJar Binx"; x = "Me-se JarJar Binx";
# booleans are converted verbatim by default
boolean = false;
}; };
"foo[]" = { "foo[]" = {
"he\\h=he" = "this is okay"; "he\\h=he" = "this is okay";
@ -260,6 +285,7 @@ runTests {
[section 1] [section 1]
attribute1=5 attribute1=5
boolean=false
x=Me-se JarJar Binx x=Me-se JarJar Binx
''; '';
}; };

View File

@ -72,6 +72,11 @@
github = "FireyFly"; github = "FireyFly";
name = "Jonas Höglund"; name = "Jonas Höglund";
}; };
Fresheyeball = {
email = "fresheyeball@gmail.com";
github = "fresheyeball";
name = "Isaac Shapira";
};
Gonzih = { Gonzih = {
email = "gonzih@gmail.com"; email = "gonzih@gmail.com";
github = "Gonzih"; github = "Gonzih";
@ -512,6 +517,11 @@
email = "sivaraman.balaji@gmail.com"; email = "sivaraman.balaji@gmail.com";
name = "Balaji Sivaraman"; name = "Balaji Sivaraman";
}; };
bandresen = {
email = "bandresen@gmail.com";
github = "bandresen";
name = "Benjamin Andresen";
};
barrucadu = { barrucadu = {
email = "mike@barrucadu.co.uk"; email = "mike@barrucadu.co.uk";
github = "barrucadu"; github = "barrucadu";
@ -596,6 +606,11 @@
github = "bjornfor"; github = "bjornfor";
name = "Bjørn Forsman"; name = "Bjørn Forsman";
}; };
bkchr = {
email = "nixos@kchr.de";
github = "bkchr";
name = "Bastian Köcher";
};
bluescreen303 = { bluescreen303 = {
email = "mathijs@bluescreen303.nl"; email = "mathijs@bluescreen303.nl";
github = "bluescreen303"; github = "bluescreen303";
@ -690,6 +705,11 @@
github = "carlsverre"; github = "carlsverre";
name = "Carl Sverre"; name = "Carl Sverre";
}; };
cartr = {
email = "carter.sande@duodecima.technology";
github = "cartr";
name = "Carter Sande";
};
casey = { casey = {
email = "casey@rodarmor.net"; email = "casey@rodarmor.net";
github = "casey"; github = "casey";
@ -1171,6 +1191,11 @@
github = "ellis"; github = "ellis";
name = "Ellis Whitehead"; name = "Ellis Whitehead";
}; };
elvishjerricco = {
email = "elvishjerricco@gmail.com";
github = "ElvishJerricco";
name = "Will Fancher";
};
enzime = { enzime = {
email = "enzime@users.noreply.github.com"; email = "enzime@users.noreply.github.com";
github = "enzime"; github = "enzime";
@ -1996,6 +2021,11 @@
github = "leenaars"; github = "leenaars";
name = "Michiel Leenaars"; name = "Michiel Leenaars";
}; };
leo60228 = {
email = "iakornfeld@gmail.com";
github = "leo60228";
name = "leo60228";
};
leonardoce = { leonardoce = {
email = "leonardo.cecchi@gmail.com"; email = "leonardo.cecchi@gmail.com";
github = "leonardoce"; github = "leonardoce";
@ -2964,6 +2994,11 @@
github = "redbaron"; github = "redbaron";
name = "Maxim Ivanov"; name = "Maxim Ivanov";
}; };
redfish64 = {
email = "engler@gmail.com";
github = "redfish64";
name = "Tim Engler";
};
redvers = { redvers = {
email = "red@infect.me"; email = "red@infect.me";
github = "redvers"; github = "redvers";
@ -3406,6 +3441,11 @@
github = "suvash"; github = "suvash";
name = "Suvash Thapaliya"; name = "Suvash Thapaliya";
}; };
sveitser = {
email = "sveitser@gmail.com";
github = "sveitser";
name = "Mathis Antony";
};
svsdep = { svsdep = {
email = "svsdep@gmail.com"; email = "svsdep@gmail.com";
github = "svsdep"; github = "svsdep";
@ -3586,6 +3626,11 @@
github = "tnias"; github = "tnias";
name = "Philipp Bartsch"; name = "Philipp Bartsch";
}; };
tobim = {
email = "nix@tobim.fastmail.fm";
github = "tobimpub";
name = "Tobias Mayer";
};
tohl = { tohl = {
email = "tom@logand.com"; email = "tom@logand.com";
github = "tohl"; github = "tohl";
@ -3961,6 +4006,11 @@
github = "yrashk"; github = "yrashk";
name = "Yurii Rashkovskii"; name = "Yurii Rashkovskii";
}; };
ysndr = {
email = "me@ysndr.de";
github = "ysndr";
name = "Yannik Sander";
};
yuriaisaka = { yuriaisaka = {
email = "yuri.aisaka+nix@gmail.com"; email = "yuri.aisaka+nix@gmail.com";
github = "yuriaisaka"; github = "yuriaisaka";

View File

@ -100,7 +100,10 @@ sub uploadFile {
sub redirect { sub redirect {
my ($name, $dest) = @_; my ($name, $dest) = @_;
#print STDERR "linking $name to $dest...\n"; #print STDERR "linking $name to $dest...\n";
$bucket->add_key($name, "", { 'x-amz-website-redirect-location' => "/" . $dest }) $bucket->add_key($name, "", {
'x-amz-website-redirect-location' => "/" . $dest,
'x-amz-acl' => "public-read"
})
or die "failed to create redirect from $name to $dest\n"; or die "failed to create redirect from $name to $dest\n";
$cache{$name} = 1; $cache{$name} = 1;
} }
@ -112,7 +115,10 @@ sub uploadFile {
# Upload the file as sha512/<hash-in-base-16>. # Upload the file as sha512/<hash-in-base-16>.
print STDERR "uploading $fn to $mainKey...\n"; print STDERR "uploading $fn to $mainKey...\n";
$bucket->add_key_filename($mainKey, $fn, { 'x-amz-meta-original-name' => $name }) $bucket->add_key_filename($mainKey, $fn, {
'x-amz-meta-original-name' => $name,
'x-amz-acl' => "public-read"
})
or die "failed to upload $fn to $mainKey\n"; or die "failed to upload $fn to $mainKey\n";
$cache{$mainKey} = 1; $cache{$mainKey} = 1;
} }

View File

@ -124,11 +124,12 @@ let
manualXsltprocOptions = toString [ manualXsltprocOptions = toString [
"--param section.autolabel 1" "--param section.autolabel 1"
"--param section.label.includes.component.label 1" "--param section.label.includes.component.label 1"
"--stringparam html.stylesheet style.css" "--stringparam html.stylesheet 'style.css overrides.css highlightjs/mono-blue.css'"
"--stringparam html.script './highlightjs/highlight.pack.js ./highlightjs/loader.js'"
"--param xref.with.number.and.title 1" "--param xref.with.number.and.title 1"
"--param toc.section.depth 3" "--param toc.section.depth 3"
"--stringparam admon.style ''" "--stringparam admon.style ''"
"--stringparam callout.graphics.extension .gif" "--stringparam callout.graphics.extension .svg"
"--stringparam current.docid manual" "--stringparam current.docid manual"
"--param chunk.section.depth 0" "--param chunk.section.depth 0"
"--param chunk.first.sections 1" "--param chunk.first.sections 1"
@ -260,9 +261,11 @@ in rec {
${manual-combined}/manual-combined.xml ${manual-combined}/manual-combined.xml
mkdir -p $dst/images/callouts mkdir -p $dst/images/callouts
cp ${docbook5_xsl}/xml/xsl/docbook/images/callouts/*.gif $dst/images/callouts/ cp ${docbook5_xsl}/xml/xsl/docbook/images/callouts/*.svg $dst/images/callouts/
cp ${./style.css} $dst/style.css cp ${../../../doc/style.css} $dst/style.css
cp ${../../../doc/overrides.css} $dst/overrides.css
cp -r ${pkgs.documentation-highlighter} $dst/highlightjs
mkdir -p $out/nix-support mkdir -p $out/nix-support
echo "nix-build out $out" >> $out/nix-support/hydra-build-products echo "nix-build out $out" >> $out/nix-support/hydra-build-products
@ -286,7 +289,7 @@ in rec {
${manual-combined}/manual-combined.xml ${manual-combined}/manual-combined.xml
mkdir -p $dst/epub/OEBPS/images/callouts mkdir -p $dst/epub/OEBPS/images/callouts
cp -r ${docbook5_xsl}/xml/xsl/docbook/images/callouts/*.gif $dst/epub/OEBPS/images/callouts # */ cp -r ${docbook5_xsl}/xml/xsl/docbook/images/callouts/*.svg $dst/epub/OEBPS/images/callouts # */
echo "application/epub+zip" > mimetype echo "application/epub+zip" > mimetype
manual="$dst/nixos-manual.epub" manual="$dst/nixos-manual.epub"
zip -0Xq "$manual" mimetype zip -0Xq "$manual" mimetype

View File

@ -4,7 +4,7 @@
version="5.0" version="5.0"
xml:id="sec-release-18.03"> xml:id="sec-release-18.03">
<title>Release 18.03 (“Impala”, 2018/03/??)</title> <title>Release 18.03 (“Impala”, 2018/04/04)</title>
<section xmlns="http://docbook.org/ns/docbook" <section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
@ -18,6 +18,20 @@
has the following highlights: </para> has the following highlights: </para>
<itemizedlist> <itemizedlist>
<listitem>
<para>
End of support is planned for end of October 2018, handing over to 18.09.
</para>
</listitem>
<listitem>
<para>
Platform support: x86_64-linux and x86_64-darwin since release time (the latter isn't NixOS, really).
Binaries for aarch64-linux are available, but no channel exists yet, as it's waiting for some test fixes, etc.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Nix now defaults to 2.0; see its Nix now defaults to 2.0; see its
@ -27,13 +41,13 @@ has the following highlights: </para>
<listitem> <listitem>
<para> <para>
Linux kernel defaults to the 4.14 branch (it was 4.9). Core version changes: linux: 4.9 -> 4.14, glibc: 2.25 -> 2.26, gcc: 6 -> 7, systemd: 234 -> 237.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
GCC defaults to 7.x (it was 6.x). Desktop version changes: gnome: 3.24 -> 3.26, (KDE) plasma-desktop: 5.10 -> 5.12.
</para> </para>
</listitem> </listitem>
@ -59,13 +73,7 @@ has the following highlights: </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>PHP now defaults to PHP 7.2, updated from 7.1.</para>
The GNOME version is now 3.26.
</para>
</listitem>
<listitem>
<para>PHP now defaults to PHP 7.2</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
@ -81,9 +89,66 @@ has the following highlights: </para>
<para>The following new services were added since the last release:</para> <para>The following new services were added since the last release:</para>
<itemizedlist> <itemizedlist>
<listitem> <listitem><para><literal>./config/krb5/default.nix</literal></para></listitem>
<para></para> <listitem><para><literal>./hardware/digitalbitbox.nix</literal></para></listitem>
</listitem> <listitem><para><literal>./misc/label.nix</literal></para></listitem>
<listitem><para><literal>./programs/ccache.nix</literal></para></listitem>
<listitem><para><literal>./programs/criu.nix</literal></para></listitem>
<listitem><para><literal>./programs/digitalbitbox/default.nix</literal></para></listitem>
<listitem><para><literal>./programs/less.nix</literal></para></listitem>
<listitem><para><literal>./programs/npm.nix</literal></para></listitem>
<listitem><para><literal>./programs/plotinus.nix</literal></para></listitem>
<listitem><para><literal>./programs/rootston.nix</literal></para></listitem>
<listitem><para><literal>./programs/systemtap.nix</literal></para></listitem>
<listitem><para><literal>./programs/sway.nix</literal></para></listitem>
<listitem><para><literal>./programs/udevil.nix</literal></para></listitem>
<listitem><para><literal>./programs/way-cooler.nix</literal></para></listitem>
<listitem><para><literal>./programs/yabar.nix</literal></para></listitem>
<listitem><para><literal>./programs/zsh/zsh-autoenv.nix</literal></para></listitem>
<listitem><para><literal>./services/backup/borgbackup.nix</literal></para></listitem>
<listitem><para><literal>./services/backup/crashplan-small-business.nix</literal></para></listitem>
<listitem><para><literal>./services/desktops/dleyna-renderer.nix</literal></para></listitem>
<listitem><para><literal>./services/desktops/dleyna-server.nix</literal></para></listitem>
<listitem><para><literal>./services/desktops/pipewire.nix</literal></para></listitem>
<listitem><para><literal>./services/desktops/gnome3/chrome-gnome-shell.nix</literal></para></listitem>
<listitem><para><literal>./services/desktops/gnome3/tracker-miners.nix</literal></para></listitem>
<listitem><para><literal>./services/hardware/fwupd.nix</literal></para></listitem>
<listitem><para><literal>./services/hardware/interception-tools.nix</literal></para></listitem>
<listitem><para><literal>./services/hardware/u2f.nix</literal></para></listitem>
<listitem><para><literal>./services/hardware/usbmuxd.nix</literal></para></listitem>
<listitem><para><literal>./services/mail/clamsmtp.nix</literal></para></listitem>
<listitem><para><literal>./services/mail/dkimproxy-out.nix</literal></para></listitem>
<listitem><para><literal>./services/mail/pfix-srsd.nix</literal></para></listitem>
<listitem><para><literal>./services/misc/gitea.nix</literal></para></listitem>
<listitem><para><literal>./services/misc/home-assistant.nix</literal></para></listitem>
<listitem><para><literal>./services/misc/ihaskell.nix</literal></para></listitem>
<listitem><para><literal>./services/misc/logkeys.nix</literal></para></listitem>
<listitem><para><literal>./services/misc/novacomd.nix</literal></para></listitem>
<listitem><para><literal>./services/misc/osrm.nix</literal></para></listitem>
<listitem><para><literal>./services/misc/plexpy.nix</literal></para></listitem>
<listitem><para><literal>./services/misc/pykms.nix</literal></para></listitem>
<listitem><para><literal>./services/misc/tzupdate.nix</literal></para></listitem>
<listitem><para><literal>./services/monitoring/fusion-inventory.nix</literal></para></listitem>
<listitem><para><literal>./services/monitoring/prometheus/exporters.nix</literal></para></listitem>
<listitem><para><literal>./services/network-filesystems/beegfs.nix</literal></para></listitem>
<listitem><para><literal>./services/network-filesystems/davfs2.nix</literal></para></listitem>
<listitem><para><literal>./services/network-filesystems/openafs/client.nix</literal></para></listitem>
<listitem><para><literal>./services/network-filesystems/openafs/server.nix</literal></para></listitem>
<listitem><para><literal>./services/network-filesystems/ceph.nix</literal></para></listitem>
<listitem><para><literal>./services/networking/aria2.nix</literal></para></listitem>
<listitem><para><literal>./services/networking/monero.nix</literal></para></listitem>
<listitem><para><literal>./services/networking/nghttpx/default.nix</literal></para></listitem>
<listitem><para><literal>./services/networking/nixops-dns.nix</literal></para></listitem>
<listitem><para><literal>./services/networking/rxe.nix</literal></para></listitem>
<listitem><para><literal>./services/networking/stunnel.nix</literal></para></listitem>
<listitem><para><literal>./services/web-apps/matomo.nix</literal></para></listitem>
<listitem><para><literal>./services/web-apps/restya-board.nix</literal></para></listitem>
<listitem><para><literal>./services/web-servers/mighttpd2.nix</literal></para></listitem>
<listitem><para><literal>./services/x11/fractalart.nix</literal></para></listitem>
<listitem><para><literal>./system/boot/binfmt.nix</literal></para></listitem>
<listitem><para><literal>./system/boot/grow-partition.nix</literal></para></listitem>
<listitem><para><literal>./tasks/filesystems/ecryptfs.nix</literal></para></listitem>
<listitem><para><literal>./virtualisation/hyperv-guest.nix</literal></para></listitem>
</itemizedlist> </itemizedlist>
</section> </section>
@ -174,7 +239,7 @@ following incompatible changes:</para>
the <literal>openssh_with_kerberos</literal> package the <literal>openssh_with_kerberos</literal> package
is now a deprecated alias. is now a deprecated alias.
If you do not want Kerberos support, If you do not want Kerberos support,
you can do <literal>openssh.override { withKerboros = false; }</literal>. you can do <literal>openssh.override { withKerberos = false; }</literal>.
Note, this also applies to the <literal>openssh_hpn</literal> package. Note, this also applies to the <literal>openssh_hpn</literal> package.
</para> </para>
</listitem> </listitem>
@ -418,15 +483,6 @@ following incompatible changes:</para>
have been added to set up static routing. have been added to set up static routing.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
The option <option>services.xserver.desktopManager.default</option> is now
<literal>none</literal> by default. An assertion failure is thrown if WM's
and DM's default are <literal>none</literal>.
To explicitly run a plain X session without and DM or WM, the newly
introduced option <option>services.xserver.plainX</option> must be set to true.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
The option <option>services.logstash.listenAddress</option> is now <literal>127.0.0.1</literal> by default. The option <option>services.logstash.listenAddress</option> is now <literal>127.0.0.1</literal> by default.

View File

@ -1,267 +0,0 @@
/* Copied from http://bakefile.sourceforge.net/, which appears
licensed under the GNU GPL. */
/***************************************************************************
Basic headers and text:
***************************************************************************/
body
{
font-family: "Nimbus Sans L", sans-serif;
background: white;
margin: 2em 1em 2em 1em;
}
h1, h2, h3, h4
{
color: #005aa0;
}
h1 /* title */
{
font-size: 200%;
}
h2 /* chapters, appendices, subtitle */
{
font-size: 180%;
}
/* Extra space between chapters, appendices. */
div.chapter > div.titlepage h2, div.appendix > div.titlepage h2
{
margin-top: 1.5em;
}
div.section > div.titlepage h2 /* sections */
{
font-size: 150%;
margin-top: 1.5em;
}
h3 /* subsections */
{
font-size: 125%;
}
div.simplesect h2
{
font-size: 110%;
}
div.appendix h3
{
font-size: 150%;
margin-top: 1.5em;
}
div.refnamediv h2, div.refsynopsisdiv h2, div.refsection h2 /* refentry parts */
{
margin-top: 1.4em;
font-size: 125%;
}
div.refsection h3
{
font-size: 110%;
}
/***************************************************************************
Examples:
***************************************************************************/
div.example
{
border: 1px solid #b0b0b0;
padding: 6px 6px;
margin-left: 1.5em;
margin-right: 1.5em;
background: #f4f4f8;
border-radius: 0.4em;
box-shadow: 0.4em 0.4em 0.5em #e0e0e0;
}
div.example p.title
{
margin-top: 0em;
}
div.example pre
{
box-shadow: none;
}
/***************************************************************************
Screen dumps:
***************************************************************************/
pre.screen, pre.programlisting
{
border: 1px solid #b0b0b0;
padding: 3px 3px;
margin-left: 1.5em;
margin-right: 1.5em;
color: #600000;
background: #f4f4f8;
font-family: monospace;
border-radius: 0.4em;
box-shadow: 0.4em 0.4em 0.5em #e0e0e0;
}
div.example pre.programlisting
{
border: 0px;
padding: 0 0;
margin: 0 0 0 0;
}
/***************************************************************************
Notes, warnings etc:
***************************************************************************/
.note, .warning
{
border: 1px solid #b0b0b0;
padding: 3px 3px;
margin-left: 1.5em;
margin-right: 1.5em;
margin-bottom: 1em;
padding: 0.3em 0.3em 0.3em 0.3em;
background: #fffff5;
border-radius: 0.4em;
box-shadow: 0.4em 0.4em 0.5em #e0e0e0;
}
div.note, div.warning
{
font-style: italic;
}
div.note h3, div.warning h3
{
color: red;
font-size: 100%;
padding-right: 0.5em;
display: inline;
}
div.note p, div.warning p
{
margin-bottom: 0em;
}
div.note h3 + p, div.warning h3 + p
{
display: inline;
}
div.note h3
{
color: blue;
font-size: 100%;
}
div.navfooter *
{
font-size: 90%;
}
/***************************************************************************
Links colors and highlighting:
***************************************************************************/
a { text-decoration: none; }
a:hover { text-decoration: underline; }
a:link { color: #0048b3; }
a:visited { color: #002a6a; }
/***************************************************************************
Table of contents:
***************************************************************************/
div.toc
{
font-size: 90%;
}
div.toc dl
{
margin-top: 0em;
margin-bottom: 0em;
}
/***************************************************************************
Special elements:
***************************************************************************/
tt, code
{
color: #400000;
}
.term
{
font-weight: bold;
}
div.variablelist dd p, div.glosslist dd p
{
margin-top: 0em;
}
div.variablelist dd, div.glosslist dd
{
margin-left: 1.5em;
}
div.glosslist dt
{
font-style: italic;
}
.varname
{
color: #400000;
}
span.command strong
{
font-weight: normal;
color: #400000;
}
div.calloutlist table
{
box-shadow: none;
}
table
{
border-collapse: collapse;
box-shadow: 0.4em 0.4em 0.5em #e0e0e0;
}
table.simplelist
{
text-align: left;
color: #005aa0;
border: 0;
padding: 5px;
background: #fffff5;
font-weight: normal;
font-style: italic;
box-shadow: none;
margin-bottom: 1em;
}
div.navheader table, div.navfooter table {
box-shadow: none;
}

View File

@ -1,4 +1,4 @@
{ stdenv, perl, xz, pathsFromGraph { stdenv, perl, pixz, pathsFromGraph
, # The file name of the resulting tarball , # The file name of the resulting tarball
fileName ? "nixos-system-${stdenv.system}" fileName ? "nixos-system-${stdenv.system}"
@ -21,14 +21,20 @@
# Extra tar arguments # Extra tar arguments
, extraArgs ? "" , extraArgs ? ""
# Command used for compression
, compressCommand ? "pixz"
# Extension for the compressed tarball
, compressionExtension ? ".xz"
# extra inputs, like the compressor to use
, extraInputs ? [ pixz ]
}: }:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "tarball"; name = "tarball";
builder = ./make-system-tarball.sh; builder = ./make-system-tarball.sh;
buildInputs = [perl xz]; buildInputs = [ perl ] ++ extraInputs;
inherit fileName pathsFromGraph extraArgs extraCommands; inherit fileName pathsFromGraph extraArgs extraCommands compressCommand;
# !!! should use XML. # !!! should use XML.
sources = map (x: x.source) contents; sources = map (x: x.source) contents;
@ -41,4 +47,6 @@ stdenv.mkDerivation {
# For obtaining the closure of `storeContents'. # For obtaining the closure of `storeContents'.
exportReferencesGraph = exportReferencesGraph =
map (x: [("closure-" + baseNameOf x.object) x.object]) storeContents; map (x: [("closure-" + baseNameOf x.object) x.object]) storeContents;
extension = compressionExtension;
} }

View File

@ -1,5 +1,4 @@
source $stdenv/setup source $stdenv/setup
set -x
sources_=($sources) sources_=($sources)
targets_=($targets) targets_=($targets)
@ -54,8 +53,8 @@ mkdir -p $out/tarball
rm env-vars rm env-vars
tar --sort=name --mtime='@1' --owner=0 --group=0 --numeric-owner -cvJf $out/tarball/$fileName.tar.xz * $extraArgs time tar --sort=name --mtime='@1' --owner=0 --group=0 --numeric-owner -c * $extraArgs | $compressCommand > $out/tarball/$fileName.tar${extension}
mkdir -p $out/nix-support mkdir -p $out/nix-support
echo $system > $out/nix-support/system echo $system > $out/nix-support/system
echo "file system-tarball $out/tarball/$fileName.tar.xz" > $out/nix-support/hydra-build-products echo "file system-tarball $out/tarball/$fileName.tar${extension}" > $out/nix-support/hydra-build-products

View File

@ -15,7 +15,7 @@
# #
# $ nix-build ./option-usage.nix --argstr testOption service.xserver.enable -A txt -o service.xserver.enable._txt # $ nix-build ./option-usage.nix --argstr testOption service.xserver.enable -A txt -o service.xserver.enable._txt
# #
# otther target exists such as, `dotContent`, `dot`, and `pdf`. If you are # Other targets exists such as `dotContent`, `dot`, and `pdf`. If you are
# looking for the option usage of multiple options, you can provide a list # looking for the option usage of multiple options, you can provide a list
# as argument. # as argument.
# #
@ -35,7 +35,7 @@
# value is replaced by a `throw` statement which is caught by the `tryEval` # value is replaced by a `throw` statement which is caught by the `tryEval`
# evaluation of each option value. # evaluation of each option value.
# #
# We then compare the result of the evluation of the original module, with # We then compare the result of the evaluation of the original module, with
# the result of the second evaluation, and consider that the new failures are # the result of the second evaluation, and consider that the new failures are
# caused by our mutation of the `config` argument. # caused by our mutation of the `config` argument.
# #
@ -62,7 +62,7 @@ let
"_module.args" "_module.args"
# For some reasons which we yet have to investigate, some options cannot # For some reasons which we yet have to investigate, some options cannot
# be replaced by a throw without cuasing a non-catchable failure. # be replaced by a throw without causing a non-catchable failure.
"networking.bonds" "networking.bonds"
"networking.bridges" "networking.bridges"
"networking.interfaces" "networking.interfaces"

View File

@ -3,7 +3,7 @@
set -euo pipefail set -euo pipefail
BUCKET_NAME="${BUCKET_NAME:-nixos-images}" BUCKET_NAME="${BUCKET_NAME:-nixos-cloud-images}"
TIMESTAMP="$(date +%Y%m%d%H%M)" TIMESTAMP="$(date +%Y%m%d%H%M)"
export TIMESTAMP export TIMESTAMP
@ -19,5 +19,5 @@ img_name=$(basename "$img_path")
img_id=$(echo "$img_name" | sed 's|.raw.tar.gz$||;s|\.|-|g;s|_|-|g') img_id=$(echo "$img_name" | sed 's|.raw.tar.gz$||;s|\.|-|g;s|_|-|g')
if ! gsutil ls "gs://${BUCKET_NAME}/$img_name"; then if ! gsutil ls "gs://${BUCKET_NAME}/$img_name"; then
gsutil cp "$img_path" "gs://${BUCKET_NAME}/$img_name" gsutil cp "$img_path" "gs://${BUCKET_NAME}/$img_name"
gsutil acl ch -u AllUsers:R "gs://${BUCKET_NAME}/$img_name"
fi fi
gcloud compute images create "$img_id" --source-uri "gs://${BUCKET_NAME}/$img_name"

View File

@ -17,23 +17,23 @@ let
resolved = canLoadExternalModules && config.services.resolved.enable; resolved = canLoadExternalModules && config.services.resolved.enable;
hostArray = [ "files" ] hostArray = [ "files" ]
++ optionals mymachines [ "mymachines" ] ++ optional mymachines "mymachines"
++ optionals nssmdns [ "mdns_minimal [NOTFOUND=return]" ] ++ optional nssmdns "mdns_minimal [NOTFOUND=return]"
++ optionals nsswins [ "wins" ] ++ optional nsswins "wins"
++ optionals resolved ["resolve [!UNAVAIL=return]"] ++ optional resolved "resolve [!UNAVAIL=return]"
++ [ "dns" ] ++ [ "dns" ]
++ optionals nssmdns [ "mdns" ] ++ optional nssmdns "mdns"
++ optionals myhostname ["myhostname" ]; ++ optional myhostname "myhostname";
passwdArray = [ "files" ] passwdArray = [ "files" ]
++ optional sssd "sss" ++ optional sssd "sss"
++ optionals ldap [ "ldap" ] ++ optional ldap "ldap"
++ optionals mymachines [ "mymachines" ] ++ optional mymachines "mymachines"
++ [ "systemd" ]; ++ [ "systemd" ];
shadowArray = [ "files" ] shadowArray = [ "files" ]
++ optional sssd "sss" ++ optional sssd "sss"
++ optionals ldap [ "ldap" ]; ++ optional ldap "ldap";
servicesArray = [ "files" ] servicesArray = [ "files" ]
++ optional sssd "sss"; ++ optional sssd "sss";

View File

@ -109,7 +109,6 @@ in
"/sbin" "/sbin"
"/share/applications" "/share/applications"
"/share/desktop-directories" "/share/desktop-directories"
"/share/doc"
"/share/emacs" "/share/emacs"
"/share/icons" "/share/icons"
"/share/menus" "/share/menus"

View File

@ -35,6 +35,7 @@ let
name = mkOption { name = mkOption {
type = types.str; type = types.str;
apply = x: assert (builtins.stringLength x < 32 || abort "Username '${x}' is longer than 31 characters which is not allowed!"); x;
description = '' description = ''
The name of the user account. If undefined, the name of the The name of the user account. If undefined, the name of the
attribute set will be used. attribute set will be used.
@ -91,6 +92,7 @@ let
group = mkOption { group = mkOption {
type = types.str; type = types.str;
apply = x: assert (builtins.stringLength x < 17 || abort "Group name '${x}' is longer than 16 characters which is not allowed!"); x;
default = "nogroup"; default = "nogroup";
description = "The user's primary group."; description = "The user's primary group.";
}; };
@ -502,9 +504,6 @@ in {
}; };
}; };
# Install all the user shells
environment.systemPackages = systemShells;
users.groups = { users.groups = {
root.gid = ids.gids.root; root.gid = ids.gids.root;
wheel.gid = ids.gids.wheel; wheel.gid = ids.gids.wheel;
@ -541,14 +540,29 @@ in {
# for backwards compatibility # for backwards compatibility
system.activationScripts.groups = stringAfter [ "users" ] ""; system.activationScripts.groups = stringAfter [ "users" ] "";
environment.etc."subuid" = { # Install all the user shells
text = subuidFile; environment.systemPackages = systemShells;
mode = "0644";
}; environment.etc = {
environment.etc."subgid" = { "subuid" = {
text = subgidFile; text = subuidFile;
mode = "0644"; mode = "0644";
}; };
"subgid" = {
text = subgidFile;
mode = "0644";
};
} // (mapAttrs' (name: { packages, ... }: {
name = "profiles/per-user/${name}";
value.source = pkgs.buildEnv {
name = "user-environment";
paths = packages;
inherit (config.environment) pathsToLink extraOutputsToInstall;
inherit (config.system.path) ignoreCollisions postBuild;
};
}) (filterAttrs (_: u: u.packages != []) cfg.users));
environment.profiles = [ "/etc/profiles/per-user/$USER" ];
assertions = [ assertions = [
{ assertion = !cfg.enforceIdUniqueness || (uidsAreUnique && gidsAreUnique); { assertion = !cfg.enforceIdUniqueness || (uidsAreUnique && gidsAreUnique);
@ -579,22 +593,4 @@ in {
}; };
imports =
[ (mkAliasOptionModule [ "users" "extraUsers" ] [ "users" "users" ])
(mkAliasOptionModule [ "users" "extraGroups" ] [ "users" "groups" ])
{
environment = {
etc = mapAttrs' (name: { packages, ... }: {
name = "profiles/per-user/${name}";
value.source = pkgs.buildEnv {
name = "user-environment";
paths = packages;
inherit (config.environment) pathsToLink extraOutputsToInstall;
inherit (config.system.path) ignoreCollisions postBuild;
};
}) (filterAttrs (_: { packages, ... }: packages != []) cfg.users);
profiles = ["/etc/profiles/per-user/$USER"];
};
}
];
} }

View File

@ -21,9 +21,6 @@ in
"it cannot be cross compiled"; "it cannot be cross compiled";
}; };
# Needed by RPi firmware
nixpkgs.config.allowUnfree = true;
boot.loader.grub.enable = false; boot.loader.grub.enable = false;
boot.loader.generic-extlinux-compatible.enable = true; boot.loader.generic-extlinux-compatible.enable = true;

View File

@ -21,9 +21,6 @@ in
"it cannot be cross compiled"; "it cannot be cross compiled";
}; };
# Needed by RPi firmware
nixpkgs.config.allowUnfree = true;
boot.loader.grub.enable = false; boot.loader.grub.enable = false;
boot.loader.generic-extlinux-compatible.enable = true; boot.loader.generic-extlinux-compatible.enable = true;

View File

@ -21,9 +21,6 @@ in
"it cannot be cross compiled"; "it cannot be cross compiled";
}; };
# Needed by RPi firmware
nixpkgs.config.allowUnfree = true;
boot.loader.grub.enable = false; boot.loader.grub.enable = false;
boot.loader.generic-extlinux-compatible.enable = true; boot.loader.generic-extlinux-compatible.enable = true;

View File

@ -20,6 +20,20 @@ let
in in
{ {
options.sdImage = { options.sdImage = {
imageName = mkOption {
default = "${config.sdImage.imageBaseName}-${config.system.nixos.label}-${pkgs.stdenv.system}.img";
description = ''
Name of the generated image file.
'';
};
imageBaseName = mkOption {
default = "nixos-sd-image";
description = ''
Prefix of the name of the generated image file.
'';
};
storePaths = mkOption { storePaths = mkOption {
type = with types; listOf package; type = with types; listOf package;
example = literalExample "[ pkgs.stdenv ]"; example = literalExample "[ pkgs.stdenv ]";
@ -61,19 +75,25 @@ in
sdImage.storePaths = [ config.system.build.toplevel ]; sdImage.storePaths = [ config.system.build.toplevel ];
system.build.sdImage = pkgs.stdenv.mkDerivation { system.build.sdImage = pkgs.stdenv.mkDerivation {
name = "sd-image-${pkgs.stdenv.system}.img"; name = config.sdImage.imageName;
buildInputs = with pkgs; [ dosfstools e2fsprogs mtools libfaketime utillinux ]; buildInputs = with pkgs; [ dosfstools e2fsprogs mtools libfaketime utillinux ];
buildCommand = '' buildCommand = ''
mkdir -p $out/nix-support $out/sd-image
export img=$out/sd-image/${config.sdImage.imageName}
echo "${pkgs.stdenv.system}" > $out/nix-support/system
echo "file sd-image $img" >> $out/nix-support/hydra-build-products
# Create the image file sized to fit /boot and /, plus 20M of slack # Create the image file sized to fit /boot and /, plus 20M of slack
rootSizeBlocks=$(du -B 512 --apparent-size ${rootfsImage} | awk '{ print $1 }') rootSizeBlocks=$(du -B 512 --apparent-size ${rootfsImage} | awk '{ print $1 }')
bootSizeBlocks=$((${toString config.sdImage.bootSize} * 1024 * 1024 / 512)) bootSizeBlocks=$((${toString config.sdImage.bootSize} * 1024 * 1024 / 512))
imageSize=$((rootSizeBlocks * 512 + bootSizeBlocks * 512 + 20 * 1024 * 1024)) imageSize=$((rootSizeBlocks * 512 + bootSizeBlocks * 512 + 20 * 1024 * 1024))
truncate -s $imageSize $out truncate -s $imageSize $img
# type=b is 'W95 FAT32', type=83 is 'Linux'. # type=b is 'W95 FAT32', type=83 is 'Linux'.
sfdisk $out <<EOF sfdisk $img <<EOF
label: dos label: dos
label-id: 0x2178694e label-id: 0x2178694e
@ -82,11 +102,11 @@ in
EOF EOF
# Copy the rootfs into the SD image # Copy the rootfs into the SD image
eval $(partx $out -o START,SECTORS --nr 2 --pairs) eval $(partx $img -o START,SECTORS --nr 2 --pairs)
dd conv=notrunc if=${rootfsImage} of=$out seek=$START count=$SECTORS dd conv=notrunc if=${rootfsImage} of=$img seek=$START count=$SECTORS
# Create a FAT32 /boot partition of suitable size into bootpart.img # Create a FAT32 /boot partition of suitable size into bootpart.img
eval $(partx $out -o START,SECTORS --nr 1 --pairs) eval $(partx $img -o START,SECTORS --nr 1 --pairs)
truncate -s $((SECTORS * 512)) bootpart.img truncate -s $((SECTORS * 512)) bootpart.img
faketime "1970-01-01 00:00:00" mkfs.vfat -i 0x2178694e -n NIXOS_BOOT bootpart.img faketime "1970-01-01 00:00:00" mkfs.vfat -i 0x2178694e -n NIXOS_BOOT bootpart.img
@ -96,7 +116,7 @@ in
# Copy the populated /boot into the SD image # Copy the populated /boot into the SD image
(cd boot; mcopy -bpsvm -i ../bootpart.img ./* ::) (cd boot; mcopy -bpsvm -i ../bootpart.img ./* ::)
dd conv=notrunc if=bootpart.img of=$out seek=$START count=$SECTORS dd conv=notrunc if=bootpart.img of=$img seek=$START count=$SECTORS
''; '';
}; };

View File

@ -0,0 +1,77 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.documentation; in
{
options = {
documentation = {
enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to install documentation of packages from
<option>environment.systemPackages</option> into the generated system path.
'';
};
man.enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to install manual pages and the <command>man</command> command.
This also includes "man" outputs.
'';
};
doc.enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to install documentation distributed in packages' <literal>/share/doc</literal>.
Usually plain text and/or HTML.
This also includes "doc" outputs.
'';
};
info.enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to install info pages and the <command>info</command> command.
This also includes "info" outputs.
'';
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.man.enable {
environment.systemPackages = [ pkgs.man-db ];
environment.pathsToLink = [ "/share/man" ];
environment.extraOutputsToInstall = [ "man" ];
})
(mkIf cfg.doc.enable {
# TODO(@oxij): put it here and remove from profiles?
# environment.systemPackages = [ pkgs.w3m ]; # w3m-nox?
environment.pathsToLink = [ "/share/doc" ];
environment.extraOutputsToInstall = [ "doc" ];
})
(mkIf cfg.info.enable {
environment.systemPackages = [ pkgs.texinfoInteractive ];
environment.pathsToLink = [ "/share/info" ];
environment.extraOutputsToInstall = [ "info" ];
})
]);
}

View File

@ -16,6 +16,21 @@ in
options.system = { options.system = {
# XXX: Reintroduce old options to make nixops before 1.6 able to evaluate configurations
# XXX: Remove after nixops has been bumped to a compatible version
nixosVersion = mkOption {
readOnly = true;
internal = true;
type = types.str;
default = config.system.nixos.version;
};
nixosVersionSuffix = mkOption {
readOnly = true;
internal = true;
type = types.str;
default = config.system.nixos.versionSuffix;
};
nixos.version = mkOption { nixos.version = mkOption {
internal = true; internal = true;
type = types.str; type = types.str;

View File

@ -58,6 +58,7 @@
./installer/tools/tools.nix ./installer/tools/tools.nix
./misc/assertions.nix ./misc/assertions.nix
./misc/crashdump.nix ./misc/crashdump.nix
./misc/documentation.nix
./misc/extra-arguments.nix ./misc/extra-arguments.nix
./misc/ids.nix ./misc/ids.nix
./misc/lib.nix ./misc/lib.nix
@ -85,12 +86,10 @@
./programs/freetds.nix ./programs/freetds.nix
./programs/gnupg.nix ./programs/gnupg.nix
./programs/gphoto2.nix ./programs/gphoto2.nix
./programs/info.nix
./programs/java.nix ./programs/java.nix
./programs/kbdlight.nix ./programs/kbdlight.nix
./programs/less.nix ./programs/less.nix
./programs/light.nix ./programs/light.nix
./programs/man.nix
./programs/mosh.nix ./programs/mosh.nix
./programs/mtr.nix ./programs/mtr.nix
./programs/nano.nix ./programs/nano.nix
@ -323,8 +322,9 @@
./services/misc/geoip-updater.nix ./services/misc/geoip-updater.nix
./services/misc/gitea.nix ./services/misc/gitea.nix
#./services/misc/gitit.nix #./services/misc/gitit.nix
./services/misc/gitlab.nix #./services/misc/gitlab.nix
./services/misc/gitolite.nix ./services/misc/gitolite.nix
./services/misc/gitweb.nix
./services/misc/gogs.nix ./services/misc/gogs.nix
./services/misc/gollum.nix ./services/misc/gollum.nix
./services/misc/gpsd.nix ./services/misc/gpsd.nix
@ -650,6 +650,7 @@
./services/web-servers/mighttpd2.nix ./services/web-servers/mighttpd2.nix
./services/web-servers/minio.nix ./services/web-servers/minio.nix
./services/web-servers/nginx/default.nix ./services/web-servers/nginx/default.nix
./services/web-servers/nginx/gitweb.nix
./services/web-servers/phpfpm/default.nix ./services/web-servers/phpfpm/default.nix
./services/web-servers/shellinabox.nix ./services/web-servers/shellinabox.nix
./services/web-servers/tomcat.nix ./services/web-servers/tomcat.nix

View File

@ -14,9 +14,7 @@ in {
]; ];
# Create the tarball # Create the tarball
system.build.tarball = import ../../lib/make-system-tarball.nix { system.build.tarball = pkgs.callPackage ../../lib/make-system-tarball.nix {
inherit (pkgs) stdenv perl xz pathsFromGraph;
contents = []; contents = [];
extraArgs = "--owner=0"; extraArgs = "--owner=0";

View File

@ -10,10 +10,9 @@ with lib;
# This isn't perfect, but let's expect the user specifies an UTF-8 defaultLocale # This isn't perfect, but let's expect the user specifies an UTF-8 defaultLocale
i18n.supportedLocales = [ (config.i18n.defaultLocale + "/UTF-8") ]; i18n.supportedLocales = [ (config.i18n.defaultLocale + "/UTF-8") ];
services.nixosManual.enable = mkDefault false;
programs.man.enable = mkDefault false; documentation.enable = mkDefault false;
programs.info.enable = mkDefault false; services.nixosManual.enable = mkDefault false;
sound.enable = mkDefault false; sound.enable = mkDefault false;
} }

View File

@ -1,30 +0,0 @@
{ config, lib, pkgs, ... }:
with lib;
{
options = {
programs.info.enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to enable info pages and the <command>info</command> command.
'';
};
};
config = mkIf config.programs.info.enable {
environment.systemPackages = [ pkgs.texinfoInteractive ];
environment.pathsToLink = [ "/info" "/share/info" ];
environment.extraOutputsToInstall = [ "info" ];
};
}

View File

@ -1,31 +0,0 @@
{ config, lib, pkgs, ... }:
with lib;
{
options = {
programs.man.enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to enable manual pages and the <command>man</command> command.
This also includes "man" outputs of all <literal>systemPackages</literal>.
'';
};
};
config = mkIf config.programs.man.enable {
environment.systemPackages = [ pkgs.man-db ];
environment.pathsToLink = [ "/share/man" ];
environment.extraOutputsToInstall = [ "man" ];
};
}

View File

@ -4,6 +4,7 @@ with lib;
{ {
imports = [ imports = [
(mkRenamedOptionModule [ "dysnomia" ] [ "services" "dysnomia" ])
(mkRenamedOptionModule [ "environment" "x11Packages" ] [ "environment" "systemPackages" ]) (mkRenamedOptionModule [ "environment" "x11Packages" ] [ "environment" "systemPackages" ])
(mkRenamedOptionModule [ "environment" "enableBashCompletion" ] [ "programs" "bash" "enableCompletion" ]) (mkRenamedOptionModule [ "environment" "enableBashCompletion" ] [ "programs" "bash" "enableCompletion" ])
(mkRenamedOptionModule [ "environment" "nix" ] [ "nix" "package" ]) (mkRenamedOptionModule [ "environment" "nix" ] [ "nix" "package" ])
@ -196,13 +197,17 @@ with lib;
(mkRenamedOptionModule [ "virtualization" "growPartition" ] [ "boot" "growPartition" ]) (mkRenamedOptionModule [ "virtualization" "growPartition" ] [ "boot" "growPartition" ])
# misc/version.nix # misc/version.nix
(mkRenamedOptionModule [ "config" "system" "nixosVersion" ] [ "config" "system" "nixos" "version" ]) #(mkRenamedOptionModule [ "config" "system" "nixosVersion" ] [ "config" "system" "nixos" "version" ])
(mkRenamedOptionModule [ "config" "system" "nixosRelease" ] [ "config" "system" "nixos" "release" ]) (mkRenamedOptionModule [ "config" "system" "nixosRelease" ] [ "config" "system" "nixos" "release" ])
(mkRenamedOptionModule [ "config" "system" "nixosVersionSuffix" ] [ "config" "system" "nixos" "versionSuffix" ]) #(mkRenamedOptionModule [ "config" "system" "nixosVersionSuffix" ] [ "config" "system" "nixos" "versionSuffix" ])
(mkRenamedOptionModule [ "config" "system" "nixosRevision" ] [ "config" "system" "nixos" "revision" ]) (mkRenamedOptionModule [ "config" "system" "nixosRevision" ] [ "config" "system" "nixos" "revision" ])
(mkRenamedOptionModule [ "config" "system" "nixosCodeName" ] [ "config" "system" "nixos" "codeName" ]) (mkRenamedOptionModule [ "config" "system" "nixosCodeName" ] [ "config" "system" "nixos" "codeName" ])
(mkRenamedOptionModule [ "config" "system" "nixosLabel" ] [ "config" "system" "nixos" "label" ]) (mkRenamedOptionModule [ "config" "system" "nixosLabel" ] [ "config" "system" "nixos" "label" ])
# Users
(mkAliasOptionModule [ "users" "extraUsers" ] [ "users" "users" ])
(mkAliasOptionModule [ "users" "extraGroups" ] [ "users" "groups" ])
# Options that are obsolete and have no replacement. # Options that are obsolete and have no replacement.
(mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ] "") (mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ] "")
(mkRemovedOptionModule [ "programs" "bash" "enable" ] "") (mkRemovedOptionModule [ "programs" "bash" "enable" ] "")
@ -240,6 +245,10 @@ with lib;
# Xen # Xen
(mkRenamedOptionModule [ "virtualisation" "xen" "qemu-package" ] [ "virtualisation" "xen" "package-qemu" ]) (mkRenamedOptionModule [ "virtualisation" "xen" "qemu-package" ] [ "virtualisation" "xen" "package-qemu" ])
(mkRenamedOptionModule [ "programs" "info" "enable" ] [ "documentation" "info" "enable" ])
(mkRenamedOptionModule [ "programs" "man" "enable" ] [ "documentation" "man" "enable" ])
] ++ (flip map [ "blackboxExporter" "collectdExporter" "fritzboxExporter" ] ++ (flip map [ "blackboxExporter" "collectdExporter" "fritzboxExporter"
"jsonExporter" "minioExporter" "nginxExporter" "nodeExporter" "jsonExporter" "minioExporter" "nginxExporter" "nodeExporter"
"snmpExporter" "unifiExporter" "varnishExporter" ] "snmpExporter" "unifiExporter" "varnishExporter" ]

View File

@ -766,7 +766,7 @@ in {
rm /opt/cni/bin/* || true rm /opt/cni/bin/* || true
${concatMapStrings (package: '' ${concatMapStrings (package: ''
echo "Linking cni package: ${package}" echo "Linking cni package: ${package}"
ln -fs ${package.plugins}/* /opt/cni/bin ln -fs ${package}/bin/* /opt/cni/bin
'') cfg.kubelet.cni.packages} '') cfg.kubelet.cni.packages}
''; '';
serviceConfig = { serviceConfig = {
@ -828,7 +828,7 @@ in {
}; };
# Allways include cni plugins # Allways include cni plugins
services.kubernetes.kubelet.cni.packages = [pkgs.cni]; services.kubernetes.kubelet.cni.packages = [pkgs.cni-plugins];
boot.kernelModules = ["br_netfilter"]; boot.kernelModules = ["br_netfilter"];

View File

@ -30,6 +30,7 @@ let
'' ''
default_internal_user = ${cfg.user} default_internal_user = ${cfg.user}
default_internal_group = ${cfg.group}
${optionalString (cfg.mailUser != null) "mail_uid = ${cfg.mailUser}"} ${optionalString (cfg.mailUser != null) "mail_uid = ${cfg.mailUser}"}
${optionalString (cfg.mailGroup != null) "mail_gid = ${cfg.mailGroup}"} ${optionalString (cfg.mailGroup != null) "mail_gid = ${cfg.mailGroup}"}

View File

@ -57,7 +57,7 @@ in
###### implementation ###### implementation
config = mkIf cfg.enable { config = mkIf cfg.enable {
dysnomia.enable = true; services.dysnomia.enable = true;
environment.systemPackages = [ pkgs.disnix ] ++ optional cfg.useWebServiceInterface pkgs.DisnixWebService; environment.systemPackages = [ pkgs.disnix ] ++ optional cfg.useWebServiceInterface pkgs.DisnixWebService;

View File

@ -3,8 +3,8 @@
with lib; with lib;
let let
cfg = config.dysnomia; cfg = config.services.dysnomia;
printProperties = properties: printProperties = properties:
concatMapStrings (propertyName: concatMapStrings (propertyName:
let let
@ -13,7 +13,7 @@ let
if isList property then "${propertyName}=(${lib.concatMapStrings (elem: "\"${toString elem}\" ") (properties."${propertyName}")})\n" if isList property then "${propertyName}=(${lib.concatMapStrings (elem: "\"${toString elem}\" ") (properties."${propertyName}")})\n"
else "${propertyName}=\"${toString property}\"\n" else "${propertyName}=\"${toString property}\"\n"
) (builtins.attrNames properties); ) (builtins.attrNames properties);
properties = pkgs.stdenv.mkDerivation { properties = pkgs.stdenv.mkDerivation {
name = "dysnomia-properties"; name = "dysnomia-properties";
buildCommand = '' buildCommand = ''
@ -22,13 +22,13 @@ let
EOF EOF
''; '';
}; };
containersDir = pkgs.stdenv.mkDerivation { containersDir = pkgs.stdenv.mkDerivation {
name = "dysnomia-containers"; name = "dysnomia-containers";
buildCommand = '' buildCommand = ''
mkdir -p $out mkdir -p $out
cd $out cd $out
${concatMapStrings (containerName: ${concatMapStrings (containerName:
let let
containerProperties = cfg.containers."${containerName}"; containerProperties = cfg.containers."${containerName}";
@ -42,11 +42,11 @@ let
) (builtins.attrNames cfg.containers)} ) (builtins.attrNames cfg.containers)}
''; '';
}; };
linkMutableComponents = {containerName}: linkMutableComponents = {containerName}:
'' ''
mkdir ${containerName} mkdir ${containerName}
${concatMapStrings (componentName: ${concatMapStrings (componentName:
let let
component = cfg.components."${containerName}"."${componentName}"; component = cfg.components."${containerName}"."${componentName}";
@ -54,13 +54,13 @@ let
"ln -s ${component} ${containerName}/${componentName}\n" "ln -s ${component} ${containerName}/${componentName}\n"
) (builtins.attrNames (cfg.components."${containerName}" or {}))} ) (builtins.attrNames (cfg.components."${containerName}" or {}))}
''; '';
componentsDir = pkgs.stdenv.mkDerivation { componentsDir = pkgs.stdenv.mkDerivation {
name = "dysnomia-components"; name = "dysnomia-components";
buildCommand = '' buildCommand = ''
mkdir -p $out mkdir -p $out
cd $out cd $out
${concatMapStrings (containerName: ${concatMapStrings (containerName:
let let
components = cfg.components."${containerName}"; components = cfg.components."${containerName}";
@ -72,59 +72,59 @@ let
in in
{ {
options = { options = {
dysnomia = { services.dysnomia = {
enable = mkOption { enable = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = "Whether to enable Dysnomia"; description = "Whether to enable Dysnomia";
}; };
enableAuthentication = mkOption { enableAuthentication = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = "Whether to publish privacy-sensitive authentication credentials"; description = "Whether to publish privacy-sensitive authentication credentials";
}; };
package = mkOption { package = mkOption {
type = types.path; type = types.path;
description = "The Dysnomia package"; description = "The Dysnomia package";
}; };
properties = mkOption { properties = mkOption {
description = "An attribute set in which each attribute represents a machine property. Optionally, these values can be shell substitutions."; description = "An attribute set in which each attribute represents a machine property. Optionally, these values can be shell substitutions.";
default = {}; default = {};
}; };
containers = mkOption { containers = mkOption {
description = "An attribute set in which each key represents a container and each value an attribute set providing its configuration properties"; description = "An attribute set in which each key represents a container and each value an attribute set providing its configuration properties";
default = {}; default = {};
}; };
components = mkOption { components = mkOption {
description = "An atttribute set in which each key represents a container and each value an attribute set in which each key represents a component and each value a derivation constructing its initial state"; description = "An atttribute set in which each key represents a container and each value an attribute set in which each key represents a component and each value a derivation constructing its initial state";
default = {}; default = {};
}; };
extraContainerProperties = mkOption { extraContainerProperties = mkOption {
description = "An attribute set providing additional container settings in addition to the default properties"; description = "An attribute set providing additional container settings in addition to the default properties";
default = {}; default = {};
}; };
extraContainerPaths = mkOption { extraContainerPaths = mkOption {
description = "A list of paths containing additional container configurations that are added to the search folders"; description = "A list of paths containing additional container configurations that are added to the search folders";
default = []; default = [];
}; };
extraModulePaths = mkOption { extraModulePaths = mkOption {
description = "A list of paths containing additional modules that are added to the search folders"; description = "A list of paths containing additional modules that are added to the search folders";
default = []; default = [];
}; };
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.etc = { environment.etc = {
"dysnomia/containers" = { "dysnomia/containers" = {
source = containersDir; source = containersDir;
@ -136,16 +136,16 @@ in
source = properties; source = properties;
}; };
}; };
environment.variables = { environment.variables = {
DYSNOMIA_STATEDIR = "/var/state/dysnomia-nixos"; DYSNOMIA_STATEDIR = "/var/state/dysnomia-nixos";
DYSNOMIA_CONTAINERS_PATH = "${lib.concatMapStrings (containerPath: "${containerPath}:") cfg.extraContainerPaths}/etc/dysnomia/containers"; DYSNOMIA_CONTAINERS_PATH = "${lib.concatMapStrings (containerPath: "${containerPath}:") cfg.extraContainerPaths}/etc/dysnomia/containers";
DYSNOMIA_MODULES_PATH = "${lib.concatMapStrings (modulePath: "${modulePath}:") cfg.extraModulePaths}/etc/dysnomia/modules"; DYSNOMIA_MODULES_PATH = "${lib.concatMapStrings (modulePath: "${modulePath}:") cfg.extraModulePaths}/etc/dysnomia/modules";
}; };
environment.systemPackages = [ cfg.package ]; environment.systemPackages = [ cfg.package ];
dysnomia.package = pkgs.dysnomia.override (origArgs: { services.dysnomia.package = pkgs.dysnomia.override (origArgs: {
enableApacheWebApplication = config.services.httpd.enable; enableApacheWebApplication = config.services.httpd.enable;
enableAxis2WebService = config.services.tomcat.axis2.enable; enableAxis2WebService = config.services.tomcat.axis2.enable;
enableEjabberdDump = config.services.ejabberd.enable; enableEjabberdDump = config.services.ejabberd.enable;
@ -155,8 +155,8 @@ in
enableTomcatWebApplication = config.services.tomcat.enable; enableTomcatWebApplication = config.services.tomcat.enable;
enableMongoDatabase = config.services.mongodb.enable; enableMongoDatabase = config.services.mongodb.enable;
}); });
dysnomia.properties = { services.dysnomia.properties = {
hostname = config.networking.hostName; hostname = config.networking.hostName;
system = if config.nixpkgs.system == "" then builtins.currentSystem else config.nixpkgs.system; system = if config.nixpkgs.system == "" then builtins.currentSystem else config.nixpkgs.system;
@ -173,8 +173,8 @@ in
''; '';
}}"); }}");
}; };
dysnomia.containers = lib.recursiveUpdate ({ services.dysnomia.containers = lib.recursiveUpdate ({
process = {}; process = {};
wrapper = {}; wrapper = {};
} }

View File

@ -0,0 +1,51 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.gitweb;
in
{
options.services.gitweb = {
projectroot = mkOption {
default = "/srv/git";
type = types.path;
description = ''
Path to git projects (bare repositories) that should be served by
gitweb. Must not end with a slash.
'';
};
extraConfig = mkOption {
default = "";
type = types.lines;
description = ''
Verbatim configuration text appended to the generated gitweb.conf file.
'';
example = ''
$feature{'highlight'}{'default'} = [1];
$feature{'ctags'}{'default'} = [1];
$feature{'avatar'}{'default'} = ['gravatar'];
'';
};
gitwebConfigFile = mkOption {
default = pkgs.writeText "gitweb.conf" ''
# path to git projects (<project>.git)
$projectroot = "${cfg.projectroot}";
$highlight_bin = "${pkgs.highlight}/bin/highlight";
${cfg.extraConfig}
'';
type = types.path;
readOnly = true;
internal = true;
};
};
meta.maintainers = with maintainers; [ gnidorah ];
}

View File

@ -35,6 +35,9 @@ let
SECRET_KEY = #secretkey# SECRET_KEY = #secretkey#
INSTALL_LOCK = true INSTALL_LOCK = true
[log]
ROOT_PATH = ${cfg.stateDir}/log
${cfg.extraConfig} ${cfg.extraConfig}
''; '';
in in

View File

@ -439,17 +439,18 @@ in
services.xserver.displayManager.hiddenUsers = map ({ name, ... }: name) nixbldUsers; services.xserver.displayManager.hiddenUsers = map ({ name, ... }: name) nixbldUsers;
# FIXME: use systemd-tmpfiles to create Nix directories.
system.activationScripts.nix = stringAfter [ "etc" "users" ] system.activationScripts.nix = stringAfter [ "etc" "users" ]
'' ''
# Nix initialisation. # Nix initialisation.
mkdir -m 0755 -p \ install -m 0755 -d \
/nix/var/nix/gcroots \ /nix/var/nix/gcroots \
/nix/var/nix/temproots \ /nix/var/nix/temproots \
/nix/var/nix/userpool \ /nix/var/nix/userpool \
/nix/var/nix/profiles \ /nix/var/nix/profiles \
/nix/var/nix/db \ /nix/var/nix/db \
/nix/var/log/nix/drvs /nix/var/log/nix/drvs
mkdir -m 1777 -p \ install -m 1777 -d \
/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

View File

@ -112,10 +112,10 @@ in
system.build.manual = manual; system.build.manual = manual;
environment.systemPackages = environment.systemPackages = []
[ manual.manual helpScript ] ++ optionals config.services.xserver.enable [ desktopItem pkgs.nixos-icons ]
++ optionals config.services.xserver.enable [desktopItem pkgs.nixos-icons] ++ optional config.documentation.man.enable manual.manpages
++ optional config.programs.man.enable manual.manpages; ++ optionals config.documentation.doc.enable [ manual.manual helpScript ];
boot.extraTTYs = mkIf cfg.showManual ["tty${toString cfg.ttyNumber}"]; boot.extraTTYs = mkIf cfg.showManual ["tty${toString cfg.ttyNumber}"];

View File

@ -6,6 +6,8 @@ let
cfg = config.services.parsoid; cfg = config.services.parsoid;
parsoid = pkgs.nodePackages."parsoid-git://github.com/abbradar/parsoid#stable";
confTree = { confTree = {
worker_heartbeat_timeout = 300000; worker_heartbeat_timeout = 300000;
logging = { level = "info"; }; logging = { level = "info"; };
@ -93,7 +95,7 @@ in
after = [ "network.target" ]; after = [ "network.target" ];
serviceConfig = { serviceConfig = {
User = "nobody"; User = "nobody";
ExecStart = "${pkgs.nodePackages.parsoid}/lib/node_modules/parsoid/bin/server.js -c ${confFile} -n ${toString cfg.workers}"; ExecStart = "${parsoid}/lib/node_modules/parsoid/bin/server.js -c ${confFile} -n ${toString cfg.workers}";
}; };
}; };

View File

@ -26,16 +26,10 @@ in
environment.systemPackages = [ pkgs.monit ]; environment.systemPackages = [ pkgs.monit ];
environment.etc = [ environment.etc."monitrc" = {
{ text = config.services.monit.config;
source = pkgs.writeTextFile { mode = "0400";
name = "monitrc"; };
text = config.services.monit.config;
};
target = "monitrc";
mode = "0400";
}
];
systemd.services.monit = { systemd.services.monit = {
description = "Pro-active monitoring utility for unix systems"; description = "Pro-active monitoring utility for unix systems";
@ -48,6 +42,8 @@ in
KillMode = "process"; KillMode = "process";
Restart = "always"; Restart = "always";
}; };
restartTriggers = [ config.environment.etc."monitrc".source ];
}; };
}; };
} }

View File

@ -36,6 +36,7 @@ let
preStart = '' preStart = ''
mkdir -m 755 -p ${cfg.stateDir} mkdir -m 755 -p ${cfg.stateDir}
chown dhcpd:nogroup ${cfg.stateDir}
touch ${cfg.stateDir}/dhcpd.leases touch ${cfg.stateDir}/dhcpd.leases
''; '';

View File

@ -44,9 +44,9 @@ in
path = [ pkgs.iptables pkgs.tcpcrypt pkgs.procps ]; path = [ pkgs.iptables pkgs.tcpcrypt pkgs.procps ];
preStart = '' preStart = ''
mkdir -p /var/run/tcpcryptd mkdir -p /run/tcpcryptd
chown tcpcryptd /var/run/tcpcryptd chown tcpcryptd /run/tcpcryptd
sysctl -n net.ipv4.tcp_ecn >/run/pre-tcpcrypt-ecn-state sysctl -n net.ipv4.tcp_ecn > /run/tcpcryptd/pre-tcpcrypt-ecn-state
sysctl -w net.ipv4.tcp_ecn=0 sysctl -w net.ipv4.tcp_ecn=0
iptables -t raw -N nixos-tcpcrypt iptables -t raw -N nixos-tcpcrypt
@ -61,8 +61,8 @@ in
script = "tcpcryptd -x 0x10"; script = "tcpcryptd -x 0x10";
postStop = '' postStop = ''
if [ -f /run/pre-tcpcrypt-ecn-state ]; then if [ -f /run/tcpcryptd/pre-tcpcrypt-ecn-state ]; then
sysctl -w net.ipv4.tcp_ecn=$(cat /run/pre-tcpcrypt-ecn-state) sysctl -w net.ipv4.tcp_ecn=$(cat /run/tcpcryptd/pre-tcpcrypt-ecn-state)
fi fi
iptables -t mangle -D POSTROUTING -j nixos-tcpcrypt || true iptables -t mangle -D POSTROUTING -j nixos-tcpcrypt || true

View File

@ -112,7 +112,7 @@ in
mkdir -m 0755 -p ${stateDir}/dev/ mkdir -m 0755 -p ${stateDir}/dev/
cp ${confFile} ${stateDir}/unbound.conf cp ${confFile} ${stateDir}/unbound.conf
${optionalString cfg.enableRootTrustAnchor '' ${optionalString cfg.enableRootTrustAnchor ''
${pkgs.unbound}/bin/unbound-anchor -a ${rootTrustAnchorFile} ${pkgs.unbound}/bin/unbound-anchor -a ${rootTrustAnchorFile} || echo "Root anchor updated!"
chown unbound ${stateDir} ${rootTrustAnchorFile} chown unbound ${stateDir} ${rootTrustAnchorFile}
''} ''}
touch ${stateDir}/dev/random touch ${stateDir}/dev/random

View File

@ -7,6 +7,16 @@ let
in in
{ {
options.services.zerotierone.enable = mkEnableOption "ZeroTierOne"; options.services.zerotierone.enable = mkEnableOption "ZeroTierOne";
options.services.zerotierone.joinNetworks = mkOption {
default = [];
example = [ "a8a2c3c10c1a68de" ];
type = types.listOf types.str;
description = ''
List of ZeroTier Network IDs to join on startup
'';
};
options.services.zerotierone.package = mkOption { options.services.zerotierone.package = mkOption {
default = pkgs.zerotierone; default = pkgs.zerotierone;
defaultText = "pkgs.zerotierone"; defaultText = "pkgs.zerotierone";
@ -22,12 +32,13 @@ in
path = [ cfg.package ]; path = [ cfg.package ];
after = [ "network.target" ]; after = [ "network.target" ];
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
preStart = preStart = ''
'' mkdir -p /var/lib/zerotier-one/networks.d
mkdir -p /var/lib/zerotier-one
chmod 700 /var/lib/zerotier-one chmod 700 /var/lib/zerotier-one
chown -R root:root /var/lib/zerotier-one chown -R root:root /var/lib/zerotier-one
''; '' + (concatMapStrings (netId: ''
touch "/var/lib/zerotier-one/networks.d/${netId}.conf"
'') cfg.joinNetworks);
serviceConfig = { serviceConfig = {
ExecStart = "${cfg.package}/bin/zerotier-one"; ExecStart = "${cfg.package}/bin/zerotier-one";
Restart = "always"; Restart = "always";
@ -38,6 +49,9 @@ in
# ZeroTier does not issue DHCP leases, but some strangers might... # ZeroTier does not issue DHCP leases, but some strangers might...
networking.dhcpcd.denyInterfaces = [ "zt0" ]; networking.dhcpcd.denyInterfaces = [ "zt0" ];
# ZeroTier receives UDP transmissions on port 9993 by default
networking.firewall.allowedUDPPorts = [ 9993 ];
environment.systemPackages = [ cfg.package ]; environment.systemPackages = [ cfg.package ];
}; };
} }

View File

@ -21,6 +21,19 @@ let
# for users in group "transmission" to have access to torrents # for users in group "transmission" to have access to torrents
fullSettings = { umask = 2; download-dir = downloadDir; incomplete-dir = incompleteDir; } // cfg.settings; fullSettings = { umask = 2; download-dir = downloadDir; incomplete-dir = incompleteDir; } // cfg.settings;
# Directories transmission expects to exist and be ug+rwx.
directoriesToManage = [ homeDir settingsDir fullSettings.download-dir fullSettings.incomplete-dir ];
preStart = pkgs.writeScript "transmission-pre-start" ''
#!${pkgs.runtimeShell}
set -ex
for DIR in ${escapeShellArgs directoriesToManage}; do
mkdir -p "$DIR"
chmod 770 "$DIR"
done
cp -f ${settingsFile} ${settingsDir}/settings.json
'';
in in
{ {
options = { options = {
@ -59,8 +72,8 @@ in
time the service starts). String values must be quoted, integer and time the service starts). String values must be quoted, integer and
boolean values must not. boolean values must not.
See https://trac.transmissionbt.com/wiki/EditConfigFiles for See https://github.com/transmission/transmission/wiki/Editing-Configuration-Files
documentation. for documentation.
''; '';
}; };
@ -89,9 +102,7 @@ in
# 1) Only the "transmission" user and group have access to torrents. # 1) Only the "transmission" user and group have access to torrents.
# 2) Optionally update/force specific fields into the configuration file. # 2) Optionally update/force specific fields into the configuration file.
serviceConfig.ExecStartPre = '' serviceConfig.ExecStartPre = preStart;
${pkgs.runtimeShell} -c "mkdir -p ${homeDir} ${settingsDir} ${fullSettings.download-dir} ${fullSettings.incomplete-dir} && chmod 770 ${homeDir} ${settingsDir} ${fullSettings.download-dir} ${fullSettings.incomplete-dir} && rm -f ${settingsDir}/settings.json && cp -f ${settingsFile} ${settingsDir}/settings.json"
'';
serviceConfig.ExecStart = "${pkgs.transmission}/bin/transmission-daemon -f --port ${toString config.services.transmission.port}"; serviceConfig.ExecStart = "${pkgs.transmission}/bin/transmission-daemon -f --port ${toString config.services.transmission.port}";
serviceConfig.ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; serviceConfig.ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
serviceConfig.User = "transmission"; serviceConfig.User = "transmission";

View File

@ -118,7 +118,7 @@ with lib;
default = []; default = [];
example = [ example = [
{ urlPath = "/foo/bar.png"; { urlPath = "/foo/bar.png";
files = "/home/eelco/some-file.png"; file = "/home/eelco/some-file.png";
} }
]; ];
description = '' description = ''

View File

@ -3,12 +3,7 @@
with lib; with lib;
let let
cfg = config.services.lighttpd.gitweb; cfg = config.services.gitweb;
gitwebConfigFile = pkgs.writeText "gitweb.conf" ''
# path to git projects (<project>.git)
$projectroot = "${cfg.projectroot}";
${cfg.extraConfig}
'';
in in
{ {
@ -23,26 +18,9 @@ in
''; '';
}; };
projectroot = mkOption {
default = "/srv/git";
type = types.path;
description = ''
Path to git projects (bare repositories) that should be served by
gitweb. Must not end with a slash.
'';
};
extraConfig = mkOption {
default = "";
type = types.lines;
description = ''
Verbatim configuration text appended to the generated gitweb.conf file.
'';
};
}; };
config = mkIf cfg.enable { config = mkIf config.services.lighttpd.gitweb.enable {
# declare module dependencies # declare module dependencies
services.lighttpd.enableModules = [ "mod_cgi" "mod_redirect" "mod_alias" "mod_setenv" ]; services.lighttpd.enableModules = [ "mod_cgi" "mod_redirect" "mod_alias" "mod_setenv" ];
@ -60,7 +38,7 @@ in
"/gitweb/" => "${pkgs.git}/share/gitweb/gitweb.cgi" "/gitweb/" => "${pkgs.git}/share/gitweb/gitweb.cgi"
) )
setenv.add-environment = ( setenv.add-environment = (
"GITWEB_CONFIG" => "${gitwebConfigFile}", "GITWEB_CONFIG" => "${cfg.gitwebConfigFile}",
"HOME" => "${cfg.projectroot}" "HOME" => "${cfg.projectroot}"
) )
} }

View File

@ -0,0 +1,59 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.gitweb;
in
{
options.services.nginx.gitweb = {
enable = mkOption {
default = false;
type = types.bool;
description = ''
If true, enable gitweb in nginx. Access it at http://yourserver/gitweb
'';
};
};
config = mkIf config.services.nginx.gitweb.enable {
systemd.services.gitweb = {
description = "GitWeb service";
script = "${pkgs.git}/share/gitweb/gitweb.cgi --fastcgi --nproc=1";
environment = {
FCGI_SOCKET_PATH = "/run/gitweb/gitweb.sock";
};
serviceConfig = {
User = "nginx";
Group = "nginx";
RuntimeDirectory = [ "gitweb" ];
};
wantedBy = [ "multi-user.target" ];
};
services.nginx = {
virtualHosts.default = {
locations."/gitweb/" = {
root = "${pkgs.git}/share";
tryFiles = "$uri @gitweb";
};
locations."@gitweb" = {
extraConfig = ''
include ${pkgs.nginx}/conf/fastcgi_params;
fastcgi_param GITWEB_CONFIG ${cfg.gitwebConfigFile};
fastcgi_pass unix:/run/gitweb/gitweb.sock;
'';
};
};
};
};
meta.maintainers = with maintainers; [ gnidorah ];
}

View File

@ -87,11 +87,11 @@ in
default = mkOption { default = mkOption {
type = types.str; type = types.str;
default = "none"; default = "";
example = "plasma5"; example = "none";
description = "Default desktop manager loaded if none have been chosen."; description = "Default desktop manager loaded if none have been chosen.";
apply = defaultDM: apply = defaultDM:
if defaultDM == "none" && cfg.session.list != [] then if defaultDM == "" && cfg.session.list != [] then
(head cfg.session.list).name (head cfg.session.list).name
else if any (w: w.name == defaultDM) cfg.session.list then else if any (w: w.name == defaultDM) cfg.session.list then
defaultDM defaultDM

View File

@ -61,6 +61,8 @@ in
environment.variables.GIO_EXTRA_MODULES = [ "${pkgs.gvfs}/lib/gio/modules" ]; environment.variables.GIO_EXTRA_MODULES = [ "${pkgs.gvfs}/lib/gio/modules" ];
services.upower.enable = config.powerManagement.enable;
}; };
} }

View File

@ -108,6 +108,8 @@ in
services.gnome3.gnome-keyring.enable = true; services.gnome3.gnome-keyring.enable = true;
services.upower.enable = config.powerManagement.enable; services.upower.enable = config.powerManagement.enable;
security.pam.services."mate-screensaver".unixAuth = true;
environment.pathsToLink = [ "/share" ]; environment.pathsToLink = [ "/share" ];
}; };

View File

@ -62,9 +62,7 @@ in
example = "wmii"; example = "wmii";
description = "Default window manager loaded if none have been chosen."; description = "Default window manager loaded if none have been chosen.";
apply = defaultWM: apply = defaultWM:
if defaultWM == "none" && cfg.session != [] then if any (w: w.name == defaultWM) cfg.session then
(head cfg.session).name
else if any (w: w.name == defaultWM) cfg.session then
defaultWM defaultWM
else else
throw "Default window manager (${defaultWM}) not found."; throw "Default window manager (${defaultWM}) not found.";

View File

@ -161,15 +161,6 @@ in
''; '';
}; };
plainX = mkOption {
type = types.bool;
default = false;
description = ''
Whether the X11 session can be plain (without DM/WM) and
the Xsession script will be used as fallback or not.
'';
};
autorun = mkOption { autorun = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
@ -561,11 +552,6 @@ in
+ "${toString (length primaryHeads)} heads set to primary: " + "${toString (length primaryHeads)} heads set to primary: "
+ concatMapStringsSep ", " (x: x.output) primaryHeads; + concatMapStringsSep ", " (x: x.output) primaryHeads;
}) })
{ assertion = cfg.desktopManager.default == "none" && cfg.windowManager.default == "none" -> cfg.plainX;
message = "Either the desktop manager or the window manager shouldn't be `none`! "
+ "To explicitly allow this, you can also set `services.xserver.plainX` to `true`. "
+ "The `default` value looks for enabled WMs/DMs and select the first one.";
}
]; ];
environment.etc = environment.etc =

View File

@ -43,7 +43,7 @@ if [ ! -e /proc/1 ]; then
local options="$3" local options="$3"
local fsType="$4" local fsType="$4"
mkdir -m 0755 -p "$mountPoint" install -m 0755 -d "$mountPoint"
mount -n -t "$fsType" -o "$options" "$device" "$mountPoint" mount -n -t "$fsType" -o "$options" "$device" "$mountPoint"
} }
source @earlyMountScript@ source @earlyMountScript@
@ -71,7 +71,7 @@ fi
# Provide a /etc/mtab. # Provide a /etc/mtab.
mkdir -m 0755 -p /etc install -m 0755 -d /etc
test -e /etc/fstab || touch /etc/fstab # to shut up mount test -e /etc/fstab || touch /etc/fstab # to shut up mount
rm -f /etc/mtab* # not that we care about stale locks rm -f /etc/mtab* # not that we care about stale locks
ln -s /proc/mounts /etc/mtab ln -s /proc/mounts /etc/mtab
@ -79,8 +79,8 @@ ln -s /proc/mounts /etc/mtab
# More special file systems, initialise required directories. # More special file systems, initialise required directories.
[ -e /proc/bus/usb ] && mount -t usbfs usbfs /proc/bus/usb # UML doesn't have USB by default [ -e /proc/bus/usb ] && mount -t usbfs usbfs /proc/bus/usb # UML doesn't have USB by default
mkdir -m 01777 -p /tmp install -m 01777 -d /tmp
mkdir -m 0755 -p /var/{log,lib,db} /nix/var /etc/nixos/ \ install -m 0755 -d /var/{log,lib,db} /nix/var /etc/nixos/ \
/run/lock /home /bin # for the /bin/sh symlink /run/lock /home /bin # for the /bin/sh symlink

View File

@ -68,8 +68,7 @@ let
(hasAttr dev cfg.macvlans) || (hasAttr dev cfg.macvlans) ||
(hasAttr dev cfg.sits) || (hasAttr dev cfg.sits) ||
(hasAttr dev cfg.vlans) || (hasAttr dev cfg.vlans) ||
(hasAttr dev cfg.vswitches) || (hasAttr dev cfg.vswitches)
(hasAttr dev cfg.wlanInterfaces)
then [ "${dev}-netdev.service" ] then [ "${dev}-netdev.service" ]
else optional (dev != null && dev != "lo" && !config.boot.isContainer) (subsystemDevice dev); else optional (dev != null && dev != "lo" && !config.boot.isContainer) (subsystemDevice dev);

View File

@ -62,35 +62,6 @@ let
then mapAttrsToList (n: v: v//{_iName=n;}) (filterAttrs (n: _: n==device) interfaces) ++ mapAttrsToList (n: v: v//{_iName=n;}) (filterAttrs (n: _: n!=device) interfaces) then mapAttrsToList (n: v: v//{_iName=n;}) (filterAttrs (n: _: n==device) interfaces) ++ mapAttrsToList (n: v: v//{_iName=n;}) (filterAttrs (n: _: n!=device) interfaces)
else mapAttrsToList (n: v: v // {_iName = n;}) interfaces; else mapAttrsToList (n: v: v // {_iName = n;}) interfaces;
# udev script that configures a physical wlan device and adds virtual interfaces
wlanDeviceUdevScript = device: interfaceList: pkgs.writeScript "wlan-${device}-udev-script" ''
#!${pkgs.runtimeShell}
# Change the wireless phy device to a predictable name.
if [ -e "/sys/class/net/${device}/phy80211/name" ]; then
${pkgs.iw}/bin/iw phy `${pkgs.coreutils}/bin/cat /sys/class/net/${device}/phy80211/name` set name ${device} || true
fi
# Crate new, virtual interfaces and configure them at the same time
${flip concatMapStrings (drop 1 interfaceList) (i: ''
${pkgs.iw}/bin/iw dev ${device} interface add ${i._iName} type ${i.type} \
${optionalString (i.type == "mesh" && i.meshID != null) "mesh_id ${i.meshID}"} \
${optionalString (i.type == "monitor" && i.flags != null) "flags ${i.flags}"} \
${optionalString (i.type == "managed" && i.fourAddr != null) "4addr ${if i.fourAddr then "on" else "off"}"} \
${optionalString (i.mac != null) "addr ${i.mac}"}
'')}
# Reconfigure and rename the default interface that already exists
${flip concatMapStrings (take 1 interfaceList) (i: ''
${pkgs.iw}/bin/iw dev ${device} set type ${i.type}
${optionalString (i.type == "mesh" && i.meshID != null) "${pkgs.iw}/bin/iw dev ${device} set meshid ${i.meshID}"}
${optionalString (i.type == "monitor" && i.flags != null) "${pkgs.iw}/bin/iw dev ${device} set monitor ${i.flags}"}
${optionalString (i.type == "managed" && i.fourAddr != null) "${pkgs.iw}/bin/iw dev ${device} set 4addr ${if i.fourAddr then "on" else "off"}"}
${optionalString (i.mac != null) "${pkgs.iproute}/bin/ip link set dev ${device} address ${i.mac}"}
${optionalString (device != i._iName) "${pkgs.iproute}/bin/ip link set dev ${device} name ${i._iName}"}
'')}
'';
# We must escape interfaces due to the systemd interpretation # We must escape interfaces due to the systemd interpretation
subsystemDevice = interface: subsystemDevice = interface:
"sys-subsystem-net-devices-${escapeSystemdPath interface}.device"; "sys-subsystem-net-devices-${escapeSystemdPath interface}.device";

View File

@ -240,5 +240,22 @@ let self = {
"17.09".sa-east-1.hvm-ebs = "ami-4762202b"; "17.09".sa-east-1.hvm-ebs = "ami-4762202b";
"17.09".ap-south-1.hvm-ebs = "ami-4e376021"; "17.09".ap-south-1.hvm-ebs = "ami-4e376021";
latest = self."17.09"; # 18.03.131792.becbe4dbe16
"18.03".eu-west-1.hvm-ebs = "ami-cda4fab4";
"18.03".eu-west-2.hvm-ebs = "ami-d96786be";
"18.03".eu-west-3.hvm-ebs = "ami-6b0cba16";
"18.03".eu-central-1.hvm-ebs = "ami-5e2b75b5";
"18.03".us-east-1.hvm-ebs = "ami-d464cba9";
"18.03".us-east-2.hvm-ebs = "ami-fd221298";
"18.03".us-west-1.hvm-ebs = "ami-ff0d1d9f";
"18.03".us-west-2.hvm-ebs = "ami-c05c3bb8";
"18.03".ca-central-1.hvm-ebs = "ami-cc72f4a8";
"18.03".ap-southeast-1.hvm-ebs = "ami-b61633ca";
"18.03".ap-southeast-2.hvm-ebs = "ami-530fc131";
"18.03".ap-northeast-1.hvm-ebs = "ami-90d6c0ec";
"18.03".ap-northeast-2.hvm-ebs = "ami-a1248bcf";
"18.03".sa-east-1.hvm-ebs = "ami-b090c6dc";
"18.03".ap-south-1.hvm-ebs = "ami-32c9ec5d";
latest = self."18.03";
}; in self }; in self

View File

@ -2,7 +2,7 @@
with lib; with lib;
let let
diskSize = 1024; # MB diskSize = 1536; # MB
gce = pkgs.google-compute-engine; gce = pkgs.google-compute-engine;
in in
{ {
@ -57,6 +57,12 @@ in
# Always include cryptsetup so that NixOps can use it. # Always include cryptsetup so that NixOps can use it.
environment.systemPackages = [ pkgs.cryptsetup ]; environment.systemPackages = [ pkgs.cryptsetup ];
# Make sure GCE image does not replace host key that NixOps sets
environment.etc."default/instance_configs.cfg".text = lib.mkDefault ''
[InstanceSetup]
set_host_keys = false
'';
# Rely on GCP's firewall instead # Rely on GCP's firewall instead
networking.firewall.enable = mkDefault false; networking.firewall.enable = mkDefault false;

View File

@ -55,6 +55,17 @@ let
}).config.system.build.isoImage); }).config.system.build.isoImage);
makeSdImage =
{ module, maintainers ? ["dezgeg"], system }:
with import nixpkgs { inherit system; };
hydraJob ((import lib/eval-config.nix {
inherit system;
modules = [ module versionModule ];
}).config.system.build.sdImage);
makeSystemTarball = makeSystemTarball =
{ module, maintainers ? ["viric"], system }: { module, maintainers ? ["viric"], system }:
@ -155,6 +166,10 @@ in rec {
inherit system; inherit system;
}); });
sd_image = forMatchingSystems [ "aarch64-linux" ] (system: makeSdImage {
module = ./modules/installer/cd-dvd/sd-image-aarch64.nix;
inherit system;
});
# A bootable VirtualBox virtual appliance as an OVA file (i.e. packaged OVF). # A bootable VirtualBox virtual appliance as an OVA file (i.e. packaged OVF).
ova = forMatchingSystems [ "x86_64-linux" ] (system: ova = forMatchingSystems [ "x86_64-linux" ] (system:
@ -296,7 +311,10 @@ in rec {
tests.kernel-copperhead = callTest tests/kernel-copperhead.nix {}; tests.kernel-copperhead = callTest tests/kernel-copperhead.nix {};
tests.kernel-latest = callTest tests/kernel-latest.nix {}; tests.kernel-latest = callTest tests/kernel-latest.nix {};
tests.kernel-lts = callTest tests/kernel-lts.nix {}; tests.kernel-lts = callTest tests/kernel-lts.nix {};
tests.kubernetes = callSubTestsOnMatchingSystems ["x86_64-linux"] tests/kubernetes/default.nix {}; tests.kubernetes.dns = callSubTestsOnMatchingSystems ["x86_64-linux"] tests/kubernetes/dns.nix {};
## kubernetes.e2e should eventually replace kubernetes.rbac when it works
#tests.kubernetes.e2e = callSubTestsOnMatchingSystems ["x86_64-linux"] tests/kubernetes/e2e.nix {};
tests.kubernetes.rbac = callSubTestsOnMatchingSystems ["x86_64-linux"] tests/kubernetes/rbac.nix {};
tests.latestKernel.login = callTest tests/login.nix { latestKernel = true; }; tests.latestKernel.login = callTest tests/login.nix { latestKernel = true; };
tests.ldap = callTest tests/ldap.nix {}; tests.ldap = callTest tests/ldap.nix {};
#tests.lightdm = callTest tests/lightdm.nix {}; #tests.lightdm = callTest tests/lightdm.nix {};
@ -365,6 +383,7 @@ in rec {
tests.switchTest = callTest tests/switch-test.nix {}; tests.switchTest = callTest tests/switch-test.nix {};
tests.taskserver = callTest tests/taskserver.nix {}; tests.taskserver = callTest tests/taskserver.nix {};
tests.tomcat = callTest tests/tomcat.nix {}; tests.tomcat = callTest tests/tomcat.nix {};
tests.transmission = callTest tests/transmission.nix {};
tests.udisks2 = callTest tests/udisks2.nix {}; tests.udisks2 = callTest tests/udisks2.nix {};
tests.vault = callTest tests/vault.nix {}; tests.vault = callTest tests/vault.nix {};
tests.virtualbox = callSubTestsOnMatchingSystems ["x86_64-linux"] tests/virtualbox.nix {}; tests.virtualbox = callSubTestsOnMatchingSystems ["x86_64-linux"] tests/virtualbox.nix {};

View File

@ -17,20 +17,14 @@ import ./make-test.nix ({ pkgs, lib, ... }:
startAll; startAll;
$machine->fail("test -f ~root/at-1"); $machine->fail("test -f ~root/at-1");
$machine->fail("test -f ~root/batch-1");
$machine->fail("test -f ~alice/at-1"); $machine->fail("test -f ~alice/at-1");
$machine->fail("test -f ~alice/batch-1");
$machine->succeed("echo 'touch ~root/at-1' | at now+1min"); $machine->succeed("echo 'touch ~root/at-1' | at now+1min");
$machine->succeed("echo 'touch ~root/batch-1' | batch");
$machine->succeed("su - alice -c \"echo 'touch at-1' | at now+1min\""); $machine->succeed("su - alice -c \"echo 'touch at-1' | at now+1min\"");
$machine->succeed("su - alice -c \"echo 'touch batch-1' | batch\"");
$machine->succeed("sleep 1.5m"); $machine->succeed("sleep 1.5m");
$machine->succeed("test -f ~root/at-1"); $machine->succeed("test -f ~root/at-1");
$machine->succeed("test -f ~root/batch-1");
$machine->succeed("test -f ~alice/at-1"); $machine->succeed("test -f ~alice/at-1");
$machine->succeed("test -f ~alice/batch-1");
''; '';
}) })

View File

@ -20,7 +20,7 @@ import ./make-test.nix ({ pkgs, ...} : {
containers.foo.config = {}; containers.foo.config = {};
}; };
}; };
in [ pkgs.stdenv emptyContainer.config.containers.foo.path ]; in [ pkgs.stdenv emptyContainer.config.containers.foo.path pkgs.libxslt ];
}; };
testScript = testScript =

View File

@ -52,7 +52,7 @@ import ./make-test.nix ({ pkgs, ...} : {
config = { config = {
networking.bonds.bond0 = { networking.bonds.bond0 = {
interfaces = [ "eth1" ]; interfaces = [ "eth1" ];
mode = "active-backup"; driverOptions.mode = "active-backup";
}; };
networking.interfaces.bond0.ipv4.addresses = [ networking.interfaces.bond0.ipv4.addresses = [
{ address = "10.10.0.3"; prefixLength = 24; } { address = "10.10.0.3"; prefixLength = 24; }
@ -73,7 +73,7 @@ import ./make-test.nix ({ pkgs, ...} : {
config = { config = {
networking.bonds.bond0 = { networking.bonds.bond0 = {
interfaces = [ "eth1" ]; interfaces = [ "eth1" ];
mode = "active-backup"; driverOptions.mode = "active-backup";
}; };
networking.bridges.br0.interfaces = [ "bond0" ]; networking.bridges.br0.interfaces = [ "bond0" ];
networking.interfaces.br0.ipv4.addresses = [ networking.interfaces.br0.ipv4.addresses = [

View File

@ -6,29 +6,62 @@
kubelets kubelets
}: }:
let let
runWithCFSSL = name: cmd: runWithCFSSL = name: cmd:
builtins.fromJSON (builtins.readFile ( let secrets = pkgs.runCommand "${name}-cfss.json" {
pkgs.runCommand "${name}-cfss.json" { buildInputs = [ pkgs.cfssl pkgs.jq ];
buildInputs = [ pkgs.cfssl ]; outputs = [ "out" "cert" "key" "csr" ];
} "cfssl ${cmd} > $out" }
)); ''
(
echo "${cmd}"
cfssl ${cmd} > tmp
cat tmp | jq -r .key > $key
cat tmp | jq -r .cert > $cert
cat tmp | jq -r .csr > $csr
writeCFSSL = content: touch $out
pkgs.runCommand content.name { ) 2>&1 | fold -w 80 -s
buildInputs = [ pkgs.cfssl ]; '';
} '' in {
mkdir -p $out key = secrets.key;
cd $out cert = secrets.cert;
cat ${writeFile content} | cfssljson -bare ${content.name} csr = secrets.csr;
''; };
writeCFSSL = content:
pkgs.runCommand content.name {
buildInputs = [ pkgs.cfssl pkgs.jq ];
} ''
mkdir -p $out
cd $out
json=${pkgs.lib.escapeShellArg (builtins.toJSON content)}
# for a given $field in the $json, treat the associated value as a
# file path and substitute the contents thereof into the $json
# object.
expandFileField() {
local field=$1
if jq -e --arg field "$field" 'has($field)'; then
local path="$(echo "$json" | jq -r ".$field")"
json="$(echo "$json" | jq --arg val "$(cat "$path")" ".$field = \$val")"
fi
}
expandFileField key
expandFileField ca
expandFileField cert
echo "$json" | cfssljson -bare ${content.name}
'';
noCSR = content: pkgs.lib.filterAttrs (n: v: n != "csr") content; noCSR = content: pkgs.lib.filterAttrs (n: v: n != "csr") content;
noKey = content: pkgs.lib.filterAttrs (n: v: n != "key") content; noKey = content: pkgs.lib.filterAttrs (n: v: n != "key") content;
writeFile = content: pkgs.writeText "content" ( writeFile = content:
if pkgs.lib.isAttrs content then builtins.toJSON content if pkgs.lib.isDerivation content
else toString content then content
); else pkgs.writeText "content" (builtins.toJSON content);
createServingCertKey = { ca, cn, hosts? [], size ? 2048, name ? cn }: createServingCertKey = { ca, cn, hosts? [], size ? 2048, name ? cn }:
noCSR ( noCSR (

View File

@ -2,7 +2,7 @@
with import ./base.nix { inherit system; }; with import ./base.nix { inherit system; };
let let
domain = "my.zyx"; domain = "my.zyx";
certs = import ./certs.nix { externalDomain = domain; }; certs = import ./certs.nix { externalDomain = domain; kubelets = ["machine1" "machine2"]; };
kubeconfig = pkgs.writeText "kubeconfig.json" (builtins.toJSON { kubeconfig = pkgs.writeText "kubeconfig.json" (builtins.toJSON {
apiVersion = "v1"; apiVersion = "v1";
kind = "Config"; kind = "Config";

View File

@ -12,7 +12,7 @@ let
}); });
roRoleBinding = pkgs.writeText "ro-role-binding.json" (builtins.toJSON { roRoleBinding = pkgs.writeText "ro-role-binding.json" (builtins.toJSON {
apiVersion = "rbac.authorization.k8s.io/v1beta1"; apiVersion = "rbac.authorization.k8s.io/v1";
kind = "RoleBinding"; kind = "RoleBinding";
metadata = { metadata = {
name = "read-pods"; name = "read-pods";
@ -31,7 +31,7 @@ let
}); });
roRole = pkgs.writeText "ro-role.json" (builtins.toJSON { roRole = pkgs.writeText "ro-role.json" (builtins.toJSON {
apiVersion = "rbac.authorization.k8s.io/v1beta1"; apiVersion = "rbac.authorization.k8s.io/v1";
kind = "Role"; kind = "Role";
metadata = { metadata = {
name = "pod-reader"; name = "pod-reader";

View File

@ -1,5 +1,5 @@
import ./make-test.nix { import ./make-test.nix {
name = "dovecot"; name = "openldap";
machine = { pkgs, ... }: { machine = { pkgs, ... }: {
services.openldap = { services.openldap = {

View File

@ -0,0 +1,21 @@
import ./make-test.nix ({ pkgs, ...} : {
name = "transmission";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ coconnor ];
};
machine = { config, pkgs, ... }: {
imports = [ ../modules/profiles/minimal.nix ];
networking.firewall.allowedTCPPorts = [ 9091 ];
services.transmission.enable = true;
};
testScript =
''
startAll;
$machine->waitForUnit("transmission");
$machine->shutdown;
'';
})

View File

@ -2,7 +2,7 @@
buildGoPackage rec { buildGoPackage rec {
name = "go-ethereum-${version}"; name = "go-ethereum-${version}";
version = "1.8.2"; version = "1.8.3";
goPackagePath = "github.com/ethereum/go-ethereum"; goPackagePath = "github.com/ethereum/go-ethereum";
# Fix for usb-related segmentation faults on darwin # Fix for usb-related segmentation faults on darwin
@ -27,7 +27,7 @@ buildGoPackage rec {
owner = "ethereum"; owner = "ethereum";
repo = "go-ethereum"; repo = "go-ethereum";
rev = "v${version}"; rev = "v${version}";
sha256 = "19ryfy9dsmgk3kimkmq2hif1di4binqg9718xrmirf063rajk02a"; sha256 = "1vdrf3fi4arr6aivyp5myj4jy7apqbiqa6brr3jplmc07q1yijnf";
}; };
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -2,32 +2,34 @@
, makeWrapper, makeDesktopItem , makeWrapper, makeDesktopItem
, qtbase, qmake, qtmultimedia, qttools , qtbase, qmake, qtmultimedia, qttools
, qtgraphicaleffects, qtdeclarative , qtgraphicaleffects, qtdeclarative
, qtlocation, qtquickcontrols, qtwebchannel , qtlocation, qtquickcontrols2, qtwebchannel
, qtwebengine, qtx11extras, qtxmlpatterns , qtwebengine, qtx11extras, qtxmlpatterns
, monero, unbound, readline, boost, libunwind , monero, unbound, readline, boost, libunwind
, pcsclite, zeromq, cppzmq, pkgconfig
}: }:
with stdenv.lib; with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "monero-gui-${version}"; name = "monero-gui-${version}";
version = "0.11.1.0"; version = "0.12.0.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "monero-project"; owner = "monero-project";
repo = "monero-gui"; repo = "monero-gui";
rev = "v${version}"; rev = "v${version}";
sha256 = "01d7apwrv8j8bh7plvvhlnll3ransaha3n6rx19nkgvfn319hswq"; sha256 = "1mg5ival8a2wdp14yib4wzqax4xyvd40zjy9anhszljds1439jhl";
}; };
nativeBuildInputs = [ qmake ]; nativeBuildInputs = [ qmake pkgconfig ];
buildInputs = [ buildInputs = [
qtbase qtmultimedia qtgraphicaleffects qtbase qtmultimedia qtgraphicaleffects
qtdeclarative qtlocation qtquickcontrols qtdeclarative qtlocation qtquickcontrols2
qtwebchannel qtwebengine qtx11extras qtwebchannel qtwebengine qtx11extras
qtxmlpatterns monero unbound readline qtxmlpatterns monero unbound readline
boost libunwind makeWrapper boost libunwind pcsclite zeromq cppzmq
makeWrapper
]; ];
patches = [ patches = [

View File

@ -1,8 +1,8 @@
diff --git a/main.cpp b/main.cpp diff --git a/main.cpp b/main.cpp
index 1a9a979..2316929 100644 index c03b160..a8ea263 100644
--- a/main.cpp --- a/main.cpp
+++ b/main.cpp +++ b/main.cpp
@@ -74,10 +74,6 @@ int main(int argc, char *argv[]) @@ -80,14 +80,16 @@ int main(int argc, char *argv[])
// qDebug() << "High DPI auto scaling - enabled"; // qDebug() << "High DPI auto scaling - enabled";
//#endif //#endif
@ -13,9 +13,6 @@ index 1a9a979..2316929 100644
MainApp app(argc, argv); MainApp app(argc, argv);
qDebug() << "app startd"; qDebug() << "app startd";
@@ -86,6 +82,13 @@ int main(int argc, char *argv[])
app.setOrganizationDomain("getmonero.org");
app.setOrganizationName("monero-project");
+ // Log settings + // Log settings
+ QString logfile = + QString logfile =
@ -23,20 +20,19 @@ index 1a9a979..2316929 100644
+ + "/monero-wallet-gui.log"; + + "/monero-wallet-gui.log";
+ Monero::Wallet::init(argv[0], logfile.toUtf8().constData()); + Monero::Wallet::init(argv[0], logfile.toUtf8().constData());
+ +
+ app.setApplicationName("monero-core");
filter *eventFilter = new filter; app.setOrganizationDomain("getmonero.org");
app.installEventFilter(eventFilter); app.setOrganizationName("monero-project");
diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp
index 8525bf3..6967b24 100644 index 74649ce..fe1efc6 100644
--- a/src/libwalletqt/Wallet.cpp --- a/src/libwalletqt/Wallet.cpp
+++ b/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp
@@ -613,7 +613,7 @@ QString Wallet::getDaemonLogPath() const @@ -729,7 +729,7 @@ QString Wallet::getWalletLogPath() const
#ifdef Q_OS_MACOS
QString Wallet::getWalletLogPath() const return QStandardPaths::standardLocations(QStandardPaths::HomeLocation).at(0) + "/Library/Logs/" + filename;
{ #else
- return QCoreApplication::applicationDirPath() + "/monero-wallet-gui.log"; - return QCoreApplication::applicationDirPath() + "/" + filename;
+ return QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/monero-wallet-gui.log"; + return QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + filename;
#endif
} }
Wallet::Wallet(Monero::Wallet *w, QObject *parent)

View File

@ -1,78 +0,0 @@
diff --git a/src/wallet/CMakeLists.txt b/src/wallet/CMakeLists.txt
index 63908005..f6656d5c 100644
--- a/src/wallet/CMakeLists.txt
+++ b/src/wallet/CMakeLists.txt
@@ -86,43 +86,40 @@ target_link_libraries(wallet
${EXTRA_LIBRARIES})
add_dependencies(wallet version)
-if (NOT BUILD_GUI_DEPS)
- set(wallet_rpc_sources
- wallet_rpc_server.cpp)
+set(wallet_rpc_sources
+ wallet_rpc_server.cpp)
- set(wallet_rpc_headers)
+set(wallet_rpc_headers)
- set(wallet_rpc_private_headers
- wallet_rpc_server.h)
+set(wallet_rpc_private_headers
+ wallet_rpc_server.h)
- monero_private_headers(wallet_rpc_server
- ${wallet_rpc_private_headers})
- monero_add_executable(wallet_rpc_server
- ${wallet_rpc_sources}
- ${wallet_rpc_headers}
- ${wallet_rpc_private_headers})
-
- target_link_libraries(wallet_rpc_server
- PRIVATE
- wallet
- epee
- rpc
- cryptonote_core
- cncrypto
- common
- ${Boost_CHRONO_LIBRARY}
- ${Boost_PROGRAM_OPTIONS_LIBRARY}
- ${Boost_FILESYSTEM_LIBRARY}
- ${Boost_THREAD_LIBRARY}
- ${CMAKE_THREAD_LIBS_INIT}
- ${EXTRA_LIBRARIES})
- add_dependencies(wallet_rpc_server version)
- set_property(TARGET wallet_rpc_server
- PROPERTY
- OUTPUT_NAME "monero-wallet-rpc")
- install(TARGETS wallet_rpc_server DESTINATION bin)
-endif()
+monero_private_headers(wallet_rpc_server
+ ${wallet_rpc_private_headers})
+monero_add_executable(wallet_rpc_server
+ ${wallet_rpc_sources}
+ ${wallet_rpc_headers}
+ ${wallet_rpc_private_headers})
+target_link_libraries(wallet_rpc_server
+ PRIVATE
+ wallet
+ epee
+ rpc
+ cryptonote_core
+ cncrypto
+ common
+ ${Boost_CHRONO_LIBRARY}
+ ${Boost_PROGRAM_OPTIONS_LIBRARY}
+ ${Boost_FILESYSTEM_LIBRARY}
+ ${Boost_THREAD_LIBRARY}
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${EXTRA_LIBRARIES})
+add_dependencies(wallet_rpc_server version)
+set_property(TARGET wallet_rpc_server
+ PROPERTY
+ OUTPUT_NAME "monero-wallet-rpc")
+install(TARGETS wallet_rpc_server DESTINATION bin)
# build and install libwallet_merged only if we building for GUI
if (BUILD_GUI_DEPS)

View File

@ -1,48 +1,44 @@
{ stdenv, fetchpatch, fetchFromGitHub, cmake { stdenv, fetchFromGitHub, cmake, pkgconfig, git
, boost, miniupnpc, openssl, pkgconfig, unbound , boost, miniupnpc, openssl, unbound, cppzmq
, IOKit , zeromq, pcsclite, readline
, CoreData, IOKit, PCSC
}: }:
assert stdenv.isDarwin -> IOKit != null;
with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "monero-${version}"; name = "monero-${version}";
version = "0.11.1.0"; version = "0.12.0.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "monero-project"; owner = "monero-project";
repo = "monero"; repo = "monero";
rev = "v${version}"; rev = "v${version}";
sha256 = "0nrpxx6r63ia6ard85d504x2kgaikvrhb5sg93ml70l6djyy1148"; sha256 = "1lc9mkrl1m8mdbvj88y8y5rv44vinxf7dyv221ndmw5c5gs5zfgk";
}; };
nativeBuildInputs = [ cmake pkgconfig ]; nativeBuildInputs = [ cmake pkgconfig git ];
buildInputs = [ boost miniupnpc openssl unbound ] buildInputs = [
++ stdenv.lib.optional stdenv.isDarwin IOKit; boost miniupnpc openssl unbound
cppzmq zeromq pcsclite readline
patches = [ ] ++ optionals stdenv.isDarwin [ IOKit CoreData PCSC ];
./build-wallet-rpc.patch # fixed in next release
];
cmakeFlags = [ cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_BUILD_TYPE=Release"
"-DBUILD_GUI_DEPS=ON" "-DBUILD_GUI_DEPS=ON"
"-DReadline_ROOT_DIR=${readline.dev}"
]; ];
doCheck = false; hardeningDisable = [ "fortify" ];
installPhase = '' meta = {
make install
install -Dt "$out/bin/" \
bin/monero-blockchain-export \
bin/monero-blockchain-import \
bin/monero-wallet-rpc
'';
meta = with stdenv.lib; {
description = "Private, secure, untraceable currency"; description = "Private, secure, untraceable currency";
homepage = https://getmonero.org/; homepage = https://getmonero.org/;
license = licenses.bsd3; license = licenses.bsd3;
platforms = platforms.all; platforms = platforms.all;
maintainers = [ maintainers.ehmry ]; maintainers = with maintainers; [ ehmry rnhmjoj ];
}; };
} }

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, pkgconfig, intltool, gtk3, glib, libid3tag, id3lib, taglib { stdenv, fetchurl, pkgconfig, intltool, gtk3, glib, libid3tag, id3lib, taglib
, libvorbis, libogg, flac, itstool, libxml2, gsettings-desktop-schemas , libvorbis, libogg, opusfile, flac, itstool, libxml2, gsettings-desktop-schemas
, gnome3, wrapGAppsHook , gnome3, wrapGAppsHook
}: }:
@ -18,7 +18,7 @@ in stdenv.mkDerivation rec {
nativeBuildInputs = [ pkgconfig intltool itstool libxml2 wrapGAppsHook ]; nativeBuildInputs = [ pkgconfig intltool itstool libxml2 wrapGAppsHook ];
buildInputs = [ buildInputs = [
gtk3 glib libid3tag id3lib taglib libvorbis libogg flac gtk3 glib libid3tag id3lib taglib libvorbis libogg opusfile flac
gsettings-desktop-schemas gnome3.defaultIconTheme gsettings-desktop-schemas gnome3.defaultIconTheme
]; ];

View File

@ -7,14 +7,13 @@
mkDerivation rec { mkDerivation rec {
name = "elisa-${version}"; name = "elisa-${version}";
# 0.1 is expected in early/mid 2018-04 version = "0.1";
version = "0.0.20180320";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "KDE"; owner = "KDE";
repo = "elisa"; repo = "elisa";
rev = "9dd35d7244a8a3553275152f5b50fbe6d272ce64"; rev = version;
sha256 = "0mjqvcpk2y4jlwkka8gzl50wgqjjx9bzpbrj79cr0ib3jyviss4k"; sha256 = "13i0fkpwrskric3gfalh7mcpp4l2knwnq7jpq391lgh6krq04r4w";
}; };
nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook ]; nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook ];

View File

@ -11,10 +11,10 @@ with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "fmit-${version}"; name = "fmit-${version}";
version = "1.1.13"; version = "1.1.14";
src = fetchFromGitHub { src = fetchFromGitHub {
sha256 = "1p374gf7iksrlyvddm3w4qk3l0rxsiyymz5s8dmc447yvin8ykfq"; sha256 = "18gvl8smcnigzldy1acs5h8rscf287b39xi4y2cl5armqbj0y38x";
rev = "v${version}"; rev = "v${version}";
repo = "fmit"; repo = "fmit";
owner = "gillesdegottex"; owner = "gillesdegottex";

View File

@ -4,11 +4,11 @@
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "mpg123-1.25.8"; name = "mpg123-1.25.10";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/mpg123/${name}.tar.bz2"; url = "mirror://sourceforge/mpg123/${name}.tar.bz2";
sha256 = "16s9z1xc5kv1p90g42vsr9m4gq3dwjsmrj873x4i8601mvpm3nkr"; sha256 = "08vhp8lz7d9ybhxcmkq3adwfryhivfvp0745k4r9kgz4wap3f4vc";
}; };
buildInputs = stdenv.lib.optional (!stdenv.isDarwin) alsaLib; buildInputs = stdenv.lib.optional (!stdenv.isDarwin) alsaLib;

View File

@ -20,13 +20,16 @@ stdenv.mkDerivation rec {
mv helmholtz~/src/Makefile . mv helmholtz~/src/Makefile .
rm -rf helmholtz~/src/ rm -rf helmholtz~/src/
rm helmholtz~/helmholtz~.pd_darwin rm helmholtz~/helmholtz~.pd_darwin
rm helmholtz~/helmholtz~.pd_linux
rm helmholtz~/helmholtz~.dll rm helmholtz~/helmholtz~.dll
rm -rf __MACOSX rm -rf __MACOSX
''; '';
patchPhase = '' patchPhase = ''
mkdir -p $out/helmholtz~
sed -i "s@current: pd_darwin@current: pd_linux@g" Makefile sed -i "s@current: pd_darwin@current: pd_linux@g" Makefile
sed -i "s@-Wl@@g" Makefile sed -i "s@-Wl@@g" Makefile
sed -i "s@\$(NAME).pd_linux \.\./\$(NAME).pd_linux@helmholtz~.pd_linux $out/helmholtz~/@g" Makefile
''; '';
installPhase = '' installPhase = ''

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "praat-${version}"; name = "praat-${version}";
version = "6.0.37"; version = "6.0.38";
src = fetchurl { src = fetchurl {
url = "https://github.com/praat/praat/archive/v${version}.tar.gz"; url = "https://github.com/praat/praat/archive/v${version}.tar.gz";
sha256 = "1c675jfzcrwfn8lcswm5y5kmazkhnb0p4mzlf5sim57hms88ffjq"; sha256 = "1l01mdhd0kf6mnyrg8maydr56cpw4312gryk303kr0a4w0gwzhhc";
}; };
configurePhase = '' configurePhase = ''

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, cmake, pkgconfig, xorg, libjpeg, libpng { stdenv, fetchurl, fetchpatch, cmake, pkgconfig, xorg, libjpeg, libpng
, fontconfig, freetype, pam, dbus_libs, makeWrapper }: , fontconfig, freetype, pam, dbus_libs, makeWrapper }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -26,7 +26,10 @@ stdenv.mkDerivation rec {
# Allow to set logfile to a special "/dev/stderr" in order to continue # Allow to set logfile to a special "/dev/stderr" in order to continue
# logging to stderr and thus to the journal. # logging to stderr and thus to the journal.
./no-logfile.patch ./no-logfile.patch
]; ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl (fetchpatch {
url = "https://raw.githubusercontent.com/gentoo/musl/8eddda8072add075ebf56cf6d288bc1450d6b5f8/x11-misc/slim/files/slim-1.3.6-add-missing-libgen_h.patch";
sha256 = "0f82672s2r2cmdqfn2mbg3di76mbla9n0ik20p2gv4igi6p866xm";
});
preConfigure = "substituteInPlace CMakeLists.txt --replace /lib $out/lib"; preConfigure = "substituteInPlace CMakeLists.txt --replace /lib $out/lib";

View File

@ -8,9 +8,9 @@ let
inherit (gnome2) GConf gnome_vfs; inherit (gnome2) GConf gnome_vfs;
}; };
latestVersion = { latestVersion = {
version = "3.2.0.7"; # "Android Studio 3.2 Canary 8" version = "3.2.0.8"; # "Android Studio 3.2 Canary 9"
build = "173.4670218"; build = "173.4688006";
sha256Hash = "0p1lls1pkhji8x0p32clsiq3ng64jhqv2vxkhdkmsbh5p4dc1g21"; sha256Hash = "13kln5s45qzdi54gca0bvdiwl2mi6lg8zgp7f36a24zbmvdmnslv";
}; };
in rec { in rec {
# Old alias # Old alias
@ -21,9 +21,9 @@ in rec {
stable = mkStudio { stable = mkStudio {
pname = "android-studio"; pname = "android-studio";
#pname = "android-studio-stable"; # TODO: Rename and provide symlink #pname = "android-studio-stable"; # TODO: Rename and provide symlink
version = "3.0.1.0"; # "Android Studio 3.0.1" version = "3.1.0.16"; # "Android Studio 3.1"
build = "171.4443003"; build = "173.4670197";
sha256Hash = "1krahlqr70nq3csqiinq2m4fgs68j11hd9gg2dx2nrpw5zni0wdd"; sha256Hash = "1i0ldyadrcyy5pl9vjpm2k755mf08xi9x5qz8655qsbiajzqf9fy";
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "The Official IDE for Android (stable channel)"; description = "The Official IDE for Android (stable channel)";
@ -41,9 +41,9 @@ in rec {
beta = mkStudio { beta = mkStudio {
pname = "android-studio-preview"; pname = "android-studio-preview";
#pname = "android-studio-beta"; # TODO: Rename and provide symlink #pname = "android-studio-beta"; # TODO: Rename and provide symlink
version = "3.1.0.15"; # "Android Studio 3.1 RC 3" version = "3.1.0.16"; # "Android Studio 3.1"
build = "173.4658569"; build = "173.4670197";
sha256Hash = "0jvq7k5vhrli41bj2imnsp3z70c7yws3fvs8m873qrjvfgmi5qrq"; sha256Hash = "1i0ldyadrcyy5pl9vjpm2k755mf08xi9x5qz8655qsbiajzqf9fy";
meta = stable.meta // { meta = stable.meta // {
description = "The Official IDE for Android (beta channel)"; description = "The Official IDE for Android (beta channel)";

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "atom-${version}"; name = "atom-${version}";
version = "1.25.0"; version = "1.25.1";
src = fetchurl { src = fetchurl {
url = "https://github.com/atom/atom/releases/download/v${version}/atom-amd64.deb"; url = "https://github.com/atom/atom/releases/download/v${version}/atom-amd64.deb";
sha256 = "04iiw0qzl9025l4lasz42w5nfnvsmc7vwcf4a9c2hvl9xsyckajh"; sha256 = "0h0kr4w26c6i89rb9y4aw4l8f63al42i2cy3ddk16m1irzij9fk4";
name = "${name}.deb"; name = "${name}.deb";
}; };

View File

@ -1,5 +1,5 @@
{ stdenv, makeDesktopItem, freetype, fontconfig, libX11, libXrender { stdenv, makeDesktopItem, freetype, fontconfig, libX11, libXrender
, zlib, jdk, glib, gtk2, libXtst, gsettings-desktop-schemas, webkitgtk24x-gtk2 , zlib, jdk, glib, gtk3, libXtst, gsettings-desktop-schemas, webkitgtk
, makeWrapper, ... }: , makeWrapper, ... }:
{ name, src ? builtins.getAttr stdenv.system sources, sources ? null, description }: { name, src ? builtins.getAttr stdenv.system sources, sources ? null, description }:
@ -18,9 +18,9 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
fontconfig freetype glib gsettings-desktop-schemas gtk2 jdk libX11 fontconfig freetype glib gsettings-desktop-schemas gtk3 jdk libX11
libXrender libXtst makeWrapper zlib libXrender libXtst makeWrapper zlib
] ++ stdenv.lib.optional (webkitgtk24x-gtk2 != null) webkitgtk24x-gtk2; ] ++ stdenv.lib.optional (webkitgtk != null) webkitgtk;
buildCommand = '' buildCommand = ''
# Unpack tarball. # Unpack tarball.
@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
makeWrapper $out/eclipse/eclipse $out/bin/eclipse \ makeWrapper $out/eclipse/eclipse $out/bin/eclipse \
--prefix PATH : ${jdk}/bin \ --prefix PATH : ${jdk}/bin \
--prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath ([ glib gtk2 libXtst ] ++ stdenv.lib.optional (webkitgtk24x-gtk2 != null) webkitgtk24x-gtk2)} \ --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath ([ glib gtk3 libXtst ] ++ stdenv.lib.optional (webkitgtk != null) webkitgtk)} \
--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \ --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
--add-flags "-configuration \$HOME/.eclipse/''${productId}_$productVersion/configuration" --add-flags "-configuration \$HOME/.eclipse/''${productId}_$productVersion/configuration"

View File

@ -1,7 +1,7 @@
{ stdenv, lib, fetchurl, makeDesktopItem, makeWrapper { stdenv, lib, fetchurl, makeDesktopItem, makeWrapper
, freetype, fontconfig, libX11, libXext, libXrender, zlib , freetype, fontconfig, libX11, libXext, libXrender, zlib
, glib, gtk2, libXtst, jdk, gsettings-desktop-schemas , glib, gtk3, libXtst, jdk, gsettings-desktop-schemas
, webkitgtk24x-gtk2 ? null # for internal web browser , webkitgtk ? null # for internal web browser
, buildEnv, writeText, runCommand , buildEnv, writeText, runCommand
, callPackage , callPackage
}: }:
@ -15,7 +15,7 @@ rec {
buildEclipse = import ./build-eclipse.nix { buildEclipse = import ./build-eclipse.nix {
inherit stdenv makeDesktopItem freetype fontconfig libX11 libXrender zlib inherit stdenv makeDesktopItem freetype fontconfig libX11 libXrender zlib
jdk glib gtk2 libXtst gsettings-desktop-schemas webkitgtk24x-gtk2 jdk glib gtk3 libXtst gsettings-desktop-schemas webkitgtk
makeWrapper; makeWrapper;
}; };

View File

@ -175,10 +175,10 @@
}) {}; }) {};
auctex = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild { auctex = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "auctex"; pname = "auctex";
version = "12.1.0"; version = "12.1.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/auctex-12.1.0.tar"; url = "https://elpa.gnu.org/packages/auctex-12.1.1.tar";
sha256 = "0iy5x61xqkxaph2hq64sg50l1c6yp6qhzppwadayxkdz00b46sas"; sha256 = "10l96569dy9pfp8bm64pndhk1skg65kqhsyllwfa0zvb7mjkm70l";
}; };
packageRequires = []; packageRequires = [];
meta = { meta = {
@ -713,10 +713,10 @@
ebdb = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib, seq }: ebdb = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib, seq }:
elpaBuild { elpaBuild {
pname = "ebdb"; pname = "ebdb";
version = "0.4.3"; version = "0.5";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/ebdb-0.4.3.tar"; url = "https://elpa.gnu.org/packages/ebdb-0.5.tar";
sha256 = "1xq0nhhgzgzrvxbb0lgpz71rfd0dcjakh87wg8wi3cpiw9w7zx41"; sha256 = "1apsb08ml50nacqa6i86zwa2xxdfqry380bksp16zv63cj86b67g";
}; };
packageRequires = [ cl-lib emacs seq ]; packageRequires = [ cl-lib emacs seq ];
meta = { meta = {
@ -768,10 +768,10 @@
el-search = callPackage ({ cl-print, elpaBuild, emacs, fetchurl, lib, stream }: el-search = callPackage ({ cl-print, elpaBuild, emacs, fetchurl, lib, stream }:
elpaBuild { elpaBuild {
pname = "el-search"; pname = "el-search";
version = "1.6"; version = "1.6.3";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/el-search-1.6.tar"; url = "https://elpa.gnu.org/packages/el-search-1.6.3.tar";
sha256 = "18pv2l6rl8f9x0yjn4iyf6g94c0ly5mizqg0vxr3m420bkbyk95h"; sha256 = "1yd8qlq95fb5qfmg3m16i9d5nsmkkgr12q0981r5ng06pc0j4al6";
}; };
packageRequires = [ cl-print emacs stream ]; packageRequires = [ cl-print emacs stream ];
meta = { meta = {
@ -861,10 +861,10 @@
}) {}; }) {};
exwm = callPackage ({ elpaBuild, fetchurl, lib, xelb }: elpaBuild { exwm = callPackage ({ elpaBuild, fetchurl, lib, xelb }: elpaBuild {
pname = "exwm"; pname = "exwm";
version = "0.17"; version = "0.18";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/exwm-0.17.tar"; url = "https://elpa.gnu.org/packages/exwm-0.18.tar";
sha256 = "03vgrrrc1d3xr9ydl1ydvmqnvpnzg858dzdky2nd65h9ssyp2f5f"; sha256 = "1shz5bf4v4gg3arjaaldics5qkg3aiiaf3ngys8lb6qyxhcpvh6q";
}; };
packageRequires = [ xelb ]; packageRequires = [ xelb ];
meta = { meta = {
@ -931,10 +931,10 @@
gited = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }: gited = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }:
elpaBuild { elpaBuild {
pname = "gited"; pname = "gited";
version = "0.3.4"; version = "0.4.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/gited-0.3.4.tar"; url = "https://elpa.gnu.org/packages/gited-0.4.1.tar";
sha256 = "0s03p0z5dqhigl01hzin2qy53nm7b4ilvfm83d0ca683i9rb7hx1"; sha256 = "0080jcr10xvvf2rl7ar01c6zmzd0pafrs6w2l8v4cwwapyhv0dcd";
}; };
packageRequires = [ cl-lib emacs ]; packageRequires = [ cl-lib emacs ];
meta = { meta = {
@ -1106,10 +1106,10 @@
}) {}; }) {};
iterators = callPackage ({ elpaBuild, emacs, fetchurl, lib }: elpaBuild { iterators = callPackage ({ elpaBuild, emacs, fetchurl, lib }: elpaBuild {
pname = "iterators"; pname = "iterators";
version = "0.1"; version = "0.1.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/iterators-0.1.el"; url = "https://elpa.gnu.org/packages/iterators-0.1.1.el";
sha256 = "0rljqdaj88cbhngj4ddd2z3bfd35r84aivq4h10mk4n4h8whjpj4"; sha256 = "1r2cz2n6cr6wal5pqiqi5pn28pams639czgrvd60xcqmlr3li3g5";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -1160,10 +1160,10 @@
js2-mode = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }: js2-mode = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }:
elpaBuild { elpaBuild {
pname = "js2-mode"; pname = "js2-mode";
version = "20170721"; version = "20180301";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/js2-mode-20170721.tar"; url = "https://elpa.gnu.org/packages/js2-mode-20180301.tar";
sha256 = "02w2hgk8qbmwkksqf1dmslpr3xn9zjp3srl3qh8730w8r8s8czni"; sha256 = "0kcs70iygbpaxs094q6agsjs56sz03jy4fwk178f9hr93x95pynx";
}; };
packageRequires = [ cl-lib emacs ]; packageRequires = [ cl-lib emacs ];
meta = { meta = {
@ -1423,14 +1423,29 @@
license = lib.licenses.free; license = lib.licenses.free;
}; };
}) {}; }) {};
multishell = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild { mmm-mode = callPackage ({ cl-lib ? null, elpaBuild, fetchurl, lib }:
elpaBuild {
pname = "mmm-mode";
version = "0.5.6";
src = fetchurl {
url = "https://elpa.gnu.org/packages/mmm-mode-0.5.6.tar";
sha256 = "1vwsi8sk1i16dvz940c6q7i75023hrw07sc4cpmcz06rj8r68gr0";
};
packageRequires = [ cl-lib ];
meta = {
homepage = "https://elpa.gnu.org/packages/mmm-mode.html";
license = lib.licenses.free;
};
}) {};
multishell = callPackage ({ cl-lib ? null, elpaBuild, fetchurl, lib }:
elpaBuild {
pname = "multishell"; pname = "multishell";
version = "1.1.5"; version = "1.1.5";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/multishell-1.1.5.tar"; url = "https://elpa.gnu.org/packages/multishell-1.1.5.tar";
sha256 = "0g38p5biyxqkjdkmxlikvhkhkmafyy3ibd012q83skaf8fi4cv1y"; sha256 = "0g38p5biyxqkjdkmxlikvhkhkmafyy3ibd012q83skaf8fi4cv1y";
}; };
packageRequires = []; packageRequires = [ cl-lib ];
meta = { meta = {
homepage = "https://elpa.gnu.org/packages/multishell.html"; homepage = "https://elpa.gnu.org/packages/multishell.html";
license = lib.licenses.free; license = lib.licenses.free;
@ -1438,10 +1453,10 @@
}) {}; }) {};
muse = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild { muse = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "muse"; pname = "muse";
version = "3.20.1"; version = "3.20.2";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/muse-3.20.1.tar"; url = "https://elpa.gnu.org/packages/muse-3.20.2.tar";
sha256 = "0h8lxm08r519psz93m1i43prkcpsm2dgkcvdlpvg7sm0ky7i5cay"; sha256 = "0g2ff6x45x2k5dnkp31sk3bjj92jyhhnar7l5hzn8vp22l0rv8wn";
}; };
packageRequires = []; packageRequires = [];
meta = { meta = {
@ -1544,10 +1559,10 @@
}) {}; }) {};
num3-mode = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild { num3-mode = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "num3-mode"; pname = "num3-mode";
version = "1.2"; version = "1.3";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/num3-mode-1.2.el"; url = "https://elpa.gnu.org/packages/num3-mode-1.3.el";
sha256 = "1nm3yjp5qs6rq4ak47gb6325vjfw0dnkryfgybgly0m6h4hhpbd8"; sha256 = "0x2jpnzvpbj03pbmhsny5gygh63c4dbl4g3k0cfs3vh4qmp2dg6w";
}; };
packageRequires = []; packageRequires = [];
meta = { meta = {
@ -1595,6 +1610,19 @@
license = lib.licenses.free; license = lib.licenses.free;
}; };
}) {}; }) {};
org = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "org";
version = "9.1.9";
src = fetchurl {
url = "https://elpa.gnu.org/packages/org-9.1.9.tar";
sha256 = "16yr0srfzsrzv2b1f2wjk8gb2pyhsgj2hxbscixirkxqz674c5cl";
};
packageRequires = [];
meta = {
homepage = "https://elpa.gnu.org/packages/org.html";
license = lib.licenses.free;
};
}) {};
osc = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild { osc = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "osc"; pname = "osc";
version = "0.1"; version = "0.1";
@ -1717,10 +1745,10 @@
python = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }: python = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }:
elpaBuild { elpaBuild {
pname = "python"; pname = "python";
version = "0.26"; version = "0.26.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/python-0.26.el"; url = "https://elpa.gnu.org/packages/python-0.26.1.el";
sha256 = "197sq42xd4ryqq2zy1802pns6wf6n4vzx90yxgn1zzqpwffpv317"; sha256 = "1dpw2w2nk6ggr8pz293qysjkiya3i7k25i447fbycjil59anzpb3";
}; };
packageRequires = [ cl-lib emacs ]; packageRequires = [ cl-lib emacs ];
meta = { meta = {
@ -1756,10 +1784,10 @@
}) {}; }) {};
rainbow-mode = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild { rainbow-mode = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "rainbow-mode"; pname = "rainbow-mode";
version = "0.13"; version = "1.0";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/rainbow-mode-0.13.el"; url = "https://elpa.gnu.org/packages/rainbow-mode-1.0.el";
sha256 = "1d3aamx6qgqqpqijwsr02ggwrh67gfink1bir0692alfkm3zdddl"; sha256 = "1mg9dbgvg79sphpic56d11mrjwx668xffx5z5jszc9fdl5b8ygml";
}; };
packageRequires = []; packageRequires = [];
meta = { meta = {
@ -1809,10 +1837,10 @@
realgud = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib, load-relative, loc-changes, test-simple }: realgud = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib, load-relative, loc-changes, test-simple }:
elpaBuild { elpaBuild {
pname = "realgud"; pname = "realgud";
version = "1.4.4"; version = "1.4.5";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/realgud-1.4.4.tar"; url = "https://elpa.gnu.org/packages/realgud-1.4.5.tar";
sha256 = "1nc8km339ip90h1j55ahfga03v7x7rh4iycmw6yrxyzir68vwn7c"; sha256 = "108wgxg7fb4byaiasgvbxv2hq7b00biq9f0mh9hy6vw4160y5w24";
}; };
packageRequires = [ packageRequires = [
cl-lib cl-lib

File diff suppressed because it is too large Load Diff

View File

@ -82,10 +82,6 @@ self:
inherit (self.melpaPackages) ess ctable popup; inherit (self.melpaPackages) ess ctable popup;
}; };
ess-R-object-popup = super.ess-R-object-popup.override {
inherit (self.melpaPackages) ess popup;
};
# upstream issue: missing dependency highlight # upstream issue: missing dependency highlight
evil-search-highlight-persist = markBroken super.evil-search-highlight-persist; evil-search-highlight-persist = markBroken super.evil-search-highlight-persist;
@ -117,7 +113,7 @@ self:
ido-complete-space-or-hyphen = markBroken super.ido-complete-space-or-hyphen; ido-complete-space-or-hyphen = markBroken super.ido-complete-space-or-hyphen;
# upstream issue: missing file header # upstream issue: missing file header
initsplit = markBroken super.initsplit; initsplit = super.initsplit;
# Expects bash to be at /bin/bash # Expects bash to be at /bin/bash
ivy-rtags = markBroken super.ivy-rtags; ivy-rtags = markBroken super.ivy-rtags;
@ -128,9 +124,6 @@ self:
# upstream issue: missing file header # upstream issue: missing file header
link = markBroken super.link; link = markBroken super.link;
# upstream issue: mismatched filename
link-hint = markBroken super.link-hint;
# upstream issue: missing file header # upstream issue: missing file header
maxframe = markBroken super.maxframe; maxframe = markBroken super.maxframe;

File diff suppressed because it is too large Load Diff

View File

@ -81,10 +81,6 @@ self:
inherit (self.melpaPackages) ess ctable popup; inherit (self.melpaPackages) ess ctable popup;
}; };
ess-R-object-popup = super.ess-R-object-popup.override {
inherit (self.melpaPackages) ess popup;
};
# upstream issue: doesn't build # upstream issue: doesn't build
eterm-256color = markBroken super.eterm-256color; eterm-256color = markBroken super.eterm-256color;

View File

@ -1,10 +1,10 @@
{ callPackage }: { { callPackage }: {
org = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild { org = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "org"; pname = "org";
version = "20180226"; version = "20180402";
src = fetchurl { src = fetchurl {
url = "https://orgmode.org/elpa/org-20180226.tar"; url = "https://orgmode.org/elpa/org-20180402.tar";
sha256 = "0jqvry6gah1bwnryha4asynj13jyds3qim0xcy7s01rxk99m2ziy"; sha256 = "0gb8hh26jzjqy262ll8jl3ym0cpw6s17id2gizv5qvw18knxs751";
}; };
packageRequires = []; packageRequires = [];
meta = { meta = {
@ -14,10 +14,10 @@
}) {}; }) {};
org-plus-contrib = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild { org-plus-contrib = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "org-plus-contrib"; pname = "org-plus-contrib";
version = "20180226"; version = "20180402";
src = fetchurl { src = fetchurl {
url = "https://orgmode.org/elpa/org-plus-contrib-20180226.tar"; url = "https://orgmode.org/elpa/org-plus-contrib-20180402.tar";
sha256 = "034wp70hcqnpidji5k1k80mj35iyyy098nbvc2sl7i2aca4m03zc"; sha256 = "09q5nr0ka7z719mi626wj5d51bcvdb08gk4zf94dzpks0gsqiikr";
}; };
packageRequires = []; packageRequires = [];
meta = { meta = {

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "focuswriter-${version}"; name = "focuswriter-${version}";
version = "1.6.10"; version = "1.6.11";
src = fetchurl { src = fetchurl {
url = "https://gottcode.org/focuswriter/focuswriter-${version}-src.tar.bz2"; url = "https://gottcode.org/focuswriter/focuswriter-${version}-src.tar.bz2";
sha256 = "0hrbycy5lapdkaa2xm90j45sgsiqdnlk9wry41kxxpdln9msabxs"; sha256 = "0izbsm2vx24pnd92gf7ky8x47g324a8d16hy1s8kk3x1inxd80z1";
}; };
nativeBuildInputs = [ pkgconfig qmake qttools ]; nativeBuildInputs = [ pkgconfig qmake qttools ];
@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
description = "Simple, distraction-free writing environment"; description = "Simple, distraction-free writing environment";
license = licenses.gpl3Plus; license = licenses.gpl3Plus;
maintainers = with maintainers; [ madjar ]; maintainers = with maintainers; [ madjar ];
platforms = platforms.all; platforms = platforms.linux;
homepage = https://gottcode.org/focuswriter/; homepage = https://gottcode.org/focuswriter/;
}; };
} }

View File

@ -1,33 +1,39 @@
{buildVersion, x32sha256, x64sha256}:
{ fetchurl, stdenv, glib, xorg, cairo, gtk2, pango, makeWrapper, openssl, bzip2, { fetchurl, stdenv, glib, xorg, cairo, gtk2, pango, makeWrapper, openssl, bzip2,
pkexecPath ? "/run/wrappers/bin/pkexec", libredirect, pkexecPath ? "/run/wrappers/bin/pkexec", libredirect,
gksuSupport ? false, gksu, unzip, zip, bash }: gksuSupport ? false, gksu, unzip, zip, bash}:
assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
assert gksuSupport -> gksu != null; assert gksuSupport -> gksu != null;
let let
build = "3143";
libPath = stdenv.lib.makeLibraryPath [glib xorg.libX11 gtk2 cairo pango]; libPath = stdenv.lib.makeLibraryPath [glib xorg.libX11 gtk2 cairo pango];
redirects = [ "/usr/bin/pkexec=${pkexecPath}" ] redirects = [ "/usr/bin/pkexec=${pkexecPath}" ]
++ stdenv.lib.optional gksuSupport "/usr/bin/gksudo=${gksu}/bin/gksudo"; ++ stdenv.lib.optional gksuSupport "/usr/bin/gksudo=${gksu}/bin/gksudo";
in let in let
archSha256 =
if stdenv.system == "i686-linux" then
x32sha256
else
x64sha256;
arch =
if stdenv.system == "i686-linux" then
"x32"
else
"x64";
# package with just the binaries # package with just the binaries
sublime = stdenv.mkDerivation { sublime = stdenv.mkDerivation {
name = "sublimetext3-${build}-bin"; name = "sublimetext3-${buildVersion}-bin";
src = src =
if stdenv.system == "i686-linux" then fetchurl {
fetchurl { name = "sublimetext-${buildVersion}.tar.bz2";
name = "sublimetext-${build}.tar.bz2"; url = "https://download.sublimetext.com/sublime_text_3_build_${buildVersion}_${arch}.tar.bz2";
url = "https://download.sublimetext.com/sublime_text_3_build_${build}_x32.tar.bz2"; sha256 = archSha256;
sha256 = "0dgpx4wij2m77f478p746qadavab172166bghxmj7fb61nvw9v5i"; };
}
else
fetchurl {
name = "sublimetext-${build}.tar.bz2";
url = "https://download.sublimetext.com/sublime_text_3_build_${build}_x64.tar.bz2";
sha256 = "06b554d2cvpxc976rvh89ix3kqc7klnngvk070xrs8wbyb221qcw";
};
dontStrip = true; dontStrip = true;
dontPatchELF = true; dontPatchELF = true;
@ -80,8 +86,8 @@ in let
wrapProgram $out/plugin_host --prefix LD_PRELOAD : ${stdenv.cc.cc.lib}/lib${stdenv.lib.optionalString stdenv.is64bit "64"}/libgcc_s.so.1:${openssl.out}/lib/libssl.so:${bzip2.out}/lib/libbz2.so wrapProgram $out/plugin_host --prefix LD_PRELOAD : ${stdenv.cc.cc.lib}/lib${stdenv.lib.optionalString stdenv.is64bit "64"}/libgcc_s.so.1:${openssl.out}/lib/libssl.so:${bzip2.out}/lib/libbz2.so
''; '';
}; };
in stdenv.mkDerivation { in stdenv.mkDerivation (rec {
name = "sublimetext3-${build}"; name = "sublimetext3-${buildVersion}";
phases = [ "installPhase" ]; phases = [ "installPhase" ];
@ -110,4 +116,4 @@ in stdenv.mkDerivation {
license = licenses.unfree; license = licenses.unfree;
platforms = platforms.linux; platforms = platforms.linux;
}; };
} })

View File

@ -0,0 +1,18 @@
{ callPackage }:
let
common = opts: callPackage (import ./common.nix opts);
in
rec {
sublime3-dev = common {
buildVersion = "3161";
x32sha256 = "0qrm2qmfsj71lr83c8zas2n3xk8hk9k4w8ygnasjhggmyjm3wy0q";
x64sha256 = "0cgadylm68s2jly10r038q1fvmbzmpc2nvqy86vlyq9avgqbm5pc";
} {};
sublime3 = common {
buildVersion = "3143";
x32sha256 = "0dgpx4wij2m77f478p746qadavab172166bghxmj7fb61nvw9v5i";
x64sha256 = "06b554d2cvpxc976rvh89ix3kqc7klnngvk070xrs8wbyb221qcw";
} {};
}

View File

@ -3,13 +3,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "tiled-${version}"; name = "tiled-${version}";
version = "1.1.3"; version = "1.1.4";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "bjorn"; owner = "bjorn";
repo = "tiled"; repo = "tiled";
rev = "v${version}"; rev = "v${version}";
sha256 = "0rf50w7nkdm70999q1mj7sy5hyjj41qjf4izi849q9a7xnhddv44"; sha256 = "0ln8lis9g23wp3w70xwbkzqmmbkd02cdx6z7msw9lrpkjzkj7mlr";
}; };
nativeBuildInputs = [ pkgconfig qmake ]; nativeBuildInputs = [ pkgconfig qmake ];

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