summary refs log tree commit diff
path: root/nixos/modules/services/network-filesystems/ipfs.nix
diff options
context:
space:
mode:
authorEric Litak <elitak@gmail.com>2017-08-28 13:09:39 -0700
committerEric Litak <elitak@gmail.com>2017-08-30 08:17:34 -0700
commitba976021af3b191263e86d4f1b8605d12ae56387 (patch)
treefe3dd3e5e046880a895b8a1e1751ebaf039adac5 /nixos/modules/services/network-filesystems/ipfs.nix
parent952424217b0e0177362a7e9e00305abc22762a19 (diff)
downloadnixpkgs-ba976021af3b191263e86d4f1b8605d12ae56387.tar
nixpkgs-ba976021af3b191263e86d4f1b8605d12ae56387.tar.gz
nixpkgs-ba976021af3b191263e86d4f1b8605d12ae56387.tar.bz2
nixpkgs-ba976021af3b191263e86d4f1b8605d12ae56387.tar.lz
nixpkgs-ba976021af3b191263e86d4f1b8605d12ae56387.tar.xz
nixpkgs-ba976021af3b191263e86d4f1b8605d12ae56387.tar.zst
nixpkgs-ba976021af3b191263e86d4f1b8605d12ae56387.zip
ipfs: refactor; wrapper adjustment
Diffstat (limited to 'nixos/modules/services/network-filesystems/ipfs.nix')
-rw-r--r--nixos/modules/services/network-filesystems/ipfs.nix113
1 files changed, 37 insertions, 76 deletions
diff --git a/nixos/modules/services/network-filesystems/ipfs.nix b/nixos/modules/services/network-filesystems/ipfs.nix
index df8506dd3d4..d6840b0ea0d 100644
--- a/nixos/modules/services/network-filesystems/ipfs.nix
+++ b/nixos/modules/services/network-filesystems/ipfs.nix
@@ -1,20 +1,19 @@
 { config, lib, pkgs, ... }:
-
 with lib;
-
 let
   inherit (pkgs) ipfs runCommand makeWrapper;
 
   cfg = config.services.ipfs;
 
   ipfsFlags = toString ([
-    (optionalString (cfg.serviceFdlimit != null) "--manage-fdlimit=true")
-    (optionalString cfg.autoMount   "--mount")
-    (optionalString cfg.autoMigrate "--migrate")
-    (optionalString cfg.enableGC    "--enable-gc")
+    (optionalString  cfg.autoMount                   "--mount")
+    (optionalString  cfg.autoMigrate                 "--migrate")
+    (optionalString  cfg.enableGC                    "--enable-gc")
+    (optionalString (cfg.serviceFdlimit != null)     "--manage-fdlimit=false")
+    (optionalString (cfg.defaultMode == "offline")   "--offline")
+    (optionalString (cfg.defaultMode == "norouting") "--routing=none")
   ] ++ cfg.extraFlags);
 
-  # Before Version 17.09, ipfs would always use "/var/lib/ipfs/.ipfs" as it's dataDir
   defaultDataDir = if versionAtLeast config.system.stateVersion "17.09" then
     "/var/lib/ipfs" else
     "/var/lib/ipfs/.ipfs";
@@ -26,9 +25,24 @@ let
       --set IPFS_PATH ${cfg.dataDir} \
       --prefix PATH : /run/wrappers/bin
   '';
-in
 
-{
+
+  commonEnv = {
+    environment.IPFS_PATH = cfg.dataDir;
+    path = [ wrapped ];
+    serviceConfig.User = cfg.user;
+    serviceConfig.Group = cfg.group;
+  };
+
+  baseService = recursiveUpdate commonEnv {
+    wants = [ "ipfs-init.service" ];
+    serviceConfig = {
+      ExecStart = "${wrapped}/bin/ipfs daemon ${ipfsFlags}";
+      Restart = "on-failure";
+      RestartSec = 1;
+    } // optionalAttrs (cfg.serviceFdlimit != null) { LimitNOFILE = cfg.serviceFdlimit; };
+  };
+in {
 
   ###### interface
 
@@ -158,34 +172,28 @@ in
     };
 
     users.extraGroups = mkIf (cfg.group == "ipfs") {
-      ipfs = {
-        gid = config.ids.gids.ipfs;
-      };
+      ipfs.gid = config.ids.gids.ipfs;
     };
 
-    systemd.services.ipfs-init = {
+    systemd.services.ipfs-init = recursiveUpdate commonEnv {
       description = "IPFS Initializer";
 
       after = [ "local-fs.target" ];
       before = [ "ipfs.service" "ipfs-offline.service" ];
 
-      environment.IPFS_PATH = cfg.dataDir;
-
-      path  = [ pkgs.ipfs pkgs.su pkgs.bash ];
-
       preStart = ''
         install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.dataDir}
       '';
       script = ''
         if [[ ! -f ${cfg.dataDir}/config ]]; then
-          ${ipfs}/bin/ipfs init ${optionalString cfg.emptyRepo "-e"}
+          ipfs init ${optionalString cfg.emptyRepo "-e"}
         fi
-        ${ipfs}/bin/ipfs --local config Addresses.API ${cfg.apiAddress}
-        ${ipfs}/bin/ipfs --local config Addresses.Gateway ${cfg.gatewayAddress}
+        ipfs --local config Addresses.API ${cfg.apiAddress}
+        ipfs --local config Addresses.Gateway ${cfg.gatewayAddress}
       '' + optionalString cfg.autoMount ''
-        ${ipfs}/bin/ipfs --local config Mounts.FuseAllowOther --json true
-        mkdir -p $(${ipfs}/bin/ipfs --local config Mounts.IPFS)
-        mkdir -p $(${ipfs}/bin/ipfs --local config Mounts.IPNS)
+        ipfs --local config Mounts.FuseAllowOther --json true
+        mkdir -p $(ipfs --local config Mounts.IPFS)
+        mkdir -p $(ipfs --local config Mounts.IPNS)
       '' + concatStringsSep "\n" (collect
             isString
             (mapAttrsRecursive
@@ -201,81 +209,34 @@ in
           );
 
       serviceConfig = {
-        User = cfg.user;
-        Group = cfg.group;
         Type = "oneshot";
         RemainAfterExit = true;
         PermissionsStartOnly = true;
       };
     };
 
-    systemd.services.ipfs = {
-      description = "IPFS Daemon";
+    # TODO These 3 definitions possibly be further abstracted through use of a function
+    # like: mutexServices "ipfs" [ "", "offline", "norouting" ] { ... shared conf here ... }
 
+    systemd.services.ipfs = recursiveUpdate baseService {
+      description = "IPFS Daemon";
       wantedBy = mkIf (cfg.defaultMode == "online") [ "multi-user.target" ];
-
       after = [ "network.target" "local-fs.target" "ipfs-init.service" ];
-
       conflicts = [ "ipfs-offline.service" "ipfs-norouting.service"];
-      wants = [ "ipfs-init.service" ];
-
-      environment.IPFS_PATH = cfg.dataDir;
-
-      path  = [ pkgs.ipfs ];
-
-      serviceConfig = {
-        ExecStart = "${ipfs}/bin/ipfs daemon ${ipfsFlags}";
-        User = cfg.user;
-        Group = cfg.group;
-        Restart = "on-failure";
-        RestartSec = 1;
-      } // optionalAttrs (cfg.serviceFdlimit != null) { LimitNOFILE = cfg.serviceFdlimit; };
     };
 
-    systemd.services.ipfs-offline = {
+    systemd.services.ipfs-offline = recursiveUpdate baseService {
       description = "IPFS Daemon (offline mode)";
-
       wantedBy = mkIf (cfg.defaultMode == "offline") [ "multi-user.target" ];
-
       after = [ "local-fs.target" "ipfs-init.service" ];
-
       conflicts = [ "ipfs.service" "ipfs-norouting.service"];
-      wants = [ "ipfs-init.service" ];
-
-      environment.IPFS_PATH = cfg.dataDir;
-
-      path  = [ pkgs.ipfs ];
-
-      serviceConfig = {
-        ExecStart = "${ipfs}/bin/ipfs daemon ${ipfsFlags} --offline";
-        User = cfg.user;
-        Group = cfg.group;
-        Restart = "on-failure";
-        RestartSec = 1;
-      } // optionalAttrs (cfg.serviceFdlimit != null) { LimitNOFILE = cfg.serviceFdlimit; };
     };
 
-    systemd.services.ipfs-norouting = {
+    systemd.services.ipfs-norouting = recursiveUpdate baseService {
       description = "IPFS Daemon (no routing mode)";
-
       wantedBy = mkIf (cfg.defaultMode == "norouting") [ "multi-user.target" ];
-
       after = [ "local-fs.target" "ipfs-init.service" ];
-
       conflicts = [ "ipfs.service" "ipfs-offline.service"];
-      wants = [ "ipfs-init.service" ];
-
-      environment.IPFS_PATH = cfg.dataDir;
-
-      path  = [ pkgs.ipfs ];
-
-      serviceConfig = {
-        ExecStart = "${ipfs}/bin/ipfs daemon ${ipfsFlags} --routing=none";
-        User = cfg.user;
-        Group = cfg.group;
-        Restart = "on-failure";
-        RestartSec = 1;
-      } // optionalAttrs (cfg.serviceFdlimit != null) { LimitNOFILE = cfg.serviceFdlimit; };
     };
 
   };