diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index d25a61804eb..5a825a1d4e8 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -370,6 +370,7 @@ ./services/network-filesystems/cachefilesd.nix ./services/network-filesystems/drbd.nix ./services/network-filesystems/glusterfs.nix + ./services/network-filesystems/kbfs.nix ./services/network-filesystems/ipfs.nix ./services/network-filesystems/netatalk.nix ./services/network-filesystems/nfsd.nix @@ -431,6 +432,7 @@ ./services/networking/iodine.nix ./services/networking/ircd-hybrid/default.nix ./services/networking/keepalived/default.nix + ./services/networking/keybase.nix ./services/networking/kippo.nix ./services/networking/kresd.nix ./services/networking/lambdabot.nix diff --git a/nixos/modules/services/network-filesystems/kbfs.nix b/nixos/modules/services/network-filesystems/kbfs.nix new file mode 100644 index 00000000000..cf1d7617cca --- /dev/null +++ b/nixos/modules/services/network-filesystems/kbfs.nix @@ -0,0 +1,62 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.services.kbfs; + +in { + + ###### interface + + options = { + + services.kbfs = { + + enable = mkOption { + type = types.bool; + default = false; + description = "Whether to mount the Keybase filesystem."; + }; + + mountPoint = mkOption { + type = types.str; + default = "%h/keybase"; + example = "/keybase"; + description = "Mountpoint for the Keybase filesystem."; + }; + + extraFlags = mkOption { + type = types.listOf types.str; + default = []; + example = [ + "-label kbfs" + "-mount-type normal" + ]; + description = '' + Additional flags to pass to the Keybase filesystem on launch. + ''; + }; + + }; + }; + + ###### implementation + + config = mkIf cfg.enable { + + systemd.user.services.kbfs = { + description = "Keybase File System"; + requires = [ "keybase.service" ]; + after = [ "keybase.service" ]; + path = [ "/run/wrappers" ]; + serviceConfig = { + ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p ${cfg.mountPoint}"; + ExecStart = "${pkgs.kbfs}/bin/kbfsfuse ${toString cfg.extraFlags} ${cfg.mountPoint}"; + ExecStopPost = "/run/wrappers/bin/fusermount -u ${cfg.mountPoint}"; + Restart = "on-failure"; + PrivateTmp = true; + }; + }; + + services.keybase.enable = true; + }; +} diff --git a/nixos/modules/services/networking/keybase.nix b/nixos/modules/services/networking/keybase.nix new file mode 100644 index 00000000000..ca5c279ac6f --- /dev/null +++ b/nixos/modules/services/networking/keybase.nix @@ -0,0 +1,40 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.services.keybase; + +in { + + ###### interface + + options = { + + services.keybase = { + + enable = mkOption { + type = types.bool; + default = false; + description = "Whether to start the Keybase service."; + }; + + }; + }; + + ###### implementation + + config = mkIf cfg.enable { + + systemd.user.services.keybase = { + description = "Keybase service"; + serviceConfig = { + ExecStart = '' + ${pkgs.keybase}/bin/keybase service + ''; + Restart = "on-failure"; + PrivateTmp = true; + }; + }; + + environment.systemPackages = [ pkgs.keybase ]; + }; +}