# mortennn/dozer architecture

> Architecture diagram of the GitHub repository mortennn/dozer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mortennn/dozer
- Repository: https://github.com/mortennn/dozer

## Overview

Dozer is a macOS menu-bar utility for hiding and revealing groups of status icons. Its main workflow is menu-bar clicks or a configured shortcut → icon visibility changes; right-click opens preferences for behavior such as optional remove-icon toggling and delayed hiding. The graph also includes launch-time behavior, Dock visibility, login and update settings. The README documents these capabilities; some subsystem wiring is inferred only where the sampled source does not expose its implementation.

Main entry points: [`Dozer/DozerIcons.swift`](https://github.com/mortennn/dozer/blob/master/Dozer/DozerIcons.swift) (Icon manager), [`Dozer/ViewControllers/GeneralVC.swift`](https://github.com/mortennn/dozer/blob/master/Dozer/ViewControllers/GeneralVC.swift) (General settings), [`Dozer/AppDelegate.swift`](https://github.com/mortennn/dozer/blob/master/Dozer/AppDelegate.swift) (App delegate), [`Dozer/StatusIconClasses/NormalStatusIcon.swift`](https://github.com/mortennn/dozer/blob/master/Dozer/StatusIconClasses/NormalStatusIcon.swift) (Normal icon)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["App startup"]
  node_main["App entry<br/>[main.swift]"]
  node_delegate["App delegate<br/>[AppDelegate.swift]"]
end

subgraph group_icons["Menu-bar icons"]
  node_manager["Icon manager<br/>[DozerIcons.swift]"]
  node_normal["Normal icon"]
  node_remove["Remove icon"]
  node_helper["Status icon base"]
end

subgraph group_preferences["Preferences"]
  node_general["General settings<br/>[GeneralVC.swift]"]
  node_about["Dozer settings<br/>[DozerVC.swift]"]
  node_prefs["Preferences window<br/>[AppDelegate.swift]"]
end

subgraph group_integrations["System integrations"]
  node_shortcut["Shortcut service"]
  node_defaults[("User defaults")]
  node_login["Login service"]
  node_updates["Sparkle updater"]
  node_workspace["App workspace"]
  node_windowlist["Window list"]
end

node_user(("User"))
node_macos["macOS"]

node_main -->|"sets delegate"| node_delegate
node_delegate -->|"initializes"| node_manager
node_delegate -->|"hides at launch"| node_manager
node_delegate -->|"binds shortcut"| node_shortcut
node_shortcut -->|"toggles icons"| node_manager
node_manager -->|"creates and controls"| node_normal
node_manager -->|"creates and controls"| node_remove
node_normal -->|"dispatches click"| node_manager
node_remove -->|"dispatches click"| node_manager
node_normal -->|"opens settings"| node_prefs
node_remove -->|"opens settings"| node_prefs
node_manager -->|"shows or hides"| node_helper
node_user -->|"clicks icon"| node_normal
node_user -->|"option-clicks"| node_remove
node_user -->|"changes settings"| node_general
node_delegate -->|"creates window"| node_prefs
node_prefs -->|"presents pane"| node_general
node_prefs -->|"presents pane"| node_about
node_general -->|"updates behavior"| node_manager
node_general -->|"reads and writes"| node_defaults
node_manager -->|"reads and writes"| node_defaults
node_general -.->|"sets login launch"| node_login
node_general -.->|"sets update checks"| node_updates
node_about -.->|"checks for updates"| node_updates
node_manager -->|"checks frontmost app"| node_workspace
node_manager -->|"detects icon activity"| node_windowlist
node_manager -->|"changes Dock visibility"| node_macos
node_macos -->|"reports icon events"| node_manager

click node_main "https://github.com/mortennn/dozer/blob/master/Dozer/Other/main.swift"
click node_delegate "https://github.com/mortennn/dozer/blob/master/Dozer/AppDelegate.swift"
click node_manager "https://github.com/mortennn/dozer/blob/master/Dozer/DozerIcons.swift"
click node_normal "https://github.com/mortennn/dozer/blob/master/Dozer/StatusIconClasses/NormalStatusIcon.swift"
click node_remove "https://github.com/mortennn/dozer/blob/master/Dozer/StatusIconClasses/RemoveStatusIcon.swift"
click node_helper "https://github.com/mortennn/dozer/blob/master/Dozer/StatusIconClasses/HelperStatusIcon.swift"
click node_general "https://github.com/mortennn/dozer/blob/master/Dozer/ViewControllers/GeneralVC.swift"
click node_about "https://github.com/mortennn/dozer/blob/master/Dozer/ViewControllers/DozerVC.swift"
click node_prefs "https://github.com/mortennn/dozer/blob/master/Dozer/AppDelegate.swift"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_delegate,node_user toneBlue
class node_manager,node_normal,node_remove,node_helper toneAmber
class node_general,node_about,node_prefs toneMint
class node_shortcut,node_defaults,node_login,node_updates,node_workspace,node_windowlist toneRose
class node_macos toneIndigo
```

## Components

### App startup

- [App entry](https://github.com/mortennn/dozer/blob/master/Dozer/Other/main.swift): `Dozer/Other/main.swift`
- [App delegate](https://github.com/mortennn/dozer/blob/master/Dozer/AppDelegate.swift): `Dozer/AppDelegate.swift`

### Menu-bar icons

- [Icon manager](https://github.com/mortennn/dozer/blob/master/Dozer/DozerIcons.swift): `Dozer/DozerIcons.swift`
- [Normal icon](https://github.com/mortennn/dozer/blob/master/Dozer/StatusIconClasses/NormalStatusIcon.swift): `Dozer/StatusIconClasses/NormalStatusIcon.swift`
- [Remove icon](https://github.com/mortennn/dozer/blob/master/Dozer/StatusIconClasses/RemoveStatusIcon.swift): `Dozer/StatusIconClasses/RemoveStatusIcon.swift`
- [Status icon base](https://github.com/mortennn/dozer/blob/master/Dozer/StatusIconClasses/HelperStatusIcon.swift): `Dozer/StatusIconClasses/HelperStatusIcon.swift`

### Preferences

- [General settings](https://github.com/mortennn/dozer/blob/master/Dozer/ViewControllers/GeneralVC.swift): `Dozer/ViewControllers/GeneralVC.swift`
- [Dozer settings](https://github.com/mortennn/dozer/blob/master/Dozer/ViewControllers/DozerVC.swift): `Dozer/ViewControllers/DozerVC.swift`
- [Preferences window](https://github.com/mortennn/dozer/blob/master/Dozer/AppDelegate.swift): `Dozer/AppDelegate.swift`

### System integrations

- **Shortcut service**
- **User defaults**
- **Login service**
- **Sparkle updater**
- **App workspace**
- **Window list**

### Other components

- **User**
- **macOS**

## Connections

- App entry → App delegate: sets delegate
- App delegate → Icon manager: initializes
- App delegate → Icon manager: hides at launch
- App delegate → Shortcut service: binds shortcut
- Shortcut service → Icon manager: toggles icons
- Icon manager → Normal icon: creates and controls
- Icon manager → Remove icon: creates and controls
- Normal icon → Icon manager: dispatches click
- Remove icon → Icon manager: dispatches click
- Normal icon → Preferences window: opens settings
- Remove icon → Preferences window: opens settings
- Icon manager → Status icon base: shows or hides
- User → Normal icon: clicks icon
- User → Remove icon: option-clicks
- User → General settings: changes settings
- App delegate → Preferences window: creates window
- Preferences window → General settings: presents pane
- Preferences window → Dozer settings: presents pane
- General settings → Icon manager: updates behavior
- General settings → User defaults: reads and writes
- Icon manager → User defaults: reads and writes
- General settings → Login service: sets login launch
- General settings → Sparkle updater: sets update checks
- Dozer settings → Sparkle updater: checks for updates
- Icon manager → App workspace: checks frontmost app
- Icon manager → Window list: detects icon activity
- Icon manager → macOS: changes Dock visibility
- macOS → Icon manager: reports icon events
