ohmu
·
2026-10-15
1#pragma once
2
3#include "fastfetch.h"
4#include "modules/display/option.h"
5
6#define FF_DE_PRETTY_PLASMA "KDE Plasma"
7#define FF_DE_PRETTY_GNOME "GNOME"
8#define FF_DE_PRETTY_GNOME_CLASSIC "GNOME Classic"
9#define FF_DE_PRETTY_XFCE4 "Xfce4"
10#define FF_DE_PRETTY_CINNAMON "Cinnamon"
11#define FF_DE_PRETTY_MATE "Mate"
12#define FF_DE_PRETTY_LXDE "LXDE"
13#define FF_DE_PRETTY_LXQT "LXQt"
14#define FF_DE_PRETTY_BUDGIE "Budgie"
15#define FF_DE_PRETTY_CDE "CDE"
16#define FF_DE_PRETTY_UNITY "Unity"
17#define FF_DE_PRETTY_UKUI "UKUI"
18#define FF_DE_PRETTY_NEBIDE "NebiDE"
19#define FF_DE_PRETTY_ENLIGHTENMENT "Enlightenment"
20#define FF_DE_PRETTY_COSMIC "COSMIC"
21
22#define FF_WM_PRETTY_KWIN "KWin"
23#define FF_WM_PRETTY_MUTTER "Mutter"
24#define FF_WM_PRETTY_MUFFIN "Muffin"
25#define FF_WM_PRETTY_MARCO "Marco"
26#define FF_WM_PRETTY_XFWM4 "Xfwm4"
27#define FF_WM_PRETTY_OPENBOX "Openbox"
28#define FF_WM_PRETTY_I3 "i3"
29#define FF_WM_PRETTY_HYPRLAND "Hyprland"
30#define FF_WM_PRETTY_WAYFIRE "Wayfire"
31#define FF_WM_PRETTY_SWAY "Sway"
32#define FF_WM_PRETTY_BSPWM "bspwm"
33#define FF_WM_PRETTY_DWM "dwm"
34#define FF_WM_PRETTY_WESTON "Weston"
35#define FF_WM_PRETTY_XMONAD "XMonad"
36#define FF_WM_PRETTY_WSLG "WSLg"
37#define FF_WM_PRETTY_TINYWM "TinyWM"
38#define FF_WM_PRETTY_QTILE "Qtile"
39#define FF_WM_PRETTY_HERBSTLUFTWM "herbstluftwm"
40#define FF_WM_PRETTY_ICEWM "IceWM"
41#define FF_WM_PRETTY_SPECTRWM "spectrwm"
42#define FF_WM_PRETTY_DTWM "dtwm"
43#define FF_WM_PRETTY_FVWM "fvwm"
44#define FF_WM_PRETTY_CTWM "ctwm"
45#define FF_WM_PRETTY_COSMIC_COMP "cosmic-comp"
46#define FF_WM_PRETTY_RATPOISON "ratpoison"
47#define FF_WM_PRETTY_ENLIGHTENMENT "Enlightenment"
48
49#define FF_WM_PROTOCOL_TTY "TTY"
50#define FF_WM_PROTOCOL_X11 "X11"
51#define FF_WM_PROTOCOL_WAYLAND "Wayland"
52#define FF_WM_PROTOCOL_SURFACEFLINGER "SurfaceFlinger"
53
54typedef enum FFDisplayType: uint8_t {
55 FF_DISPLAY_TYPE_UNKNOWN,
56 FF_DISPLAY_TYPE_BUILTIN,
57 FF_DISPLAY_TYPE_EXTERNAL,
58} FFDisplayType;
59
60typedef enum FFDisplayHdrStatus: uint8_t {
61 FF_DISPLAY_HDR_STATUS_UNKNOWN,
62 FF_DISPLAY_HDR_STATUS_UNSUPPORTED,
63 FF_DISPLAY_HDR_STATUS_SUPPORTED,
64 FF_DISPLAY_HDR_STATUS_ENABLED,
65} FFDisplayHdrStatus;
66
67typedef enum FFDisplayVrrStatus: uint8_t {
68 FF_DISPLAY_DRR_STATUS_UNKNOWN,
69 FF_DISPLAY_DRR_STATUS_DISABLED,
70 FF_DISPLAY_DRR_STATUS_ENABLED,
71} FFDisplayVrrStatus;
72
73typedef struct FFDisplayResult {
74 uint32_t width; // in px
75 uint32_t height; // in px
76 double refreshRate; // in Hz
77 uint32_t dpi; // Base 96
78 uint32_t preferredWidth; // in px
79 uint32_t preferredHeight; // in px
80 double preferredRefreshRate; // in Hz
81 FFstrbuf name;
82 FFDisplayType type;
83 uint32_t rotation;
84 uint64_t id; // platform dependent
85 uint32_t physicalWidth; // in mm
86 uint32_t physicalHeight; // in mm
87 bool primary;
88 const char* platformApi;
89 uint8_t bitDepth;
90 FFDisplayHdrStatus hdrStatus;
91 uint16_t manufactureYear;
92 uint16_t manufactureWeek;
93 FFstrbuf serial;
94 FFDisplayVrrStatus drrStatus;
95} FFDisplayResult;
96
97typedef struct FFDisplayServerResult {
98 FFstrbuf wmProcessName;
99 FFstrbuf wmPrettyName;
100 FFstrbuf wmProtocolName;
101 FFstrbuf deProcessName;
102 FFstrbuf dePrettyName;
103 FFlist displays; // List of FFDisplayResult
104} FFDisplayServerResult;
105
106const FFDisplayServerResult* ffConnectDisplayServer();
107
108FFDisplayResult* ffdsAppendDisplay(
109 FFDisplayServerResult* result,
110 uint32_t width,
111 uint32_t height,
112 double refreshRate,
113 uint32_t dpi,
114 uint32_t preferredWidth,
115 uint32_t preferredHeight,
116 double preferredRefreshRate,
117 uint32_t rotation,
118 FFstrbuf* name,
119 FFDisplayType type,
120 bool primary,
121 uint64_t id,
122 uint32_t physicalWidth,
123 uint32_t physicalHeight,
124 const char* platformApi);