Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
# 2.63.1

Bugfixes:
* Fixes media length detection for Chrome on Linux (Media, Linux)
* Fixes segmentation fault when specifying unsupported modules on command line
* Disables usage of Netlink for Wi-Fi detection on s390x architectures (Wifi, Linux)

# 2.63.0

Changes:
* Introduces a new optional dependency, `libefl`, for querying the Enlightenment window manager configuration:
* Introduces a new **build-only** dependency, `libefl`, for querying the Enlightenment window manager configuration:
* `libefl-all-dev` on Debian/Ubuntu
* `libefl-devel` on Fedora
* `efl` on Arch Linux
Expand All @@ -14,6 +21,7 @@ Features:
* Adds Ubuntu Kylin and Ubuntu Unity flavor detection (OS, Linux)
* Adds NebiDE support (WMTheme, Linux)
* Adds package counting for `cards` on NuTyX (#2287, Packages, Linux)
* Adds `{am-pm}` to custom format for 12-hour time with am/pm (DateTime)
* Adds support for the Enlightenment desktop environment (#2165, WM, Linux)
* Adds support for playback progress detection (Media)
* The module now prints the current playback position and total media duration when supported by the player. If you prefer the previous behavior, you can set `media.percent.type: ["hide-others"]` to hide the new fields.
Expand Down
2 changes: 1 addition & 1 deletion 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.63.0
VERSION 2.63.1
LANGUAGES C
DESCRIPTION "Fast neofetch-like system information tool"
HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch"
Expand Down
12 changes: 12 additions & 0 deletions debian/changelog.tpl
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
fastfetch (2.63.0~#UBUNTU_CODENAME#) #UBUNTU_CODENAME#; urgency=medium

* Update to 2.63.0

-- Carter Li <zhangsongcui@live.cn> Wed, 13 May 2026 16:02:28 +0800

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

* Update to 2.62.1

-- Carter Li <zhangsongcui@live.cn> Fri, 24 Apr 2026 15:45:15 +0800

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

* Update to 2.62.0
Expand Down
2 changes: 1 addition & 1 deletion debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Source: fastfetch
Section: universe/utils
Priority: optional
Maintainer: Carter Li <zhangsongcui@live.cn>
Build-Depends: libelf-dev, libvulkan-dev, libwayland-dev, libxrandr-dev, libxcb-randr0-dev, libdconf-dev, libdbus-1-dev, libmagickcore-dev, libsqlite3-dev, librpm-dev, libegl-dev, libglx-dev, ocl-icd-opencl-dev, libpulse-dev, libdrm-dev, libddcutil-dev, libchafa-dev, pkgconf, cmake (>= 3.12), debhelper (>= 11.2), dh-cmake, dh-cmake-compat (= 1), dh-sequence-cmake, dh-sequence-ctest, ninja-build, python3-setuptools
Build-Depends: libelf-dev, libvulkan-dev, libwayland-dev, libxrandr-dev, libxcb-randr0-dev, libdconf-dev, libdbus-1-dev, libmagickcore-dev, libsqlite3-dev, librpm-dev, libegl-dev, libglx-dev, ocl-icd-opencl-dev, libpulse-dev, libdrm-dev, libddcutil-dev, libchafa-dev, libefl-all-dev, pkgconf, cmake (>= 3.12), debhelper (>= 11.2), dh-cmake, dh-cmake-compat (= 1), dh-sequence-cmake, dh-sequence-ctest, ninja-build, python3-setuptools
Standards-Version: 4.0.0
Homepage: https://github.com/fastfetch-cli/fastfetch

Expand Down
2 changes: 1 addition & 1 deletion src/common/impl/commandoption.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ static bool parseStructureCommand(
}
}

if (fn == genJsonResult) {
if (data->resultDoc) {
yyjson_mut_doc* doc = data->resultDoc;
yyjson_mut_val* module = yyjson_mut_arr_add_obj(doc, doc->root);
yyjson_mut_obj_add_str(doc, module, "type", line);
Expand Down
4 changes: 2 additions & 2 deletions src/detection/media/media_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ static bool parseMprisMetadata(FFDBusData* data, DBusMessageIter* rootIterator,
}
}
} else if (ffStrEquals(mpris, "length")) {
uint64_t length = 0; // microseconds
if (ffDBusGetUint(data, &dictIterator, &length)) {
int64_t length = 0; // microseconds
if (ffDBusGetInt(data, &dictIterator, &length) && length > 0) {
result->length = (uint32_t) (length / 1000);
}
Comment on lines +98 to 101
}
Expand Down
28 changes: 19 additions & 9 deletions src/detection/wifi/wifi_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@
#include <sys/ioctl.h>
#include <sys/types.h>
#include <net/if.h>
#include <linux/genetlink.h>
#include <linux/nl80211.h>
#include <linux/wireless.h>
#include <unistd.h>

// Silence warning of `NLA_HDRLEN` and `NLA_ALIGN`
#pragma GCC diagnostic ignored "-Wsign-conversion"
#if !__BIG_ENDIAN__
#include <linux/genetlink.h>
#include <linux/nl80211.h>

// Silence warning of `NLA_HDRLEN` and `NLA_ALIGN`
#pragma GCC diagnostic ignored "-Wsign-conversion"

typedef struct FFWifiNlContext {
int sockFd;
Expand All @@ -23,10 +25,6 @@ typedef struct FFWifiNlContext {
uint32_t seq;
} FFWifiNlContext;

typedef struct FFWifiIcContext {
int sockFd;
} FFWifiIcContext;

typedef struct FFWifiSecurityFlags {
bool privacy : 1;
bool wep : 1;
Expand Down Expand Up @@ -199,7 +197,7 @@ static bool ffWifiNlInit(FFWifiNlContext* ctx) {
ctx->sockFd,
SOL_SOCKET,
SO_RCVTIMEO,
&(struct timeval) { .tv_sec = 0, .tv_usec = 250000 },
&(struct timeval){ .tv_sec = 0, .tv_usec = 250000 },
sizeof(struct timeval)) < 0) {
FF_DEBUG("Failed to set netlink receive timeout: %s", strerror(errno));
return false;
Expand Down Expand Up @@ -694,6 +692,11 @@ static const char* detectWithNetlink(FFWifiNlContext* ctx, FFWifiResult* item, u
FF_DEBUG("Netlink wifi detection completed");
return NULL;
}
#endif

typedef struct FFWifiIcContext {
int sockFd;
} FFWifiIcContext;

static const char* detectWithIoctl(FFWifiIcContext* ctx, FFWifiResult* item, char ifName[static IFNAMSIZ]) {
int sock = -1;
Expand Down Expand Up @@ -893,7 +896,9 @@ const char* ffDetectWifi(FFlist* result) {
return "if_nameindex() failed";
}

#if !__BIG_ENDIAN__
FFWifiNlContext nl = { .sockFd = -1 };
#endif
FFWifiIcContext ic = { .sockFd = -1 };

FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate();
Expand Down Expand Up @@ -930,7 +935,10 @@ const char* ffDetectWifi(FFlist* result) {

if (operstate == 'u') {
ffStrbufSetStatic(&item->inf.status, "up");

#if !__BIG_ENDIAN__
detectWithNetlink(&nl, item, i->if_index);
#endif
detectWithIoctl(&ic, item, i->if_name);
} else {
ffStrbufSetStatic(&item->conn.status, "disconnected");
Expand All @@ -954,9 +962,11 @@ const char* ffDetectWifi(FFlist* result) {
}

if_freenameindex(infs);
#if !__BIG_ENDIAN__
if (nl.sockFd >= 0) {
close(nl.sockFd);
}
#endif
if (ic.sockFd >= 0) {
close(ic.sockFd);
}
Expand Down
Loading