master ohmu/fastfetch-openbsd / src / detection / packages / packages_apple.c
ohmu  ·  2026-10-15
 1#include "packages.h"
 2#include "common/io.h"
 3#include "common/parsing.h"
 4#include "common/processing.h"
 5#include "common/strutil.h"
 6
 7static void countBrewPackages(FFstrbuf* baseDir, FFPackagesResult* result) {
 8    uint32_t baseDirLength = baseDir->length;
 9
10    ffStrbufAppendS(baseDir, "/Caskroom");
11    result->brewCask += ffPackagesGetNumElements(baseDir->chars, true);
12    ffStrbufSubstrBefore(baseDir, baseDirLength);
13
14    ffStrbufAppendS(baseDir, "/Cellar");
15    result->brew += ffPackagesGetNumElements(baseDir->chars, true);
16    ffStrbufSubstrBefore(baseDir, baseDirLength);
17}
18
19static uint32_t getMacPortsPackages(FFstrbuf* baseDir) {
20    ffStrbufAppendS(baseDir, "/var/macports/software");
21    return ffPackagesGetNumElements(baseDir->chars, true);
22}
23
24void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) {
25    FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreate();
26    if (FF_PACKAGES_IS_ENABLED(options, BREW)) {
27        const char* prefix = getenv("HOMEBREW_PREFIX");
28        if (ffStrSet(prefix)) {
29            ffStrbufSetS(&baseDir, prefix);
30        } else {
31#ifdef __aarch64__
32            ffStrbufSetS(&baseDir, FASTFETCH_TARGET_DIR_ROOT "/opt/homebrew");
33#else
34            ffStrbufSetS(&baseDir, FASTFETCH_TARGET_DIR_USR "/local");
35#endif
36        }
37        countBrewPackages(&baseDir, result);
38    }
39    if (FF_PACKAGES_IS_ENABLED(options, MACPORTS)) {
40        const char* prefix = getenv("MACPORTS_PREFIX");
41        if (ffStrSet(prefix)) {
42            ffStrbufSetS(&baseDir, prefix);
43        } else {
44            ffStrbufSetS(&baseDir, FASTFETCH_TARGET_DIR_ROOT "/opt/local");
45        }
46
47        result->macports = getMacPortsPackages(&baseDir);
48    }
49    if (FF_PACKAGES_IS_ENABLED(options, PKGSRC)) {
50        const char* prefix = getenv("PKG_DBDIR");
51        if (ffStrSet(prefix)) {
52            result->pkgsrc = ffPackagesGetNumElements(prefix, true);
53        } else {
54            result->pkgsrc = ffPackagesGetNumElements(FASTFETCH_TARGET_DIR_ROOT "/usr/pkg/pkgdb", true);
55        }
56    }
57    if (FF_PACKAGES_IS_ENABLED(options, NIX)) {
58        ffStrbufSetS(&baseDir, FASTFETCH_TARGET_DIR_ROOT);
59        result->nixDefault += ffPackagesGetNix(&baseDir, "/nix/var/nix/profiles/default");
60        result->nixSystem += ffPackagesGetNix(&baseDir, "/run/current-system");
61        ffStrbufSet(&baseDir, &instance.state.platform.homeDir);
62        result->nixUser = ffPackagesGetNix(&baseDir, "/.nix-profile");
63    }
64}