let MountConfig = { mpPath : Text, mpLabel : Optional Text } let BitwardenConfig = { bwKey : Text, bwTries : Natural } let SecretMap = { sKey : Text, sVal : Text } let SecretConfig = { secretAttributes : List SecretMap } let PromptConfig = { promptTries : Natural } let PasswordConfig = < PwdBW : BitwardenConfig | PwdLS : SecretConfig | PwdPr : PromptConfig > let SSHFSData = { sshfsRemote : Text, sshfsPassword : Optional PasswordConfig } let CIFSOpts = { cifsoptsUsername : Optional Text , cifsoptsWorkgroup : Optional Text , cifsoptsUID : Optional Natural , cifsoptsGID : Optional Natural , cifsoptsIocharset : Optional Text } let CIFSData = { cifsRemote : Text , cifsSudo : Bool , cifsPassword : Optional PasswordConfig , cifsOpts : Optional CIFSOpts } let VeracryptData = { vcVolume : Text, vcPassword : Optional PasswordConfig } let DataConfig = < VeracryptConfig : VeracryptData | SSHFSConfig : SSHFSData | CIFSConfig : CIFSData > let DeviceConfig = { deviceMount : MountConfig, deviceData : DataConfig } let TreeConfig = { tcParent : DeviceConfig, tcChildren : List Text } let TreeMap = { tKey : Text, tVal : TreeConfig } let StaticConfig = { scTmpPath : Optional Text , scVerbose : Optional Bool , scDevices : List TreeMap } in { StaticConfig , TreeConfig , DeviceConfig , DataConfig , VeracryptData , CIFSData , CIFSOpts , SSHFSData , PasswordConfig , SecretConfig , MountConfig , BitwardenConfig , PromptConfig , TreeMap , SecretMap }