| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							|  |  |  | with lib; | 
					
						
							|  |  |  | let | 
					
						
							| 
									
										
										
										
											2017-05-05 11:23:46 +02:00
										 |  |  |   inherit (pkgs) ipfs runCommand makeWrapper; | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   cfg = config.services.ipfs; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-08 01:52:08 -07:00
										 |  |  |   ipfsFlags = toString ([ | 
					
						
							| 
									
										
										
										
											2017-09-16 09:03:37 -07:00
										 |  |  |     (optionalString  cfg.autoMount                   "--mount") | 
					
						
							| 
									
										
										
										
											2017-09-29 18:07:35 -07:00
										 |  |  |     #(optionalString  cfg.autoMigrate                 "--migrate") | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  |     (optionalString  cfg.enableGC                    "--enable-gc") | 
					
						
							|  |  |  |     (optionalString (cfg.serviceFdlimit != null)     "--manage-fdlimit=false") | 
					
						
							|  |  |  |     (optionalString (cfg.defaultMode == "offline")   "--offline") | 
					
						
							|  |  |  |     (optionalString (cfg.defaultMode == "norouting") "--routing=none") | 
					
						
							| 
									
										
										
										
											2017-08-08 01:52:08 -07:00
										 |  |  |   ] ++ cfg.extraFlags); | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-24 20:51:02 +02:00
										 |  |  |   defaultDataDir = if versionAtLeast config.system.stateVersion "17.09" then | 
					
						
							|  |  |  |     "/var/lib/ipfs" else | 
					
						
							|  |  |  |     "/var/lib/ipfs/.ipfs"; | 
					
						
							| 
									
										
										
										
											2017-05-05 11:23:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # Wrapping the ipfs binary with the environment variable IPFS_PATH set to dataDir because we can't set it in the user environment | 
					
						
							|  |  |  |   wrapped = runCommand "ipfs" { buildInputs = [ makeWrapper ]; } ''
 | 
					
						
							|  |  |  |     mkdir -p "$out/bin" | 
					
						
							| 
									
										
										
										
											2017-08-08 01:52:08 -07:00
										 |  |  |     makeWrapper "${ipfs}/bin/ipfs" "$out/bin/ipfs" \ | 
					
						
							|  |  |  |       --set IPFS_PATH ${cfg.dataDir} \ | 
					
						
							|  |  |  |       --prefix PATH : /run/wrappers/bin | 
					
						
							| 
									
										
										
										
											2017-05-05 11:23:46 +02:00
										 |  |  |   '';
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   commonEnv = { | 
					
						
							|  |  |  |     environment.IPFS_PATH = cfg.dataDir; | 
					
						
							|  |  |  |     path = [ wrapped ]; | 
					
						
							|  |  |  |     serviceConfig.User = cfg.user; | 
					
						
							|  |  |  |     serviceConfig.Group = cfg.group; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   baseService = recursiveUpdate commonEnv { | 
					
						
							|  |  |  |     wants = [ "ipfs-init.service" ]; | 
					
						
							| 
									
										
										
										
											2017-09-29 18:07:35 -07:00
										 |  |  |     # NB: migration must be performed prior to pre-start, else we get the failure message! | 
					
						
							| 
									
										
										
										
											2017-08-29 10:34:48 -07:00
										 |  |  |     preStart = ''
 | 
					
						
							| 
									
										
										
										
											2017-09-06 15:40:42 -07:00
										 |  |  |       ipfs repo fsck # workaround for BUG #4212 (https://github.com/ipfs/go-ipfs/issues/4214) | 
					
						
							| 
									
										
										
										
											2017-09-16 09:03:37 -07:00
										 |  |  |     '' + optionalString cfg.autoMount '' | 
					
						
							| 
									
										
										
										
											2017-08-29 10:34:48 -07:00
										 |  |  |       ipfs --local config Mounts.FuseAllowOther --json true | 
					
						
							| 
									
										
										
										
											2017-08-30 08:24:09 -07:00
										 |  |  |       ipfs --local config Mounts.IPFS ${cfg.ipfsMountDir} | 
					
						
							|  |  |  |       ipfs --local config Mounts.IPNS ${cfg.ipnsMountDir} | 
					
						
							| 
									
										
										
										
											2017-08-29 10:34:48 -07:00
										 |  |  |     '' + concatStringsSep "\n" (collect
 | 
					
						
							|  |  |  |           isString | 
					
						
							|  |  |  |           (mapAttrsRecursive | 
					
						
							|  |  |  |             (path: value: | 
					
						
							|  |  |  |             # Using heredoc below so that the value is never improperly quoted | 
					
						
							|  |  |  |             ''
 | 
					
						
							|  |  |  |               read value <<EOF | 
					
						
							|  |  |  |               ${builtins.toJSON value} | 
					
						
							|  |  |  |               EOF | 
					
						
							|  |  |  |               ipfs --local config --json "${concatStringsSep "." path}" "$value" | 
					
						
							|  |  |  |             '')
 | 
					
						
							| 
									
										
										
										
											2017-11-25 22:47:59 -08:00
										 |  |  |             ({ Addresses.API = cfg.apiAddress; | 
					
						
							|  |  |  |                Addresses.Gateway = cfg.gatewayAddress; | 
					
						
							|  |  |  |                Addresses.Swarm = cfg.swarmAddress; | 
					
						
							|  |  |  |             } // | 
					
						
							|  |  |  |             cfg.extraConfig)) | 
					
						
							| 
									
										
										
										
											2017-08-29 10:34:48 -07:00
										 |  |  |         ); | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  |     serviceConfig = { | 
					
						
							|  |  |  |       ExecStart = "${wrapped}/bin/ipfs daemon ${ipfsFlags}"; | 
					
						
							|  |  |  |       Restart = "on-failure"; | 
					
						
							|  |  |  |       RestartSec = 1; | 
					
						
							|  |  |  |     } // optionalAttrs (cfg.serviceFdlimit != null) { LimitNOFILE = cfg.serviceFdlimit; }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | in { | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   ###### interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.ipfs = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       enable = mkEnableOption "Interplanetary File System"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       user = mkOption { | 
					
						
							|  |  |  |         type = types.str; | 
					
						
							|  |  |  |         default = "ipfs"; | 
					
						
							|  |  |  |         description = "User under which the IPFS daemon runs"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       group = mkOption { | 
					
						
							|  |  |  |         type = types.str; | 
					
						
							|  |  |  |         default = "ipfs"; | 
					
						
							|  |  |  |         description = "Group under which the IPFS daemon runs"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       dataDir = mkOption { | 
					
						
							|  |  |  |         type = types.str; | 
					
						
							| 
									
										
										
										
											2017-05-24 20:51:02 +02:00
										 |  |  |         default = defaultDataDir; | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |         description = "The data dir for IPFS"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-12 15:40:05 +02:00
										 |  |  |       defaultMode = mkOption { | 
					
						
							|  |  |  |         type = types.enum [ "online" "offline" "norouting" ]; | 
					
						
							|  |  |  |         default = "online"; | 
					
						
							| 
									
										
										
										
											2017-09-06 15:40:42 -07:00
										 |  |  |         description = "systemd service that is enabled by default"; | 
					
						
							| 
									
										
										
										
											2017-08-12 15:40:05 +02:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-29 18:07:35 -07:00
										 |  |  |       /*
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |       autoMigrate = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							| 
									
										
										
										
											2017-09-29 18:07:35 -07:00
										 |  |  |         description = ''
 | 
					
						
							|  |  |  |           Whether IPFS should try to migrate the file system automatically. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           The daemon will need to be able to download a binary from https://ipfs.io to perform the migration. | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2017-09-29 18:07:35 -07:00
										 |  |  |       */ | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 09:03:37 -07:00
										 |  |  |       autoMount = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         description = "Whether IPFS should try to mount /ipfs and /ipns at startup."; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2017-08-30 08:24:09 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       ipfsMountDir = mkOption { | 
					
						
							|  |  |  |         type = types.str; | 
					
						
							|  |  |  |         default = "/ipfs"; | 
					
						
							|  |  |  |         description = "Where to mount the IPFS namespace to"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ipnsMountDir = mkOption { | 
					
						
							|  |  |  |         type = types.str; | 
					
						
							|  |  |  |         default = "/ipns"; | 
					
						
							|  |  |  |         description = "Where to mount the IPNS namespace to"; | 
					
						
							| 
									
										
										
										
											2017-08-08 01:52:08 -07:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-28 15:24:09 +01:00
										 |  |  |       gatewayAddress = mkOption { | 
					
						
							|  |  |  |         type = types.str; | 
					
						
							|  |  |  |         default = "/ip4/127.0.0.1/tcp/8080"; | 
					
						
							|  |  |  |         description = "Where the IPFS Gateway can be reached"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       apiAddress = mkOption { | 
					
						
							|  |  |  |         type = types.str; | 
					
						
							|  |  |  |         default = "/ip4/127.0.0.1/tcp/5001"; | 
					
						
							|  |  |  |         description = "Where IPFS exposes its API to"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-25 22:47:59 -08:00
										 |  |  |       swarmAddress = mkOption { | 
					
						
							|  |  |  |         type = types.listOf types.str; | 
					
						
							|  |  |  |         default = [ "/ip4/0.0.0.0/tcp/4001" "/ip6/::/tcp/4001" ]; | 
					
						
							|  |  |  |         description = "Where IPFS listens for incoming p2p connections"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |       enableGC = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							| 
									
										
										
										
											2017-09-06 15:40:42 -07:00
										 |  |  |         description = "Whether to enable automatic garbage collection"; | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 19:28:06 +01:00
										 |  |  |       emptyRepo = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							| 
									
										
										
										
											2017-09-06 15:40:42 -07:00
										 |  |  |         description = "If set to true, the repo won't be initialized with help files"; | 
					
						
							| 
									
										
										
										
											2017-01-13 19:28:06 +01:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-27 09:52:56 -07:00
										 |  |  |       extraConfig = mkOption { | 
					
						
							|  |  |  |         type = types.attrs; | 
					
						
							| 
									
										
										
										
											2017-09-06 15:40:42 -07:00
										 |  |  |         description = ''
 | 
					
						
							|  |  |  |           Attrset of daemon configuration to set using <command>ipfs config</command>, every time the daemon starts. | 
					
						
							|  |  |  |           These are applied last, so may override configuration set by other options in this module. | 
					
						
							|  |  |  |           Keep in mind that this configuration is stateful; i.e., unsetting anything in here does not reset the value to the default! | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2017-08-27 09:52:56 -07:00
										 |  |  |         default = {}; | 
					
						
							|  |  |  |         example = { | 
					
						
							|  |  |  |           Datastore.StorageMax = "100GB"; | 
					
						
							|  |  |  |           Discovery.MDNS.Enabled = false; | 
					
						
							|  |  |  |           Bootstrap = [ | 
					
						
							|  |  |  |             "/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu" | 
					
						
							|  |  |  |             "/ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm" | 
					
						
							|  |  |  |           ]; | 
					
						
							|  |  |  |           Swarm.AddrFilters = null; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |       extraFlags = mkOption { | 
					
						
							|  |  |  |         type = types.listOf types.str; | 
					
						
							|  |  |  |         description = "Extra flags passed to the IPFS daemon"; | 
					
						
							|  |  |  |         default = []; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2017-08-27 09:52:56 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-31 07:15:02 -07:00
										 |  |  |       serviceFdlimit = mkOption { | 
					
						
							|  |  |  |         type = types.nullOr types.int; | 
					
						
							|  |  |  |         default = null; | 
					
						
							| 
									
										
										
										
											2017-09-06 15:40:42 -07:00
										 |  |  |         description = "The fdlimit for the IPFS systemd unit or <literal>null</literal> to have the daemon attempt to manage it"; | 
					
						
							|  |  |  |         example = 64*1024; | 
					
						
							| 
									
										
										
										
											2017-07-31 07:15:02 -07:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### implementation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							| 
									
										
										
										
											2017-05-05 11:23:46 +02:00
										 |  |  |     environment.systemPackages = [ wrapped ]; | 
					
						
							| 
									
										
										
										
											2017-09-16 09:03:37 -07:00
										 |  |  |     environment.etc."fuse.conf" = mkIf cfg.autoMount { text = ''
 | 
					
						
							|  |  |  |       user_allow_other | 
					
						
							|  |  |  |     ''; };
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     users.extraUsers = mkIf (cfg.user == "ipfs") { | 
					
						
							|  |  |  |       ipfs = { | 
					
						
							|  |  |  |         group = cfg.group; | 
					
						
							|  |  |  |         home = cfg.dataDir; | 
					
						
							|  |  |  |         createHome = false; | 
					
						
							|  |  |  |         uid = config.ids.uids.ipfs; | 
					
						
							|  |  |  |         description = "IPFS daemon user"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     users.extraGroups = mkIf (cfg.group == "ipfs") { | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  |       ipfs.gid = config.ids.gids.ipfs; | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  |     systemd.services.ipfs-init = recursiveUpdate commonEnv { | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  |       description = "IPFS Initializer"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       after = [ "local-fs.target" ]; | 
					
						
							| 
									
										
										
										
											2017-09-06 15:40:42 -07:00
										 |  |  |       before = [ "ipfs.service" "ipfs-offline.service" "ipfs-norouting.service" ]; | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 19:28:06 +01:00
										 |  |  |       preStart = ''
 | 
					
						
							|  |  |  |         install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.dataDir} | 
					
						
							| 
									
										
										
										
											2017-09-16 09:03:37 -07:00
										 |  |  |       '' + optionalString cfg.autoMount '' | 
					
						
							| 
									
										
										
										
											2017-08-30 08:24:09 -07:00
										 |  |  |         install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.ipfsMountDir} | 
					
						
							|  |  |  |         install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.ipnsMountDir} | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2017-08-08 01:52:08 -07:00
										 |  |  |       script = ''
 | 
					
						
							| 
									
										
										
										
											2017-05-24 20:51:02 +02:00
										 |  |  |         if [[ ! -f ${cfg.dataDir}/config ]]; then | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  |           ipfs init ${optionalString cfg.emptyRepo "-e"} | 
					
						
							| 
									
										
										
										
											2017-01-13 19:28:06 +01:00
										 |  |  |         fi | 
					
						
							| 
									
										
										
										
											2017-08-29 10:34:48 -07:00
										 |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |       serviceConfig = { | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  |         Type = "oneshot"; | 
					
						
							|  |  |  |         RemainAfterExit = true; | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |         PermissionsStartOnly = true; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  |     # TODO These 3 definitions possibly be further abstracted through use of a function | 
					
						
							|  |  |  |     # like: mutexServices "ipfs" [ "", "offline", "norouting" ] { ... shared conf here ... } | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  |     systemd.services.ipfs = recursiveUpdate baseService { | 
					
						
							|  |  |  |       description = "IPFS Daemon"; | 
					
						
							| 
									
										
										
										
											2017-08-12 15:40:05 +02:00
										 |  |  |       wantedBy = mkIf (cfg.defaultMode == "online") [ "multi-user.target" ]; | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  |       after = [ "network.target" "local-fs.target" "ipfs-init.service" ]; | 
					
						
							| 
									
										
										
										
											2017-08-12 15:40:05 +02:00
										 |  |  |       conflicts = [ "ipfs-offline.service" "ipfs-norouting.service"]; | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  |     systemd.services.ipfs-offline = recursiveUpdate baseService { | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  |       description = "IPFS Daemon (offline mode)"; | 
					
						
							| 
									
										
										
										
											2017-08-12 15:40:05 +02:00
										 |  |  |       wantedBy = mkIf (cfg.defaultMode == "offline") [ "multi-user.target" ]; | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  |       after = [ "local-fs.target" "ipfs-init.service" ]; | 
					
						
							| 
									
										
										
										
											2017-08-12 15:40:05 +02:00
										 |  |  |       conflicts = [ "ipfs.service" "ipfs-norouting.service"]; | 
					
						
							| 
									
										
										
										
											2017-01-26 17:33:26 +01:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2017-08-12 15:40:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-28 13:09:39 -07:00
										 |  |  |     systemd.services.ipfs-norouting = recursiveUpdate baseService { | 
					
						
							| 
									
										
										
										
											2017-08-12 15:40:05 +02:00
										 |  |  |       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"]; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:39:53 +01:00
										 |  |  |   }; | 
					
						
							|  |  |  | } |