Swadhin Biswas

[email protected]
2026-03-31 01:13:42 +0600 committed NaN years ago
7b479a2
commit 7b479a2
8 files changed
+931 -295
β–Ό.github/workflows/ci.yml
+20-2
73
73
libgtk-3-dev \
74
74
libayatana-appindicator3-dev \
75
75
librsvg2-dev \
76
- libxdo-dev
76
+ libxdo-dev \
77
+ libsoup2.4-dev \
78
+ libjavascriptcoregtk-4.1-dev \
79
+ libgdk-pixbuf-2.0-dev \
80
+ libpango1.0-dev \
81
+ libatk1.0-dev \
82
+ libcairo2-dev
77
83
78
84
- name: Check Rust formatting
79
85
working-directory: src-tauri
122
128
libgtk-3-dev \
123
129
libayatana-appindicator3-dev \
124
130
librsvg2-dev \
125
- libxdo-dev
131
+ libxdo-dev \
132
+ libsoup2.4-dev \
133
+ libjavascriptcoregtk-4.1-dev \
134
+ libgdk-pixbuf-2.0-dev \
135
+ libpango1.0-dev \
136
+ libatk1.0-dev \
137
+ libcairo2-dev
126
138
127
139
- name: Install Rust dependencies
128
140
run: npm install
237
249
libayatana-appindicator3-dev \
238
250
librsvg2-dev \
239
251
libxdo-dev \
252
+ libsoup2.4-dev \
253
+ libjavascriptcoregtk-4.1-dev \
254
+ libgdk-pixbuf-2.0-dev \
255
+ libpango1.0-dev \
256
+ libatk1.0-dev \
257
+ libcairo2-dev \
240
258
firejail
241
259
242
260
- name: Install dependencies
243
261
β–Ό.github/workflows/pages.yml
+37-0
1
+name: Deploy to GitHub Pages
2
+
3
+on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+permissions:
9
+ contents: read
10
+ pages: write
11
+ id-token: write
12
+
13
+concurrency:
14
+ group: "pages"
15
+ cancel-in-progress: false
16
+
17
+jobs:
18
+ deploy:
19
+ environment:
20
+ name: github-pages
21
+ url: ${{ steps.deployment.outputs.page_url }}
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - name: Checkout
25
+ uses: actions/checkout@v4
26
+
27
+ - name: Setup Pages
28
+ uses: actions/configure-pages@v4
29
+
30
+ - name: Upload artifact
31
+ uses: actions/upload-pages-artifact@v3
32
+ with:
33
+ path: "."
34
+
35
+ - name: Deploy to GitHub Pages
36
+ id: deployment
37
+ uses: actions/deploy-pages@v4
0
38
β–Ό.github/workflows/release.yml
+7-1
40
40
libgtk-3-dev \
41
41
libayatana-appindicator3-dev \
42
42
librsvg2-dev \
43
- libxdo-dev
43
+ libxdo-dev \
44
+ libsoup2.4-dev \
45
+ libjavascriptcoregtk-4.1-dev \
46
+ libgdk-pixbuf-2.0-dev \
47
+ libpango1.0-dev \
48
+ libatk1.0-dev \
49
+ libcairo2-dev
44
50
45
51
- name: Install npm dependencies
46
52
run: npm install
47
53
β–Ό.nojekyll
+1-0
1
+# This file tells GitHub Pages not to use Jekyll
0
2
β–ΌREADME.md
+51-30
7
7
[![Built with Tauri](https://img.shields.io/badge/built%20with-Tauri-24C8DB)](https://tauri.app)
8
8
[![Rust](https://img.shields.io/badge/rust-v1.70+-orange)](https://www.rust-lang.org)
9
9
10
-Linuxy is a modern, feature-rich AppImage manager that simplifies how you install, organize, and run AppImage applications on Linux. With one-click installation, Firejail sandboxing, and optional delta updates, Linuxy brings simplicity and security to managing portable Linux applications.
10
+Linuxy is a modern, feature-rich AppImage manager that simplifies how you
11
+install, organize, and run AppImage applications on Linux. With one-click
12
+installation, Firejail sandboxing, and optional delta updates, Linuxy brings
13
+simplicity and security to managing portable Linux applications.
11
14
12
15
**πŸ“š Complete Documentation**: [DOCS_INDEX.md](DOCS_INDEX.md)
13
16
15
18
16
19
## ✨ Features
17
20
18
-- **πŸ“¦ One-Click Installation** - Drag and drop AppImage files to install them instantly
19
-- **πŸ›‘οΈ Firejail Sandboxing** - Toggle secure sandboxing per application with a single click
20
-- **πŸ”„ Optional Delta Updates** - Update checks for supported AppImages when `appimageupdatetool` is installed
21
+- **πŸ“¦ One-Click Installation** - Drag and drop AppImage files to install them
22
+ instantly
23
+- **πŸ›‘οΈ Firejail Sandboxing** - Toggle secure sandboxing per application with a
24
+ single click
25
+- **πŸ”„ Optional Delta Updates** - Update checks for supported AppImages when
26
+ `appimageupdatetool` is installed
21
27
- **🎨 Beautiful Interface** - Modern UI with dark and light theme support
22
28
- **πŸ“Š Storage Management** - Monitor disk usage across all installed AppImages
23
29
- **πŸ” App Discovery** - Browse and discover new AppImages directly from the app
24
-- **πŸ–₯️ Desktop Integration** - Automatic .desktop file creation for menu integration
30
+- **πŸ–₯️ Desktop Integration** - Automatic .desktop file creation for menu
31
+ integration
25
32
- **🎯 Icon Management** - Automatic icon extraction and caching
26
33
27
34
## πŸ“Έ Screenshots
28
35
29
36
### Library View
37
+
30
38
![Library View](.github/library.png)
31
39
32
40
### Settings View
41
+
33
42
![Settings View](.github/settings.png)
34
43
35
44
### Dark/Light Themes
45
+
36
46
![Themes](.github/themes.png)
37
47
38
48
## πŸš€ Quick Start
50
60
51
61
```bash
52
62
# Download the latest .deb package from releases
53
-wget https://github.com/swadhinbiswas/linuxy/releases/latest/download/linuxy_0.1.0_amd64.deb
63
+wget https://github.com/swadhinbiswas/linuxy/releases/latest/download/linuxy_1.0.0_amd64.deb
54
64
55
65
# Install the package
56
-sudo apt install ./linuxy_0.1.0_amd64.deb
66
+sudo apt install ./linuxy_1.0.0_amd64.deb
57
67
```
58
68
59
69
#### Option 2: AUR Package (Arch Linux)
100
110
101
111
1. **Drag and Drop**: Simply drag an `.AppImage` file onto the Linuxy window
102
112
2. **File Browser**: Click the "Browse" button to select an AppImage file
103
-3. **Discovery**: Use the built-in app discovery to find and install popular AppImages
113
+3. **Discovery**: Use the built-in app discovery to find and install popular
114
+ AppImages
104
115
105
116
### Managing Installed Apps
106
117
107
118
- **Launch**: Click the "Launch" button to run an installed AppImage
108
119
- **Sandbox**: Click the shield icon to toggle Firejail sandboxing
109
-- **Update**: Click the refresh icon to check for updates when `appimageupdatetool` is available
120
+- **Update**: Click the refresh icon to check for updates when
121
+ `appimageupdatetool` is available
110
122
- **Remove**: Click the trash icon to uninstall an AppImage
111
123
112
124
### Firejail Sandboxing
113
125
114
-Firejail provides an additional security layer by restricting what AppImages can access:
126
+Firejail provides an additional security layer by restricting what AppImages can
127
+access:
115
128
116
129
```bash
117
130
# Install Firejail (if not already installed)
121
134
```
122
135
123
136
When sandboxing is enabled for an app, it runs with restricted access to:
137
+
124
138
- Home directory (configurable)
125
139
- System files
126
140
- Network (optional)
128
142
129
143
### Keyboard Shortcuts
130
144
131
-| Shortcut | Action |
132
-|----------|--------|
133
-| `Ctrl+O` | Open AppImage file |
134
-| `Ctrl+R` | Refresh app list |
135
-| `Ctrl+,` | Open settings |
145
+| Shortcut | Action |
146
+| -------- | ------------------- |
147
+| `Ctrl+O` | Open AppImage file |
148
+| `Ctrl+R` | Refresh app list |
149
+| `Ctrl+,` | Open settings |
136
150
| `Delete` | Remove selected app |
137
151
138
152
## πŸ—οΈ Project Structure
169
183
170
184
### Storage Locations
171
185
172
-| Type | Location |
173
-|------|----------|
174
-| AppImages | `~/.local/appimages/` |
186
+| Type | Location |
187
+| ------------- | ------------------------------ |
188
+| AppImages | `~/.local/appimages/` |
175
189
| Desktop Files | `~/.local/share/applications/` |
176
-| Icons | `~/.local/share/icons/` |
190
+| Icons | `~/.local/share/icons/` |
177
191
178
192
### Environment Variables
179
193
180
-| Variable | Description | Default |
181
-|----------|-------------|---------|
182
-| `TAURI_DEBUG` | Enable debug mode | `false` |
183
-| `VITE_API_URL` | Custom API endpoint | - |
194
+| Variable | Description | Default |
195
+| -------------- | ------------------- | ------- |
196
+| `TAURI_DEBUG` | Enable debug mode | `false` |
197
+| `VITE_API_URL` | Custom API endpoint | - |
184
198
185
199
## πŸ”§ Development
186
200
236
250
237
251
## 🀝 Contributing
238
252
239
-We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
253
+We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md)
254
+for details.
240
255
241
256
### Quick Start for Contributors
242
257
260
275
1. **Frontend**: TypeScript + React with functional components
261
276
2. **Backend**: Rust with async/await patterns
262
277
3. **Styling**: CSS custom properties for theming
263
-4. **Commits**: Follow [Conventional Commits](https://www.conventionalcommits.org/)
278
+4. **Commits**: Follow
279
+ [Conventional Commits](https://www.conventionalcommits.org/)
264
280
265
281
## πŸ› Troubleshooting
266
282
290
306
#### Build fails with missing dependencies
291
307
292
308
```bash
293
-# Ubuntu/Debian
309
+# Ubuntu/Debian (24.04+)
310
+sudo apt install libwebkit2gtk-4.1-dev libssl-dev libayatana-appindicator3-dev
311
+
312
+# Ubuntu/Debian (20.04-22.04)
294
313
sudo apt install libwebkit2gtk-4.0-dev libssl-dev libayatana-appindicator3-dev
295
314
296
315
# Fedora
297
-sudo dnf install webkit2gtk3-devel openssl-devel libappindicator-gtk3-devel
316
+sudo dnf install webkit2gtk4.1-devel openssl-devel libappindicator-gtk3-devel
298
317
299
318
# Arch Linux
300
-sudo pacman -S webkit2gtk openssl libappindicator-gtk3
319
+sudo pacman -S webkit2gtk-4.1 openssl libappindicator-gtk3
301
320
```
302
321
303
322
## πŸ“„ License
328
347
329
348
## πŸ“¬ Contact
330
349
331
-- **GitHub Issues**: [Report a bug or request a feature](https://github.com/swadhinbiswas/linuxy/issues)
332
-- **Discussions**: [Community discussions](https://github.com/swadhinbiswas/linuxy/discussions)
350
+- **GitHub Issues**:
351
+ [Report a bug or request a feature](https://github.com/swadhinbiswas/linuxy/issues)
352
+- **Discussions**:
353
+ [Community discussions](https://github.com/swadhinbiswas/linuxy/discussions)
333
354
- **Twitter**: [@linuxyapp](https://twitter.com/linuxyapp)
334
355
335
356
---
336
357
β–Όindex.html
+814-8
1
-<!DOCTYPE html>
1
+<!doctype html>
2
2
<html lang="en">
3
3
<head>
4
4
<meta charset="UTF-8" />
5
5
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>linuxy</title>
6
+ <title>Linuxy - One-Click AppImage Manager for Linux</title>
7
+ <meta
8
+ name="description"
9
+ content="Linuxy is a modern AppImage manager with one-click installation, Firejail sandboxing, and automatic updates."
10
+ />
11
+ <link
12
+ rel="icon"
13
+ href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🐧</text></svg>"
14
+ />
7
15
<style>
8
- body {
16
+ * {
9
17
margin: 0;
10
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
11
- background-color: #121212;
12
- color: #ffffff;
18
+ padding: 0;
19
+ box-sizing: border-box;
20
+ }
21
+ :root {
22
+ --bg: #0a0a0a;
23
+ --card: #1a1a1a;
24
+ --text: #fff;
25
+ --text-muted: #a0a0a0;
26
+ --accent: #4caf50;
27
+ --accent-hover: #66bb6a;
28
+ --border: #2a2a2a;
29
+ }
30
+ body {
31
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
32
+ background: var(--bg);
33
+ color: var(--text);
34
+ line-height: 1.6;
35
+ }
36
+ .container {
37
+ max-width: 1100px;
38
+ margin: 0 auto;
39
+ padding: 0 24px;
40
+ }
41
+
42
+ /* Nav */
43
+ nav {
44
+ padding: 20px 0;
45
+ border-bottom: 1px solid var(--border);
46
+ position: fixed;
47
+ top: 0;
48
+ left: 0;
49
+ right: 0;
50
+ background: rgba(10, 10, 10, 0.9);
51
+ backdrop-filter: blur(10px);
52
+ z-index: 100;
53
+ }
54
+ nav .container {
55
+ display: flex;
56
+ justify-content: space-between;
57
+ align-items: center;
58
+ }
59
+ .logo {
60
+ font-size: 1.5rem;
61
+ font-weight: 700;
62
+ display: flex;
63
+ align-items: center;
64
+ gap: 10px;
65
+ text-decoration: none;
66
+ color: var(--text);
67
+ }
68
+ .logo-icon {
69
+ width: 36px;
70
+ height: 36px;
71
+ background: linear-gradient(135deg, #4caf50, #81c784);
72
+ border-radius: 8px;
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ font-size: 1.2rem;
77
+ }
78
+ .nav-links {
79
+ display: flex;
80
+ gap: 24px;
81
+ list-style: none;
82
+ }
83
+ .nav-links a {
84
+ color: var(--text-muted);
85
+ text-decoration: none;
86
+ transition: color 0.2s;
87
+ font-weight: 500;
88
+ }
89
+ .nav-links a:hover {
90
+ color: var(--text);
91
+ }
92
+ .btn {
93
+ display: inline-flex;
94
+ align-items: center;
95
+ gap: 8px;
96
+ padding: 10px 20px;
97
+ border-radius: 9999px;
98
+ font-weight: 600;
99
+ text-decoration: none;
100
+ border: none;
101
+ cursor: pointer;
102
+ transition: all 0.2s;
103
+ font-size: 0.95rem;
104
+ }
105
+ .btn-primary {
106
+ background: linear-gradient(135deg, #4caf50, #81c784);
107
+ color: #fff;
108
+ }
109
+ .btn-primary:hover {
110
+ transform: translateY(-2px);
111
+ box-shadow: 0 10px 30px rgba(76, 175, 80, 0.3);
112
+ }
113
+ .btn-secondary {
114
+ background: var(--card);
115
+ color: var(--text);
116
+ border: 1px solid var(--border);
117
+ }
118
+ .btn-secondary:hover {
119
+ background: #252525;
120
+ }
121
+ .btn-ghost {
122
+ background: transparent;
123
+ color: var(--text-muted);
124
+ }
125
+ .btn-ghost:hover {
126
+ color: var(--text);
127
+ }
128
+
129
+ /* Hero */
130
+ .hero {
131
+ padding: 160px 0 100px;
132
+ text-align: center;
133
+ background: radial-gradient(ellipse at top, rgba(76, 175, 80, 0.15) 0%, transparent 50%);
134
+ }
135
+ .hero h1 {
136
+ font-size: 4rem;
137
+ font-weight: 800;
138
+ margin-bottom: 24px;
139
+ background: linear-gradient(135deg, #fff 0%, #e0e0e0 50%, #4caf50 100%);
140
+ -webkit-background-clip: text;
141
+ -webkit-text-fill-color: transparent;
142
+ background-clip: text;
143
+ line-height: 1.1;
144
+ }
145
+ .hero h1 span {
146
+ background: linear-gradient(135deg, #4caf50, #81c784);
147
+ -webkit-background-clip: text;
148
+ -webkit-text-fill-color: transparent;
149
+ background-clip: text;
150
+ }
151
+ .hero p {
152
+ font-size: 1.35rem;
153
+ color: var(--text-muted);
154
+ max-width: 600px;
155
+ margin: 0 auto 40px;
156
+ }
157
+ .hero-buttons {
158
+ display: flex;
159
+ gap: 16px;
160
+ justify-content: center;
161
+ flex-wrap: wrap;
162
+ }
163
+ .hero-stats {
164
+ display: flex;
165
+ justify-content: center;
166
+ gap: 48px;
167
+ margin-top: 60px;
168
+ }
169
+ .stat {
170
+ text-align: center;
171
+ }
172
+ .stat-value {
173
+ font-size: 2rem;
174
+ font-weight: 700;
175
+ color: var(--accent);
176
+ }
177
+ .stat-label {
178
+ font-size: 0.9rem;
179
+ color: var(--text-muted);
180
+ }
181
+
182
+ /* Features */
183
+ .features {
184
+ padding: 100px 0;
185
+ }
186
+ .section-title {
187
+ text-align: center;
188
+ font-size: 2.5rem;
189
+ font-weight: 700;
190
+ margin-bottom: 16px;
191
+ }
192
+ .section-subtitle {
193
+ text-align: center;
194
+ color: var(--text-muted);
195
+ max-width: 500px;
196
+ margin: 0 auto 48px;
197
+ font-size: 1.1rem;
198
+ }
199
+ .features-grid {
200
+ display: grid;
201
+ grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
202
+ gap: 24px;
203
+ }
204
+ .feature-card {
205
+ background: var(--card);
206
+ padding: 32px;
207
+ border-radius: 16px;
208
+ border: 1px solid var(--border);
209
+ transition: all 0.3s;
210
+ position: relative;
211
+ overflow: hidden;
212
+ }
213
+ .feature-card::before {
214
+ content: "";
215
+ position: absolute;
216
+ top: 0;
217
+ left: 0;
218
+ right: 0;
219
+ height: 3px;
220
+ background: linear-gradient(90deg, var(--accent), transparent);
221
+ opacity: 0;
222
+ transition: opacity 0.3s;
223
+ }
224
+ .feature-card:hover {
225
+ border-color: var(--accent);
226
+ transform: translateY(-8px);
227
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
228
+ }
229
+ .feature-card:hover::before {
230
+ opacity: 1;
231
+ }
232
+ .feature-icon {
233
+ font-size: 2.5rem;
234
+ margin-bottom: 20px;
235
+ display: block;
236
+ }
237
+ .feature-card h3 {
238
+ font-size: 1.25rem;
239
+ margin-bottom: 12px;
240
+ }
241
+ .feature-card p {
242
+ color: var(--text-muted);
243
+ font-size: 1rem;
244
+ line-height: 1.7;
245
+ }
246
+
247
+ /* How it works */
248
+ .how-it-works {
249
+ padding: 100px 0;
250
+ background: linear-gradient(180deg, #0a0a0a 0%, #0f0f0f 100%);
251
+ }
252
+ .steps {
253
+ display: grid;
254
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
255
+ gap: 40px;
256
+ max-width: 900px;
257
+ margin: 0 auto;
258
+ }
259
+ .step {
260
+ text-align: center;
261
+ position: relative;
262
+ }
263
+ .step::after {
264
+ content: "";
265
+ position: absolute;
266
+ top: 30px;
267
+ right: -20px;
268
+ width: 40px;
269
+ height: 2px;
270
+ background: var(--border);
271
+ display: none;
272
+ }
273
+ .step:last-child::after {
274
+ display: none;
275
+ }
276
+ .step-number {
277
+ width: 72px;
278
+ height: 72px;
279
+ background: var(--card);
280
+ border: 2px solid var(--accent);
281
+ border-radius: 50%;
282
+ display: flex;
283
+ align-items: center;
284
+ justify-content: center;
285
+ font-size: 1.75rem;
286
+ font-weight: 700;
287
+ color: var(--accent);
288
+ margin: 0 auto 24px;
289
+ transition: all 0.3s;
290
+ }
291
+ .step:hover .step-number {
292
+ background: var(--accent);
293
+ color: #fff;
294
+ transform: scale(1.1);
295
+ }
296
+ .step h3 {
297
+ font-size: 1.25rem;
298
+ margin-bottom: 12px;
299
+ }
300
+ .step p {
301
+ color: var(--text-muted);
302
+ font-size: 1rem;
303
+ }
304
+
305
+ /* Install */
306
+ .installation {
307
+ padding: 100px 0;
308
+ }
309
+ .install-grid {
310
+ display: grid;
311
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
312
+ gap: 24px;
313
+ }
314
+ .install-card {
315
+ background: var(--card);
316
+ padding: 32px;
317
+ border-radius: 16px;
318
+ border: 1px solid var(--border);
319
+ text-align: center;
320
+ transition: all 0.3s;
321
+ }
322
+ .install-card:hover {
323
+ border-color: var(--accent);
324
+ transform: translateY(-4px);
325
+ }
326
+ .install-icon {
327
+ font-size: 3rem;
328
+ margin-bottom: 16px;
329
+ display: block;
330
+ }
331
+ .install-card h3 {
332
+ font-size: 1.35rem;
333
+ margin-bottom: 8px;
334
+ }
335
+ .install-card > p {
336
+ color: var(--text-muted);
337
+ margin-bottom: 16px;
338
+ }
339
+ .install-command {
340
+ background: #0a0a0a;
341
+ padding: 16px;
342
+ border-radius: 8px;
343
+ font-family: "Fira Code", "Courier New", monospace;
344
+ font-size: 0.9rem;
345
+ color: var(--accent);
346
+ margin: 20px 0;
347
+ overflow-x: auto;
348
+ text-align: left;
349
+ }
350
+ .install-card .btn {
351
+ margin-top: 8px;
352
+ }
353
+
354
+ /* CTA */
355
+ .cta {
356
+ padding: 100px 0;
357
+ background: linear-gradient(180deg, #0f0f0f 0%, #0a0a0a 100%);
358
+ text-align: center;
359
+ }
360
+ .cta h2 {
361
+ font-size: 2.5rem;
362
+ font-weight: 700;
363
+ margin-bottom: 16px;
364
+ }
365
+ .cta p {
366
+ color: var(--text-muted);
367
+ font-size: 1.15rem;
368
+ margin-bottom: 32px;
369
+ max-width: 500px;
370
+ margin-left: auto;
371
+ margin-right: auto;
372
+ }
373
+
374
+ /* FAQ */
375
+ .faq {
376
+ padding: 100px 0;
377
+ background: #0f0f0f;
378
+ }
379
+ .faq-list {
380
+ max-width: 700px;
381
+ margin: 0 auto;
382
+ }
383
+ .faq-item {
384
+ background: var(--card);
385
+ border: 1px solid var(--border);
386
+ border-radius: 12px;
387
+ margin-bottom: 12px;
388
+ overflow: hidden;
389
+ transition: all 0.3s;
390
+ }
391
+ .faq-item:hover {
392
+ border-color: var(--accent);
393
+ }
394
+ .faq-question {
395
+ padding: 24px;
396
+ font-weight: 600;
397
+ cursor: pointer;
398
+ display: flex;
399
+ justify-content: space-between;
400
+ align-items: center;
401
+ font-size: 1.05rem;
402
+ }
403
+ .faq-question::after {
404
+ content: "+";
405
+ font-size: 1.5rem;
406
+ color: var(--accent);
407
+ transition: transform 0.3s;
408
+ }
409
+ .faq-item.active .faq-question::after {
410
+ transform: rotate(45deg);
411
+ }
412
+ .faq-answer {
413
+ padding: 0 24px;
414
+ max-height: 0;
415
+ overflow: hidden;
416
+ color: var(--text-muted);
417
+ transition: all 0.3s;
418
+ line-height: 1.8;
419
+ }
420
+ .faq-item.active .faq-answer {
421
+ padding: 0 24px 24px;
422
+ max-height: 300px;
423
+ }
424
+
425
+ /* Footer */
426
+ footer {
427
+ padding: 60px 0;
428
+ border-top: 1px solid var(--border);
429
+ text-align: center;
430
+ color: var(--text-muted);
431
+ }
432
+ .footer-links {
433
+ display: flex;
434
+ justify-content: center;
435
+ gap: 32px;
436
+ margin-bottom: 24px;
437
+ list-style: none;
438
+ flex-wrap: wrap;
439
+ }
440
+ .footer-links a {
441
+ color: var(--text-muted);
442
+ text-decoration: none;
443
+ transition: color 0.2s;
444
+ }
445
+ .footer-links a:hover {
446
+ color: var(--accent);
447
+ }
448
+ .footer-logo {
449
+ font-size: 1.5rem;
450
+ font-weight: 700;
451
+ margin-bottom: 16px;
452
+ display: flex;
453
+ justify-content: center;
454
+ align-items: center;
455
+ gap: 8px;
456
+ }
457
+ .footer-logo span {
458
+ background: linear-gradient(135deg, #4caf50, #81c784);
459
+ -webkit-background-clip: text;
460
+ -webkit-text-fill-color: transparent;
461
+ }
462
+
463
+ @media (max-width: 768px) {
464
+ .hero h1 {
465
+ font-size: 2.5rem;
466
+ }
467
+ .hero p {
468
+ font-size: 1.1rem;
469
+ }
470
+ .section-title {
471
+ font-size: 2rem;
472
+ }
473
+ .hero-stats {
474
+ flex-direction: column;
475
+ gap: 24px;
476
+ }
477
+ .nav-links {
478
+ display: none;
479
+ }
480
+ .steps {
481
+ grid-template-columns: 1fr;
482
+ }
483
+ .step::after {
484
+ display: none;
485
+ }
13
486
}
14
487
</style>
15
488
</head>
16
489
<body>
17
- <div id="root"></div>
18
- <script type="module" src="/src/main.tsx"></script>
490
+ <nav>
491
+ <div class="container">
492
+ <a href="#" class="logo"
493
+ ><div class="logo-icon">🐧</div>
494
+ Linuxy</a
495
+ >
496
+ <ul class="nav-links">
497
+ <li><a href="#features">Features</a></li>
498
+ <li><a href="#how-it-works">How It Works</a></li>
499
+ <li><a href="#installation">Install</a></li>
500
+ <li><a href="#faq">FAQ</a></li>
501
+ </ul>
502
+ <div style="display: flex; gap: 12px">
503
+ <a href="#installation" class="btn btn-primary">Download</a>
504
+ <a href="https://github.com/swadhinbiswas/linuxy" class="btn btn-ghost">GitHub</a>
505
+ </div>
506
+ </div>
507
+ </nav>
508
+
509
+ <section class="hero">
510
+ <div class="container">
511
+ <h1>The Ultimate<br /><span>AppImage Manager</span><br />for Linux</h1>
512
+ <p>
513
+ Install, organize, and sandbox your AppImages with a single click. Simple, secure, and
514
+ beautiful.
515
+ </p>
516
+ <div class="hero-buttons">
517
+ <a href="#installation" class="btn btn-primary">⬇️ Download v1.0.0</a>
518
+ <a href="https://github.com/swadhinbiswas/linuxy" class="btn btn-secondary"
519
+ >⭐ Star on GitHub</a
520
+ >
521
+ </div>
522
+ <div class="hero-stats">
523
+ <div class="stat">
524
+ <div class="stat-value">100%</div>
525
+ <div class="stat-label">Free & Open Source</div>
526
+ </div>
527
+ <div class="stat">
528
+ <div class="stat-value">MIT</div>
529
+ <div class="stat-label">License</div>
530
+ </div>
531
+ <div class="stat">
532
+ <div class="stat-value">Tauri</div>
533
+ <div class="stat-label">Powered by</div>
534
+ </div>
535
+ </div>
536
+ </div>
537
+ </section>
538
+
539
+ <section class="features" id="features">
540
+ <div class="container">
541
+ <h2 class="section-title">Why Linuxy?</h2>
542
+ <p class="section-subtitle">Everything you need to manage AppImages on Linux</p>
543
+ <div class="features-grid">
544
+ <div class="feature-card">
545
+ <span class="feature-icon">πŸ“¦</span>
546
+ <h3>One-Click Installation</h3>
547
+ <p>
548
+ Drag and drop AppImage files to install them instantly. Automatic desktop entry
549
+ creation and icon extraction.
550
+ </p>
551
+ </div>
552
+ <div class="feature-card">
553
+ <span class="feature-icon">πŸ›‘οΈ</span>
554
+ <h3>Firejail Sandboxing</h3>
555
+ <p>
556
+ Run apps in a secure sandbox with a single click. Toggle sandboxing per application
557
+ for extra security.
558
+ </p>
559
+ </div>
560
+ <div class="feature-card">
561
+ <span class="feature-icon">πŸ”„</span>
562
+ <h3>Automatic Updates</h3>
563
+ <p>
564
+ Built-in update checking keeps your AppImages up to date. Supports delta updates when
565
+ available.
566
+ </p>
567
+ </div>
568
+ <div class="feature-card">
569
+ <span class="feature-icon">🎨</span>
570
+ <h3>Beautiful UI</h3>
571
+ <p>
572
+ Modern dark and light themes. Clean, responsive interface built with React and
573
+ Tailwind patterns.
574
+ </p>
575
+ </div>
576
+ <div class="feature-card">
577
+ <span class="feature-icon">πŸ“Š</span>
578
+ <h3>Storage Management</h3>
579
+ <p>
580
+ Monitor disk usage, see installation dates, and manage all your AppImages from one
581
+ place.
582
+ </p>
583
+ </div>
584
+ <div class="feature-card">
585
+ <span class="feature-icon">πŸ”</span>
586
+ <h3>App Discovery</h3>
587
+ <p>Browse and discover new AppImages directly from the integrated app catalog.</p>
588
+ </div>
589
+ </div>
590
+ </div>
591
+ </section>
592
+
593
+ <section class="how-it-works" id="how-it-works">
594
+ <div class="container">
595
+ <h2 class="section-title">How It Works</h2>
596
+ <p class="section-subtitle">Get started in three simple steps</p>
597
+ <div class="steps">
598
+ <div class="step">
599
+ <div class="step-number">1</div>
600
+ <h3>Install Linuxy</h3>
601
+ <p>
602
+ Download from releases or build from source. Supports DEB, AppImage, RPM, and AUR.
603
+ </p>
604
+ </div>
605
+ <div class="step">
606
+ <div class="step-number">2</div>
607
+ <h3>Add AppImages</h3>
608
+ <p>Drag & drop files or discover apps from the built-in store. It's that simple.</p>
609
+ </div>
610
+ <div class="step">
611
+ <div class="step-number">3</div>
612
+ <h3>Launch & Enjoy</h3>
613
+ <p>One-click launch, optional sandboxing, automatic updates. Done!</p>
614
+ </div>
615
+ </div>
616
+ </div>
617
+ </section>
618
+
619
+ <section class="installation" id="installation">
620
+ <div class="container">
621
+ <h2 class="section-title">Install Linuxy</h2>
622
+ <p class="section-subtitle">Choose your preferred installation method</p>
623
+ <div class="install-grid">
624
+ <div class="install-card">
625
+ <span class="install-icon">πŸ“¦</span>
626
+ <h3>DEB Package</h3>
627
+ <p>Debian / Ubuntu / Mint</p>
628
+ <div class="install-command">sudo apt install ./linuxy_1.0.0_amd64.deb</div>
629
+ <a href="https://github.com/swadhinbiswas/linuxy/releases" class="btn btn-primary"
630
+ >Download DEB</a
631
+ >
632
+ </div>
633
+ <div class="install-card">
634
+ <span class="install-icon">🟒</span>
635
+ <h3>AppImage</h3>
636
+ <p>Any Linux Distribution</p>
637
+ <div class="install-command">
638
+ chmod +x linuxy_1.0.0_amd64.AppImage<br />./linuxy_1.0.0_amd64.AppImage
639
+ </div>
640
+ <a href="https://github.com/swadhinbiswas/linuxy/releases" class="btn btn-secondary"
641
+ >Download AppImage</a
642
+ >
643
+ </div>
644
+ <div class="install-card">
645
+ <span class="install-icon">πŸ”΄</span>
646
+ <h3>RPM Package</h3>
647
+ <p>Fedora / RHEL / openSUSE</p>
648
+ <div class="install-command">sudo dnf install ./linuxy-1.0.0-1.x86_64.rpm</div>
649
+ <a href="https://github.com/swadhinbiswas/linuxy/releases" class="btn btn-secondary"
650
+ >Download RPM</a
651
+ >
652
+ </div>
653
+ <div class="install-card">
654
+ <span class="install-icon" style="font-weight: bold">AUR</span>
655
+ <h3>AUR Package</h3>
656
+ <p>Arch Linux</p>
657
+ <div class="install-command">yay -S linuxy</div>
658
+ <a href="https://aur.archlinux.org/packages/linuxy" class="btn btn-secondary"
659
+ >View AUR</a
660
+ >
661
+ </div>
662
+ <div class="install-card">
663
+ <span class="install-icon">πŸ™</span>
664
+ <h3>Build from Source</h3>
665
+ <p>All Distributions</p>
666
+ <div class="install-command">
667
+ git clone https://github.com/swadhinbiswas/linuxy<br />cd linuxy && npm install && npm
668
+ run tauri build
669
+ </div>
670
+ <a href="https://github.com/swadhinbiswas/linuxy" class="btn btn-secondary"
671
+ >View Source</a
672
+ >
673
+ </div>
674
+ <div class="install-card">
675
+ <span class="install-icon">🍱</span>
676
+ <h3>Development</h3>
677
+ <p>Run from Source</p>
678
+ <div class="install-command">
679
+ git clone https://github.com/swadhinbiswas/linuxy<br />cd linuxy && npm install && npm
680
+ run tauri dev
681
+ </div>
682
+ <a href="https://github.com/swadhinbiswas/linuxy" class="btn btn-secondary"
683
+ >Contribute</a
684
+ >
685
+ </div>
686
+ </div>
687
+ </div>
688
+ </section>
689
+
690
+ <section class="cta">
691
+ <div class="container">
692
+ <h2>Ready to Try Linuxy?</h2>
693
+ <p>Join thousands of Linux users who manage their AppImages with Linuxy.</p>
694
+ <a
695
+ href="#installation"
696
+ class="btn btn-primary"
697
+ style="padding: 16px 32px; font-size: 1.1rem"
698
+ >Get Started Now β†’</a
699
+ >
700
+ </div>
701
+ </section>
702
+
703
+ <section class="faq" id="faq">
704
+ <div class="container">
705
+ <h2 class="section-title">Frequently Asked Questions</h2>
706
+ <div class="faq-list">
707
+ <div class="faq-item">
708
+ <div class="faq-question">What is an AppImage?</div>
709
+ <div class="faq-answer">
710
+ <p>
711
+ AppImage is a universal package format for Linux. It's a single executable file
712
+ containing an application and all its dependencies, allowing you to run software
713
+ without installation or root access.
714
+ </p>
715
+ </div>
716
+ </div>
717
+ <div class="faq-item">
718
+ <div class="faq-question">Do I need Firejail?</div>
719
+ <div class="faq-answer">
720
+ <p>
721
+ Firejail is optional but highly recommended. Linuxy works perfectly without it, but
722
+ Firejail adds an essential security layer by sandboxing your AppImages. Install
723
+ with: <code>sudo apt install firejail</code>
724
+ </p>
725
+ </div>
726
+ </div>
727
+ <div class="faq-item">
728
+ <div class="faq-question">Where are AppImages stored?</div>
729
+ <div class="faq-answer">
730
+ <p>
731
+ Linuxy stores AppImages in <code>~/.local/appimages/</code> and creates desktop
732
+ entries in <code>~/.local/share/applications/</code> for easy access from your
733
+ application menu.
734
+ </p>
735
+ </div>
736
+ </div>
737
+ <div class="faq-item">
738
+ <div class="faq-question">Is Linuxy free?</div>
739
+ <div class="faq-answer">
740
+ <p>
741
+ Yes! Linuxy is 100% free and open source under the MIT license. There are no premium
742
+ features or payments.
743
+ </p>
744
+ </div>
745
+ </div>
746
+ <div class="faq-item">
747
+ <div class="faq-question">What distributions are supported?</div>
748
+ <div class="faq-answer">
749
+ <p>
750
+ Linuxy runs on any Linux distribution! We provide DEB packages for Debian/Ubuntu,
751
+ RPM for Fedora, AppImage for universal use, and AUR for Arch Linux users.
752
+ </p>
753
+ </div>
754
+ </div>
755
+ <div class="faq-item">
756
+ <div class="faq-question">How do I report bugs?</div>
757
+ <div class="faq-answer">
758
+ <p>
759
+ Please open an issue on our
760
+ <a
761
+ href="https://github.com/swadhinbiswas/linuxy/issues"
762
+ style="color: var(--accent)"
763
+ >GitHub Issues page</a
764
+ >. We welcome bug reports, feature requests, and contributions!
765
+ </p>
766
+ </div>
767
+ </div>
768
+ </div>
769
+ </div>
770
+ </section>
771
+
772
+ <footer>
773
+ <div class="container">
774
+ <div class="footer-logo">🐧 <span>Linuxy</span></div>
775
+ <ul class="footer-links">
776
+ <li><a href="https://github.com/swadhinbiswas/linuxy">GitHub</a></li>
777
+ <li><a href="https://github.com/swadhinbiswas/linuxy/releases">Releases</a></li>
778
+ <li><a href="https://github.com/swadhinbiswas/linuxy/issues">Issues</a></li>
779
+ <li>
780
+ <a href="https://github.com/swadhinbiswas/linuxy/blob/main/README.md">Documentation</a>
781
+ </li>
782
+ <li>
783
+ <a href="https://github.com/swadhinbiswas/linuxy/blob/main/CONTRIBUTING.md"
784
+ >Contribute</a
785
+ >
786
+ </li>
787
+ </ul>
788
+ <p>Β© 2024 Linuxy. Open source under MIT License.</p>
789
+ <p style="margin-top: 12px; font-size: 0.9rem">
790
+ Made with ❀️ and πŸ¦€ for the Linux community
791
+ </p>
792
+ </div>
793
+ </footer>
794
+
795
+ <script>
796
+ // FAQ toggle
797
+ document.querySelectorAll(".faq-question").forEach((q) => {
798
+ q.addEventListener("click", () => {
799
+ const item = q.parentElement;
800
+ const wasActive = item.classList.contains("active");
801
+ document.querySelectorAll(".faq-item").forEach((i) => i.classList.remove("active"));
802
+ if (!wasActive) item.classList.add("active");
803
+ });
804
+ });
805
+
806
+ // Smooth scroll
807
+ document.querySelectorAll('a[href^="#"]').forEach((a) => {
808
+ a.addEventListener("click", (e) => {
809
+ e.preventDefault();
810
+ const target = document.querySelector(a.getAttribute("href"));
811
+ if (target) target.scrollIntoView({ behavior: "smooth", block: "start" });
812
+ });
813
+ });
814
+
815
+ // Nav background on scroll
816
+ window.addEventListener("scroll", () => {
817
+ const nav = document.querySelector("nav");
818
+ if (window.scrollY > 50) {
819
+ nav.style.background = "rgba(10,10,10,0.95)";
820
+ } else {
821
+ nav.style.background = "rgba(10,10,10,0.9)";
822
+ }
823
+ });
824
+ </script>
19
825
</body>
20
826
</html>
21
827
β–Όpackage.json
+1-0
3
3
"private": true,
4
4
"version": "1.0.0",
5
5
"type": "module",
6
+ "homepage": "https://swadhinbiswas.github.io/linuxy",
6
7
"scripts": {
7
8
"dev": "vite",
8
9
"build": "tsc && vite build",
9
10
β–Όwebsite.html
+0-254
1
-<!DOCTYPE html>
2
-<html lang="en">
3
-<head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Linuxy - One-Click AppImage Manager for Linux</title>
7
- <meta name="description" content="Linuxy is a modern AppImage manager with one-click installation, Firejail sandboxing, and automatic updates.">
8
- <style>
9
- * { margin: 0; padding: 0; box-sizing: border-box; }
10
- :root {
11
- --bg: #0a0a0a; --card: #1a1a1a; --text: #fff; --text-muted: #a0a0a0;
12
- --accent: #4caf50; --border: #2a2a2a;
13
- }
14
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; }
15
- .container { max-width: 1100px; margin: 0 auto; padding: 0 24px; }
16
-
17
- /* Nav */
18
- nav { padding: 20px 0; border-bottom: 1px solid var(--border); }
19
- nav .container { display: flex; justify-content: space-between; align-items: center; }
20
- .logo { font-size: 1.5rem; font-weight: 700; display: flex; align-items: center; gap: 10px; }
21
- .logo-icon { width: 36px; height: 36px; background: linear-gradient(135deg, #4caf50, #81c784); border-radius: 8px; display: flex; align-items: center; justify-content: center; }
22
- .nav-links { display: flex; gap: 24px; list-style: none; }
23
- .nav-links a { color: var(--text-muted); text-decoration: none; transition: color 0.2s; }
24
- .nav-links a:hover { color: var(--text); }
25
- .btn { display: inline-flex; align-items: center; gap: 8px; padding: 10px 20px; border-radius: 9999px; font-weight: 600; text-decoration: none; border: none; cursor: pointer; transition: all 0.2s; }
26
- .btn-primary { background: linear-gradient(135deg, #4caf50, #81c784); color: #fff; }
27
- .btn-primary:hover { transform: translateY(-2px); }
28
- .btn-secondary { background: var(--card); color: var(--text); border: 1px solid var(--border); }
29
- .btn-secondary:hover { background: #252525; }
30
-
31
- /* Hero */
32
- .hero { padding: 100px 0 60px; text-align: center; }
33
- .hero h1 { font-size: 3rem; font-weight: 800; margin-bottom: 20px; background: linear-gradient(135deg, #fff, #a0a0a0); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
34
- .hero h1 span { background: linear-gradient(135deg, #4caf50, #81c784); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
35
- .hero p { font-size: 1.2rem; color: var(--text-muted); max-width: 600px; margin: 0 auto 32px; }
36
- .hero-buttons { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; }
37
-
38
- /* Features */
39
- .features { padding: 80px 0; }
40
- .section-title { text-align: center; font-size: 2rem; font-weight: 700; margin-bottom: 48px; }
41
- .features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 24px; }
42
- .feature-card { background: var(--card); padding: 24px; border-radius: 12px; border: 1px solid var(--border); transition: all 0.3s; }
43
- .feature-card:hover { border-color: var(--accent); transform: translateY(-4px); }
44
- .feature-icon { font-size: 2rem; margin-bottom: 16px; }
45
- .feature-card h3 { font-size: 1.1rem; margin-bottom: 8px; }
46
- .feature-card p { color: var(--text-muted); font-size: 0.95rem; }
47
-
48
- /* How it works */
49
- .how-it-works { padding: 80px 0; background: #0f0f0f; }
50
- .steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 32px; }
51
- .step { text-align: center; }
52
- .step-number { width: 60px; height: 60px; background: var(--card); border: 2px solid var(--accent); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; font-weight: 700; color: var(--accent); margin: 0 auto 16px; }
53
- .step h3 { margin-bottom: 8px; }
54
- .step p { color: var(--text-muted); font-size: 0.9rem; }
55
-
56
- /* Install */
57
- .installation { padding: 80px 0; }
58
- .install-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 24px; }
59
- .install-card { background: var(--card); padding: 24px; border-radius: 12px; border: 1px solid var(--border); text-align: center; }
60
- .install-card:hover { border-color: var(--accent); }
61
- .install-icon { font-size: 2.5rem; margin-bottom: 12px; }
62
- .install-command { background: #0f0f0f; padding: 12px; border-radius: 6px; font-family: 'Courier New', monospace; font-size: 0.85rem; color: var(--accent); margin: 16px 0; overflow-x: auto; }
63
-
64
- /* FAQ */
65
- .faq { padding: 80px 0; background: #0f0f0f; }
66
- .faq-list { max-width: 700px; margin: 0 auto; }
67
- .faq-item { background: var(--card); border: 1px solid var(--border); border-radius: 8px; margin-bottom: 12px; overflow: hidden; }
68
- .faq-question { padding: 20px; font-weight: 600; cursor: pointer; display: flex; justify-content: space-between; align-items: center; }
69
- .faq-question::after { content: '+'; font-size: 1.5rem; color: var(--accent); }
70
- .faq-item.active .faq-question::after { transform: rotate(45deg); }
71
- .faq-answer { padding: 0 20px; max-height: 0; overflow: hidden; color: var(--text-muted); transition: all 0.3s; }
72
- .faq-item.active .faq-answer { padding: 0 20px 20px; max-height: 300px; }
73
-
74
- /* Footer */
75
- footer { padding: 40px 0; border-top: 1px solid var(--border); text-align: center; color: var(--text-muted); }
76
- .footer-links { display: flex; justify-content: center; gap: 24px; margin-bottom: 20px; list-style: none; }
77
- .footer-links a { color: var(--text-muted); text-decoration: none; }
78
- .footer-links a:hover { color: var(--accent); }
79
-
80
- @media (max-width: 768px) {
81
- .hero h1 { font-size: 2rem; }
82
- .nav-links { display: none; }
83
- }
84
- </style>
85
-</head>
86
-<body>
87
- <nav>
88
- <div class="container">
89
- <a href="#" class="logo"><div class="logo-icon">🐧</div> Linuxy</a>
90
- <ul class="nav-links">
91
- <li><a href="#features">Features</a></li>
92
- <li><a href="#how-it-works">How It Works</a></li>
93
- <li><a href="#installation">Installation</a></li>
94
- <li><a href="#faq">FAQ</a></li>
95
- </ul>
96
- <a href="https://github.com/swadhinbiswas/linuxy" class="btn btn-secondary">GitHub</a>
97
- </div>
98
- </nav>
99
-
100
- <section class="hero">
101
- <div class="container">
102
- <h1>The Ultimate <span>AppImage Manager</span> for Linux</h1>
103
- <p>Install, organize, and sandbox your AppImages with a single click. Simple, secure, and beautiful.</p>
104
- <div class="hero-buttons">
105
- <a href="#installation" class="btn btn-primary">⬇️ Download</a>
106
- <a href="https://github.com/swadhinbiswas/linuxy" class="btn btn-secondary">⭐ GitHub</a>
107
- </div>
108
- </div>
109
- </section>
110
-
111
- <section class="features" id="features">
112
- <div class="container">
113
- <h2 class="section-title">Features</h2>
114
- <div class="features-grid">
115
- <div class="feature-card">
116
- <div class="feature-icon">πŸ“¦</div>
117
- <h3>One-Click Installation</h3>
118
- <p>Drag and drop AppImage files to install them instantly with automatic desktop integration.</p>
119
- </div>
120
- <div class="feature-card">
121
- <div class="feature-icon">πŸ›‘οΈ</div>
122
- <h3>Firejail Sandboxing</h3>
123
- <p>Run apps in a secure sandbox. Toggle sandboxing per application with a single click.</p>
124
- </div>
125
- <div class="feature-card">
126
- <div class="feature-icon">πŸ”„</div>
127
- <h3>Automatic Updates</h3>
128
- <p>Built-in update checking keeps your AppImages up to date automatically.</p>
129
- </div>
130
- <div class="feature-card">
131
- <div class="feature-icon">🎨</div>
132
- <h3>Beautiful UI</h3>
133
- <p>Modern interface with dark and light themes. Clean, responsive, and intuitive.</p>
134
- </div>
135
- <div class="feature-card">
136
- <div class="feature-icon">πŸ“Š</div>
137
- <h3>Storage Management</h3>
138
- <p>Monitor disk usage and see installation dates for all your AppImages.</p>
139
- </div>
140
- <div class="feature-card">
141
- <div class="feature-icon">πŸ”</div>
142
- <h3>App Discovery</h3>
143
- <p>Browse and discover new AppImages directly from the application.</p>
144
- </div>
145
- </div>
146
- </div>
147
- </section>
148
-
149
- <section class="how-it-works" id="how-it-works">
150
- <div class="container">
151
- <h2 class="section-title">How It Works</h2>
152
- <div class="steps">
153
- <div class="step">
154
- <div class="step-number">1</div>
155
- <h3>Install Linuxy</h3>
156
- <p>Download and install using your package manager or build from source.</p>
157
- </div>
158
- <div class="step">
159
- <div class="step-number">2</div>
160
- <h3>Add AppImages</h3>
161
- <p>Drag and drop AppImage files or discover new apps from the built-in store.</p>
162
- </div>
163
- <div class="step">
164
- <div class="step-number">3</div>
165
- <h3>Launch & Enjoy</h3>
166
- <p>Launch apps with one click, optionally sandboxed for extra security.</p>
167
- </div>
168
- </div>
169
- </div>
170
- </section>
171
-
172
- <section class="installation" id="installation">
173
- <div class="container">
174
- <h2 class="section-title">Installation</h2>
175
- <div class="install-grid">
176
- <div class="install-card">
177
- <div class="install-icon">πŸ“¦</div>
178
- <h3>DEB Package</h3>
179
- <p>Debian/Ubuntu</p>
180
- <div class="install-command">sudo apt install ./linuxy_*.deb</div>
181
- <a href="https://github.com/swadhinbiswas/linuxy/releases" class="btn btn-primary">Download</a>
182
- </div>
183
- <div class="install-card">
184
- <div class="install-icon">πŸ¦€</div>
185
- <h3>Build from Source</h3>
186
- <p>All Linux distros</p>
187
- <div class="install-command">git clone https://github.com/swadhinbiswas/linuxy<br>cd linuxy && npm install<br>npm run tauri build</div>
188
- <a href="https://github.com/swadhinbiswas/linuxy" class="btn btn-secondary">View Guide</a>
189
- </div>
190
- <div class="install-card">
191
- <div class="install-icon">πŸ“‹</div>
192
- <h3>AUR Package</h3>
193
- <p>Arch Linux</p>
194
- <div class="install-command">yay -S linuxy</div>
195
- <a href="https://aur.archlinux.org/packages/linuxy" class="btn btn-secondary">AUR Page</a>
196
- </div>
197
- </div>
198
- </div>
199
- </section>
200
-
201
- <section class="faq" id="faq">
202
- <div class="container">
203
- <h2 class="section-title">FAQ</h2>
204
- <div class="faq-list">
205
- <div class="faq-item">
206
- <div class="faq-question">What is an AppImage?</div>
207
- <div class="faq-answer"><p>AppImage is a universal package format for Linux. It's a single file containing an application and all its dependencies, allowing you to run software without installation.</p></div>
208
- </div>
209
- <div class="faq-item">
210
- <div class="faq-question">Do I need Firejail?</div>
211
- <div class="faq-answer"><p>Firejail is optional but recommended. Linuxy works without it, but Firejail adds security by restricting what AppImages can access. Install with: sudo apt install firejail</p></div>
212
- </div>
213
- <div class="faq-item">
214
- <div class="faq-question">Where are AppImages stored?</div>
215
- <div class="faq-answer"><p>Linuxy stores AppImages in ~/.local/appimages/ and creates desktop entries in ~/.local/share/applications/ for easy access.</p></div>
216
- </div>
217
- <div class="faq-item">
218
- <div class="faq-question">Is Linuxy free?</div>
219
- <div class="faq-answer"><p>Yes! Linuxy is completely free and open source under the MIT license.</p></div>
220
- </div>
221
- </div>
222
- </div>
223
- </section>
224
-
225
- <footer>
226
- <div class="container">
227
- <ul class="footer-links">
228
- <li><a href="https://github.com/swadhinbiswas/linuxy">GitHub</a></li>
229
- <li><a href="https://github.com/swadhinbiswas/linuxy/issues">Issues</a></li>
230
- <li><a href="https://github.com/swadhinbiswas/linuxy/blob/main/README.md">Docs</a></li>
231
- </ul>
232
- <p>&copy; 2024 Linuxy. Open source under MIT License.</p>
233
- </div>
234
- </footer>
235
-
236
- <script>
237
- // FAQ toggle
238
- document.querySelectorAll('.faq-question').forEach(q => {
239
- q.addEventListener('click', () => {
240
- const item = q.parentElement;
241
- item.classList.toggle('active');
242
- });
243
- });
244
-
245
- // Smooth scroll
246
- document.querySelectorAll('a[href^="#"]').forEach(a => {
247
- a.addEventListener('click', e => {
248
- e.preventDefault();
249
- document.querySelector(a.getAttribute('href'))?.scrollIntoView({ behavior: 'smooth' });
250
- });
251
- });
252
- </script>
253
-</body>
254
-</html>
255
0