diff options
author | Maximilian Güntner <code@klandest.in> | 2016-10-30 20:39:53 +0100 |
---|---|---|
committer | Robert Helgesson <robert@rycee.net> | 2016-11-07 22:01:38 +0100 |
commit | 7fa157c5587d40ca757658e2c8017055c3c0419e (patch) | |
tree | 126d5cfe5efeb8b9a0668c4504df3ea3d6bdd03c /nixos/modules/services | |
parent | dcb2179a1f8f3314c46ab2a21491d3d7153c4360 (diff) | |
download | nixlib-7fa157c5587d40ca757658e2c8017055c3c0419e.tar nixlib-7fa157c5587d40ca757658e2c8017055c3c0419e.tar.gz nixlib-7fa157c5587d40ca757658e2c8017055c3c0419e.tar.bz2 nixlib-7fa157c5587d40ca757658e2c8017055c3c0419e.tar.lz nixlib-7fa157c5587d40ca757658e2c8017055c3c0419e.tar.xz nixlib-7fa157c5587d40ca757658e2c8017055c3c0419e.tar.zst nixlib-7fa157c5587d40ca757658e2c8017055c3c0419e.zip |
services: Add Interplanetary File System service
Signed-off-by: Maximilian Güntner <code@klandest.in>
Diffstat (limited to 'nixos/modules/services')
-rw-r--r-- | nixos/modules/services/network-filesystems/ipfs.nix | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/nixos/modules/services/network-filesystems/ipfs.nix b/nixos/modules/services/network-filesystems/ipfs.nix new file mode 100644 index 000000000000..c26a70737033 --- /dev/null +++ b/nixos/modules/services/network-filesystems/ipfs.nix @@ -0,0 +1,111 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + inherit (pkgs) ipfs; + + cfg = config.services.ipfs; + + ipfsFlags = ''${if cfg.autoMigrate then "--migrate" else ""} ${if cfg.enableGC then "--enable-gc" else ""} ${toString cfg.extraFlags}''; + +in + +{ + + ###### 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; + default = "/var/lib/ipfs"; + description = "The data dir for IPFS"; + }; + + autoMigrate = mkOption { + type = types.bool; + default = false; + description = '' + Whether IPFS should try to migrate the file system automatically. + ''; + }; + + enableGC = mkOption { + type = types.bool; + default = false; + description = '' + Whether to enable automatic garbage collection. + ''; + }; + + extraFlags = mkOption { + type = types.listOf types.str; + description = "Extra flags passed to the IPFS daemon"; + default = []; + }; + }; + }; + + ###### implementation + + config = mkIf cfg.enable { + environment.systemPackages = [ pkgs.ipfs ]; + + 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") { + ipfs = { + gid = config.ids.gids.ipfs; + }; + }; + + systemd.services.ipfs = { + description = "IPFS Daemon"; + + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" "local-fs.target" ]; + path = [ pkgs.ipfs pkgs.su pkgs.bash ]; + + preStart = + '' + install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.dataDir} + if [[ ! -d ${cfg.dataDir}/.ipfs ]]; then + cd ${cfg.dataDir} + ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c "${ipfs}/bin/ipfs init" + fi + ''; + + serviceConfig = { + ExecStart = "${ipfs}/bin/ipfs daemon ${ipfsFlags}"; + User = cfg.user; + Group = cfg.group; + PermissionsStartOnly = true; + }; + }; + }; +} |