Repository Analysis

sabamdarif/termux-desktop

Install a full Linux desktop environment on your Android device with Termux X11 ( VNC optional) and also enable hardware acceleration

33.7 Strong AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of sabamdarif/termux-desktop, a Shell project with 2,090 GitHub stars. SynthScan v2.0 examined 5,572 lines of code across 16 source files, recording 128 pattern matches distributed across 8 syntactic categories. The overall adjusted score of 33.7 places this repository in the Strong AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

33.7
Adjusted Score
33.7
Raw Score
100%
Time Factor
2026-07-09
Last Push
2.1K
Stars
Shell
Language
5.6K
Lines of Code
16
Files
128
Pattern Hits
2026-07-14
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 0MEDIUM 52LOW 76

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 128 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Decorative Section Separators16 hits · 69 pts
SeverityFileLineSnippetContext
MEDIUMother/motd.sh37#==============================================COMMENT
MEDIUMother/motd.sh39#==============================================COMMENT
MEDIUMother/motd.sh52#==============================================COMMENT
MEDIUMother/motd.sh54#==============================================COMMENT
MEDIUMother/motd.sh63#==============================================COMMENT
MEDIUMother/motd.sh65#==============================================COMMENT
MEDIUMother/motd.sh68#==============================================COMMENT
MEDIUMother/motd.sh70#==============================================COMMENT
MEDIUMother/motd.sh84#==============================================COMMENT
MEDIUMother/motd.sh86#==============================================COMMENT
MEDIUMother/motd.sh91#==============================================COMMENT
MEDIUMother/motd.sh93#==============================================COMMENT
MEDIUMother/motd.sh98#==============================================COMMENT
MEDIUMother/motd.sh100#==============================================COMMENT
MEDIUMother/motd.sh104#==============================================COMMENT
MEDIUMother/motd.sh106#==============================================COMMENT
Excessive Try-Catch Wrapping54 hits · 54 pts
SeverityFileLineSnippetContext
MEDIUMadd2menu/add2menu.py225 print(f"Error closing log file: {e}")CODE
MEDIUMadd2menu/add2menu.py1248 print(f"Error processing {filepath}: {str(e)}")CODE
MEDIUMadd2menu/add2menu.py1250 print(f"Error listing desktop files with sudo: {result.stderr}")CODE
MEDIUMadd2menu/add2menu.py1255 print(f"Error running sudo command: {e}")CODE
MEDIUMadd2menu/add2menu.py1336 print(f"Error reading desktop file with sudo: {cmd_result.stderr}")CODE
MEDIUMadd2menu/add2menu.py1343 print(f"Error parsing desktop file with sudo {filepath}: {e}")CODE
MEDIUMadd2menu/add2menu.py130 print(f"Error closing log file: {e}")CODE
MEDIUMadd2menu/add2menu.py189 print(f"Error writing to log file: {e}")CODE
MEDIUMadd2menu/add2menu.py590 print(f"Error reading configuration: {e}")CODE
MEDIUMadd2menu/add2menu.py1018 print(f"Error processing added file {filepath}: {str(e)}")CODE
MEDIUMadd2menu/add2menu.py1198 print(f"Error processing {filepath}: {str(e)}")CODE
MEDIUMadd2menu/add2menu.py1371 print(f"Error reading symlink with sudo: {e}")CODE
MEDIUMadd2menu/add2menu.py1431 print(f"Error parsing desktop file {filepath}: {e}")CODE
MEDIUMadd2menu/add2menu.py1627 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1657 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1679 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1702 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1729 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1760 print(f"Error getting fallback icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1970 print(f"Error copying desktop file with sudo: {e}")CODE
MEDIUMadd2menu/add2menu.py2119 print(f"Error running {' '.join(full_cmd)}: {e}")CODE
MEDIUMadd2menu/add2menu.py2596 print(f"Error processing {filepath}: {str(e)}")CODE
MEDIUMadd2menu/add2menu.py2702 print(f"Error reading gtkrc: {e}")CODE
MEDIUMadd2menu/add2menu.py2716 print(f"Error reading gtk3 settings: {e}")CODE
MEDIUMadd2menu/add2menu.py2744 print(f"Error loading icon '{icon_name}' from theme: {e}")CODE
MEDIUMadd2menu/add2menu.py2757 print(f"Error setting icon for '{icon_name}': {e}")CODE
LOWadd2menu/add2menu.py224 except Exception as e:CODE
LOWadd2menu/add2menu.py291 except Exception as e:CODE
LOWadd2menu/add2menu.py1247 except Exception as e:CODE
LOWadd2menu/add2menu.py1254 except Exception as e:CODE
LOWadd2menu/add2menu.py1342 except Exception as e:CODE
LOWadd2menu/add2menu.py129 except Exception as e:CODE
LOWadd2menu/add2menu.py188 except Exception as e:CODE
LOWadd2menu/add2menu.py589 except Exception as e:CODE
LOWadd2menu/add2menu.py981 except Exception as e:CODE
LOWadd2menu/add2menu.py1017 except Exception as e:CODE
LOWadd2menu/add2menu.py1197 except Exception as e:CODE
LOWadd2menu/add2menu.py1430 except Exception as e:CODE
LOWadd2menu/add2menu.py1625 except Exception as e:CODE
LOWadd2menu/add2menu.py1655 except Exception as e:CODE
LOWadd2menu/add2menu.py1677 except Exception as e:CODE
LOWadd2menu/add2menu.py1700 except Exception as e:CODE
LOWadd2menu/add2menu.py1727 except Exception as e:CODE
LOWadd2menu/add2menu.py1758 except Exception as e:CODE
LOWadd2menu/add2menu.py1969 except Exception as e:CODE
LOWadd2menu/add2menu.py2118 except Exception as e:CODE
LOWadd2menu/add2menu.py2357 except Exception as e:CODE
LOWadd2menu/add2menu.py2387 except Exception as e:CODE
LOWadd2menu/add2menu.py2595 except Exception as e:CODE
LOWadd2menu/add2menu.py2701 except Exception as e:CODE
LOWadd2menu/add2menu.py2715 except Exception as e:CODE
LOWadd2menu/add2menu.py2743 except Exception as e:CODE
LOWadd2menu/add2menu.py2756 except Exception as e:CODE
LOWadd2menu/add2menu.py2854 except Exception as e:CODE
Self-Referential Comments10 hits · 28 pts
SeverityFileLineSnippetContext
MEDIUMadd2menu/add2menu.py230 # Create a file chooser dialogCOMMENT
MEDIUMadd2menu/add2menu.py2919 # Create the log window if it doesn't exist, but don't show it yetCOMMENT
MEDIUMadd2menu/add2menu.py70 # Create a scrolled window for the text viewCOMMENT
MEDIUMadd2menu/add2menu.py75 # Create a text view with monospace font for terminal-like appearanceCOMMENT
MEDIUMadd2menu/add2menu.py143 # Create a CSS provider for custom stylingCOMMENT
MEDIUMadd2menu/add2menu.py970 # Create a new threadCOMMENT
MEDIUMadd2menu/add2menu.py2372 # Create a GIO input stream for readingCOMMENT
MEDIUMadd2menu/add2menu.py2509 # Create a new list to store filtered resultsCOMMENT
MEDIUMadd2menu/add2menu.py706 # Create a properly integrated headerbarSTRING
MEDIUMadd2menu/add2menu.py916 # Create the column with our play buttonSTRING
Redundant / Tautological Comments17 hits · 19 pts
SeverityFileLineSnippetContext
LOWadd2menu/add2menu.py275 # Open the file for appending (we want to keep writing to it)COMMENT
LOWadd2menu/add2menu.py282 # Set flag to continue logging to this fileCOMMENT
LOWadd2menu/add2menu.py1459 # Check if it's a path within the distroCOMMENT
LOWadd2menu/add2menu.py1465 # Check if file exists, using sudo for chroot if neededCOMMENT
LOWadd2menu/add2menu.py44# Set this to True to debug icon issuesCOMMENT
LOWadd2menu/add2menu.py1304 # Check if the resolved file exists using sudoCOMMENT
LOWadd2menu/add2menu.py1407 # Check if the resolved file existsCOMMENT
LOWadd2menu/add2menu.py1612 # Check if the icon exists in the themeCOMMENT
LOWadd2menu/add2menu.py2049 # Check if there's a manual override for this fileCOMMENT
LOWadd2menu/add2menu.py2208 # Check if the click was on the play button column (last column)COMMENT
LOWadd2menu/add2menu.py2225 # Check if the click was on the checkbox columnCOMMENT
LOWadd2menu/add2menu.py2262 # Check if we're in remove modeCOMMENT
LOWadd2menu/add2menu.py2319 # Check if app launch logging is enabledCOMMENT
LOWadd2menu/add2menu.py2397 # Check if the first part is already an absolute pathCOMMENT
LOWadd2menu/add2menu.py2553 # Check if the app matches the search queryCOMMENT
LOWadd2menu/add2menu.py2581 # Check if the item was previously selectedCOMMENT
LOWadd2menu/add2menu.py2690 # Check if there's a .gtkrc-2.0 file in the home directoryCOMMENT
Hyper-Verbose Identifiers14 hits · 7 pts
SeverityFileLineSnippetContext
LOWadd2menu/add2menu.py2904 def on_show_added_apps_toggled(self, action, value):CODE
LOWadd2menu/add2menu.py2914 def on_show_app_launch_log_toggled(self, action, value):CODE
LOWadd2menu/add2menu.py984 def _complete_background_task(self, result):CODE
LOWadd2menu/add2menu.py1211 def list_desktop_files_with_sudo(self, directory):CODE
LOWadd2menu/add2menu.py1269 def parse_desktop_file_with_sudo(self, filepath):CODE
LOWadd2menu/add2menu.py1944 def copy_desktop_file_with_sudo(self, source_path, dest_path):CODE
LOWadd2menu/add2menu.py2040 def read_and_modify_desktop_file(self, filepath):CODE
LOWadd2menu/add2menu.py2062 def process_remove_applications(self, selected):CODE
LOWadd2menu/add2menu.py2086 def _run_command_if_available(self, cmd_parts, description=""):CODE
LOWadd2menu/add2menu.py2182 def play_button_visibility_func(self, column, cell, model, iter, data):CODE
LOWadd2menu/add2menu.py2234 def highlight_row_temporarily(self, treeview, path):CODE
LOWadd2menu/add2menu.py2681 def detect_current_icon_theme(self):CODE
LOWadd2menu/add2menu.py2932 def on_edit_manually_activated(self, action, param):CODE
LOWadd2menu/add2menu.py511 def read_termux_desktop_config(self):STRING
Deep Nesting14 hits · 7 pts
SeverityFileLineSnippetContext
LOWadd2menu/add2menu.py215CODE
LOWadd2menu/add2menu.py511CODE
LOWadd2menu/add2menu.py1000CODE
LOWadd2menu/add2menu.py1057CODE
LOWadd2menu/add2menu.py1163CODE
LOWadd2menu/add2menu.py1211CODE
LOWadd2menu/add2menu.py1269CODE
LOWadd2menu/add2menu.py1374CODE
LOWadd2menu/add2menu.py1436CODE
LOWadd2menu/add2menu.py1608CODE
LOWadd2menu/add2menu.py2256CODE
LOWadd2menu/add2menu.py2420CODE
LOWadd2menu/add2menu.py2483CODE
LOWadd2menu/add2menu.py2681CODE
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOWadd2menu/add2menu.py1452 # For full path icons, just return as is if they existCOMMENT
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOWadd2menu/add2menu.py1#!/data/data/com.termux/files/usr/bin/env python3COMMENT
LOWother/motd.sh1#!/data/data/com.termux/files/usr/bin/bashCOMMENT