Static medium → AI refined safe — see AI Review below for why (e.g., mx-ctl executable)
jankeesvw/omarchy-downloads • 3a48310 • Scanned 8/25/2026, 11:43:25 AM
Changed since 3a48310…3a48310 (0 files, 0 commits)
Shows recent downloads in the bar with a badge for files arriving within freshMinutes and a floating window listing the newest files. Users can filter fresh/all, see age/size/icon, drag rows via Wayland wl_data_device (text/uri-list) into other apps, double-click to open a file or right-click to open the folder via xdg-open.
Plugin is a well-hardened downloads viewer: all Text is PlainText, directory access is read-only and bounded with DoS mitigation, exec uses Quickshell.execDetached array form with absolute-path checks and no shell, and IPC only toggles visibility.
Model opencode-go/muse-spark-1.2-contributor • 8/25/2026, 11:43:25 AM
sequenceDiagram
participant User
participant Panel
participant Store as DownloadsStore
participant Model as FolderListModel
participant FS as Downloads Folder
User->>Panel: applySettings() folder via Util.fileUrl()
Panel->>Store: configure(freshMinutes, folderUrl)
Store->>Model: set scanFolder = folderUrl
Model->>FS: read directory (Time sort, newest first)
FS-->>Model: fileName/fileUrl/filePath/fileSize/fileModified
Model-->>Store: onCount/onStatus Ready -> scheduleTick() -> rebuild() (maxScan 2000, maxRows 200)
Store-->>Panel: freshCount -> badge, files -> FloatingWindow ListView
User->>Store: drag row (Drag.Automatic text/uri-list) / double-click
Store->>FS: Quickshell.execDetached(["xdg-open", target]) if target starts with "/"Generated by AI from static findings + file context
Default download folder via StandardPaths.writableLocation(DownloadLocation); read-only URL property, user-overridable via Panel settings, never executed or passed to shell.
Read-only directory listing of the downloads folder; bounded by maxScan=2000/maxRows=200, polling fallback over maxScan mitigates UI thread DoS, no shell or exec on filenames, all display is PlainText.
IPC target jankeesvw.downloads exposes only base Panel open/close (shell summon) with guarded mirroring via onOpenedChanged/onOpenChanged; no custom command handler or payload parsing.
Converts user-controlled shell.json folder string to file:// URL for DownloadsStore.folderUrl; not shell-interpolated, later consumed only as FolderListModel folder and via Quickshell.execDetached array form with leading-slash check.
No network calls — good.
No changes detected (first scan).
No obfuscation detected.
| Severity | Category | Pattern | File | Line | Description | Snippet |
|---|---|---|---|---|---|---|
| medium | fileOps | StandardPaths | DownloadsStore.qml | 34 | Accesses system paths via StandardPaths | property url folderUrl: StandardPaths.writableLocation(StandardPaths.DownloadLocation) |
| medium | fileOps | FolderListModel | DownloadsStore.qml | 224 | Reads directory via FolderListModel | if (String(root.scanFolder) === "" || folderModel.status !== FolderListModel.Ready) return |
| medium | fileOps | Util.fileUrl | Panel.qml | 69 | Resolves file URL | folder !== "" ? Util.fileUrl(folder) : undefined) |
These are expected Quickshell imports, not counted as risk.
| Severity | Category | Pattern | File | Line | Description | Snippet |
|---|---|---|---|---|---|---|
| info | imports | import Quickshell | DownloadRow.qml | 3 | Expected Quickshell import — normal for Omarchy plugins (no risk) | import Quickshell |
| info | imports | import qs | DownloadRow.qml | 4 | Expected local module import — normal for Omarchy plugins (no risk) | import qs.Commons |
| info | imports | import Quickshell | DownloadsStore.qml | 7 | Expected Quickshell import — normal for Omarchy plugins (no risk) | import Quickshell |
| info | imports | import qs | DownloadsStore.qml | 8 | Expected local module import — normal for Omarchy plugins (no risk) | import qs.Commons |
| info | imports | import Quickshell | Panel.qml | 2 | Expected Quickshell import — normal for Omarchy plugins (no risk) | import Quickshell |
| info | imports | import qs | Panel.qml | 3 | Expected local module import — normal for Omarchy plugins (no risk) | import qs.Commons |
| Path | Type | Lines | Size |
|---|---|---|---|
| DownloadRow.qml | qml | 170 | 7045 |
| DownloadsStore.qml | qml | 481 | 18716 |
| Panel.qml | qml | 145 | 5895 |
| manifest.json | json | 24 | 608 |
| Severity | Category | Pattern | File | Line | Description | Snippet |
|---|---|---|---|---|---|---|
| medium | fileOps | StandardPaths | DownloadsStore.qml | 34 | Accesses system paths via StandardPaths | property url folderUrl: StandardPaths.writableLocation(StandardPaths.DownloadLocation) |
| medium | fileOps | FolderListModel | DownloadsStore.qml | 224 | Reads directory via FolderListModel | if (String(root.scanFolder) === "" || folderModel.status !== FolderListModel.Ready) return |
| medium | ipc | ipcTarget | Panel.qml | 29 | IPC handler exposure — payload appears validated via conditional check (handler checks state before acting; review logic) | ipcTarget: "jankeesvw.downloads" |
| medium | fileOps | Util.fileUrl | Panel.qml | 69 | Resolves file URL | folder !== "" ? Util.fileUrl(folder) : undefined) |
Generated by omarchy-audit at 2026-08-25T09:43:25.401Z • Commit 3a48310 linked to GitHub for verification • Overview