master ohmu/fastfetch-openbsd / src / modules / kernel / kernel.c
ohmu  ·  2026-10-15
  1#include "common/printing.h"
  2#include "common/jsonconfig.h"
  3#include "common/size.h"
  4#include "common/strutil.h"
  5#include "modules/kernel/kernel.h"
  6
  7bool ffPrintKernel(FFKernelOptions* options) {
  8    const FFPlatformSysinfo* info = &instance.state.platform.sysinfo;
  9    if (options->moduleArgs.outputFormat.length == 0) {
 10        ffPrintLogoAndKey(FF_MODULE_GET_DISPLAY_NAME(Kernel), 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT);
 11        printf("%s %s\n", info->name.chars, info->release.chars);
 12    } else {
 13        FF_STRBUF_AUTO_DESTROY str = ffStrbufCreate();
 14        ffSizeAppendNum((uint64_t) 1 << info->pageSizeShift, &str);
 15        FF_PRINT_FORMAT_CHECKED(FF_MODULE_GET_DISPLAY_NAME(Kernel), 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, ((FFformatarg[]) {
 16                                                                                                           FF_ARG(info->name, "sysname"),
 17                                                                                                           FF_ARG(info->release, "release"),
 18                                                                                                           FF_ARG(info->version, "version"),
 19                                                                                                           FF_ARG(info->architecture, "arch"),
 20                                                                                                           FF_ARG(str, "page-size"),
 21                                                                                                       }));
 22    }
 23
 24    return true;
 25}
 26
 27void ffParseKernelJsonObject(FFKernelOptions* options, yyjson_val* module) {
 28    yyjson_val *key, *val;
 29    size_t idx, max;
 30    yyjson_obj_foreach (module, idx, max, key, val) {
 31        if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs)) {
 32            continue;
 33        }
 34
 35        ffPrintError(FF_MODULE_GET_DISPLAY_NAME(Kernel), 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", unsafe_yyjson_get_str(key));
 36    }
 37}
 38
 39[[gnu::cold]]
 40void ffGenerateKernelJsonConfig(FFKernelOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) {
 41    ffJsonConfigGenerateModuleArgsConfig(doc, module, &options->moduleArgs);
 42}
 43
 44bool ffGenerateKernelJsonResult([[maybe_unused]] FFKernelOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) {
 45    const FFPlatformSysinfo* info = &instance.state.platform.sysinfo;
 46
 47    yyjson_mut_val* obj = yyjson_mut_obj_add_obj(doc, module, "result");
 48    yyjson_mut_obj_add_strbuf(doc, obj, "architecture", &info->architecture);
 49    yyjson_mut_obj_add_strbuf(doc, obj, "name", &info->name);
 50    yyjson_mut_obj_add_strbuf(doc, obj, "release", &info->release);
 51    yyjson_mut_obj_add_strbuf(doc, obj, "version", &info->version);
 52    yyjson_mut_obj_add_uint(doc, obj, "pageSize", (uint64_t) 1 << info->pageSizeShift);
 53
 54    return true;
 55}
 56
 57void ffInitKernelOptions(FFKernelOptions* options) {
 58    ffOptionInitModuleArg(&options->moduleArgs, "");
 59}
 60
 61void ffDestroyKernelOptions(FFKernelOptions* options) {
 62    ffOptionDestroyModuleArg(&options->moduleArgs);
 63}
 64
 65FFModuleBaseInfo ffKernelModuleInfo = {
 66    .name = "Kernel",
 67    .description = "Print system kernel version",
 68    .displayName = {
 69        .en = "Kernel",
 70        .ar = "النواة",
 71        .cs = "Jádro",
 72        .de = "Kernel",
 73        .es = "Kernel",
 74        .fi = "Ydin",
 75        .fr = "Kernel",
 76        .gl = "Kernel",
 77        .he = "ליבה",
 78        .id = "Kernel",
 79        .it = "Kernel",
 80        .ja = "カーネル",
 81        .ko = "커널",
 82        .pl = "Jądro",
 83        .pt = "Kernel",
 84        .ru = "Ядро",
 85        .tr = "Çekirdek",
 86        .uk = "Ядро",
 87        .vi = "Nhân",
 88        .zh_CN = "内核",
 89        .zh_TW = "核心",
 90    },
 91    .initOptions = (void*) ffInitKernelOptions,
 92    .destroyOptions = (void*) ffDestroyKernelOptions,
 93    .parseJsonObject = (void*) ffParseKernelJsonObject,
 94    .printModule = (void*) ffPrintKernel,
 95    .generateJsonResult = (void*) ffGenerateKernelJsonResult,
 96    .generateJsonConfig = (void*) ffGenerateKernelJsonConfig,
 97    .formatArgs = FF_FORMAT_ARG_LIST(((FFModuleFormatArg[]) {
 98        { "Sysname", "sysname" },
 99        { "Release", "release" },
100        { "Version", "version" },
101        { "Architecture", "arch" },
102        { "Page size", "page-size" },
103    })),
104    .defaultOrder = 9,
105};