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