import Foundation import MusubiCore import Observation import ServiceManagement import SystemConfiguration /// Persistent app settings (UserDefaults). @MainActor @Observable final class AppSettings { var role: Role { didSet { UserDefaults.standard.set(role.rawValue, forKey: "role") } } /// BSD name of the technical network interface, e.g. "en7". var interfaceName: String { didSet { UserDefaults.standard.set(interfaceName, forKey: "interfaceName") } } /// Name other Macs see (the computer name, e.g. "Mac mini von Samuel"). let machineName: String = (SCDynamicStoreCopyComputerName(nil, nil) as String?) ?? Host.current().localizedName ?? "Musubi" init() { role = Role(rawValue: UserDefaults.standard.string(forKey: "role") ?? "") ?? .control interfaceName = UserDefaults.standard.string(forKey: "interfaceName") ?? "en0" } var launchAtLogin: Bool { get { SMAppService.mainApp.status == .enabled } set { do { if newValue { try SMAppService.mainApp.register() } else { try SMAppService.mainApp.unregister() } } catch { Log.ndi.error("Login item: \(error.localizedDescription, privacy: .public)") } } } }