Skip to content

Commit 5769791

Browse files
authored
Merge pull request #1691 from fastfetch-cli/dev
Release: v2.41.0
2 parents 563f959 + 894c66d commit 5769791

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+751
-181
lines changed

.github/workflows/ci.yml

Lines changed: 72 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ jobs:
6060

6161
linux-amd64:
6262
name: Linux-amd64
63-
runs-on: ubuntu-20.04
63+
runs-on: ubuntu-22.04
6464
permissions:
6565
security-events: write
6666
contents: read
@@ -80,12 +80,12 @@ jobs:
8080
run: cat /proc/cpuinfo
8181

8282
- name: install required packages
83-
run: sudo apt-get update && sudo apt-get install -y libvulkan-dev libwayland-dev libxrandr-dev libxcb-randr0-dev libdconf-dev libdbus-1-dev libmagickcore-dev libxfconf-0-dev libsqlite3-dev librpm-dev libegl-dev libglx-dev ocl-icd-opencl-dev libpulse-dev libdrm-dev libelf-dev directx-headers-dev
83+
run: sudo apt-get update && sudo apt-get install -y libvulkan-dev libwayland-dev libxrandr-dev libxcb-randr0-dev libdconf-dev libdbus-1-dev libmagickcore-dev libxfconf-0-dev libsqlite3-dev librpm-dev libegl-dev libglx-dev ocl-icd-opencl-dev libpulse-dev libdrm-dev libelf-dev libddcutil-dev directx-headers-dev
8484

8585
- name: install linuxbrew packages
8686
run: |
8787
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
88-
/home/linuxbrew/.linuxbrew/bin/brew install imagemagick chafa ddcutil --ignore-dependencies
88+
/home/linuxbrew/.linuxbrew/bin/brew install imagemagick chafa --ignore-dependencies
8989
9090
- name: Initialize CodeQL
9191
uses: github/codeql-action/init@v3
@@ -151,8 +151,13 @@ jobs:
151151
- name: install required packages
152152
run: sudo apt-get update && sudo apt-get install -y libvulkan-dev libwayland-dev libxrandr-dev libxcb-randr0-dev libdconf-dev libdbus-1-dev libmagickcore-dev libxfconf-0-dev libsqlite3-dev librpm-dev libegl-dev libglx-dev ocl-icd-opencl-dev libpulse-dev libdrm-dev libelf-dev directx-headers-dev libchafa-dev libddcutil-dev rpm
153153

154+
- name: install linuxbrew packages
155+
run: |
156+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
157+
/home/linuxbrew/.linuxbrew/bin/brew install imagemagick chafa --ignore-dependencies
158+
154159
- name: configure project
155-
run: cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On -DCMAKE_INSTALL_PREFIX=/usr .
160+
run: PKG_CONFIG_PATH=/home/linuxbrew/.linuxbrew/lib/pkgconfig:$PKG_CONFIG_PATH cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On -DCMAKE_INSTALL_PREFIX=/usr .
156161

157162
- name: build project
158163
run: cmake --build . --target package --verbose -j4
@@ -654,6 +659,68 @@ jobs:
654659
name: fastfetch-windows-amd64
655660
path: ./fastfetch-windows-amd64.*
656661

662+
windows-aarch64:
663+
name: Windows-aarch64
664+
runs-on: windows-11-arm
665+
permissions:
666+
security-events: write
667+
contents: read
668+
defaults:
669+
run:
670+
shell: msys2 {0}
671+
steps:
672+
- name: checkout repository
673+
uses: actions/checkout@v4
674+
675+
- name: setup-msys2
676+
uses: msys2/setup-msys2@v2
677+
with:
678+
msystem: CLANGARM64
679+
update: true
680+
install: git mingw-w64-clang-aarch64-7zip mingw-w64-clang-aarch64-cmake mingw-w64-clang-aarch64-clang mingw-w64-clang-aarch64-vulkan-loader mingw-w64-clang-aarch64-vulkan-headers mingw-w64-clang-aarch64-opencl-icd mingw-w64-clang-aarch64-opencl-headers mingw-w64-clang-aarch64-cppwinrt mingw-w64-clang-aarch64-imagemagick
681+
682+
- name: print msys version
683+
run: uname -a
684+
685+
- name: configure project
686+
run: env PKG_CONFIG_PATH=/clangarm64/lib/pkgconfig/:$PKG_CONFIG_PATH cmake -DSET_TWEAK=Off -DBUILD_TESTS=On .
687+
688+
- name: build project
689+
run: cmake --build . --verbose -j4
690+
691+
- name: copy necessary dlls
692+
run: cp /clangarm64/bin/{OpenCL,vulkan-1}.dll .
693+
694+
- name: list features
695+
run: ./fastfetch --list-features
696+
697+
- name: run fastfetch
698+
run: time ./fastfetch -c presets/ci.jsonc --stat false
699+
700+
- name: run fastfetch --format json
701+
run: time ./fastfetch -c presets/ci.jsonc --format json
702+
703+
- name: run flashfetch
704+
run: time ./flashfetch
705+
706+
- name: print dependencies
707+
run: ldd fastfetch
708+
709+
- name: run tests
710+
run: ctest --output-on-failure
711+
712+
- name: create zip archive
713+
run: 7z a -tzip -mx9 -bd -y fastfetch-windows-aarch64.zip LICENSE *.dll fastfetch.exe flashfetch.exe presets
714+
715+
- name: create 7z archive
716+
run: 7z a -t7z -mx9 -bd -y fastfetch-windows-aarch64.7z LICENSE *.dll fastfetch.exe flashfetch.exe presets
717+
718+
- name: upload artifacts
719+
uses: actions/upload-artifact@v4
720+
with:
721+
name: fastfetch-windows-aarch64
722+
path: ./fastfetch-windows-aarch64.*
723+
657724
release:
658725
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'fastfetch-cli/fastfetch'
659726
name: Release
@@ -673,6 +740,7 @@ jobs:
673740
- netbsd-amd64
674741
- sunos-amd64
675742
- windows-amd64
743+
- windows-aarch64
676744
permissions:
677745
contents: write
678746
steps:

CHANGELOG.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,33 @@
1+
# 2.41.0
2+
3+
Changes:
4+
* Due to [the deprecation](https://github.com/actions/runner-images/issues/11101), Linux x86_64 binaries are now built with Ubuntu 22.04 (Glibc 2.35, Debian 12)
5+
* You can always build fastfetch yourself on your own. Please don't report bugs related to this change.
6+
7+
Bugfixes:
8+
* Don't detect disk type for virtual disks (PhysicalDisk, Linux, #1669)
9+
10+
Features:
11+
* Support physical core count detection on non-x86 platforms (CPU, Linux / FreeBSD)
12+
* Support CPU frequency detection on PPC64 (CPU, FreeBSD)
13+
* Support soar packages count detection (Packages, Linux)
14+
* Support `~` path expanding on Windows (Logo, Windows)
15+
* Support retrieving full user name (Title)
16+
* Exposed with `--title-format '{full-user-name}'`
17+
* Improve CPU (thermal zone) temperature detection on Windows (CPU, Windows)
18+
* Administrator privileges are no longer needed
19+
* Support base Wifi info detection on OpenBSD (Wifi, OpenBSD)
20+
* To be tested
21+
* Support GPU temperature detection for Intel dGPU on Linux (GPU, Linux)
22+
* To be tested
23+
* Add new ARM CPU part numbers (CPU, Linux)
24+
* Add base implementation of Bluetooth device detection (Bluetooth, NetBSD, #1690)
25+
* Some small improvements
26+
27+
Logo:
28+
* Add anduinos
29+
* Add 2 more Alpine logos
30+
131
# 2.40.4
232

333
Bugfixes:

CMakeLists.txt

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.12.0) # target_link_libraries with OBJECT libs & project homepage url
22

33
project(fastfetch
4-
VERSION 2.40.4
4+
VERSION 2.41.0
55
LANGUAGES C
66
DESCRIPTION "Fast neofetch-like system information tool"
77
HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch"
@@ -102,7 +102,7 @@ if(NOT BINARY_LINK_TYPE IN_LIST BINARY_LINK_TYPE_OPTIONS)
102102
message(FATAL_ERROR "BINARY_LINK_TYPE must be one of ${BINARY_LINK_TYPE_OPTIONS}")
103103
endif()
104104

105-
set(PACKAGE_MANAGERS AM APK BREW CHOCO DPKG EMERGE EOPKG FLATPAK GUIX LINGLONG LPKG LPKGBUILD MACPORTS NIX OPKG PACMAN PACSTALL PALUDIS PISI PKG PKGTOOL RPM SCOOP SNAP SORCERY WINGET XBPS)
105+
set(PACKAGE_MANAGERS AM APK BREW CHOCO DPKG EMERGE EOPKG FLATPAK GUIX LINGLONG LPKG LPKGBUILD MACPORTS NIX OPKG PACMAN PACSTALL PALUDIS PISI PKG PKGTOOL RPM SCOOP SNAP SOAR SORCERY WINGET XBPS)
106106
foreach(package_manager ${PACKAGE_MANAGERS})
107107
if(package_manager STREQUAL "WINGET")
108108
option(PACKAGES_DISABLE_${package_manager} "Disable ${package_manager} package manager detection by default" ON)
@@ -705,7 +705,7 @@ elseif(FreeBSD)
705705
src/detection/uptime/uptime_bsd.c
706706
src/detection/users/users_linux.c
707707
src/detection/wallpaper/wallpaper_linux.c
708-
src/detection/wm/wm_nosupport.c
708+
src/detection/wm/wm_linux.c
709709
src/detection/de/de_linux.c
710710
src/detection/wmtheme/wmtheme_linux.c
711711
src/detection/camera/camera_linux.c
@@ -734,7 +734,7 @@ elseif(NetBSD)
734734
src/common/sysctl.c
735735
src/detection/battery/battery_nbsd.c
736736
src/detection/bios/bios_nbsd.c
737-
src/detection/bluetooth/bluetooth_nosupport.c
737+
src/detection/bluetooth/bluetooth_bsd.c
738738
src/detection/bluetoothradio/bluetoothradio_nosupport.c
739739
src/detection/board/board_nbsd.c
740740
src/detection/bootmgr/bootmgr_bsd.c
@@ -879,7 +879,7 @@ elseif(OpenBSD)
879879
src/detection/uptime/uptime_bsd.c
880880
src/detection/users/users_obsd.c
881881
src/detection/wallpaper/wallpaper_linux.c
882-
src/detection/wifi/wifi_nosupport.c
882+
src/detection/wifi/wifi_nbsd.c
883883
src/detection/wm/wm_nosupport.c
884884
src/detection/de/de_linux.c
885885
src/detection/wmtheme/wmtheme_linux.c
@@ -977,7 +977,6 @@ elseif(WIN32)
977977
src/detection/btrfs/btrfs_nosupport.c
978978
src/detection/chassis/chassis_windows.c
979979
src/detection/cpu/cpu_windows.c
980-
src/detection/cpu/cpu_windows.cpp
981980
src/detection/cpucache/cpucache_windows.c
982981
src/detection/cpuusage/cpuusage_windows.c
983982
src/detection/cursor/cursor_windows.c
@@ -1589,7 +1588,15 @@ elseif(WIN32)
15891588
PRIVATE "cfgmgr32"
15901589
PRIVATE "winbrand"
15911590
PRIVATE "propsys"
1591+
PRIVATE "secur32"
1592+
PRIVATE "pdh"
15921593
)
1594+
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
1595+
# WoA only works on Windows 10 or higher
1596+
target_link_libraries(libfastfetch
1597+
PRIVATE "mincore"
1598+
)
1599+
endif()
15931600
elseif(FreeBSD)
15941601
target_link_libraries(libfastfetch
15951602
PRIVATE "m"
@@ -1613,6 +1620,7 @@ elseif(OpenBSD)
16131620
)
16141621
elseif(NetBSD)
16151622
target_link_libraries(libfastfetch
1623+
PRIVATE "bluetooth"
16161624
PRIVATE "m"
16171625
PRIVATE "prop"
16181626
)

README.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ You may also download the program directly from [the GitHub releases page](https
7171

7272
* `pkg install fastfetch`
7373

74+
### NetBSD
75+
76+
* `pkgin in fastfetch`
77+
7478
### Android (Termux)
7579

7680
* `pkg install fastfetch`
@@ -230,6 +234,56 @@ Set the key to a white space.
230234
}
231235
```
232236

237+
### Q: How can I display images on Windows?
238+
239+
As of April 2025:
240+
241+
#### mintty and Wezterm
242+
243+
mintty (used by Bash on Windows and MSYS2) and Wezterm (nightly build only) support the iTerm image protocol on Windows.
244+
245+
In `config.jsonc`:
246+
```json
247+
{
248+
"logo": {
249+
"type": "iterm",
250+
"source": "C:/path/to/image.png",
251+
"width": <num-in-chars>
252+
}
253+
}
254+
```
255+
256+
#### Windows Terminal
257+
258+
Windows Terminal supports the sixel image protocol only.
259+
260+
* If you installed fastfetch through MSYS2:
261+
1. Install imagemagick: `pacman -S mingw-w64-<subsystem>-x86_64-imagemagick`
262+
2. In `config.jsonc`:
263+
```jsonc
264+
{
265+
"logo": {
266+
"type": "sixel", // DO NOT USE "auto"
267+
"source": "C:/path/to/image.png", // Do NOT use `~` as fastfetch is a native Windows program and doesn't apply cygwin path conversion
268+
"width": <image-width-in-chars>, // Optional
269+
"height": <image-height-in-chars> // Optional
270+
}
271+
}
272+
```
273+
* If you installed fastfetch via scoop or downloaded the binary directly from the GitHub Releases page:
274+
1. Convert your image manually to sixel format using [any online image conversion service](https://www.google.com/search?q=convert+image+to+sixel)
275+
2. In `config.jsonc`:
276+
```jsonc
277+
{
278+
"logo": {
279+
"type": "raw", // DO NOT USE "auto"
280+
"source": "C:/path/to/image.sixel",
281+
"width": <image-width-in-chars>, // Required
282+
"height": <image-height-in-chars> // Required
283+
}
284+
}
285+
```
286+
233287
### Q: I want feature A / B / C. Will fastfetch support it?
234288

235289
Fastfetch is a system information tool. We only accept hardware or system-level software feature requests. For most personal uses, I recommend using the `Command` module to implement custom functionality, which can be used to grab output from a custom shell script:

doc/json_schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@
279279
"type": "string"
280280
},
281281
"packagesFormat": {
282-
"description": "Output format of the module `Packages`. See Wiki for formatting syntax\n 1. {all}: Number of all packages\n 2. {pacman}: Number of pacman packages\n 3. {pacman-branch}: Pacman branch on manjaro\n 4. {dpkg}: Number of dpkg packages\n 5. {rpm}: Number of rpm packages\n 6. {emerge}: Number of emerge packages\n 7. {eopkg}: Number of eopkg packages\n 8. {xbps}: Number of xbps packages\n 9. {nix-system}: Number of nix-system packages\n 10. {nix-user}: Number of nix-user packages\n 11. {nix-default}: Number of nix-default packages\n 12. {apk}: Number of apk packages\n 13. {pkg}: Number of pkg packages\n 14. {flatpak-system}: Number of flatpak-system app packages\n 15. {flatpak-user}: Number of flatpak-user app packages\n 16. {snap}: Number of snap packages\n 17. {brew}: Number of brew packages\n 18. {brew-cask}: Number of brew-cask packages\n 19. {macports}: Number of macports packages\n 20. {scoop}: Number of scoop packages\n 21. {choco}: Number of choco packages\n 22. {pkgtool}: Number of pkgtool packages\n 23. {paludis}: Number of paludis packages\n 24. {winget}: Number of winget packages\n 25. {opkg}: Number of opkg packages\n 26. {am-system}: Number of am-system packages\n 27. {sorcery}: Number of sorcery packages\n 28. {lpkg}: Number of lpkg packages\n 29. {lpkgbuild}: Number of lpkgbuild packages\n 30. {guix-system}: Number of guix-system packages\n 31. {guix-user}: Number of guix-user packages\n 32. {guix-home}: Number of guix-home packages\n 33. {linglong}: Number of linglong packages\n 34. {pacstall}: Number of pacstall packages\n 35. {mport}: Number of mport packages\n 36. {qi}: Number of qi packages\n 37. {am-user}: Number of am-user (aka appman) packages\n 38. {pkgsrc}: Number of pkgsrc packages\n 39. {hpkg-system}: Number of hpkg-system packages\n 40. {hpkg-user}: Number of hpkg-user packages\n 41. {pisi}: Number of pisi packages\n 42. {nix-all}: Total number of all nix packages\n 43. {flatpak-all}: Total number of all flatpak app packages\n 44. {brew-all}: Total number of all brew packages\n 45. {guix-all}: Total number of all guix packages\n 46. {hpkg-all}: Total number of all hpkg packages",
282+
"description": "Output format of the module `Packages`. See Wiki for formatting syntax\n 1. {all}: Number of all packages\n 2. {pacman}: Number of pacman packages\n 3. {pacman-branch}: Pacman branch on manjaro\n 4. {dpkg}: Number of dpkg packages\n 5. {rpm}: Number of rpm packages\n 6. {emerge}: Number of emerge packages\n 7. {eopkg}: Number of eopkg packages\n 8. {xbps}: Number of xbps packages\n 9. {nix-system}: Number of nix-system packages\n 10. {nix-user}: Number of nix-user packages\n 11. {nix-default}: Number of nix-default packages\n 12. {apk}: Number of apk packages\n 13. {pkg}: Number of pkg packages\n 14. {flatpak-system}: Number of flatpak-system app packages\n 15. {flatpak-user}: Number of flatpak-user app packages\n 16. {snap}: Number of snap packages\n 17. {brew}: Number of brew packages\n 18. {brew-cask}: Number of brew-cask packages\n 19. {macports}: Number of macports packages\n 20. {scoop}: Number of scoop packages\n 21. {choco}: Number of choco packages\n 22. {pkgtool}: Number of pkgtool packages\n 23. {paludis}: Number of paludis packages\n 24. {winget}: Number of winget packages\n 25. {opkg}: Number of opkg packages\n 26. {am-system}: Number of am-system packages\n 27. {sorcery}: Number of sorcery packages\n 28. {lpkg}: Number of lpkg packages\n 29. {lpkgbuild}: Number of lpkgbuild packages\n 30. {guix-system}: Number of guix-system packages\n 31. {guix-user}: Number of guix-user packages\n 32. {guix-home}: Number of guix-home packages\n 33. {linglong}: Number of linglong packages\n 34. {pacstall}: Number of pacstall packages\n 35. {mport}: Number of mport packages\n 36. {qi}: Number of qi packages\n 37. {am-user}: Number of am-user (aka appman) packages\n 38. {pkgsrc}: Number of pkgsrc packages\n 39. {hpkg-system}: Number of hpkg-system packages\n 40. {hpkg-user}: Number of hpkg-user packages\n 41. {pisi}: Number of pisi packages\n 42. {soar}: Number of soar packages\n 43. {nix-all}: Total number of all nix packages\n 44. {flatpak-all}: Total number of all flatpak app packages\n 45. {brew-all}: Total number of all brew packages\n 46. {guix-all}: Total number of all guix packages\n 47. {hpkg-all}: Total number of all hpkg packages",
283283
"type": "string"
284284
},
285285
"physicaldiskFormat": {

src/common/init.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "fastfetch.h"
2+
#include "common/init.h"
23
#include "common/parsing.h"
34
#include "common/thread.h"
45
#include "detection/displayserver/displayserver.h"

src/common/init.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#pragma once
2+
3+
void ffInitInstance(void);
4+
void ffStart(void);
5+
void ffFinish(void);
6+
void ffDestroyInstance(void);
7+
void ffListFeatures(void);

src/common/io/io_windows.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,14 @@ ssize_t ffReadFileDataRelative(HANDLE dfd, const char* fileName, size_t dataSize
147147

148148
bool ffPathExpandEnv(const char* in, FFstrbuf* out)
149149
{
150+
if (in[0] == '~') {
151+
if ((in[1] == '/' || in[1] == '\\' || in[1] == '\0') && !ffStrContainsC(in, '%')) {
152+
ffStrbufSet(out, &instance.state.platform.homeDir);
153+
ffStrbufAppendS(out, in + 1);
154+
return true;
155+
}
156+
}
157+
150158
DWORD length = ExpandEnvironmentStringsA(in, NULL, 0);
151159
if (length <= 1) return false;
152160

src/common/printing.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "fastfetch.h"
22
#include "common/printing.h"
3+
#include "logo/logo.h"
34
#include "util/textModifier.h"
45

56
void ffPrintLogoAndKey(const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, FFPrintType printType)

src/common/processing_windows.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,21 +130,30 @@ const char* ffProcessAppendOutput(FFstrbuf* buffer, char* const argv[], bool use
130130
switch (GetLastError())
131131
{
132132
case ERROR_IO_PENDING:
133-
if (!timeout || WaitForSingleObject(hChildPipeRead, (DWORD) timeout) != WAIT_OBJECT_0)
133+
#if __aarch64__
134+
if (!GetOverlappedResultEx(hChildPipeRead, &overlapped, &nRead, timeout < 0 ? INFINITE : (DWORD) timeout, FALSE))
135+
#else
136+
// To support Windows 7
137+
if (timeout >= 0 && WaitForSingleObject(hChildPipeRead, (DWORD) timeout) != WAIT_OBJECT_0)
134138
{
135139
CancelIo(hChildPipeRead);
136140
TerminateProcess(hProcess, 1);
137141
return "WaitForSingleObject(hChildPipeRead) failed or timeout (try increasing --processing-timeout)";
138142
}
139143

140144
if (!GetOverlappedResult(hChildPipeRead, &overlapped, &nRead, FALSE))
145+
#endif
141146
{
142147
if (GetLastError() == ERROR_BROKEN_PIPE)
143148
return NULL;
144149

145150
CancelIo(hChildPipeRead);
146151
TerminateProcess(hProcess, 1);
147-
return "GetOverlappedResult(hChildPipeRead) failed";
152+
return "GetOverlappedResult"
153+
#if __aarch64__
154+
"Ex"
155+
#endif
156+
"(hChildPipeRead) failed";
148157
}
149158
break;
150159

0 commit comments

Comments
 (0)