Merge remote-tracking branch 'origin/master' into staging.

Conflicts:
	pkgs/desktops/e18/enlightenment.nix
This commit is contained in:
Peter Simons 2014-08-04 16:51:47 +02:00
commit 2d326e5032
1261 changed files with 4697 additions and 3318 deletions

View File

@ -92,6 +92,7 @@
skeidel = "Sven Keidel <svenkeidel@gmail.com>"; skeidel = "Sven Keidel <svenkeidel@gmail.com>";
smironov = "Sergey Mironov <ierton@gmail.com>"; smironov = "Sergey Mironov <ierton@gmail.com>";
sprock = "Roger Mason <rmason@mun.ca>"; sprock = "Roger Mason <rmason@mun.ca>";
tailhook = "Paul Colomiets <paul@colomiets.name>";
thammers = "Tobias Hammerschmidt <jawr@gmx.de>"; thammers = "Tobias Hammerschmidt <jawr@gmx.de>";
the-kenny = "Moritz Ulrich <moritz@tarn-vedra.de>"; the-kenny = "Moritz Ulrich <moritz@tarn-vedra.de>";
thoughtpolice = "Austin Seipp <aseipp@pobox.com>"; thoughtpolice = "Austin Seipp <aseipp@pobox.com>";

View File

@ -1,146 +0,0 @@
/* Tool to sort attribute sets. Primarily useful for keeping
all-packages.nix tidy.
To compile:
$ strc -i ../../maintainers/scripts/sort-attrs.str -la stratego-lib
Typical invocation:
$ sglr -m -p ~/Dev/nix/src/libexpr/nix.tbl -i all-packages.nix \
| implode-asfix --lex \
| ../../maintainers/scripts/sort-attrs \
| asfix-yield
*/
module sort-attrs
imports
libstratego-lib
libstratego-sglr
strategies
no-wsp = !appl(prod([], cf(opt(layout())), no-attrs()), [])
rules
list-sep(s): [] -> []
list-sep(s): [x | xs] -> [[x | before] | <list-sep(s)> [split | after]]
where
<split-fetch-keep(s)> xs => (before, split, after)
list-sep(s): [x | xs] -> [[x | xs]]
where
<not(split-fetch-keep(s))> xs
list-sep-end(s): xs -> [<conc> (before, [split]) | <list-sep-end(s)> after]
where
<split-fetch-keep(s)> xs => (before, split, after)
list-sep-end(s): xs -> [xs]
where
<not(split-fetch-keep(s))> xs
sort-attrs:
appl(p@prod(_, _, attrs([term(cons("Attrs"))])),
[ lit("{")
, ws1
, appl(p2@list(cf(iter-star(sort("Bind")))), attrs)
, ws2
, lit("}")
]
) ->
appl(p, [lit("{"), <no-wsp>, appl(p2, <concat> attrs'), ws2, lit("}")])
where
<debug> "found it";
<attach-wsp> [ws1 | attrs] => withWSP;
<list-sep(starts-section)> withWSP => groups;
<length; debug> groups;
<map({x', x'', x''', xs', starts, starts': \[x | xs] -> [x''' | xs']
where
<remove-section-start> x => (x', starts);
<map(regularise-empty-lines); if !starts; debug; sortable-section; debug then qsort(compare-attrs) else id end> [x' | xs] => [x'' | xs'];
<[] <+ \x -> ["\n\n\n" | x]\ > starts => starts';
<prepend-layout> (starts', x'') => x'''
\ })> groups => attrs';
<debug> "did it"
attach-wsp: [a, b | cs] -> [(a, b) | <attach-wsp> cs]
attach-wsp: [] -> []
strategies
starts-section =
?x@(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs), attr);
<implode-string; is-substring(!"###")> cs;
!x
rules
sortable-section = ?[s]; !s; explode-string; not(fetch({x: ?x; !(x, 97); geq}))
remove-section-start:
(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs), attr) ->
((appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs'), attr), starts)
where
!cs;
list-sep-end(?10); // separate into lines, keeping the \n
map(implode-string);
partition(where(is-substring(!"###"))) => (starts, rest);
<map(explode-string); concat> rest => cs'
regularise-empty-lines:
(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs), attr) ->
(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs''), attr)
where
// separate into lines, keeping the \n
// last whitespace is significant, keep
<list-sep-end(?10); split-init-last> cs => (init, last);
<regularise-empty-lines'> init => cs'; // remove whitespace-only lines
<concat> [<explode-string> "\n\n", <concat> cs', last] => cs'' // add one empty line
/* Dirty hack: *do* keep the first empty line following a non-empty line. !!! order matters */
regularise-empty-lines': [] -> []
regularise-empty-lines': [x, y | xs] -> [x, y | <regularise-empty-lines'> xs]
where
<fetch-elem(not(?10 <+ ?32))> x;
<not(fetch-elem(not(?10 <+ ?32)))> y
regularise-empty-lines': [x | xs] -> [x | <regularise-empty-lines'> xs]
where <fetch-elem(not(?10 <+ ?32))> x
regularise-empty-lines': [x | xs] -> <regularise-empty-lines'> xs
where <not(fetch-elem(not(?10 <+ ?32)))> x
prepend-layout:
(text, (appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs), attr)) ->
(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs''), attr)
where
<implode-string> cs => cs';
<conc-strings; explode-string> (<concat-strings> text, cs') => cs''
compare-attrs:
x@
( (_, appl(p1@prod(_, _, attrs([term(cons("Bind"))])), [id1 | xs1]))
, (_, appl(p2@prod(_, _, attrs([term(cons("Bind"))])), [id2 | xs2]))
)
-> x
where
<string-lt> (id1, id2)
strategies
main = io-wrap(
oncetd(sort-attrs)
)

View File

@ -1036,21 +1036,22 @@ users.extraUsers.alice =
{ createHome = true; { createHome = true;
home = "/home/alice"; home = "/home/alice";
description = "Alice Foobar"; description = "Alice Foobar";
extraGroups = [ "wheel" ]; extraGroups = [ "wheel" "networkmanager" ];
useDefaultShell = true; useDefaultShell = true;
openssh.authorizedKeys.keys = [ "ssh-dss AAAAB3Nza... alice@foobar" ]; openssh.authorizedKeys.keys = [ "ssh-dss AAAAB3Nza... alice@foobar" ];
}; };
</programlisting> </programlisting>
Note that <literal>alice</literal> is a member of the Note that <literal>alice</literal> is a member of the
<literal>wheel</literal> group, which allows her to use <literal>wheel</literal> and <literal>networkmanager</literal> groups,
<command>sudo</command> to execute commands as which allows her to use <command>sudo</command> to execute commands as
<literal>root</literal>. Also note the SSH public key that allows <literal>root</literal> and to configure the network, respectively.
remote logins with the corresponding private key. Users created in Also note the SSH public key that allows remote logins with the
this way do not have a password by default, so they cannot log in via corresponding private key. Users created in this way do not have a
mechanisms that require a password. However, you can use the password by default, so they cannot log in via mechanisms that require
<command>passwd</command> program to set a password, which is retained a password. However, you can use the <command>passwd</command> program
across invocations of <command>nixos-rebuild</command>.</para> to set a password, which is retained across invocations of
<command>nixos-rebuild</command>.</para>
<para>A user ID (uid) is assigned automatically. You can also specify <para>A user ID (uid) is assigned automatically. You can also specify
a uid manually by adding a uid manually by adding
@ -1277,6 +1278,28 @@ services.xserver.synaptics.twoFingerScroll = true;
<section xml:id="sec-networking"><title>Networking</title> <section xml:id="sec-networking"><title>Networking</title>
<section xml:id="sec-networkmanager"><title>NetworkManager</title>
<para>To facilitate network configuration, some desktop environments
use NetworkManager. You can enable NetworkManager by setting:
<programlisting>
services.networkmanager.enable = true;
</programlisting>
Some desktop managers (e.g., GNOME) enable NetworkManager
automatically for you.</para>
<para>All users that should have permission to change network settings
must belong to the <code>networkmanager</code> group.</para>
<note><para><code>services.networkmanager</code> and
<code>services.wireless</code> can not be enabled at the same time:
you can still connect to the wireless networks using
NetworkManager.</para></note>
</section>
<section xml:id="sec-ssh"><title>Secure shell access</title> <section xml:id="sec-ssh"><title>Secure shell access</title>
<para>Secure shell (SSH) access to your machine can be enabled by <para>Secure shell (SSH) access to your machine can be enabled by
@ -1399,6 +1422,11 @@ always allowed.)</para>
<section xml:id="sec-wireless"><title>Wireless networks</title> <section xml:id="sec-wireless"><title>Wireless networks</title>
<para>For a desktop installation using NetworkManager (e.g., GNOME),
you just have to make sure the user is in the
<code>networkmanager</code> group and you can skip the rest of this
section on wireless networks.</para>
<para> <para>
NixOS will start wpa_supplicant for you if you enable this setting: NixOS will start wpa_supplicant for you if you enable this setting:

View File

@ -117,7 +117,7 @@ rec {
report = releaseTools.gcovReport { coverageRuns = [ test ]; }; report = releaseTools.gcovReport { coverageRuns = [ test ]; };
in (if makeCoverageReport then report else test) // { inherit driver test; }; in (if makeCoverageReport then report else test) // { inherit nodes driver test; };
runInMachine = runInMachine =

View File

@ -179,7 +179,6 @@ in
fileSystems."/" = fileSystems."/" =
{ fsType = "tmpfs"; { fsType = "tmpfs";
device = "none";
options = "mode=0755"; options = "mode=0755";
}; };
@ -192,6 +191,8 @@ in
noCheck = true; noCheck = true;
}; };
# In stage 1, mount a tmpfs on top of /nix/store (the squashfs
# image) to make this a live CD.
fileSystems."/nix/.ro-store" = fileSystems."/nix/.ro-store" =
{ fsType = "squashfs"; { fsType = "squashfs";
device = "/iso/nix-store.squashfs"; device = "/iso/nix-store.squashfs";
@ -201,23 +202,20 @@ in
fileSystems."/nix/.rw-store" = fileSystems."/nix/.rw-store" =
{ fsType = "tmpfs"; { fsType = "tmpfs";
device = "none";
options = "mode=0755"; options = "mode=0755";
neededForBoot = true; neededForBoot = true;
}; };
fileSystems."/nix/store" =
{ fsType = "unionfs-fuse";
device = "unionfs";
options = "allow_other,cow,nonempty,chroot=/mnt-root,max_files=32768,hide_meta_files,dirs=/nix/.rw-store=rw:/nix/.ro-store=ro";
};
boot.initrd.availableKernelModules = [ "squashfs" "iso9660" ]; boot.initrd.availableKernelModules = [ "squashfs" "iso9660" ];
boot.initrd.kernelModules = [ "loop" ]; boot.initrd.kernelModules = [ "loop" ];
# In stage 1, mount a tmpfs on top of /nix/store (the squashfs
# image) to make this a live CD.
boot.initrd.postMountCommands =
''
mkdir -p $targetRoot/nix/store
unionfs -o allow_other,cow,nonempty,chroot=$targetRoot,max_files=32768 /nix/.rw-store=RW:/nix/.ro-store=RO $targetRoot/nix/store
'';
# Closures to be copied to the Nix store on the CD, namely the init # Closures to be copied to the Nix store on the CD, namely the init
# script and the top-level system configuration directory. # script and the top-level system configuration directory.
isoImage.storeContents = isoImage.storeContents =
@ -313,8 +311,8 @@ in
''; '';
# Add vfat support to the initrd to enable people to copy the # Add vfat support to the initrd to enable people to copy the
# contents of the CD to a bootable USB stick. Need unionfs-fuse for union mounts # contents of the CD to a bootable USB stick.
boot.initrd.supportedFilesystems = [ "vfat" "unionfs-fuse" ]; boot.initrd.supportedFilesystems = [ "vfat" ];
}; };

View File

@ -137,6 +137,7 @@
gitolite = 127; gitolite = 127;
znc = 128; znc = 128;
polipo = 129; polipo = 129;
mopidy = 130;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399! # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
@ -248,6 +249,8 @@
firebird = 127; firebird = 127;
znc = 128; znc = 128;
polipo = 129; polipo = 129;
mopidy = 130;
docker = 131;
# When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399! # When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399!

View File

@ -79,6 +79,7 @@
./services/audio/alsa.nix ./services/audio/alsa.nix
./services/audio/fuppes.nix ./services/audio/fuppes.nix
./services/audio/mpd.nix ./services/audio/mpd.nix
./services/audio/mopidy.nix
./services/backup/almir.nix ./services/backup/almir.nix
./services/backup/bacula.nix ./services/backup/bacula.nix
./services/backup/mysql-backup.nix ./services/backup/mysql-backup.nix
@ -296,6 +297,7 @@
./services/x11/xserver.nix ./services/x11/xserver.nix
./system/activation/activation-script.nix ./system/activation/activation-script.nix
./system/activation/top-level.nix ./system/activation/top-level.nix
./system/boot/emergency-mode.nix
./system/boot/kernel.nix ./system/boot/kernel.nix
./system/boot/kexec.nix ./system/boot/kexec.nix
./system/boot/loader/efi.nix ./system/boot/loader/efi.nix
@ -311,15 +313,17 @@
./system/boot/stage-1.nix ./system/boot/stage-1.nix
./system/boot/stage-2.nix ./system/boot/stage-2.nix
./system/boot/systemd.nix ./system/boot/systemd.nix
./system/boot/tmp.nix
./system/etc/etc.nix ./system/etc/etc.nix
./system/upstart/upstart.nix ./system/upstart/upstart.nix
./tasks/cpu-freq.nix ./tasks/cpu-freq.nix
./tasks/encrypted-devices.nix ./tasks/encrypted-devices.nix
./tasks/filesystems.nix
./tasks/filesystems/btrfs.nix ./tasks/filesystems/btrfs.nix
./tasks/filesystems/cifs.nix
./tasks/filesystems/ext.nix ./tasks/filesystems/ext.nix
./tasks/filesystems/f2fs.nix ./tasks/filesystems/f2fs.nix
./tasks/filesystems/nfs.nix ./tasks/filesystems/nfs.nix
./tasks/filesystems.nix
./tasks/filesystems/reiserfs.nix ./tasks/filesystems/reiserfs.nix
./tasks/filesystems/unionfs-fuse.nix ./tasks/filesystems/unionfs-fuse.nix
./tasks/filesystems/vfat.nix ./tasks/filesystems/vfat.nix
@ -334,6 +338,7 @@
./testing/service-runner.nix ./testing/service-runner.nix
./virtualisation/container-config.nix ./virtualisation/container-config.nix
./virtualisation/containers.nix ./virtualisation/containers.nix
./virtualisation/docker.nix
./virtualisation/libvirtd.nix ./virtualisation/libvirtd.nix
#./virtualisation/nova.nix #./virtualisation/nova.nix
./virtualisation/virtualbox-guest.nix ./virtualisation/virtualbox-guest.nix

View File

@ -7,7 +7,6 @@
# Include some utilities that are useful for installing or repairing # Include some utilities that are useful for installing or repairing
# the system. # the system.
environment.systemPackages = [ environment.systemPackages = [
pkgs.subversion # for nixos-checkout
pkgs.w3m # needed for the manual anyway pkgs.w3m # needed for the manual anyway
pkgs.testdisk # useful for repairing boot problems pkgs.testdisk # useful for repairing boot problems
pkgs.mssys # for writing Microsoft boot sectors / MBRs pkgs.mssys # for writing Microsoft boot sectors / MBRs

View File

@ -13,8 +13,9 @@ with lib;
]; ];
environment.sessionVariables = environment.sessionVariables =
{ OPENSSL_X509_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt"; { SSL_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt";
CURL_CA_BUNDLE = "/etc/ssl/certs/ca-bundle.crt"; # FIXME: unneeded - remove eventually.
OPENSSL_X509_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt";
GIT_SSL_CAINFO = "/etc/ssl/certs/ca-bundle.crt"; GIT_SSL_CAINFO = "/etc/ssl/certs/ca-bundle.crt";
}; };

View File

@ -0,0 +1,107 @@
{ config, lib, pkgs, ... }:
with pkgs;
with lib;
let
uid = config.ids.uids.mopidy;
gid = config.ids.gids.mopidy;
cfg = config.services.mopidy;
mopidyConf = writeText "mopidy.conf" cfg.configuration;
mopidyLauncher = stdenv.mkDerivation {
name = "mopidy-launcher";
phases = [ "installPhase" ];
buildInputs = [ makeWrapper python ];
installPhase = ''
mkdir -p $out/bin
ln -s ${mopidy}/bin/mopidy $out/bin/mopidy
wrapProgram $out/bin/mopidy \
--prefix PYTHONPATH : \
"${concatStringsSep ":" (map (p: "$(toPythonPath ${p})") cfg.extensionPackages)}"
'';
};
in {
options = {
services.mopidy = {
enable = mkOption {
default = false;
type = types.bool;
description = ''
Whether to enable Mopidy, a music player daemon.
'';
};
dataDir = mkOption {
default = "/var/lib/mopidy";
type = types.str;
description = ''
The directory where Mopidy stores its state.
'';
};
extensionPackages = mkOption {
default = [];
type = types.listOf types.package;
example = [ mopidy-spotify ];
description = ''
Mopidy extensions that should be loaded by the service.
'';
};
configuration = mkOption {
type = types.lines;
description = ''
The configuration that Mopidy should use.
'';
};
extraConfigFiles = mkOption {
default = [];
type = types.listOf types.str;
description = ''
Extra config file read by Mopidy when the service starts.
Later files in the list overrides earlier configuration.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
systemd.services.mopidy = {
wantedBy = [ "multi-user.target" ];
after = [ "network.target" "sound.target" ];
description = "mopidy music player daemon";
preStart = "mkdir -p ${cfg.dataDir} && chown -R mopidy:mopidy ${cfg.dataDir}";
serviceConfig = {
ExecStart = "${mopidyLauncher}/bin/mopidy --config ${concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)}";
User = "mopidy";
PermissionsStartOnly = true;
};
};
users.extraUsers.mopidy = {
inherit uid;
group = "mopidy";
extraGroups = [ "audio" ];
description = "Mopidy daemon user";
home = "${cfg.dataDir}";
};
users.extraGroups.mopidy.gid = gid;
};
}

View File

@ -22,14 +22,11 @@ let
nixConf = nixConf =
let let
# Tricky: if we're using a chroot for builds, then we need # If we're using a chroot for builds, then provide /bin/sh in
# /bin/sh in the chroot (our own compromise to purity). # the chroot as a bind-mount to bash. This means we also need to
# However, since /bin/sh is a symlink to some path in the # include the entire closure of bash.
# Nix store, which furthermore has runtime dependencies on sh = pkgs.stdenv.shell;
# other paths in the store, we need the closure of /bin/sh binshDeps = pkgs.writeReferencesToFile sh;
# in `build-chroot-dirs' - otherwise any builder that uses
# /bin/sh won't work.
binshDeps = pkgs.writeReferencesToFile config.system.build.binsh;
in in
pkgs.runCommand "nix.conf" {extraOptions = cfg.extraOptions; } '' pkgs.runCommand "nix.conf" {extraOptions = cfg.extraOptions; } ''
extraPaths=$(for i in $(cat ${binshDeps}); do if test -d $i; then echo $i; fi; done) extraPaths=$(for i in $(cat ${binshDeps}); do if test -d $i; then echo $i; fi; done)
@ -40,7 +37,7 @@ let
build-users-group = nixbld build-users-group = nixbld
build-max-jobs = ${toString (cfg.maxJobs)} build-max-jobs = ${toString (cfg.maxJobs)}
build-use-chroot = ${if cfg.useChroot then "true" else "false"} build-use-chroot = ${if cfg.useChroot then "true" else "false"}
build-chroot-dirs = ${toString cfg.chrootDirs} $(echo $extraPaths) build-chroot-dirs = ${toString cfg.chrootDirs} /bin/sh=${sh} $(echo $extraPaths)
binary-caches = ${toString cfg.binaryCaches} binary-caches = ${toString cfg.binaryCaches}
trusted-binary-caches = ${toString cfg.trustedBinaryCaches} trusted-binary-caches = ${toString cfg.trustedBinaryCaches}
$extraOptions $extraOptions
@ -253,8 +250,6 @@ in
config = { config = {
nix.chrootDirs = [ "/bin" ];
environment.etc."nix/nix.conf".source = nixConf; environment.etc."nix/nix.conf".source = nixConf;
# List of machines for distributed Nix builds in the format # List of machines for distributed Nix builds in the format

View File

@ -122,9 +122,8 @@ in {
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
after = [ "network-interfaces.target" ]; after = [ "network-interfaces.target" ];
environment = { ES_HOME = cfg.dataDir; }; environment = { ES_HOME = cfg.dataDir; };
path = [ pkgs.elasticsearch ];
serviceConfig = { serviceConfig = {
ExecStart = "elasticsearch -Des.path.conf=${configDir} ${toString cfg.extraCmdLineOptions}"; ExecStart = "${pkgs.elasticsearch}/bin/elasticsearch -Des.path.conf=${configDir} ${toString cfg.extraCmdLineOptions}";
User = "elasticsearch"; User = "elasticsearch";
PermissionsStartOnly = true; PermissionsStartOnly = true;
}; };

View File

@ -387,7 +387,7 @@ let
''; '';
enablePHP = any (svc: svc.enablePHP) allSubservices; enablePHP = mainCfg.enablePHP || any (svc: svc.enablePHP) allSubservices;
# Generate the PHP configuration file. Should probably be factored # Generate the PHP configuration file. Should probably be factored
@ -531,6 +531,12 @@ in
''; '';
}; };
enablePHP = mkOption {
type = types.bool;
default = false;
description = "Whether to enable the PHP module.";
};
phpOptions = mkOption { phpOptions = mkOption {
type = types.lines; type = types.lines;
default = ""; default = "";

View File

@ -29,6 +29,14 @@ ${extraWorkersProperties}
''; '';
in in
{ {
options = {
extraWorkersProperties = lib.mkOption {
default = "";
description = "Additional configuration for the workers.properties file.";
};
};
extraModules = [ extraModules = [
{ name = "jk"; path = "${pkgs.tomcat_connectors}/modules/mod_jk.so"; } { name = "jk"; path = "${pkgs.tomcat_connectors}/modules/mod_jk.so"; }
]; ];

View File

@ -77,6 +77,11 @@ in
description = "Whether to enable logging per virtual host."; description = "Whether to enable logging per virtual host.";
}; };
jdk = mkOption {
default = pkgs.jdk;
description = "Which JDK to use.";
};
axis2 = { axis2 = {
enable = mkOption { enable = mkOption {
@ -332,13 +337,13 @@ in
''; '';
script = '' script = ''
${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c 'CATALINA_BASE=${cfg.baseDir} JAVA_HOME=${pkgs.jdk} JAVA_OPTS="${cfg.javaOpts}" CATALINA_OPTS="${cfg.catalinaOpts}" ${tomcat}/bin/startup.sh' ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c 'CATALINA_BASE=${cfg.baseDir} JAVA_HOME=${cfg.jdk} JAVA_OPTS="${cfg.javaOpts}" CATALINA_OPTS="${cfg.catalinaOpts}" ${tomcat}/bin/startup.sh'
''; '';
postStop = postStop =
'' ''
echo "Stopping tomcat..." echo "Stopping tomcat..."
CATALINA_BASE=${cfg.baseDir} JAVA_HOME=${pkgs.jdk} ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c ${tomcat}/bin/shutdown.sh CATALINA_BASE=${cfg.baseDir} JAVA_HOME=${cfg.jdk} ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c ${tomcat}/bin/shutdown.sh
''; '';
}; };

View File

@ -1,6 +1,6 @@
{ config, pkgs, ... }: { config, pkgs, lib, ... }:
with pkgs.lib; with lib;
let let

View File

@ -41,16 +41,19 @@ in {
}; };
accelFactor = mkOption { accelFactor = mkOption {
type = types.nullOr types.string;
default = "0.001"; default = "0.001";
description = "Cursor acceleration (how fast speed increases from minSpeed to maxSpeed)."; description = "Cursor acceleration (how fast speed increases from minSpeed to maxSpeed).";
}; };
minSpeed = mkOption { minSpeed = mkOption {
type = types.nullOr types.string;
default = "0.6"; default = "0.6";
description = "Cursor speed factor for precision finger motion."; description = "Cursor speed factor for precision finger motion.";
}; };
maxSpeed = mkOption { maxSpeed = mkOption {
type = types.nullOr types.string;
default = "1.0"; default = "1.0";
description = "Cursor speed factor for highest-speed finger motion."; description = "Cursor speed factor for highest-speed finger motion.";
}; };
@ -120,9 +123,9 @@ in {
MatchIsTouchpad "on" MatchIsTouchpad "on"
${optionalString (cfg.dev != null) ''MatchDevicePath "${cfg.dev}"''} ${optionalString (cfg.dev != null) ''MatchDevicePath "${cfg.dev}"''}
Driver "synaptics" Driver "synaptics"
Option "MinSpeed" "${cfg.minSpeed}" ${optionalString (cfg.minSpeed != null) ''Option "MinSpeed" "${cfg.minSpeed}"''}
Option "MaxSpeed" "${cfg.maxSpeed}" ${optionalString (cfg.maxSpeed != null) ''Option "MaxSpeed" "${cfg.maxSpeed}"''}
Option "AccelFactor" "${cfg.accelFactor}" ${optionalString (cfg.accelFactor != null) ''Option "AccelFactor" "${cfg.accelFactor}"''}
${optionalString cfg.tapButtons tapConfig} ${optionalString cfg.tapButtons tapConfig}
Option "ClickFinger1" "${builtins.elemAt cfg.buttonsMap 0}" Option "ClickFinger1" "${builtins.elemAt cfg.buttonsMap 0}"
Option "ClickFinger2" "${builtins.elemAt cfg.buttonsMap 1}" Option "ClickFinger2" "${builtins.elemAt cfg.buttonsMap 1}"

View File

@ -0,0 +1,37 @@
{ config, lib, ... }:
with lib;
{
###### interface
options = {
systemd.enableEmergencyMode = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable emergency mode, which is an
<command>sulogin</command> shell started on the console if
mounting a filesystem fails. Since some machines (like EC2
instances) have no console of any kind, emergency mode doesn't
make sense, and it's better to continue with the boot insofar
as possible.
'';
};
};
###### implementation
config = {
systemd.additionalUpstreamSystemUnits = optionals
config.systemd.enableEmergencyMode [
"emergency.target" "emergency.service"
];
};
}

View File

@ -68,20 +68,15 @@ with lib;
config = mkIf (!config.boot.isContainer) { config = mkIf (!config.boot.isContainer) {
environment.etc = [ environment.etc."modprobe.d/ubuntu.conf".source = "${pkgs.kmod-blacklist-ubuntu}/modprobe.conf";
{ source = "${pkgs.kmod-blacklist-ubuntu}/modprobe.conf";
target = "modprobe.d/ubuntu.conf"; environment.etc."modprobe.d/nixos.conf".text =
}
{ source = pkgs.writeText "modprobe.conf"
'' ''
${flip concatMapStrings config.boot.blacklistedKernelModules (name: '' ${flip concatMapStrings config.boot.blacklistedKernelModules (name: ''
blacklist ${name} blacklist ${name}
'')} '')}
${config.boot.extraModprobeConfig} ${config.boot.extraModprobeConfig}
''; '';
target = "modprobe.d/nixos.conf";
}
];
environment.systemPackages = [ config.system.sbin.modprobe pkgs.kmod ]; environment.systemPackages = [ config.system.sbin.modprobe pkgs.kmod ];

View File

@ -4,7 +4,8 @@ targetRoot=/mnt-root
console=tty1 console=tty1
export LD_LIBRARY_PATH=@extraUtils@/lib export LD_LIBRARY_PATH=@extraUtils@/lib
export PATH=@extraUtils@/bin:@extraUtils@/sbin export PATH=@extraUtils@/bin
ln -s @extraUtils@/bin /bin
fail() { fail() {
@ -262,6 +263,13 @@ mountFS() {
checkFS "$device" "$fsType" checkFS "$device" "$fsType"
# Create backing directories for unionfs-fuse.
if [ "$fsType" = unionfs-fuse ]; then
for i in $(IFS=:; echo ${options##*,dirs=}); do
mkdir -m 0700 -p /mnt-root"${i%=*}"
done
fi
echo "mounting $device on $mountPoint..." echo "mounting $device on $mountPoint..."
mkdir -p "/mnt-root$mountPoint" || true mkdir -p "/mnt-root$mountPoint" || true

View File

@ -23,22 +23,6 @@ let
}; };
needsCifsUtils = kernelPackages.kernel ? features
&& kernelPackages.kernel.features ? needsCifsUtils
&& kernelPackages.kernel.features.needsCifsUtils
&& any (fs: fs.fsType == "cifs") fileSystems;
busybox =
if needsCifsUtils
then pkgs.busybox.override {
extraConfig = ''
CONFIG_FEATURE_MOUNT_CIFS n
CONFIG_FEATURE_MOUNT_HELPERS y
'';
}
else pkgs.busybox;
# Some additional utilities needed in stage 1, like mount, lvm, fsck # Some additional utilities needed in stage 1, like mount, lvm, fsck
# etc. We don't want to bring in all of those packages, so we just # etc. We don't want to bring in all of those packages, so we just
# copy what we need. Instead of using statically linked binaries, # copy what we need. Instead of using statically linked binaries,
@ -51,6 +35,7 @@ let
} }
'' ''
mkdir -p $out/bin $out/lib mkdir -p $out/bin $out/lib
ln -s $out/bin $out/sbin
# Copy what we need from Glibc. # Copy what we need from Glibc.
cp -pv ${pkgs.glibc}/lib/ld*.so.? $out/lib cp -pv ${pkgs.glibc}/lib/ld*.so.? $out/lib
@ -62,11 +47,10 @@ let
cp -pv ${pkgs.gcc.gcc}/lib*/libgcc_s.so.* $out/lib cp -pv ${pkgs.gcc.gcc}/lib*/libgcc_s.so.* $out/lib
# Copy BusyBox. # Copy BusyBox.
cp -rvd ${busybox}/{bin,sbin} $out/ cp -pvd ${pkgs.busybox}/bin/* ${pkgs.busybox}/sbin/* $out/bin/
chmod -R u+w $out
# Copy some utillinux stuff. # Copy some utillinux stuff.
cp -v ${pkgs.utillinux}/sbin/blkid $out/bin cp -vf ${pkgs.utillinux}/sbin/blkid $out/bin
cp -pdv ${pkgs.utillinux}/lib/libblkid*.so.* $out/lib cp -pdv ${pkgs.utillinux}/lib/libblkid*.so.* $out/lib
cp -pdv ${pkgs.utillinux}/lib/libuuid*.so.* $out/lib cp -pdv ${pkgs.utillinux}/lib/libuuid*.so.* $out/lib
@ -89,12 +73,7 @@ let
# Copy modprobe. # Copy modprobe.
cp -v ${pkgs.kmod}/bin/kmod $out/bin/ cp -v ${pkgs.kmod}/bin/kmod $out/bin/
ln -s kmod $out/bin/modprobe ln -sf kmod $out/bin/modprobe
# Maybe copy cifs utils
${optionalString needsCifsUtils ''
cp -v ${pkgs.cifs_utils}/sbin/mount.cifs $out/bin
''}
${config.boot.initrd.extraUtilsCommands} ${config.boot.initrd.extraUtilsCommands}
@ -313,6 +292,13 @@ in
example = "xz"; example = "xz";
}; };
boot.initrd.supportedFilesystems = mkOption {
default = [ ];
example = [ "btrfs" ];
type = types.listOf types.string;
description = "Names of supported filesystem types in the initial ramdisk.";
};
fileSystems = mkOption { fileSystems = mkOption {
options.neededForBoot = mkOption { options.neededForBoot = mkOption {
default = false; default = false;
@ -347,5 +333,7 @@ in
# Prevent systemd from waiting for the /dev/root symlink. # Prevent systemd from waiting for the /dev/root symlink.
systemd.units."dev-root.device".text = ""; systemd.units."dev-root.device".text = "";
boot.initrd.supportedFilesystems = map (fs: fs.fsType) fileSystems;
}; };
} }

View File

@ -29,7 +29,7 @@ setPath "@path@"
# Normally, stage 1 mounts the root filesystem read/writable. # Normally, stage 1 mounts the root filesystem read/writable.
# However, in some environments, stage 2 is executed directly, and the # However, in some environments, stage 2 is executed directly, and the
# root is read-only. So make it writable here. # root is read-only. So make it writable here.
mount -n -o remount,rw / mount -n -o remount,rw none /
# Likewise, stage 1 mounts /proc, /dev and /sys, so if we don't have a # Likewise, stage 1 mounts /proc, /dev and /sys, so if we don't have a
@ -98,12 +98,6 @@ mkdir -m 0755 -p /etc/nixos
rm -rf /var/run /var/lock rm -rf /var/run /var/lock
rm -f /etc/{group,passwd,shadow}.lock rm -f /etc/{group,passwd,shadow}.lock
if test -n "@cleanTmpDir@"; then
echo -n "cleaning \`/tmp'..."
find /tmp -maxdepth 1 -mindepth 1 -print0 | xargs -0r rm -rf --one-file-system
echo " done"
fi
# Also get rid of temporary GC roots. # Also get rid of temporary GC roots.
rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots

View File

@ -17,7 +17,7 @@ let
src = ./stage-2-init.sh; src = ./stage-2-init.sh;
shellDebug = "${pkgs.bashInteractive}/bin/bash"; shellDebug = "${pkgs.bashInteractive}/bin/bash";
isExecutable = true; isExecutable = true;
inherit (config.boot) devShmSize runSize cleanTmpDir; inherit (config.boot) devShmSize runSize;
inherit (config.nix) readOnlyStore; inherit (config.nix) readOnlyStore;
inherit (config.networking) useHostResolvConf; inherit (config.networking) useHostResolvConf;
ttyGid = config.ids.gids.tty; ttyGid = config.ids.gids.tty;
@ -26,8 +26,7 @@ let
pkgs.utillinux pkgs.utillinux
pkgs.sysvtools pkgs.sysvtools
pkgs.openresolv pkgs.openresolv
] ++ (optional config.boot.cleanTmpDir pkgs.findutils) ] ++ optional config.nix.readOnlyStore readonlyMountpoint;
++ optional config.nix.readOnlyStore readonlyMountpoint;
postBootCommands = pkgs.writeText "local-cmds" postBootCommands = pkgs.writeText "local-cmds"
'' ''
${config.boot.postBootCommands} ${config.boot.postBootCommands}
@ -81,15 +80,6 @@ in
''; '';
}; };
# FIXME: should replace this with something that uses systemd-tmpfiles.
cleanTmpDir = mkOption {
type = types.bool;
default = false;
description = ''
Whether to delete all files in <filename>/tmp</filename> during boot.
'';
};
}; };
}; };

View File

@ -162,10 +162,7 @@ let
"systemd-sysctl.service" "systemd-sysctl.service"
] ]
++ optionals cfg.enableEmergencyMode [ ++ cfg.additionalUpstreamSystemUnits;
"emergency.target"
"emergency.service"
];
upstreamSystemWants = upstreamSystemWants =
[ #"basic.target.wants" [ #"basic.target.wants"
@ -317,7 +314,9 @@ let
'' ''
[Service] [Service]
${let env = cfg.globalEnvironment // def.environment; ${let env = cfg.globalEnvironment // def.environment;
in concatMapStrings (n: "Environment=\"${n}=${getAttr n env}\"\n") (attrNames env)} in concatMapStrings (n:
let s = "Environment=\"${n}=${getAttr n env}\"\n";
in if stringLength s >= 2048 then throw "The value of the environment variable ${n} in systemd service ${name}.service is too long." else s) (attrNames env)}
${if def.reloadIfChanged then '' ${if def.reloadIfChanged then ''
X-ReloadIfChanged=true X-ReloadIfChanged=true
'' else if !def.restartIfChanged then '' '' else if !def.restartIfChanged then ''
@ -635,19 +634,6 @@ in
''; '';
}; };
systemd.enableEmergencyMode = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable emergency mode, which is an
<command>sulogin</command> shell started on the console if
mounting a filesystem fails. Since some machines (like EC2
instances) have no console of any kind, emergency mode doesn't
make sense, and it's better to continue with the boot insofar
as possible.
'';
};
systemd.tmpfiles.rules = mkOption { systemd.tmpfiles.rules = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = []; default = [];
@ -690,6 +676,15 @@ in
description = "Definition of systemd per-user socket units."; description = "Definition of systemd per-user socket units.";
}; };
systemd.additionalUpstreamSystemUnits = mkOption {
default = [ ];
type = types.listOf types.str;
example = [ "debug-shell.service" "systemd-quotacheck.service" ];
description = ''
Additional units shipped with systemd that shall be enabled.
'';
};
}; };

View File

@ -0,0 +1,39 @@
{ config, lib, ... }:
with lib;
{
###### interface
options = {
boot.cleanTmpDir = mkOption {
type = types.bool;
default = false;
description = ''
Whether to delete all files in <filename>/tmp</filename> during boot.
'';
};
boot.tmpOnTmpfs = mkOption {
type = types.bool;
default = false;
description = ''
Whether to mount a tmpfs on <filename>/tmp</filename> during boot.
'';
};
};
###### implementation
config = {
systemd.additionalUpstreamSystemUnits = optional config.boot.tmpOnTmpfs "tmp.mount";
systemd.tmpfiles.rules = optional config.boot.cleanTmpDir "D! /tmp 1777 root root";
};
}

View File

@ -9,7 +9,7 @@ let
prioOption = prio: optionalString (prio !=null) " pri=${toString prio}"; prioOption = prio: optionalString (prio !=null) " pri=${toString prio}";
fileSystemOpts = { name, ... }: { fileSystemOpts = { name, config, ... }: {
options = { options = {
@ -68,6 +68,7 @@ let
config = { config = {
mountPoint = mkDefault name; mountPoint = mkDefault name;
device = mkIf (config.fsType == "tmpfs") (mkDefault config.fsType);
}; };
}; };
@ -124,13 +125,6 @@ in
description = "Names of supported filesystem types."; description = "Names of supported filesystem types.";
}; };
boot.initrd.supportedFilesystems = mkOption {
default = [ ];
example = [ "btrfs" ];
type = types.listOf types.string;
description = "Names of supported filesystem types in the initial ramdisk.";
};
}; };
@ -140,15 +134,11 @@ in
boot.supportedFilesystems = map (fs: fs.fsType) fileSystems; boot.supportedFilesystems = map (fs: fs.fsType) fileSystems;
boot.initrd.supportedFilesystems =
map (fs: fs.fsType)
(filter (fs: fs.mountPoint == "/" || fs.neededForBoot) fileSystems);
# Add the mount helpers to the system path so that `mount' can find them. # Add the mount helpers to the system path so that `mount' can find them.
system.fsPackages = [ pkgs.dosfstools ]; system.fsPackages = [ pkgs.dosfstools ];
environment.systemPackages = environment.systemPackages =
[ pkgs.ntfs3g pkgs.cifs_utils pkgs.fuse ] [ pkgs.ntfs3g pkgs.fuse ]
++ config.system.fsPackages; ++ config.system.fsPackages;
environment.etc.fstab.text = environment.etc.fstab.text =
@ -157,7 +147,9 @@ in
# Filesystems. # Filesystems.
${flip concatMapStrings fileSystems (fs: ${flip concatMapStrings fileSystems (fs:
(if fs.device != null then fs.device else "/dev/disk/by-label/${fs.label}") (if fs.device != null then fs.device
else if fs.label != null then "/dev/disk/by-label/${fs.label}"
else throw "No device specified for mount point ${fs.mountPoint}.")
+ " " + fs.mountPoint + " " + fs.mountPoint
+ " " + fs.fsType + " " + fs.fsType
+ " " + fs.options + " " + fs.options

View File

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
inInitrd = any (fs: fs == "cifs") config.boot.initrd.supportedFilesystems;
in
{
config = {
system.fsPackages = [ pkgs.cifs_utils ];
boot.initrd.availableKernelModules = mkIf inInitrd
[ "cifs" "nls_utf8" "hmac" "md4" "ecb" "des_generic" "sha256" ];
boot.initrd.extraUtilsCommands = mkIf inInitrd
''
cp -v ${pkgs.cifs_utils}/sbin/mount.cifs $out/bin
'';
};
}

View File

@ -2,12 +2,19 @@
{ {
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.initrd.supportedFilesystems) { (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.initrd.supportedFilesystems) {
boot.initrd.kernelModules = [ "fuse" ]; boot.initrd.kernelModules = [ "fuse" ];
boot.initrd.extraUtilsCommands = '' boot.initrd.extraUtilsCommands = ''
cp -v ${pkgs.fuse}/lib/libfuse* $out/lib cp -v ${pkgs.fuse}/lib/libfuse* $out/lib
cp -v ${pkgs.fuse}/sbin/mount.fuse $out/bin
cp -v ${pkgs.unionfs-fuse}/bin/unionfs $out/bin cp -v ${pkgs.unionfs-fuse}/bin/unionfs $out/bin
substitute ${pkgs.unionfs-fuse}/sbin/mount.unionfs-fuse $out/bin/mount.unionfs-fuse \
--replace '${pkgs.bash}/bin/bash' /bin/sh \
--replace '${pkgs.fuse}/sbin' /bin \
--replace '${pkgs.unionfs-fuse}/bin' /bin
chmod +x $out/bin/mount.unionfs-fuse
''; '';
boot.initrd.postDeviceCommands = '' boot.initrd.postDeviceCommands = ''
@ -17,8 +24,10 @@
ln -s $(which umount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.utillinux.name}/bin ln -s $(which umount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.utillinux.name}/bin
''; '';
}) })
(lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.supportedFilesystems) { (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.supportedFilesystems) {
system.fsPackages = [ pkgs.unionfs-fuse ]; system.fsPackages = [ pkgs.unionfs-fuse ];
}) })
]; ];
} }

View File

@ -46,21 +46,15 @@ with lib;
config = mkIf config.hardware.trackpoint.enable { config = mkIf config.hardware.trackpoint.enable {
jobs.trackpoint = services.udev.extraRules =
{ description = "Initialize trackpoint"; ''
ACTION=="add|change", SUBSYSTEM=="input", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{device/speed}="${toString config.hardware.trackpoint.speed}", ATTR{device/sensitivity}="${toString config.hardware.trackpoint.sensitivity}"
'';
startOn = "started udev"; system.activationScripts.trackpoint =
''
task = true; ${config.systemd.package}/bin/udevadm trigger --attr-match=name="TPPS/2 IBM TrackPoint"
script = ''
echo -n ${toString config.hardware.trackpoint.sensitivity} \
> /sys/devices/platform/i8042/serio1/sensitivity
echo -n ${toString config.hardware.trackpoint.speed} \
> /sys/devices/platform/i8042/serio1/speed
''; '';
}; };
};
} }

View File

@ -172,7 +172,7 @@ in
boot.initrd.extraUtilsCommands = boot.initrd.extraUtilsCommands =
'' ''
# We need swapon in the initrd. # We need swapon in the initrd.
cp ${pkgs.utillinux}/sbin/swapon $out/bin cp --remove-destination ${pkgs.utillinux}/sbin/swapon $out/bin
''; '';
# Don't put old configurations in the GRUB menu. The user has no # Don't put old configurations in the GRUB menu. The user has no

View File

@ -0,0 +1,109 @@
# Systemd services for docker.
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.virtualisation.docker;
in
{
###### interface
options.virtualisation.docker = {
enable =
mkOption {
type = types.bool;
default = false;
description =
''
This option enables docker, a daemon that manages
linux containers. Users in the "docker" group can interact with
the daemon (e.g. to start or stop containers) using the
<command>docker</command> command line tool.
'';
};
socketActivation =
mkOption {
type = types.bool;
default = false;
description =
''
This option enables docker with socket activation. I.e. docker will
start when first called by client.
Note: This is false by default because systemd lower than 214 that
nixos uses so far, doesn't support SocketGroup option, so socket
created by docker has root group now. This will likely be changed
in future. So set this option explicitly to false if you wish.
'';
};
extraOptions =
mkOption {
type = types.str;
default = "";
description =
''
The extra command-line options to pass to
<command>docker</command> daemon.
'';
};
};
###### implementation
config = mkIf cfg.enable (mkMerge [
{ environment.systemPackages = [ pkgs.docker ];
}
(mkIf cfg.socketActivation {
systemd.services.docker = {
description = "Docker Application Container Engine";
after = [ "network.target" "docker.socket" ];
requires = [ "docker.socket" ];
serviceConfig = {
ExecStart = "${pkgs.docker}/bin/docker --daemon=true --host=fd:// --group=docker ${cfg.extraOptions}";
# I'm not sure if that limits aren't too high, but it's what
# goes in config bundled with docker itself
LimitNOFILE = 1048576;
LimitNPROC = 1048576;
};
};
systemd.sockets.docker = {
description = "Docker Socket for the API";
wantedBy = [ "sockets.target" ];
socketConfig = {
ListenStream = "/var/run/docker.sock";
SocketMode = "0660";
SocketUser = "root";
SocketGroup = "docker";
};
};
})
(mkIf (!cfg.socketActivation) {
systemd.services.docker = {
description = "Docker Application Container Engine";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
ExecStart = "${pkgs.docker}/bin/docker --daemon=true --group=docker ${cfg.extraOptions}";
# I'm not sure if that limits aren't too high, but it's what
# goes in config bundled with docker itself
LimitNOFILE = 1048576;
LimitNPROC = 1048576;
};
# Presumably some containers are running we don't want to interrupt
restartIfChanged = false;
};
})
]);
}

View File

@ -121,19 +121,6 @@ in
networking.usePredictableInterfaceNames = false; networking.usePredictableInterfaceNames = false;
systemd.services.wait-metadata-online = {
description = "Wait for GCE metadata server to become reachable";
wantedBy = [ "network-online.target" ];
before = [ "network-online.target" ];
path = [ pkgs.netcat ];
script = ''
# wait for the metadata server to become available for up to 60 seconds
for counter in {1..30}; do sleep 2 && nc -vzw 2 metadata 80 && break; done
'';
serviceConfig.Type = "oneshot";
serviceConfig.RemainAfterExit = true;
};
systemd.services.fetch-ssh-keys = systemd.services.fetch-ssh-keys =
{ description = "Fetch host keys and authorized_keys for root user"; { description = "Fetch host keys and authorized_keys for root user";
@ -142,14 +129,15 @@ in
after = [ "network-online.target" ]; after = [ "network-online.target" ];
wants = [ "network-online.target" ]; wants = [ "network-online.target" ];
path = [ pkgs.curl ]; path = [ pkgs.wget ];
script = script =
'' ''
wget="wget --retry-connrefused -t 6 --waitretry=10"
# Don't download the SSH key if it has already been downloaded # Don't download the SSH key if it has already been downloaded
if ! [ -e /root/.ssh/authorized_keys ]; then if ! [ -e /root/.ssh/authorized_keys ]; then
echo "obtaining SSH key..." echo "obtaining SSH key..."
mkdir -p /root/.ssh mkdir -p /root/.ssh
curl -o /root/authorized-keys-metadata http://metadata/0.1/meta-data/authorized-keys $wget -O /root/authorized-keys-metadata http://metadata/0.1/meta-data/authorized-keys
if [ $? -eq 0 -a -e /root/authorized-keys-metadata ]; then if [ $? -eq 0 -a -e /root/authorized-keys-metadata ]; then
cat /root/authorized-keys-metadata | cut -d: -f2- > /root/key.pub cat /root/authorized-keys-metadata | cut -d: -f2- > /root/key.pub
if ! grep -q -f /root/key.pub /root/.ssh/authorized_keys; then if ! grep -q -f /root/key.pub /root/.ssh/authorized_keys; then
@ -162,7 +150,7 @@ in
fi fi
echo "obtaining SSH private host key..." echo "obtaining SSH private host key..."
curl -o /root/ssh_host_ecdsa_key --retry-max-time 60 http://metadata/0.1/meta-data/attributes/ssh_host_ecdsa_key $wget -O /root/ssh_host_ecdsa_key http://metadata/0.1/meta-data/attributes/ssh_host_ecdsa_key
if [ $? -eq 0 -a -e /root/ssh_host_ecdsa_key ]; then if [ $? -eq 0 -a -e /root/ssh_host_ecdsa_key ]; then
mv -f /root/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key mv -f /root/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key
echo "downloaded ssh_host_ecdsa_key" echo "downloaded ssh_host_ecdsa_key"
@ -170,7 +158,7 @@ in
fi fi
echo "obtaining SSH public host key..." echo "obtaining SSH public host key..."
curl -o /root/ssh_host_ecdsa_key.pub --retry-max-time 60 http://metadata/0.1/meta-data/attributes/ssh_host_ecdsa_key_pub $wget -O /root/ssh_host_ecdsa_key.pub http://metadata/0.1/meta-data/attributes/ssh_host_ecdsa_key_pub
if [ $? -eq 0 -a -e /root/ssh_host_ecdsa_key.pub ]; then if [ $? -eq 0 -a -e /root/ssh_host_ecdsa_key.pub ]; then
mv -f /root/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub mv -f /root/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
echo "downloaded ssh_host_ecdsa_key.pub" echo "downloaded ssh_host_ecdsa_key.pub"
@ -179,7 +167,7 @@ in
''; '';
serviceConfig.Type = "oneshot"; serviceConfig.Type = "oneshot";
serviceConfig.RemainAfterExit = true; serviceConfig.RemainAfterExit = true;
serviceConfig.StandardError = "journal+console";
serviceConfig.StandardOutput = "journal+console";
}; };
} }

View File

@ -275,12 +275,10 @@ in
boot.loader.grub.device = mkVMOverride "/dev/vda"; boot.loader.grub.device = mkVMOverride "/dev/vda";
boot.initrd.supportedFilesystems = optional cfg.writableStore "unionfs-fuse";
boot.initrd.extraUtilsCommands = boot.initrd.extraUtilsCommands =
'' ''
# We need mke2fs in the initrd. # We need mke2fs in the initrd.
cp ${pkgs.e2fsprogs}/sbin/mke2fs $out/bin cp -f ${pkgs.e2fsprogs}/sbin/mke2fs $out/bin
''; '';
boot.initrd.postDeviceCommands = boot.initrd.postDeviceCommands =
@ -303,20 +301,6 @@ in
chmod 1777 $targetRoot/tmp chmod 1777 $targetRoot/tmp
mkdir -p $targetRoot/boot mkdir -p $targetRoot/boot
${optionalString cfg.writableStore ''
mkdir -p /unionfs-chroot/ro-store
mount --rbind $targetRoot/nix/store /unionfs-chroot/ro-store
mkdir /unionfs-chroot/rw-store
${if cfg.writableStoreUseTmpfs then ''
mount -t tmpfs -o "mode=755" none /unionfs-chroot/rw-store
'' else ''
mkdir $targetRoot/.nix-rw-store
mount --bind $targetRoot/.nix-rw-store /unionfs-chroot/rw-store
''}
unionfs -o allow_other,cow,nonempty,chroot=/unionfs-chroot,max_files=32768,hide_meta_files /rw-store=RW:/ro-store=RO $targetRoot/nix/store
''}
''; '';
# After booting, register the closure of the paths in # After booting, register the closure of the paths in
@ -343,12 +327,13 @@ in
# configuration, where the regular value for the `fileSystems' # configuration, where the regular value for the `fileSystems'
# attribute should be disregarded for the purpose of building a VM # attribute should be disregarded for the purpose of building a VM
# test image (since those filesystems don't exist in the VM). # test image (since those filesystems don't exist in the VM).
fileSystems = mkVMOverride fileSystems = mkVMOverride (
{ "/".device = "/dev/vda"; { "/".device = "/dev/vda";
"/nix/store" = ${if cfg.writableStore then "/nix/.ro-store" else "/nix/store"} =
{ device = "store"; { device = "store";
fsType = "9p"; fsType = "9p";
options = "trans=virtio,version=9p2000.L,msize=1048576,cache=loose"; options = "trans=virtio,version=9p2000.L,msize=1048576,cache=loose";
neededForBoot = true;
}; };
"/tmp/xchg" = "/tmp/xchg" =
{ device = "xchg"; { device = "xchg";
@ -362,6 +347,18 @@ in
options = "trans=virtio,version=9p2000.L,msize=1048576"; options = "trans=virtio,version=9p2000.L,msize=1048576";
neededForBoot = true; neededForBoot = true;
}; };
} // optionalAttrs cfg.writableStore
{ "/nix/store" =
{ fsType = "unionfs-fuse";
device = "unionfs";
options = "allow_other,cow,nonempty,chroot=/mnt-root,max_files=32768,hide_meta_files,dirs=/nix/.rw-store=rw:/nix/.ro-store=ro";
};
} // optionalAttrs (cfg.writableStore && cfg.writableStoreUseTmpfs)
{ "/nix/.rw-store" =
{ fsType = "tmpfs";
options = "mode=0755";
neededForBoot = true;
};
} // optionalAttrs cfg.useBootLoader } // optionalAttrs cfg.useBootLoader
{ "/boot" = { "/boot" =
{ device = "/dev/disk/by-label/boot"; { device = "/dev/disk/by-label/boot";
@ -369,7 +366,7 @@ in
options = "ro"; options = "ro";
noCheck = true; # fsck fails on a r/o filesystem noCheck = true; # fsck fails on a r/o filesystem
}; };
}; });
swapDevices = mkVMOverride [ ]; swapDevices = mkVMOverride [ ];
boot.initrd.luks.devices = mkVMOverride []; boot.initrd.luks.devices = mkVMOverride [];

View File

@ -35,7 +35,7 @@ import ./make-test.nix {
# multi-user.target, we should now be able to access it. # multi-user.target, we should now be able to access it.
my $ip = $machine->succeed("nixos-container show-ip webserver"); my $ip = $machine->succeed("nixos-container show-ip webserver");
chomp $ip; chomp $ip;
$machine->succeed("ping -c1 $ip"); #$machine->succeed("ping -c1 $ip"); # FIXME
$machine->succeed("curl --fail http://$ip/ > /dev/null"); $machine->succeed("curl --fail http://$ip/ > /dev/null");
# Stop the container. # Stop the container.

View File

@ -12,8 +12,7 @@ import ./make-test.nix {
services.nixosManual.enable = mkOverride 0 true; services.nixosManual.enable = mkOverride 0 true;
systemd.tmpfiles.rules = [ "d /tmp 1777 root root 10d" ]; systemd.tmpfiles.rules = [ "d /tmp 1777 root root 10d" ];
fileSystems = mkVMOverride { "/tmp2" = fileSystems = mkVMOverride { "/tmp2" =
{ device = "none"; { fsType = "tmpfs";
fsType = "tmpfs";
options = "mode=1777,noauto"; options = "mode=1777,noauto";
}; };
}; };

View File

@ -61,7 +61,7 @@ in
meta = { meta = {
homepage = "http://lly.org/~rcw/abcde/page/"; homepage = "http://lly.org/~rcw/abcde/page/";
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
description = "Command-line audio CD ripper"; description = "Command-line audio CD ripper";
longDescription = '' longDescription = ''

View File

@ -47,6 +47,21 @@ stdenv.mkDerivation rec {
mkdir -pv $out/gtk2/engines mkdir -pv $out/gtk2/engines
cp build/libs/clearlooks-newer/libclearlooks.so $out/gtk2/engines/ cp build/libs/clearlooks-newer/libclearlooks.so $out/gtk2/engines/
wrapProgram $out/bin/ardour3 --prefix GTK_PATH : $out/gtk2 wrapProgram $out/bin/ardour3 --prefix GTK_PATH : $out/gtk2
# Install desktop file
mkdir -p "$out/share/applications"
cat > "$out/share/applications/ardour.desktop" << EOF
[Desktop Entry]
Name=Ardour 3
GenericName=Digital Audio Workstation
Comment=Multitrack harddisk recorder
Exec=$out/bin/ardour3
Icon=$out/share/ardour3/icons/ardour_icon_256px.png
Terminal=false
Type=Application
X-MultipleArgs=false
Categories=GTK;Audio;AudioVideoEditing;AudioVideo;Video;
EOF
''; '';
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Sound editor with graphical UI"; description = "Sound editor with graphical UI";
homepage = http://audacity.sourceforge.net; homepage = http://audacity.sourceforge.net;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = with stdenv.lib.platforms; linux; platforms = with stdenv.lib.platforms; linux;
maintainers = with stdenv.lib.maintainers; [ the-kenny ]; maintainers = with stdenv.lib.maintainers; [ the-kenny ];
}; };

View File

@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
the command line or a script. the command line or a script.
''; '';
homepage = http://www.jpj.net/~trevor/aumix.html; homepage = http://www.jpj.net/~trevor/aumix.html;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ stdenv.lib.maintainers.ludo ]; maintainers = [ stdenv.lib.maintainers.ludo ];
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.linux;

View File

@ -19,7 +19,7 @@ in
meta = { meta = {
homepage = http://lly.org/~rcw/cd-discid/; homepage = http://lly.org/~rcw/cd-discid/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
description = "cd-discid, a command-line utility to retrieve a disc's CDDB ID"; description = "cd-discid, a command-line utility to retrieve a disc's CDDB ID";
longDescription = '' longDescription = ''

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "drumkv1-${version}"; name = "drumkv1-${version}";
version = "0.4.2"; version = "0.5.0";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/drumkv1/${name}.tar.gz"; url = "mirror://sourceforge/drumkv1/${name}.tar.gz";
sha256 = "18rvfgblynlmklk25azmppibn1bdjid97hipa323gnzmxgq0rfjq"; sha256 = "16bjkp22hfpmzj5di98dddzslavgvhw5z7pgjzmjqz9dxvbqwq1k";
}; };
buildInputs = [ jack2 libsndfile lv2 qt4 ]; buildInputs = [ jack2 libsndfile lv2 qt4 ];

View File

@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Compact open source software speech synthesizer"; description = "Compact open source software speech synthesizer";
homepage = http://espeak.sourceforge.net/; homepage = http://espeak.sourceforge.net/;
license = "GPLv3+"; license = licenses.gpl3Plus;
platforms = platforms.linux; platforms = platforms.linux;
}; };
} }

View File

@ -51,7 +51,7 @@ stdenv.mkDerivation rec {
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Phoneme editor for espeak"; description = "Phoneme editor for espeak";
homepage = http://espeak.sourceforge.net/; homepage = http://espeak.sourceforge.net/;
license = "GPLv3+"; license = licenses.gpl3Plus;
platforms = platforms.linux; platforms = platforms.linux;
}; };
} }

View File

@ -30,6 +30,6 @@ stdenv.mkDerivation rec {
meta = { meta = {
homepage = http://wejp.k.vu/projects/gmu; homepage = http://wejp.k.vu/projects/gmu;
description = "Open source music player for portable gaming consoles and handhelds"; description = "Open source music player for portable gaming consoles and handhelds";
license = "GPLv2"; license = stdenv.lib.licenses.gpl2;
}; };
} }

View File

@ -1,25 +1,43 @@
{ stdenv, fetchurl, pkgconfig, libgpod, gtk, glib, gettext, perl, perlXMLParser { stdenv, fetchurl, pkgconfig, makeWrapper, intltool, libgpod, curl, flac,
, libglade, flex, libid3tag, libvorbis, intltool }: gnome3_12, gtk3, glib, gettext, perl, perlXMLParser , libglade, flex, libid3tag,
libvorbis, hicolor_icon_theme, gdk_pixbuf }:
stdenv.mkDerivation { let
name = "gtkpod-1.0.0"; gnome = gnome3_12;
in stdenv.mkDerivation rec {
version = "2.1.4";
name = "gtkpod-${version}";
src = fetchurl { src = fetchurl {
url = mirror://sourceforge/gtkpod/gtkpod-1.0.0.tar.gz; url = "mirror://sourceforge/gtkpod/${name}.tar.gz";
sha256 = "04jzybs55c27kyp7r9c58prcq0q4ssvj5iggva857f49s1ar826q"; sha256 = "ba12b35f3f24a155b68f0ffdaf4d3c5c7d1b8df04843a53306e1c83fc811dfaa";
}; };
buildInputs = [ pkgconfig libgpod gettext perl perlXMLParser gtk libglade flex propagatedUserEnvPkgs = [ gnome.gnome_themes_standard ];
libid3tag libvorbis intltool ];
buildInputs = [ pkgconfig makeWrapper intltool curl gettext perl perlXMLParser
flex libgpod libid3tag flac libvorbis gtk3 gdk_pixbuf libglade gnome.anjuta
gnome.gdl gnome.gnome_icon_theme_symbolic gnome.gnome_icon_theme
hicolor_icon_theme ];
patchPhase = '' patchPhase = ''
sed -i 's/which/type -P/' scripts/*.sh sed -i 's/which/type -P/' scripts/*.sh
''; '';
meta = { preFixup = ''
wrapProgram "$out/bin/gtkpod" \
--set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
--prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:${gnome.gnome_themes_standard}/share:$out/share:$GSETTINGS_SCHEMAS_PATH"
'';
enableParallelBuilding = true;
meta = with stdenv.lib; {
description = "GTK Manager for an Apple ipod"; description = "GTK Manager for an Apple ipod";
homepage = http://gtkpod.sourceforge.net; homepage = http://gtkpod.sourceforge.net;
license = "GPLv2+"; license = licenses.gpl2Plus;
platforms = with stdenv.lib.platforms; linux; platforms = platforms.linux;
maintainers = [ maintainers.skeidel ];
}; };
} }

View File

@ -23,6 +23,6 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "A command line editor for id3v2 tags"; description = "A command line editor for id3v2 tags";
homepage = http://id3v2.sourceforge.net/; homepage = http://id3v2.sourceforge.net/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
}; };
} }

View File

@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Console jack loudness meter"; description = "Console jack loudness meter";
homepage = http://www.aelius.com/njh/jackmeter/; homepage = http://www.aelius.com/njh/jackmeter/;
license = "GPLv2"; license = stdenv.lib.licenses.gpl2;
maintainers = [ stdenv.lib.maintainers.marcweber ]; maintainers = [ stdenv.lib.maintainers.marcweber ];
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.linux;
}; };

View File

@ -15,7 +15,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "Not a Guitar-Only tuner"; description = "Not a Guitar-Only tuner";
homepage = http://www.nongnu.org/lingot/; homepage = http://www.nongnu.org/lingot/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = with stdenv.lib.platforms; linux; platforms = with stdenv.lib.platforms; linux;
maintainers = with stdenv.lib.maintainers; [viric]; maintainers = with stdenv.lib.maintainers; [viric];
}; };

View File

@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Tracker music player for the terminal"; description = "Tracker music player for the terminal";
homepage = http://mikmod.shlomifish.org/; homepage = http://mikmod.shlomifish.org/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = with stdenv.lib.maintainers; [ viric ]; maintainers = with stdenv.lib.maintainers; [ viric ];
platforms = with stdenv.lib.platforms; linux; platforms = with stdenv.lib.platforms; linux;
}; };

View File

@ -0,0 +1,24 @@
{ stdenv, fetchurl, pythonPackages, mopidy }:
pythonPackages.buildPythonPackage rec {
name = "mopidy-moped-${version}";
version = "0.3.1";
src = fetchurl {
url = "https://github.com/martijnboland/moped/archive/v${version}.tar.gz";
sha256 = "0sjp8vr4yfyjx233gamhg0p67zjnlpc9yq3szbw897igsh23j2yr";
};
propagatedBuildInputs = [ mopidy ];
doCheck = false;
meta = with stdenv.lib; {
homepage = https://github.com/martijnboland/moped;
description = "A web client for Mopidy";
license = licenses.mit;
maintainers = [ maintainers.rickynils ];
hydraPlatforms = [];
};
}

View File

@ -3,11 +3,11 @@
pythonPackages.buildPythonPackage rec { pythonPackages.buildPythonPackage rec {
name = "mopidy-spotify-${version}"; name = "mopidy-spotify-${version}";
version = "1.1.3"; version = "1.2.0";
src = fetchurl { src = fetchurl {
url = "https://github.com/mopidy/mopidy-spotify/archive/v${version}.tar.gz"; url = "https://github.com/mopidy/mopidy-spotify/archive/v${version}.tar.gz";
sha256 = "09s6841qb24nrmlc2izb8vxbgv185ddra6ndskrsw907hfli2kl6"; sha256 = "1fgxakylsx0nggis11v6bxfy8h3dl1n1v86liyfcj0xazb1mx69m";
}; };
propagatedBuildInputs = [ mopidy pythonPackages.pyspotify ]; propagatedBuildInputs = [ mopidy pythonPackages.pyspotify ];

View File

@ -5,15 +5,15 @@
pythonPackages.buildPythonPackage rec { pythonPackages.buildPythonPackage rec {
name = "mopidy-${version}"; name = "mopidy-${version}";
version = "0.18.3"; version = "0.19.0";
src = fetchurl { src = fetchurl {
url = "https://github.com/mopidy/mopidy/archive/v${version}.tar.gz"; url = "https://github.com/mopidy/mopidy/archive/v${version}.tar.gz";
sha256 = "0b8ss6qjzj1pawd8469i5310ily3rad0ashfy87vdyj6xdyfyp0q"; sha256 = "10cnc1bipr0brk7478201cgm71lp5bci3qiaadyxv9hhcn0nmn9b";
}; };
propagatedBuildInputs = with pythonPackages; [ propagatedBuildInputs = with pythonPackages; [
gst_python pygobject pykka cherrypy ws4py gst_plugins_base gst_plugins_good gst_python pygobject pykka tornado gst_plugins_base gst_plugins_good
]; ];
# There are no tests # There are no tests

View File

@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
homepage = http://www.ibiblio.org/mp3info/; homepage = http://www.ibiblio.org/mp3info/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ stdenv.lib.maintainers.ludo ]; maintainers = [ stdenv.lib.maintainers.ludo ];
platforms = stdenv.lib.platforms.unix; platforms = stdenv.lib.platforms.unix;

View File

@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "A minimalist command line interface to MPD"; description = "A minimalist command line interface to MPD";
homepage = http://www.musicpd.org/clients/mpc/; homepage = http://www.musicpd.org/clients/mpc/;
license = "GPL2"; license = stdenv.lib.licenses.gpl2;
maintainers = [ stdenv.lib.maintainers.algorith ]; maintainers = [ stdenv.lib.maintainers.algorith ];
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.linux;
}; };

View File

@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
description = "mpc123, a Musepack (.mpc) audio player"; description = "mpc123, a Musepack (.mpc) audio player";
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ ]; maintainers = [ ];
platforms = stdenv.lib.platforms.gnu; # arbitrary choice platforms = stdenv.lib.platforms.gnu; # arbitrary choice

View File

@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "mpg321, a command-line MP3 player"; description = "mpg321, a command-line MP3 player";
homepage = http://mpg321.sourceforge.net/; homepage = http://mpg321.sourceforge.net/;
license = "GPLv2"; license = stdenv.lib.licenses.gpl2;
maintainers = [ ]; maintainers = [ ];
platforms = stdenv.lib.platforms.gnu; platforms = stdenv.lib.platforms.gnu;
}; };

View File

@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
homepage = http://freedesktop.org/software/pulseaudio/pavucontrol/ ; homepage = http://freedesktop.org/software/pulseaudio/pavucontrol/ ;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ ]; maintainers = [ ];
platforms = stdenv.lib.platforms.gnu; # arbitrary choice platforms = stdenv.lib.platforms.gnu; # arbitrary choice

View File

@ -22,7 +22,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "Doing phonetics by computer"; description = "Doing phonetics by computer";
homepage = http://www.fon.hum.uva.nl/praat/; homepage = http://www.fon.hum.uva.nl/praat/;
license = "GPLv2+"; # Has some 3rd-party code in it though license = stdenv.lib.licenses.gpl2Plus; # Has some 3rd-party code in it though
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.linux;
}; };
} }

View File

@ -3,12 +3,12 @@
, libtool, libvorbis, pkgconfig, qt4, rubberband, stdenv }: , libtool, libvorbis, pkgconfig, qt4, rubberband, stdenv }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "0.6.1"; version = "0.6.2";
name = "qtractor-${version}"; name = "qtractor-${version}";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/qtractor/${name}.tar.gz"; url = "mirror://sourceforge/qtractor/${name}.tar.gz";
sha256 = "09lyz1pn2dadr1ii2msyv3n13kq3mbgpcwcyfm0brm01c2fnh6wc"; sha256 = "08cr4lgm8bkkmsvfljszcqij3i52n989s7ncrbrn17n61rmgf8yw";
}; };
buildInputs = buildInputs =

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "samplv1-${version}"; name = "samplv1-${version}";
version = "0.4.2"; version = "0.5.0";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/samplv1/${name}.tar.gz"; url = "mirror://sourceforge/samplv1/${name}.tar.gz";
sha256 = "1vr6jbqnsgdq3v2h1ndp4pirnil3119dqwlq0k0kdscmcskvb9j4"; sha256 = "02mm5y1yzklvs5bpxl86y3dqcg7migfybmin8llk91pws6rl9b41";
}; };
buildInputs = [ jack2 libsndfile lv2 qt4 ]; buildInputs = [ jack2 libsndfile lv2 qt4 ];

View File

@ -8,14 +8,14 @@ assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
let let
version = if stdenv.system == "i686-linux" version = if stdenv.system == "i686-linux"
then "0.9.4.183.g644e24e.428" then "0.9.4.183.g644e24e.428"
else "0.9.10.17.g4129e1c.78"; else "0.9.11.27.g2b1a638.81";
qt4webkit = qt4webkit =
if stdenv.system == "i686-linux" then if stdenv.system == "i686-linux" then
fetchurl { fetchurl {
name = "libqtwebkit4_2.3.2_i386.deb"; name = "libqtwebkit4_2.3.2_i386.deb";
url = http://ie.archive.ubuntu.com/ubuntu/pool/main/q/qtwebkit-source/libqtwebkit4_2.3.2-0ubuntu7_i386.deb; url = http://ie.archive.ubuntu.com/ubuntu/pool/main/q/qtwebkit-source/libqtwebkit4_2.3.2-0ubuntu7_i386.deb;
sha256 = "0hi6cwx2b2cwa4nv5phqqw526lc8p9x7kjkcza9x47ny3npw2924"; sha256 = "0q4abhczx91ma57fjss0gn8j6nkfbfsbsh6kxhykzj88dih2s8rn";
} }
else else
fetchurl { fetchurl {
@ -73,7 +73,7 @@ stdenv.mkDerivation {
else if stdenv.system == "x86_64-linux" then else if stdenv.system == "x86_64-linux" then
fetchurl { fetchurl {
url = "http://repository.spotify.com/pool/non-free/s/spotify/spotify-client_${version}-1_amd64.deb"; url = "http://repository.spotify.com/pool/non-free/s/spotify/spotify-client_${version}-1_amd64.deb";
sha256 = "1a4vn2ij3nghnc0fq3nsyb95gwhaw4zabdq6jd52hxz8iv31pn1z"; sha256 = "0yfljiw01kssj3qaz8m0ppgrpjs6xrhzlr2wccp64bsnmin7g4sg";
} }
else throw "Spotify not supported on this platform."; else throw "Spotify not supported on this platform.";
@ -149,7 +149,7 @@ stdenv.mkDerivation {
meta = { meta = {
homepage = https://www.spotify.com/; homepage = https://www.spotify.com/;
description = "Spotify for Linux allows you to play music from the Spotify music service"; description = "Spotify for Linux allows you to play music from the Spotify music service";
license = "unfree"; license = stdenv.lib.licenses.unfree;
maintainers = [ stdenv.lib.maintainers.eelco ]; maintainers = [ stdenv.lib.maintainers.eelco ];
}; };
} }

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "synthv1-${version}"; name = "synthv1-${version}";
version = "0.4.2"; version = "0.5.0";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/synthv1/${name}.tar.gz"; url = "mirror://sourceforge/synthv1/${name}.tar.gz";
sha256 = "1r4fszbzwd0yfcch0mcsmh7781zw1317hiljn85w79721fs2m8hc"; sha256 = "011kjccrdwb62rpck5gb8h4kvvm8rk6n77lj78ykxz4pxip5hf14";
}; };
buildInputs = [ qt4 jack2 lv2 ]; buildInputs = [ qt4 jack2 lv2 ];

View File

@ -16,6 +16,6 @@ stdenv.mkDerivation {
files, notably the `ogg123' player and the `oggenc' encoder. files, notably the `ogg123' player and the `oggenc' encoder.
''; '';
homepage = http://xiph.org/vorbis/; homepage = http://xiph.org/vorbis/;
license = "GPLv2"; license = stdenv.lib.licenses.gpl2;
}; };
} }

View File

@ -6,11 +6,11 @@ assert stdenv ? glibc;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "yoshimi-${version}"; name = "yoshimi-${version}";
version = "1.2.0"; version = "1.2.2";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/yoshimi/${name}.tar.bz2"; url = "mirror://sourceforge/yoshimi/${name}.tar.bz2";
sha256 = "0p4v39kxxzzfvaazzxarx54i164ghpfxq0ljkavlgr8fnix5v3mx"; sha256 = "1w23ral1qrbg9gqx833giqmchx7952f18yaa52aya9shsdlla83c";
}; };
buildInputs = [ buildInputs = [

View File

@ -13,6 +13,6 @@ stdenv.mkDerivation {
meta = { meta = {
description = "Hex editor with vim style keybindings"; description = "Hex editor with vim style keybindings";
homepage = http://bvi.sourceforge.net/download.html; homepage = http://bvi.sourceforge.net/download.html;
license = "GPL2"; license = stdenv.lib.licenses.gpl2;
}; };
} }

View File

@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
full-screen editors such as GNU Emacs or GNU Moe. full-screen editors such as GNU Emacs or GNU Moe.
''; '';
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
homepage = http://www.gnu.org/software/ed/; homepage = http://www.gnu.org/software/ed/;

View File

@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Auto-complete extension for Emacs"; description = "Auto-complete extension for Emacs";
homepage = http://cx4a.org/software/auto-complete/; homepage = http://cx4a.org/software/auto-complete/;
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "A calendar framework for Emacs"; description = "A calendar framework for Emacs";
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
maintainers = with stdenv.lib.maintainers; [ chaoflow ]; maintainers = with stdenv.lib.maintainers; [ chaoflow ];
platforms = stdenv.lib.platforms.gnu; platforms = stdenv.lib.platforms.gnu;

View File

@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
Development Environment), and COGRE (COnnected GRaph Editor). Development Environment), and COGRE (COnnected GRaph Editor).
''; '';
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
homepage = http://cedet.sourceforge.net/; homepage = http://cedet.sourceforge.net/;
}; };

View File

@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Emacs major mode for CoffeeScript, unfancy JavaScript"; description = "Emacs major mode for CoffeeScript, unfancy JavaScript";
homepage = https://github.com/defunkt/coffee-mode; homepage = https://github.com/defunkt/coffee-mode;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Emacs-lisp mode for skinning your Emacs"; description = "Emacs-lisp mode for skinning your Emacs";
homepage = http://www.nongnu.org/color-theme; homepage = http://www.nongnu.org/color-theme;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -28,7 +28,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "A pcl-cvs like interface for managing darcs patches."; description = "A pcl-cvs like interface for managing darcs patches.";
homepage = "http://hub.darcs.net/simon/darcsum"; homepage = "http://hub.darcs.net/simon/darcsum";
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ stdenv.lib.maintainers.falsifian ]; maintainers = [ stdenv.lib.maintainers.falsifian ];
}; };
} }

View File

@ -39,7 +39,7 @@ stdenv.mkDerivation rec {
navigation and overview. navigation and overview.
''; '';
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
homepage = http://ecb.sourceforge.net/; homepage = http://ecb.sourceforge.net/;

View File

@ -20,7 +20,6 @@ clangStdenv.mkDerivation {
meta = { meta = {
homepage = "https://github.com/Golevka/emacs-clang-complete-async"; homepage = "https://github.com/Golevka/emacs-clang-complete-async";
description = "An emacs plugin to complete C and C++ code using libclang"; description = "An emacs plugin to complete C and C++ code using libclang";
license = "GPLv3+"; license = clangStdenv.lib.licenses.gpl3Plus;
}; };
} }

View File

@ -52,7 +52,7 @@ stdenv.mkDerivation rec {
developed a simple Emacs interface to w3m. developed a simple Emacs interface to w3m.
''; '';
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
homepage = http://emacs-w3m.namazu.org/; homepage = http://emacs-w3m.namazu.org/;

View File

@ -64,7 +64,7 @@ stdenv.mkDerivation rec {
homepage = http://www.gnu.org/software/emms/; homepage = http://www.gnu.org/software/emms/;
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
maintainers = [ stdenv.lib.maintainers.ludo ]; maintainers = [ stdenv.lib.maintainers.ludo ];
platforms = stdenv.lib.platforms.unix; platforms = stdenv.lib.platforms.unix;

View File

@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "A (very early) GitHub client library for Emacs"; description = "A (very early) GitHub client library for Emacs";
homepage = https://github.com/sigma/gh.el; homepage = https://github.com/sigma/gh.el;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Emacs integration for gist.github.com"; description = "Emacs integration for gist.github.com";
homepage = https://github.com/sigma/gist.el; homepage = https://github.com/sigma/gist.el;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Emacs major mode for Idris"; description = "Emacs major mode for Idris";
homepage = https://github.com/idris-hackers/idris-mode; homepage = https://github.com/idris-hackers/idris-mode;
license = "GPLv3"; license = stdenv.lib.licenses.gpl3;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -23,7 +23,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "Emacs major mode for jade and stylus"; description = "Emacs major mode for jade and stylus";
homepage = https://github.com/brianc/jade-mode; homepage = https://github.com/brianc/jade-mode;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -89,7 +89,7 @@ in
* Java source interpreter (Pat Neimeyer's BeanShell) * Java source interpreter (Pat Neimeyer's BeanShell)
''; '';
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ ]; maintainers = [ ];
platforms = stdenv.lib.platforms.gnu; # arbitrary choice platforms = stdenv.lib.platforms.gnu; # arbitrary choice

View File

@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "tiny logging framework for Emacs"; description = "tiny logging framework for Emacs";
homepage = https://github.com/sigma/logito; homepage = https://github.com/sigma/logito;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Insert dummy pseudo Latin text for Emacs"; description = "Insert dummy pseudo Latin text for Emacs";
homepage = http://www.emacswiki.org/emacs/LoremIpsum; homepage = http://www.emacswiki.org/emacs/LoremIpsum;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
homepage = "https://github.com/magit/magit"; homepage = "https://github.com/magit/magit";
description = "Magit, an Emacs interface to Git"; description = "Magit, an Emacs interface to Git";
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
longDescription = '' longDescription = ''
With Magit, you can inspect and modify your Git repositories with With Magit, you can inspect and modify your Git repositories with

View File

@ -13,7 +13,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "Emacs mode for the programming language Maude"; description = "Emacs mode for the programming language Maude";
license = "GPLv2"; license = stdenv.lib.licenses.gpl2;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
maintainers = [ stdenv.lib.maintainers.simons ]; maintainers = [ stdenv.lib.maintainers.simons ];
}; };

View File

@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "an emacs library to access metaweblog based weblogs"; description = "an emacs library to access metaweblog based weblogs";
homepage = https://github.com/punchagan/metaweblog; homepage = https://github.com/punchagan/metaweblog;
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -2,11 +2,11 @@
, texLiveAggregationFun }: , texLiveAggregationFun }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "org-8.2.7b"; name = "org-8.2.7c";
src = fetchurl { src = fetchurl {
url = "http://orgmode.org/${name}.tar.gz"; url = "http://orgmode.org/${name}.tar.gz";
sha256 = "07hq2q126d967nj7xq46q4mkca5r2rw61bn8d6nzkhksghp8b2v1"; sha256 = "0qqf58xqw1kkgjxm9z40s6h7xd209rx3933klla22lryv3yclc1k";
}; };
buildInputs = [ emacs ]; buildInputs = [ emacs ];
@ -42,7 +42,7 @@ stdenv.mkDerivation rec {
than that found in GNU Emacs. than that found in GNU Emacs.
''; '';
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
maintainers = with stdenv.lib.maintainers; [ chaoflow pSub ]; maintainers = with stdenv.lib.maintainers; [ chaoflow pSub ];
platforms = stdenv.lib.platforms.unix; platforms = stdenv.lib.platforms.unix;

View File

@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Publish directly from Emacs org-mode to WordPress blogs"; description = "Publish directly from Emacs org-mode to WordPress blogs";
homepage = https://github.com/punchagan/org2blog; homepage = https://github.com/punchagan/org2blog;
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Persistent caching for Emacs"; description = "Persistent caching for Emacs";
homepage = https://github.com/sigma/pcache.el; homepage = https://github.com/sigma/pcache.el;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -48,7 +48,7 @@ stdenv.mkDerivation (rec {
interactive theorem provers), based on the customizable text editor Emacs. interactive theorem provers), based on the customizable text editor Emacs.
''; '';
homepage = http://proofgeneral.inf.ed.ac.uk; homepage = http://proofgeneral.inf.ed.ac.uk;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.unix; # arbitrary choice platforms = stdenv.lib.platforms.unix; # arbitrary choice
}; };
}) })

View File

@ -26,7 +26,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "Enhanced Emacs support for editing and running Scheme code"; description = "Enhanced Emacs support for editing and running Scheme code";
homepage = http://www.neilvandyke.org/quack/; homepage = http://www.neilvandyke.org/quack/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ ]; maintainers = [ ];
}; };
} }

View File

@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Mark a rectangle of text with highlighting"; description = "Mark a rectangle of text with highlighting";
homepage = http://emacswiki.org/emacs/RectangleMark; homepage = http://emacswiki.org/emacs/RectangleMark;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -40,6 +40,6 @@ stdenv.mkDerivation rec {
''; '';
homepage = http://gna.org/projects/remember-el/; homepage = http://gna.org/projects/remember-el/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
}; };
} }

View File

@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Two-pane file manager for Emacs based on Dired and inspired by MC"; description = "Two-pane file manager for Emacs based on Dired and inspired by MC";
homepage = http://www.emacswiki.org/emacs/Sunrise_Commander; homepage = http://www.emacswiki.org/emacs/Sunrise_Commander;
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -25,6 +25,6 @@ in stdenv.mkDerivation {
homepage = https://github.com/bnbeckwith/writegood-mode; homepage = https://github.com/bnbeckwith/writegood-mode;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
maintainers = [ stdenv.lib.maintainers.pSub ]; maintainers = [ stdenv.lib.maintainers.pSub ];
license = "GPL3"; license = stdenv.lib.licenses.gpl3;
}; };
} }

View File

@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Elisp implementation of clientside XML-RPC"; description = "Elisp implementation of clientside XML-RPC";
homepage = https://launchpad.net/xml-rpc-el; homepage = https://launchpad.net/xml-rpc-el;
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };

View File

@ -13,7 +13,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "WYSIWYG PostScript annotator"; description = "WYSIWYG PostScript annotator";
homepage = "http://http://flpsed.org/flpsed.html"; homepage = "http://http://flpsed.org/flpsed.html";
license = "GPLv3"; license = stdenv.lib.licenses.gpl3;
platforms = stdenv.lib.platforms.mesaPlatforms; platforms = stdenv.lib.platforms.mesaPlatforms;
}; };
} }

View File

@ -24,7 +24,7 @@ in stdenv.mkDerivation rec {
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = http://gobby.0x539.de/; homepage = http://gobby.0x539.de/;
description = "A GTK-based collaborative editor supporting multiple documents in one session and a multi-user chat"; description = "A GTK-based collaborative editor supporting multiple documents in one session and a multi-user chat";
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ maintainers.phreedom ]; maintainers = [ maintainers.phreedom ];
platforms = platforms.all; platforms = platforms.all;
}; };

View File

@ -35,6 +35,6 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Sophisticated text editor for code, markup and prose"; description = "Sophisticated text editor for code, markup and prose";
license = "unfree"; license = stdenv.lib.licenses.unfree;
}; };
} }

View File

@ -57,7 +57,6 @@ in stdenv.mkDerivation {
meta = { meta = {
description = "Sophisticated text editor for code, markup and prose"; description = "Sophisticated text editor for code, markup and prose";
maintainers = stdenv.lib.maintainers.wmertens; maintainers = stdenv.lib.maintainers.wmertens;
license = "unfree"; license = stdenv.lib.licenses.unfree;
}; };
} }

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