aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/nixos/modules/services/network-filesystems/kbfs.nix
diff options
context:
space:
mode:
authorMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
committerMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
commitc4625b175f8200f643fd6e11010932ea44c78433 (patch)
treebce3f89888c8ac3991fa5569a878a9eab6801ccc /infra/libkookie/nixpkgs/nixos/modules/services/network-filesystems/kbfs.nix
parent49f735974dd103039ddc4cb576bb76555164a9e7 (diff)
parentd661aa56a8843e991261510c1bb28fdc2f6975ae (diff)
Add 'infra/libkookie/' from commit 'd661aa56a8843e991261510c1bb28fdc2f6975ae'
git-subtree-dir: infra/libkookie git-subtree-mainline: 49f735974dd103039ddc4cb576bb76555164a9e7 git-subtree-split: d661aa56a8843e991261510c1bb28fdc2f6975ae
Diffstat (limited to 'infra/libkookie/nixpkgs/nixos/modules/services/network-filesystems/kbfs.nix')
-rw-r--r--infra/libkookie/nixpkgs/nixos/modules/services/network-filesystems/kbfs.nix118
1 files changed, 118 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/nixos/modules/services/network-filesystems/kbfs.nix b/infra/libkookie/nixpkgs/nixos/modules/services/network-filesystems/kbfs.nix
new file mode 100644
index 000000000000..a43ac656f667
--- /dev/null
+++ b/infra/libkookie/nixpkgs/nixos/modules/services/network-filesystems/kbfs.nix
@@ -0,0 +1,118 @@
+{ config, lib, pkgs, ... }:
+with lib;
+let
+ inherit (config.security) wrapperDir;
+ cfg = config.services.kbfs;
+
+in {
+
+ ###### interface
+
+ options = {
+
+ services.kbfs = {
+
+ enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Whether to mount the Keybase filesystem.";
+ };
+
+ enableRedirector = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable the Keybase root redirector service, allowing
+ any user to access KBFS files via <literal>/keybase</literal>,
+ which will show different contents depending on the requester.
+ '';
+ };
+
+ 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 (mkMerge [
+ {
+ # Upstream: https://github.com/keybase/client/blob/master/packaging/linux/systemd/kbfs.service
+ systemd.user.services.kbfs = {
+ description = "Keybase File System";
+
+ # Note that the "Requires" directive will cause a unit to be restarted whenever its dependency is restarted.
+ # Do not issue a hard dependency on keybase, because kbfs can reconnect to a restarted service.
+ # Do not issue a hard dependency on keybase-redirector, because it's ok if it fails (e.g., if it is disabled).
+ wants = [ "keybase.service" ] ++ optional cfg.enableRedirector "keybase-redirector.service";
+ path = [ "/run/wrappers" ];
+ unitConfig.ConditionUser = "!@system";
+
+ serviceConfig = {
+ Type = "notify";
+ # Keybase notifies from a forked process
+ EnvironmentFile = [
+ "-%E/keybase/keybase.autogen.env"
+ "-%E/keybase/keybase.env"
+ ];
+ ExecStartPre = [
+ "${pkgs.coreutils}/bin/mkdir -p \"${cfg.mountPoint}\""
+ "-${wrapperDir}/fusermount -uz \"${cfg.mountPoint}\""
+ ];
+ ExecStart = "${pkgs.kbfs}/bin/kbfsfuse ${toString cfg.extraFlags} \"${cfg.mountPoint}\"";
+ ExecStop = "${wrapperDir}/fusermount -uz \"${cfg.mountPoint}\"";
+ Restart = "on-failure";
+ PrivateTmp = true;
+ };
+ wantedBy = [ "default.target" ];
+ };
+
+ services.keybase.enable = true;
+
+ environment.systemPackages = [ pkgs.kbfs ];
+ }
+
+ (mkIf cfg.enableRedirector {
+ security.wrappers."keybase-redirector".source = "${pkgs.kbfs}/bin/redirector";
+
+ systemd.tmpfiles.rules = [ "d /keybase 0755 root root 0" ];
+
+ # Upstream: https://github.com/keybase/client/blob/master/packaging/linux/systemd/keybase-redirector.service
+ systemd.user.services.keybase-redirector = {
+ description = "Keybase Root Redirector for KBFS";
+ wants = [ "keybase.service" ];
+ unitConfig.ConditionUser = "!@system";
+
+ serviceConfig = {
+ EnvironmentFile = [
+ "-%E/keybase/keybase.autogen.env"
+ "-%E/keybase/keybase.env"
+ ];
+ # Note: The /keybase mount point is not currently configurable upstream.
+ ExecStart = "${wrapperDir}/keybase-redirector /keybase";
+ Restart = "on-failure";
+ PrivateTmp = true;
+ };
+
+ wantedBy = [ "default.target" ];
+ };
+ })
+ ]);
+}