docs: polish README with custom SVG icons, extreme Markdown, and no emojis
swadhinbiswas committed 2 months ago
d274138
1 parent 5e0888a
commit d274138
11 files changed
+339 -80
Showing 11 changed files+339-78
โผREADME.md
+222-78
| @@ -1,8 +1,8 @@ | ||
1 | 1 | <div align="center"> |
2 | 2 | |
3 | -<img src="assets/logo.svg" alt="VEET โ Universal Linux App Uninstaller" width="620"/> | |
3 | +<img src="assets/logo.svg" alt="VEET โ Universal Linux App Uninstaller" width="600"/> | |
4 | 4 | |
5 | -<br/><br/> | |
5 | +<br/> | |
6 | 6 | |
7 | 7 | [](https://go.dev) |
8 | 8 | [](LICENSE) |
| @@ -10,43 +10,88 @@ | ||
10 | 10 | [](CONTRIBUTING.md) |
11 | 11 | |
12 | 12 | <p align="center"> |
13 | - <b>Universal Linux App Uninstaller & Deep-Clean Residual Purger</b><br/> | |
14 | - <i>Completely remove applications, orphaned configs, hidden caches, system logs, and leftover dotfiles in one confirmed action.</i> | |
13 | + <b>Universal Linux Application Uninstaller & Deep-Clean Residual Purger</b><br/> | |
14 | + <i>An interactive terminal system utility that detects installed software across package managers and automates complete removal of binaries, user caches, configuration files, and residual logs in one confirmed action.</i> | |
15 | 15 | </p> |
16 | 16 | |
17 | 17 | </div> |
18 | 18 | |
19 | 19 | --- |
20 | 20 | |
21 | -## ๐ก Why VEET? | |
21 | +## Technical Overview | |
22 | 22 | |
23 | -When you remove software using traditional Linux package managers (`pacman -R`, `apt remove`, `dnf remove`, `flatpak uninstall`, etc.): | |
24 | -- **Only the binaries are deleted** (`/usr/bin`, `/usr/share`). | |
25 | -- **User data is left behind forever**: `~/.config/<app>`, `~/.cache/<app>` *(often multiple gigabytes from Chromium/Electron apps)*, `~/.local/share/<app>`, `/var/log/<app>`, and lingering dotfiles. | |
26 | -- **Package managers are fragmented**: Your system software lives across system repos, AUR, Flatpak, Snap, AppImages, npm global, pipx, and Cargo. | |
23 | +When software is uninstalled using conventional Linux package managers (`pacman -R`, `apt remove`, `dnf remove`, `flatpak uninstall`), only package-managed system files (`/usr/bin`, `/usr/share`) are modified. User-space directories remain unmanaged: | |
27 | 24 | |
28 | -**VEET bridges this gap** โ giving Linux users a fast, unified, macOS *AppCleaner*-like experience built entirely in the terminal. | |
25 | +- `~/.config/<app>` *(user configuration state)* | |
26 | +- `~/.cache/<app>` *(accumulated runtime caches, shader caches, webview stores)* | |
27 | +- `~/.local/share/<app>` *(local application data and databases)* | |
28 | +- `~/.local/state/<app>` *(session and state histories)* | |
29 | +- `/var/log/<app>` and systemd journal archives | |
30 | + | |
31 | +Over extended usage, unmanaged leftovers consume significant disk storage. Modern Linux distributions also feature package manager fragmentation across native repositories, universal formats, and language toolchains. | |
32 | + | |
33 | +**VEET** bridges this gap by scanning all installed targets concurrently, staging candidate residual paths for user verification, and executing atomic uninstalls with batched privilege elevation. | |
29 | 34 | |
30 | 35 | --- |
31 | 36 | |
32 | -## โจ Features | |
37 | +## Comparison Matrix | |
38 | + | |
39 | +| Feature | `pacman -R` / `apt remove` | `flatpak uninstall` | `bleachbit` | `veet` | | |
40 | +|:---|:---:|:---:|:---:|:---:| | |
41 | +| **Binary Removal** | Yes | Yes | No | **Yes** | | |
42 | +| **User Configuration Cleanup (`~/.config`)** | No | No | Partial | **Yes (Inspected & Staged)** | | |
43 | +| **User Cache Cleanup (`~/.cache`)** | No | No | Yes | **Yes (Inspected & Staged)** | | |
44 | +| **Universal Multi-Source Aggregator** | No | No | No | **Yes (15+ package managers)** | | |
45 | +| **Orphaned Dependencies Detection** | Manual query | No | No | **Yes (Live detection)** | | |
46 | +| **AppImage & Portable Binary Scanner** | No | No | No | **Yes (Auto-discovered)** | | |
47 | +| **Interactive Terminal UI (TUI)** | No | No | GTK Only | **Yes (Zero-latency Bubble Tea)** | | |
48 | +| **Pre-execution Dry-run Inspection** | Partial | Partial | Yes | **Yes (Full path inspection)** | | |
49 | +| **Batched Sudo Elevation** | Per command | N/A | Full root required | **Yes (Single prompt per batch)** | | |
50 | + | |
51 | +--- | |
33 | 52 | |
34 | -- **๐ Multi-Source Detection**: Concurrently scans system package managers (`apt`, `dnf`, `pacman`, AUR via `yay`/`paru`, `zypper`), universal formats (`Flatpak`, `Snap`), portable bundles (`AppImage`), global toolchains (`npm -g`, `pipx`, `cargo`, `gem`, `go install`), and system services. | |
35 | -- **๐ Orphan & Unneeded Dependencies**: Automatically discovers forgotten orphaned dependencies (`pacman -Qdt`, `apt autoremove`, `dnf repoquery --unneeded`) ready to be pruned. | |
36 | -- **๐ Systemd Journal & Log Vacuum**: Safely detects bloated `/var/log/journal` systemd logs and old `.gz` log archives to reclaim storage. | |
37 | -- **๐ Deep Clean Removal**: Stages every candidate directory before execution (`~/.config`, `~/.cache`, `~/.local/share`, `/etc`, `/var/log`). | |
38 | -- **๐ 1-Click Interactive Stat Cards**: Jump between `All Apps`, `Flatpak`, `Snap`, `Tools`, `Cache`, and `Reclaimable` with keys <kbd>1</kbd>โ<kbd>6</kbd> or <kbd>[</kbd> / <kbd>]</kbd>. | |
39 | -- **โก Instant Bloat Sorting (<kbd>o</kbd>)**: Cycle sorting order (`Size โ`, `Name A-Z`, `Source`, `Date โ`) to find massive disk-hogging applications immediately. | |
40 | -- **๐พ Real-Time Disk Gauge**: Live disk utilization monitoring displayed in the header. | |
41 | -- **๐ Sudo Batching & Safety First**: Home-directory paths are removed as the current user. System paths are batched into **one single sudo prompt** per uninstall. Core system packages (`glibc`, `linux`, `systemd`, current shell) are protected and refused by default. | |
42 | -- **๐ Audit Trail & JSON Export**: Every removal is logged to `~/.local/share/veet/history.log`. Press <kbd>e</kbd> to export an inventory report to `apps-report.json`. | |
53 | +## Core Capabilities | |
54 | + | |
55 | +<table> | |
56 | + <tr> | |
57 | + <td width="50%" valign="top"> | |
58 | + <h4><img src="assets/icons/sources.svg" width="18" height="18" align="center" /> Multi-Source Parallel Detection</h4> | |
59 | + <p>Concurrently queries system package managers (<code>pacman</code>/AUR, <code>apt</code>, <code>dnf</code>, <code>zypper</code>), sandboxed formats (<code>Flatpak</code>, <code>Snap</code>), portable bundles (<code>AppImage</code>), and language toolchains (<code>npm -g</code>, <code>pipx</code>, <code>cargo</code>, <code>gem</code>, <code>go install</code>) with zero-cost skipping for absent tools.</p> | |
60 | + </td> | |
61 | + <td width="50%" valign="top"> | |
62 | + <h4><img src="assets/icons/purge.svg" width="18" height="18" align="center" /> Deep Residual Cleanup</h4> | |
63 | + <p>Automates residual discovery across user configurations, cached runtime stores, desktop integration entries, icons, and system paths, staging each candidate before disk execution.</p> | |
64 | + </td> | |
65 | + </tr> | |
66 | + <tr> | |
67 | + <td width="50%" valign="top"> | |
68 | + <h4><img src="assets/icons/orphan.svg" width="18" height="18" align="center" /> Orphaned Dependency Pruning</h4> | |
69 | + <p>Live detection of unneeded dependency packages across native package managers (<code>pacman -Qdt</code>, <code>apt autoremove</code>, <code>dnf repoquery --unneeded</code>) ready for safe reclamation.</p> | |
70 | + </td> | |
71 | + <td width="50%" valign="top"> | |
72 | + <h4><img src="assets/icons/journal.svg" width="18" height="18" align="center" /> System Log & Journal Vacuum</h4> | |
73 | + <p>Identifies bloated systemd journal storage (<code>/var/log/journal</code>) and rotated compressed log archives (<code>/var/log/*.gz</code>) with integrated elevated vacuum routines.</p> | |
74 | + </td> | |
75 | + </tr> | |
76 | + <tr> | |
77 | + <td width="50%" valign="top"> | |
78 | + <h4><img src="assets/icons/terminal.svg" width="18" height="18" align="center" /> Interactive Navigation & Telemetry</h4> | |
79 | + <p>Instant category switching (<kbd>1</kbd>โ<kbd>6</kbd>), four-mode list sorting (<kbd>o</kbd>) for rapid disk bloat identification, and in-place staged path inspection (<kbd>p</kbd>).</p> | |
80 | + </td> | |
81 | + <td width="50%" valign="top"> | |
82 | + <h4><img src="assets/icons/security.svg" width="18" height="18" align="center" /> Sudo Batching & Anti-Brick Safety</h4> | |
83 | + <p>Core system components (<code>glibc</code>, <code>linux</code>, <code>systemd</code>, active shell) are protected from selection. System paths are batched into a single elevated transaction.</p> | |
84 | + </td> | |
85 | + </tr> | |
86 | +</table> | |
43 | 87 | |
44 | 88 | --- |
45 | 89 | |
46 | -## ๐ Installation | |
90 | +## Installation | |
47 | 91 | |
48 | -### Option 1: One-Line Bash Installer *(Recommended)* | |
49 | -Automatically compiles, installs to `~/.local/bin/veet`, and sets up shell completions: | |
92 | +### Option 1: Automated Script Installation (Recommended) | |
93 | + | |
94 | +Downloads, compiles with binary optimizations (`-ldflags="-s -w"`), installs to `~/.local/bin/veet`, and configures shell autocompletions: | |
50 | 95 | |
51 | 96 | ```bash |
52 | 97 | curl -sSL https://raw.githubusercontent.com/swadhinbiswas/veet/main/install.sh | bash |
| @@ -59,114 +104,211 @@ curl -sSL https://raw.githubusercontent.com/swadhinbiswas/veet/main/install.sh | | ||
59 | 104 | |
60 | 105 | --- |
61 | 106 | |
62 | -### Option 2: Go Install | |
107 | +### Option 2: Go Package Manager | |
108 | + | |
109 | +Install directly via the standard Go toolchain (requires Go 1.22+): | |
110 | + | |
63 | 111 | ```bash |
64 | 112 | go install github.com/swadhinbiswas/veet@latest |
65 | -# or from local clone: | |
113 | +``` | |
114 | + | |
115 | +*Or install from local source:* | |
116 | +```bash | |
66 | 117 | go install . |
67 | 118 | ``` |
68 | 119 | |
69 | 120 | --- |
70 | 121 | |
71 | -### Option 3: Build from Source | |
122 | +### Option 3: Manual Compilation via Makefile | |
123 | + | |
72 | 124 | ```bash |
73 | 125 | git clone https://github.com/swadhinbiswas/veet.git |
74 | 126 | cd veet |
75 | 127 | make build |
76 | -# or install directly | |
77 | 128 | make install |
78 | 129 | ``` |
79 | 130 | |
131 | +> [!NOTE] | |
132 | +> Ensure `~/.local/bin` is present in your environment `$PATH`. If not, add `export PATH="$PATH:$HOME/.local/bin"` to your `~/.bashrc` or `~/.zshrc`. | |
133 | + | |
80 | 134 | --- |
81 | 135 | |
82 | -### ๐๏ธ Uninstallation | |
83 | -To remove VEET and its shell completions: | |
84 | -```bash | |
85 | -./uninstall.sh | |
86 | -``` | |
136 | +## Usage | |
87 | 137 | |
138 | +### Interactive Terminal Dashboard | |
88 | 139 | |
89 | -## ๐ฎ Usage | |
140 | +Launch the zero-latency terminal user interface: | |
90 | 141 | |
91 | -### Interactive TUI Mode *(Default)* | |
92 | -Launch the interactive terminal dashboard: | |
93 | 142 | ```bash |
94 | 143 | veet |
95 | 144 | ``` |
96 | 145 | |
97 | -### CLI & Scripting Modes | |
146 | +--- | |
147 | + | |
148 | +### Command Line Interface | |
149 | + | |
150 | +VEET exposes non-interactive headless commands for automation, scripting, and CI auditing: | |
151 | + | |
98 | 152 | ```bash |
99 | -# Plain-text table of all installed applications across sources | |
153 | +# Output installed application inventory table to stdout | |
100 | 154 | veet scan |
101 | 155 | |
102 | -# Machine-readable JSON output (great for scripting and audits) | |
156 | +# Export machine-readable JSON inventory | |
103 | 157 | veet scan --json |
104 | 158 | |
105 | -# Non-interactive preview & deep-clean removal | |
106 | -veet clean <app-name> | |
107 | -veet clean <app-name> --source flatpak --yes | |
159 | +# Non-interactive deep-clean removal with preview | |
160 | +veet clean <package-name> | |
161 | + | |
162 | +# Non-interactive removal scoped to specific source with confirmation | |
163 | +veet clean <package-name> --source flatpak --yes | |
108 | 164 | ``` |
109 | 165 | |
110 | 166 | --- |
111 | 167 | |
112 | -## โจ๏ธ TUI Keybindings Reference | |
113 | - | |
114 | -| Key | Action | | |
115 | -|---|---| | |
116 | -| <kbd>1</kbd> โ <kbd>6</kbd> | Jump to stat cards (`All`, `Flatpak`, `Snap`, `Tools`, `Cache`, `Reclaim`) | | |
117 | -| <kbd>[</kbd> / <kbd>]</kbd> or <kbd>โ</kbd> / <kbd>โ</kbd> | Cycle through top stat cards | | |
118 | -| <kbd>โ</kbd> <kbd>โ</kbd> or <kbd>j</kbd> <kbd>k</kbd> | Navigate the application list | | |
119 | -| <kbd>Space</kbd> | Toggle multi-select checkbox on current row | | |
120 | -| <kbd>a</kbd> | Select / deselect all visible filtered rows | | |
121 | -| <kbd>o</kbd> / <kbd>O</kbd> | Cycle sort order (`Size โ`, `Name A-Z`, `Source`, `Date โ`) | | |
122 | -| <kbd>p</kbd> / <kbd>P</kbd> | Toggle staged filesystem paths inspector in details panel | | |
123 | -| <kbd>/</kbd> | Focus fuzzy search-as-you-type filter | | |
124 | -| <kbd>Tab</kbd> / <kbd>Shift+Tab</kbd> | Cycle specific source filter (`pacman`, `flatpak`, `aur`, etc.) | | |
125 | -| <kbd>Enter</kbd> | Stage selected apps and open confirmation preview | | |
126 | -| <kbd>c</kbd> | 1-key quick purge for cache & residual dotfiles | | |
127 | -| <kbd>e</kbd> | Export inventory report to JSON (`~/.local/share/veet/apps-report.json`) | | |
128 | -| <kbd>r</kbd> | Rescan all detectors and package managers | | |
129 | -| <kbd>l</kbd> | View historical audit logs | | |
130 | -| <kbd>s</kbd> | Settings & protected components | | |
131 | -| <kbd>h</kbd> / <kbd>?</kbd> | Toggle full help modal | | |
132 | -| <kbd>Esc</kbd> | Back out of modal / unfocus search | | |
133 | -| <kbd>q</kbd> / <kbd>Ctrl+C</kbd> | Quit VEET | | |
168 | +## Keybinding Reference | |
169 | + | |
170 | +<table width="100%"> | |
171 | + <thead> | |
172 | + <tr> | |
173 | + <th width="25%">Keybinding</th> | |
174 | + <th width="75%">Action</th> | |
175 | + </tr> | |
176 | + </thead> | |
177 | + <tbody> | |
178 | + <tr> | |
179 | + <td><kbd>1</kbd> โ <kbd>6</kbd></td> | |
180 | + <td>Jump to stat card category (<code>All</code>, <code>Flatpak</code>, <code>Snap</code>, <code>Tools</code>, <code>Cache</code>, <code>Reclaim</code>)</td> | |
181 | + </tr> | |
182 | + <tr> | |
183 | + <td><kbd>[</kbd> / <kbd>]</kbd> or <kbd>←</kbd> / <kbd>→</kbd></td> | |
184 | + <td>Cycle horizontally through top stat categories</td> | |
185 | + </tr> | |
186 | + <tr> | |
187 | + <td><kbd>↑</kbd> <kbd>↓</kbd> / <kbd>j</kbd> <kbd>k</kbd></td> | |
188 | + <td>Navigate table selection cursor</td> | |
189 | + </tr> | |
190 | + <tr> | |
191 | + <td><kbd>Space</kbd></td> | |
192 | + <td>Toggle multi-select checkbox on active row</td> | |
193 | + </tr> | |
194 | + <tr> | |
195 | + <td><kbd>a</kbd></td> | |
196 | + <td>Select / deselect all visible filtered rows (skips protected components)</td> | |
197 | + </tr> | |
198 | + <tr> | |
199 | + <td><kbd>o</kbd> / <kbd>O</kbd></td> | |
200 | + <td>Cycle sort order (<code>Size ↓</code>, <code>Name A-Z</code>, <code>Source</code>, <code>Date ↓</code>)</td> | |
201 | + </tr> | |
202 | + <tr> | |
203 | + <td><kbd>p</kbd> / <kbd>P</kbd></td> | |
204 | + <td>Toggle staged filesystem paths inspector in details panel</td> | |
205 | + </tr> | |
206 | + <tr> | |
207 | + <td><kbd>/</kbd></td> | |
208 | + <td>Focus fuzzy search-as-you-type filter input</td> | |
209 | + </tr> | |
210 | + <tr> | |
211 | + <td><kbd>Tab</kbd> / <kbd>Shift+Tab</kbd></td> | |
212 | + <td>Cycle specific source filter dropdown (<code>pacman</code>, <code>aur</code>, <code>flatpak</code>, etc.)</td> | |
213 | + </tr> | |
214 | + <tr> | |
215 | + <td><kbd>Enter</kbd></td> | |
216 | + <td>Stage selected applications and open confirmation preview modal</td> | |
217 | + </tr> | |
218 | + <tr> | |
219 | + <td><kbd>c</kbd></td> | |
220 | + <td>1-key quick purge for user cache & residual files</td> | |
221 | + </tr> | |
222 | + <tr> | |
223 | + <td><kbd>e</kbd></td> | |
224 | + <td>Export audit inventory report to <code>~/.local/share/veet/apps-report.json</code></td> | |
225 | + </tr> | |
226 | + <tr> | |
227 | + <td><kbd>r</kbd></td> | |
228 | + <td>Trigger background rescan across all detectors</td> | |
229 | + </tr> | |
230 | + <tr> | |
231 | + <td><kbd>l</kbd></td> | |
232 | + <td>Open history audit log viewport</td> | |
233 | + </tr> | |
234 | + <tr> | |
235 | + <td><kbd>s</kbd></td> | |
236 | + <td>Open settings and protected components registry</td> | |
237 | + </tr> | |
238 | + <tr> | |
239 | + <td><kbd>h</kbd> / <kbd>?</kbd></td> | |
240 | + <td>Toggle keybinding reference overlay</td> | |
241 | + </tr> | |
242 | + <tr> | |
243 | + <td><kbd>Esc</kbd></td> | |
244 | + <td>Dismiss active modal / blur search input</td> | |
245 | + </tr> | |
246 | + <tr> | |
247 | + <td><kbd>q</kbd> / <kbd>Ctrl+C</kbd></td> | |
248 | + <td>Quit VEET</td> | |
249 | + </tr> | |
250 | + </tbody> | |
251 | +</table> | |
134 | 252 | |
135 | 253 | --- |
136 | 254 | |
137 | -## โ๏ธ Configuration | |
255 | +## Configuration | |
256 | + | |
257 | +<details> | |
258 | +<summary><b>Custom Configuration (<code>~/.config/veet/config.yaml</code>)</b></summary> | |
259 | +<br/> | |
138 | 260 | |
139 | -Create an optional configuration file at `~/.config/veet/config.yaml`: | |
261 | +VEET supports optional user configuration via YAML. Create `~/.config/veet/config.yaml` to declare custom protected packages: | |
140 | 262 | |
141 | 263 | ```yaml |
264 | +# Packages that VEET will refuse to stage or select for deletion | |
142 | 265 | protected_packages: |
143 | 266 | - custom-kernel-module |
144 | - - my-critical-database | |
145 | - - docker-engine | |
267 | + - my-critical-service | |
268 | + - proprietary-driver | |
146 | 269 | ``` |
147 | 270 | |
271 | +</details> | |
148 | 272 | |
149 | -## ๐๏ธ Architecture | |
273 | +<details> | |
274 | +<summary><b>System Architecture & Module Map</b></summary> | |
275 | +<br/> | |
150 | 276 | |
151 | 277 | ``` |
152 | -main.go Single entrypoint & Cobra CLI commands (scan, clean, tui) | |
153 | -internal/model/ AppInfo, RemovableFiles, Config, SourceMeta | |
154 | -internal/detector/ Concurrent source detectors (apt, pacman, flatpak, appimage, orphans, ...) | |
155 | -internal/uninstaller/ Staging engine, sudo batching & filesystem cleanup (Afero) | |
156 | -internal/history/ Append-only audit logger (~/.local/share/veet/history.log) | |
157 | -internal/ui/ Bubble Tea & Lip Gloss TUI (table, details, stat cards, progress, styles) | |
278 | +veet/ | |
279 | +โโโ main.go # Cobra CLI entrypoint (scan, clean, tui) | |
280 | +โโโ internal/ | |
281 | +โ โโโ model/ # Data types: AppInfo, RemovableFiles, Config, SourceMeta | |
282 | +โ โโโ detector/ # Parallel detector engine (15+ source handlers) | |
283 | +โ โโโ uninstaller/ # Staging engine, sudo batching & filesystem removal (Afero) | |
284 | +โ โโโ history/ # Append-only audit logger (~/.local/share/veet/history.log) | |
285 | +โ โโโ ui/ # Bubble Tea & Lip Gloss TUI components | |
286 | +โโโ assets/ # Brand assets & custom vector icons | |
287 | +โโโ Makefile # Build automation targets | |
288 | +โโโ install.sh # Automated Bash installer | |
289 | +โโโ uninstall.sh # Uninstaller script | |
290 | +``` | |
291 | + | |
292 | +</details> | |
293 | + | |
294 | +--- | |
295 | + | |
296 | +## Uninstallation | |
297 | + | |
298 | +To remove the compiled binary, shell autocompletions, and optionally purge audit logs: | |
299 | + | |
300 | +```bash | |
301 | +./uninstall.sh | |
158 | 302 | ``` |
159 | 303 | |
160 | 304 | --- |
161 | 305 | |
162 | -## ๐ค Contributing | |
306 | +## Contributing | |
163 | 307 | |
164 | -Contributions are welcome! Please check out [CONTRIBUTING.md](CONTRIBUTING.md) for instructions on setting up your development environment and adding support for new package managers or features. | |
308 | +Contributions are welcome. Please refer to [CONTRIBUTING.md](CONTRIBUTING.md) for local development setup, detector implementation guides, and testing protocols. | |
165 | 309 | |
166 | 310 | --- |
167 | 311 | |
168 | -## ๐ License | |
312 | +## License | |
169 | 313 | |
170 | -This project is open source and available under the [MIT License](LICENSE). | |
314 | +VEET is open-source software licensed under the [MIT License](LICENSE). | |
171 | 315 | |
โผassets/icons/audit.svg
+11-0
| @@ -0,0 +1,11 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="auditGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#00E5FF" /> | |
5 | + <stop offset="100%" stop-color="#10B981" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <path d="M14 2H6C4.9 2 4 2.9 4 4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20 20V8L14 2Z" stroke="url(#auditGrad)" stroke-width="2" stroke-linejoin="round"/> | |
9 | + <path d="M14 2V8H20" stroke="url(#auditGrad)" stroke-width="2" stroke-linejoin="round"/> | |
10 | + <path d="M9 15L11 17L15 13" stroke="url(#auditGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
11 | +</svg> | |
0 | 12 | |
โผassets/icons/disk.svg
+12-0
| @@ -0,0 +1,12 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="diskGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#10B981" /> | |
5 | + <stop offset="100%" stop-color="#00E5FF" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <rect x="2" y="4" width="20" height="16" rx="3" stroke="url(#diskGrad)" stroke-width="2"/> | |
9 | + <line x1="2" y1="14" x2="22" y2="14" stroke="url(#diskGrad)" stroke-width="1.5"/> | |
10 | + <circle cx="6" cy="17.5" r="1" fill="#10B981"/> | |
11 | + <circle cx="10" cy="17.5" r="1" fill="#00E5FF"/> | |
12 | +</svg> | |
0 | 13 | |
โผassets/icons/install.svg
+11-0
| @@ -0,0 +1,11 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="instGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#10B981" /> | |
5 | + <stop offset="100%" stop-color="#3B82F6" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <path d="M21 15V19C21 20.1 20.1 21 19 21H5C3.9 21 3 20.1 3 19V15" stroke="url(#instGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
9 | + <path d="M7 10L12 15L17 10" stroke="url(#instGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
10 | + <line x1="12" y1="15" x2="12" y2="3" stroke="url(#instGrad)" stroke-width="2" stroke-linecap="round"/> | |
11 | +</svg> | |
0 | 12 | |
โผassets/icons/journal.svg
+12-0
| @@ -0,0 +1,12 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="journalGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#A855F7" /> | |
5 | + <stop offset="100%" stop-color="#6366F1" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <path d="M4 19.5V4.5C4 3.67 4.67 3 5.5 3H18.5C19.33 3 20 3.67 20 4.5V19.5C20 20.33 19.33 21 18.5 21H5.5C4.67 21 4 20.33 4 19.5Z" stroke="url(#journalGrad)" stroke-width="2"/> | |
9 | + <path d="M8 7H16" stroke="url(#journalGrad)" stroke-width="1.5" stroke-linecap="round"/> | |
10 | + <path d="M8 11H16" stroke="url(#journalGrad)" stroke-width="1.5" stroke-linecap="round"/> | |
11 | + <path d="M8 15H12" stroke="url(#journalGrad)" stroke-width="1.5" stroke-linecap="round"/> | |
12 | +</svg> | |
0 | 13 | |
โผassets/icons/keyboard.svg
+16-0
| @@ -0,0 +1,16 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="kbGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#A855F7" /> | |
5 | + <stop offset="100%" stop-color="#EC4899" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <rect x="2" y="4" width="20" height="16" rx="3" stroke="url(#kbGrad)" stroke-width="2"/> | |
9 | + <line x1="6" y1="8" x2="6.01" y2="8" stroke="url(#kbGrad)" stroke-width="2" stroke-linecap="round"/> | |
10 | + <line x1="10" y1="8" x2="10.01" y2="8" stroke="url(#kbGrad)" stroke-width="2" stroke-linecap="round"/> | |
11 | + <line x1="14" y1="8" x2="14.01" y2="8" stroke="url(#kbGrad)" stroke-width="2" stroke-linecap="round"/> | |
12 | + <line x1="18" y1="8" x2="18.01" y2="8" stroke="url(#kbGrad)" stroke-width="2" stroke-linecap="round"/> | |
13 | + <line x1="6" y1="12" x2="6.01" y2="12" stroke="url(#kbGrad)" stroke-width="2" stroke-linecap="round"/> | |
14 | + <line x1="18" y1="12" x2="18.01" y2="12" stroke="url(#kbGrad)" stroke-width="2" stroke-linecap="round"/> | |
15 | + <line x1="9" y1="16" x2="15" y2="16" stroke="url(#kbGrad)" stroke-width="2" stroke-linecap="round"/> | |
16 | +</svg> | |
0 | 17 | |
โผassets/icons/orphan.svg
+12-0
| @@ -0,0 +1,12 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="orphanGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#F59E0B" /> | |
5 | + <stop offset="100%" stop-color="#EF4444" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <circle cx="18" cy="6" r="3" stroke="url(#orphanGrad)" stroke-width="2"/> | |
9 | + <circle cx="6" cy="18" r="3" stroke="url(#orphanGrad)" stroke-width="2"/> | |
10 | + <path d="M8.5 15.5L12 12" stroke="url(#orphanGrad)" stroke-width="2" stroke-linecap="round"/> | |
11 | + <path d="M15.5 8.5L14 10" stroke="url(#orphanGrad)" stroke-width="2" stroke-linecap="round" stroke-dasharray="2 2"/> | |
12 | +</svg> | |
0 | 13 | |
โผassets/icons/purge.svg
+11-0
| @@ -0,0 +1,11 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="purgeGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#38BDF8" /> | |
5 | + <stop offset="100%" stop-color="#8B5CF6" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <path d="M19 4L10 13L6 9L2 13" stroke="url(#purgeGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
9 | + <path d="M13 4H19V10" stroke="url(#purgeGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
10 | + <path d="M4 17L8 21H20" stroke="url(#purgeGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
11 | +</svg> | |
0 | 12 | |
โผassets/icons/security.svg
+10-0
| @@ -0,0 +1,10 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="secGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#00E5FF" /> | |
5 | + <stop offset="100%" stop-color="#3B82F6" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <path d="M12 22S20 18 20 12V5L12 2L4 5V12C4 18 12 22 12 22Z" stroke="url(#secGrad)" stroke-width="2" stroke-linejoin="round"/> | |
9 | + <path d="M9 12L11 14L15 10" stroke="url(#secGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
10 | +</svg> | |
0 | 11 | |
โผassets/icons/sources.svg
+11-0
| @@ -0,0 +1,11 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="srcGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#00E5FF" /> | |
5 | + <stop offset="100%" stop-color="#3B82F6" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <path d="M12 2L2 7L12 12L22 7L12 2Z" stroke="url(#srcGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
9 | + <path d="M2 17L12 22L22 17" stroke="url(#srcGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
10 | + <path d="M2 12L12 17L22 12" stroke="url(#srcGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
11 | +</svg> | |
0 | 12 | |
โผassets/icons/terminal.svg
+11-0
| @@ -0,0 +1,11 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none"> | |
2 | + <defs> | |
3 | + <linearGradient id="termGrad" x1="0%" y1="0%" x2="100%" y2="100%"> | |
4 | + <stop offset="0%" stop-color="#38BDF8" /> | |
5 | + <stop offset="100%" stop-color="#00E5FF" /> | |
6 | + </linearGradient> | |
7 | + </defs> | |
8 | + <rect x="2" y="3" width="20" height="18" rx="3" stroke="url(#termGrad)" stroke-width="2"/> | |
9 | + <path d="M7 8L11 12L7 16" stroke="url(#termGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> | |
10 | + <line x1="13" y1="16" x2="17" y2="16" stroke="url(#termGrad)" stroke-width="2" stroke-linecap="round"/> | |
11 | +</svg> | |
0 | 12 | |