Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
8ca551c
Packaging: updates debian stuff [ci skip]
CarterLi Jul 10, 2026
f8908b9
Global: upgrades to C23
CarterLi Jul 10, 2026
8734541
Global: uses typed enums
CarterLi Jul 10, 2026
ba18705
Global: replaces NULL to nullptr
CarterLi Jul 10, 2026
61656a1
Global: replaces `__attribute__` to C23 `[[attribute]]`
CarterLi Jul 10, 2026
bf1af71
Shell (Linux): fixes a potiential fish version detection error
CarterLi Jul 10, 2026
2ae9c3d
CI (Linux): removes armv6li
CarterLi Jul 10, 2026
9d6bb7d
Global: replaces `__typeof__` to `typeof`
CarterLi Jul 10, 2026
75f00af
Global: replaces `__auto_type` to `auto`
CarterLi Jul 11, 2026
e0c31be
Battery: changes battery status to array type in custom format
CarterLi Jul 11, 2026
317c0cf
TerminalFont (Ghostty): parse config files statically instead of exec…
clicelee Jul 12, 2026
773e3ea
TerminalFont: small code cleanups
CarterLi Jul 13, 2026
eeae601
Global: silences compiler warnings
CarterLi Jul 13, 2026
98c8c5b
CMake (Linux): detects MUSL automatically
CarterLi Jul 13, 2026
0b3ef5d
CMake: adds comments
CarterLi Jul 13, 2026
8ca6bb0
Common (Library): adds FF_LIBRARY_LOAD_SYMBOL_VAR_LAZY
CarterLi Jul 14, 2026
29d626f
DisplayServer (Linux): wait for delayed Wayland output events
CarterLi Jul 14, 2026
1c352bb
DisplayServer (Linux): removes an old hack
CarterLi Jul 14, 2026
a0fd59d
DisplayServer (Linux): don't try to inline functions with variable ar…
CarterLi Jul 14, 2026
7dcc7d4
InitSystem (Windows): adds support
CarterLi Jul 14, 2026
2b03bac
Global: further code cleanups
CarterLi Jul 14, 2026
b41cdb0
Chore: siliences more compiler warnings
CarterLi Jul 14, 2026
dd30c82
TerminalFont: supports both syntax for alacritty
CarterLi Jul 15, 2026
ac3fc21
Doc: updates README [ci skip]
CarterLi Jul 15, 2026
bc8ce39
Doc: update logo_request template [ci skip]
CarterLi Jul 16, 2026
21fbf14
Logo (Builtin): removes Furreto, EmperorOS and Magix
CarterLi Jul 16, 2026
d9f5e00
Logo (Builtin): removes MagpieOS
CarterLi Jul 16, 2026
4453119
Logo: silence GCC warnings by unsilencing CLANG warnings
CarterLi Jul 16, 2026
8bf1aca
GPU (Windows): correctly report virtual GPUs
CarterLi Jul 16, 2026
f0564fb
Camera: adds missing `ffStrbufDestroy`
CarterLi Jul 17, 2026
6c03db8
Codec (macOS): fixes a memory leak
CarterLi Jul 17, 2026
0feec93
Camera: removes unused `#include`s
CarterLi Jul 17, 2026
6218036
Theme (Windows): reports `basic` is DWM is disabled
CarterLi Jul 17, 2026
9db4ec8
Version (macOS): siliences a compiler warning
CarterLi Jul 19, 2026
7223803
Common (Base64): corrects byte order on big-endian hosts (#2470)
cmilanf Jul 20, 2026
db46e06
Common (Base64): unifies the code of endian testing
CarterLi Jul 20, 2026
69f3d9a
CI (FreeBSD): fixes building
CarterLi Jul 19, 2026
0b72c9b
Networking (Windows): simplifies code
CarterLi Jul 21, 2026
dda39f0
CI (Linux): adds loong64 build workflow (#2469)
xuxiaowei-com-cn Jul 21, 2026
bc1d305
Logo (Builtin): removes hypros
CarterLi Jul 22, 2026
47dfd8a
Common (macOS): adds M5x temp detection support
CarterLi Jul 22, 2026
111c1ba
Codec (macOS): fixes detection for VP9
CarterLi Jul 23, 2026
c5a8950
Weather: fixes memory leak and replace aggressive exit(1) with proper…
h4sht Jul 24, 2026
97fa52f
FFstrbuf: removes dead code in ffStrbufSubstrBefore (#2475)
h4sht Jul 24, 2026
f6c2566
Display: adds missing ffStrbufDestroy calls in ffOptionsDestroyDispla…
h4sht Jul 24, 2026
18eef29
PublicIP: replaces exit(1) with proper error status
Jul 23, 2026
ccf3909
Separator: fixes memory leakes
Jul 23, 2026
6490e27
Networking: relaxes accepted response format
CarterLi Jul 28, 2026
4f0b001
PublicIP: fixes invalid URL parser
CarterLi Jul 28, 2026
5476e01
Revert "PublicIP: replaces exit(1) with proper error status"
CarterLi Jul 28, 2026
738ad59
Revert "Weather: replaces aggressive exit(1) with proper error handli…
CarterLi Jul 28, 2026
2c73669
Watch: adds `-w/--watch` as a seconds-based alias for `--dynamic-inte…
CarterLi Jul 28, 2026
476cd67
Networking: adds Content-Length size limit to prevent excessive memor…
CarterLi Jul 28, 2026
1c3f0eb
FFstrbuf: adds integer overflow checks to EnsureFreeNoCheck and Ensur…
CarterLi Jul 28, 2026
dc464d6
FFstrbuf: prefers `ffStrbufEnsureFree`
CarterLi Jul 28, 2026
b653ef7
General: removes `general.preRun` due to security concerns
CarterLi Jul 28, 2026
a58fc4f
CI: disable Haiku
CarterLi Jul 28, 2026
305ab14
DisplayServer (Linux): don't assume the monitor has only one preferre…
CarterLi Jul 28, 2026
00b7c5b
Netif (Hurd): fixes a compiler warning
CarterLi Jul 25, 2026
5eaf98e
Common: forces `optionBuf` to be 8-byte aligned
CarterLi Jul 29, 2026
3fae9e0
Libc (Windows): simplifies code
CarterLi Jul 31, 2026
66ce39e
Shell (Windows): fixes incompatibility with the newest fish version
CarterLi Aug 2, 2026
241ddb7
Global: first step to full C++ project
CarterLi Aug 3, 2026
1626ced
OS (Linux): detects Ubuntu Studio installed with core mode
aldahiiir Jul 31, 2026
3196f5e
chore: adds `defaultOrder` to every module's definition
CarterLi Jul 31, 2026
2af5623
FFlist: adds `FF_LIST_INSERT_AT` and `FF_LIST_REMOVE_AT`
CarterLi Aug 4, 2026
6d795a3
Fastfetch: adds interactive `--gen-config` mode
CarterLi Aug 4, 2026
9c7cfb8
Release: v2.67.0
CarterLi Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
39 changes: 32 additions & 7 deletions .github/ISSUE_TEMPLATE/logo_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,42 +6,67 @@ body:
- type: markdown
attributes:
value: |
Tip: You can display a logo in fastfetch without adding it to fastfetch's official repo.
> [!WARNING]
> **NB:** If your logo request does not meet the basic requirements outlined in this template, the issue may be closed at any time without any further explanation.

**Tip:** You can display a logo in fastfetch without adding it to fastfetch's official repo.
For highly customized, personal logos, we recommend keeping them locally.
Please refer to https://github.com/fastfetch-cli/fastfetch/wiki/Migrate-Neofetch-Logo-To-Fastfetch
You can test your logo locally using:
`fastfetch -l /path/to/logo.txt --logo-color-1 white --logo-color-2 red`
Please refer to the [Migration Guide](https://github.com/fastfetch-cli/fastfetch/wiki/Migrate-Neofetch-Logo-To-Fastfetch) for details on color placeholders (`$1`, `$2`, etc.).

- type: textarea
attributes:
label: OS
description: Paste the contents of `/etc/os-release` and `/etc/lsb-release` here. If neither file exists, describe how to identify the distro.
description: Paste the contents of `/etc/os-release` (specifically the `ID` and `PRETTY_NAME` fields). If neither file exists, describe how to identify the distro.
placeholder: cat /etc/os-release
validations:
required: true

- type: input
attributes:
label: Public repository URL
description: A public repository is required to verify the request. Please provide a link to the repository where the distro is developed.
placeholder: https://github.com/example/distro
validations:
required: true

- type: input
attributes:
label: Distro Website
description: To help prevent spam and verify the request, a distro website is required, and a downloadable ISO must be available on that site.
placeholder: https://example.com
validations:
required: true

- type: textarea
attributes:
label: ASCII Art
description: The ASCII logo should not take up too much space (smaller than 50x20 characters, W x H). Please also include the color codes if they are not available in `os-release`.
placeholder: Paste ASCII art here
description: |
The ASCII logo should not take up too much space (smaller than 50x20 characters, W x H).
**Important:** Fastfetch uses `$1`, `$2`, `$3` etc. for color placeholders. Do NOT use hardcoded ANSI escape codes (like `\033[38;2...m`) or Neofetch's `${c1}` syntax.
Take <https://github.com/fastfetch-cli/fastfetch/tree/dev/src/logo/ascii> as examples.
placeholder: Paste ASCII art with $1, $2 placeholders here
validations:
required: true

- type: input
attributes:
label: Original Image URL
description: If the ASCII art is based on an image, please provide a link to the original image file.
placeholder: Image URL from the distro website mentioned above

- type: checkboxes
attributes:
label: Checklist
options:
- label: My distro has reached a stable state (out of beta, alpha, RC).
required: true
- label: The ASCII art is smaller than 50x20 characters (W x H).
required: true
- label: The ASCII art includes color codes, or the color codes are available in `os-release`.
- label: The ASCII art uses `$N` color placeholders (or colors are natively available in `os-release`).
required: true
- label: The ASCII art has no unnecessary trailing spaces at the end of lines.
required: true
- label: The ASCII art has no internal padding (spaces at the start and/or end of lines).
- label: I promise that I will send a removal request if the distro is discontinued.
required: true
2 changes: 1 addition & 1 deletion .github/workflows/build-freebsd-amd64.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
- name: Update and install dependencies
run: |
sudo pkg update
sudo pkg install -y cmake git pkgconf binutils wayland vulkan-headers vulkan-loader libxcb libXrandr libX11 libdrm glib dconf dbus sqlite3-tcl egl opencl ocl-icd v4l_compat chafa lua54 libva libvdpau
sudo pkg install -y cmake git pkgconf binutils wayland vulkan-headers vulkan-loader libxcb libXrandr libX11 libdrm glib dconf dbus sqlite3 egl opencl ocl-icd v4l_compat chafa lua54 libva libvdpau

- name: CMake configuration
run: cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On -DCMAKE_BUILD_TYPE=${{ vars.CMAKE_BUILD_TYPE || 'RelWithDebInfo' }} .
Expand Down
40 changes: 0 additions & 40 deletions .github/workflows/build-linux-armv6l.yml

This file was deleted.

57 changes: 57 additions & 0 deletions .github/workflows/build-linux-loong64.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Reusable Linux loong64

on:
workflow_call:

env:
CMAKE_BUILD_TYPE: ${{ vars.CMAKE_BUILD_TYPE || 'RelWithDebInfo' }}

jobs:
build:
runs-on: ubuntu-24.04
steps:
- name: checkout repository
uses: actions/checkout@v7

- name: set up QEMU for loong64
uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0

- name: build in loong64 container
run: |
docker run --rm --platform linux/loong64 \
-v ${{ github.workspace }}:/workspace \
-w /workspace \
lcr.loongnix.cn/debian:14 \
bash -c '
set -e
uname -a
cat /etc/os-release || true

apt-get update
apt-get install -y --no-install-recommends \
cmake make gcc g++ \
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 \
libelf-dev libefl-all-dev \
liblua5.4-dev \
libvdpau-dev libva-dev \
rpm

cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DCMAKE_INSTALL_PREFIX=/usr .
cmake --build . --target package --verbose -j$(nproc)
./fastfetch --list-features
time ./fastfetch -c presets/ci.jsonc --stat false
time ./fastfetch -c presets/ci.jsonc --format json
time ./flashfetch
ldd fastfetch
ctest --output-on-failure
'

- name: upload artifacts
uses: actions/upload-artifact@v7
with:
name: fastfetch-linux-loong64
path: ./fastfetch-*.*
11 changes: 6 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ jobs:
uses: ./.github/workflows/build-linux-armv7l.yml
secrets: inherit

linux-armv6l:
linux-loong64:
needs: no-features-test
name: Linux-armv6l
name: Linux-loong64
permissions:
security-events: write
contents: read
uses: ./.github/workflows/build-linux-armv6l.yml
uses: ./.github/workflows/build-linux-loong64.yml
secrets: inherit

linux-vms:
Expand Down Expand Up @@ -154,6 +154,7 @@ jobs:
secrets: inherit

haiku-amd64:
if: false # Disabled because the Haiku build is currently broken
needs: no-features-test
name: Haiku-amd64
permissions:
Expand Down Expand Up @@ -197,7 +198,7 @@ jobs:
- linux-hosts
- linux-i686
- linux-armv7l
- linux-armv6l
- linux-loong64
- linux-vms
- musl-amd64
- macos-hosts
Expand All @@ -207,7 +208,7 @@ jobs:
- dragonfly-amd64
- solaris-amd64
- omnios-amd64
- haiku-amd64
# - haiku-amd64
- windows-hosts
permissions:
contents: write
Expand Down
43 changes: 43 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,46 @@
# 2.67.0

Changes:
* The minimum supported compiler version has been raised to GCC 13 (released on 2023-04-26) and Clang 16 (released on 2023-03-17) to accommodate the new C23 syntax used throughout the codebase. (General)
* As a result, building from source in Debian 12 (which only ships GCC 12 by default) is no longer supported. Users must upgrade their compiler or use the prebuilt binaries from the GitHub releases page.
* The `general.preRun` option has been removed due to security concerns. (General)
* Users who relied on this option to run a command before printing output will need to move that logic to an external wrapper.
* The `{status}` placeholder in Battery custom format is now an array type instead of a single comma-separated string. (Battery)
* This is a breaking change for users who print `{status}` in Lua scripts. They can use `table.concat(...)` to join the array into a single string if needed.
* The `--gen-config-*` flags (`--gen-config-full`, `--gen-config-force`, `--gen-config-full-force`) have been removed and their functions have been merged into `--gen-config`. (Global)
* See features below.

Features:
* `--gen-config` now opens an interactive configuration TUI to make generating config files easier.
* It falls back to non-interactive generation when `$NO_COLOR` is set or when stdin/stdout is not a TTY. This behavior can also be used to disable the interactive mode.
* Added an experimental [WebUI](https://fastfetch-cli.github.io/fastfetch-config/) ([separate project](https://github.com/fastfetch-cli/fastfetch-config)) for generating and editing configs.
* Added `-w`/`--watch` as a seconds-based alias for `--dynamic-interval`, defaulting to 1 second when no value is provided. (#2478, Watch)
* Added InitSystem detection on Windows, reporting the first userland process (`smss.exe`). (InitSystem, Windows)
* Added CPU and GPU temperature detection support for Apple M5 series chips. (CPU / GPU, macOS)
* Reported `Basic` as the Windows theme when DWM is disabled. (Theme, Windows)
* Improved Ghostty terminal font detection performance. (#2122, TerminalFont)
* It now parses Ghostty directly instead of running `ghostty +show-config`.
* Added support for a wider range of TOML config syntaxes used by Alacritty. (#2456, TerminalFont)

Bugfixes:
* Fixed a potential fish version detection error. (Shell, Linux)
* Fixed incorrect resolution reporting when a monitor advertises multiple preferred modes. (#2481, Display, Linux)
* Fixed connected monitors being missed when Wayland output events arrive late. (#2451, Display, Linux)
* Fixed VP9 codec detection on macOS. (Codec, macOS)
* Corrected Base64 encoding on big-endian hosts. (#2470)
* 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)
* 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

Logos:
* Removed Hypros, MagpieOS, Furreto, EmperorOS and Magix

# 2.66.0

Changes:
Expand Down
30 changes: 27 additions & 3 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.66.0
VERSION 2.67.0
LANGUAGES C
DESCRIPTION "Fast neofetch-like system information tool"
HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch"
Expand Down Expand Up @@ -182,7 +182,30 @@ endif()

set(WARNING_FLAGS "-Wall -Wextra -Wconversion -Werror=uninitialized -Werror=return-type -Werror=vla")

set(CMAKE_C_STANDARD 11)
if(LINUX)
if(NOT IS_MUSL) # `NOT DEFINED IS_MUSL` doesn't work
execute_process(
COMMAND ${CMAKE_C_COMPILER} -print-file-name=libc.so
OUTPUT_VARIABLE LIBC_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)

if(LIBC_PATH MATCHES "-musl")
set(IS_MUSL ON CACHE BOOL "Build with musl libc" FORCE)
endif()
endif()

if(IS_MUSL)
message(STATUS "MUSL libc detected")
# Silence ioctl related warnings
set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-sign-conversion")
endif()
endif()

# Minimal compiler version supported: GCC 13 (2023-04-26), Clang 16 (2023-03-17)
# Most C23 features are allowed with noticeable exceptions of `constexpr` and `#embed`
# See https://cppreference.com/c/compiler_support/23 for detail
set(CMAKE_C_STANDARD 23)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS} -Werror=incompatible-pointer-types -Werror=implicit-function-declaration -Werror=int-conversion")

if(WIN32 OR Haiku)
Expand Down Expand Up @@ -411,6 +434,7 @@ set(LIBFASTFETCH_SRC
src/common/impl/font.c
src/common/impl/format.c
src/common/impl/frequency.c
src/common/impl/genconfig.c
src/common/impl/init.c
src/common/impl/jsonconfig.c
src/common/impl/library.c
Expand Down Expand Up @@ -1100,7 +1124,7 @@ elseif(WIN32)
src/detection/gpu/gpu_windows.cpp
src/detection/host/host_windows.c
src/detection/icons/icons_windows.c
src/detection/initsystem/initsystem_nosupport.c
src/detection/initsystem/initsystem_windows.c
src/detection/keyboard/keyboard_windows.c
src/detection/libc/libc_windows.cpp
src/detection/lm/lm_nosupport.c
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,8 @@ See [#1096](https://github.com/fastfetch-cli/fastfetch/issues/1096).

### Q: Fastfetch shows fewer dpkg packages than neofetch. Is it a bug?

Neofetch incorrectly counts `rc` packages (packages that have been removed but still have configuration files remaining). See bug: https://github.com/dylanaraps/neofetch/issues/2278
1. Neofetch incorrectly counts `rc` packages for apt (packages that have been removed but still have configuration files remaining). See bug: https://github.com/dylanaraps/neofetch/issues/2278
2. Neofetch incorrectly counts `gpg-pubkey` as packages for rpm. You may check the results of `dnf list --installed | wc -l` and `rpm -qa | wc -l` to see the difference.

### Q: I use Debian / Ubuntu / Debian-derived distro. My GPU is detected as `XXXX Device XXXX (VGA compatible)`. Is this a bug?

Expand Down
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.66.0~#UBUNTU_CODENAME#) #UBUNTU_CODENAME#; urgency=medium

* Update to 2.66.0

-- Carter Li <zhangsongcui@live.cn> Fri, 10 Jul 2026 15:13:37 +0800

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

* Update to 2.65.2
Expand Down
32 changes: 12 additions & 20 deletions doc/help.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@
"type": "num",
"default": 0
}
},
{
"long": "watch",
"short": "w",
"desc": "Alias of dynamic-interval, but the value is in seconds instead of milliseconds. If no value is provided, it defaults to 1 second",
"arg": {
"type": "num",
"optional": true,
"default": 1
}
}
],
"Config": [
Expand All @@ -97,26 +107,8 @@
},
{
"long": "gen-config",
"desc": "Generate a minimal config file at the specified path",
"remark": "Defaults to \"~/.config/fastfetch/config.jsonc\". Prints the generated config if <path> is \"-\"",
"arg": {
"type": "path",
"optional": true
}
},
{
"long": "gen-config-full",
"desc": "Generate a full config file with all optional settings at the specified path",
"remark": "Defaults to \"~/.config/fastfetch/config.jsonc\". Prints the generated config if <path> is \"-\"",
"arg": {
"type": "path",
"optional": true
}
},
{
"long": "gen-config-force",
"desc": "Generate a config file at the specified path, overwriting any existing file",
"remark": "Defaults to \"~/.config/fastfetch/config.jsonc\"",
"desc": "Interactively generate a config file at the specified path",
"remark": "Opens an interactive configuration UI when run in a terminal. Falls back to non-interactive generation when env-var `$NO_COLOR` is set or stdin/stdout is not a TTY. Defaults to \"~/.config/fastfetch/config.jsonc\". Prints the generated config if <path> is \"-\"",
"arg": {
"type": "path",
"optional": true
Expand Down
Loading
Loading