-
Notifications
You must be signed in to change notification settings - Fork 81
Expand file tree
/
Copy pathdata.ts
More file actions
124 lines (110 loc) · 4.56 KB
/
data.ts
File metadata and controls
124 lines (110 loc) · 4.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import webBrowsers from './apps/web-browsers.json';
import communication from './apps/communication.json';
import devLanguages from './apps/dev-languages.json';
import devEditors from './apps/dev-editors.json';
import devTools from './apps/dev-tools.json';
import terminal from './apps/terminal.json';
import cliTools from './apps/cli-tools.json';
import media from './apps/media.json';
import creative from './apps/creative.json';
import gaming from './apps/gaming.json';
import office from './apps/office.json';
import vpnNetwork from './apps/vpn-network.json';
import security from './apps/security.json';
import fileSharing from './apps/file-sharing.json';
import system from './apps/system.json';
export type DistroId = 'ubuntu' | 'debian' | 'arch' | 'fedora' | 'opensuse' | 'nix' | 'flatpak' | 'snap' | 'homebrew';
export type Category =
| 'Web Browsers'
| 'Communication'
| 'Dev: Languages'
| 'Dev: Editors'
| 'Dev: Tools'
| 'Terminal'
| 'CLI Tools'
| 'Media'
| 'Creative'
| 'Gaming'
| 'Office'
| 'VPN & Network'
| 'Security'
| 'File Sharing'
| 'System';
export type IconDef =
| { type: 'iconify'; set: string; name: string; color?: string }
| { type: 'url'; url: string };
export interface Distro {
id: DistroId;
name: string;
iconUrl: string;
color: string;
installPrefix: string;
}
export interface AppData {
id: string;
name: string;
description: string;
category: Category;
icon: IconDef;
targets: Partial<Record<DistroId, string>>;
unavailableReason?: string;
}
export const getIconUrl = (icon: IconDef): string => {
if (icon.type === 'url') return icon.url;
let url = `https://api.iconify.design/${icon.set}/${icon.name}.svg`;
if (icon.color) {
url += `?color=${encodeURIComponent(icon.color)}`;
}
return url;
};
export const distros: Distro[] = [
{ id: 'ubuntu', name: 'Ubuntu', iconUrl: 'https://api.iconify.design/simple-icons/ubuntu.svg?color=%23E95420', color: '#E95420', installPrefix: 'sudo apt install -y' },
{ id: 'debian', name: 'Debian', iconUrl: 'https://api.iconify.design/simple-icons/debian.svg?color=%23A81D33', color: '#A81D33', installPrefix: 'sudo apt install -y' },
{ id: 'arch', name: 'Arch', iconUrl: 'https://api.iconify.design/simple-icons/archlinux.svg?color=%231793D1', color: '#1793D1', installPrefix: 'sudo pacman -S --needed --noconfirm' },
{ id: 'fedora', name: 'Fedora', iconUrl: 'https://api.iconify.design/simple-icons/fedora.svg?color=%2351A2DA', color: '#51A2DA', installPrefix: 'sudo dnf install -y' },
{ id: 'opensuse', name: 'OpenSUSE', iconUrl: 'https://api.iconify.design/simple-icons/opensuse.svg?color=%2373BA25', color: '#73BA25', installPrefix: 'sudo zypper install -y' },
{ id: 'nix', name: 'Nix', iconUrl: 'https://api.iconify.design/simple-icons/nixos.svg?color=%235277C3', color: '#5277C3', installPrefix: 'nix-env -iA nixpkgs.' },
{ id: 'flatpak', name: 'Flatpak', iconUrl: 'https://api.iconify.design/simple-icons/flatpak.svg?color=%234A90D9', color: '#4A90D9', installPrefix: 'flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo && flatpak install flathub -y' },
{ id: 'snap', name: 'Snap', iconUrl: 'https://api.iconify.design/simple-icons/snapcraft.svg?color=%2382BEA0', color: '#82BEA0', installPrefix: 'sudo snap install' },
{ id: 'homebrew', name: 'Homebrew', iconUrl: 'https://api.iconify.design/simple-icons/homebrew.svg?color=%23FBB040', color: '#FBB040', installPrefix: 'brew install' },
];
export const apps: AppData[] = [
...(webBrowsers as AppData[]),
...(communication as AppData[]),
...(devLanguages as AppData[]),
...(devEditors as AppData[]),
...(devTools as AppData[]),
...(terminal as AppData[]),
...(cliTools as AppData[]),
...(media as AppData[]),
...(creative as AppData[]),
...(gaming as AppData[]),
...(office as AppData[]),
...(vpnNetwork as AppData[]),
...(security as AppData[]),
...(fileSharing as AppData[]),
...(system as AppData[])
];
export const categories: Category[] = [
'Web Browsers',
'Communication',
'Media',
'Gaming',
'Office',
'Creative',
'System',
'File Sharing',
'Security',
'VPN & Network',
'Dev: Editors',
'Dev: Languages',
'Dev: Tools',
'Terminal',
'CLI Tools',
];
export const getAppsByCategory = (category: Category): AppData[] => {
return apps.filter(app => app.category === category);
};
export const isAppAvailable = (app: AppData, distro: DistroId): boolean => {
return distro in app.targets;
};