diff options
| author | Ophestra Umiker <cat@ophivana.moe> | 2024-11-19 17:08:22 +0900 |
|---|---|---|
| committer | Ophestra Umiker <cat@ophivana.moe> | 2024-11-19 17:08:22 +0900 |
| commit | f8256137aed3aa3947f29e5c50eec2ec836a8070 (patch) | |
| tree | c5419702278712643016a3b5fbbc567b9f230674 /options.nix | |
| parent | 54b47b0315e047a369bdcf50475346ec15c13200 (diff) | |
nix: separate module options from implementation
Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'options.nix')
| -rw-r--r-- | options.nix | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/options.nix b/options.nix new file mode 100644 index 00000000..93ea3b57 --- /dev/null +++ b/options.nix @@ -0,0 +1,227 @@ +{ lib, pkgs, ... }: + +let + inherit (lib) types mkOption mkEnableOption; +in + +{ + options = { + environment.fortify = { + enable = mkEnableOption "fortify"; + + package = mkOption { + type = types.package; + default = pkgs.callPackage ./package.nix { }; + description = "Package providing fortify."; + }; + + users = mkOption { + type = + let + inherit (types) attrsOf ints; + in + attrsOf (ints.between 0 99); + description = '' + Users allowed to spawn fortify apps, as well as their fortify ID value. + ''; + }; + + apps = mkOption { + type = + let + inherit (types) + str + enum + bool + package + anything + submodule + listOf + attrsOf + nullOr + functionTo + ; + in + listOf (submodule { + options = { + name = mkOption { + type = str; + description = '' + App name, typically command. + ''; + }; + + id = mkOption { + type = nullOr str; + default = null; + description = '' + Freedesktop application ID. + ''; + }; + + packages = mkOption { + type = listOf package; + default = [ ]; + description = '' + List of extra packages to install via home-manager. + ''; + }; + + extraConfig = mkOption { + type = anything; + default = { }; + description = "Extra home-manager configuration."; + }; + + script = mkOption { + type = nullOr str; + default = null; + description = '' + Application launch script. + ''; + }; + + command = mkOption { + type = nullOr str; + default = null; + description = '' + Command to run as the target user. + Setting this to null will default command to wrapper name. + Has no effect when script is set. + ''; + }; + + groups = mkOption { + type = listOf str; + default = [ ]; + description = '' + List of groups to inherit from the privileged user. + ''; + }; + + dbus = { + session = mkOption { + type = nullOr (functionTo anything); + default = null; + description = '' + D-Bus session bus custom configuration. + Setting this to null will enable built-in defaults. + ''; + }; + + system = mkOption { + type = nullOr anything; + default = null; + description = '' + D-Bus system bus custom configuration. + Setting this to null will disable the system bus proxy. + ''; + }; + }; + + env = mkOption { + type = nullOr (attrsOf str); + default = null; + description = '' + Environment variables to set for the initial process in the sandbox. + ''; + }; + + nix = mkEnableOption '' + Whether to allow nix daemon connections from within sandbox. + ''; + + userns = mkEnableOption '' + Whether to allow userns within sandbox. + ''; + + mapRealUid = mkEnableOption '' + Whether to map to fortify's real UID within the sandbox. + ''; + + net = + mkEnableOption '' + Whether to allow network access within sandbox. + '' + // { + default = true; + }; + + gpu = mkOption { + type = nullOr bool; + default = null; + description = '' + Target process GPU and driver access. + Setting this to null will enable GPU whenever X or Wayland is enabled. + ''; + }; + + dev = mkEnableOption '' + Whether to allow access to all devices within sandbox. + ''; + + extraPaths = mkOption { + type = listOf anything; + default = [ ]; + description = '' + Extra paths to make available inside the sandbox. + ''; + }; + + capability = { + wayland = mkOption { + type = bool; + default = true; + description = '' + Whether to share the Wayland socket. + ''; + }; + + x11 = mkOption { + type = bool; + default = false; + description = '' + Whether to share the X11 socket and allow connection. + ''; + }; + + dbus = mkOption { + type = bool; + default = true; + description = '' + Whether to proxy D-Bus. + ''; + }; + + pulse = mkOption { + type = bool; + default = true; + description = '' + Whether to share the PulseAudio socket and cookie. + ''; + }; + }; + + share = mkOption { + type = nullOr package; + default = null; + description = '' + Package containing share files. + Setting this to null will default package name to wrapper name. + ''; + }; + }; + }); + default = [ ]; + description = "Applications managed by fortify."; + }; + + stateDir = mkOption { + type = types.str; + description = '' + The path to persistent storage where per-user state should be stored. + ''; + }; + }; + }; +} |
