anchor.diff:  { 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";
  
positive.code:     };
  
      users.extraGroups = mkIf (cfg.group == "ipfs") {
        ipfs = {
          gid = config.ids.gids.ipfs;
        };
      };
  
      systemd.services.ipfs-init = {
        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"}
          fi
          ${ipfs}/bin/ipfs --local config Addresses.API ${cfg.apiAddress}
          ${ipfs}/bin/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)
        '' + concatStringsSep "\n" (collect
              isString
              (mapAttrsRecursive
  
negative.code:           );
  
        serviceConfig = {
          Type = "oneshot";
          RemainAfterExit = true;
          PermissionsStartOnly = true;
        };
      };
  
      # 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"];
      };
  
      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"];
      };
  
      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"];
      };
  
    };
  