## Initialization ```mermaid sequenceDiagram actor user participant app as Application participant ds as DesktopService participant gtr as GitTrustFactory participant pa as CliArgumentsParser participant cr as DesktopConfigRepository participant ut as CliUtils participant su as ProvsWithSudo user ->> app: main activate app app ->> pa: parseCommands app ->> cr: getConfig(configFileName) app ->> ut: createProvInstance(cmd.target) app ->> su: ensureSudoWithoutPassword(cmd.target.remoteTarget()?.password) app ->> ds: provisionDesktopCommand(cmd, config) activate ds ds ->> gtr : get("github", "gitlab") gtr -->> ds: GitTrust deactivate ds deactivate app ``` ## Domain ```mermaid classDiagram namespace configuration { class TargetCliCommand { val target: String, val passwordInteractive: Boolean = false } class ConfigFileName { fileName: String } } namespace desktop { class DesktopCliCommand { } class DesktopConfig { val ssh: SshKeyPairSource? = null, val gpg: KeyPairSource? = null, val gitUserName: String? = null, val gitEmail: String? = null, } class DesktopType { val name: String } class DesktopOnlyModule { <> FIREFOX, VERIFY } } DesktopCliCommand "1" *-- "1" DesktopType: type DesktopCliCommand "1" *-- "1" TargetCliCommand: target DesktopCliCommand "1" *-- "1" ConfigFileName: configFile DesktopCliCommand "1" *-- "..n" DesktopOnlyModule: onlyModules ```