cleverca22
5/29/2016 - 9:26 PM

configuration.nix

{ config, stdenv, pkgs, lib, ... }:

with lib;

{
  options = {
    services.toxvpn = {
      enable = mkOption {
        type = types.bool;
        default = false;
        description = "enable toxvpn running on startup";
      };
      localip = mkOption {
        type = types.string;
        default = "10.123.123.1";
        description = "your ip on the vpn";
      };
      port = mkOption {
        type = types.int;
        default = 33445;
        description = "udp port for toxcore, port-forward to help with connectivity if you run many nodes behind one NAT";
      };
    };
  };

  config = mkIf config.services.toxvpn.enable {
    systemd.services.toxvpn = {
      description = "toxvpn daemon";
      wantedBy = [ "basic.target" ];
      preStart = ''
        mkdir -p /run/toxvpn || true
        chown toxvpn /run/toxvpn/
      '';
      environment.TOX_LOG_KEYS = "/tmp/keys";
      serviceConfig = {
        ExecStart = "${pkgs.toxvpn}/bin/toxvpn -i ${config.services.toxvpn.localip} -l /run/toxvpn/control -u toxvpn -p ${toString config.services.toxvpn.port}";
        KillMode = "process";
        Restart = "on-success";
        Type = "notify";
      };
    };
    users.extraUsers = {
      toxvpn = {
        uid = 1010;
        home = "/var/lib/toxvpn";
        createHome = true;
      };
    };
  };
}
{ stdenv, fetchFromGitHub, libtoxcore, cmake, jsoncpp, lib, stdenvAdapters, libsodium, systemd, enableDebugging, libcap }:

with lib;

let
  libtoxcoreLocked = stdenv.lib.overrideDerivation libtoxcore (oldAttrs: {
    name = "libtoxcore-20151110";
    src = fetchFromGitHub {
      owner = "irungentoo";
      repo = "toxcore";
      rev = "22634a4b93dda5b17cb357cd84ac46fcfdc22519";
      sha256 = "01i92wm5lg2p7k71qn23sfh01xi8acdrwn23rk52n54h424l1fgy";
    };
  });
  stdenv2 = stdenvAdapters.keepDebugInfo stdenv;
in

stdenv.mkDerivation {
  name = "toxvpn-20151111";
  buildInputs = [ cmake libtoxcoreLocked jsoncpp libsodium systemd libcap ];
  src = fetchFromGitHub {
    owner = "cleverca22";
    repo = "toxvpn";
    rev = "1d06bb7da277d46abb8595cf152210c4ccf0ba7d";
    sha256 = "1himrbdgsbkfha1d87ysj2hwyz4a6z9yxqbai286imkya84q7r15";
  };
  cmakeFlags = [ "-DSYSTEMD=1" ];
        meta = {
                description = "a tox based vpn program";
                license = licenses.gpl3;
                platforms = platforms.linux;
        };
}
{ lib, config, pkgs, ... }:
{
  imports = [ ./toxvpn_module.nix ];
  nixpkgs.config = {
    packageOverrides = pkgs: rec {
      toxvpn = pkgs.callPackage ./toxvpn.nix {};
    };
  };
  services = {
    toxvpn.localip = "192.168.123.11";
    toxvpn.port = 33446;
    toxvpn.enable = true;
  };
}