Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
01bb73b
Packaging: updates debian stuff [ci skip]
CarterLi Aug 6, 2026
51a4f34
Codec (macOS): fixes a symbol not found error when running on 10.15
CarterLi Aug 7, 2026
ba60d79
Camera (macOS): simplifies code
CarterLi Aug 7, 2026
39b3dc0
CMake: adds C23 feature detection and compatibility workarounds for A…
CarterLi Aug 7, 2026
8686820
CMake (Hurd): Define O_PATH to O_NORW.
yelninei Aug 6, 2026
ac8fc63
Doc: updates changelog [ci skip]
CarterLi Aug 7, 2026
881730d
TerminalFont: improves Ghostty config loading with fallback support
CarterLi Aug 8, 2026
558a90d
Loadavg (Haiku): adds support on R1B6
CarterLi Aug 8, 2026
4361c5e
Library: adds function `ffLibraryIterateDynamicLibs`
CarterLi Aug 8, 2026
8bc4464
Library: makes `ffLibraryIterateDynamicLibs` return false on failure
CarterLi Aug 9, 2026
8b8efcd
Locale (macOS): queries system-wide locale preference
CarterLi Aug 9, 2026
da42108
Cursor (macOS): migrates impl to pure C using CoreFoundation
CarterLi Aug 9, 2026
1d4b023
WMTheme (macOS): migrates impl to pure C using CoreFoundation
CarterLi Aug 9, 2026
e3b8e94
Wallpaper (macOS): uses the official API if possible
CarterLi Aug 9, 2026
4c2af40
TerminalFont (Alacritty): fix font size never being parsed from config
HashimAbdulaziz Aug 9, 2026
ebf38e8
OS (Android): reports real code names
CarterLi Aug 11, 2026
a0452b8
Logo (Image): don't block images support in zellij
JunaidQrysh Aug 11, 2026
51cfd4b
OS (Android): optimises code
CarterLi Aug 11, 2026
16b10c1
Revert "Locale (macOS): queries system-wide locale preference"
CarterLi Aug 12, 2026
1d12003
Locale (Windows): uses $LANG if available e.g. MSYS2
CarterLi Aug 12, 2026
c4695b8
Processing (Windows): sets `LANG=C` when spawning child processes
CarterLi Aug 12, 2026
681749e
TerminalFont (Ghostty): fixes font-family fallback order (#2510)
njkdev Aug 13, 2026
7098cd8
Display: fixes bright colours incorrectly active in light theme
CarterLi Aug 13, 2026
8df0a1c
Doc: removes Star History in README.md
CarterLi Aug 13, 2026
368a4c5
Release v2.67.1
CarterLi Aug 13, 2026
5ea299a
Doc: restores Star History in README.md
OctoBored Aug 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ fastfetch.kdev4
*.user
*.user.*
*.swp
*.log
36 changes: 27 additions & 9 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
# 2.67.1

Bugfixes:
* Fixed a `Symbol not found` error when running on macOS 10.15. (Codec, macOS)
* Fixed Alacritty font size never being parsed from the TOML config. (TerminalFont)
* Fixed Ghostty `font-family` fallback order. (#2510, TerminalFont)
* Fixed bright colors incorrectly being active when the terminal uses a light theme. (#2509, Display)
* Fixed Ghostty terminal font detection by trying to load the config with the `.ghostty` extension. (#2500, TerminalFont)
* Added compatibility workarounds for Apple Clang 14 to fix building on macOS 14. (CMake, macOS)
* Some internal cleanups and optimizations.

Features:
* Added a C23 compiler check so the build process gracefully exits during CMake configuration if the compiler is unsupported. (CMake)
* Reported real Android version codenames (e.g., "Baklava", "Vanilla Ice Cream") instead of "REL". (OS, Android)
* Added Loadavg detection support on Haiku R1B6. (Loadavg, Haiku)
* Enabled image logo support in the Zellij terminal multiplexer. (Logo)
* Improved Locale detection on Windows to use `$LC_ALL` or `$LANG` environment variables if available (e.g., in MSYS2 or Cygwin). (Locale, Windows)

# 2.67.0

Changes:
Expand Down Expand Up @@ -31,12 +49,12 @@ Bugfixes:
* Fixed invalid URL parsing in the PublicIP module. (PublicIP)
* Correctly reported virtual GPUs on Windows. (#2461, GPU, Windows)
* Added a size limit for network responses to prevent excessive memory usage and mitigate potential attacks. (PublicIP / Weather)
* Fixed Ubuntu Studio Core detection (OS, Linux)
* Fixed Ubuntu Studio Core detection. (OS, Linux)
* Relaxed the HTTP response check so that both `HTTP/1.0` and `HTTP/1.1` responses are accepted when fetching data over the network. (PublicIP / Weather)
* Various internal cleanups and optimizations:
* Fixed multiple memory leaks (Separator, Camera, Codec, Display)
* Added integer overflow checks to the string buffer implementation
* Various code cleanups and compiler warning fixes
* Fixed multiple memory leaks (Separator, Camera, Codec, Display).
* Added integer overflow checks to the string buffer implementation.
* Various code cleanups and compiler warning fixes.

Logos:
* Removed Hypros, MagpieOS, Furreto, EmperorOS and Magix
Expand All @@ -49,9 +67,9 @@ Changes:

Bugfixes:
* Fixed compatibility with WSL 2.9.3 (#2433, WM, Linux)
* Fixed accurate AMD GPU names are not queried in `driverSpecific` mode (GPU, Linux)
* Fixed AMD GPU names not being queried accurately in `driverSpecific` mode (GPU, Linux)
* Fixed GPU core counting for Apple Silicon GPU on Asahi Linux (GPU, Linux)
* Some internal cleanups and optimizations
* Some internal cleanups and optimizations.

Features:
* Added Astra Linux version detection (OS, Linux)
Expand Down Expand Up @@ -784,7 +802,7 @@ Features:
* Added support for interface speed detection on SunOS (LocalIP, SunOS)
* Added detection support for Xlibre (#1888, WM, Linux)
* Improved the accuracy of color detection (Cursor, macOS)
* Improved the proformance of `Nix` package manager detection on macOS by porting optimizations form Linux port (#1893, Packages, macOS)
* Improved the performance of `Nix` package manager detection on macOS by porting optimizations from the Linux port (#1893, Packages, macOS)

Bugfixes:
* Fixed custom object inheriting a key from the previous custom object if the key is blank (#1477)
Expand Down Expand Up @@ -1295,7 +1313,7 @@ Features:
* Change package manager name of NetBSD from `pkg` to `pkgsrc` (#1515, Packages, NetBSD)
* Detect SOC name on RISCV (#1519, CPU, Linux)
* Report marketing name of new QS8Es (CPU, Android)
* Acquire acquire more os info from lsb-release if missing from os-release (#1521)
* Acquire more OS info from lsb-release if missing from os-release (#1521)
* CMake: add option `-DCUSTOM_LSB_RELEASE_PATH` to specify the path of `lsb-release` file
* `-DCUSTOM_OS_RELEASE_PATH` has been supported since `v2.11.4`
* Report more SOC names on Android (CPU, Android)
Expand Down Expand Up @@ -1763,7 +1781,7 @@ Logos:

Bugfixes:
* Fix bad Intel Arc GPU name detection, which was supposed to be fixed in the last version but the change was reverted accidentally (#1177, GPU, Linux)
* Fix arm32 CPU name detection no longer work. Regression of 2.21.2 (CPU, Linux)
* Fix arm32 CPU name detection no longer working. Regression of 2.21.2 (CPU, Linux)

# 2.21.2

Expand Down
37 changes: 29 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.12.0) # target_link_libraries with OBJECT libs & project homepage url

project(fastfetch
VERSION 2.67.0
VERSION 2.67.1
LANGUAGES C
DESCRIPTION "Fast neofetch-like system information tool"
HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch"
Expand Down Expand Up @@ -62,6 +62,7 @@ if(NOT PKG_CONFIG_FOUND)
endif()

include(CheckIncludeFile)
include(CheckFunctionExists)

if(LINUX)
CHECK_INCLUDE_FILE("linux/version.h" HAVE_LINUX_VERSION_H)
Expand Down Expand Up @@ -1022,7 +1023,7 @@ elseif(APPLE)
src/detection/cpu/cpu_apple.c
src/detection/cpucache/cpucache_apple.c
src/detection/cpuusage/cpuusage_apple.c
src/detection/cursor/cursor_apple.m
src/detection/cursor/cursor_apple.c
src/detection/disk/disk_bsd.c
src/detection/dns/dns_apple.c
src/detection/physicaldisk/physicaldisk_apple.c
Expand Down Expand Up @@ -1063,7 +1064,7 @@ elseif(APPLE)
src/detection/wifi/wifi_apple.m
src/detection/wm/wm_apple.m
src/detection/de/de_nosupport.c
src/detection/wmtheme/wmtheme_apple.m
src/detection/wmtheme/wmtheme_apple.c
src/detection/camera/camera_apple.m
)
# CMAKE_SYSTEM_PROCESSOR has been normalized before
Expand Down Expand Up @@ -1281,7 +1282,6 @@ elseif(Haiku)
src/detection/keyboard/keyboard_haiku.cpp
src/detection/libc/libc_nosupport.c
src/detection/lm/lm_nosupport.c
src/detection/loadavg/loadavg_nosupport.c
src/detection/locale/locale_linux.c
src/detection/localip/localip_linux.c
src/detection/gamepad/gamepad_haiku.cpp
Expand Down Expand Up @@ -1311,6 +1311,13 @@ elseif(Haiku)
src/detection/wmtheme/wmtheme_haiku.cpp
src/detection/camera/camera_nosupport.c
)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} bsd)
check_function_exists(getloadavg HAVE_GETLOADAVG)
if(HAVE_GETLOADAVG)
list(APPEND LIBFASTFETCH_SRC src/detection/loadavg/loadavg_sunos.c)
else()
list(APPEND LIBFASTFETCH_SRC src/detection/loadavg/loadavg_nosupport.c)
endif()
elseif(GNU)
list(APPEND LIBFASTFETCH_SRC
src/common/impl/dbus.c
Expand Down Expand Up @@ -1428,7 +1435,6 @@ if(WIN32)
endif()
endif()
endif()
include(CheckFunctionExists)
if(NOT WIN32)
check_function_exists(pipe2 HAVE_PIPE2)
endif()
Expand Down Expand Up @@ -1469,10 +1475,24 @@ endforeach()
include(CheckCSourceCompiles)
check_c_source_compiles("int main(void){int arr[1];return _Countof(arr);}" COMPILER_SUPPORTS_COUNT_OF)
if(COMPILER_SUPPORTS_COUNT_OF)
message(STATUS "_Countof is supported by the compiler")
message(STATUS "C2Y _Countof is supported by the compiler")
target_compile_definitions(libfastfetch PUBLIC FF_SUPPORTS_COUNT_OF=1)
else()
message(STATUS "_Countof is NOT supported by the compiler")
message(STATUS "C2Y _Countof is NOT supported by the compiler")
endif()

# Test C23 compiler support
check_c_source_compiles("enum my_enum: long{MY_ENUM_ZERO}; void test(void*p){} int main(int,const char**){[[gnu::cleanup(test)]] void* x=nullptr; return (int)MY_ENUM_ZERO;}" COMPILER_SUPPORTS_C23)
if(NOT COMPILER_SUPPORTS_C23)
message(FATAL_ERROR "Compiler does not support C23. Please use a newer compiler.")
endif()

# A hack for AppleClang 17, which supports most C23 features we use except for the `auto` keyword.
# See https://github.com/Homebrew/homebrew-core/pull/297403
check_c_source_compiles("int main(void){auto v = 12.34; return (int)v;}" COMPILER_SUPPORTS_AUTO)
if(NOT COMPILER_SUPPORTS_AUTO)
message(WARNING "Compiler does not support C23 'auto' keyword. A workaround will be applied.")
target_compile_definitions(libfastfetch PUBLIC $<$<COMPILE_LANGUAGE:C>:auto=__auto_type>)
endif()

if(yyjson_FOUND)
Expand Down Expand Up @@ -1555,7 +1575,7 @@ elseif(Haiku)
target_compile_definitions(libfastfetch PUBLIC _GNU_SOURCE)
elseif(GNU)
# On Hurd PATH_MAX is not defined. Set an arbitrary limit as workaround.
target_compile_definitions(libfastfetch PUBLIC _GNU_SOURCE PATH_MAX=4096 O_PATH=0)
target_compile_definitions(libfastfetch PUBLIC _GNU_SOURCE PATH_MAX=4096 O_PATH=O_NORW)
endif()

if(APPLE)
Expand Down Expand Up @@ -2006,6 +2026,7 @@ elseif(Haiku)
PRIVATE "GL"
PRIVATE "be"
PRIVATE "gnu"
PRIVATE "bsd"
)
endif()

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -335,10 +335,10 @@ If you find Fastfetch useful, please consider donating.

Give us a star to show your support!

<a href="https://star-history.com/#fastfetch-cli/fastfetch&Date">
<a href="https://star-history.dera.page/#fastfetch-cli/fastfetch&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=fastfetch-cli/fastfetch&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=fastfetch-cli/fastfetch&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=fastfetch-cli/fastfetch&type=Date" />
<source media="(prefers-color-scheme: dark)" srcset="https://star-history.dera.page/svg?repos=fastfetch-cli/fastfetch&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://star-history.dera.page/svg?repos=fastfetch-cli/fastfetch&type=Date" />
<img alt="Star History Chart" src="https://star-history.dera.page/svg?repos=fastfetch-cli/fastfetch&type=Date" />
</picture>
</a>
6 changes: 6 additions & 0 deletions debian/changelog.tpl
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
fastfetch (2.67.0~#UBUNTU_CODENAME#) #UBUNTU_CODENAME#; urgency=medium

* Update to 2.67.0

-- Carter Li <zhangsongcui@live.cn> Thu, 06 Aug 2026 16:22:22 +0800
Comment on lines +1 to +5

fastfetch (2.66.0~#UBUNTU_CODENAME#) #UBUNTU_CODENAME#; urgency=medium

* Update to 2.66.0
Expand Down
12 changes: 0 additions & 12 deletions src/common/impl/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "common/textModifier.h"
#include "common/strutil.h"
#include "detection/displayserver/displayserver.h"
#include "detection/terminaltheme/terminaltheme.h"
#include "logo/logo.h"

#include <stdlib.h>
Expand All @@ -27,21 +26,10 @@ static void initState(FFstate* state) {
state->logoWidth = 0;
state->logoHeight = 0;
state->keysHeight = 0;
state->terminalLightTheme = false;
state->titleFqdn = false;

ffPlatformInit(&state->platform);
state->dynamicInterval = 0;

#if !FF_MODULE_DISABLE_TERMINALTHEME
{
// don't enable bright color if the terminal is in light mode
FFTerminalThemeResult result;
if (ffDetectTerminalTheme(&result, true /* forceEnv for performance */) && !result.bg.dark) {
state->terminalLightTheme = true;
}
}
#endif
}

static void defaultConfig(void) {
Expand Down
79 changes: 79 additions & 0 deletions src/common/impl/library.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,3 +178,82 @@ void* ffLibraryGetModule(const wchar_t* libraryFileName) {
return module;
}
#endif

struct LibraryIterateDynamicLibsBundle {
FFLibraryIterateCallback callback;
void* userData;
};

#if _WIN32

static void ffLibraryIterateDynamicLibsCallback(PLDR_DATA_TABLE_ENTRY DataTableEntry, PVOID Context, BOOLEAN* StopEnumeration) {
if (DataTableEntry->FullDllName.Buffer == nullptr || DataTableEntry->FullDllName.Buffer[0] == L'\0') {
return;
}

char path[PATH_MAX * 3];
ULONG outBytes;
if (NT_SUCCESS(RtlUnicodeToUTF8N(path, sizeof(path), &outBytes, DataTableEntry->FullDllName.Buffer, (uint32_t) (DataTableEntry->FullDllName.Length + sizeof(wchar_t))))) {
struct LibraryIterateDynamicLibsBundle* bundle = (struct LibraryIterateDynamicLibsBundle*) Context;
*StopEnumeration = !bundle->callback(path, bundle->userData);
}
Comment on lines +194 to +199
}

bool ffLibraryIterateDynamicLibs(FFLibraryIterateCallback callback, void* userData) {
struct LibraryIterateDynamicLibsBundle bundle = {
.callback = callback,
.userData = userData,
};
return NT_SUCCESS(LdrEnumerateLoadedModules(FALSE, ffLibraryIterateDynamicLibsCallback, &bundle));
}

#elif defined(__APPLE__)

#include <mach-o/dyld.h>

bool ffLibraryIterateDynamicLibs(FFLibraryIterateCallback callback, void* userData) {
uint32_t imageCount = _dyld_image_count();
for (uint32_t i = 0; i < imageCount; ++i) {
const char* name = _dyld_get_image_name(i);
if (name == nullptr || name[0] == '\0') {
continue;
}

if (!callback(name, userData)) {
break;
}
}

return true;
}

#elif __has_include(<link.h>)
#include <link.h>

static int ffLibraryIterateDynamicLibsCallback(struct dl_phdr_info* info, size_t, void* data) {
if (info->dlpi_name == nullptr || info->dlpi_name[0] == '\0') {
return 0;
}

struct LibraryIterateDynamicLibsBundle* bundle = (struct LibraryIterateDynamicLibsBundle*) data;
return !bundle->callback(info->dlpi_name, bundle->userData);
}

bool ffLibraryIterateDynamicLibs(bool (*callback)(const char* name, void* userData), void* userData) {
dl_iterate_phdr(
ffLibraryIterateDynamicLibsCallback,
&(struct LibraryIterateDynamicLibsBundle) {
.callback = callback,
.userData = userData,
});
return true;
}

#else

bool ffLibraryIterateDynamicLibs(FFLibraryIterateCallback, void*) {
// Not implemented for this platform
return false;
}

#endif
Loading
Loading