summaryrefslogtreecommitdiffstats
path: root/makefu
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2016-06-06 17:17:07 +0200
committertv <tv@krebsco.de>2016-06-06 17:17:07 +0200
commitdda2887e2cf618a7c7744bee2eed806e3a38fe36 (patch)
tree19ad3210a2b8485ac22d26f75b2e2493d3f61596 /makefu
parentc1c645b545b960eb639fc6d41dfa35ee187ae164 (diff)
parent7e344c0627a266685ef1ad79f5193b4e7ba27408 (diff)
Merge remote-tracking branch 'cloudkrebs/master'
Diffstat (limited to 'makefu')
-rw-r--r--makefu/1systems/gum.nix4
-rw-r--r--makefu/1systems/pornocauster.nix30
-rw-r--r--makefu/1systems/vbob.nix26
-rw-r--r--makefu/2configs/base-gui.nix10
-rw-r--r--makefu/2configs/default.nix8
-rw-r--r--makefu/2configs/exim-retiolum.nix3
-rw-r--r--makefu/2configs/git/cgit-retiolum.nix3
-rw-r--r--makefu/2configs/hw/tp-x220.nix8
-rw-r--r--makefu/2configs/omo-share.nix26
-rw-r--r--makefu/2configs/steam.nix6
-rw-r--r--makefu/2configs/temp-share-samba.nix28
-rw-r--r--makefu/3modules/awesome-extra.nix40
-rw-r--r--makefu/3modules/default.nix2
-rw-r--r--makefu/3modules/taskserver.nix60
-rw-r--r--makefu/5pkgs/awesomecfg/full.cfg10
-rw-r--r--makefu/5pkgs/default.nix5
-rw-r--r--makefu/5pkgs/devpi/default.nix70
-rw-r--r--makefu/5pkgs/skytraq-logger/default.nix31
-rw-r--r--makefu/5pkgs/taskserver/default.nix43
19 files changed, 373 insertions, 40 deletions
diff --git a/makefu/1systems/gum.nix b/makefu/1systems/gum.nix
index 7bac4398c..17b2b5093 100644
--- a/makefu/1systems/gum.nix
+++ b/makefu/1systems/gum.nix
@@ -41,6 +41,8 @@ in {
];
};
+ makefu.taskserver.enable = true;
+
krebs.nginx.servers.cgit = {
server-names = [ "cgit.euer.krebsco.de" ];
listen = [ "${external-ip}:80" "${internal-ip}:80" ];
@@ -86,6 +88,8 @@ in {
21032
# tinc-retiolum
21031
+ # taskserver
+ 53589
];
allowedUDPPorts = [
# tinc
diff --git a/makefu/1systems/pornocauster.nix b/makefu/1systems/pornocauster.nix
index 88c187758..fa39b121c 100644
--- a/makefu/1systems/pornocauster.nix
+++ b/makefu/1systems/pornocauster.nix
@@ -26,6 +26,7 @@
# services
../2configs/git/brain-retiolum.nix
../2configs/tor.nix
+ ../2configs/steam.nix
# ../2configs/buildbot-standalone.nix
# hardware specifics are in here
@@ -35,23 +36,36 @@
# ../2configs/mediawiki.nix
#../2configs/wordpress.nix
../2configs/nginx/public_html.nix
+
+ # temporary modules
+ # ../2configs/temp/share-samba.nix
+ # ../2configs/temp/elkstack.nix
+ # ../2configs/temp/sabnzbd.nix
];
+
krebs.nginx = {
default404 = false;
servers.default.listen = [ "80 default_server" ];
servers.default.server-names = [ "_" ];
};
- krebs.retiolum.enable = true;
- # steam
- hardware.opengl.driSupport32Bit = true;
- hardware.pulseaudio.support32Bit = true;
+
+ environment.systemPackages = [ pkgs.passwdqc-utils pkgs.bintray-upload ];
+
+ virtualisation.docker.enable = true;
# configure pulseAudio to provide a HDMI sink as well
networking.firewall.enable = true;
- networking.firewall.allowedTCPPorts = [
- 25
- 80
- ];
+ networking.firewall.allowedTCPPorts = [ 80 ];
+ networking.firewall.allowedUDPPorts = [ 665 ];
krebs.build.host = config.krebs.hosts.pornocauster;
+
+ krebs.hosts.omo.nets.retiolum.via.ip4.addr = "192.168.1.11";
+ krebs.retiolum = {
+ enable = true;
+ connectTo = [ "omo" "gum" "prism" ];
+ };
+ networking.extraHosts = ''
+ 192.168.1.11 omo.local
+ '';
}
diff --git a/makefu/1systems/vbob.nix b/makefu/1systems/vbob.nix
index 5e2382f37..8b71b1393 100644
--- a/makefu/1systems/vbob.nix
+++ b/makefu/1systems/vbob.nix
@@ -1,9 +1,7 @@
-#
-#
-#
{ lib, config, pkgs, ... }:
{
krebs.build.host = config.krebs.hosts.vbob;
+ makefu.awesome.modkey = "Mod1";
imports =
[ # Include the results of the hardware scan.
../.
@@ -19,6 +17,10 @@
device ="/dev/disk/by-label/nixstore";
fsType = "ext4";
};
+ fileSystems."/var/lib/docker" = {
+ device ="/dev/disk/by-label/nix-docker";
+ fsType = "ext4";
+ };
#makefu.buildbot.master.enable = true;
# allow vbob to deploy self
users.extraUsers = {
@@ -28,11 +30,14 @@
};
environment.systemPackages = with pkgs;[
fortclientsslvpn
- buildbot
- buildbot-slave
get
logstash
+ docker
+ devpi-web
+ devpi-client
];
+ # virtualisation.docker.enable = true;
+
networking.firewall.allowedTCPPorts = [
25
@@ -42,18 +47,21 @@
krebs.retiolum = {
enable = true;
- extraConfig = "Proxy = http global.proxy.alcatel-lucent.com 8000";
connectTo = [
+ "omo"
"gum"
];
};
- networking.proxy.default = "http://global.proxy.alcatel-lucent.com:8000";
+ networking.extraHosts = ''
+ 172.17.20.190 gitlab
+ 172.17.62.27 svbittool01 tool
+ '';
+
fileSystems."/media/share" = {
fsType = "vboxsf";
device = "share";
- options = "rw,uid=9001,gid=9001";
+ options = [ "rw" "uid=9001" "gid=9001" ];
};
}
-
diff --git a/makefu/2configs/base-gui.nix b/makefu/2configs/base-gui.nix
index b807957ba..f7d6991c5 100644
--- a/makefu/2configs/base-gui.nix
+++ b/makefu/2configs/base-gui.nix
@@ -14,7 +14,6 @@
with config.krebs.lib;
let
mainUser = config.krebs.build.user.name;
- awesomecfg = pkgs.awesomecfg.full;
in
{
imports = [ ];
@@ -36,14 +35,7 @@ in
};
# lid switch is handled via button presses
services.logind.extraConfig = mkDefault "HandleLidSwitch=ignore";
- nixpkgs.config.packageOverrides = pkgs: rec {
- awesome = pkgs.stdenv.lib.overrideDerivation pkgs.awesome (oldAttrs : {
- postFixup = ''
- cp ${awesomecfg} $out/etc/xdg/awesome/rc.lua
- '';
- });
- };
-
+ makefu.awesome.enable = true;
i18n.consoleFont = "Lat2-Terminus16";
fonts = {
diff --git a/makefu/2configs/default.nix b/makefu/2configs/default.nix
index 20faf7896..62daed8be 100644
--- a/makefu/2configs/default.nix
+++ b/makefu/2configs/default.nix
@@ -22,7 +22,7 @@ with config.krebs.lib;
source = mapAttrs (_: mkDefault) {
nixpkgs = {
url = https://github.com/nixos/nixpkgs;
- rev = "40c586b7ce2c559374df435f46d673baf711c543"; # unstable @ 2016-02-27, tested on wry
+ rev = "63b9785"; # stable @ 2016-06-01
};
secrets = "/home/makefu/secrets/${config.krebs.build.host.name}/";
stockholm = "/home/makefu/stockholm";
@@ -75,7 +75,7 @@ with config.krebs.lib;
systemd.tmpfiles.rules = [
"d /tmp 1777 root root - -"
];
-
+ nix.nixPath = [ "/var/src" ];
environment.variables = {
NIX_PATH = mkForce "/var/src";
EDITOR = mkForce "vim";
@@ -126,6 +126,7 @@ with config.krebs.lib;
nixpkgs.config.packageOverrides = pkgs: {
nano = pkgs.runCommand "empty" {} "mkdir -p $out";
tinc = pkgs.tinc_pre;
+ gnupg1compat = super.gnupg1compat.override { gnupg = self.gnupg21; };
};
services.cron.enable = false;
@@ -138,6 +139,9 @@ with config.krebs.lib;
"time.apple.com"
"time.nist.gov"
];
+ nix.extraOptions = ''
+ auto-optimise-store = true
+ '';
security.setuidPrograms = [ "sendmail" ];
services.journald.extraConfig = ''
diff --git a/makefu/2configs/exim-retiolum.nix b/makefu/2configs/exim-retiolum.nix
index 34943f593..910066e0a 100644
--- a/makefu/2configs/exim-retiolum.nix
+++ b/makefu/2configs/exim-retiolum.nix
@@ -2,9 +2,10 @@
with config.krebs.lib;
{
+ networking.firewall.allowedTCPPorts = [ 25 ];
+
krebs.exim-retiolum.enable = true;
environment.systemPackages = with pkgs; [
msmtp
];
-
}
diff --git a/makefu/2configs/git/cgit-retiolum.nix b/makefu/2configs/git/cgit-retiolum.nix
index 0b69dbcaf..44d759488 100644
--- a/makefu/2configs/git/cgit-retiolum.nix
+++ b/makefu/2configs/git/cgit-retiolum.nix
@@ -15,6 +15,9 @@ let
tinc_graphs = {
desc = "Tinc Advanced Graph Generation";
};
+ stockholm-init = {
+ desc = "Build new Stockholm hosts";
+ };
cac-api = { };
init-stockholm = {
desc = "Init stuff for stockholm";
diff --git a/makefu/2configs/hw/tp-x220.nix b/makefu/2configs/hw/tp-x220.nix
index 0a471bde0..be3d1eb70 100644
--- a/makefu/2configs/hw/tp-x220.nix
+++ b/makefu/2configs/hw/tp-x220.nix
@@ -4,8 +4,10 @@ with config.krebs.lib;
{
imports = [ ./tp-x2x0.nix ];
-
- boot.kernelModules = [ "kvm-intel" ];
+ boot = {
+ kernelModules = [ "kvm-intel" "acpi_call" ];
+ extraModulePackages = [ config.boot.kernelPackages.tp_smapi ];
+ };
services.xserver = {
videoDriver = "intel";
@@ -15,6 +17,8 @@ with config.krebs.lib;
'';
};
+ security.rngd.enable = true;
+
services.xserver.displayManager.sessionCommands =''
xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation" 8 1
xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Button" 8 2
diff --git a/makefu/2configs/omo-share.nix b/makefu/2configs/omo-share.nix
index c943e3d9a..7e9842e14 100644
--- a/makefu/2configs/omo-share.nix
+++ b/makefu/2configs/omo-share.nix
@@ -13,6 +13,16 @@ in {
omo-share = {
listen = [ "${local-ip}:80" ];
locations = singleton (nameValuePair "/" ''
+
+ access_log off;
+ # sendfile off;
+ # tcp_nopush on;
+ # aio on;
+ sendfile on;
+ sendfile_max_chunk 512k;
+ directio 512;
+ aio threads;
+ mp4;
autoindex on;
root /media;
limit_rate_after 100m;
@@ -24,7 +34,6 @@ in {
keepalive_timeout 65;
keepalive_requests 200;
reset_timedout_connection on;
- sendfile on;
tcp_nopush on;
gzip off;
'');
@@ -48,7 +57,6 @@ in {
browseable = "yes";
"guest ok" = "yes";
};
-
emu = {
path = "/media/crypt1/emu";
"read only" = "yes";
@@ -61,6 +69,20 @@ in {
browseable = "yes";
"guest ok" = "yes";
};
+ crypt0-rw = {
+ path = "/media/crypt0/";
+ "read only" = "no";
+ browseable = "yes";
+ "guest ok" = "no";
+ "valid users" = "makefu";
+ };
+ crypt1-rw = {
+ path = "/media/crypt1/";
+ "read only" = "no";
+ browseable = "yes";
+ "guest ok" = "no";
+ "valid users" = "makefu";
+ };
};
extraConfig = ''
guest account = smbguest
diff --git a/makefu/2configs/steam.nix b/makefu/2configs/steam.nix
new file mode 100644
index 000000000..d4ec84abf
--- /dev/null
+++ b/makefu/2configs/steam.nix
@@ -0,0 +1,6 @@
+{pkgs, ...}:
+{
+ environment.systemPackages = [ pkgs.steam ];
+ hardware.opengl.driSupport32Bit = true;
+ hardware.pulseaudio.support32Bit = true;
+}
diff --git a/makefu/2configs/temp-share-samba.nix b/makefu/2configs/temp-share-samba.nix
new file mode 100644
index 000000000..5f21e3bf7
--- /dev/null
+++ b/makefu/2configs/temp-share-samba.nix
@@ -0,0 +1,28 @@
+{config, ... }:{
+ users.users.smbguest = {
+ name = "smbguest";
+ uid = config.ids.uids.smbguest;
+ description = "smb guest user";
+ home = "/var/empty";
+ };
+ services.samba = {
+ enable = true;
+ shares = {
+ share-home = {
+ path = "/home/share/";
+ "read only" = "no";
+ browseable = "yes";
+ "guest ok" = "yes";
+ };
+ };
+ extraConfig = ''
+ guest account = smbguest
+ map to guest = bad user
+ # disable printing
+ load printers = no
+ printing = bsd
+ printcap name = /dev/null
+ disable spoolss = yes
+ '';
+ };
+}
diff --git a/makefu/3modules/awesome-extra.nix b/makefu/3modules/awesome-extra.nix
new file mode 100644
index 000000000..b12556486
--- /dev/null
+++ b/makefu/3modules/awesome-extra.nix
@@ -0,0 +1,40 @@
+{config, lib, pkgs, ... }:
+
+with config.krebs.lib;
+let
+ cfg = config.makefu.awesome;
+ out = {
+ options.makefu.awesome = api;
+ config = lib.mkIf cfg.enable imp;
+ };
+ api = {
+ enable = mkEnableOption "awesome custom config";
+ modkey = mkOption {
+ type = types.str;
+ description = "Modkey to be used";
+ default = "Mod4";
+ };
+ baseConfig = mkOption {
+ type = types.path;
+ description = ''
+ rc.lua file to be used as default
+ This module will use substituteAll to replace strings before writing to
+ /etc/xdg/awesome/rc.lua
+ '';
+ default = pkgs.awesomecfg.full;
+ };
+ };
+ imp = {
+ # TODO: configure display manager as well
+ nixpkgs.config.packageOverrides = pkgs: rec {
+ awesome = pkgs.stdenv.lib.overrideDerivation pkgs.awesome (oldAttrs : {
+ postFixup = let
+ rclua = pkgs.substituteAll {
+ src = cfg.baseConfig;
+ inherit (cfg) modkey;
+ };
+ in "cp ${rclua} $out/etc/xdg/awesome/rc.lua";
+ });
+ };
+ };
+in out
diff --git a/makefu/3modules/default.nix b/makefu/3modules/default.nix
index f007a8418..853bdca04 100644
--- a/makefu/3modules/default.nix
+++ b/makefu/3modules/default.nix
@@ -4,6 +4,8 @@ _:
imports = [
./snapraid.nix
./umts.nix
+ ./taskserver.nix
+ ./awesome-extra.nix
];
}
diff --git a/makefu/3modules/taskserver.nix b/makefu/3modules/taskserver.nix
new file mode 100644
index 000000000..41247fff3
--- /dev/null
+++ b/makefu/3modules/taskserver.nix
@@ -0,0 +1,60 @@
+{ config, lib, pkgs, ... }:
+
+with config.krebs.lib;
+let
+ cfg = config.makefu.taskserver;
+
+ out = {
+ options.makefu.taskserver = api;
+ config = lib.mkIf cfg.enable imp;
+ };
+
+ api = {
+ enable = mkEnableOption "taskserver";
+
+ workingDir = mkOption {
+ type = types.str;
+ default = "/var/lib/taskserver";
+ };
+
+ package = mkOption {
+ type = types.package;
+ default = pkgs.taskserver;
+ };
+
+
+ };
+
+ imp = {
+ environment.systemPackages = [ cfg.package ];
+ systemd.services.taskserver = {
+ description = "taskd server";
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ restartIfChanged = true;
+ unitConfig = {
+ Documentation = "http://taskwarrior.org/docs/#taskd" ;
+ # https://taskwarrior.org/docs/taskserver/configure.html
+ ConditionPathExists = "${cfg.workingDir}/config";
+ };
+ serviceConfig = {
+ Type = "simple";
+ ExecStart = "${cfg.package}/bin/taskd server --data ${cfg.workingDir}";
+ WorkingDirectory = cfg.workingDir;
+ PrivateTmp = true;
+ InaccessibleDirectories = "/home /boot /opt /mnt /media";
+ User = "taskd";
+ };
+ };
+
+ users.users.taskd = {
+ uid = genid "taskd";
+ home = cfg.workingDir;
+ createHome = true;
+ };
+ users.groups.taskd.gid = genid "taskd";
+ };
+
+in
+out
+
diff --git a/makefu/5pkgs/awesomecfg/full.cfg b/makefu/5pkgs/awesomecfg/full.cfg
index c1b58aa90..f42aea003 100644
--- a/makefu/5pkgs/awesomecfg/full.cfg
+++ b/makefu/5pkgs/awesomecfg/full.cfg
@@ -83,13 +83,11 @@ vicious.register(batwidget, vicious.widgets.bat, "$2%", 61, "BAT0")
-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
-- beautiful.init("/usr/share/awesome/themes/default/theme.lua")
--- ./qbx8r72yzaxpz41zq00902zwajl31b5h-awesome-3.5.6/share/awesome/lib/beautiful.lua
---
--- Find the default theme
---
--- beautiful.init("/nix/store/qbx8r72yzaxpz41zq00902zwajl31b5h-awesome-3.5.6/share/awesome/themes/default/theme.lua")
+-- @awesome@/share/awesome/lib/beautiful.lua
+-- beautiful.init("@awesome@/share/awesome/themes/default/theme.lua")
+-- Find the default theme
function find_default_theme()
-- find the default lua theme in the package path
for path in package.path:gmatch('([^;]+);') do
@@ -115,7 +113,7 @@ browser = "firefox"
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
-modkey = "Mod4"
+modkey = "@modkey@"
-- Table of layouts to cover with awful.layout.inc, order matters.
local layouts =
diff --git a/makefu/5pkgs/default.nix b/makefu/5pkgs/default.nix
index 8caab433e..6d227fa6d 100644
--- a/makefu/5pkgs/default.nix
+++ b/makefu/5pkgs/default.nix
@@ -9,8 +9,11 @@ in
alsa-hdspconf = callPackage ./alsa-tools { alsaToolTarget="hdspconf";};
alsa-hdsploader = callPackage ./alsa-tools { alsaToolTarget="hdsploader";};
awesomecfg = callPackage ./awesomecfg {};
- nodemcu-uploader = callPackage ./nodemcu-uploader {};
mycube-flask = callPackage ./mycube-flask {};
+ nodemcu-uploader = callPackage ./nodemcu-uploader {};
tw-upload-plugin = callPackage ./tw-upload-plugin {};
+ inherit (callPackage ./devpi {}) devpi-web devpi-server;
+ skytraq-logger = callPackage ./skytraq-logger/ {};
+ taskserver = callPackage ./taskserver {};
};
}
diff --git a/makefu/5pkgs/devpi/default.nix b/makefu/5pkgs/devpi/default.nix
new file mode 100644
index 000000000..0df8ecd2c
--- /dev/null
+++ b/makefu/5pkgs/devpi/default.nix
@@ -0,0 +1,70 @@
+{ pkgs ? import <nixpkgs> {} }:
+with pkgs.stdenv.lib;
+let
+ execnet14 = pkgs.python3Packages.buildPythonPackage rec {
+ name = "execnet-1.4.1";
+
+ src = pkgs.fetchurl {
+ url = "https://pypi.python.org/packages/source/e/execnet/${name}.tar.gz";
+ sha256 = "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn";
+ };
+
+ propagatedBuildInputs = with pkgs.python3Packages;
+ [ setuptools_scm apipkg ];
+ meta = {
+ description = "rapid multi-Python deployment";
+ license = licenses.gpl2;
+ };
+ };
+
+ devpi-web = pkgs.python3Packages.buildPythonPackage rec {
+ name = "devpi-web";
+ version = "3.0.0";
+
+ src = pkgs.fetchurl {
+ url = "https://pypi.python.org/packages/source/d/devpi-web/devpi-web-${version}.tar.gz";
+ sha256 = "156abxyhj17a8cg38hpyr31qkjb61mb2kggsxij4p4xvy9jwkbwi";
+ };
+
+ propagatedBuildInputs = with pkgs.python3Packages;
+ [ devpi-server pyramid_chameleon beautifulsoup4 Whoosh defusedxml ];
+
+ meta = {
+ homepage = https://bitbucket.org/hpk42/devpi;
+ description = "a web view for devpi-server";
+ license = licenses.mit;
+ maintainers = with maintainers; [ makefu ];
+ };
+ };
+ devpi-server = pkgs.python3Packages.buildPythonPackage rec {
+ name = "devpi-server";
+ version = "3.0.2";
+
+ # original postFixup adds "import sys; sys.argv[0] = 'devpi-server'" to
+ # `.devpi-server-wrapped` which
+ # results in "not existing devpi-server: 'devpi-server'"
+ postFixup = "";
+
+ src = pkgs.fetchurl {
+ url = "https://pypi.python.org/packages/source/d/devpi-server/devpi-server-${version}.tar.gz";
+ sha256 = "14r1024i3x2pb72khyzvi56sh9smpdswmrbc88xvjxnalmzfn99d";
+ };
+
+ propagatedBuildInputs = with pkgs.python3Packages;
+ [ devpi-common execnet14 itsdangerous pluggy waitress pyramid ];
+ buildInputs = with pkgs.python3Packages; [ pytest beautifulsoup4 webtest ];
+
+ meta = {
+ homepage = https://bitbucket.org/hpk42/devpi;
+ description = "Devpi Server";
+ license = licenses.mit;
+ maintainers = with maintainers; [ makefu ];
+ };
+ };
+
+in {
+ inherit devpi-server;
+ devpi-web = pkgs.python3.buildEnv.override {
+ extraLibs = [ devpi-web devpi-server ];
+ };
+}
diff --git a/makefu/5pkgs/skytraq-logger/default.nix b/makefu/5pkgs/skytraq-logger/default.nix
new file mode 100644
index 000000000..1ad81594a
--- /dev/null
+++ b/makefu/5pkgs/skytraq-logger/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, pkgs, fetchFromGitHub, ... }:
+stdenv.mkDerivation rec {
+ name = "skytraq-datalogger-${version}";
+ version = "4966a8";
+ src = fetchFromGitHub {
+ owner = "makefu";
+ repo = "skytraq-datalogger";
+ rev = version ;
+ sha256 = "1qaszrs7638kc9x4qq4m1yxqmk8jw7wajywvdk4wc2i007p89v3y";
+ };
+ buildFlags = "CC=gcc";
+ makeFlags = "PREFIX=bin/ DESTDIR=$(out)";
+
+ preInstall = ''
+ mkdir -p $out/bin
+ '';
+ #patchPhase = ''
+ # sed -i -e 's#/usr/bin/gcc#gcc#' -e Makefile
+ #'';
+
+ buildInputs = with pkgs;[
+ curl
+ gnugrep
+ ];
+
+ meta = {
+ homepage = http://github.com/makefu/skytraq-datalogger;
+ description = "datalogger for skytraq";
+ license = lib.licenses.gpl2;
+ };
+}
diff --git a/makefu/5pkgs/taskserver/default.nix b/makefu/5pkgs/taskserver/default.nix
new file mode 100644
index 000000000..a1502b4d6
--- /dev/null
+++ b/makefu/5pkgs/taskserver/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, cmake, libuuid, gnutls, makeWrapper }:
+
+stdenv.mkDerivation rec {
+ name = "taskserver-${version}";
+ version = "1.1.0";
+
+ enableParallelBuilding = true;
+
+ src = fetchurl {
+ url = "http://www.taskwarrior.org/download/taskd-${version}.tar.gz";
+ sha256 = "1d110q9vw8g5syzihxymik7hd27z1592wkpz55kya6lphzk8i13v";
+ };
+
+ patchPhase = ''
+ pkipath=$out/share/taskd/pki
+ mkdir -p $pkipath
+ cp -r pki/* $pkipath
+ echo "patching paths in pki/generate"
+ sed -i "s#^\.#$pkipath#" $pkipath/generate
+ for f in $pkipath/generate* ;do
+ i=$(basename $f)
+ echo patching $i
+ sed -i \
+ -e 's/which/type -p/g' \
+ -e 's#^\. ./vars#if test -e ./vars;then . ./vars; else echo "cannot find ./vars - copy the template from '$pkipath'/vars into the working directory";exit 1; fi#' $f
+
+ echo wrapping $i
+ makeWrapper $pkipath/$i $out/bin/taskd-pki-$i \
+ --prefix PATH : ${gnutls}/bin/
+ done
+ '';
+
+ buildInputs = [ makeWrapper ];
+ nativeBuildInputs = [ cmake libuuid gnutls ];
+
+ meta = {
+ description = "Server for synchronising Taskwarrior clients";
+ homepage = http://taskwarrior.org;
+ license = stdenv.lib.licenses.mit;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = with stdenv.lib.maintainers; [ matthiasbeyer makefu ];
+ };
+}