Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package fastfetch for openSUSE:Factory 
checked in at 2025-05-26 18:34:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fastfetch (Old)
 and      /work/SRC/openSUSE:Factory/.fastfetch.new.2732 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fastfetch"

Mon May 26 18:34:56 2025 rev:67 rq:1279681 version:2.44.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/fastfetch/fastfetch.changes      2025-05-20 
09:39:01.627829646 +0200
+++ /work/SRC/openSUSE:Factory/.fastfetch.new.2732/fastfetch.changes    
2025-05-26 18:36:37.406165434 +0200
@@ -1,0 +2,19 @@
+Fri May 23 22:21:22 UTC 2025 - RN <r_ni...@proton.me>
+
+- Update to 2.44.0:
+  Features:
+   * Add option `--disk-hide-folders` and `--disk-hide-fs` to hide 
+     specific mountpoints and filesystems in Disk module (Disk) 
+     - `--disk-hide-folders` defaults to `/efi:/boot:/boot/efi` on 
+       Linux and *BSD. Previously these EFI-related folders were 
+       hardcoded to be hidden on Linux.
+  Bugfixes:
+   * Ignore `/usr/bin/script` when detecting shell and terminal 
+     (gh#fastfetch-cli/fastfetch#1761)
+   * Fix compatibility with KDE Plasma 6.4 which is in beta 
+     currently (gh#fastfetch-cli/fastfetch#1765)
+  Logos:
+   * Add Kylin (gh#fastfetch-cli/fastfetch#1760)
+   * Add UBLinux (gh#fastfetch-cli/fastfetch#1764)
+
+-------------------------------------------------------------------

Old:
----
  fastfetch-2.43.0.tar.gz

New:
----
  fastfetch-2.44.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fastfetch.spec ++++++
--- /var/tmp/diff_new_pack.1XGRjf/_old  2025-05-26 18:36:38.122195471 +0200
+++ /var/tmp/diff_new_pack.1XGRjf/_new  2025-05-26 18:36:38.126195639 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           fastfetch
-Version:        2.43.0
+Version:        2.44.0
 Release:        0
 Summary:        Neofetch-like tool written mostly in C
 License:        MIT

++++++ fastfetch-2.43.0.tar.gz -> fastfetch-2.44.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/CHANGELOG.md 
new/fastfetch-2.44.0/CHANGELOG.md
--- old/fastfetch-2.43.0/CHANGELOG.md   2025-05-14 03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/CHANGELOG.md   2025-05-23 10:10:12.000000000 +0200
@@ -1,3 +1,18 @@
+# 2.44.0
+
+Features:
+* Add option `--disk-hide-folders` and `--disk-hide-fs` to hide specific 
mountpoints and filesystems in Disk module (Disk)
+    * `--disk-hide-folders` defaults to `/efi:/boot:/boot/efi` on Linux and 
*BSD. Previously these EFI-related folders were hardcoded to be hidden on Linux.
+
+Bugfixes:
+* Fix Apple Terminal compatibility with `--stat` (macOS, #1755)
+* Ignore `/usr/bin/script` when detecting shell and terminal (Terminal / 
Shell, #1761)
+* Fix compatibility with KDE Plasma 6.4 which is in beta currently (Display, 
Linux, #1765)
+
+Logos:
+* Add Kylin (#1760)
+* Add UBLinux (#1764)
+
 # 2.43.0
 
 Features:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/CMakeLists.txt 
new/fastfetch-2.44.0/CMakeLists.txt
--- old/fastfetch-2.43.0/CMakeLists.txt 2025-05-14 03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/CMakeLists.txt 2025-05-23 10:10:12.000000000 +0200
@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.12.0) # target_link_libraries with OBJECT 
libs & project homepage url
 
 project(fastfetch
-    VERSION 2.43.0
+    VERSION 2.44.0
     LANGUAGES C
     DESCRIPTION "Fast neofetch-like system information tool"
     HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/README.md 
new/fastfetch-2.44.0/README.md
--- old/fastfetch-2.43.0/README.md      2025-05-14 03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/README.md      2025-05-23 10:10:12.000000000 +0200
@@ -21,6 +21,8 @@
 <img src="screenshots/example3.png" width="48%" align="top" />
 <img src="screenshots/example5.png" height="15%" align="top" />
 
+According configuration files for examples are located 
[here](https://github.com/fastfetch-cli/fastfetch/tree/dev/presets/examples).
+
 There are [screenshots on different 
platforms](https://github.com/fastfetch-cli/fastfetch/wiki).
 
 ## Installation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/completions/fastfetch.fish 
new/fastfetch-2.44.0/completions/fastfetch.fish
--- old/fastfetch-2.43.0/completions/fastfetch.fish     2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/completions/fastfetch.fish     2025-05-23 
10:10:12.000000000 +0200
@@ -62,11 +62,17 @@
 echo '
 import json, subprocess, sys
 
+
 def main():
     data: dict[str, list[dict]] = 
json.loads(subprocess.check_output(["fastfetch", "--help-raw"]))
 
     for key in data:
         for flag in data[key]:
+            if flag["long"] == "logo-color-[1-9]":
+                for i in range(1, 10):
+                    print(f"""complete -c fastfetch -d "{flag["desc"]}" -l 
"logo-color-{i}" -x -a "(__fastfetch_complete_color)" """)
+                continue
+
             if flag.get("pseudo", False):
                 continue
 
@@ -75,7 +81,7 @@
                 command_prefix += f""" -o {flag["short"]}"""
 
             if "arg" in flag:
-                type: str = flag["arg"]["type"];
+                type: str = flag["arg"]["type"]
                 if type == "bool":
                     print(f"{command_prefix} -x -a 
\"(__fastfetch_complete_bool)\"")
                 elif type == "color":
@@ -98,6 +104,7 @@
             else:
                 print(f"{command_prefix} -f")
 
+
 if __name__ == "__main__":
     try:
         main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/debian/changelog 
new/fastfetch-2.44.0/debian/changelog
--- old/fastfetch-2.43.0/debian/changelog       2025-05-14 03:41:33.000000000 
+0200
+++ new/fastfetch-2.44.0/debian/changelog       2025-05-23 10:10:12.000000000 
+0200
@@ -1,3 +1,9 @@
+fastfetch (2.43.0) jammy; urgency=medium
+
+  * Update to 2.43.0
+
+ -- Carter Li <zhangsong...@live.cn>  Wed, 14 May 2025 09:49:50 +0800
+
 fastfetch (2.42.0) jammy; urgency=medium
 
   * Update to 2.42.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/debian/files 
new/fastfetch-2.44.0/debian/files
--- old/fastfetch-2.43.0/debian/files   2025-05-14 03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/debian/files   2025-05-23 10:10:12.000000000 +0200
@@ -1 +1 @@
-fastfetch_2.42.0_source.buildinfo universe/utils optional
+fastfetch_2.43.0_source.buildinfo universe/utils optional
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/doc/json_schema.json 
new/fastfetch-2.44.0/doc/json_schema.json
--- old/fastfetch-2.43.0/doc/json_schema.json   2025-05-14 03:41:33.000000000 
+0200
+++ new/fastfetch-2.44.0/doc/json_schema.json   2025-05-23 10:10:12.000000000 
+0200
@@ -1754,6 +1754,14 @@
                                         "type": "string",
                                         "description": "A colon (semicolon on 
Windows) separated list of folder paths for the disk output\nDefault: auto 
detection using mount-points\nThis option overrides other `show*` options"
                                     },
+                                    "hideFolders": {
+                                        "type": "string",
+                                        "description": "A colon (semicolon on 
Windows) separated list of folder paths to hide from the disk output\nDefault: 
/efi:/boot:/boot/efi"
+                                    },
+                                    "hideFS": {
+                                        "type": "string",
+                                        "description": "A colon separated file 
systems to hide from the disk output"
+                                    },
                                     "showExternal": {
                                         "type": "boolean",
                                         "description": "Set if external volume 
should be printed",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/common/commandoption.c 
new/fastfetch-2.44.0/src/common/commandoption.c
--- old/fastfetch-2.43.0/src/common/commandoption.c     2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/common/commandoption.c     2025-05-23 
10:10:12.000000000 +0200
@@ -134,7 +134,7 @@
                 int len = snprintf(str, sizeof str, "%.3fms", ms);
                 if (thres > 0)
                     snprintf(str, sizeof str, "\e[%sm%.3fms\e[m", (ms <= thres 
? FF_COLOR_FG_GREEN : ms <= 2 * thres ? FF_COLOR_FG_YELLOW : FF_COLOR_FG_RED), 
ms);
-                printf("\e[s\e[1A\e[9999999C\e[%dD%s\e[u", len, str); // Save; 
Up 1; Right 9999999; Left <len>; Print <str>; Load
+                printf("\e7\e[1A\e[9999999C\e[%dD%s\e8", len, str); // Save; 
Up 1; Right 9999999; Left <len>; Print <str>; Load
             }
         }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/common/jsonconfig.c 
new/fastfetch-2.44.0/src/common/jsonconfig.c
--- old/fastfetch-2.43.0/src/common/jsonconfig.c        2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/common/jsonconfig.c        2025-05-23 
10:10:12.000000000 +0200
@@ -224,7 +224,7 @@
                 int len = snprintf(str, sizeof str, "%.3fms", ms);
                 if (thres > 0)
                     snprintf(str, sizeof str, "\e[%sm%.3fms\e[m", (ms <= thres 
? FF_COLOR_FG_GREEN : ms <= 2 * thres ? FF_COLOR_FG_YELLOW : FF_COLOR_FG_RED), 
ms);
-                printf("\e[s\e[1A\e[9999999C\e[%dD%s\e[u", len, str); // Save; 
Up 1; Right 9999999; Left <len>; Print <str>; Load
+                printf("\e7\e[1A\e[9999999C\e[%dD%s\e8", len, str); // Save; 
Up 1; Right 9999999; Left <len>; Print <str>; Load
             }
         }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/data/help.json 
new/fastfetch-2.44.0/src/data/help.json
--- old/fastfetch-2.43.0/src/data/help.json     2025-05-14 03:41:33.000000000 
+0200
+++ new/fastfetch-2.44.0/src/data/help.json     2025-05-23 10:10:12.000000000 
+0200
@@ -841,6 +841,22 @@
             }
         },
         {
+            "long": "disk-hide-folders",
+            "desc": "A colon (semicolon on Windows) separated list of folder 
paths to hide from the disk output",
+            "arg": {
+                "type": "path",
+                "default": "/efi:/boot:/boot/efi"
+            }
+        },
+        {
+            "long": "disk-hide-fs",
+            "desc": "A colon separated list of file systems to hide from the 
disk output",
+            "arg": {
+                "type": "string",
+                "default": ""
+            }
+        },
+        {
             "long": "disk-show-regular",
             "desc": "Specify whether regular volumes should be displayed",
             "arg": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/detection/disk/disk.c 
new/fastfetch-2.44.0/src/detection/disk/disk.c
--- old/fastfetch-2.43.0/src/detection/disk/disk.c      2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/disk/disk.c      2025-05-23 
10:10:12.000000000 +0200
@@ -1,6 +1,6 @@
 #include "disk.h"
 
-bool ffDiskMatchMountpoint(FFDiskOptions* options, const char* mountpoint)
+bool ffDiskMatchMountpoint(FFstrbuf* folders, const char* mountpoint)
 {
     #ifdef _WIN32
     const char separator = ';';
@@ -11,12 +11,12 @@
     uint32_t mountpointLength = (uint32_t) strlen(mountpoint);
 
     uint32_t startIndex = 0;
-    while(startIndex < options->folders.length)
+    while(startIndex < folders->length)
     {
-        uint32_t colonIndex = ffStrbufNextIndexC(&options->folders, 
startIndex, separator);
+        uint32_t colonIndex = ffStrbufNextIndexC(folders, startIndex, 
separator);
 
         uint32_t folderLength = colonIndex - startIndex;
-        if (folderLength == mountpointLength && memcmp(options->folders.chars 
+ startIndex, mountpoint, mountpointLength) == 0)
+        if (folderLength == mountpointLength && memcmp(folders->chars + 
startIndex, mountpoint, mountpointLength) == 0)
             return true;
 
         startIndex = colonIndex + 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/detection/disk/disk.h 
new/fastfetch-2.44.0/src/detection/disk/disk.h
--- old/fastfetch-2.43.0/src/detection/disk/disk.h      2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/disk/disk.h      2025-05-23 
10:10:12.000000000 +0200
@@ -28,4 +28,4 @@
 const char* ffDetectDisks(FFDiskOptions* options, FFlist* disks /* list of 
FFDisk */);
 
 const char* ffDetectDisksImpl(FFDiskOptions* options, FFlist* disks);
-bool ffDiskMatchMountpoint(FFDiskOptions* options, const char* mountpoint);
+bool ffDiskMatchMountpoint(FFstrbuf* folders, const char* mountpoint);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/detection/disk/disk_bsd.c 
new/fastfetch-2.44.0/src/detection/disk/disk_bsd.c
--- old/fastfetch-2.43.0/src/detection/disk/disk_bsd.c  2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/disk/disk_bsd.c  2025-05-23 
10:10:12.000000000 +0200
@@ -145,7 +145,7 @@
     {
         if(__builtin_expect(options->folders.length > 0, 0))
         {
-            if(!ffDiskMatchMountpoint(options, fs->f_mntonname))
+            if(!ffDiskMatchMountpoint(&options->folders, fs->f_mntonname))
                 continue;
         }
         else if(!ffStrEquals(fs->f_mntonname, "/") && 
!ffStrStartsWith(fs->f_mntfromname, "/dev/") && !ffStrEquals(fs->f_fstypename, 
"zfs"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/detection/disk/disk_haiku.cpp 
new/fastfetch-2.44.0/src/detection/disk/disk_haiku.cpp
--- old/fastfetch-2.43.0/src/detection/disk/disk_haiku.cpp      2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/disk/disk_haiku.cpp      2025-05-23 
10:10:12.000000000 +0200
@@ -23,7 +23,7 @@
 
         if (__builtin_expect(options->folders.length, 0))
         {
-            if (!ffDiskMatchMountpoint(options, path.Path()))
+            if (!ffDiskMatchMountpoint(&options->folders, path.Path()))
                 continue;
         }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/detection/disk/disk_linux.c 
new/fastfetch-2.44.0/src/detection/disk/disk_linux.c
--- old/fastfetch-2.43.0/src/detection/disk/disk_linux.c        2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/disk/disk_linux.c        2025-05-23 
10:10:12.000000000 +0200
@@ -220,7 +220,7 @@
 
 static void detectType(const FFlist* disks, FFDisk* currentDisk, struct 
mntent* device)
 {
-    if(ffStrbufStartsWithS(&currentDisk->mountpoint, "/boot") || 
ffStrbufStartsWithS(&currentDisk->mountpoint, "/efi"))
+    if(hasmntopt(device, "x-gvfs-hide") || hasmntopt(device, "hidden"))
         currentDisk->type = FF_DISK_VOLUME_TYPE_HIDDEN_BIT;
     else if(isSubvolume(disks, currentDisk))
         currentDisk->type = FF_DISK_VOLUME_TYPE_SUBVOLUME_BIT;
@@ -281,7 +281,7 @@
     {
         if (__builtin_expect(options->folders.length, 0))
         {
-            if (!ffDiskMatchMountpoint(options, device->mnt_dir))
+            if (!ffDiskMatchMountpoint(&options->folders, device->mnt_dir))
                 continue;
         }
         else if(!isPhysicalDevice(device))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/detection/disk/disk_sunos.c 
new/fastfetch-2.44.0/src/detection/disk/disk_sunos.c
--- old/fastfetch-2.43.0/src/detection/disk/disk_sunos.c        2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/disk/disk_sunos.c        2025-05-23 
10:10:12.000000000 +0200
@@ -113,7 +113,7 @@
     {
         if (__builtin_expect(options->folders.length, 0))
         {
-            if (!ffDiskMatchMountpoint(options, device.mnt_mountp))
+            if (!ffDiskMatchMountpoint(&options->folders, device.mnt_mountp))
                 continue;
         }
         else if(!isPhysicalDevice(&device))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/detection/disk/disk_windows.c 
new/fastfetch-2.44.0/src/detection/disk/disk_windows.c
--- old/fastfetch-2.43.0/src/detection/disk/disk_windows.c      2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/disk/disk_windows.c      2025-05-23 
10:10:12.000000000 +0200
@@ -47,7 +47,7 @@
 
         if (__builtin_expect((long) options->folders.length, 0))
         {
-            if (!ffDiskMatchMountpoint(options, buffer.chars))
+            if (!ffDiskMatchMountpoint(&options->folders, buffer.chars))
                 continue;
         }
         else if(driveType == DRIVE_NO_ROOT_DIR)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fastfetch-2.43.0/src/detection/displayserver/linux/wayland/kde-output-device-v2-client-protocol.h
 
new/fastfetch-2.44.0/src/detection/displayserver/linux/wayland/kde-output-device-v2-client-protocol.h
--- 
old/fastfetch-2.43.0/src/detection/displayserver/linux/wayland/kde-output-device-v2-client-protocol.h
       2025-05-14 03:41:33.000000000 +0200
+++ 
new/fastfetch-2.44.0/src/detection/displayserver/linux/wayland/kde-output-device-v2-client-protocol.h
       2025-05-23 10:10:12.000000000 +0200
@@ -5,7 +5,7 @@
 
 #include <stdint.h>
 #include <stddef.h>
-#include <wayland-util.h>
+#include <wayland-client.h>
 
 #ifdef  __cplusplus
 extern "C" {
@@ -214,6 +214,26 @@
         * @since 9
         */
        KDE_OUTPUT_DEVICE_V2_CAPABILITY_BRIGHTNESS = 0x80,
+       /**
+        * if this outputdevice supports the built-in color profile
+        * @since 12
+        */
+       KDE_OUTPUT_DEVICE_V2_CAPABILITY_BUILT_IN_COLOR = 0x100,
+       /**
+        * if this outputdevice supports DDC/CI
+        * @since 14
+        */
+       KDE_OUTPUT_DEVICE_V2_CAPABILITY_DDC_CI = 0x200,
+       /**
+        * if this outputdevice supports setting max bpc
+        * @since 15
+        */
+       KDE_OUTPUT_DEVICE_V2_CAPABILITY_MAX_BITS_PER_COLOR = 0x400,
+       /**
+        * if this outputdevice supports EDR
+        * @since 16
+        */
+       KDE_OUTPUT_DEVICE_V2_CAPABILITY_EDR = 0x800,
 };
 /**
  * @ingroup iface_kde_output_device_v2
@@ -235,6 +255,22 @@
  * @ingroup iface_kde_output_device_v2
  */
 #define KDE_OUTPUT_DEVICE_V2_CAPABILITY_BRIGHTNESS_SINCE_VERSION 9
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_CAPABILITY_BUILT_IN_COLOR_SINCE_VERSION 12
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_CAPABILITY_DDC_CI_SINCE_VERSION 14
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_CAPABILITY_MAX_BITS_PER_COLOR_SINCE_VERSION 15
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_CAPABILITY_EDR_SINCE_VERSION 16
 #endif /* KDE_OUTPUT_DEVICE_V2_CAPABILITY_ENUM */
 
 #ifndef KDE_OUTPUT_DEVICE_V2_VRR_POLICY_ENUM
@@ -316,6 +352,18 @@
 };
 #endif /* KDE_OUTPUT_DEVICE_V2_COLOR_POWER_TRADEOFF_ENUM */
 
+#ifndef KDE_OUTPUT_DEVICE_V2_EDR_POLICY_ENUM
+#define KDE_OUTPUT_DEVICE_V2_EDR_POLICY_ENUM
+/**
+ * @ingroup iface_kde_output_device_v2
+ * when the compositor may make use of EDR
+ */
+enum kde_output_device_v2_edr_policy {
+       KDE_OUTPUT_DEVICE_V2_EDR_POLICY_NEVER = 0,
+       KDE_OUTPUT_DEVICE_V2_EDR_POLICY_ALWAYS = 1,
+};
+#endif /* KDE_OUTPUT_DEVICE_V2_EDR_POLICY_ENUM */
+
 /**
  * @ingroup iface_kde_output_device_v2
  * @struct kde_output_device_v2_listener
@@ -658,6 +706,74 @@
        void (*dimming)(void *data,
                        struct kde_output_device_v2 *kde_output_device_v2,
                        uint32_t multiplier);
+       /**
+        * source output for mirroring
+        *
+        *
+        * @param source uuid of the source output
+        * @since 13
+        */
+       void (*replication_source)(void *data,
+                                  struct kde_output_device_v2 
*kde_output_device_v2,
+                                  const char *source);
+       /**
+        * if DDC/CI should be used to control brightness etc.
+        *
+        * If the ddc_ci capability is present, this determines if
+        * settings such as brightness, contrast or others should be set
+        * using DDC/CI.
+        * @param allowed 1 if allowed, 0 if disabled
+        * @since 14
+        */
+       void (*ddc_ci_allowed)(void *data,
+                              struct kde_output_device_v2 
*kde_output_device_v2,
+                              uint32_t allowed);
+       /**
+        * override max bpc
+        *
+        * This limits the amount of bits per color that are sent to the
+        * display.
+        * @param max_bpc 0 for the default / automatic
+        * @since 15
+        */
+       void (*max_bits_per_color)(void *data,
+                                  struct kde_output_device_v2 
*kde_output_device_v2,
+                                  uint32_t max_bpc);
+       /**
+        * range of max bits per color value
+        *
+        *
+        * @param min_value the minimum supported by the driver
+        * @param max_value the maximum supported by the driver
+        * @since 15
+        */
+       void (*max_bits_per_color_range)(void *data,
+                                        struct kde_output_device_v2 
*kde_output_device_v2,
+                                        uint32_t min_value,
+                                        uint32_t max_value);
+       /**
+        * if and to what value automatic max bpc is limited
+        *
+        *
+        * @param max_bpc_limit which value automatic bpc gets limited to. 0 if 
not limited
+        * @since 15
+        */
+       void (*automatic_max_bits_per_color_limit)(void *data,
+                                                  struct kde_output_device_v2 
*kde_output_device_v2,
+                                                  uint32_t max_bpc_limit);
+       /**
+        * when the compositor may apply EDR
+        *
+        * When EDR is enabled, the compositor may increase the backlight
+        * beyond the user-specified setting, in order to present HDR
+        * content on displays without native HDR support. This will
+        * usually result in better visuals, but also increases battery
+        * usage.
+        * @since 16
+        */
+       void (*edr_policy)(void *data,
+                          struct kde_output_device_v2 *kde_output_device_v2,
+                          uint32_t policy);
 };
 
 /**
@@ -779,6 +895,30 @@
  * @ingroup iface_kde_output_device_v2
  */
 #define KDE_OUTPUT_DEVICE_V2_DIMMING_SINCE_VERSION 11
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_REPLICATION_SOURCE_SINCE_VERSION 13
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_DDC_CI_ALLOWED_SINCE_VERSION 14
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_MAX_BITS_PER_COLOR_SINCE_VERSION 15
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_MAX_BITS_PER_COLOR_RANGE_SINCE_VERSION 15
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_AUTOMATIC_MAX_BITS_PER_COLOR_LIMIT_SINCE_VERSION 
15
+/**
+ * @ingroup iface_kde_output_device_v2
+ */
+#define KDE_OUTPUT_DEVICE_V2_EDR_POLICY_SINCE_VERSION 16
 
 
 /** @ingroup iface_kde_output_device_v2 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fastfetch-2.43.0/src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c
 
new/fastfetch-2.44.0/src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c
--- 
old/fastfetch-2.43.0/src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c
      2025-05-14 03:41:33.000000000 +0200
+++ 
new/fastfetch-2.44.0/src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c
      2025-05-23 10:10:12.000000000 +0200
@@ -60,12 +60,18 @@
        { "brightness", "8u", kde_output_device_v2_types + 0 },
        { "color_power_tradeoff", "10u", kde_output_device_v2_types + 0 },
        { "dimming", "11u", kde_output_device_v2_types + 0 },
+       { "replication_source", "13s", kde_output_device_v2_types + 0 },
+       { "ddc_ci_allowed", "14u", kde_output_device_v2_types + 0 },
+       { "max_bits_per_color", "15u", kde_output_device_v2_types + 0 },
+       { "max_bits_per_color_range", "15uu", kde_output_device_v2_types + 0 },
+       { "automatic_max_bits_per_color_limit", "15u", 
kde_output_device_v2_types + 0 },
+       { "edr_policy", "16u", kde_output_device_v2_types + 0 },
 };
 
 WL_EXPORT const struct wl_interface kde_output_device_v2_interface = {
-       "kde_output_device_v2", 11,
+       "kde_output_device_v2", 16,
        0, NULL,
-       27, kde_output_device_v2_events,
+       33, kde_output_device_v2_events,
 };
 
 static const struct wl_message kde_output_device_mode_v2_events[] = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fastfetch-2.43.0/src/detection/displayserver/linux/wayland/kde-output.c 
new/fastfetch-2.44.0/src/detection/displayserver/linux/wayland/kde-output.c
--- old/fastfetch-2.43.0/src/detection/displayserver/linux/wayland/kde-output.c 
2025-05-14 03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/displayserver/linux/wayland/kde-output.c 
2025-05-23 10:10:12.000000000 +0200
@@ -137,6 +137,12 @@
     display->hdrEnabled = !!hdr_enabled;
 }
 
+static void waylandKdeMaxBitsPerColorListener(void *data, FF_MAYBE_UNUSED 
struct kde_output_device_v2 *kde_output_device_v2, uint32_t max_bpc)
+{
+    WaylandDisplay* display = data;
+    display->bitDepth = (uint8_t) max_bpc;
+}
+
 static struct kde_output_device_v2_listener outputListener = {
     .geometry = waylandKdeGeometryListener,
     .current_mode = waylandKdeCurrentModeListener,
@@ -165,6 +171,12 @@
     .brightness = (void*) stubListener,
     .color_power_tradeoff = (void*) stubListener,
     .dimming = (void*) stubListener,
+    .replication_source = (void*) stubListener,
+    .ddc_ci_allowed = (void*) stubListener,
+    .max_bits_per_color = (void*) waylandKdeMaxBitsPerColorListener,
+    .max_bits_per_color_range = (void*) stubListener,
+    .automatic_max_bits_per_color_limit = (void*) stubListener,
+    .edr_policy = (void*) stubListener,
 };
 
 const char* ffWaylandHandleKdeOutput(WaylandData* wldata, struct wl_registry* 
registry, uint32_t name, uint32_t version)
@@ -237,6 +249,7 @@
         item->manufactureYear = display.myear;
         item->manufactureWeek = display.mweek;
         item->serial = display.serial;
+        item->bitDepth = display.bitDepth;
     }
 
     ffStrbufDestroy(&display.description);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fastfetch-2.43.0/src/detection/displayserver/linux/wayland/wayland.h 
new/fastfetch-2.44.0/src/detection/displayserver/linux/wayland/wayland.h
--- old/fastfetch-2.43.0/src/detection/displayserver/linux/wayland/wayland.h    
2025-05-14 03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/displayserver/linux/wayland/wayland.h    
2025-05-23 10:10:12.000000000 +0200
@@ -34,6 +34,7 @@
 typedef struct WaylandDisplay
 {
     WaylandData* parent;
+    void* internal;
     int32_t width;
     int32_t height;
     int32_t refreshRate;
@@ -55,7 +56,7 @@
     uint16_t myear;
     uint16_t mweek;
     uint32_t serial;
-    void* internal;
+    uint8_t bitDepth;
 } WaylandDisplay;
 
 inline static void stubListener(void* data, ...)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fastfetch-2.43.0/src/detection/terminalshell/terminalshell_linux.c 
new/fastfetch-2.44.0/src/detection/terminalshell/terminalshell_linux.c
--- old/fastfetch-2.43.0/src/detection/terminalshell/terminalshell_linux.c      
2025-05-14 03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/detection/terminalshell/terminalshell_linux.c      
2025-05-23 10:10:12.000000000 +0200
@@ -55,9 +55,10 @@
                 ffStrbufEqualS(&result->processName, "valgrind")            ||
                 ffStrbufEqualS(&result->processName, "fastfetch")           || 
//994
                 ffStrbufEqualS(&result->processName, "flashfetch")          ||
+                ffStrbufEqualS(&result->processName, "proot")               ||
+                ffStrbufEqualS(&result->processName, "script")              ||
                 ffStrbufContainS(&result->processName, "debug")             ||
                 ffStrbufContainS(&result->processName, "command-not-")      ||
-                ffStrbufEqualS(&result->processName, "proot")              ||
                 ffStrbufEndsWithS(&result->processName, ".sh")
             )
             {
@@ -107,6 +108,7 @@
             ffStrbufEqualS(&result->processName, "clifm")      || // 
https://github.com/leo-arch/clifm/issues/289
             ffStrbufEqualS(&result->processName, "chezmoi")    || // #762
             ffStrbufEqualS(&result->processName, "proot")      ||
+            ffStrbufEqualS(&result->processName, "script")     ||
             #ifdef __linux__
             ffStrbufStartsWithS(&result->processName, "flatpak-") || // #707
             #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/logo/ascii/kylin.txt 
new/fastfetch-2.44.0/src/logo/ascii/kylin.txt
--- old/fastfetch-2.43.0/src/logo/ascii/kylin.txt       1970-01-01 
01:00:00.000000000 +0100
+++ new/fastfetch-2.44.0/src/logo/ascii/kylin.txt       2025-05-23 
10:10:12.000000000 +0200
@@ -0,0 +1,22 @@
+                 $1++
+             $2*  ***
+           $2*******
+         $2*******$1++
+      $2********$1+$3===
+    $2******$1#$2*$1+$3======
+   $2*******$1#$2***$1++$3===
+   $2*********$1+$2**$3===
+  $1##$2*********$1##$3==                  $3====$1+
+$4%$1##$2****$1++$3==$1+$2****$1#                $2***$1+$3=$2**
+$1#$2****$1++$3=====$1++$2****$1##            $2********
+$1####$2*$1+$3=======$1+$2******$3===$1-     $2***$1#$2*$1##$2****
+ $1#$4%$1#$2******$1+$2**$1+$3==$1++$2**$3=======$1+$2*$1+$2*$1#$4%
+ $4%$1#$2****$1+$2******$3=====$1+$3====$1+++$3==$2**
+  $1#$2*********$1##$2***$1###$2********$1##$4%
+   $2***$1##$4%$1#$4%%%%$2*****$1#$2*$1###$2*****$1#$4%
+   $2*$1#$4%%%$1#$4%%%%%$2****   $4%%$2*******$1#$4%
+   $1#$4%%%%%%          $4%%%$1##$2***$1###$4%%
+    $2**$1#$4%           $4%%%%$1#$4% $2**$1#$2**$1##
+   $1###$4%%         $4%%%%%$1   $4%%%$2***
+ $4%%%%%%        $4%%%%%%%$1  $4%%%%$1#$2*
+ $4%%%%%%                $4%%%%%%$1+$3=
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/logo/ascii/ublinux.txt 
new/fastfetch-2.44.0/src/logo/ascii/ublinux.txt
--- old/fastfetch-2.43.0/src/logo/ascii/ublinux.txt     1970-01-01 
01:00:00.000000000 +0100
+++ new/fastfetch-2.44.0/src/logo/ascii/ublinux.txt     2025-05-23 
10:10:12.000000000 +0200
@@ -0,0 +1,19 @@
+$1              UUU
+$1          UUUUUUUUUUU
+$1       UUUUUUUUUUUUUUUUU
+$1   UUUUUUUUUUUUUUUUUUUUUUUUU
+$1UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU$3#.
+$1UU$2BBBBB$1UUUUUU$2BBBBBBBBBBB.$1UUUUUU$3##
+$1UU$2BBBBB$1UUUUUU$2BBBBBBBBBBBBB:$1UUUU$3##
+$1UU$2BBBBB$1UUUUUU$2BBBBB$1UUUU$2BBBBB$1UUUU$3##
+$1UU$2BBBBB$1UUUUUU$2BBBBB$1UUUU$2BBBBB$1UUUU$3##
+$1UU$2BBBBB$1UUUUUU$2BBBBBBBBBBBB$1UUUUUU$3##
+$1UU$2BBBBB$1UUUUUU$2BBBBB$1UUUU,$2BBBB.$1UUU$3##
+$1UUU$2BBBBB$1UUUUU$2BBBBB$1UUUUU$2BBBBB$1UUU$3##
+$1UUU$2BBBBB$1UUUUU$2BBBBB$1UUUUU$2BBBBB$1UUU$3##
+$1UUU#$2BBBBBBBBBBBBBBBBBBBBBBB$1UUUU$3##
+$1UUUUUU$2'BBBBBBBBBBBBBBBB'$1UUUUUUU$3##
+$1   UUUUUUUUUUUUUUUUUUUUUUUUU$3##'
+$1       UUUUUUUUUUUUUUUUU$3###'
+$1          UUUUUUUUUUU$3###'
+$1              UUU$3###'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/logo/ascii/ublinux_small.txt 
new/fastfetch-2.44.0/src/logo/ascii/ublinux_small.txt
--- old/fastfetch-2.43.0/src/logo/ascii/ublinux_small.txt       1970-01-01 
01:00:00.000000000 +0100
+++ new/fastfetch-2.44.0/src/logo/ascii/ublinux_small.txt       2025-05-23 
10:10:12.000000000 +0200
@@ -0,0 +1,11 @@
+$1       UUUU
+$1    UUUUUUUUUU
+$1 $2BBB$1UUUU$2BBBBBB$1UU$3#
+$1U$2BBB$1UUUU$2BBB$1UUU$2B$1UU$3#
+$1U$2BBB$1UUUU$2BBB$1UUU$2B$1UU$3#
+$1U$2BBB$1UUUU$2BBBBBB$1UUU$3#
+$1U$2BBB$1UUUU$2BBB$1UUU$2BB$1U$3#
+$1UU$2BBB$1UUU$2BBB$1UUU$2BB$1U$3#
+$1 UU$2BBBBBBBBBBB$1UU$3#
+$1    UUUUUUUUU$3#
+$1       UUU$3#
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/logo/builtin.c 
new/fastfetch-2.44.0/src/logo/builtin.c
--- old/fastfetch-2.43.0/src/logo/builtin.c     2025-05-14 03:41:33.000000000 
+0200
+++ new/fastfetch-2.44.0/src/logo/builtin.c     2025-05-23 10:10:12.000000000 
+0200
@@ -2516,6 +2516,19 @@
         .colorKeys = FF_COLOR_FG_BLUE,
         .colorTitle = FF_COLOR_FG_BLUE,
     },
+    // Kylin
+    {
+        .names = {"Kylin", "kylin"},
+        .lines = FASTFETCH_DATATEXT_LOGO_KYLIN,
+        .colors = {
+            FF_COLOR_FG_BLUE,
+            FF_COLOR_FG_CYAN,
+            FF_COLOR_FG_WHITE,
+            FF_COLOR_FG_LIGHT_BLACK
+        },
+        .colorKeys = FF_COLOR_FG_BLUE,
+        .colorTitle = FF_COLOR_FG_BLUE,
+    },
     // LAST
     {},
 };
@@ -4722,6 +4735,31 @@
 };
 
 static const FFlogo U[] = {
+    // UBLinux
+    {
+        .names = {"UBLinux"},
+        .lines = FASTFETCH_DATATEXT_LOGO_UBLINUX,
+        .colors = {
+            FF_COLOR_FG_256 "38",
+            FF_COLOR_FG_WHITE,
+            FF_COLOR_FG_LIGHT_BLACK,
+        },
+        .colorKeys = FF_COLOR_FG_256 "38",
+        .colorTitle = FF_COLOR_FG_WHITE,
+    },
+    // UBLinuxSmall
+    {
+        .names = {"UBLinux_small"},
+        .type = FF_LOGO_LINE_TYPE_SMALL_BIT,
+        .lines = FASTFETCH_DATATEXT_LOGO_UBLINUX_SMALL,
+        .colors = {
+            FF_COLOR_FG_256 "38",
+            FF_COLOR_FG_WHITE,
+            FF_COLOR_FG_LIGHT_BLACK,
+        },
+        .colorKeys = FF_COLOR_FG_256 "38",
+        .colorTitle = FF_COLOR_FG_WHITE,
+    },
     // Ubuntu
     {
         .names = {"ubuntu", "ubuntu-linux"},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/modules/disk/disk.c 
new/fastfetch-2.44.0/src/modules/disk/disk.c
--- old/fastfetch-2.43.0/src/modules/disk/disk.c        2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/modules/disk/disk.c        2025-05-23 
10:10:12.000000000 +0200
@@ -179,6 +179,12 @@
             if(__builtin_expect(options->folders.length == 0, 1) && 
(disk->type & ~options->showTypes))
                 continue;
 
+            if (options->hideFolders.length && 
ffDiskMatchMountpoint(&options->hideFolders, disk->mountpoint.chars))
+                continue;
+
+            if (options->hideFS.length && 
ffStrbufMatchSeparated(&disk->filesystem, &options->hideFS, ':'))
+                continue;
+
             printDisk(options, disk, ++index);
         }
     }
@@ -205,6 +211,18 @@
         return true;
     }
 
+    if (ffStrEqualsIgnCase(subKey, "hide-folders"))
+    {
+        ffOptionParseString(key, value, &options->hideFolders);
+        return true;
+    }
+
+    if (ffStrEqualsIgnCase(subKey, "hide-fs"))
+    {
+        ffOptionParseString(key, value, &options->hideFS);
+        return true;
+    }
+
     if (ffStrEqualsIgnCase(subKey, "show-regular"))
     {
         if (ffOptionParseBoolean(value))
@@ -293,6 +311,18 @@
             continue;
         }
 
+        if (ffStrEqualsIgnCase(key, "hideFolders"))
+        {
+            ffStrbufSetS(&options->hideFolders, yyjson_get_str(val));
+            continue;
+        }
+
+        if (ffStrEqualsIgnCase(key, "hideFS"))
+        {
+            ffStrbufSetS(&options->hideFS, yyjson_get_str(val));
+            continue;
+        }
+
         if (ffStrEqualsIgnCase(key, "showExternal"))
         {
             if (yyjson_get_bool(val))
@@ -382,6 +412,12 @@
     if (!ffStrbufEqual(&options->folders, &defaultOptions.folders))
         yyjson_mut_obj_add_strbuf(doc, module, "folders", &options->folders);
 
+    if (!ffStrbufEqual(&options->hideFolders, &defaultOptions.hideFolders))
+        yyjson_mut_obj_add_strbuf(doc, module, "hideFolders", 
&options->hideFolders);
+
+    if (!ffStrbufEqual(&options->hideFS, &defaultOptions.hideFS))
+        yyjson_mut_obj_add_strbuf(doc, module, "hideFS", &options->hideFS);
+
     if (defaultOptions.calcType != options->calcType)
         yyjson_mut_obj_add_bool(doc, module, "useAvailable", options->calcType 
== FF_DISK_CALC_TYPE_AVAILABLE);
 
@@ -496,6 +532,12 @@
     ffOptionInitModuleArg(&options->moduleArgs, "");
 
     ffStrbufInit(&options->folders);
+    #if _WIN32 || __APPLE__ || __ANDROID__
+    ffStrbufInit(&options->hideFolders);
+    #else
+    ffStrbufInitStatic(&options->hideFolders, "/efi:/boot:/boot/efi");
+    #endif
+    ffStrbufInit(&options->hideFS);
     options->showTypes = FF_DISK_VOLUME_TYPE_REGULAR_BIT | 
FF_DISK_VOLUME_TYPE_EXTERNAL_BIT | FF_DISK_VOLUME_TYPE_READONLY_BIT;
     options->calcType = FF_DISK_CALC_TYPE_FREE;
     options->percent = (FFPercentageModuleConfig) { 50, 80, 0 };
@@ -504,4 +546,7 @@
 void ffDestroyDiskOptions(FFDiskOptions* options)
 {
     ffOptionDestroyModuleArg(&options->moduleArgs);
+    ffStrbufDestroy(&options->folders);
+    ffStrbufDestroy(&options->hideFolders);
+    ffStrbufDestroy(&options->hideFS);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/modules/disk/option.h 
new/fastfetch-2.44.0/src/modules/disk/option.h
--- old/fastfetch-2.43.0/src/modules/disk/option.h      2025-05-14 
03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/src/modules/disk/option.h      2025-05-23 
10:10:12.000000000 +0200
@@ -29,6 +29,8 @@
     FFModuleArgs moduleArgs;
 
     FFstrbuf folders;
+    FFstrbuf hideFolders;
+    FFstrbuf hideFS;
     FFDiskVolumeType showTypes;
     FFDiskCalcType calcType;
     FFPercentageModuleConfig percent;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/util/FFstrbuf.c 
new/fastfetch-2.44.0/src/util/FFstrbuf.c
--- old/fastfetch-2.43.0/src/util/FFstrbuf.c    2025-05-14 03:41:33.000000000 
+0200
+++ new/fastfetch-2.44.0/src/util/FFstrbuf.c    2025-05-23 10:10:12.000000000 
+0200
@@ -607,3 +607,32 @@
 
     return changed;
 }
+
+/// @brief Check if a separated string contains a substring.
+/// @param strbuf The substring to check.
+/// @param compLength The length of the separated string to check.
+/// @param comp The separated string to check.
+/// @param separator The separator character.
+bool ffStrbufMatchSeparatedNS(const FFstrbuf* strbuf, uint32_t compLength, 
const char* comp, char separator)
+{
+    if (strbuf->length == 0)
+        return true;
+
+    if (compLength == 0)
+        return false;
+
+    for (const char* p = comp; p < comp + compLength;)
+    {
+        const char* colon = memchr(p, separator, compLength);
+        if (colon == NULL)
+            return strcmp(strbuf->chars, p) == 0;
+
+        uint32_t substrLength = (uint32_t) (colon - p);
+        if (strbuf->length == substrLength && memcmp(strbuf->chars, p, 
substrLength) == 0)
+            return true;
+
+        p = colon + 1;
+    }
+
+    return false;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/src/util/FFstrbuf.h 
new/fastfetch-2.44.0/src/util/FFstrbuf.h
--- old/fastfetch-2.43.0/src/util/FFstrbuf.h    2025-05-14 03:41:33.000000000 
+0200
+++ new/fastfetch-2.44.0/src/util/FFstrbuf.h    2025-05-23 10:10:12.000000000 
+0200
@@ -92,6 +92,7 @@
 bool ffStrbufGetline(char** lineptr, size_t* n, FFstrbuf* buffer);
 void ffStrbufGetlineRestore(char** lineptr, size_t* n, FFstrbuf* buffer);
 bool ffStrbufRemoveDupWhitespaces(FFstrbuf* strbuf);
+bool ffStrbufMatchSeparatedNS(const FFstrbuf* strbuf, uint32_t compLength, 
const char* comp, char separator);
 
 FF_C_NODISCARD static inline FFstrbuf ffStrbufCreateA(uint32_t allocate)
 {
@@ -506,4 +507,14 @@
     ffStrbufTrimLeft(strbuf, c);
 }
 
+static inline bool ffStrbufMatchSeparatedS(const FFstrbuf* strbuf, const char* 
comp, char separator)
+{
+    return ffStrbufMatchSeparatedNS(strbuf, (uint32_t) strlen(comp), comp, 
separator);
+}
+
+static inline bool ffStrbufMatchSeparated(const FFstrbuf* strbuf, const 
FFstrbuf* comp, char separator)
+{
+    return ffStrbufMatchSeparatedNS(strbuf, comp->length, comp->chars, 
separator);
+}
+
 #define FF_STRBUF_AUTO_DESTROY FFstrbuf 
__attribute__((__cleanup__(ffStrbufDestroy)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fastfetch-2.43.0/tests/strbuf.c 
new/fastfetch-2.44.0/tests/strbuf.c
--- old/fastfetch-2.43.0/tests/strbuf.c 2025-05-14 03:41:33.000000000 +0200
+++ new/fastfetch-2.44.0/tests/strbuf.c 2025-05-23 10:10:12.000000000 +0200
@@ -635,6 +635,20 @@
         VERIFY(ffStrbufEqualS(&newStr, ""));
     }
 
+    {
+        ffStrbufSetStatic(&strbuf, "abc");
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, "abc:def:ghi", ' ') == false);
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, "abc:def:ghi", ':') == true);
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, "def:ghi", ' ') == false);
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, "def:ghi", ':') == false);
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, "def", ':') == false);
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, "abc", ':') == true);
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, "", ' ') == false);
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, ":abc:", ':') == true);
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, "abc:", ':') == true);
+        VERIFY(ffStrbufMatchSeparatedS(&strbuf, ":abc", ':') == true);
+    }
+
     //Success
     puts("\e[32mAll tests passed!" FASTFETCH_TEXT_MODIFIER_RESET);
 }

Reply via email to