machineconfig 3.92__py3-none-any.whl → 3.94__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/jobs/{python_custom_installers → installer/custom}/gh.py +22 -7
- machineconfig/jobs/{python_custom_installers → installer/custom}/hx.py +13 -4
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/alacritty.py +11 -5
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/brave.py +17 -14
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/bypass_paywall.py +7 -9
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/code.py +13 -13
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/cursor.py +7 -7
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/espanso.py +21 -17
- machineconfig/jobs/installer/custom_dev/goes.py +63 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/lvim.py +10 -14
- machineconfig/jobs/installer/custom_dev/nerdfont.py +87 -0
- machineconfig/{setup_windows/wt_and_pwsh/install_nerd_fonts.py → jobs/installer/custom_dev/nerfont_windows_helper.py} +68 -25
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/redis.py +13 -8
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/wezterm.py +13 -7
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/winget.py +1 -3
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh +1 -1
- machineconfig/jobs/installer/packages_custom_dev.json +226 -0
- machineconfig/jobs/installer/packages_custom_essential.json +39 -0
- machineconfig/jobs/installer/packages_github_dev.json +1110 -0
- machineconfig/jobs/installer/packages_github_essential.json +804 -0
- machineconfig/jobs/linux/msc/cli_agents.sh +5 -0
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +1 -1
- machineconfig/scripts/python/devops_devapps_install.py +31 -20
- machineconfig/utils/installer.py +17 -80
- machineconfig/utils/installer_utils/github_release_bulk.py +198 -0
- machineconfig/utils/installer_utils/installer_class.py +223 -210
- machineconfig/utils/schemas/installer/installer_types.py +29 -6
- {machineconfig-3.92.dist-info → machineconfig-3.94.dist-info}/METADATA +1 -1
- {machineconfig-3.92.dist-info → machineconfig-3.94.dist-info}/RECORD +45 -67
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -63
- machineconfig/jobs/python_custom_installers/dev/aider.py +0 -37
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -78
- machineconfig/jobs/python_custom_installers/dev/goes.py +0 -55
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -68
- machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -31
- machineconfig/jobs/python_custom_installers/docker.py +0 -74
- machineconfig/jobs/python_custom_installers/warp-cli.py +0 -71
- machineconfig/jobs/python_generic_installers/config.json +0 -603
- machineconfig/jobs/python_generic_installers/config.json.bak +0 -414
- machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -18
- machineconfig/jobs/python_generic_installers/dev/config.json +0 -825
- machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -565
- machineconfig/jobs/python_linux_installers/__init__.py +0 -0
- machineconfig/jobs/python_linux_installers/archive/config.json +0 -18
- machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -10
- machineconfig/jobs/python_linux_installers/config.json +0 -145
- machineconfig/jobs/python_linux_installers/config.json.bak +0 -110
- machineconfig/jobs/python_linux_installers/dev/__init__.py +0 -0
- machineconfig/jobs/python_linux_installers/dev/config.json +0 -276
- machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -206
- machineconfig/jobs/python_windows_installers/__init__.py +0 -0
- machineconfig/jobs/python_windows_installers/archive/__init__.py +0 -0
- machineconfig/jobs/python_windows_installers/archive/file.json +0 -11
- machineconfig/jobs/python_windows_installers/config.json +0 -82
- machineconfig/jobs/python_windows_installers/config.json.bak +0 -56
- machineconfig/jobs/python_windows_installers/dev/__init__.py +0 -0
- machineconfig/jobs/python_windows_installers/dev/config.json +0 -4
- machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -3
- /machineconfig/jobs/{python_custom_installers → installer}/__init__.py +0 -0
- /machineconfig/jobs/{python_generic_installers → installer/custom_dev}/__init__.py +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/brave.sh +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker_start.sh +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/edge.sh +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/nerdfont.sh +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/pgsql.sh +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/redis.sh +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/timescaledb.sh +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/vscode.sh +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/warp-cli.sh +0 -0
- /machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/wezterm.sh +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → jobs/installer/powershell_scripts}/install_fonts.ps1 +0 -0
- {machineconfig-3.92.dist-info → machineconfig-3.94.dist-info}/WHEEL +0 -0
- {machineconfig-3.92.dist-info → machineconfig-3.94.dist-info}/entry_points.txt +0 -0
- {machineconfig-3.92.dist-info → machineconfig-3.94.dist-info}/top_level.txt +0 -0
|
@@ -1,41 +1,65 @@
|
|
|
1
1
|
"""
|
|
2
|
-
|
|
3
|
-
https://glitchbone.github.io/vscode-base16-term/#/3024
|
|
2
|
+
Windows-specific Nerd Fonts installation helper module.
|
|
4
3
|
|
|
4
|
+
This module provides Windows-specific functionality for installing Nerd Fonts
|
|
5
|
+
using PowerShell scripts and font enumeration.
|
|
5
6
|
"""
|
|
6
7
|
|
|
7
|
-
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
8
|
-
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
9
|
-
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
10
8
|
import subprocess
|
|
11
9
|
from typing import Iterable
|
|
10
|
+
|
|
11
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
12
|
+
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
13
|
+
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
12
14
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
13
15
|
|
|
14
16
|
|
|
17
|
+
# Nerd Fonts installer configuration data
|
|
15
18
|
nerd_fonts: InstallerData = {
|
|
16
19
|
"appName": "Cascadia Code Nerd Font",
|
|
17
20
|
"repoURL": "https://github.com/ryanoasis/nerd-fonts",
|
|
18
21
|
"doc": "Nerd Fonts is a project that patches developer targeted fonts with a high number of glyphs (icons)",
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
"fileNamePattern": {
|
|
23
|
+
"amd64": {
|
|
24
|
+
"windows": "CaskaydiaCoveNerdFontWindows.zip",
|
|
25
|
+
"linux": "CaskaydiaCoveNerdFontLinux.zip",
|
|
26
|
+
"macos": "CaskaydiaCoveNerdFontMac.zip",
|
|
27
|
+
},
|
|
28
|
+
"arm64": {
|
|
29
|
+
"windows": "CaskaydiaCoveNerdFontWindows.zip",
|
|
30
|
+
"linux": "CaskaydiaCoveNerdFontLinux.zip",
|
|
31
|
+
"macos": "CaskaydiaCoveNerdFontMac.zip",
|
|
32
|
+
}
|
|
33
|
+
}
|
|
22
34
|
}
|
|
23
35
|
|
|
24
36
|
|
|
25
37
|
# Patterns to match any installed variant (NF, Nerd Font, Mono, Propo, style weights) of Cascadia/Caskaydia
|
|
26
38
|
# We'll compile them at runtime for flexibility. Keep them simple to avoid false positives.
|
|
27
|
-
REQUIRED_FONT_PATTERNS: tuple[str, ...] = (
|
|
39
|
+
REQUIRED_FONT_PATTERNS: tuple[str, ...] = (
|
|
40
|
+
r"caskaydiacove.*(nf|nerd ?font)",
|
|
41
|
+
r"cascadiacode.*(nf|nerd ?font)"
|
|
42
|
+
)
|
|
28
43
|
|
|
29
44
|
|
|
30
45
|
def _list_installed_fonts() -> list[str]:
|
|
31
46
|
"""Return list of installed font file base names (without extension) on Windows.
|
|
32
47
|
|
|
33
|
-
Uses PowerShell to enumerate
|
|
48
|
+
Uses PowerShell to enumerate C:\\Windows\\Fonts because Python on *nix host can't rely on that path.
|
|
34
49
|
If PowerShell call fails (e.g. running on non-Windows), returns empty list so install proceeds.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
List of installed font base names
|
|
35
53
|
"""
|
|
36
54
|
try:
|
|
37
55
|
# Query only base names to make substring matching simpler; remove underscores like the PS script does.
|
|
38
|
-
cmd = [
|
|
56
|
+
cmd = [
|
|
57
|
+
"powershell.exe",
|
|
58
|
+
"-NoLogo",
|
|
59
|
+
"-NonInteractive",
|
|
60
|
+
"-Command",
|
|
61
|
+
"Get-ChildItem -Path C:/Windows/Fonts -File | Select-Object -ExpandProperty BaseName"
|
|
62
|
+
]
|
|
39
63
|
res = subprocess.run(cmd, capture_output=True, text=True, check=True) # noqa: S603 S607 (trusted command)
|
|
40
64
|
fonts = [x.strip().replace("_", "") for x in res.stdout.splitlines() if x.strip() != ""]
|
|
41
65
|
return fonts
|
|
@@ -45,6 +69,14 @@ def _list_installed_fonts() -> list[str]:
|
|
|
45
69
|
|
|
46
70
|
|
|
47
71
|
def _missing_required_fonts(installed_fonts: Iterable[str]) -> list[str]:
|
|
72
|
+
"""Check which required font patterns are missing from installed fonts.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
installed_fonts: List of installed font names
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
List of missing font patterns
|
|
79
|
+
"""
|
|
48
80
|
import re
|
|
49
81
|
|
|
50
82
|
installed_norm = [f.lower().replace(" ", "") for f in installed_fonts]
|
|
@@ -57,14 +89,29 @@ def _missing_required_fonts(installed_fonts: Iterable[str]) -> list[str]:
|
|
|
57
89
|
|
|
58
90
|
|
|
59
91
|
def install_nerd_fonts() -> None:
|
|
92
|
+
"""Install Nerd Fonts on Windows using PowerShell script.
|
|
93
|
+
|
|
94
|
+
This function:
|
|
95
|
+
1. Checks if required fonts are already installed
|
|
96
|
+
2. Downloads the font package if needed
|
|
97
|
+
3. Installs fonts using PowerShell script
|
|
98
|
+
4. Cleans up temporary files
|
|
99
|
+
|
|
100
|
+
Raises:
|
|
101
|
+
subprocess.CalledProcessError: If PowerShell installation fails
|
|
102
|
+
"""
|
|
60
103
|
print(f"\n{'=' * 80}\n📦 INSTALLING NERD FONTS 📦\n{'=' * 80}")
|
|
104
|
+
|
|
61
105
|
installed = _list_installed_fonts()
|
|
62
106
|
missing = _missing_required_fonts(installed)
|
|
107
|
+
|
|
63
108
|
if len(missing) == 0:
|
|
64
109
|
print("✅ Required Nerd Fonts already installed. Skipping download & install.")
|
|
65
110
|
return
|
|
111
|
+
|
|
66
112
|
print(f"🔍 Missing fonts detected: {', '.join(missing)}. Proceeding with installation...")
|
|
67
113
|
print("🔍 Downloading Nerd Fonts package...")
|
|
114
|
+
|
|
68
115
|
folder, _version_to_be_installed = Installer(installer_data=nerd_fonts).download(version=None)
|
|
69
116
|
|
|
70
117
|
print("🧹 Cleaning up unnecessary files...")
|
|
@@ -75,26 +122,22 @@ def install_nerd_fonts() -> None:
|
|
|
75
122
|
print("⚙️ Installing fonts via PowerShell...")
|
|
76
123
|
file = PathExtended.tmpfile(suffix=".ps1")
|
|
77
124
|
file.parent.mkdir(parents=True, exist_ok=True)
|
|
125
|
+
|
|
78
126
|
raw_content = LIBRARY_ROOT.joinpath("setup_windows/wt_and_pwsh/install_fonts.ps1").read_text(encoding="utf-8").replace(r".\fonts-to-be-installed", str(folder))
|
|
79
127
|
# PowerShell 5.1 can choke on certain unicode chars in some locales; keep ASCII only.
|
|
80
128
|
content = "".join(ch for ch in raw_content if ord(ch) < 128)
|
|
81
129
|
file.write_text(content, encoding="utf-8")
|
|
130
|
+
|
|
82
131
|
try:
|
|
83
132
|
subprocess.run(rf"powershell.exe -executionpolicy Bypass -nologo -noninteractive -File {str(file)}", check=True)
|
|
84
133
|
except subprocess.CalledProcessError as cpe:
|
|
85
|
-
print(f"💥 Font installation script failed
|
|
86
|
-
|
|
134
|
+
print(f"💥 Font installation script failed: {cpe}")
|
|
135
|
+
raise
|
|
136
|
+
finally:
|
|
137
|
+
print("🗑️ Cleaning up temporary files...")
|
|
138
|
+
if folder.exists():
|
|
139
|
+
folder.delete(sure=True)
|
|
140
|
+
if file.exists():
|
|
141
|
+
file.delete(sure=True)
|
|
87
142
|
|
|
88
|
-
print("🗑️ Cleaning up temporary files...")
|
|
89
|
-
folder.delete(sure=True)
|
|
90
143
|
print(f"\n✅ Nerd Fonts installation complete! ✅\n{'=' * 80}")
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def main():
|
|
94
|
-
print(f"\n{'=' * 80}\n🎨 POWERSHELL THEME SETUP 🎨\n{'=' * 80}")
|
|
95
|
-
install_nerd_fonts()
|
|
96
|
-
print(f"\n✅ All PowerShell theme components installed successfully! ✅\n{'=' * 80}")
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if __name__ == "__main__":
|
|
100
|
-
pass
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
"""nedis installer"""
|
|
2
2
|
|
|
3
3
|
import platform
|
|
4
|
+
import subprocess
|
|
4
5
|
from typing import Optional
|
|
5
6
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
6
7
|
|
|
7
|
-
config_dict: InstallerData = {"appName": "Redis", "repoURL": "
|
|
8
|
+
# config_dict: InstallerData = {"appName": "Redis", "repoURL": "CMD", "doc": "submillisecond fast key-value db"}
|
|
8
9
|
|
|
9
10
|
|
|
10
|
-
def main(version: Optional[str]):
|
|
11
|
+
def main(installer_data: InstallerData, version: Optional[str]):
|
|
12
|
+
_ = installer_data
|
|
11
13
|
print(f"""
|
|
12
14
|
{"=" * 150}
|
|
13
15
|
🗃️ REDIS INSTALLER | Setting up in-memory database
|
|
@@ -29,11 +31,10 @@ def main(version: Optional[str]):
|
|
|
29
31
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
30
32
|
system_name = "Linux" if platform.system() == "Linux" else "macOS"
|
|
31
33
|
print(f"🐧 Installing Redis on {system_name} using installation script...")
|
|
32
|
-
import machineconfig.jobs.
|
|
34
|
+
import machineconfig.jobs.installer as module
|
|
33
35
|
from pathlib import Path
|
|
34
|
-
|
|
35
36
|
if platform.system() == "Linux":
|
|
36
|
-
program = Path(module.__file__).parent.joinpath("
|
|
37
|
+
program = Path(module.__file__).parent.joinpath("linux_scripts/redis.sh").read_text(encoding="utf-8")
|
|
37
38
|
else: # Darwin/macOS
|
|
38
39
|
program = "brew install redis"
|
|
39
40
|
else:
|
|
@@ -56,9 +57,13 @@ def main(version: Optional[str]):
|
|
|
56
57
|
{"=" * 150}
|
|
57
58
|
""")
|
|
58
59
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
print("🔄 EXECUTING | Running Redis installation...")
|
|
61
|
+
try:
|
|
62
|
+
subprocess.run(program, shell=True, text=True, check=True)
|
|
63
|
+
print("✅ Redis installation completed successfully")
|
|
64
|
+
except subprocess.CalledProcessError as e:
|
|
65
|
+
print(f"❌ Installation failed with exit code {e.returncode}")
|
|
66
|
+
raise
|
|
62
67
|
|
|
63
68
|
|
|
64
69
|
if __name__ == "__main__":
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
"""wezterm installer"""
|
|
2
2
|
|
|
3
3
|
import platform
|
|
4
|
+
import subprocess
|
|
4
5
|
from typing import Optional
|
|
5
6
|
|
|
6
7
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
7
8
|
|
|
8
9
|
|
|
9
|
-
config_dict: InstallerData = {"appName": "Wezterm", "repoURL": "
|
|
10
|
+
# config_dict: InstallerData = {"appName": "Wezterm", "repoURL": "CMD", "doc": "Modern, GPU-accelerated terminal emulator"}
|
|
10
11
|
|
|
11
12
|
|
|
12
|
-
def main(version: Optional[str]):
|
|
13
|
+
def main(installer_data: InstallerData, version: Optional[str]):
|
|
14
|
+
_ = installer_data
|
|
13
15
|
print(f"""
|
|
14
16
|
{"═" * 150}
|
|
15
17
|
🖥️ WEZTERM INSTALLER | Modern, GPU-accelerated terminal emulator
|
|
@@ -33,11 +35,11 @@ def main(version: Optional[str]):
|
|
|
33
35
|
print(f"""
|
|
34
36
|
🐧 {system_name} SETUP | Installing WezTerm terminal emulator...
|
|
35
37
|
""")
|
|
36
|
-
import machineconfig.jobs.
|
|
38
|
+
import machineconfig.jobs.installer as module
|
|
37
39
|
from pathlib import Path
|
|
38
40
|
|
|
39
41
|
if platform.system() == "Linux":
|
|
40
|
-
program = Path(module.__file__).parent.joinpath("
|
|
42
|
+
program = Path(module.__file__).parent.joinpath("linux_scripts/wezterm.sh").read_text(encoding="utf-8")
|
|
41
43
|
else: # Darwin/macOS
|
|
42
44
|
program = "brew install --cask wezterm"
|
|
43
45
|
else:
|
|
@@ -61,9 +63,13 @@ def main(version: Optional[str]):
|
|
|
61
63
|
{"═" * 150}
|
|
62
64
|
""")
|
|
63
65
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
print("🔄 EXECUTING | Running WezTerm installation...")
|
|
67
|
+
try:
|
|
68
|
+
subprocess.run(program, shell=True, text=True, check=True)
|
|
69
|
+
print("✅ WezTerm installation completed successfully")
|
|
70
|
+
except subprocess.CalledProcessError as e:
|
|
71
|
+
print(f"❌ Installation failed with exit code {e.returncode}")
|
|
72
|
+
raise
|
|
67
73
|
|
|
68
74
|
|
|
69
75
|
if __name__ == "__main__":
|
|
@@ -3,10 +3,9 @@ import requests
|
|
|
3
3
|
import tempfile
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import Optional
|
|
6
|
-
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
config_dict: InstallerData = {"appName": "winget", "repoURL": "
|
|
8
|
+
# config_dict: InstallerData = {"appName": "winget", "repoURL": "CMD", "doc": "winget installer"}
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
def is_winget_available() -> bool:
|
|
@@ -93,7 +92,6 @@ def install_msix_package(package_path: Path) -> bool:
|
|
|
93
92
|
|
|
94
93
|
result = subprocess.run(
|
|
95
94
|
powershell_cmd,
|
|
96
|
-
capture_output=True,
|
|
97
95
|
text=True,
|
|
98
96
|
timeout=300, # 5 minutes timeout
|
|
99
97
|
)
|
machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh
RENAMED
|
@@ -105,7 +105,7 @@ docker run hello-world || echo "⚠️ Docker hello-world test failed (you may n
|
|
|
105
105
|
|
|
106
106
|
echo "👥 Adding current user to docker group..."
|
|
107
107
|
sudo groupadd docker 2>/dev/null || echo "ℹ️ Docker group already exists"
|
|
108
|
-
sudo usermod -aG docker $
|
|
108
|
+
sudo usermod -aG docker $(whoami) || echo "⚠️ Failed to add user to docker group"
|
|
109
109
|
|
|
110
110
|
echo """#=======================================================================
|
|
111
111
|
✅ INSTALLATION COMPLETE | Docker has been installed successfully
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1",
|
|
3
|
+
"installers": [
|
|
4
|
+
{
|
|
5
|
+
"appName": "Visual Studio Code",
|
|
6
|
+
"repoURL": "CMD",
|
|
7
|
+
"doc": "Visual Studio Code",
|
|
8
|
+
"fileNamePattern": {
|
|
9
|
+
"amd64": {
|
|
10
|
+
"linux": "code.py",
|
|
11
|
+
"windows": "code.py",
|
|
12
|
+
"macos": "code.py"
|
|
13
|
+
},
|
|
14
|
+
"arm64": {
|
|
15
|
+
"linux": "code.py",
|
|
16
|
+
"windows": "code.py",
|
|
17
|
+
"macos": "code.py"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"appName": "aider-chat",
|
|
23
|
+
"repoURL": "CMD",
|
|
24
|
+
"doc": "Aider Chat",
|
|
25
|
+
"fileNamePattern": {
|
|
26
|
+
"amd64": {
|
|
27
|
+
"linux": "uv tool install --force --python python3.13 aider-chat@latest",
|
|
28
|
+
"windows": "uv tool install --force --python python3.13 aider-chat@latest",
|
|
29
|
+
"macos": "uv tool install --force --python python3.13 aider-chat@latest"
|
|
30
|
+
},
|
|
31
|
+
"arm64": {
|
|
32
|
+
"linux": "uv tool install --force --python python3.13 aider-chat@latest",
|
|
33
|
+
"windows": "uv tool install --force --python python3.13 aider-chat@latest",
|
|
34
|
+
"macos": "uv tool install --force --python python3.13 aider-chat@latest"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"appName": "Alacritty",
|
|
40
|
+
"repoURL": "CMD",
|
|
41
|
+
"doc": "Terminal Console",
|
|
42
|
+
"fileNamePattern": {
|
|
43
|
+
"amd64": {
|
|
44
|
+
"linux": "alacritty.py",
|
|
45
|
+
"windows": "alacritty.py",
|
|
46
|
+
"macos": "alacritty.py"
|
|
47
|
+
},
|
|
48
|
+
"arm64": {
|
|
49
|
+
"linux": "alacritty.py",
|
|
50
|
+
"windows": "alacritty.py",
|
|
51
|
+
"macos": "alacritty.py"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"appName": "Brave",
|
|
57
|
+
"repoURL": "CMD",
|
|
58
|
+
"doc": "Privacy-focused web browser with built-in ad blocking",
|
|
59
|
+
"fileNamePattern": {
|
|
60
|
+
"amd64": {
|
|
61
|
+
"linux": "brave.py",
|
|
62
|
+
"windows": "brave.py",
|
|
63
|
+
"macos": "brave.py"
|
|
64
|
+
},
|
|
65
|
+
"arm64": {
|
|
66
|
+
"linux": "brave.py",
|
|
67
|
+
"windows": "brave.py",
|
|
68
|
+
"macos": "brave.py"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"appName": "bypass-paywalls-chrome",
|
|
74
|
+
"repoURL": "https://github.com/iamadamdev/bypass-paywalls-chrome",
|
|
75
|
+
"doc": "Plugin for chrome to bypass paywalls",
|
|
76
|
+
"fileNamePattern": {
|
|
77
|
+
"amd64": {
|
|
78
|
+
"linux": "bypass_paywall.py",
|
|
79
|
+
"windows": "bypass_paywall.py",
|
|
80
|
+
"macos": "bypass_paywall.py"
|
|
81
|
+
},
|
|
82
|
+
"arm64": {
|
|
83
|
+
"linux": "bypass_paywall.py",
|
|
84
|
+
"windows": "bypass_paywall.py",
|
|
85
|
+
"macos": "bypass_paywall.py"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"appName": "Cursor",
|
|
91
|
+
"repoURL": "CMD",
|
|
92
|
+
"doc": "Cursor",
|
|
93
|
+
"fileNamePattern": {
|
|
94
|
+
"amd64": {
|
|
95
|
+
"linux": "cursor.py",
|
|
96
|
+
"windows": "cursor.py",
|
|
97
|
+
"macos": "cursor.py"
|
|
98
|
+
},
|
|
99
|
+
"arm64": {
|
|
100
|
+
"linux": "cursor.py",
|
|
101
|
+
"windows": "cursor.py",
|
|
102
|
+
"macos": "cursor.py"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"appName": "espanso",
|
|
108
|
+
"repoURL": "CMD",
|
|
109
|
+
"doc": "A text expander.",
|
|
110
|
+
"fileNamePattern": {
|
|
111
|
+
"amd64": {
|
|
112
|
+
"linux": "espanso.py",
|
|
113
|
+
"windows": "espanso.py",
|
|
114
|
+
"macos": "espanso.py"
|
|
115
|
+
},
|
|
116
|
+
"arm64": {
|
|
117
|
+
"linux": "espanso.py",
|
|
118
|
+
"windows": "espanso.py",
|
|
119
|
+
"macos": "espanso.py"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"appName": "Gorilla",
|
|
125
|
+
"repoURL": "https://github.com/ShishirPatil/gorilla",
|
|
126
|
+
"doc": "natural language to API",
|
|
127
|
+
"fileNamePattern": {
|
|
128
|
+
"amd64": {
|
|
129
|
+
"linux": "goes.py",
|
|
130
|
+
"windows": "goes.py",
|
|
131
|
+
"macos": "goes.py"
|
|
132
|
+
},
|
|
133
|
+
"arm64": {
|
|
134
|
+
"linux": "goes.py",
|
|
135
|
+
"windows": "goes.py",
|
|
136
|
+
"macos": "goes.py"
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"appName": "lvim",
|
|
142
|
+
"repoURL": "CMD",
|
|
143
|
+
"doc": "Terminal text editor based on neovim.",
|
|
144
|
+
"fileNamePattern": {
|
|
145
|
+
"amd64": {
|
|
146
|
+
"linux": "lvim.py",
|
|
147
|
+
"windows": "lvim.py",
|
|
148
|
+
"macos": "lvim.py"
|
|
149
|
+
},
|
|
150
|
+
"arm64": {
|
|
151
|
+
"linux": "lvim.py",
|
|
152
|
+
"windows": "lvim.py",
|
|
153
|
+
"macos": "lvim.py"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"appName": "nerdfont",
|
|
159
|
+
"repoURL": "CMD",
|
|
160
|
+
"doc": "lightweight containerization",
|
|
161
|
+
"fileNamePattern": {
|
|
162
|
+
"amd64": {
|
|
163
|
+
"linux": "nerdfont.py",
|
|
164
|
+
"windows": "nerdfont.py",
|
|
165
|
+
"macos": "nerdfont.py"
|
|
166
|
+
},
|
|
167
|
+
"arm64": {
|
|
168
|
+
"linux": "nerdfont.py",
|
|
169
|
+
"windows": "nerdfont.py",
|
|
170
|
+
"macos": "nerdfont.py"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"appName": "Redis",
|
|
176
|
+
"repoURL": "CMD",
|
|
177
|
+
"doc": "submillisecond fast key-value db",
|
|
178
|
+
"fileNamePattern": {
|
|
179
|
+
"amd64": {
|
|
180
|
+
"linux": "redis.py",
|
|
181
|
+
"windows": "redis.py",
|
|
182
|
+
"macos": "redis.py"
|
|
183
|
+
},
|
|
184
|
+
"arm64": {
|
|
185
|
+
"linux": "redis.py",
|
|
186
|
+
"windows": "redis.py",
|
|
187
|
+
"macos": "redis.py"
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"appName": "Wezterm",
|
|
193
|
+
"repoURL": "CMD",
|
|
194
|
+
"doc": "Modern, GPU-accelerated terminal emulator",
|
|
195
|
+
"fileNamePattern": {
|
|
196
|
+
"amd64": {
|
|
197
|
+
"linux": "wezterm.py",
|
|
198
|
+
"windows": "wezterm.py",
|
|
199
|
+
"macos": "wezterm.py"
|
|
200
|
+
},
|
|
201
|
+
"arm64": {
|
|
202
|
+
"linux": "wezterm.py",
|
|
203
|
+
"windows": "wezterm.py",
|
|
204
|
+
"macos": "wezterm.py"
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"appName": "winget",
|
|
210
|
+
"repoURL": "CMD",
|
|
211
|
+
"doc": "winget installer",
|
|
212
|
+
"fileNamePattern": {
|
|
213
|
+
"amd64": {
|
|
214
|
+
"linux": "winget.py",
|
|
215
|
+
"windows": "winget.py",
|
|
216
|
+
"macos": "winget.py"
|
|
217
|
+
},
|
|
218
|
+
"arm64": {
|
|
219
|
+
"linux": "winget.py",
|
|
220
|
+
"windows": "winget.py",
|
|
221
|
+
"macos": "winget.py"
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
]
|
|
226
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1",
|
|
3
|
+
"installers": [
|
|
4
|
+
{
|
|
5
|
+
"appName": "gh",
|
|
6
|
+
"repoURL": "CMD",
|
|
7
|
+
"doc": "GitHub CLI",
|
|
8
|
+
"fileNamePattern": {
|
|
9
|
+
"amd64": {
|
|
10
|
+
"windows": "gh.py",
|
|
11
|
+
"linux": "gh.py",
|
|
12
|
+
"macos": "gh.py"
|
|
13
|
+
},
|
|
14
|
+
"arm64": {
|
|
15
|
+
"windows": "gh.py",
|
|
16
|
+
"linux": "gh.py",
|
|
17
|
+
"macos": "gh.py"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"appName": "hx",
|
|
23
|
+
"repoURL": "CMD",
|
|
24
|
+
"doc": "Helix is a post-modern modal text editor.",
|
|
25
|
+
"fileNamePattern": {
|
|
26
|
+
"amd64": {
|
|
27
|
+
"linux": "hx.py",
|
|
28
|
+
"windows": "hx.py",
|
|
29
|
+
"macos": "hx.py"
|
|
30
|
+
},
|
|
31
|
+
"arm64": {
|
|
32
|
+
"linux": "hx.py",
|
|
33
|
+
"windows": "hx.py",
|
|
34
|
+
"macos": "hx.py"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|