forked from nikitabobko/AeroSpace
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConfig.swift
More file actions
68 lines (62 loc) · 2.59 KB
/
Config.swift
File metadata and controls
68 lines (62 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import AppKit
import Common
import HotKey
import OrderedCollections
func getDefaultConfigUrlFromProject() -> URL {
var url = URL(filePath: #filePath)
check(FileManager.default.fileExists(atPath: url.path))
while !FileManager.default.fileExists(atPath: url.appending(component: ".git").path) {
url.deleteLastPathComponent()
}
let projectRoot: URL = url
return projectRoot.appending(component: "docs/config-examples/default-config.toml")
}
var defaultConfigUrl: URL {
if isUnitTest {
return getDefaultConfigUrlFromProject()
} else {
return Bundle.main.url(forResource: "default-config", withExtension: "toml")
// Useful for debug builds that are not app bundles
?? getDefaultConfigUrlFromProject()
}
}
@MainActor let defaultConfig: Config = {
let parsedConfig = parseConfig(Result { try String(contentsOf: defaultConfigUrl, encoding: .utf8) }.getOrDie())
if !parsedConfig.errors.isEmpty {
die("Can't parse default config: \(parsedConfig.errors)")
}
return parsedConfig.config
}()
@MainActor var config: Config = defaultConfig // todo move to Ctx?
@MainActor var configUrl: URL = defaultConfigUrl
struct Config: ConvenienceCopyable {
var configVersion: Int = 1
var afterLoginCommand: [any Command] = []
var afterStartupCommand: [any Command] = []
var _indentForNestedContainersWithTheSameOrientation: Void = ()
var enableNormalizationFlattenContainers: Bool = true
var _nonEmptyWorkspacesRootContainersLayoutOnStartup: Void = ()
var defaultRootContainerLayout: Layout = .tiles
var defaultRootContainerOrientation: DefaultContainerOrientation = .auto
var startAtLogin: Bool = false
var autoReloadConfig: Bool = false
var automaticallyUnhideMacosHiddenApps: Bool = false
var configEditorAppPath: String? = nil
var accordionPadding: Int = 30
var enableNormalizationOppositeOrientationForNestedContainers: Bool = true
var persistentWorkspaces: OrderedSet<String> = []
var execOnWorkspaceChange: [String] = [] // todo deprecate
var keyMapping = KeyMapping()
var execConfig: ExecConfig = ExecConfig()
var onFocusChanged: [any Command] = []
// var onFocusedWorkspaceChanged: [any Command] = []
var onFocusedMonitorChanged: [any Command] = []
var gaps: Gaps = .zero
var workspaceToMonitorForceAssignment: [String: [MonitorDescription]] = [:]
var modes: [String: Mode] = [:]
var onWindowDetected: [WindowDetectedCallback] = []
var onModeChanged: [any Command] = []
}
enum DefaultContainerOrientation: String {
case horizontal, vertical, auto
}