diff --git a/nixos/modules/misc/ids.nix b/nixos/modules/misc/ids.nix index 42651858552..312c24db98b 100644 --- a/nixos/modules/misc/ids.nix +++ b/nixos/modules/misc/ids.nix @@ -215,6 +215,7 @@ mediatomb = 187; rdnssd = 188; ihaskell = 189; + i2p = 190; # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399! @@ -407,6 +408,7 @@ mediatomb = 187; #rdnssd = 188; # unused ihaskell = 189; + i2p = 190; # When adding a gid, make sure it doesn't match an existing # uid. Users and groups with the same name should have equal diff --git a/nixos/modules/services/networking/i2p.nix b/nixos/modules/services/networking/i2p.nix new file mode 100644 index 00000000000..bad22c79138 --- /dev/null +++ b/nixos/modules/services/networking/i2p.nix @@ -0,0 +1,42 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.i2p; + homeDir = "/var/lib/i2p"; +in { + ###### interface + options.services.i2p = { + enable = mkOption { + type = types.bool; + default = false; + description = '' + Enables i2p as a running service upon activation. + ''; + }; + }; + + ###### implementation + config = mkIf cfg.enable { + users.extraUsers.i2p = { + group = "i2p"; + description = "i2p User"; + home = homeDir; + createHome = true; + uid = config.ids.uids.i2p; + }; + users.extraGroups.i2p.gid = config.ids.gids.i2p; + systemd.services.i2p = { + description = "I2P router with administration interface for hidden services"; + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + User = "i2p"; + WorkingDirectory = homeDir; + Restart = "on-abort"; + ExecStart = "${pkgs.i2p}/bin/i2prouter-plain"; + }; + }; + }; +} diff --git a/pkgs/tools/networking/i2p/default.nix b/pkgs/tools/networking/i2p/default.nix index 088e8e8de7f..0a26aff83dd 100644 --- a/pkgs/tools/networking/i2p/default.nix +++ b/pkgs/tools/networking/i2p/default.nix @@ -1,7 +1,4 @@ -{ stdenv, procps, coreutils, fetchurl, openjdk8, ant, gcj, gettext }: - -# TODO: support other systems, just copy appropriate lib/wrapper.. to $out -assert stdenv.system != "x86_64-linux"; +{ stdenv, procps, coreutils, fetchurl, openjdk8, openjre, ant, gcj, gettext }: stdenv.mkDerivation rec { name = "i2p-0.9.18"; @@ -9,7 +6,7 @@ stdenv.mkDerivation rec { url = "https://github.com/i2p/i2p.i2p/archive/${name}.tar.gz"; sha256 = "1hahdzvfh1zqb8qdc59xbjpqm8qq95k2xx22mpnhcdh90lb6xqnl"; }; - buildInputs = [ openjdk8 ant gcj gettext ]; + buildInputs = [ openjdk8 ant gettext ]; buildPhase = '' export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" ant preppkg-linux-only @@ -24,7 +21,8 @@ stdenv.mkDerivation rec { -e "s#/usr/ucb/ps#${procps}/bin/ps#" \ -e "s#/usr/bin/tr#${coreutils}/bin/tr#" \ -e 's#%USER_HOME#$HOME#' \ - -e "s#%SYSTEM_java_io_tmpdir#/tmp#" + -e "s#%SYSTEM_java_io_tmpdir#/tmp#" \ + -e 's#JAVA=java#JAVA=${openjre}/bin/java#' mv $out/runplain.sh $out/bin/i2prouter-plain mv $out/man $out/share/ chmod +x $out/bin/* $out/i2psvc @@ -36,6 +34,7 @@ stdenv.mkDerivation rec { description = "Applications and router for I2P, anonymity over the Internet"; maintainers = [ stdenv.lib.maintainers.joelmo ]; licenses = licenses.gpl2; - platforms = platforms.linux; + # TODO: support other systems, just copy appropriate lib/wrapper.. to $out + platforms = [ "x86_64-linux" ]; }; }