ohmu
·
2026-10-15
1#include "fastfetch.h"
2
3#include "common/init.h"
4#include "logo/logo.h"
5#include "modules/modules.h"
6
7#define MODULE_OPTION(name) \
8 [[gnu::cleanup(ffDestroy##name##Options)]] FF##name##Options options; \
9 ffInit##name##Options(&options);
10
11// A dirty replicate of neofetch; demonstration only.
12int main(void) {
13 ffInitInstance(); // Init everything
14
15 // Modify global config here if needed
16 instance.config.display.sizeMaxPrefix = 2; // MB
17 instance.config.display.sizeNdigits = 0;
18 instance.config.display.freqNdigits = 3;
19 instance.config.display.freqSpaceBeforeUnit = FF_SPACE_BEFORE_UNIT_NEVER;
20 instance.config.display.sizeSpaceBeforeUnit = FF_SPACE_BEFORE_UNIT_NEVER;
21
22 // Some preparation stuff
23 ffStart();
24
25 // Print logo
26 ffLogoPrintDetected(FF_LOGO_SIZE_NORMAL);
27
28 // Print all modules
29 {
30 MODULE_OPTION(Title)
31 ffPrintTitle(&options);
32 }
33 {
34 MODULE_OPTION(Separator)
35 ffPrintSeparator(&options);
36 }
37 {
38 MODULE_OPTION(OS)
39 ffPrintOS(&options);
40 }
41 {
42 MODULE_OPTION(Host)
43 ffPrintHost(&options);
44 }
45 {
46 MODULE_OPTION(Kernel)
47 ffStrbufSetStatic(&options.moduleArgs.outputFormat, "{release}");
48 ffPrintKernel(&options);
49 }
50 {
51 MODULE_OPTION(Uptime)
52 ffPrintUptime(&options);
53 }
54 {
55 MODULE_OPTION(Packages)
56 options.combined = true;
57 ffPrintPackages(&options);
58 }
59 {
60 MODULE_OPTION(Shell)
61 ffPrintShell(&options);
62 }
63 {
64 MODULE_OPTION(Display)
65 options.compactType = FF_DISPLAY_COMPACT_TYPE_ORIGINAL_BIT;
66 ffStrbufSetStatic(&options.moduleArgs.key, "Resolution");
67 ffPrintDisplay(&options);
68 }
69 {
70 MODULE_OPTION(DE)
71 ffStrbufSetStatic(&options.moduleArgs.key, "DE");
72 ffPrintDE(&options);
73 }
74 {
75 instance.config.general.detectVersion = false;
76 MODULE_OPTION(WM)
77 ffStrbufSetStatic(&options.moduleArgs.key, "WM");
78 options.detectPlugin = true;
79 ffPrintWM(&options);
80 instance.config.general.detectVersion = true;
81 }
82 {
83 MODULE_OPTION(WMTheme)
84 ffPrintWMTheme(&options);
85 }
86 {
87 MODULE_OPTION(Theme)
88 ffPrintTheme(&options);
89 }
90 {
91 MODULE_OPTION(Icons)
92 ffPrintIcons(&options);
93 }
94 {
95 MODULE_OPTION(Terminal)
96 ffPrintTerminal(&options);
97 }
98 {
99 MODULE_OPTION(TerminalFont)
100 ffStrbufSetStatic(&options.moduleArgs.outputFormat, "{/name}{-}{/}{name}{?size} {size}{?}");
101 ffPrintTerminalFont(&options);
102 }
103 {
104 MODULE_OPTION(CPU)
105 options.showPeCoreCount = false;
106 ffPrintCPU(&options);
107 }
108 {
109 MODULE_OPTION(GPU)
110 ffStrbufSetStatic(&options.moduleArgs.key, "GPU");
111 ffStrbufSetStatic(&options.moduleArgs.outputFormat, "{name}");
112 ffPrintGPU(&options);
113 }
114 {
115 MODULE_OPTION(Memory)
116 ffStrbufSetStatic(&options.moduleArgs.outputFormat, "{} / {}");
117 ffPrintMemory(&options);
118 }
119 {
120 MODULE_OPTION(Break)
121 ffPrintBreak(&options);
122 }
123 {
124 MODULE_OPTION(Colors)
125 ffPrintColors(&options);
126 }
127
128 ffLogoPrintRemaining();
129 ffFinish();
130 ffDestroyInstance();
131 return 0;
132}