diff options
| author | sumuel <samuel@yakubos.org> | 2026-08-17 20:44:55 +0000 |
|---|---|---|
| committer | sumuel <samuel@yakubos.org> | 2026-08-17 20:44:55 +0000 |
| commit | 76424950e373d3b04ac3dd13019151bfba3e8423 (patch) | |
| tree | 4c3cfdbda039e592b9186be3e28f8d7cfd439e8a /src/detection/packages/packages_apple.c | |
Add the files
Diffstat (limited to 'src/detection/packages/packages_apple.c')
| -rw-r--r-- | src/detection/packages/packages_apple.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/detection/packages/packages_apple.c b/src/detection/packages/packages_apple.c new file mode 100644 index 0000000..43de97d --- /dev/null +++ b/src/detection/packages/packages_apple.c @@ -0,0 +1,56 @@ +#include "packages.h" +#include "common/io.h" +#include "common/parsing.h" +#include "common/processing.h" +#include "common/strutil.h" + +static void countBrewPackages(FFstrbuf* baseDir, FFPackagesResult* result) { + uint32_t baseDirLength = baseDir->length; + + ffStrbufAppendS(baseDir, "/Caskroom"); + result->brewCask += ffPackagesGetNumElements(baseDir->chars, true); + ffStrbufSubstrBefore(baseDir, baseDirLength); + + ffStrbufAppendS(baseDir, "/Cellar"); + result->brew += ffPackagesGetNumElements(baseDir->chars, true); + ffStrbufSubstrBefore(baseDir, baseDirLength); +} + +static uint32_t getMacPortsPackages(FFstrbuf* baseDir) { + ffStrbufAppendS(baseDir, "/var/macports/software"); + return ffPackagesGetNumElements(baseDir->chars, true); +} + +void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) { + FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreate(); + if (FF_PACKAGES_IS_ENABLED(options, BREW)) { + const char* prefix = getenv("HOMEBREW_PREFIX"); + if (ffStrSet(prefix)) { + ffStrbufSetS(&baseDir, prefix); + } else { +#ifdef __aarch64__ + ffStrbufSetS(&baseDir, FASTFETCH_TARGET_DIR_ROOT "/opt/homebrew"); +#else + ffStrbufSetS(&baseDir, FASTFETCH_TARGET_DIR_USR "/local"); +#endif + } + countBrewPackages(&baseDir, result); + } + if (FF_PACKAGES_IS_ENABLED(options, MACPORTS)) { + const char* prefix = getenv("MACPORTS_PREFIX"); + if (ffStrSet(prefix)) { + ffStrbufSetS(&baseDir, prefix); + } else { + ffStrbufSetS(&baseDir, FASTFETCH_TARGET_DIR_ROOT "/opt/local"); + } + + result->macports = getMacPortsPackages(&baseDir); + } + if (FF_PACKAGES_IS_ENABLED(options, NIX)) { + ffStrbufSetS(&baseDir, FASTFETCH_TARGET_DIR_ROOT); + result->nixDefault += ffPackagesGetNix(&baseDir, "/nix/var/nix/profiles/default"); + result->nixSystem += ffPackagesGetNix(&baseDir, "/run/current-system"); + ffStrbufSet(&baseDir, &instance.state.platform.homeDir); + result->nixUser = ffPackagesGetNix(&baseDir, "/.nix-profile"); + } +} |