machineconfig 5.71__py3-none-any.whl → 5.73__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/installer/installer_data.json +6 -6
- machineconfig/jobs/installer/package_groups.py +7 -8
- machineconfig/scripts/python/agents.py +3 -0
- machineconfig/scripts/python/ai/initai.py +19 -16
- machineconfig/scripts/python/ai/vscode_tasks.py +32 -0
- machineconfig/scripts/python/cloud.py +11 -4
- machineconfig/scripts/python/cloud_helpers/cloud_mount.py +10 -18
- machineconfig/scripts/python/croshell.py +5 -6
- machineconfig/scripts/python/devops.py +1 -1
- machineconfig/scripts/python/devops_helpers/cli_config.py +2 -2
- machineconfig/scripts/python/devops_helpers/cli_repos.py +1 -1
- machineconfig/scripts/python/devops_helpers/cli_self.py +8 -8
- machineconfig/scripts/python/entry.py +24 -8
- machineconfig/scripts/python/helper_navigator/command_tree.py +29 -16
- machineconfig/scripts/python/interactive.py +2 -2
- machineconfig/scripts/python/nw/mount_nfs +1 -1
- machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +1 -1
- machineconfig/scripts/python/sessions.py +1 -1
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
- machineconfig/setup_linux/web_shortcuts/interactive.sh +7 -7
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +7 -7
- machineconfig/utils/installer_utils/installer_class.py +8 -45
- machineconfig/utils/path_extended.py +2 -4
- machineconfig/utils/ssh.py +1 -1
- {machineconfig-5.71.dist-info → machineconfig-5.73.dist-info}/METADATA +1 -1
- {machineconfig-5.71.dist-info → machineconfig-5.73.dist-info}/RECORD +29 -28
- {machineconfig-5.71.dist-info → machineconfig-5.73.dist-info}/WHEEL +0 -0
- {machineconfig-5.71.dist-info → machineconfig-5.73.dist-info}/entry_points.txt +0 -0
- {machineconfig-5.71.dist-info → machineconfig-5.73.dist-info}/top_level.txt +0 -0
|
@@ -1809,14 +1809,14 @@
|
|
|
1809
1809
|
"doc": "🐋 A simple terminal UI for both docker and docker-compose",
|
|
1810
1810
|
"fileNamePattern": {
|
|
1811
1811
|
"amd64": {
|
|
1812
|
-
"linux":
|
|
1813
|
-
"macos":
|
|
1814
|
-
"windows":
|
|
1812
|
+
"linux": "lazydocker_{version}_Linux_x86_64.tar.gz",
|
|
1813
|
+
"macos": "lazydocker_{version}_Darwin_x86_64.tar.gz",
|
|
1814
|
+
"windows": "lazydocker_{version}_Windows_x86_64.zip"
|
|
1815
1815
|
},
|
|
1816
1816
|
"arm64": {
|
|
1817
|
-
"linux":
|
|
1818
|
-
"macos":
|
|
1819
|
-
"windows":
|
|
1817
|
+
"linux": "lazydocker_{version}_Linux_arm64.tar.gz",
|
|
1818
|
+
"macos": "lazydocker_{version}_Darwin_arm64.tar.gz",
|
|
1819
|
+
"windows": "lazydocker_{version}_Windows_arm64.zip"
|
|
1820
1820
|
}
|
|
1821
1821
|
}
|
|
1822
1822
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Literal, TypeAlias, Union
|
|
2
2
|
|
|
3
3
|
# AI/LLM Tools - AI-powered coding and chat assistants
|
|
4
|
-
|
|
4
|
+
BUNDLE_AI = [
|
|
5
5
|
"aider",
|
|
6
6
|
"github-copilot-cli",
|
|
7
7
|
"gemini",
|
|
@@ -244,15 +244,14 @@ PACKAGE_GROUPS: TypeAlias = Literal[
|
|
|
244
244
|
|
|
245
245
|
|
|
246
246
|
# Main ESSENTIAL package list - combines all subgroups
|
|
247
|
-
|
|
247
|
+
ESSENTIAL = [
|
|
248
248
|
*PACKAGES_CODE_ANALYSIS,
|
|
249
249
|
*PACKAGES_SYSTEM_MONITORS,
|
|
250
250
|
*PACKAGES_TERMINAL_SHELL,
|
|
251
251
|
*PACKAGES_FILE,
|
|
252
|
-
*
|
|
252
|
+
*BUNDLE_AI,
|
|
253
253
|
]
|
|
254
|
-
|
|
255
|
-
*PACKAGES_AI_TOOLS,
|
|
254
|
+
DEV = [
|
|
256
255
|
*PACKAGES_TERMINAL_EMULATORS,
|
|
257
256
|
*PACKAGES_BROWSERS,
|
|
258
257
|
*PACKAGES_CODE_EDITORS,
|
|
@@ -266,9 +265,9 @@ PACKAGES_NAMES_DEV = [
|
|
|
266
265
|
]
|
|
267
266
|
|
|
268
267
|
PACKAGE_GROUP2NAMES: dict[PACKAGE_GROUPS, list[str]] = {
|
|
269
|
-
"ESSENTIAL":
|
|
270
|
-
"DEV":
|
|
271
|
-
"AI_TOOLS":
|
|
268
|
+
"ESSENTIAL": ESSENTIAL,
|
|
269
|
+
"DEV": DEV,
|
|
270
|
+
"AI_TOOLS": BUNDLE_AI,
|
|
272
271
|
"TERMINAL_EMULATORS": PACKAGES_TERMINAL_EMULATORS,
|
|
273
272
|
"BROWSERS": PACKAGES_BROWSERS,
|
|
274
273
|
"CODE_EDITORS": PACKAGES_CODE_EDITORS,
|
|
@@ -190,7 +190,10 @@ MODEL options: {sep.join(get_args(MODEL))}
|
|
|
190
190
|
|
|
191
191
|
def main():
|
|
192
192
|
agents_app = get_app()
|
|
193
|
+
# from trogon.typer import init_tui
|
|
194
|
+
# agents_app_tui = init_tui(agents_app)
|
|
193
195
|
agents_app()
|
|
196
|
+
# agents_app_tui()
|
|
194
197
|
|
|
195
198
|
|
|
196
199
|
if __name__ == "__main__": # pragma: no cover
|
|
@@ -7,6 +7,7 @@ from machineconfig.scripts.python.ai.solutions.copilot import github_copilot
|
|
|
7
7
|
from machineconfig.scripts.python.ai.solutions.crush import crush
|
|
8
8
|
from machineconfig.scripts.python.ai.solutions.cursor import cursors
|
|
9
9
|
from machineconfig.scripts.python.ai.solutions.gemini import gemini
|
|
10
|
+
from machineconfig.scripts.python.ai.vscode_tasks import add_lint_and_type_check_task
|
|
10
11
|
from machineconfig.utils.accessories import get_repo_root
|
|
11
12
|
|
|
12
13
|
|
|
@@ -15,22 +16,22 @@ def add_ai_configs(repo_root: Path) -> None:
|
|
|
15
16
|
if repo_root_resolved is not None:
|
|
16
17
|
repo_root = repo_root_resolved # this means you can run the command from any subdirectory of the repo.
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
uv init --python 3.13
|
|
23
|
-
uv venv
|
|
24
|
-
uv add --upgrade-package pylint pyright mypy pyrefly ty --dev # linters and type checkers
|
|
25
|
-
uv add --upgrade-package pytest --dev
|
|
26
|
-
uv add typer --dev
|
|
27
|
-
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
19
|
+
# if repo_root.joinpath("pyproject.toml").exists() is False:
|
|
20
|
+
# uv_init = input(f"{repo_root} does not seem to be a python project (no pyproject.toml found), would you like to initialize one? (y/n) ")
|
|
21
|
+
# if uv_init.strip().lower() == "y":
|
|
22
|
+
# command_to_run = """
|
|
23
|
+
# uv init --python 3.13
|
|
24
|
+
# uv venv
|
|
25
|
+
# uv add --upgrade-package pylint pyright mypy pyrefly ty --dev # linters and type checkers
|
|
26
|
+
# uv add --upgrade-package pytest --dev
|
|
27
|
+
# uv add typer --dev
|
|
28
|
+
|
|
29
|
+
# """
|
|
30
|
+
# from machineconfig.utils.code import run_shell_script
|
|
31
|
+
# run_shell_script(command_to_run)
|
|
32
|
+
# else:
|
|
33
|
+
# print("Terminating initai ...")
|
|
34
|
+
# return
|
|
34
35
|
|
|
35
36
|
dot_ai_dir = repo_root.joinpath(".ai")
|
|
36
37
|
dot_ai_dir.mkdir(parents=True, exist_ok=True)
|
|
@@ -39,6 +40,8 @@ uv add typer --dev
|
|
|
39
40
|
generic.create_dot_scripts(repo_root=repo_root)
|
|
40
41
|
generic.adjust_gitignore(repo_root=repo_root)
|
|
41
42
|
|
|
43
|
+
add_lint_and_type_check_task(repo_root=repo_root)
|
|
44
|
+
|
|
42
45
|
github_copilot.build_configuration(repo_root=repo_root)
|
|
43
46
|
cursors.build_configuration(repo_root=repo_root)
|
|
44
47
|
gemini.build_configuration(repo_root=repo_root)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def add_lint_and_type_check_task(repo_root: Path) -> None:
|
|
6
|
+
vscode_dir = repo_root / ".vscode"
|
|
7
|
+
vscode_dir.mkdir(parents=True, exist_ok=True)
|
|
8
|
+
tasks_json_path = vscode_dir / "tasks.json"
|
|
9
|
+
|
|
10
|
+
task_to_add = {
|
|
11
|
+
"label": "lint_and_type_check",
|
|
12
|
+
"type": "shell",
|
|
13
|
+
"linux": {"command": "bash", "args": ["./.ai/scripts/lint_and_type_check.sh"]},
|
|
14
|
+
"osx": {"command": "bash", "args": ["./.ai/scripts/lint_and_type_check.sh"]},
|
|
15
|
+
"windows": {"command": "pwsh", "args": ["-File", "./.ai/scripts/lint_and_type_check.ps1"]},
|
|
16
|
+
"presentation": {"reveal": "always", "panel": "new"},
|
|
17
|
+
"problemMatcher": [],
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if tasks_json_path.exists():
|
|
21
|
+
with tasks_json_path.open("r") as f:
|
|
22
|
+
tasks_config = json.load(f)
|
|
23
|
+
if "tasks" not in tasks_config:
|
|
24
|
+
tasks_config["tasks"] = []
|
|
25
|
+
existing_labels = {task.get("label") for task in tasks_config.get("tasks", [])}
|
|
26
|
+
if "lintAndTypeCheck" not in existing_labels:
|
|
27
|
+
tasks_config["tasks"].append(task_to_add)
|
|
28
|
+
else:
|
|
29
|
+
tasks_config = {"version": "2.0.0", "tasks": [task_to_add]}
|
|
30
|
+
|
|
31
|
+
with tasks_json_path.open("w") as f:
|
|
32
|
+
json.dump(tasks_config, f, indent="\t")
|
|
@@ -2,13 +2,20 @@
|
|
|
2
2
|
import typer
|
|
3
3
|
from machineconfig.scripts.python.cloud_helpers.cloud_sync import main as sync_main
|
|
4
4
|
from machineconfig.scripts.python.cloud_helpers.cloud_copy import main as copy_main
|
|
5
|
-
from machineconfig.scripts.python.cloud_helpers.cloud_mount import
|
|
5
|
+
from machineconfig.scripts.python.cloud_helpers.cloud_mount import mount as mount_main
|
|
6
6
|
|
|
7
7
|
def get_app():
|
|
8
8
|
app = typer.Typer(add_completion=False, no_args_is_help=True)
|
|
9
|
-
|
|
10
|
-
app.command(name="
|
|
11
|
-
app.command(name="
|
|
9
|
+
|
|
10
|
+
app.command(name="sync", no_args_is_help=True, help="""🔄 [s] Synchronize files/folders between local and cloud storage.""")(sync_main)
|
|
11
|
+
app.command(name="s", no_args_is_help=True, hidden=True)(sync_main) # short alias
|
|
12
|
+
|
|
13
|
+
app.command(name="copy", no_args_is_help=True, short_help="""📤 [c] Upload or 📥 Download files/folders to/from cloud storage services like Google Drive, Dropbox, OneDrive, etc.""")(copy_main)
|
|
14
|
+
app.command(name="c", no_args_is_help=True, hidden=True)(copy_main) # short alias
|
|
15
|
+
|
|
16
|
+
app.command(name="mount", no_args_is_help=True, short_help="""🔗 [m] Mount cloud storage services like Google Drive, Dropbox, OneDrive, etc. as local drives.""")(mount_main)
|
|
17
|
+
app.command(name="m", no_args_is_help=True, hidden=True)(mount_main) # short alias
|
|
18
|
+
|
|
12
19
|
return app
|
|
13
20
|
|
|
14
21
|
|
|
@@ -52,7 +52,12 @@ mprocs "echo 'see {DEFAULT_MOUNT}/{cloud} for the mounted cloud'; rclone about {
|
|
|
52
52
|
return txt
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
def mount(
|
|
55
|
+
def mount(
|
|
56
|
+
cloud: Annotated[Optional[str], typer.Option(help="cloud to mount")] = None,
|
|
57
|
+
destination: Annotated[Optional[str], typer.Option(help="destination to mount")] = None,
|
|
58
|
+
network: Annotated[Optional[str], typer.Option(help="mount network drive")] = None,
|
|
59
|
+
) -> None:
|
|
60
|
+
|
|
56
61
|
# draw header box dynamically
|
|
57
62
|
title = "☁️ Cloud Mount Utility"
|
|
58
63
|
console.print(Panel(title, title_align="left", border_style="blue"))
|
|
@@ -153,21 +158,8 @@ zellij action move-focus up
|
|
|
153
158
|
console.print(Panel(f"{title1}\n{title2}", title="Success", border_style="green"))
|
|
154
159
|
|
|
155
160
|
|
|
156
|
-
def main(
|
|
157
|
-
cloud: Annotated[Optional[str], typer.Option(help="cloud to mount")] = None,
|
|
158
|
-
destination: Annotated[Optional[str], typer.Option(help="destination to mount")] = None,
|
|
159
|
-
network: Annotated[Optional[str], typer.Option(help="mount network drive")] = None,
|
|
160
|
-
) -> None:
|
|
161
|
-
# draw main title box dynamically
|
|
162
|
-
main_title = "☁️ RCLONE CLOUD MOUNT"
|
|
163
|
-
console.print(Panel(main_title, title_align="left", border_style="blue"))
|
|
164
|
-
|
|
165
|
-
mount(cloud=cloud, network=network, destination=destination)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
def arg_parser() -> None:
|
|
169
|
-
typer.run(main)
|
|
170
|
-
|
|
171
161
|
|
|
172
|
-
|
|
173
|
-
|
|
162
|
+
def get_app():
|
|
163
|
+
app = typer.Typer(name="cloud-mount", help="Cloud mount utility")
|
|
164
|
+
app.command(name="mount", no_args_is_help=True)(mount)
|
|
165
|
+
return app
|
|
@@ -63,10 +63,9 @@ except Exception as e:
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
def croshell(
|
|
66
|
+
path: Annotated[Optional[str], typer.Argument(help="read a file.")] = "",
|
|
66
67
|
python: Annotated[bool, typer.Option("--python", "-p", help="flag to use python over IPython.")] = False,
|
|
67
|
-
fzf: Annotated[bool, typer.Option("--fzf", "-F", help="search with fuzzy finder for python scripts and run them")] = False,
|
|
68
68
|
profile: Annotated[Optional[str], typer.Option("--profile", "-P", help="ipython profile to use, defaults to default profile.")] = None,
|
|
69
|
-
read: Annotated[str, typer.Option("--read", "-r", help="read a binary file.")] = "",
|
|
70
69
|
jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="run in jupyter interactive console")] = False,
|
|
71
70
|
streamlit_viewer: Annotated[bool, typer.Option("--stViewer", "-s", help="view in streamlit app")] = False,
|
|
72
71
|
visidata: Annotated[bool, typer.Option("--visidata", "-V", help="open data file in visidata")] = False,
|
|
@@ -79,7 +78,7 @@ def croshell(
|
|
|
79
78
|
ipython_profile: Optional[str] = profile
|
|
80
79
|
file_obj = PathExtended.cwd() # initialization value, could be modified according to args.
|
|
81
80
|
|
|
82
|
-
if
|
|
81
|
+
if path == ".":
|
|
83
82
|
text = "🔍 Searching for Python files..."
|
|
84
83
|
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
85
84
|
options = [str(item) for item in PathExtended.cwd().search("*.py", r=True)]
|
|
@@ -89,7 +88,7 @@ def croshell(
|
|
|
89
88
|
text = f"📄 Selected file: {PathExtended(file_selected).name}"
|
|
90
89
|
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
91
90
|
|
|
92
|
-
elif
|
|
91
|
+
elif path != "" and path is not None:
|
|
93
92
|
if streamlit_viewer:
|
|
94
93
|
# text = "📊 STARTING STREAMLIT VIEWER"
|
|
95
94
|
# console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
@@ -101,7 +100,7 @@ def croshell(
|
|
|
101
100
|
# """
|
|
102
101
|
# PROGRAM_PATH.write_text(data=final_program, encoding="utf-8")
|
|
103
102
|
return None
|
|
104
|
-
file_obj = PathExtended(str(
|
|
103
|
+
file_obj = PathExtended(str(path).lstrip()).expanduser().absolute()
|
|
105
104
|
program = get_read_data_pycode(str(file_obj))
|
|
106
105
|
text = f"📄 Reading data from: {file_obj.name}"
|
|
107
106
|
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
@@ -150,7 +149,7 @@ from pathlib import Path
|
|
|
150
149
|
else:
|
|
151
150
|
console.print(Panel("❌ Could not determine the local machineconfig repo root. Please ensure the `REPO_ROOT` in `source_of_truth.py` is correctly set to the local path of the machineconfig repo, or do not use the `--local` flag.", title="Error", border_style="red"))
|
|
152
151
|
return
|
|
153
|
-
else: ve_line = """--with "machineconfig[plot]>=5.
|
|
152
|
+
else: ve_line = """--with "machineconfig[plot]>=5.72" """
|
|
154
153
|
fire_line = f"uv run --python 3.14 {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
|
|
155
154
|
|
|
156
155
|
from machineconfig.utils.code import run_shell_script
|
|
@@ -20,7 +20,7 @@ def get_app():
|
|
|
20
20
|
import machineconfig.utils.installer_utils.installer as installer_entry_point
|
|
21
21
|
installer_entry_point.main(which=which, group=group, interactive=interactive)
|
|
22
22
|
_ = install
|
|
23
|
-
app.command("install", no_args_is_help=True, help="🛠️
|
|
23
|
+
app.command("install", no_args_is_help=True, help="🛠️ [i] Install essential packages")(install)
|
|
24
24
|
app.command("i", no_args_is_help=True, help="Install essential packages", hidden=True)(install)
|
|
25
25
|
app.add_typer(cli_repos.get_app(), name="repos")
|
|
26
26
|
app.add_typer(cli_repos.get_app(), name="r", hidden=True)
|
|
@@ -42,7 +42,7 @@ def path():
|
|
|
42
42
|
from pathlib import Path
|
|
43
43
|
path = Path(navigator.__file__).resolve().parent.joinpath("path_manager_tui.py")
|
|
44
44
|
from machineconfig.utils.code import run_shell_script
|
|
45
|
-
run_shell_script(f"""uv run --with "machineconfig>=5.
|
|
45
|
+
run_shell_script(f"""uv run --with "machineconfig>=5.72,textual" {path}""")
|
|
46
46
|
|
|
47
47
|
def pwsh_theme():
|
|
48
48
|
"""🔗 Select powershell prompt theme."""
|
|
@@ -63,7 +63,7 @@ def copy_assets(which: Literal["scripts", "settings", "both"] = typer.Option(...
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
def get_app():
|
|
66
|
-
config_apps = typer.Typer(help="⚙️
|
|
66
|
+
config_apps = typer.Typer(help="⚙️ [c] configuration subcommands", no_args_is_help=True)
|
|
67
67
|
config_apps.command("private", no_args_is_help=True, help="🔗 [p] Manage private configuration files.")(private)
|
|
68
68
|
config_apps.command("p", no_args_is_help=True, help="Manage private configuration files.", hidden=True)(private)
|
|
69
69
|
config_apps.command("public", no_args_is_help=True, help="🔗 [u] Manage public configuration files.")(public)
|
|
@@ -162,7 +162,7 @@ def get_app():
|
|
|
162
162
|
|
|
163
163
|
repos_apps.command(name="push", help="🚀 [p] Push changes across repositories")(push)
|
|
164
164
|
repos_apps.command(name="p", help="Push changes across repositories", hidden=True)(push)
|
|
165
|
-
repos_apps.command(name="pull", help="⬇️
|
|
165
|
+
repos_apps.command(name="pull", help="⬇️ [P] Pull changes across repositories")(pull)
|
|
166
166
|
repos_apps.command(name="P", help="Pull changes across repositories", hidden=True)(pull)
|
|
167
167
|
repos_apps.command(name="commit", help="💾 [c] Commit changes across repositories")(commit)
|
|
168
168
|
repos_apps.command(name="c", help="Commit changes across repositories", hidden=True)(commit)
|
|
@@ -25,9 +25,9 @@ def install():
|
|
|
25
25
|
# main_public_from_parser()
|
|
26
26
|
import platform
|
|
27
27
|
if platform.system() == "Windows":
|
|
28
|
-
run_shell_script(r"""$HOME\.local\bin\uv.exe tool install machineconfig>=5.
|
|
28
|
+
run_shell_script(r"""$HOME\.local\bin\uv.exe tool install machineconfig>=5.72""")
|
|
29
29
|
else:
|
|
30
|
-
run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.
|
|
30
|
+
run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.72""")
|
|
31
31
|
|
|
32
32
|
def navigate():
|
|
33
33
|
"""📚 NAVIGATE command structure with TUI"""
|
|
@@ -35,7 +35,7 @@ def navigate():
|
|
|
35
35
|
from pathlib import Path
|
|
36
36
|
path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
|
|
37
37
|
from machineconfig.utils.code import run_shell_script
|
|
38
|
-
run_shell_script(f"""uv run --with "machineconfig>=5.
|
|
38
|
+
run_shell_script(f"""uv run --with "machineconfig>=5.72,textual" {path}""")
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def run_python(ip: str = typer.Argument(..., help="Python command to run in the machineconfig environment"),
|
|
@@ -53,14 +53,14 @@ def get_app():
|
|
|
53
53
|
cli_app = typer.Typer(help="🔄 [s] self operations subcommands", no_args_is_help=True)
|
|
54
54
|
cli_app.command("update", no_args_is_help=False, help="🔄 [u] UPDATE essential repos")(update)
|
|
55
55
|
cli_app.command("u", no_args_is_help=False, help="UPDATE essential repos", hidden=True)(update)
|
|
56
|
-
cli_app.command("interactive", no_args_is_help=False, help="🤖 [
|
|
57
|
-
cli_app.command("
|
|
56
|
+
cli_app.command("interactive", no_args_is_help=False, help="🤖 [i] INTERACTIVE configuration of machine.")(interactive)
|
|
57
|
+
cli_app.command("i", no_args_is_help=False, help="INTERACTIVE configuration of machine.", hidden=True)(interactive)
|
|
58
58
|
cli_app.command("status", no_args_is_help=False, help="📊 [s] STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.")(status)
|
|
59
59
|
cli_app.command("s", no_args_is_help=False, help="STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.", hidden=True)(status)
|
|
60
|
-
cli_app.command("install", no_args_is_help=False, help="📋 [
|
|
61
|
-
cli_app.command("
|
|
60
|
+
cli_app.command("install", no_args_is_help=False, help="📋 [I] CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates.")(install)
|
|
61
|
+
cli_app.command("I", no_args_is_help=False, help="CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates.", hidden=True)(install)
|
|
62
62
|
cli_app.command("navigate", no_args_is_help=False, help="📚 [n] NAVIGATE command structure with TUI")(navigate)
|
|
63
63
|
cli_app.command("n", no_args_is_help=False, help="NAVIGATE command structure with TUI", hidden=True)(navigate)
|
|
64
|
-
cli_app.command("python", no_args_is_help=False, help="🐍
|
|
64
|
+
cli_app.command("python", no_args_is_help=False, help="🐍 [c] python command/file in the machineconfig environment")(run_python)
|
|
65
65
|
cli_app.command("c", no_args_is_help=False, help="RUN python command/file in the machineconfig environment", hidden=True)(run_python)
|
|
66
66
|
return cli_app
|
|
@@ -12,14 +12,30 @@ from machineconfig.scripts.python.croshell import croshell as croshell_func
|
|
|
12
12
|
def get_app():
|
|
13
13
|
import typer
|
|
14
14
|
app = typer.Typer(help="MachineConfig CLI - Manage your machine configurations and workflows", no_args_is_help=True)
|
|
15
|
-
|
|
16
|
-
app.add_typer(
|
|
17
|
-
app.add_typer(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
app.
|
|
22
|
-
|
|
15
|
+
devops_app = get_devops_app()
|
|
16
|
+
app.add_typer(devops_app, name="devops", help="[d] DevOps related commands", no_args_is_help=True)
|
|
17
|
+
app.add_typer(devops_app, name="d", hidden=True) # short alias
|
|
18
|
+
|
|
19
|
+
cloud_app = get_cloud_app()
|
|
20
|
+
app.add_typer(cloud_app, name="cloud", help="[c] Cloud management commands", no_args_is_help=True)
|
|
21
|
+
app.add_typer(cloud_app, name="c", hidden=True) # short alias
|
|
22
|
+
|
|
23
|
+
sessions_app = get_sessions_app()
|
|
24
|
+
app.add_typer(sessions_app, name="sessions", help="[s] Session and layout management", no_args_is_help=True)
|
|
25
|
+
app.add_typer(sessions_app, name="s", hidden=True) # short alias
|
|
26
|
+
|
|
27
|
+
fire_jobs_app = get_fire_jobs_app()
|
|
28
|
+
app.add_typer(fire_jobs_app, name="fire", help="[f] Fire and manage jobs", no_args_is_help=True)
|
|
29
|
+
app.add_typer(fire_jobs_app, name="f", hidden=True) # short alias
|
|
30
|
+
|
|
31
|
+
agents_app = get_agents_app()
|
|
32
|
+
app.add_typer(agents_app, name="agents", help="[a] 🤖 AI Agents management commands", no_args_is_help=True)
|
|
33
|
+
app.add_typer(agents_app, name="a", hidden=True) # short alias
|
|
34
|
+
|
|
35
|
+
app.command("ftpx", no_args_is_help=True, help="[f] File transfer utility though SSH")(ftpx_func)
|
|
36
|
+
app.command("f", no_args_is_help=True, hidden=True)(ftpx_func) # short alias
|
|
37
|
+
app.command("croshell", no_args_is_help=False, help="[cs] Cross-shell command execution")(croshell_func)
|
|
38
|
+
app.command("cs", no_args_is_help=False, hidden=True)(croshell_func) # short alias
|
|
23
39
|
|
|
24
40
|
return app
|
|
25
41
|
|
|
@@ -314,14 +314,21 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
314
314
|
help_text="devops self navigate"
|
|
315
315
|
))
|
|
316
316
|
|
|
317
|
-
# fire command
|
|
318
|
-
self.root.add("🔥 fire - Fire jobs execution", data=CommandInfo(
|
|
317
|
+
# fire command - now a typer sub-app
|
|
318
|
+
fire_node = self.root.add("🔥 fire - Fire jobs execution", data=CommandInfo(
|
|
319
319
|
name="fire",
|
|
320
|
-
description="
|
|
320
|
+
description="Fire and manage jobs",
|
|
321
321
|
command="fire",
|
|
322
|
-
is_group=
|
|
323
|
-
module_path="machineconfig.scripts.python.fire_jobs"
|
|
324
|
-
|
|
322
|
+
is_group=True,
|
|
323
|
+
module_path="machineconfig.scripts.python.fire_jobs"
|
|
324
|
+
))
|
|
325
|
+
|
|
326
|
+
fire_node.add("🔥 fire - Execute Python/Shell scripts", data=CommandInfo(
|
|
327
|
+
name="fire",
|
|
328
|
+
description="Execute Python scripts, shell scripts, or PowerShell scripts with Fire",
|
|
329
|
+
command="fire",
|
|
330
|
+
parent="fire",
|
|
331
|
+
help_text="fire <path> [function] --ve <env> --cmd --interactive --debug --choose_function --loop --jupyter --submit_to_cloud --remote --module --streamlit --environment <env> --holdDirectory --PathExport --git_pull --optimized --zellij_tab <name> --watch"
|
|
325
332
|
))
|
|
326
333
|
|
|
327
334
|
# agents command
|
|
@@ -373,6 +380,14 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
373
380
|
help_text="agents make-todo"
|
|
374
381
|
))
|
|
375
382
|
|
|
383
|
+
agents_node.add("🔗 make-symlinks - Create repo symlinks", data=CommandInfo(
|
|
384
|
+
name="make-symlinks",
|
|
385
|
+
description="Create symlinks to the current repo in ~/code_copies/",
|
|
386
|
+
command="agents make-symlinks",
|
|
387
|
+
parent="agents",
|
|
388
|
+
help_text="agents make-symlinks"
|
|
389
|
+
))
|
|
390
|
+
|
|
376
391
|
# sessions command
|
|
377
392
|
sessions_node = self.root.add("🖥️ sessions - Session layouts management", data=CommandInfo(
|
|
378
393
|
name="sessions",
|
|
@@ -406,6 +421,14 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
406
421
|
help_text="sessions balance-load --layout-path <file> --max-thresh <num> --thresh-type <number|weight> --breaking-method <moreLayouts|combineTabs> --output-path <file>"
|
|
407
422
|
))
|
|
408
423
|
|
|
424
|
+
sessions_node.add("💀 kill-process - Kill processes", data=CommandInfo(
|
|
425
|
+
name="kill-process",
|
|
426
|
+
description="Choose a process to kill interactively",
|
|
427
|
+
command="sessions kill-process",
|
|
428
|
+
parent="sessions",
|
|
429
|
+
help_text="sessions kill-process"
|
|
430
|
+
))
|
|
431
|
+
|
|
409
432
|
# cloud command
|
|
410
433
|
cloud_node = self.root.add("☁️ cloud - Cloud storage operations", data=CommandInfo(
|
|
411
434
|
name="cloud",
|
|
@@ -457,14 +480,4 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
457
480
|
is_group=False,
|
|
458
481
|
module_path="machineconfig.scripts.python.ftpx",
|
|
459
482
|
help_text="ftpx <source> <target> --recursive --zipFirst --cloud"
|
|
460
|
-
))
|
|
461
|
-
|
|
462
|
-
# kill_process command
|
|
463
|
-
self.root.add("💀 kill_process - Kill processes", data=CommandInfo(
|
|
464
|
-
name="kill_process",
|
|
465
|
-
description="Kill running processes",
|
|
466
|
-
command="kill_process",
|
|
467
|
-
is_group=False,
|
|
468
|
-
module_path="machineconfig.utils.procs",
|
|
469
|
-
help_text="kill_process"
|
|
470
483
|
))
|
|
@@ -130,9 +130,9 @@ def execute_installations(selected_options: list[str]) -> None:
|
|
|
130
130
|
console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Virtual environment setup[/italic]", border_style="green"))
|
|
131
131
|
import platform
|
|
132
132
|
if platform.system() == "Windows":
|
|
133
|
-
run_shell_script(r"""$HOME\.local\bin\uv.exe tool install machineconfig>=5.
|
|
133
|
+
run_shell_script(r"""$HOME\.local\bin\uv.exe tool install machineconfig>=5.72""")
|
|
134
134
|
else:
|
|
135
|
-
run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.
|
|
135
|
+
run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.72""")
|
|
136
136
|
if "install_ssh_server" in selected_options:
|
|
137
137
|
console.print(Panel("🔒 [bold red]SSH SERVER[/bold red]\n[italic]Remote access setup[/italic]", border_style="red"))
|
|
138
138
|
import platform
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# mkdir ~/data/local
|
|
6
6
|
# sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
|
|
7
7
|
|
|
8
|
-
uv run --python 3.14 --with "machineconfig>=5.
|
|
8
|
+
uv run --python 3.14 --with "machineconfig>=5.72" python -m machineconfig.scripts.python.mount_nfs
|
|
9
9
|
# Check if remote server is reachable and share folder exists
|
|
10
10
|
if ! ping -c 1 "$remote_server" &> /dev/null; then
|
|
11
11
|
echo "💥 Error: Remote server $remote_server is not reachable."
|
|
@@ -7,7 +7,7 @@ def analyze_repo_development(repo_path: str = typer.Argument(..., help="Path to
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
count_lines_path = Path(count_lines.__file__)
|
|
9
9
|
# --project $HOME/code/ machineconfig --group plot
|
|
10
|
-
cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=5.
|
|
10
|
+
cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=5.72" {count_lines_path} analyze-over-time {repo_path}"""
|
|
11
11
|
from machineconfig.utils.code import run_shell_script
|
|
12
12
|
run_shell_script(cmd)
|
|
13
13
|
|
|
@@ -25,7 +25,7 @@ def balance_load(layout_path: Path = typer.Argument(..., help="Path to the layou
|
|
|
25
25
|
def select_layout(layouts_json_file: Path, selected_layouts_names: Optional[list[str]], select_interactively: bool) -> list["LayoutConfig"]:
|
|
26
26
|
import json
|
|
27
27
|
from machineconfig.utils.options import choose_from_options
|
|
28
|
-
from machineconfig.utils.schemas.layouts.layout_types import
|
|
28
|
+
from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile
|
|
29
29
|
layout_file: LayoutsFile = json.loads(layouts_json_file.read_text(encoding="utf-8"))
|
|
30
30
|
if len(layout_file["layouts"]) == 0:
|
|
31
31
|
raise ValueError(f"No layouts found in {layouts_json_file}")
|
|
@@ -7,7 +7,7 @@ $user = ''
|
|
|
7
7
|
$sharePath = ''
|
|
8
8
|
$driveLetter = ''
|
|
9
9
|
|
|
10
|
-
uv run --python 3.14 --with "machineconfig>=5.
|
|
10
|
+
uv run --python 3.14 --with "machineconfig>=5.72" python -m machineconfig.scripts.python.mount_ssh
|
|
11
11
|
|
|
12
12
|
net use T: \\sshfs.kr\$user@$host.local
|
|
13
13
|
# this worked: net use T: \\sshfs\alex@alex-p51s-5.local
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
. <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/uv.sh")
|
|
3
3
|
devops() {
|
|
4
|
-
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.
|
|
4
|
+
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" devops "$@"
|
|
5
5
|
}
|
|
6
6
|
agents() {
|
|
7
|
-
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.
|
|
7
|
+
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" agents "$@"
|
|
8
8
|
}
|
|
9
9
|
cloud() {
|
|
10
|
-
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.
|
|
10
|
+
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" cloud "$@"
|
|
11
11
|
}
|
|
12
12
|
croshell() {
|
|
13
|
-
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.
|
|
13
|
+
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" croshell "$@"
|
|
14
14
|
}
|
|
15
15
|
fire() {
|
|
16
|
-
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.
|
|
16
|
+
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" fire "$@"
|
|
17
17
|
}
|
|
18
18
|
ftpx() {
|
|
19
|
-
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.
|
|
19
|
+
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" ftpx "$@"
|
|
20
20
|
}
|
|
21
21
|
sessions() {
|
|
22
|
-
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.
|
|
22
|
+
"$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" sessions "$@"
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
echo "devops command is now defined in this shell session."
|
|
@@ -2,30 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
4
4
|
function devops {
|
|
5
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.
|
|
5
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" devops $args
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
function cloud {
|
|
9
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.
|
|
9
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" cloud $args
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
function croshell {
|
|
13
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.
|
|
13
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" croshell $args
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
function agents {
|
|
17
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.
|
|
17
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" agents $args
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
function fire {
|
|
21
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.
|
|
21
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" fire $args
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
function ftpx {
|
|
25
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.
|
|
25
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" ftpx $args
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
function sessions {
|
|
29
|
-
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.
|
|
29
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" sessions $args
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -35,22 +35,18 @@ class Installer:
|
|
|
35
35
|
def install_robust(self, version: Optional[str]) -> str:
|
|
36
36
|
try:
|
|
37
37
|
exe_name = self._get_exe_name()
|
|
38
|
-
print(f"🚀 INSTALLING {exe_name.upper()} 🚀")
|
|
39
38
|
result_old = subprocess.run(f"{exe_name} --version", shell=True, capture_output=True, text=True)
|
|
40
39
|
old_version_cli = result_old.stdout.strip()
|
|
41
|
-
print(f"📊 Current version: {old_version_cli or 'Not installed'}")
|
|
40
|
+
print(f"🚀 INSTALLING {exe_name.upper()} 🚀. 📊 Current version: {old_version_cli or 'Not installed'}")
|
|
42
41
|
self.install(version=version)
|
|
43
42
|
result_new = subprocess.run(f"{exe_name} --version", shell=True, capture_output=True, text=True)
|
|
44
43
|
new_version_cli = result_new.stdout.strip()
|
|
45
|
-
print(f"📊 New version: {new_version_cli}")
|
|
46
|
-
|
|
47
44
|
if old_version_cli == new_version_cli:
|
|
48
|
-
print(f"ℹ️ Same version detected: {old_version_cli}")
|
|
45
|
+
# print(f"ℹ️ Same version detected: {old_version_cli}")
|
|
49
46
|
return f"""📦️ 😑 {exe_name}, same version: {old_version_cli}"""
|
|
50
47
|
else:
|
|
51
|
-
print(f"🚀 Update successful: {old_version_cli} ➡️ {new_version_cli}")
|
|
48
|
+
# print(f"🚀 Update successful: {old_version_cli} ➡️ {new_version_cli}")
|
|
52
49
|
return f"""📦️ 🤩 {exe_name} updated from {old_version_cli} ➡️ TO ➡️ {new_version_cli}"""
|
|
53
|
-
|
|
54
50
|
except Exception as ex:
|
|
55
51
|
exe_name = self._get_exe_name()
|
|
56
52
|
app_name = self.installer_data["appName"]
|
|
@@ -65,19 +61,16 @@ class Installer:
|
|
|
65
61
|
installer_arch_os = self.installer_data["fileNamePattern"][arch][os_name]
|
|
66
62
|
if installer_arch_os is None:
|
|
67
63
|
raise ValueError(f"No installation pattern for {exe_name} on {os_name} {arch}")
|
|
68
|
-
|
|
69
|
-
print(f"🔧 INSTALLATION PROCESS: {exe_name} 🔧")
|
|
70
64
|
version_to_be_installed: str = "unknown" # Initialize to ensure it's always bound
|
|
71
65
|
if repo_url == "CMD":
|
|
72
|
-
if
|
|
66
|
+
if any(pm in installer_arch_os for pm in ["npm ", "pip ", "winget ", "brew ", "curl "]):
|
|
73
67
|
package_manager = installer_arch_os.split(" ", maxsplit=1)[0]
|
|
74
68
|
print(f"📦 Using package manager: {package_manager}")
|
|
75
69
|
desc = package_manager + " installation"
|
|
76
70
|
version_to_be_installed = package_manager + "Latest"
|
|
77
|
-
|
|
78
|
-
#
|
|
79
|
-
|
|
80
|
-
result = run_shell_script(installer_arch_os)
|
|
71
|
+
result = subprocess.run(installer_arch_os, shell=True, capture_output=True, text=False)
|
|
72
|
+
# from machineconfig.utils.code import run_shell_script
|
|
73
|
+
# result = run_shell_script(installer_arch_os)
|
|
81
74
|
success = result.returncode == 0 and result.stderr == "".encode()
|
|
82
75
|
if not success:
|
|
83
76
|
print(f"❌ {desc} failed")
|
|
@@ -86,7 +79,6 @@ class Installer:
|
|
|
86
79
|
if result.stderr:
|
|
87
80
|
print(f"STDERR: {result.stderr}")
|
|
88
81
|
print(f"Return code: {result.returncode}")
|
|
89
|
-
print("✅ Package manager installation completed")
|
|
90
82
|
elif installer_arch_os.endswith((".sh", ".py", ".ps1")):
|
|
91
83
|
# search for the script, see which path ends with the script name
|
|
92
84
|
import machineconfig.jobs.installer as module
|
|
@@ -102,33 +94,24 @@ class Installer:
|
|
|
102
94
|
if installer_arch_os.endswith(".sh"):
|
|
103
95
|
if platform.system() not in ["Linux", "Darwin"]:
|
|
104
96
|
raise NotImplementedError(f"Shell script installation not supported on {platform.system()}")
|
|
105
|
-
print(f"🚀 Running shell script: {installer_path}")
|
|
106
97
|
subprocess.run(f"bash {installer_path}", shell=True, check=True)
|
|
107
98
|
version_to_be_installed = "scripted_installation"
|
|
108
|
-
print("✅ Shell script installation completed")
|
|
109
99
|
elif installer_arch_os.endswith(".ps1"):
|
|
110
100
|
if platform.system() != "Windows":
|
|
111
101
|
raise NotImplementedError(f"PowerShell script installation not supported on {platform.system()}")
|
|
112
|
-
print(f"🚀 Running PowerShell script: {installer_path}")
|
|
113
102
|
subprocess.run(f"powershell -ExecutionPolicy Bypass -File {installer_path}", shell=True, check=True)
|
|
114
103
|
version_to_be_installed = "scripted_installation"
|
|
115
|
-
print("✅ PowerShell script installation completed")
|
|
116
104
|
elif installer_arch_os.endswith(".py"):
|
|
117
105
|
import runpy
|
|
118
106
|
runpy.run_path(str(installer_path), run_name=None)["main"](self.installer_data, version=version)
|
|
119
107
|
version_to_be_installed = str(version)
|
|
120
|
-
print("✅ Custom installation completed")
|
|
121
108
|
elif installer_arch_os.startswith("https://"): # its a url to be downloaded
|
|
122
|
-
print(f"📥 Downloading object from URL: {installer_arch_os}")
|
|
123
109
|
downloaded_object = PathExtended(installer_arch_os).download(folder=INSTALL_TMP_DIR)
|
|
124
110
|
# object is either a zip containing a binary or a straight out binary.
|
|
125
111
|
if downloaded_object.suffix in [".zip", ".tar.gz"]:
|
|
126
|
-
print(f"📦 Decompressing downloaded archive: {downloaded_object}")
|
|
127
112
|
downloaded_object = downloaded_object.decompress()
|
|
128
|
-
print(f"✅ Decompression completed to: {downloaded_object}")
|
|
129
113
|
if downloaded_object.suffix in [".exe", ""]: # likely an executable
|
|
130
114
|
if platform.system() == "Windows":
|
|
131
|
-
print("🪟 Installing on Windows...")
|
|
132
115
|
exe = find_move_delete_windows(downloaded_file_path=downloaded_object, exe_name=exe_name, delete=True, rename_to=exe_name.replace(".exe", "") + ".exe")
|
|
133
116
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
134
117
|
system_name = "Linux" if platform.system() == "Linux" else "macOS"
|
|
@@ -138,7 +121,6 @@ class Installer:
|
|
|
138
121
|
error_msg = f"❌ ERROR: System {platform.system()} not supported"
|
|
139
122
|
print(error_msg)
|
|
140
123
|
raise NotImplementedError(error_msg)
|
|
141
|
-
|
|
142
124
|
_ = exe
|
|
143
125
|
if exe.name.replace(".exe", "") != exe_name.replace(".exe", ""):
|
|
144
126
|
from rich import print as pprint
|
|
@@ -149,12 +131,10 @@ class Installer:
|
|
|
149
131
|
print(f"🔄 Renaming to correct name: {new_exe_name}")
|
|
150
132
|
exe.with_name(name=new_exe_name, inplace=True, overwrite=True)
|
|
151
133
|
version_to_be_installed = "downloaded_binary"
|
|
152
|
-
print("✅ Downloaded binary installation completed")
|
|
153
134
|
else:
|
|
154
135
|
raise NotImplementedError(f"CMD installation method not implemented for: {installer_arch_os}")
|
|
155
136
|
else:
|
|
156
137
|
assert repo_url.startswith("https://github.com/"), f"repoURL must be a GitHub URL, got {repo_url}"
|
|
157
|
-
print("📥 Downloading from repository...")
|
|
158
138
|
downloaded, version_to_be_installed = self.download(version=version)
|
|
159
139
|
if str(downloaded).endswith(".deb"):
|
|
160
140
|
print(f"📦 Installing .deb package: {downloaded}")
|
|
@@ -171,10 +151,8 @@ class Installer:
|
|
|
171
151
|
print(f"Return code: {result.returncode}")
|
|
172
152
|
print("🗑️ Cleaning up .deb package...")
|
|
173
153
|
downloaded.delete(sure=True)
|
|
174
|
-
print("✅ DEB package installation completed")
|
|
175
154
|
else:
|
|
176
155
|
if platform.system() == "Windows":
|
|
177
|
-
print("🪟 Installing on Windows...")
|
|
178
156
|
exe = find_move_delete_windows(downloaded_file_path=downloaded, exe_name=exe_name, delete=True, rename_to=exe_name.replace(".exe", "") + ".exe")
|
|
179
157
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
180
158
|
system_name = "Linux" if platform.system() == "Linux" else "macOS"
|
|
@@ -184,32 +162,23 @@ class Installer:
|
|
|
184
162
|
error_msg = f"❌ ERROR: System {platform.system()} not supported"
|
|
185
163
|
print(error_msg)
|
|
186
164
|
raise NotImplementedError(error_msg)
|
|
187
|
-
|
|
188
165
|
_ = exe
|
|
189
166
|
if exe.name.replace(".exe", "") != exe_name.replace(".exe", ""):
|
|
190
167
|
from rich import print as pprint
|
|
191
168
|
from rich.panel import Panel
|
|
192
|
-
|
|
193
169
|
print("⚠️ Warning: Executable name mismatch")
|
|
194
170
|
pprint(Panel(f"Expected exe name: [red]{exe_name}[/red] \nAttained name: [red]{exe.name.replace('.exe', '')}[/red]", title="exe name mismatch", subtitle=repo_url))
|
|
195
171
|
new_exe_name = exe_name + ".exe" if platform.system() == "Windows" else exe_name
|
|
196
172
|
print(f"🔄 Renaming to correct name: {new_exe_name}")
|
|
197
173
|
exe.with_name(name=new_exe_name, inplace=True, overwrite=True)
|
|
198
|
-
|
|
199
|
-
print(f"💾 Saving version information to: {INSTALL_VERSION_ROOT.joinpath(exe_name)}")
|
|
200
174
|
INSTALL_VERSION_ROOT.joinpath(exe_name).parent.mkdir(parents=True, exist_ok=True)
|
|
201
175
|
INSTALL_VERSION_ROOT.joinpath(exe_name).write_text(version_to_be_installed or "unknown", encoding="utf-8")
|
|
202
|
-
print("✅ Installation completed successfully!")
|
|
203
|
-
|
|
204
176
|
def download(self, version: Optional[str]) -> tuple[PathExtended, str]:
|
|
205
177
|
exe_name = self._get_exe_name()
|
|
206
178
|
repo_url = self.installer_data["repoURL"]
|
|
207
|
-
app_name = self.installer_data["appName"]
|
|
208
|
-
print(f"📥 DOWNLOADING: {exe_name} 📥")
|
|
209
|
-
|
|
179
|
+
# app_name = self.installer_data["appName"]
|
|
210
180
|
download_link: Optional[str] = None
|
|
211
181
|
version_to_be_installed: Optional[str] = None
|
|
212
|
-
|
|
213
182
|
if "github" not in repo_url or ".zip" in repo_url or ".tar.gz" in repo_url:
|
|
214
183
|
# Direct download URL
|
|
215
184
|
download_link = repo_url
|
|
@@ -222,21 +191,15 @@ class Installer:
|
|
|
222
191
|
arch = get_normalized_arch()
|
|
223
192
|
os_name = get_os_name()
|
|
224
193
|
print(f"🧭 Detected system={os_name} arch={arch}")
|
|
225
|
-
|
|
226
194
|
# Use existing get_github_release method to get download link and version
|
|
227
195
|
download_link, version_to_be_installed = self.get_github_release(repo_url, version)
|
|
228
|
-
|
|
229
196
|
if download_link is None:
|
|
230
197
|
raise ValueError(f"Could not retrieve download link for {exe_name} version {version or 'latest'}")
|
|
231
|
-
|
|
232
198
|
print(f"📦 Version to be installed: {version_to_be_installed}")
|
|
233
199
|
print(f"🔗 Download URL: {download_link}")
|
|
234
|
-
|
|
235
200
|
assert download_link is not None, "download_link must be set"
|
|
236
201
|
assert version_to_be_installed is not None, "version_to_be_installed must be set"
|
|
237
|
-
print(f"📥 Downloading {app_name} from: {download_link}")
|
|
238
202
|
downloaded = PathExtended(download_link).download(folder=INSTALL_TMP_DIR).decompress()
|
|
239
|
-
print(f"✅ Download and extraction completed to: {downloaded}")
|
|
240
203
|
return downloaded, version_to_be_installed
|
|
241
204
|
|
|
242
205
|
# --------------------------- Arch / template helpers ---------------------------
|
|
@@ -167,7 +167,7 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
|
|
|
167
167
|
print(f"🗑️ ❌ DELETED {repr(self)}.")
|
|
168
168
|
return self
|
|
169
169
|
|
|
170
|
-
def move(self, folder: OPLike = None, name: Optional[str] = None, path: OPLike = None, rel2it: bool = False, overwrite: bool = False, verbose: bool = True, parents: bool = True, content: bool = False) -> "PathExtended":
|
|
170
|
+
def move(self, folder: OPLike = None, name: Optional[str] = None, path: OPLike = None, rel2it: bool = False, overwrite: bool = False, verbose: bool = True, parents: bool = True, content: bool = False) -> "PathExtended": # type: ignore
|
|
171
171
|
path = self._resolve_path(folder=folder, name=name, path=path, default_name=self.absolute().name, rel2it=rel2it)
|
|
172
172
|
if parents:
|
|
173
173
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -193,9 +193,7 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
|
|
|
193
193
|
print(f"🚚 MOVED {repr(self)} ==> {repr(path)}`")
|
|
194
194
|
return path
|
|
195
195
|
|
|
196
|
-
def copy(
|
|
197
|
-
self, folder: OPLike = None, name: Optional[str] = None, path: OPLike = None, content: bool = False, verbose: bool = True, append: Optional[str] = None, overwrite: bool = False, orig: bool = False
|
|
198
|
-
) -> "PathExtended": # tested %100 # TODO: replace `content` flag with ability to interpret "*" in resolve method.
|
|
196
|
+
def copy(self, folder: OPLike = None, name: Optional[str] = None, path: OPLike = None, content: bool = False, verbose: bool = True, append: Optional[str] = None, overwrite: bool = False, orig: bool = False) -> "PathExtended": # type: ignore
|
|
199
197
|
dest = self._resolve_path(folder=folder, name=name, path=path, default_name=self.name, rel2it=False)
|
|
200
198
|
dest = dest.expanduser().resolve()
|
|
201
199
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
machineconfig/utils/ssh.py
CHANGED
|
@@ -6,7 +6,7 @@ from machineconfig.utils.terminal import Response, MACHINE
|
|
|
6
6
|
from machineconfig.utils.accessories import pprint
|
|
7
7
|
|
|
8
8
|
UV_RUN_CMD = "$HOME/.local/bin/uv run"
|
|
9
|
-
MACHINECONFIG_VERSION = """ "machineconfig>=5.
|
|
9
|
+
MACHINECONFIG_VERSION = """ "machineconfig>=5.72" """
|
|
10
10
|
DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
|
|
11
11
|
|
|
12
12
|
|
|
@@ -46,8 +46,8 @@ machineconfig/cluster/templates/cli_trogon.py,sha256=PFWGy8SFYIhT9r3ZV4oIEYfImsQ
|
|
|
46
46
|
machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
47
|
machineconfig/jobs/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
48
|
machineconfig/jobs/installer/check_installations.py,sha256=uFuxhgI8rIMtClcGmuc9gpG6iJ7X0__peGUQfGkreT8,10778
|
|
49
|
-
machineconfig/jobs/installer/installer_data.json,sha256=
|
|
50
|
-
machineconfig/jobs/installer/package_groups.py,sha256=
|
|
49
|
+
machineconfig/jobs/installer/installer_data.json,sha256=Cf-55djN5SpOpcFEaMDOJRkLD-lkm18smjLIPAU-s3Q,75020
|
|
50
|
+
machineconfig/jobs/installer/package_groups.py,sha256=i4z83F_rk7BVsrwFhz5Vn4SLF0IHxyQBFSxpAaZBl8M,5270
|
|
51
51
|
machineconfig/jobs/installer/custom/gh.py,sha256=gn7TUSrsLx7uqFqj1Z-iYglS0EYBSgtJ9jWHxaJIfXM,4119
|
|
52
52
|
machineconfig/jobs/installer/custom/hx.py,sha256=YQClQXqWtGvon8BLFGf1Fp20JPkHgZeEZ6ebmCJQQfI,5838
|
|
53
53
|
machineconfig/jobs/installer/custom_dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -120,19 +120,20 @@ machineconfig/scripts/linux/other/share_smb,sha256=HZX8BKgMlS9JzkGIYnxTsPvoxEBBu
|
|
|
120
120
|
machineconfig/scripts/linux/other/start_docker,sha256=_yDN_PPqgzSUnPT7dmniMTpL4IfeeaGy1a2OL3IJlDU,525
|
|
121
121
|
machineconfig/scripts/linux/other/switch_ip,sha256=NQfeKMBSbFY3eP6M-BadD-TQo5qMP96DTp77KHk2tU8,613
|
|
122
122
|
machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
|
-
machineconfig/scripts/python/agents.py,sha256=
|
|
124
|
-
machineconfig/scripts/python/cloud.py,sha256=
|
|
125
|
-
machineconfig/scripts/python/croshell.py,sha256=
|
|
126
|
-
machineconfig/scripts/python/devops.py,sha256=
|
|
123
|
+
machineconfig/scripts/python/agents.py,sha256=DIfM7mqi8BhB7PWk-UiBNOYjUzQHdeA1hoS8v3FHKPQ,10446
|
|
124
|
+
machineconfig/scripts/python/cloud.py,sha256=ubLmf06FSdi1NawpQDgUDAtYb9cZSQqHbSUHzAwRIas,1199
|
|
125
|
+
machineconfig/scripts/python/croshell.py,sha256=DPrnIB_Nqg_rRXdZPXZTrfbHX5WmGrsMZzsxEoX1xYo,7083
|
|
126
|
+
machineconfig/scripts/python/devops.py,sha256=fxa-C4J4Ds8etPx8sfJOj32llcGJf7W4rfbE2OEgjzE,2049
|
|
127
127
|
machineconfig/scripts/python/devops_navigator.py,sha256=4O9_-ACeP748NcMjWQXZF7mBQpMPxqCGhLvPG3DMi4Q,236
|
|
128
|
-
machineconfig/scripts/python/entry.py,sha256=
|
|
128
|
+
machineconfig/scripts/python/entry.py,sha256=Az7dK1eXHGW5l46Yg10Cd88VChCdhvLAzO3e1A3r56A,2176
|
|
129
129
|
machineconfig/scripts/python/fire_jobs.py,sha256=O5DrckUGLxGblOcLf_iXU31pmCSpTg-c0hQZxQKD1os,13591
|
|
130
130
|
machineconfig/scripts/python/ftpx.py,sha256=UBDP6IIfWkaML1uZT1FrfGUUy_Of5LI82IdqEzo05_U,9760
|
|
131
|
-
machineconfig/scripts/python/interactive.py,sha256=
|
|
132
|
-
machineconfig/scripts/python/sessions.py,sha256=
|
|
131
|
+
machineconfig/scripts/python/interactive.py,sha256=TBUfE-oCyPYq9XVxVEoqqhrFoS2lCfd2nRG5maP4QeI,11790
|
|
132
|
+
machineconfig/scripts/python/sessions.py,sha256=Xaol7AzLItb3GIHo_sEVFUpFmTKDeTgqlK3-syqtNxw,9545
|
|
133
133
|
machineconfig/scripts/python/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
134
|
machineconfig/scripts/python/ai/generate_files.py,sha256=VfjKdwgF8O6E4oiRtfWNliibLmmwGe7f9ld6wpOsXTw,14498
|
|
135
|
-
machineconfig/scripts/python/ai/initai.py,sha256=
|
|
135
|
+
machineconfig/scripts/python/ai/initai.py,sha256=9SZtWOcRuwk8ZU3wHOfPzjInERD79ZTYFY8tVACgza4,2260
|
|
136
|
+
machineconfig/scripts/python/ai/vscode_tasks.py,sha256=61wMMIhtNTUO8Zvl8IziEdyadzgi5H0h8ACwq3cw6Ho,1255
|
|
136
137
|
machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1,sha256=m_z4vzLrvi6bgTZumN8twcbIWb9i8ZHfVJPE8jPdxyc,5074
|
|
137
138
|
machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh,sha256=Mt9D0LSEwbvVaq_wxTAch4NLyFUuDGHjn6rtEt_9alU,4615
|
|
138
139
|
machineconfig/scripts/python/ai/solutions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -160,7 +161,7 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-
|
|
|
160
161
|
machineconfig/scripts/python/cloud_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
161
162
|
machineconfig/scripts/python/cloud_helpers/cloud_copy.py,sha256=7w0bNMPmSlsoYPCaicja7c2uEwxpj3pyA_ZaPqvmsgc,8517
|
|
162
163
|
machineconfig/scripts/python/cloud_helpers/cloud_helpers.py,sha256=GA-bxXouUmknk9fyQAsPT-Xl3RG9-yBed71a2tu9Pig,4914
|
|
163
|
-
machineconfig/scripts/python/cloud_helpers/cloud_mount.py,sha256=
|
|
164
|
+
machineconfig/scripts/python/cloud_helpers/cloud_mount.py,sha256=DEZHwOgFcAVoI-NrBflFLbAjijOYZYq_D5M8xJQdtSQ,6487
|
|
164
165
|
machineconfig/scripts/python/cloud_helpers/cloud_sync.py,sha256=-xRPOF2S4_Q5QoNOmp_lJ_wWGNyeztEjn0o57V31ZjI,3447
|
|
165
166
|
machineconfig/scripts/python/cloud_helpers/helpers2.py,sha256=aPGz_3WqZJaqmn_bGMtFFmDlLytnOS5KWacZMgXTDJw,7310
|
|
166
167
|
machineconfig/scripts/python/cloud_helpers/helpers5.py,sha256=dPBvA9Tcyx9TMgM6On49A1CueGMhBdRzikDnlJGf3J0,1123
|
|
@@ -171,12 +172,12 @@ machineconfig/scripts/python/croshell_helpers/start_slidev.py,sha256=HfJReOusTPh
|
|
|
171
172
|
machineconfig/scripts/python/croshell_helpers/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
|
|
172
173
|
machineconfig/scripts/python/croshell_helpers/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
|
|
173
174
|
machineconfig/scripts/python/devops_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
174
|
-
machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=
|
|
175
|
+
machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=CRzZ_dTUPt-hSZYr3W4GGK0OO5J0-U6b32kjrwhyI50,5332
|
|
175
176
|
machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py,sha256=rjTys4FNf9_feP9flWM7Zvq17dxWmetSiGaHPxp25nk,2737
|
|
176
177
|
machineconfig/scripts/python/devops_helpers/cli_data.py,sha256=kvJ7g2CccjjXIhCwdu_Vlif8JHC0qUoLjuGcTSqT-IU,514
|
|
177
178
|
machineconfig/scripts/python/devops_helpers/cli_nw.py,sha256=U-W6ox-7ctGqQcjFWsDwZKmqQdl1etz9CMOes-B0Wgc,2959
|
|
178
|
-
machineconfig/scripts/python/devops_helpers/cli_repos.py,sha256=
|
|
179
|
-
machineconfig/scripts/python/devops_helpers/cli_self.py,sha256=
|
|
179
|
+
machineconfig/scripts/python/devops_helpers/cli_repos.py,sha256=HJH5ZBob_Uzhc3fDgG9riOeW6YEJt88xTjQYcEUPmUY,12015
|
|
180
|
+
machineconfig/scripts/python/devops_helpers/cli_self.py,sha256=72Hyx4MUDAK8mwn-YNMUMkHxCjkWPgQENQKFL0Q9ok0,3789
|
|
180
181
|
machineconfig/scripts/python/devops_helpers/cli_share_server.py,sha256=285OzxttCx7YsrpOkaapMKP1eVGHmG5TkkaSQnY7i3c,3976
|
|
181
182
|
machineconfig/scripts/python/devops_helpers/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
|
|
182
183
|
machineconfig/scripts/python/devops_helpers/devops_add_identity.py,sha256=wvjNgqsLmqD2SxbNCW_usqfp0LI-TDvcJJKGOWt2oFw,3775
|
|
@@ -193,7 +194,7 @@ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=YAZb1KOVpkfT
|
|
|
193
194
|
machineconfig/scripts/python/helper_navigator/__init__.py,sha256=6YBy1l9ISjHE0LctVwSRMV_OFq29FOInwXFN0Ff7owM,758
|
|
194
195
|
machineconfig/scripts/python/helper_navigator/command_builder.py,sha256=tMIonhYPWpdPGaiGPRg8JDCvyW0h2uxL15uL_JyWsnk,4617
|
|
195
196
|
machineconfig/scripts/python/helper_navigator/command_detail.py,sha256=i4MdiCOVaXdRmLqr4K-F1Mk1u93bl5heIN97cRPCnzg,1692
|
|
196
|
-
machineconfig/scripts/python/helper_navigator/command_tree.py,sha256=
|
|
197
|
+
machineconfig/scripts/python/helper_navigator/command_tree.py,sha256=bppJyuVFSD29_xnGLa2jrea3zeLYAtYuSlzGK7Y1ShE,20215
|
|
197
198
|
machineconfig/scripts/python/helper_navigator/data_models.py,sha256=62CIZ01rfCD2mKX_ihEVuhNzZ8FDnRSEIIQuyKOtmOg,533
|
|
198
199
|
machineconfig/scripts/python/helper_navigator/main_app.py,sha256=HhBttfk0bdQfWD9lC8yyoYDKBMzxkpw7NKE0IS7JUFE,8844
|
|
199
200
|
machineconfig/scripts/python/helper_navigator/search_bar.py,sha256=kDi8Jhxap8wdm7YpDBtfhwcPnSqDPFrV2LqbcSBWMT4,414
|
|
@@ -223,7 +224,7 @@ machineconfig/scripts/python/helpers_repos/grource.py,sha256=IywQ1NDPcLXM5Tr9xhm
|
|
|
223
224
|
machineconfig/scripts/python/helpers_repos/secure_repo.py,sha256=G_quiKOLNkWD5UG8ekexgh9xbpW4Od-J1pLJbLLWnpg,993
|
|
224
225
|
machineconfig/scripts/python/nw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
225
226
|
machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
|
|
226
|
-
machineconfig/scripts/python/nw/mount_nfs,sha256=
|
|
227
|
+
machineconfig/scripts/python/nw/mount_nfs,sha256=g5vtvHopepusp-4u2x9dSUe5Xo9vPqIqQJtIGNY9jfY,1855
|
|
227
228
|
machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
|
|
228
229
|
machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
|
|
229
230
|
machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
|
|
@@ -235,7 +236,7 @@ machineconfig/scripts/python/nw/wsl_windows_transfer.py,sha256=1ab9l-8MtAxofW5nG
|
|
|
235
236
|
machineconfig/scripts/python/repos_helpers/action.py,sha256=t6x9K43Uy7r5aRpdODfsN-5UoMrYXEG2cVw-Y8l9prw,14847
|
|
236
237
|
machineconfig/scripts/python/repos_helpers/clone.py,sha256=9vGb9NCXT0lkerPzOJjmFfhU8LSzE-_1LDvjkhgnal0,5461
|
|
237
238
|
machineconfig/scripts/python/repos_helpers/count_lines.py,sha256=ZLEajCLmlFFY969BehabqGOB9_kkpATO3Lt09L7KULk,15968
|
|
238
|
-
machineconfig/scripts/python/repos_helpers/count_lines_frontend.py,sha256=
|
|
239
|
+
machineconfig/scripts/python/repos_helpers/count_lines_frontend.py,sha256=lN6_P5S0aQTVxddp9EVxDTYbbilo5NJ4cO1nvr8GSP0,568
|
|
239
240
|
machineconfig/scripts/python/repos_helpers/entrypoint.py,sha256=C-_D03abE0TkVCJ4jZoliUMAhRRkZ77mcwMoPOuieJQ,2827
|
|
240
241
|
machineconfig/scripts/python/repos_helpers/record.py,sha256=3T5VmMbvywScZhTW2j4cGLK0T2LSWxKfnXkRTxkuLP4,10994
|
|
241
242
|
machineconfig/scripts/python/repos_helpers/sync.py,sha256=CLLWy2n2gY9beXPF-mblOQ6R7cKoenkJjMiX7tHQsBk,3091
|
|
@@ -248,7 +249,7 @@ machineconfig/scripts/windows/fzfrga.bat,sha256=rU_KBMO6ii2EZ0akMnmDk9vpuhKSUZqk
|
|
|
248
249
|
machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
|
|
249
250
|
machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
|
|
250
251
|
machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
|
|
251
|
-
machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=
|
|
252
|
+
machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=6lJRZ3GENlAK51S8piQj0kGz1_etSUKskEIT15berao,322
|
|
252
253
|
machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
|
|
253
254
|
machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
|
|
254
255
|
machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
|
|
@@ -363,7 +364,7 @@ machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKG
|
|
|
363
364
|
machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
|
|
364
365
|
machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
|
|
365
366
|
machineconfig/setup_linux/web_shortcuts/android.sh,sha256=gzep6bBhK7FCBvGcXK0fdJCtkSfBOftt0aFyDZq_eMs,68
|
|
366
|
-
machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=
|
|
367
|
+
machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=yXjczeP-w9vUH2Smb-2hH_QIo8pnd0yrFb1Llbd5YuE,880
|
|
367
368
|
machineconfig/setup_windows/__init__.py,sha256=NnSVZkIBoxoMgkj-_KAqGonH3YziBIWXOKDEcmNAGTY,386
|
|
368
369
|
machineconfig/setup_windows/apps.ps1,sha256=G5GqZ9G0aiQr_A-HaahtRdzpaTTdW6n3DRKMZWDTSPc,11214
|
|
369
370
|
machineconfig/setup_windows/uv.ps1,sha256=mzkFJUQ57dukVQtY7WqAQIVUDMcixnkir8aNM_TYrl4,350
|
|
@@ -373,7 +374,7 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
|
|
|
373
374
|
machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
|
|
374
375
|
machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
|
|
375
376
|
machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
|
|
376
|
-
machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=
|
|
377
|
+
machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=7zZ-_N4t-_XAF5tkZfEd5DzpKYAe3VXyKf-5miPtJgk,919
|
|
377
378
|
machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
378
379
|
machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
|
|
379
380
|
machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -385,13 +386,13 @@ machineconfig/utils/links.py,sha256=KM6vIn3hag9FYEzLSHP5MAM9tU_RStw2mCq2_OvmmZA,
|
|
|
385
386
|
machineconfig/utils/meta.py,sha256=fDn7cpq6iqAPzX2eKLSK9DZb0870rluR7eLDx5NgNaw,5994
|
|
386
387
|
machineconfig/utils/notifications.py,sha256=tuXIudcip0tEioG-bm8BbLr3FMDve4f6BktlznBhKxM,9013
|
|
387
388
|
machineconfig/utils/options.py,sha256=vUO4Kej-vDOv64wHr2HNDyu6PATURpjd7xp6N8OOoJg,7083
|
|
388
|
-
machineconfig/utils/path_extended.py,sha256=
|
|
389
|
+
machineconfig/utils/path_extended.py,sha256=4RhL0twcIG2kJxmC4r_YzaiTxrYkSRbdh9SO5ObMABw,53122
|
|
389
390
|
machineconfig/utils/path_helper.py,sha256=0e3Xh3BAEv27oqcezNeVLHJllGmLEgLH4T1l90m-650,8014
|
|
390
391
|
machineconfig/utils/procs.py,sha256=w75oGKfR7FpT1pGTGd2XscnEOO0IHBWxohLbi69hLqg,11418
|
|
391
392
|
machineconfig/utils/scheduler.py,sha256=jZ_1yghqA3-aINPRmE_76gboqJc0UElroR7urNOfXKs,14940
|
|
392
393
|
machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
|
|
393
394
|
machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
|
|
394
|
-
machineconfig/utils/ssh.py,sha256=
|
|
395
|
+
machineconfig/utils/ssh.py,sha256=HuDfIo6yo6NC5FmsxelSNAVu8LJm9Zl7JQialTpmV94,37564
|
|
395
396
|
machineconfig/utils/terminal.py,sha256=IlmOByfQG-vjhaFFxxzU5rWzP5_qUzmalRfuey3PAmc,11801
|
|
396
397
|
machineconfig/utils/upgrade_packages.py,sha256=H96zVJEWXJW07nh5vhjuSCrPtXGqoUb7xeJsFYYdmCI,3330
|
|
397
398
|
machineconfig/utils/ve.py,sha256=L-6PBXnQGXThiwWgheJMQoisAZOZA6SVCbGw2J-GFnI,2414
|
|
@@ -409,14 +410,14 @@ machineconfig/utils/installer_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
|
|
|
409
410
|
machineconfig/utils/installer_utils/github_release_bulk.py,sha256=WJf_qZlF02SmIc6C7o1h4Gy4gAaJAfeAS8O9s2Itj-k,6535
|
|
410
411
|
machineconfig/utils/installer_utils/installer.py,sha256=bWFSIW05hDo6p1BsNqK-yCQL5ZNU_eZxCQW1QLLc-SA,9759
|
|
411
412
|
machineconfig/utils/installer_utils/installer_abc.py,sha256=ZoMtINHD9cHEu4R5SYUWgHLTAqo4F2a33pBrEOGX4zs,11693
|
|
412
|
-
machineconfig/utils/installer_utils/installer_class.py,sha256=
|
|
413
|
+
machineconfig/utils/installer_utils/installer_class.py,sha256=zkbomiesAgc75BjVoe8KbjCMxaykotJ0dv9vKlm2Kv0,16756
|
|
413
414
|
machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=Xbi59rU35AzR7HZZ8ZQ8aUu_FjSgijNqc8Sme0rCk2Y,2050
|
|
414
415
|
machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
|
|
415
416
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
|
|
416
417
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
|
|
417
418
|
machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
418
|
-
machineconfig-5.
|
|
419
|
-
machineconfig-5.
|
|
420
|
-
machineconfig-5.
|
|
421
|
-
machineconfig-5.
|
|
422
|
-
machineconfig-5.
|
|
419
|
+
machineconfig-5.73.dist-info/METADATA,sha256=mKS8xQAp2b7_4QOQnqeZBOHlVKvptEK6247qpr8eYfc,3103
|
|
420
|
+
machineconfig-5.73.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
421
|
+
machineconfig-5.73.dist-info/entry_points.txt,sha256=M0jwN_brZdXWhmNVeXLvdKxfkv8WhhXFZYcuKBA9qnk,418
|
|
422
|
+
machineconfig-5.73.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
423
|
+
machineconfig-5.73.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|