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}