Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package inxi for openSUSE:Factory checked in 
at 2024-06-20 16:47:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/inxi (Old)
 and      /work/SRC/openSUSE:Factory/.inxi.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "inxi"

Thu Jun 20 16:47:33 2024 rev:31 rq:1181770 version:3.3.35

Changes:
--------
--- /work/SRC/openSUSE:Factory/inxi/inxi.changes        2024-04-16 
20:07:48.405189511 +0200
+++ /work/SRC/openSUSE:Factory/.inxi.new.18349/inxi.changes     2024-06-20 
16:47:56.487195131 +0200
@@ -1,0 +2,7 @@
+Wed Jun 19 02:11:30 UTC 2024 - malcolmle...@opensuse.org
+
+- Update to version 3.3.35:
+  * Added more Wayland wm/de updates: wm, tools, lockers, etc.
+  * Readme edit.
+
+-------------------------------------------------------------------

Old:
----
  inxi-3.3.34-1.obscpio

New:
----
  inxi-3.3.35-1.obscpio

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

Other differences:
------------------
++++++ inxi.spec ++++++
--- /var/tmp/diff_new_pack.6ISOJ3/_old  2024-06-20 16:47:58.719273637 +0200
+++ /var/tmp/diff_new_pack.6ISOJ3/_new  2024-06-20 16:47:58.731274059 +0200
@@ -17,9 +17,9 @@
 #
 
 
-%define _version 3.3.34-1
+%define _version 3.3.35-1
 Name:           inxi
-Version:        3.3.34
+Version:        3.3.35
 Release:        0
 Summary:        A system information script
 License:        GPL-3.0-or-later

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.6ISOJ3/_old  2024-06-20 16:47:59.047285174 +0200
+++ /var/tmp/diff_new_pack.6ISOJ3/_new  2024-06-20 16:47:59.083286440 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://codeberg.org/smxi/inxi.git</param>
-              <param 
name="changesrevision">c23f35b885563af2ba4bc831f89eab2bfff9a949</param></service></servicedata>
+              <param 
name="changesrevision">d11fce80412dbfd0613dabba1840b645bb8b2f94</param></service></servicedata>
 (No newline at EOF)
 

++++++ inxi-3.3.34-1.obscpio -> inxi-3.3.35-1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inxi-3.3.34-1/README.txt new/inxi-3.3.35-1/README.txt
--- old/inxi-3.3.34-1/README.txt        2024-04-14 04:49:33.000000000 +0200
+++ new/inxi-3.3.35-1/README.txt        2024-06-18 23:00:07.000000000 +0200
@@ -10,7 +10,7 @@
 
 Make sure to update to the current inxi from the master branch before filing 
any 
 issue reports. Bugs from earlier versions cannot usually be solved in the new 
-version since too much changes intnernally release to release.
+version since too much changes internally release to release.
 
 
--------------------------------------------------------------------------------
 CODEBERG SOURCE REPO
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inxi-3.3.34-1/inxi new/inxi-3.3.35-1/inxi
--- old/inxi-3.3.34-1/inxi      2024-04-14 04:49:33.000000000 +0200
+++ new/inxi-3.3.35-1/inxi      2024-06-18 23:00:07.000000000 +0200
@@ -49,8 +49,8 @@
 
 ## INXI INFO ##
 my $self_name='inxi';
-my $self_version='3.3.34';
-my $self_date='2024-04-13';
+my $self_version='3.3.35';
+my $self_date='2024-06-18';
 my $self_patch='00';
 ## END INXI INFO ##
 
@@ -566,9 +566,9 @@
        # Extra path variable to make execute failures less likely, merged below
        my (@path);
        # NOTE: recent Xorg's show error if you try /usr/bin/Xorg -version but 
work 
-       # if you use the /usr/lib/xorg-server/Xorg path.
+       # if you use the /usr/lib/xorg-server/Xorg path. Some distros fail to 
add TDE
        my @test = qw(/sbin /bin /usr/sbin /usr/bin /usr/local/sbin 
/usr/local/bin 
-       /usr/X11R6/bin);
+       /usr/X11R6/bin /opt/trinity/bin);
        foreach (@test){
                push(@paths,$_) if -d $_;
        }
@@ -1995,11 +1995,13 @@
        ['kded5','--version'],
        ['kded6','--version'],
        ['kded7','--version'],
+       ['kdesktop','--version'],# TDE
        ['kf-config','--version'],
        ['kf4-config','--version'],
        ['kf5-config','--version'],
        ['kf6-config','--version'],
        ['kf7-config','--version'],
+       ['kwin_wayland','--version'],
        ['kwin_x11','--version'],
        # ['locate','/Xorg'], # for Xorg.wrap problem
        ['loginctl','--no-pager list-sessions'],
@@ -2016,6 +2018,7 @@
        ['swaymsg','-t get_tree'],
        ['swaymsg','-t get_workspaces -p'],
        ['swaymsg','-t get_workspaces -r'],
+       ['twin','--version'], # TDE
        ['vainfo',''],
        ['vdpauinfo',''],
        ['vulkaninfo',''],
@@ -5480,8 +5483,8 @@
        mounted ${partition_string}s."],
        ['1', '-r', '--repos', "Distro repository data. Supported repo types: 
APK, 
        APT, CARDS, EOPKG, NETPKG, NIX, PACMAN, PACMAN-G2, PISI, PKG (BSDs), 
PORTAGE, 
-       PORTS (BSDs), SBOPKG, SBOUI, SCRATCHPKG, SLACKPKG, SLAPT_GET, SLPKG, 
TCE, 
-       TAZPKG, URPMQ, XBPS, YUM/ZYPP."],
+       PORTS (BSDs), SBOPKG, SBOUI, SCRATCHPKG, SLACKPKG, SLAPT_GET, SLPKG, 
+       T2-EMERGE, TCE, TAZPKG, URPM, XBPS, YUM/ZYPP."],
        ['1', '-R', '--raid', "RAID data. Shows RAID devices, states, levels, 
array 
        sizes, and components. md-raid: If device is resyncing, also shows 
resync
        progress line."],
@@ -5876,8 +5879,8 @@
        ['1', '', '--no-sudo', "Skip internal program use of sudo features (not 
        related to starting $self_name with sudo)."],
        ['1', '', '--rpm', "Force use of disabled package manager counts for 
packages 
-       feature with -rx/-Ix. RPM disabled by default due to slow to massive 
rpm 
-       package query times."],
+       feature with -rx/-Ix. RPM disabled by default due to unacceptably slow 
rpm 
+       package count query times."],
        ['1', '', '--sensors-default', "Removes configuration item SENSORS_USE 
and 
        SENSORS_EXCLUDE. Same as default behavior."],
        ['1', '', '--sensors-exclude', "[sensor[s] name, comma separated] 
Exclude 
@@ -6381,16 +6384,17 @@
        return $item;
 }
 
+# This is used only in distro name strings.
+# arg: 0: name string to clean by reference
 sub clean_characters {
-       my ($data) = @_;
        # newline, pipe, brackets, + sign, with space, then clear doubled
        # spaces and then strip out trailing/leading spaces.
-       # etc/issue often has junk stuff like (\l)  \n \l
-       return if !$data;
-       $data =~ s/[:\47]|\\[a-z]|\n|,|\"|\*|\||\+|\[\s\]|n\/a|\s\s+/ /g; 
-       $data =~ s/\(\s*\)//;
-       $data =~ s/^\s+|\s+$//g;
-       return $data;
+       # etc/issue often has junk stuff like (\l)  \n \l. Removed + because 
can be 
+       # part of distro name, like Slackware 15.0+
+       return if !${$_[0]}; # should not be needed since tests for not empty 
on use
+       ${$_[0]} =~ s/[:\47]|\\[a-z]|\n|,|\"|\*|\||\[\s\]|n\/a|\s\s+/ /g; 
+       ${$_[0]} =~ s/\(\s*\)//;
+       ${$_[0]} =~ s/^\s+|\s+$//g;
 }
 
 sub clean_disk {
@@ -6701,6 +6705,7 @@
        'pci-card-data-root' => 'PCI device data requires root.',
        'pci-slot-data' => 'No PCI Slot data found.',
        'pm-disabled' => "see --$id",
+       'pm-no-repos' => "[$id list repo query]",
        'ps-data-null' => 'No process data available.',
        'raid-data' => 'No RAID data found.',
        'ram-data' => "No RAM data found using $id.",
@@ -9522,6 +9527,9 @@
                                                # print "p0:\n";
                                        }
                                }
+                               elsif ($cpu->{'model_name'} =~ 
/loongson|godson/i){
+                                       $cpu->{'type'} = 'loongson';
+                               }
                                elsif ($risc{'mips'} || $cpu->{'model_name'} =~ 
/mips/i){
                                        $cpu->{'type'} = 'mips';
                                }
@@ -9546,6 +9554,10 @@
                                if ($temp =~ /^\d+$/){
                                        $cpu->{'stepping'} = 
uc(sprintf("%x",$temp));
                                }
+                               # loongson, hex: 0x11
+                               elsif ($temp =~ /^0x[0-9a-f]{1,2}$/){
+                                       $cpu->{'stepping'} = $temp;
+                               }
                        }
                        # PPC revision is a string, but elbrus revision is hex
                        elsif (defined $block->{'revision'}){
@@ -10171,6 +10183,9 @@
        # $ci = "$fake_data_dir/cpu/elbrus/4xE8C-7.txt";
        # $ci = "$fake_data_dir/cpu/elbrus/4xE2CDSP-4.txt";
        # $ci = "$fake_data_dir/cpu/elbrus/cpuinfo.e8c2.txt";
+       ## Loongson 
+       # $cpu_type = 'elbrus'; # uncomment to test loongson
+        $ci = "$fake_data_dir/cpu/loongson/3A5000M-4-core-4.19.0.txt";
        
        ## CPU CPUINFO/SYS PAIRS DATA FILES ##
        # $ci = 
"$fake_data_dir/cpu/sys-ci-pairs/android-pocom3-fake-cpuinfo.txt";
@@ -10195,8 +10210,8 @@
        # $sys = 
"$fake_data_dir/cpu/sys-ci-pairs/amd-threadripper-1x12-5945wx-sys-1.txt";
        # $ci = 
"$fake_data_dir/cpu/sys-ci-pairs/intel-i7-1165G7-4-core-no-smt-cpuinfo.txt";
        # $sys = 
"$fake_data_dir/cpu/sys-ci-pairs/intel-i7-1165G7-4-core-no-smt-sys.txt";
-        $ci = "$fake_data_dir/cpu/sys-ci-pairs/elbrus-e16c-1-cpuinfo.txt";
-        $sys = "$fake_data_dir/cpu/sys-ci-pairs/elbrus-e16c-1-sys.txt";
+       # $ci = "$fake_data_dir/cpu/sys-ci-pairs/elbrus-e16c-1-cpuinfo.txt";
+       # $sys = "$fake_data_dir/cpu/sys-ci-pairs/elbrus-e16c-1-sys.txt";
        $fake_data{'cpuinfo'} = $ci;
        $fake_data{'sys'} = $sys;
 }
@@ -10706,6 +10721,8 @@
        );
        my $topology = {};
        cp_cpu_topology($counts,$topology);
+       # print "$cpu->{'type'}\n";
+       # print Data::Dumper::Dumper $cpu;
        my $arch = cp_cpu_arch(
        $cpu->{'type'},
        $cpu->{'family'},
@@ -10713,6 +10730,7 @@
        $cpu->{'stepping'},
        $cpu->{'model_name'},
        );
+       # print Data::Dumper::Dumper $arch;
        # arm cpuinfo case only; confirm on bsds, not sure all get family/ids
        if ($arch->[0] && !$cpu->{'arch'}){
                
($cpu->{'arch'},$cpu->{'arch-note'},$cpu->{'process'},$cpu->{'gen'},
@@ -11221,7 +11239,7 @@
        # we can get various random strings for rev/stepping, particularly for 
arm,ppc
        # but we want stepping to be integer for math comparisons, so convert, 
or set
        # to 0 so it won't break anything.
-       if (defined $stepping && $stepping =~ /^[A-F0-9]{1,3}$/i){
+       if (defined $stepping && $stepping =~ /^(0x)?[A-F0-9]{1,3}$/i){
                $stepping = hex($stepping);
        }
        else {
@@ -11229,6 +11247,7 @@
        }
        $family ||= '';
        $model = '' if !defined $model; # model can be 0
+       $name = '' if !defined $name;
        my ($arch,$gen,$note,$process,$year);
        my $check = main::message('note-check');
        # See: docs/inxi-cpu.txt 
@@ -12109,6 +12128,68 @@
                        }
                }
        }
+       # Note: their cpu family value is either missing for early, or generic
+       # No model: [id]/family: [id]. Just cpu family: [string], model name: 
[string]
+       elsif ($type eq 'loongson'){
+               # can't safely match model 1, but nobody will run inxi on that
+               # Not certain when SMIC took over from STM, which is a swiss 
firm.
+               if ($name =~ /\b2[BCE]\b/){
+                       $arch = 'Godson';
+                       $process = 'STM 180nm';
+                       $year = '2003-2006';}
+               elsif ($name =~ /\b1[ABCD]\b/){
+                       $arch = 'Loongson-1';
+                       $process = 'STM 130nm';
+                       $year = '2010-2014';}
+               elsif ($name =~ /\b1C101/){
+                       $arch = 'Loongson-1';
+                       $process = 'STM 130nm';
+                       $year = '2018';}
+               elsif ($name =~ /\b2F\b/){
+                       $arch = 'Loongson-2';
+                       $process = 'STM 90nm';
+                       $year = '2007';}
+               elsif ($name =~ /\b2[GIH]\b/){
+                       $arch = 'Loongson-2';
+                       $process = 'STM 65nm';
+                       $year = '2012-2013';}
+               elsif ($name =~ /\b2K(1000)?\b/){
+                       $arch = 'Loongson-2';
+                       $process = 'STM 40nm';
+                       $year = '2017';}
+               elsif ($name =~ /3A1000/){
+                       $arch = 'Godson-3/Loongson-3';
+                       $process = 'SMIC 65nm';
+                       $year = '2009';}
+               elsif ($name =~ /3B1000/){
+                       $arch = 'Godson-3/Loongson-3';
+                       $process = 'SMIC 65nm';
+                       $year = '2010';}
+               elsif ($name =~ /3B1500/){
+                       $arch = 'Godson-3/Loongson-3';
+                       $process = 'SMIC 32nm';
+                       $year = '2012';}
+               elsif ($name =~ /3A1500-I|3[AB]2000/){
+                       $arch = 'Godson-3/Loongson-3';
+                       $process = 'SMIC 40nm';
+                       $year = '2015';}
+               elsif ($name =~ /3[AB]3000/){
+                       $arch = 'Godson-3/Loongson-3';
+                       $process = 'SMIC 28nm';
+                       $year = '2016';}
+               elsif ($name =~ /3[AB]4000/){
+                       $arch = 'Godson-3/Loongson-3';
+                       $process = 'SMIC 28nm';
+                       $year = '2019';}
+               elsif ($name =~ /3[A-C]5000/){
+                       $arch = 'Loongson-3/LoongArch';
+                       $process = 'SMIC 12-14nm';
+                       $year = '2021+';}
+               elsif ($name =~ /3[A-C]6000/){
+                       $arch = 'Loongson-3/LoongArch';
+                       $process = 'SMIC 12-14nm';
+                       $year = '2023+';}
+       }
        eval $end if $b_log;
        return [$arch,$note,$process,$gen,$year];
 }
@@ -12492,11 +12573,11 @@
 }
 
 ## CPU UTILITIES ##
-# only elbrus ID is actually used live
+# args: 0: vendor_id,like GenuineIntel, AuthenticAMD
 sub cpu_vendor {
        eval $start if $b_log;
-       my ($string) = @_;
-       my ($vendor) = ('');
+       my $string = $_[0];
+       my $vendor = '';
        $string = lc($string);
        if ($string =~ /intel/){
                $vendor = "intel";
@@ -14768,7 +14849,7 @@
 package GraphicItem;
 my ($b_primary,$b_wayland_data,%graphics,%mesa_drivers,
 $monitor_ids,$monitor_map);
-my ($gpu_amd,$gpu_intel,$gpu_nv);
+my ($gpu_amd,$gpu_intel,$gpu_loongson,$gpu_nv);
 
 sub get {
        eval $start if $b_log;
@@ -14782,7 +14863,7 @@
        }
        else {
                device_output($rows);
-               ($gpu_amd,$gpu_intel,$gpu_nv) = ();
+               ($gpu_amd,$gpu_intel,$gpu_loongson,$gpu_nv) = ();
                if (!@$rows){
                        my $key = 'Message';
                        my $message = '';
@@ -14856,9 +14937,10 @@
                        $rows->[$j]{main::key($num++,0,3,'alternate')} = 
$row->[10] if $row->[10];
                }
                if ($extra > 0 && $row->[5] && $row->[6] && 
-               $row->[5] =~ /^(1002|10de|12d2|8086)$/){
+               $row->[5] =~ /^(0014|1002|10de|12d2|8086)$/){
                        # legacy: 1180 0df7 0029 current: 13bc 1c8d 24b1 regex: 
H100, RTX 4000
                        # ($row->[5],$row->[6],$row->[4]) = ('12de','0029','');
+                       # ($row->[5],$row->[6],$row->[4]) = ('0014','7a25',''); 
# loongson
                        my ($gpu_data,$b_nv) = 
gpu_data($row->[5],$row->[6],$row->[4]);
                        if (!$bsd_type && $b_nv && $b_admin){
                                if ($gpu_data->{'legacy'}){
@@ -15889,6 +15971,7 @@
                        # $file = 
"$fake_data_dir/graphics/glxinfo/glxinfo-intel-atom-dell_studio-bm.txt";
                        # $file = 
"$fake_data_dir/graphics/glxinfo/glxinfo-asus_1025c-atom-bm.txt";
                        # $file = 
"$fake_data_dir/graphics/glxinfo/glxinfo-2011-nvidia-glx1.4.txt";
+                       # $file = 
"$fake_data_dir/graphics/glxinfo/glxinfo-amd-dz-mesa-git.txt";
                        $gl_data= main::reader($file,'','ref');
                }
        }
@@ -15905,7 +15988,7 @@
                        # $file = 
"$fake_data_dir/graphics/egl-es/eglinfo-intel-atom-dell_studio-bm.txt";
                        # $file = 
"$fake_data_dir/graphics/egl-es/eglinfo-asus_1025c-atom-bm.txt";
                        # $file = 
"$fake_data_dir/graphics/egl-es/eglinfo-x11-amd-raphael-1.txt";
-                        $file = 
"$fake_data_dir/graphics/egl-es/eglinfo-x11-vm-version-odd.txt";
+                       # $file = 
"$fake_data_dir/graphics/egl-es/eglinfo-x11-vm-version-odd.txt";
                        $gl_data = main::reader($file,'','ref');
                }
        }
@@ -16129,15 +16212,18 @@
                                if ($working[1]){
                                        # first grab the actual gl version
                                        # non free drivers like nvidia may only 
show their driver version info 
+                                       # $working[1] = '4.5 (Compatibility 
Profile) Mesa 22.3.6';
                                        if ($working[1] =~ /^(\S+)(\s|$)/){
                                                
push(@{$gl->{'glx'}{'opengl'}{'versions'}}, $1);
                                        }
-                                       # handle legacy format: 1.2 (1.5 Mesa 
6.5.1) as well as more current:
+                                       # handle legacy format: 1.2 (1.5 Mesa 
6.5.1) 
+                                       # as well as more current:
                                        # 4.5 (Compatibility Profile) Mesa 
22.3.6
                                        # Note: legacy: fglrx starting adding 
compat strings but they don't
                                        # change this result:
                                        # 4.5 Compatibility Profile Context 
Mesa 15.3.6
-                                       if ($working[1] =~ 
/(Mesa|NVIDIA)\s(\S+?)\)?$/i){
+                                       # 4.6 (Core Profile) Mesa 24.2.0-devel 
(git-92f0620dae)
+                                       if ($working[1] =~ 
/(Mesa|NVIDIA)\s(\S+?)\)?(\s.*)?$/i){
                                                if ($1 && $2 && 
!$gl->{'glx'}{'opengl'}{'driver'}){
                                                        
$gl->{'glx'}{'opengl'}{'driver'}{'vendor'} = lc($1);
                                                        
$gl->{'glx'}{'opengl'}{'driver'}{'version'} = $2;
@@ -16158,6 +16244,7 @@
                if ($b_opengl){
                        if ($working[0] =~ /^OpenGL (compatibility|core) 
profile version( string)?$/){
                                $value = lc($1);
+                               # $working[1] = '4.6 (Core Profile) Mesa 
24.2.0-devel (git-92f0620dae)';
                                # note: no need to apply empty message here 
since we don't have the data
                                # anyway
                                if ($working[1]){
@@ -16167,7 +16254,9 @@
                                        }
                                        # fglrx started appearing with this 
extra string, does not appear 
                                        # to communicate anything of value
-                                       if ($working[1] =~ 
/\s+(Mesa|NVIDIA)\s+(\S+)$/){
+                                       # 4.6 (Core Profile) Mesa 24.2.0-devel
+                                       # 4.6 (Core Profile) Mesa 24.2.0-devel 
(git-92f0620dae)
+                                       if ($working[1] =~ 
/\s+(Mesa|NVIDIA)\s+(\S+)(\s.*)?$/){
                                                if ($1 && $2 && 
!$gl->{'glx'}{'opengl'}{$value}{'vendor'}){
                                                        
$gl->{'glx'}{'opengl'}{$value}{'driver'}{'vendor'} = lc($1);
                                                        
$gl->{'glx'}{'opengl'}{$value}{'driver'}{'version'} = $2;
@@ -18073,51 +18162,44 @@
        'process' => 'Intel 10nm',
        'years' => '2019-21',
        },
-       {'arch' => 'Gen-12.1',
-       'ids' => 
'4905|4907|4908|4c80|4c8a|4c8b|4c8c|4c90|4c9a|9a40|9a49|9a59|9a60|' .
-       '9a68|9a70|9a78|9ac0|9ac9|9ad9|9af8',
+               {'arch' => 'Gen-12.1',
+       'ids' => 
'4905|4907|4908|4909|4c8a|4c8b|4c90|4c9a|9a40|9a49|9a59|9a60|9a68|' .
+       '9a70|9a78|9ac0|9ac9|9ad9|9af8',
        'code' => '',
        'process' => 'Intel 10nm',
        'years' => '2020-21',
        },
        {'arch' => 'Gen-12.2',
-       'ids' => 
'4626|4628|462a|4636|4638|463a|4682|4688|468a|468b|4690|4692|4693|' .
-       
'46a3|46a6|46a8|46aa|46b0|46b1|46b3|46b6|46b8|46ba|46c1|46c3|46d0|46d1|46d2|' .
-       '46d3|46d4',
+       'ids' => 
'4626|4628|462a|4636|4638|463a|4680|4682|4688|468a|468b|4690|4692|' .
+       
'4693|46a0|46a1|46a2|46a3|46a6|46a8|46aa|46b0|46b1|46b2|46b3|46b6|46b8|46ba|' .
+       '46c0|46c1|46c2|46c3|46d0|46d1|46d2|46d3|46d4',
        'code' => '',
        'process' => 'Intel 10nm',
        'years' => '2021-22+',
        },
        {'arch' => 'Gen-12.5',
-       'ids' => '0bd0|0bd5|0bd6|0bd7|0bd9|0bda|0bdb',
+       'ids' => '0bd5|0bda',
        'code' => '',
        'process' => 'Intel 10nm',
        'years' => '2021-23+',
        },
-       # Jupiter Sound cancelled?
        {'arch' => 'Gen-12.7',
        'ids' => 
'4f80|4f81|4f82|4f83|4f84|4f85|4f86|4f87|4f88|5690|5691|5692|5693|' .
-       
'5694|5695|5696|5697|5698|56a0|56a1|56a3|56a4|56a5|56a6|56a7|56a8|56a9|56b0|' .
-       '56b1|56b2|56b3|56ba|56bb|56bc|56bd|56be|56bf',
+       
'5694|5696|5697|5698|56a0|56a1|56a2|56a3|56a4|56a5|56a6|56a7|56a8|56a9|56b0|' .
+       '56b1|56b2|56b3|56ba|56bb|56bc|56bd|56be|56bf|56c0|56c1',
        'code' => 'Alchemist',
        'process' => 'TSMC n6 (7nm)',
        'years' => '2022+',
        },
-       {'arch' => 'Gen-12.7',
-       'ids' => '56c0|56c1',
-       'code' => '',
-       'process' => 'TSMC n6 (7nm)',
-       'years' => '2022+',
-       },
        {'arch' => 'Gen-13',
-       'ids' => 
'a70d|a720|a721|a74d|a780|a781|a782|a783|a788|a789|a78a|a78b|a7a0|' .
-       'a7a1|a7a8|a7a9|a7aa|a7ab|a7ac|a7ad',
+       'ids' => 
'a70d|a719|a720|a721|a74d|a780|a781|a782|a783|a788|a789|a78a|a78b|' .
+       'a7a0|a7a1|a7a8|a7a9|a7aa|a7ab|a7ac|a7ad',
        'code' => '',
        'process' => 'Intel 7 (10nm)',
        'years' => '2022+',
        },
        {'arch' => 'Gen-13',
-       'ids' => '7d40|7d45|7d55|7d60|7dd5',
+       'ids' => '7d40|7d41|7d45|7d51|7d55|7d60|7d67|7dd1|7dd5',
        'code' => '',
        'process' => 'Intel 4 (7nm+)',
        'years' => '2023+',
@@ -18134,6 +18216,18 @@
        'process' => 'TSMC 3nm?',
        'years' => '2025+',
        },
+
+       ];
+}
+
+sub set_loongson_data {
+       $gpu_loongson = [
+       {'arch' => '?',
+       'ids' => '7a25',
+       'code' => '',
+       'process' => '12-14nm (STM)',
+       'years' => '2023+',
+       },
        ];
 }
 
@@ -18412,8 +18506,8 @@
        
'2414|2420|2438|2460|2482|2484|2486|2487|2488|2489|248a|249c|249d|24a0|24b0|' .
        
'24b1|24b6|24b7|24b8|24b9|24ba|24bb|24c7|24c9|24dc|24dd|24e0|24fa|2503|2504|' .
        
'2507|2508|2520|2521|2523|2531|2544|2560|2563|2571|2582|2584|25a0|25a2|25a5|' .
-       
'25ab|25ac|25b6|25b8|25b9|25ba|25bb|25bc|25bd|25e0|25e2|25e5|25ec|25f9|25fa|' .
-       '25fb|2838',
+       
'25ab|25ac|25b0|25b2|25b6|25b8|25b9|25ba|25bb|25bc|25bd|25e0|25e2|25e5|25ec|' .
+       '25f9|25fa|25fb|2838',
        'code' => 'GAxxx',
        'kernel' => '',
        'legacy' => 0,
@@ -18437,9 +18531,10 @@
        'years' => '2022+',
        },
        {'arch' => 'Lovelace',
-       'ids' => 
'2684|2685|26b1|26b2|26b3|26b5|26b9|26ba|2702|2704|2705|2709|2717|' .
-       
'2730|2757|2770|2782|2783|2786|2788|27a0|27b0|27b1|27b2|27b6|27b8|27ba|27bb|' .
-       
'27e0|27fb|2803|2805|2808|2820|2860|2882|28a0|28a1|28b9|28ba|28bb|28e0|28e1',
+       'ids' => 
'2684|2685|2689|26b1|26b2|26b3|26b5|26b9|26ba|2702|2704|2705|2709|' .
+       
'2717|2730|2757|2770|2782|2783|2786|2788|27a0|27b0|27b1|27b2|27b6|27b8|27ba|' .
+       
'27bb|27e0|27fb|2803|2805|2808|2820|2860|2882|28a0|28a1|28b0|28b9|28ba|28bb|' .
+       '28e0|28e1',
        'code' => 'AD1xx',
        'kernel' => '',
        'legacy' => 0,
@@ -18465,6 +18560,10 @@
                set_intel_data() if !$gpu_intel;
                $gpu = $gpu_intel;
        }
+       elsif ($v_id eq '0014'){
+               set_loongson_data() if !$gpu_loongson;
+               $gpu = $gpu_loongson;
+       }
        else {
                set_nv_data() if !$gpu_nv;
                $gpu = $gpu_nv;
@@ -25160,7 +25259,7 @@
 sub get_repos_linux {
        eval $start if $b_log;
        my $rows = $_[0];
-       my (@content,$data,@data2,@data3,@files,$repo,@repos);
+       my (@content,$data,@data2,@data3,@files,$pm_query,$repo,@repos);
        my ($key,$path);
        my $apk = '/etc/apk/repositories';
        my $apt = '/etc/apt/sources.list';
@@ -25185,6 +25284,7 @@
        my $slackpkg_plus = '/etc/slackpkg/slackpkgplus.conf';
        my $slapt_get = '/etc/slapt-get/';
        my $slpkg = '/etc/slpkg/repositories.toml';
+       my $t2_src = '/usr/src/t2-src'; 
        my $tazpkg = '/etc/slitaz/tazpkg.conf';
        my $tazpkg_mirror = '/var/lib/tazpkg/mirror';
        my $tce_app = '/usr/bin/tce';
@@ -25358,6 +25458,7 @@
        }
        ## sbopkg, sboui, slackpkg, slackpkg+, slapt_get, slpkg: Slackware + 
derived
        # $slpkg = "$fake_data_dir/repo/slackware/slpkg-2.toml";
+       # $slpkg = "$fake_data_dir/repo/slackware/slpkg-new-format-1.toml";
        # $sbopkg = "$fake_data_dir/repo/slackware/sbopkg-2.conf";
        # $sboui_backend = "$fake_data_dir/repo/slackware/sboui-backend-1.conf";
        if (-f $slackpkg || -f $slackpkg_plus || -d $slapt_get || -f $slpkg || 
@@ -25477,38 +25578,58 @@
                        @content = ();
                }
                if (-f $slpkg){
-                       my ($active,$name,$repo);
-                       my $holder = '';
-                       @data2 = main::reader($slpkg);
-                       # We can't rely on the presence of empty lines as block 
separator.
-                       push(@data2,'-eof-') if @data2;
+                       my ($b_legacy,$b_new,$name,%repos);
+                       @data2 = main::reader($slpkg,'strip');
                        # print Data::Dumper::Dumper \@data2;
                        # old: 
"https://download.salixos.org/x86_64/slackware-15.0/";
-                       # new: ["https://slac...nl/people/alien/sbrepos/";, 
"15.0/", "x86_64/"]
+                       # old, new syntax: 
["https://slac...nl/people/alien/sbrepos/";, "15.0/", "x86_64/"]
+                       # newest: each block starts with name, eg: [DEFAULT], 
[ALIEN]
                        foreach (@data2){
-                               next if /^\s*([#\[]|$)/;
                                $_ = lc($_);
-                               if 
(/^\s*(\S+?)_(repo(|_name|_mirror))\s*=\s*[\['"]{0,2}(.*?)[\]'"]{0,2}\s*$/ ||
-                               $_ eq '-eof-'){
-                                       my ($key,$value) = ($2,$4);
-                                       if (($1 && $holder ne $1) || $_ eq 
'-eof-'){
-                                               $holder = $1;
-                                               if ($name && $repo){
-                                                       if (!$active || $active 
=~ /^(true|1|yes)$/i){
-                                                               
push(@content,"$name ~ $repo");
-                                                       }
-                                                       ($active,$name,$repo) = 
();
-                                               }
-                                       }
-                                       if ($key){
-                                               if ($key eq 'repo'){
-                                                       $active = $value;}
-                                               elsif ($key eq 'repo_name'){
-                                                       $name = $value;}
-                                               elsif ($key eq 'repo_mirror'){
-                                                       # map new form to a 
real url
-                                                       $value =~ 
s/['"],\s*['"]//g;
-                                                       $repo = $value;}
+                               # first legacy line should be [REPO...]
+                               if (!$b_legacy && !$b_new && 
/\[repositories\]/){
+                                       $b_legacy = 1;
+                                       next;
+                               }
+                               # otherwise [...] is repo name
+                               if (!$b_legacy && /^\[(\S+)\]/){
+                                       $name = $1;
+                                       $b_new = 1;
+                                       next;
+                               }
+                               my ($key,$value) = split(/\s*=\s*/,$_);
+                               next if !$key || !defined $value;
+                               $value =~ s/^\[?["']|["']\]?$//g;
+                               if ($b_legacy){
+                                       next if $key !~ 
/^(\S+?)_(repo(|_name|_mirror))$/;
+                                       $name = $1;
+                                       $key = $2;
+                                       if ($key eq 'repo'){
+                                               $repos{$name}->{'active'} = 
$value;}
+                                       elsif ($key eq 'repo_mirror'){
+                                               # map new form to a real url
+                                               $value =~ s/['"],\s*['"]//g;
+                                               $repos{$name}->{'repo'} = 
$value;}
+                               }
+                               elsif ($b_new){
+                                       if ($key eq 'repo' && $name eq 
'default'){
+                                               $repos{'default'} = $value;
+                                               $name = '';
+                                               next;}
+                                       elsif ($key eq 'enable'){
+                                               $repos{$name}{'active'} = 
$value;}
+                                       elsif ($key eq 'mirror'){
+                                               $repos{$name}{'repo'} = $value;}
+                               }
+                       }
+                       # print Data::Dumper::Dumper \%repos;
+                       if (%repos){
+                               foreach my $item (sort keys %repos){
+                                       next if ref $repos{$item} ne 'HASH';
+                                       if (!$repos{$item}->{'active'} || 
+                                       $repos{$item}->{'active'} =~ 
/^(true|1|yes)$/i){
+                                               my $default = 
($repos{'default'} && $item eq $repos{'default'}) ? ' (default)' : '';
+                                               push(@content,$item . $default 
. ' ~ ' . $repos{$item}->{'repo'});
                                        }
                                }
                        }
@@ -25734,6 +25855,30 @@
                        push(@$rows,@$data);
                }
        }
+       ## T2 Emerge
+       if (-d $t2_src){
+               if ($path = main::check_program('svn')){
+                       @data2 = main::grabber("$path info $t2_src 
2>/dev/null","\n",'strip');
+                       
main::writer("$debugger_dir/system-repo-data-t2-svn.txt",\@data2) if 
$debugger_dir;
+                       if (@data2){
+                               $repo = main::awk(\@data2,'URL:',2);
+                               push(@content,$repo) if $repo;
+                       }
+               }
+               if (!@content){
+                       $key = repo_data('missing','t2-emerge');
+               }
+               else {
+                       clean_url(\@content);
+                       $key = repo_data('active','t2-emerge');
+                       $pm_query = '';
+               }
+               push(@$rows, 
+               {main::key($num++,1,1,$key) => $t2_src},
+               [@content],
+               );
+               (@content,$pm_query,$repo) = ();
+       }
        ## xbps: Void 
        if (-d $xbps_dir_1 || -d $xbps_dir_2){
                @files = main::globber("$xbps_dir_1*.conf");
@@ -25750,6 +25895,8 @@
        if ($path = main::check_program('urpmq')){
                @data2 = main::grabber("$path --list-media active --list-url 
2>/dev/null","\n",'strip');
                
main::writer("$debugger_dir/system-repo-data-urpmq.txt",\@data2) if 
$debugger_dir;
+               # my $file = 
"$ENV{HOME}/bin/scripts/inxi/data/repo/urpmq/system-mrmazda-1.txt";
+               # @data2 = main::reader($file,'strip');
                # Now we need to create the structure: repo info: repo path. We 
do that by 
                # looping through the lines of the output and then putting it 
back into the
                # <data>:<url> format print repos expects to see. Note this 
structure in the
@@ -25765,30 +25912,37 @@
                        $_ =~ s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g;
                        $_ =~ s/\e\[([0-9];)?[0-9]+m//g;
                        # urpmq output is the same each line, repo name space 
repo url, can be:
-                       # rsync://, ftp://, file://, http:// OR repo is locally 
mounted on FS in some cases
-                       if (/(.+)\s([\S]+:\/\/.+)/){
+                       # rsync://, ftp://, file://, http:// OR repo is locally 
mounted on /var FS in some cases
+                       if (/(.+)\s(\S+:\/\/.+|\/var\/\S+)/){
                                # pack the repo url
-                               push(@content, $1);
-                               clean_url(\@content);
-                               # get the repo
-                               $repo = $2;
-                               push(@$rows, 
-                               {main::key($num++,1,1,'urpm repo') => $repo},
-                               [@content],
-                               );
-                               @content = ();
+                               push(@content, $1 . ' ~ ' . $2);
                        }
                }
+               if (!@content){
+                       $key = repo_data('missing','urpm');
+                       $pm_query = main::message('pm-no-repos','urpmq');
+               }
+               else {
+                       clean_url(\@content);
+                       $key = repo_data('active','urpm');
+                       $pm_query = '';
+               }
+               push(@$rows, 
+               {main::key($num++,1,1,$key) => $pm_query},
+               [@content],
+               );
+               @content = ();
        }
        # pisi: Pardus, Solus
        if ((-d $pisi_dir && ($path = main::check_program('pisi'))) || 
-        (-d $eopkg_dir && ($path = main::check_program('eopkg')))){
-               #$path = 'eopkg';
+       (-d $eopkg_dir && ($path = main::check_program('eopkg')))){
+               # $path = 'eopkg';
                my $which = ($path =~ /pisi$/) ? 'pisi': 'eopkg';
-               my $cmd = ($which eq 'pisi') ? "$path list-repo": "$path lr";
+               my $cmd = ($which eq 'pisi') ? "$path list-repo" : "$path lr";
                # my $file = 
"$ENV{HOME}/bin/scripts/inxi/data/repo/solus/eopkg-2.txt";
                # @data2 = main::reader($file,'strip');
                @data2 = main::grabber("$cmd 2>/dev/null","\n",'strip');
+               push(@data2,'END') if @data2;
                
main::writer("$debugger_dir/system-repo-data-$which.txt",\@data2) if 
$debugger_dir;
                # Now we need to create the structure: repo info: repo path
                # We do that by looping through the lines of the output and 
then putting it 
@@ -25804,36 +25958,34 @@
                foreach (@data2){
                        next if /^\s*$/;
                        # need to dump leading/trailing spaces and clear out 
color codes for irc output
-                       $_ =~ s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g;
-                       $_ =~ s/\e\[([0-9];)?[0-9]+m//g;
-                       if (/^\/|:\/\//){
-                               push(@content, $_) if $repo;
-                       }
-                       # Local [inactive] Unstable [active]
-                       elsif (/^(.*)\s\[([\S]+)\]/){
-                               $repo = $1;
-                               $repo = ($2 =~ /^activ/i) ? $repo : '';
-                       }
-                       if ($repo && @content){
-                               clean_url(\@content);
-                               $key = repo_data('active',$which);
-                               push(@$rows, 
-                               {main::key($num++,1,1,$key) => $repo},
-                               [@content],
-                               );
-                               $repo = '';
-                               @content = ();
+                       if ($_ ne 'END'){
+                               $_ =~ 
s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g;
+                               $_ =~ s/\e\[([0-9];)?[0-9]+m//g;
+                               if (/^\/|:\/\// && $repo){
+                                       push(@content, $repo . ' ~ ' . $_);
+                                       $repo = '';
+                               }
+                               # Local [inactive] Unstable [active]
+                               elsif (/^(.*)\s\[([\S]+)\]/){
+                                       $repo = $1;
+                                       $repo = ($2 =~ /^activ/) ? $repo : '';
+                               }
                        }
                }
-               # last one if present
-               if ($repo && @content){
+               if (!@content){
+                       $key = repo_data('missing',$which);
+                       $pm_query = main::message('pm-no-repos',$which);
+               }
+               else {
                        clean_url(\@content);
                        $key = repo_data('active',$which);
-                       push(@$rows, 
-                       {main::key($num++,1,1,$key) => $repo},
-                       [@content],
-                       );
+                       $pm_query = '';
                }
+               push(@$rows, 
+               {main::key($num++,1,1,$key) => $pm_query},
+               [@content],
+               );
+               (@content,$repo) = ();
        }
        ## nix: General pm for Linux/Unix
        if (-f $nix && ($path = main::check_program('nix-channel'))){
@@ -26010,7 +26162,7 @@
        'cards-missing' => 'No active CARDS collections in',
        'dnf-active' => 'Active dnf repos in',
        'dnf-missing' => 'No active dnf repos in',
-       'eopkg-active' => 'Active eopkg repo',
+       'eopkg-active' => 'Active eopkg repos',
        'eopkg-missing' => 'No active eopkg repos found',
        'files-missing' => 'No repo files found in',
        'freebsd-active' => 'FreeBSD update server',
@@ -26034,7 +26186,7 @@
        'pacman-missing' => 'No active pacman repos in',
        'pacman-g2-active' => 'Active pacman-g2 repo servers in',
        'pacman-g2-missing' => 'No active pacman-g2 repos in',
-       'pisi-active' => 'Active pisi repo',
+       'pisi-active' => 'Active pisi repos',
        'pisi-missing' => 'No active pisi repos found',
        'portage-active' => 'Enabled portage sources in',
        'portage-missing' => 'No enabled portage sources in',
@@ -26055,10 +26207,14 @@
        'slaptget-missing' => 'No active slapt-get repos in',
        'slpkg-active' => 'Active slpkg repos in',
        'slpkg-missing' => 'No active slpkg repos in',
+       't2-emerge-active' => 'Active T2 Emerge URL in',
+       't2-emerge-missing' => 'No active T2 Emerge URLs in',
        'tazpkg-active' => 'tazpkg mirrors in',
        'tazpkg-missing' => 'No tazpkg mirrors in',
        'tce-active' => 'tce mirrors in',
        'tce-missing' => 'No tce mirrors in',
+       'urpm-active' => 'Active urpm repos',
+       'urpm-missing' => 'No active urpm repos found',
        'xbps-active' => 'Active xbps repos in',
        'xbps-missing' => 'No active xbps repos in',
        'yum-active' => 'Active yum repos in',
@@ -26077,6 +26233,7 @@
        return $repo_keys{$type . '-' . $status};
 }
 
+# Args: 0: repo file; 1: pm type; 2: repo line search, 3: split; 4: count
 sub repo_builder {
        eval $start if $b_log;
        my ($file,$type,$search,$split,$count) = @_;
@@ -29643,7 +29800,9 @@
        if ($desktop_session eq 'trinity' || $xdg_desktop eq 'trinity' || 
        (!$desktop_session && !$xdg_desktop && @{$ps_data{'de-ps-detect'}} && 
        (grep {/^tde/} @{$ps_data{'de-ps-detect'}}))){
-               if ($program = main::check_program('kdesktop')){
+               # 14.2 moved kdesktop to location not in PATH in some distros, 
so either of these will fail
+               if (($program = main::check_program('kdesktop')) || 
+               ($program = main::check_program('twin'))){
                        ($desktop->[0],$desktop->[1],$v_data) = 
ProgramData::full('kdesktop-trinity',$program,0,'raw');
                }
                if ($extra > 1 && $v_data && @$v_data){
@@ -31440,8 +31599,9 @@
                udm wdm x3dm xdm xdmctl xenodm);
        }
        # greetd frontends: agreety dlm gtkgreet qtgreet tuigreet wlgreet
+       # slick, elephant greeters for lightdm so aren't really lm
        else {
-               @dms = qw(elogind greetd seatd tbsm);
+               @dms = qw(elogind greetd qtgreet seatd tbsm);
        }
        # print Data::Dumper::Dumper \@glob;
        # used to test for .pid/lock type file or directory, now just see if 
the 
@@ -31614,6 +31774,7 @@
        siduction-version sidux-version slax-version slint-version 
slitaz-release 
        solusos-release turbolinux-release zenwalk-version);
        my $derived_str = join('|', @derived);
+       # if t2 ever adds a standard distro file name, add here. Ideally it 
adds os-release
        my @primary = qw(altlinux-release arch-release gentoo-release 
redhat-release 
        slackware-version SuSE-release);
        my $primary_str = join('|', @primary);
@@ -31637,20 +31798,29 @@
        $etc_issue = main::reader($issue,'strip',0) if -r $issue;
        # debian issue can end with weird escapes like \n \l 
        # antergos: Antergos Linux \r (\l)
-       $etc_issue = main::clean_characters($etc_issue) if $etc_issue;
+       main::clean_characters(\$etc_issue) if $etc_issue;
        # Note: always exceptions, so wild card after release/version: 
        # /etc/lsb-release-crunchbang
        # Wait to handle since crunchbang file is one of the few in the world 
that 
        # uses this method
-       @{$distro->{'files'}} = 
main::globber('/etc/{*[-_]{[rR]elease,[vV]ersion}*,issue}');
-       push(@{$distro->{'files'}}, '/etc/bodhibuilder.conf') if -r 
'/etc/bodhibuilder.conf'; # legacy
+       @{$distro->{'files'}} = 
main::globber('/etc/{*[-_]{[rR]elease,[vV]ersion}*,VERSION,issue}');
        @osr = main::reader($os_release) if -r $os_release;
+       # a few with custom distro file locations
+       if (-r '/etc/bodhibuilder.conf'){
+               push(@{$distro->{'files'}}, '/etc/bodhibuilder.conf'); # legacy
+       }
        if (-f '/etc/bodhi/info'){
                $lsb_release = '/etc/bodhi/info';
                $distro->{'file'} = $lsb_release;
                $distro->{'issue-skip'} = 1;
                push(@{$distro->{'files'}}, $lsb_release);
        }
+       # their issue is full of ascii art, and they use irregular distro file 
name
+       elsif (-d '/usr/src/t2-src' && -s '/etc/VERSION'){
+               $distro->{'file'} = '/etc/VERSION';
+               push(@{$distro->{'files'}}, $distro->{'file'});
+               $distro->{'issue-skip'} = 1;
+       }
        $distro->{'issue'} = $issue if -f $issue;
        $distro->{'lsb'} = $lsb_release if -f $lsb_release;
        if (!$distro->{'issue-skip'} && $etc_issue){
@@ -31696,7 +31866,8 @@
                        # Special case, to force manjaro/antergos which also 
have arch-release
                        # manjaro should use lsb, which has the full info, arch 
uses os release
                        # antergos should use /etc/issue. We've already checked 
os-release above
-                       if ($distro->{'id'} eq 'antergos' || (grep 
{/antergos|chakra|manjaro/} @{$distro->{'files'}})){
+                       if ($distro->{'id'} eq 'antergos' || 
+                       (grep {/antergos|chakra|manjaro/} 
@{$distro->{'files'}})){
                                @{$distro->{'files'}} = grep {!/arch-release/} 
@{$distro->{'files'}};
                        }
                        my $dist_files_str = join('|', @{$distro->{'files'}});
@@ -31727,7 +31898,7 @@
        if (-r '/etc/antiX'){
                @working = main::reader('/etc/antiX');
                $distro->{'name'} = main::awk(\@working,'antix.*\.iso') if 
@working;
-               $distro->{'name'} = main::clean_characters($distro->{'name'}) 
if $distro->{'name'};
+               main::clean_characters(\$distro->{'name'}) if $distro->{'name'};
                push(@{$distro->{'method'}},'file: /etc/antiX');
        }
        # This handles case where only one release/version file was found, and 
it's lsb-release. 
@@ -31773,9 +31944,7 @@
                        }
                        push(@{$distro->{'method'}},'default: distro file');
                }
-               if ($distro->{'name'}){
-                       $distro->{'name'} = 
main::clean_characters($distro->{'name'});
-               }
+               main::clean_characters(\$distro->{'name'}) if $distro->{'name'};
        }
        # Otherwise try  the default debian/ubuntu/distro /etc/issue file
        elsif ($distro->{'issue'}){
@@ -31803,8 +31972,14 @@
                                push(@{$distro->{'method'}},'issue-id; from 
program version');
                        }
                        else {
-                               $distro->{'name'} =  $etc_issue;
-                               push(@{$distro->{'method'}},'issue: source');
+                               # make sure it has letters in name!
+                               if (($lc_issue =~ tr/[a-z]/[a-z]/) > 3){
+                                       $distro->{'name'} = $etc_issue;
+                                       push(@{$distro->{'method'}},'issue: 
source');
+                               }
+                               else {
+                                       push(@{$distro->{'method'}},'issue: 
invalid distro value');
+                               }
                                # This handles an arch bug where 
/etc/arch-release is empty and /etc/issue 
                                # is corrupted only older arch installs that 
have not been updated should 
                                # have this fallback required, new ones use 
os-release
@@ -32063,7 +32238,7 @@
                foreach my $key (keys %base_version){
                        if (-r $base_version{$key} && $distro->{'name'} =~ 
/($key)/i){
                                $distro->{'base'} = 
main::reader($base_version{$key},'strip',0);
-                               $distro->{'base'} = 
main::clean_characters($distro->{'base'}) if $distro->{'base'};
+                               main::clean_characters(\$distro->{'base'}) if 
$distro->{'base'};
                                push(@{$distro->{'base-method'}},"base_version: 
file: $key");
                                last;
                        }
@@ -34060,6 +34235,7 @@
        ['guix-sys','guix','p','package -p "/run/current-system/profile" 
-I',1,0,''],
        ['guix-usr','guix','p','package -I',1,0,''],
        ['kiss','kiss','p','list',1,0,''],
+       ['mine','mine','p','-q',1,0,'','',['gasgui','gastone']],
        ['mport','mport','p','list',1,0,''],
        # netpkg puts packages in same place as slackpkg, only way to tell apart
        ['netpkg','netpkg','d','/var/lib/pkgtools/packages/*',1,5,'\\/',
@@ -34089,14 +34265,11 @@
         ['sbopkg','sboui','slackpkg','slapt-get','slpkg','swaret']],
        # rpm way too slow without nodigest/sig!! confirms packages exist
        # but even with, MASSIVELY slow in some cases, > 20, 30 seconds!!!!
-       # find another way to get rpm package counts or don't show this feature 
for rpm!!
-       ['rpm','rpm','force','-qa --nodigest --nosignature',1,0,'',
-        'main::check_program(\'apt-get\') && main::check_program(\'dpkg\')',
+       # Find another way to get rpm package counts to get rid of --rpm 
requirement!
+       ['rpm','rpm','force','-qa --nodigest 
--nosignature',1,0,'','skip_pm($pm)',
         ['dnf','packagekit','up2date','urpmi','yast','yum','zypper']],
-       # uncommon case where apt-get frontend for rpm, w/o dpkg, like AltLinux 
did
-       ['rpm-apt','rpm','p','-qa',1,0,'',
-        'main::check_program(\'apt-get\') && !main::check_program(\'dpkg\')',
-        ['apt-get','rpm']],
+       # uncommon case where apt-get frontend for rpm, w/o dpkg, eg AltLinux
+       ['rpm-apt','rpm','p','-qa',1,0,'','skip_pm($pm)',['apt-get','rpm']],
        # scratch is a programming language too, with software called scratch
        
['scratch','pkgbuild','d','/var/lib/scratchpkg/index/*/.pkginfo',1,5,'\\/',
         '-d \'/var/lib/scratchpkg\''],
@@ -34106,8 +34279,6 @@
        # ['spkg','spkg','p','--installed',1,0,''],
        ['tazpkg','tazpkg','p','list',1,0,'','',['tazpkgbox','tazpanel']],
        ['tce','tce-status','p','-i',1,0,'','',['apps','tce-load']],
-       # note: I believe mageia uses rpm internally but confirm
-       # ['urpmi','urpmq','p','??',1,0,''], 
        ['xbps','xbps-query','p','-l',1,1,''],
        # ['xxx-brew','brew','p','--cellar',0,0,''], # verify how this works
        ['zzz-flatpak','flatpak','p','list',0,0,''],
@@ -34116,9 +34287,11 @@
        my ($program);
        foreach my $pm (@pkg_managers){
                if ($program = main::check_program($pm->[1])){
+                       print "0: test: $pm->[0]: $pm->[1]\n" if $dbg[67];
                        next if $pm->[7] && !eval $pm->[7];
-                       my ($disabled,$libs,@list,$pmts);
-                       if ($pm->[2] eq 'p' || ($pm->[2] eq 'force' && 
check_run($pm))){
+                       print "1: use:  $pm->[0]: $pm->[1]\n" if $dbg[67];
+                       my ($disabled,$libs,@list,$pm_tools);
+                       if ($pm->[2] eq 'p' || ($pm->[2] eq 'force' && 
use_pm($pm))){
                                chomp(@list = qx($program $pm->[3] 
2>/dev/null)) if $pm->[3];
                        }
                        elsif ($pm->[2] eq 'd'){
@@ -34154,14 +34327,14 @@
                                        }
                                }
                                if (@tools){
-                                       
main::make_list_value(\@tools,\$pmts,',','sort');
+                                       
main::make_list_value(\@tools,\$pm_tools,',','sort');
                                }
                        }
                        $pms{$pm->[0]} = {
                        'disabled' => $disabled,
                        'pkgs' => $count,
                        'libs' => $libs,
-                       'tools' => $pmts,
+                       'tools' => $pm_tools,
                        };
                        $pms{'total'} += $count if defined $count;
                        # print Data::Dumper::Dumper \%pms;
@@ -34184,20 +34357,51 @@
        }
 }
 
-sub check_run {
+# skip is if false, so skip conditions must be false, non skip true.
+# args: 0: $pm ref, used directly
+sub skip_pm {
+       my $b_use;
+       # print Data::Dumper::Dumper $_[0];
+       if (${_[0]}->[1] eq 'rpm'){
+               # use only if not urpmi and not rpm-apt, this covers most 
cases, and use_pm
+               # fine tunes the coverage.
+               if (${_[0]}->[0] eq 'rpm'){
+                       if (!(main::check_program('apt-get') && 
!main::check_program('dpkg'))){
+                               $b_use = 1;
+                       }
+               }
+               # this covers corner case of alt linux, that has apt-get but 
not dpkg
+               elsif (${_[0]}->[0] eq 'rpm-apt'){
+                       if (main::check_program('apt-get') && 
!main::check_program('dpkg')){
+                               $b_use = 1;
+                       }
+               }
+       }
+       return $b_use;
+}
+
+# args: 0: $pm ref, use directly
+sub use_pm {
        if ($force{'pkg'}){
+               print " use_pm: --rpm force\n" if $dbg[67];
                return 1;
        }
        elsif (${_[0]}->[1] eq 'rpm'){
                # testing for core wrappers for rpm, these should not be 
present in non
-               # redhat/suse based systems. mageia has urpmi, dnf, yum
+               # mageia/redhat/suse based systems. mageia has urpmi, dnf, yum
                foreach my $tool (('dnf','up2date','urpmi','yum','zypper')){
-                       return 0 if main::check_program($tool);
+                       if (main::check_program($tool)){
+                               print " use_pm: $tool match\n" if $dbg[67];
+                               return 0;
+                       }
                }
-               # Note: test fails: apt-rpm (pclinuxos,alt linux), unknown how 
to detect
+               # Note: test fails: apt-rpm (pclinuxos,alt linux), but apt-rpm 
should pass
                # Add pm test if known to have rpm available.
                foreach my $tool (('dpkg','pacman','pkgtool','tce-load')){
-                       return 1 if main::check_program($tool);
+                       if (main::check_program($tool)){
+                               print " use_pm: $tool match\n" if $dbg[67];
+                               return 1;
+                       }
                }
        }
 }
@@ -35301,7 +35505,7 @@
        'kded2' => ['^KDE( Development 
Platform)?:',2,'--version','KDE',0,0,0,'\sDevelopment Platform',''],
        'kded3' => ['^KDE( Development 
Platform)?:',2,'--version','KDE',0,0,0,'\sDevelopment Platform',''],
        'kded4' => ['^KDE( Development Platform)?:',2,'--version','KDE 
Plasma',0,0,0,'\sDevelopment Platform',''],
-       'kdesktop-trinity' => ['^TDE:',2,'--version','TDE (Trinity)',0,0,0],
+       'kdesktop-trinity' => ['^TDE:',2,'--version','TDE (Trinity)',0,0,0], # 
kdesktop/twin
        'kiwmi' => ['^kwimi',0,'0','kiwmi',0,1,0,'',''], # unverified
        'ksmcon' => ['^ksmcon',0,'0','ksmcon',0,1,0,'',''],# no version
        'kwin' => ['^kwin',0,'0','kwin',0,1,0,'',''],# no version, same as kde
@@ -35324,6 +35528,7 @@
        'lxqt-session' => ['^lxqt-session',2,'--version','LXQt',0,1,0,'',''],
        'lxqt-variant' => ['^lxqt-panel',0,'0','LXQt-Variant',0,1,0,'',''],
        'lxsession' => ['^lxsession',0,'0','lxsession',0,1,0,'',''],
+       'magmawm' => ['^magma',0,'0','MagmaWM',0,1,0,'',''], # unverified
        'mahogany' => ['^mahogany',0,'0','Mahogany',0,1,0,'',''], # unverified, 
from stumpwm
        'manokwari' => ['^manokwari',0,'0','Manokwari',0,1,0,'',''],
        'marina' => ['^marina',0,'0','Marina',0,1,0,'',''], # unverified
@@ -35333,6 +35538,7 @@
        'mate-about' => 
['^MATE[[:space:]]DESKTOP',-1,'--version','MATE',0,1,0,'',''],
        # note, mate-session when launched with full path returns full path in 
version string
        'mate-session' => ['mate-session',-1,'--version','MATE',0,1,0,'',''], 
+       'maxx' => ['^maxx',0,'0','MaXX',0,1,0,'',''], # unverified, 5Dwm 
recreation
        'maynard' => ['^maynard',0,'0','maynard',0,1,0,'',''], # unverified
        'maze' => ['^maze',0,'0','Maze',0,1,0,'',''], # unverified
        'mcompositor' => ['^mcompositor',0,'0','MCompositor',0,1,0,'',''], # 
unverified
@@ -35354,6 +35560,8 @@
        'mwm' => ['^mwm',0,'0','MWM',0,1,0,'',''],# no version
        'nawm' => ['^nawm',0,'0','nawm',0,1,0,'',''],# unverified
        'newm' => ['^newm',0,'0','newm',0,1,0,'',''], # unverified
+       'newm-atha' => ['^newm',0,'0','new-atha',0,1,0,'',''], # unverified
+       'niri' => ['^niri',0,'0','niri',0,1,0,'',''], # unverified
        'notion' => ['^.',1,'--version','Notion',0,1,0,'',''],
        'nscde' => ['^(fvwm|nscde)',2,'--version','NsCDE',0,1,0,'',''],
        'nucleus' => ['^nucleus',0,'0','Nucleus',0,1,0,'',''], # unverified
@@ -35367,6 +35575,7 @@
        'perceptia' => ['^perceptia',0,'0','perceptia',0,1,0,'',''],
        'phoc' => ['^phoc',0,'0','phoc',0,1,0,'',''], # unverified
        'picom' => ['^\S',1,'--version','Picom',0,1,0,'^v',''],
+       'pinnacle' => ['^pinnacle',0,'0','Pinnacle',0,1,0,'',''], # unverified
        'plasmashell' => ['^plasmashell',2,'--version','KDE 
Plasma',0,1,0,'',''],
        'polonium' => ['^polonium',0,'0','polonium',0,1,0,'',''], # unverified
        'pywm' => ['^pywm',0,'0','pywm',0,1,0,'',''], # unverified
@@ -35389,9 +35598,9 @@
        # out of stump, 2 --version, but in tries to start new wm instance 
endless hang
        'stumpwm' => ['^SBCL',0,'--version','StumpWM',0,1,0,'',''], # hangs 
when run in wm
        'subtle' => ['^subtle',2,'--version','subtle',0,1,0,'',''],
-       'surfaceflinger' => 
['surfaceflinger^',0,'0','SurfaceFlinger',0,1,0,'',''], # Android, unverified
+       'surfaceflinger' => 
['surfaceflinger^',0,'0','SurfaceFlinger',0,1,0,'',''], # unverified, Android
        'sway' => ['^sway',3,'-v','Sway',0,1,0,'',''],
-       'swayfx' => ['^swayfx',0,'0','SwayFX',0,1,0,'',''], # probably same as 
sway, unverified
+       'swayfx' => ['^swayfx',0,'0','SwayFX',0,1,0,'',''], # unverified, 
probably same as sway
        'swayfx' => ['^sway',3,'-v','SwayFX',0,1,0,'',''], # not sure if safe
        'swc' => ['^swc',0,'0','swc',0,1,0,'',''], # unverified
        'swvkc' => ['^swvkc',0,'0','swvkc',0,1,0,'',''], # unverified
@@ -35402,7 +35611,7 @@
        'tinywm' => ['^tinywm',0,'0','TinyWM',0,1,0,'',''], # no version
        'trinkster' => ['^trinkster',0,'0','Trinkster',0,1,0,'',''], # 
unverified
        'tvtwm' => ['^tvtwm',0,'0','tvtwm',0,1,0,'',''], # unverified
-       'twin' => ['^Twin:',2,'--version','Twin',0,0,0,'',''],
+       'twin' => ['^Twin:',2,'--version','Twin',0,0,0,'',''], 
        'twm' => ['^twm',0,'0','TWM',0,1,0,'',''], # no version
        'ukui' => ['^ukui-session',2,'--version','UKUI',0,1,0,'',''],
        'ukwm' => ['^ukwm',2,'--version','ukwm',0,1,0,'',''],
@@ -35415,7 +35624,7 @@
        'vimway' => ['^vimway',0,'0','vimway',0,1,0,'',''], # unverified
        'vivarium' => ['^vivarium',0,'0','Vivarium',0,1,0,'',''], # unverified
        'vtwm' => ['^vtwm',0,'0','vtwm',0,1,0,'',''], # no version
-       'w9wm' => ['^w9wm',3,'-version','w9wm',0,1,0,'',''], # fork of 9wm, 
unverified
+       'w9wm' => ['^w9wm',3,'-version','w9wm',0,1,0,'',''], # unverified, fork 
of 9wm
        'wavy' => ['^wavy',0,'0','wavy',0,1,0,'',''], # unverified
        'waybox' => ['^way',0,'0','waybox',0,1,0,'',''], # unverified
        'waycooler' => ['^way',3,'--version','way-cooler',0,1,0,'',''],
@@ -35440,7 +35649,7 @@
        'wmx' => ['^wmx',0,'0','wmx',0,1,0,'',''], # no version
        'wxrc' => ['^wx',0,'0','',0,1,0,'WXRC',''], # unverified
        'wxrd' => ['^wx',0,'0','',0,1,0,'WXRD',''], # unverified
-       'x9wm' => ['^x9wm',3,'-version','x9wm',0,1,0,'',''], # fork of 9wm, 
unverified
+       'x9wm' => ['^x9wm',3,'-version','x9wm',0,1,0,'',''], # unverified, fork 
of 9wm
        'xcompmgr' => ['^xcompmgr',0,'0','xcompmgr',0,1,0,'',''], # no version
        'xfce-panel' => ['^xfce-panel',2,'--version','Xfce',0,1,0,'',''],
        'xfce4-panel' => ['^xfce4-panel',2,'--version','Xfce',0,1,0,'',''],
@@ -35471,6 +35680,7 @@
        'cdm' => ['^cdm',0,'0','CDM',0,1,0,'',''],
        # might be xlogin, unknown output for -V
        'clogin' => ['^clogin',0,'-V','clogin',0,1,0,'',''], # unverified, 
cysco router
+       'elephant-greeter' => 
['^elephant',0,'0','elephant-greeter',0,1,0,'',''], # unverified, lightdm 
greeter
        'elogind' => ['^elogind',0,'0','elogind',0,1,0,'',''], # no version
        'emptty' => ['^emptty',0,'0','EMPTTY',0,1,0,'',''], # unverified
        'entranced' => ['^entrance',0,'0','Entrance',0,1,0,'',''],
@@ -35487,12 +35697,14 @@
        'lxdm' => ['^lxdm',0,'0','LXDM',0,1,0,'',''],
        'ly' => ['^ly',3,'--version','Ly',0,1,0,'',''],
        'mdm' => ['^mdm',0,'0','MDM',0,1,0,'',''],
-       'mlogind' => ['^mlogind',3,'-v','mlogind',0,1,0,'',''], # guess, 
unverified, BSD SLiM fork
+       'mlogind' => ['^mlogind',3,'-v','mlogind',0,1,0,'',''], # unverified, 
guess. BSD SLiM fork
        'nodm' => ['^nodm',0,'0','nodm',0,1,0,'',''],
        'pcdm' => ['^pcdm',0,'0','PCDM',0,1,0,'',''],
        'qingy' => ['^qingy',0,'0','qingy',0,1,0,'',''], # unverified
+       'qtgreet' => ['^qtgreet',0,'0','qtgreet',0,1,0,'',''], # unverified
        'seatd' => ['^seatd',3,'-v','seatd',0,1,0,'',''],
        'sddm' => ['^sddm',0,'0','SDDM',0,1,0,'',''],
+       'slick-greeter' => ['^slick',0,'0','slick-greeter',0,1,0,'',''], # 
unverified, , lightdm greeter
        'slim' => ['slim version',3,'-v','SLiM',0,1,0,'',''],
        'slimski' => ['slimski version',3,'-v','slimski',0,1,0,'',''], # slim 
fork
        'tbsm' => ['^tbsm',0,'0','tbsm',0,1,0,'',''], # unverified
@@ -35508,7 +35720,6 @@
        ## See ShellData::shell_test() for unhandled but known shells
        'ash' => ['',3,'pkg','ash',1,0,0,'',''], # special; dash precursor
        'bash' => ['^GNU[[:space:]]bash',4,'--version','Bash',1,1,0,'',''],
-       'busybox' => ['^busybox',0,'0','BusyBox',1,0,0,'',''], # unverified, 
hush/ash likely
        'cicada' => ['^\s*version',2,'cmd','cicada',1,1,0,'',''], # special
        'csh' => ['^tcsh',2,'--version','csh',1,1,0,'',''], # mapped to tcsh 
often
        'dash' => ['',3,'pkg','DASH',1,0,0,'',''], # no version, pkg query
@@ -35540,7 +35751,9 @@
        'pulseaudio' => ['^pulseaudio',2,'--version','PulseAudio',0,1,0,'',''],
        'roaraudio' => ['^roaraudio',0,'0','RoarAudio',0,1,0,'',''], # no 
version/unknown?
        ## Tools: Compilers ##
-       'clang' => ['clang',3,'--version','clang',1,1,0,'',''],
+       # T2 SED clang version 18.1
+       # clang version 18.1
+       'clang' => ['clang',2,'--version','clang',1,1,0,'^.*clang',''], 
        # gcc (Debian 6.3.0-18) 6.3.0 20170516
        # gcc (GCC) 4.2.2 20070831 prerelease [FreeBSD]
        'gcc' => ['^gcc',2,'--version','GCC',1,0,0,'\([^\)]*\)',''],
@@ -35833,7 +36046,7 @@
                dawn dtwm dusk dwm echinus evilwm flwm flwm_topside 
                fvwm.*-crystal\S* fvwm1 fvwm2 fvwm3 fvwm95 fvwm
                hackedbox herbstluftwm i3 instantwm ion3 jbwm jwm larswm leftwm 
lwm 
-               matchbox-window-manager mcwm mini miwm mlvwm monsterwm musca 
mvwm mwm 
+               matchbox-window-manager maxx mcwm mini miwm mlvwm monsterwm 
musca mvwm mwm 
                nawm notion openbox nscde pekwm penrose qvwm ratpoison 
                sapphire sawfish scrotwm snapwm spectrwm stumpwm subtle tinywm 
tvtwm twm 
                uwm vtwm windowlab [wW]indo[mM]aker w9wm wingo wm2 wmfs wmfs2 
wmii2 wmii 
@@ -35865,8 +36078,9 @@
                cage cagebreak cardboard chameleonwm clayland comfc 
                dwl dwc epd-wm fireplace feathers fenestra glass gamescope 
greenfield grefson 
                hikari hopalong [Hh]yprland inaban japokwm kiwmi labwc laikawm 
lipstick liri 
-               mahogany marina maze maynard motorcar newm nucleus 
-               orbital orbment perceptia phoc polonium pywm qtile river 
rootston rustland 
+               magmawm mahogany marina maze maynard motorcar newm(-atha)? niri 
nucleus 
+               orbital orbment perceptia phoc pinnacle polonium pywm 
+               qtile river rootston rustland 
                simulavr skylight smithay sommelier sway swayfx swc swvkc 
                tabby taiwins tinybox tinywl trinkster velox vimway vivarium 
                wavy waybox way-?cooler wayfire wayhouse waymonad westeros 
westford 
@@ -35878,15 +36092,17 @@
                albert alltray awesomebar awn 
                bar barpanel bbdock bbpager bemenu bipolarbar bmpanel bmpanel2 
budgie-panel 
                cairo-dock dde-dock deskmenu dmenu(-wayland)? dockbarx docker 
docky dzen dzen2 
-               fbpanel fspanel fuzzel glx-dock gnome-panel hpanel 
+               fbpanel fspanel fuzzel gmenu glx-dock gnome-panel hpanel 
hybridbar
                i3bar i3-status(-rs|-rust)? icewmtray jgmenu kdocker kicker 
krunner ksmoothdock
-               latte lavalauncher latte-dock lemonbar ltpanel luastatus 
lxpanel lxqt-panel 
+               latte latte-dock lavalauncher lemonbar ltpanel luastatus 
+               lxpanel lxqt-panel 
                matchbox-panel mate-panel mauncher mopag 
nwg-(bar|dock|launchers|panel) 
-               openbox-menu ourico perlpanel plank polybar pypanel 
razor(qt)?-panel rofi rootbar 
+               onagre openbox-menu ourico perlpanel plank polybar pypanel 
+               razor(qt)?-panel rofi rootbar 
                sfwbar simplepanel sirula some_sorta_bar stalonetray swaybar 
-               taffybar taskbar tint2 tofi trayer ukui-panel vala-panel 
-               wapanel waybar wbar wharf wingpanel witray wldash wmdocker 
wmsystemtray wofi 
-               xfce[45]?-panel xmobar yambar yabar yofi)));
+               taffybar taskbar tint2 tofi trayer ukui-panel ulauncher 
vala-panel 
+               wapanel waybar wbar wharf wingpanel witray wldash wmdocker 
wmenu 
+               wmsystemtray wofi xfce[45]?-panel xmobar yambar yabar yofi)));
                # Generate tools: power manager daemons, then 
screensavers/lockers. 
                # Note that many lockers may not be services
                @{$ps_data{'tools-test'}}=qw(away boinc-screensaver 
budgie-screensaver 
@@ -35894,7 +36110,7 @@
                hyprlock i3lock kscreenlocker light-locker lockscreen lxlock 
                mate-screensaver nwg-lock 
                physlock rss-glx slock swayidle swaylock ukui-screensaver 
unicode-screensaver 
-               xautolock xfce4-screensaver xlock xlockmore xscreensaver 
+               waylock xautolock xfce4-screensaver xlock xlockmore 
xscreensaver 
                xscreensaver-systemd xsecurelock xss-lock xtrlock);
                
process_items(\@{$ps_data{'tools-active'}},join('|',@{$ps_data{'tools-test'}}));
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inxi-3.3.34-1/inxi.1 new/inxi-3.3.35-1/inxi.1
--- old/inxi-3.3.34-1/inxi.1    2024-04-14 04:49:33.000000000 +0200
+++ new/inxi-3.3.35-1/inxi.1    2024-06-18 23:00:07.000000000 +0200
@@ -15,7 +15,7 @@
 .\"  with this program; if not, write to the Free Software Foundation, Inc.,
 .\"  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 .\"  
-.TH INXI 1 "2024\-04-13"inxi" "inxi manual"
+.TH INXI 1 "2024\-06-18"inxi" "inxi manual"
 
 .SH NAME
 inxi \- Command line system information script for console and IRC
@@ -737,6 +737,8 @@
 
 \fBCARDS\fR (NuTyX + derived versions)
 
+\fBEMERGE\fR (T2 SDE, svn target URL)
+
 \fBEOPKG\fR (Solus)
 
 \fBNETPKG\fR (Zenwalk/Slackware)
@@ -771,7 +773,7 @@
 
 \fBTAZPKG\fR (Slitaz)
 
-\fBURPMI\fR (Mandriva, Mageia + derived versions)
+\fBURPM\fR (Mandriva, Mageia + derived versions)
 
 \fBXBPS\fR (Void)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inxi-3.3.34-1/inxi.changelog 
new/inxi-3.3.35-1/inxi.changelog
--- old/inxi-3.3.34-1/inxi.changelog    2024-04-14 04:49:33.000000000 +0200
+++ new/inxi-3.3.35-1/inxi.changelog    2024-06-18 23:00:07.000000000 +0200
@@ -1,4 +1,261 @@
 
================================================================================
+Version: 3.3.35
+Patch: 00
+Date: 2024-06-18
+--------------------------------------------------------------------------------
+RELEASE NOTES:
+--------------------------------------------------------------------------------
+
+Added more Wayland wm/de updates: wm, tools, lockers, etc. This list will grow 
+slowly over time, I'm sure. A new but very old distro, T2 SDE added, for distro
+ID, mine package manager.
+
+Adding support for something as uncommon as T2 has a primary value that such 
+systems, particularly very old ones, tend to expose certain corner case data 
+alternate syntaxes (clang --version, /etc/issue), which then makes inxi 
overall 
+more robust. 
+
+For example, because T2 used /etc/issue to show an ascii login, the actual 
first 
+line was just two literal lines, so the distro name appeared as two lines. 
This 
+was because there was an assumption that the first line of /etc/issue would 
+always be the distro name. Added filters to not use issue value if it does not 
+contain at least 3 characters.
+
+Also added in premilinary Loongson CPU/GPU support, but for GPU, have only 1 
+product ID to match, and no other meaningful data. CPU may work, but needs real
+hardware based testing to confirm. Obviously I can't do it, so if any Loongson 
+users want to test and report, feel free. Or not, up to you. Framework for full
+support it there now.
+
+--------------------------------------------------------------------------------
+SPECIAL THANKS:
+
+1. mrmazda, as is often the case, for tracking and spotting issues with 
graphics 
+and desktop data. He also noticed the weird output for urpm repos, which is now
+corrected, as well as finding some errors with rpm package counts, which led to
+a small refactor of the rpm logic in PackageData.
+
+2. GRAPHICS: gl_data(): gfxstrand on issue #303 for figuring out what was 
+breaking OpenGL Mesa driver version detection. (was extra (git-..commit-ID) at 
+end of version string).
+
+3. DistroData: codeberg user r1w1s1 in issue #304 for pointing out that the '+'
+part of the distro name can be meaningful, as in Slackware 15.0+, where the +
+means it's Slackware current.
+
+--------------------------------------------------------------------------------
+KNOWN ISSUES:
+
+1. GRAPHICS: GPU device IDs: Intel device ID sources are not being reliable, 
and 
+some IDs vanished from the raw data files. This is too hard to work around, so 
+leaving as is. In a sense, Intel is just getting too hard to support, though 
+I'll keep trying. But it's not cute anymore.
+
+This applies to Intel CPU Ids too, for some reason, Intel just can't seem to 
+manage to create a new CPU family ID, and so are actually running out of their 
+256 Family 6 model IDs (2^8, or 16x16 hex). This is bizarrre to see such a 
huge 
+corporation fail to do something so utterly trivial, and suggests that there 
may 
+still be internal engineering issues lingering despite the recent attemps to 
+resolve them.
+
+2. PACKAGES: RPM remains unacceptably slow to get a simple package count 
query, 
+even with --nodigest / --nosignature, on one fedora 39 took 7 seconds, and in 
+mageia/fedora takes 0.35-0.80 seconds without those flags, which is easily 10x 
+slower than most package managers. There is nothing I can do to fix this that 
I 
+am aware of. If anyone knows of other options I can pass rpm to get it to list 
+the packages in a sane timeframe, let me know. 
+
+During previous testing, nodigest/signature did speed it up, but that seems to 
+have regressed now again in one fedora test case, but does work in most 
others. 
+For now, --rpm flag will be required to see rpm package counts for core rpm 
+distros, otherwise people will blame inxi for being slow.
+
+--------------------------------------------------------------------------------
+BUGS:
+
+1. Nothing to speak of beyond some fixes.
+
+--------------------------------------------------------------------------------
+FIXES:
+
+1a. REPOS: For slpkg, adapted to new syntax for each repo. Retained support 
for 
+older syntaxes.
+
+1b. REPOS: Fixed output for urpm, pisi, and eopkg. These all had the same 
error,
+which was creating a new full repo type line per repo listed by these software 
+tools. Now shows as expected:
+
+[repo name] ~ [repo location]
+
+2. main::set_path: added hack to put back in /opt/trinity/bin if distro forgot
+to add it to PATH.
+
+3a. SYSTEM: DesktopData: Added fallback test for twin for Trinity version 
+detections. This goes along with path fix for this extreme corner case (so far
+mageia only one who didn't add trinity location to PATH).
+
+3b. SYSTEM: DistroData: Added filter in case line 1 of /etc/issue doesn't 
+contain any valid characters. That's for T2 failure.
+
+3c. SYSTEM: DistroData: main::clean_characters(): removed filter for '+' 
because 
+that can be a meaningful part of the name, as in r1w1s1's codeberg issue #304, 
+where the + indicates it's Slackware 15.0 Current, aka: Slackware 15.0+.
+
+4. GRAPHICS: gl_data(): Issue #303 exposed a possible syntax that inxi had not
+seen or handled before, the OpenGL core profile version string ending with a 
git 
+commit ID in parens: 
+OpenGL core profile version: 4.6 (Core Profile) Mesa 24.2.0-devel 
(git-f0620dae)
+as opposed to handled and expected:
+OpenGL core profile version: 4.6 (Core Profile) Mesa 24.2.0-devel
+
+This just required adding another 0 or 1 occurance test for that ending git 
+commit string. Really for anything tacked on to the end of the string after the
+mesa / nvidia driver version value.
+
+5. PACKAGES: Added support for Mageia's urpmi package counts, using rpm. 
That's 
+either not worked, or broke recently, I don't know which. 
+
+Note that rpm -qa is unacceptably slow (even using --nodigest --nosignature), 
so 
+requires use of --rpm flag for primarily rpm distros. Otherwise they will 
think 
+it's inxi that is slow.
+
+Just to document it, mageia also says they may move to dnf in the future. But 
+that should not matter with the redone logic.
+https://wiki.mageia.org/en/Ways_to_install_programs#.deb_packages
+
+6. INFO: compilers: made clang version detection more robust.
+
+--------------------------------------------------------------------------------
+ENHANCEMENTS:
+
+1. SYSTEM: DesktopData: Added the following items:
+
+* menus/launchers: wayland gmenu, onagre, ulauncher, wmenu.
+
+* greeters: slick-greeter/elephant-greeter lightdm, but those are not the same 
+as greetd/seatd type greeters so not using, but leaving in comments.
+
+* bars: hybridbar.
+
+* x11 wm: MaXX.
+
+* wayland compositors: MagmaWM, newm [already abandoned], newm-atha [fork of 
+newm], niri, Pinnacle. 
+
+2. INFO: PowerData: Added waylock
+
+3a. GRAPHICS: new AMD, Intel, Nvidia GPU IDs.
+
+4a. GRAPHICS: loongson GPU arch data. Note this data is extremely incomplete,
+but at least it's got the framework to support Loongson GPUs now. Hard to find
+this data in any reliable format beyond process nodes for each CPU, and since 
+most GPUs are iGPUs, in theory those should be the same. Maybe some Chinese 
+users will decide to provide this info. 
+
+Also see CODE 4b for the tools for this item.
+
+5. PACKAGES: added package manager type mine. That's used in T2, maybe others.
+Also added tools gastone, gasgui. 
+
+6. REPOS: added basic T2 svn repo URL handler. Not robust, but that's fine.
+
+7. CPU: added Loongon CPU arch support, that should work reasonably well out 
of 
+the box since also found sample set of cpuinfo files.
+
+Also see CODE 4d for the tool for this item.
+
+--------------------------------------------------------------------------------
+CHANGES:
+
+1. REPOS: See FIX 4. Output was silly for repo reports, that's always been 
+broken, now correctly shows expected (for urpm, eopkg, pisi):
+
+Active urpm repos:
+  1: [repo-name] ~ [repo location]
+  2: [repo-name] ~ [repo location]
+  
+lines per package manager tool, instead of one full repo line per repo in the 
+output:
+
+Active urpm repo: Stable
+  1: [repo location]
+Active urpm repo: Testing
+  1: [repo location]
+  
+2: MAIN::clean_characters(): removed filter for '+' because that can be part 
of 
+the distro name, like Slackware 15.0+ (current, that is). Hopefully this won't
+create any issues for other name strings, but it should be ok.
+
+--------------------------------------------------------------------------------
+DOCUMENTATION:
+
+1a. DOCS: inxi-desktop-wm.txt, updated for new wm, bars, LM, launcher/menus.
+
+1b. DOCS: inxi-power.txt: added waylock to lockers sectsion.
+
+1c. DOCS: inxi-repo-package-manager.txt: updated for 3 syntaxes of slpkg, with
+samples. Also updated for mageia urpm, which has special package list rpm 
+requirements.
+
+1d. DOCS: inxi-cpu.txt: added more links and sources for Loongson.
+
+1e. DOCS: inxi-distros.txt: refactored a bit, added top distro names to section
+lists, added T2 instructions.
+
+--------------------------------------------------------------------------------
+CODE:
+
+1a. MAIN: ProgramData: 
+
+* Had redundant busybox hash key data array, first one was replaced by 
explicit 
+busybox ash version logic in shell, and running one is for init data.
+
+I don't actually know what Perl does when you give it a second case of same 
key 
+name for a hash. Probably worth finding out. But it worked in testing.
+
+* Cleaned up, made consistent ', # unverified' program data key array comments 
+to make them easier to find/ Ideally one day we'll get people to help figure 
out 
+these unverified program version data items. Now to find a way to motivate 
+them...
+
+1b. MAIN: PackageData: Added --dbg 67 to make rpm packages handling debuggable.
+Also refactored a bit, again to make rpm stuff debuggable.
+
+1c. MAIN: clean_characters: refactored, now uses references, not copies, and 
+removed '+' from filter. This can be meaningful part of distro name.
+
+2. REPOS: refactored completely slpkg to handle 3 possible config file syntax,
+including the 2024-04-19 update which changes it completely. 
+
+It's tempting to apply this to all multi-line repo syntax handlers, though the
+cost is losing the order the repos appear in the file, since the data now goes 
+into a hash, which Perl does not have ordering, so it has to be sorted on
+constructing of repo line arrays.
+
+3. DEBUGGER: Added kdesktop, kwin_wayland, twin --version data, might be 
useful.
+kwin_wayland was an oversight, already had kwin_x11 so just never added wl.
+
+4a: TOOLS: made top comment header syntax consistent, added some GPL to ones 
+where I'd forgotten to do that. Updated copyright years. Also made empty line 
+use consistent in all the tool files.
+
+4b. TOOLS: gpu_raw.pl: Got rid of manually updated list of nv numeric keys, 
and 
+now extract it it automatically, so updates by itself when I add a new nv 
driver 
+series. Should have made it that way from start, but better late than never. 
+Always trying to chip away at anything manual I have to update for these 
+matching tables, makes maintaining the features easier.
+
+4c. TOOLS: gpu_raw.pl, gpu_ids.pl: added premilimary support for Loongson GPUs.
+Very little data, but did at least get some device IDs for Loongson, but not 
+very reliable or accurate. This will need updates in future. Anyone Chinese 
+users want to help? 
+
+4d. TOOLS: cpu_arch.pl: added Loongon support, first new CPU arch in a while!
+
+--------------------------------------------------------------------------------
+-- Harald Hope - Tue, 18 June 2024 13:16:38 -0700
+
+================================================================================
 Version: 3.3.34
 Patch: 00
 Date: 2024-04-13
@@ -10,7 +267,7 @@
 larger, features. Most pressing in terms of numbers affected was the failure
 to detect in display, non console, for Wayland without Xwayland running. But 
 updates will impact a fairly wide range of systems, though mostly are corner 
-case issues, but inxi is all about handling corner cases to make the handliing 
+case issues, but inxi is all about handling corner cases to make the handling 
 of core stuff more robust and less prone to failure or error.
 
 
--------------------------------------------------------------------------------
@@ -65,7 +322,7 @@
 Thanks Codebergy issue poster thatso in issue #299 for pointing this out.
 
 2. NETWORK: services: was missing nfsd because it's a kernel process, that's 
-corrected. Showed as: [nfsd]
+corrected. Shows as: [nfsd], so its brackets have to be stripped off first.
 
 3. MAIN: primary DISPLAY test fails to check for WAYLAND_DISPLAY and other 
 desktop session environmental variables only present if X/Wayland are running 
@@ -111,12 +368,19 @@
 in kernel yet but may be. Also added in various filter lists just in case. 
 Search for'nouveau' to find occurances. 
 
-4. CPU: Added more AMD, Intel CPU Ids. The Intel stuff is getting really 
+4a. CPU: Added more AMD, Intel CPU Ids. The Intel stuff is getting really 
 difficult to track, they refuse to adopt sane family updates, keeping it 
always 
-at 6, and thus cram more and more into finite 2 hexadecimal numbers, leaving 
-marketing terms in place of actual die process engineering. There's only so 
much 
-I can do to work around this, so if you find errors, do the research, and 
submit
-corrections, keeping in mind these things are super fuzzy.
+at 6, and thus cram more and more into finite 2 hexadecimal model numbers, 
+leaving marketing terms in place of actual die process engineering. There's 
only 
+so much I can do to work around this, so if you find errors, do the research, 
+and submit corrections, keeping in mind these things are super fuzzy.
+
+4b. CPU: Added premilinary support for Loongson CPUs. Using regex to detect 
+arch/process info, but not positive how it will handle MIPS tests. No way to 
+fully test without running inxi on an actual Loongson system due to the early 
+MIPS/ARM type tests inxi runs. We'll see. So far only testing with fake 
cpuinfo 
+files. But it's a start. Any actual Loongson user should test and supply 
+datasets if gpu/cpu info is off.
 
 5. DRIVES: More disk vendors, the endless list. Unhandled list grows slowly, 
 maybe one day someone will step in and figure out what more of them are, 
@@ -154,6 +418,11 @@
 ZFS Array data. The regex was simply too convoluted to work reliably, so it 
 failed under certain cases, FreeBSD Linear ZFS mode for example.
 
+3. CPU: Added data/cpu/loongson cpuinfo data files; added loongson support to
+tools/cpu_arch.pl. We'll see if it works, won't know for a while since needs 
+a hardware run loongson test, this is just theoretical, but fixes should be 
+minor in case it doesn't work.
+
 
--------------------------------------------------------------------------------
 -- Harald Hope - Sat, 13 March 2024 19:00:08 -0800
 

++++++ inxi.obsinfo ++++++
--- /var/tmp/diff_new_pack.6ISOJ3/_old  2024-06-20 16:48:00.183325130 +0200
+++ /var/tmp/diff_new_pack.6ISOJ3/_new  2024-06-20 16:48:00.223326537 +0200
@@ -1,5 +1,5 @@
 name: inxi
-version: 3.3.34-1
-mtime: 1713062973
-commit: c23f35b885563af2ba4bc831f89eab2bfff9a949
+version: 3.3.35-1
+mtime: 1718744407
+commit: d11fce80412dbfd0613dabba1840b645bb8b2f94
 

Reply via email to