master ohmu/fastfetch-openbsd / src / detection / wmtheme / wmtheme_apple.c
ohmu  ·  2026-10-15
 1#include "fastfetch.h"
 2#include "wmtheme.h"
 3#include "common/apple/cf_helpers.h"
 4
 5bool ffDetectWmTheme(FFstrbuf* themeOrError) {
 6    // Read via cfprefsd instead of the raw plist file to keep cache consistency with the system
 7    FF_CFTYPE_AUTO_RELEASE CFTypeRef wmThemeColor = CFPreferencesCopyAppValue(CFSTR("AppleAccentColor"), kCFPreferencesAnyApplication);
 8    int32_t accentColor = -2; // -2: not set; -1 is Graphite
 9    if (wmThemeColor && ffCfNumGetInt(wmThemeColor, &accentColor) == nullptr) {
10        switch (accentColor) {
11            case -1:
12                ffStrbufAppendS(themeOrError, "Graphite");
13                break;
14            case 0:
15                ffStrbufAppendS(themeOrError, "Red");
16                break;
17            case 1:
18                ffStrbufAppendS(themeOrError, "Orange");
19                break;
20            case 2:
21                ffStrbufAppendS(themeOrError, "Yellow");
22                break;
23            case 3:
24                ffStrbufAppendS(themeOrError, "Green");
25                break;
26            case 4:
27                ffStrbufAppendS(themeOrError, "Blue");
28                break;
29            case 5:
30                ffStrbufAppendS(themeOrError, "Purple");
31                break;
32            case 6:
33                ffStrbufAppendS(themeOrError, "Pink");
34                break;
35            default:
36                ffStrbufAppendS(themeOrError, "Unknown");
37                break;
38        }
39    } else {
40        ffStrbufAppendS(themeOrError, "Multicolor");
41    }
42
43    FF_STRBUF_AUTO_DESTROY style = ffStrbufCreate();
44    FF_CFTYPE_AUTO_RELEASE CFTypeRef wmTheme = CFPreferencesCopyAppValue(CFSTR("AppleInterfaceStyle"), kCFPreferencesAnyApplication);
45    if (wmTheme && ffCfStrGetString(wmTheme, &style) == nullptr) {
46        ffStrbufAppendF(themeOrError, " (%s)", style.chars);
47    } else {
48        ffStrbufAppendS(themeOrError, " (Light)");
49    }
50
51    return true;
52}