machineconfig 4.94__py3-none-any.whl → 4.97__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/cluster/sessions_managers/ffile.py +4 -0
- machineconfig/jobs/installer/custom/gh.py +2 -15
- machineconfig/jobs/installer/custom_dev/alacritty.py +41 -26
- machineconfig/jobs/installer/custom_dev/brave.py +42 -28
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py +30 -19
- machineconfig/jobs/installer/custom_dev/code.py +29 -20
- machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
- machineconfig/jobs/installer/custom_dev/goes.py +41 -36
- machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
- machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +25 -10
- machineconfig/jobs/installer/custom_dev/redis.py +51 -33
- machineconfig/jobs/installer/installer_data.json +17 -0
- machineconfig/jobs/installer/package_groups.py +271 -102
- machineconfig/jobs/python/python_cargo_build_share.py +0 -1
- machineconfig/jobs/python/python_ve_symlink.py +23 -15
- machineconfig/jobs/python/vscode/api.py +16 -8
- machineconfig/jobs/python/vscode/sync_code.py +42 -27
- machineconfig/scripts/python/cloud_repo_sync.py +8 -4
- machineconfig/scripts/python/devops_devapps_install.py +34 -26
- machineconfig/scripts/python/fire_jobs_args_helper.py +9 -0
- machineconfig/scripts/python/helpers/helpers4.py +2 -68
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +4 -2
- machineconfig/scripts/python/interactive.py +24 -23
- machineconfig/scripts/python/mount_nfs.py +3 -6
- machineconfig/scripts/python/mount_ssh.py +3 -4
- machineconfig/scripts/python/sessions.py +10 -9
- machineconfig/scripts/python/start_slidev.py +14 -4
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +36 -22
- machineconfig/utils/code.py +11 -2
- machineconfig/utils/installer.py +15 -9
- machineconfig/utils/path_extended.py +49 -7
- machineconfig/utils/ssh.py +22 -12
- machineconfig/utils/terminal.py +66 -92
- {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/METADATA +1 -1
- {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/RECORD +39 -38
- {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/WHEEL +0 -0
- {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/entry_points.txt +0 -0
- {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/top_level.txt +0 -0
machineconfig/utils/code.py
CHANGED
|
@@ -115,8 +115,17 @@ def run_script(program: str):
|
|
|
115
115
|
console.print(Panel(Syntax(code=program, lexer=lexer), title=f"📄script @ {temp_script_path}", subtitle="shell code"), style="bold red")
|
|
116
116
|
if platform.system() == "Windows":
|
|
117
117
|
import subprocess
|
|
118
|
-
subprocess.run(
|
|
118
|
+
subprocess.run(f'powershell -ExecutionPolicy Bypass -File "{temp_script_path}"', check=True, shell=True)
|
|
119
119
|
elif platform.system() == "Linux" or platform.system() == "Darwin":
|
|
120
120
|
import subprocess
|
|
121
|
-
subprocess.run(
|
|
121
|
+
subprocess.run(f"bash {str(temp_script_path)}", check=True, shell=True)
|
|
122
122
|
temp_script_path.unlink(missing_ok=True)
|
|
123
|
+
# def run_command(command: str, description: str) -> bool:
|
|
124
|
+
# """Execute a shell command and return success status."""
|
|
125
|
+
# console.print(f"\n🔧 {description}", style="bold cyan")
|
|
126
|
+
# try:
|
|
127
|
+
# result = subprocess.run(command, shell=True, check=True, capture_output=False)
|
|
128
|
+
# return result.returncode == 0
|
|
129
|
+
# except subprocess.CalledProcessError as e:
|
|
130
|
+
# console.print(f"❌ Error executing command: {e}", style="bold red")
|
|
131
|
+
# return False
|
machineconfig/utils/installer.py
CHANGED
|
@@ -12,7 +12,7 @@ from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
|
12
12
|
from machineconfig.utils.source_of_truth import INSTALL_VERSION_ROOT, LINUX_INSTALL_PATH, LIBRARY_ROOT
|
|
13
13
|
from machineconfig.utils.io import read_json
|
|
14
14
|
|
|
15
|
-
from typing import Any
|
|
15
|
+
from typing import Any, Optional
|
|
16
16
|
import platform
|
|
17
17
|
from joblib import Parallel, delayed
|
|
18
18
|
|
|
@@ -93,18 +93,24 @@ def get_installed_cli_apps():
|
|
|
93
93
|
return apps
|
|
94
94
|
|
|
95
95
|
|
|
96
|
-
def get_installers(os: OPERATING_SYSTEMS, arch: CPU_ARCHITECTURES, which_cats: list[PACKAGE_GROUPS]) -> list[InstallerData]:
|
|
96
|
+
def get_installers(os: OPERATING_SYSTEMS, arch: CPU_ARCHITECTURES, which_cats: Optional[list[PACKAGE_GROUPS]]) -> list[InstallerData]:
|
|
97
97
|
print(f"\n{'=' * 80}\n🔍 LOADING INSTALLER CONFIGURATIONS 🔍\n{'=' * 80}")
|
|
98
98
|
res_all = get_all_installer_data_files()
|
|
99
|
-
acceptable_apps_names: list[str] =
|
|
100
|
-
|
|
101
|
-
acceptable_apps_names
|
|
99
|
+
acceptable_apps_names: list[str] | None = None
|
|
100
|
+
if which_cats is not None:
|
|
101
|
+
acceptable_apps_names = []
|
|
102
|
+
for cat in which_cats:
|
|
103
|
+
acceptable_apps_names += PACKAGE_GROUP2NAMES[cat]
|
|
104
|
+
else:
|
|
105
|
+
acceptable_apps_names = None
|
|
102
106
|
all_installers: list[InstallerData] = []
|
|
103
107
|
for installer_data in res_all:
|
|
104
|
-
if
|
|
105
|
-
if installer_data["
|
|
108
|
+
if acceptable_apps_names is not None:
|
|
109
|
+
if installer_data["appName"] not in acceptable_apps_names:
|
|
106
110
|
continue
|
|
107
|
-
|
|
111
|
+
if installer_data["fileNamePattern"][arch][os] is None:
|
|
112
|
+
continue
|
|
113
|
+
all_installers.append(installer_data)
|
|
108
114
|
print(f"✅ Loaded {len(all_installers)} installer configurations\n{'=' * 80}")
|
|
109
115
|
return all_installers
|
|
110
116
|
|
|
@@ -142,7 +148,7 @@ def get_installers_system_groups():
|
|
|
142
148
|
return res_final
|
|
143
149
|
|
|
144
150
|
|
|
145
|
-
def
|
|
151
|
+
def install_bulk(installers_data: list[InstallerData], safe: bool = False, jobs: int = 10, fresh: bool = False):
|
|
146
152
|
print(f"\n{'=' * 80}\n🚀 BULK INSTALLATION PROCESS 🚀\n{'=' * 80}")
|
|
147
153
|
if fresh:
|
|
148
154
|
print("🧹 Fresh install requested - clearing version cache...")
|
|
@@ -5,9 +5,12 @@ import time
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
import sys
|
|
7
7
|
import subprocess
|
|
8
|
+
import os
|
|
8
9
|
from platform import system
|
|
9
10
|
from typing import Any, Optional, Union, Callable, TypeAlias, Literal
|
|
10
11
|
|
|
12
|
+
from machineconfig.utils.terminal import Response
|
|
13
|
+
|
|
11
14
|
|
|
12
15
|
OPLike: TypeAlias = Union[str, "PathExtended", Path, None]
|
|
13
16
|
PLike: TypeAlias = Union[str, "PathExtended", Path]
|
|
@@ -15,6 +18,44 @@ FILE_MODE: TypeAlias = Literal["r", "w", "x", "a"]
|
|
|
15
18
|
SHUTIL_FORMATS: TypeAlias = Literal["zip", "tar", "gztar", "bztar", "xztar"]
|
|
16
19
|
|
|
17
20
|
|
|
21
|
+
def _is_user_admin() -> bool:
|
|
22
|
+
if os.name == "nt":
|
|
23
|
+
try:
|
|
24
|
+
return __import__("ctypes").windll.shell32.IsUserAnAdmin()
|
|
25
|
+
except Exception: # noqa: BLE001
|
|
26
|
+
import traceback
|
|
27
|
+
|
|
28
|
+
traceback.print_exc()
|
|
29
|
+
print("Admin check failed, assuming not an admin.")
|
|
30
|
+
return False
|
|
31
|
+
return os.getuid() == 0
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _run_shell_command(
|
|
35
|
+
command: str,
|
|
36
|
+
shell_name: str,
|
|
37
|
+
*,
|
|
38
|
+
stdout: Optional[int] = subprocess.PIPE,
|
|
39
|
+
stderr: Optional[int] = subprocess.PIPE,
|
|
40
|
+
stdin: Optional[int] = None,
|
|
41
|
+
check: bool = False,
|
|
42
|
+
) -> subprocess.CompletedProcess[str]:
|
|
43
|
+
if shell_name in {"powershell", "pwsh"} and sys.platform == "win32":
|
|
44
|
+
args: list[str] = [shell_name, "-Command", command]
|
|
45
|
+
return subprocess.run(args, check=check, text=True, stdout=stdout, stderr=stderr, stdin=stdin)
|
|
46
|
+
executable = "/bin/bash" if shell_name == "bash" and sys.platform != "win32" else None
|
|
47
|
+
return subprocess.run(
|
|
48
|
+
command,
|
|
49
|
+
check=check,
|
|
50
|
+
text=True,
|
|
51
|
+
stdout=stdout,
|
|
52
|
+
stderr=stderr,
|
|
53
|
+
stdin=stdin,
|
|
54
|
+
shell=True,
|
|
55
|
+
executable=executable,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
|
|
18
59
|
def pwd2key(password: str, salt: Optional[bytes] = None, iterations: int = 10) -> bytes: # Derive a secret key from a given password and salt"""
|
|
19
60
|
import base64
|
|
20
61
|
|
|
@@ -392,9 +433,7 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
|
|
|
392
433
|
assert target_obj.exists(), f"Target path `{target}` (aka `{target_obj}`) doesn't exist. This will create a broken link."
|
|
393
434
|
if overwrite and (self.is_symlink() or self.exists()):
|
|
394
435
|
self.delete(sure=True, verbose=verbose)
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
if system() == "Windows" and not Terminal.is_user_admin(): # you cannot create symlink without priviliages.
|
|
436
|
+
if system() == "Windows" and not _is_user_admin(): # you cannot create symlink without priviliages.
|
|
398
437
|
import win32com.shell.shell # type: ignore # pylint: disable=E0401
|
|
399
438
|
|
|
400
439
|
_proce_info = win32com.shell.shell.ShellExecuteEx(lpVerb="runas", lpFile=sys.executable, lpParameters=f" -c \"from pathlib import Path; Path(r'{self.expanduser()}').symlink_to(r'{str(target_obj)}')\"")
|
|
@@ -884,8 +923,9 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
|
|
|
884
923
|
if verbose:
|
|
885
924
|
print("🔗 SHARING FILE")
|
|
886
925
|
shell_to_use = "powershell" if sys.platform == "win32" else "bash"
|
|
887
|
-
|
|
888
|
-
|
|
926
|
+
command = f"rclone link '{cloud}:{rp.as_posix()}'"
|
|
927
|
+
completed = _run_shell_command(command, shell_to_use)
|
|
928
|
+
res = Response.from_completed_process(completed).capture()
|
|
889
929
|
tmp = res.op2path(strict_err=False, strict_returncode=False)
|
|
890
930
|
if tmp is None:
|
|
891
931
|
res.print()
|
|
@@ -955,11 +995,13 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
|
|
|
955
995
|
|
|
956
996
|
rclone_cmd += f" --progress --transfers={transfers} --verbose"
|
|
957
997
|
rclone_cmd += " --delete-during" if delete else ""
|
|
958
|
-
from machineconfig.utils.terminal import Terminal
|
|
959
998
|
if verbose:
|
|
960
999
|
print(rclone_cmd)
|
|
961
1000
|
shell_to_use = "powershell" if sys.platform == "win32" else "bash"
|
|
962
|
-
|
|
1001
|
+
stdout_target: Optional[int] = None if verbose else subprocess.PIPE
|
|
1002
|
+
stderr_target: Optional[int] = None if verbose else subprocess.PIPE
|
|
1003
|
+
completed = _run_shell_command(rclone_cmd, shell_to_use, stdout=stdout_target, stderr=stderr_target)
|
|
1004
|
+
res = Response.from_completed_process(completed)
|
|
963
1005
|
success = res.is_successful(strict_err=False, strict_returcode=True)
|
|
964
1006
|
if not success:
|
|
965
1007
|
res.print(capture=False, desc="Cloud Storage Operation")
|
machineconfig/utils/ssh.py
CHANGED
|
@@ -2,12 +2,31 @@ from typing import Optional, Any, Union, List
|
|
|
2
2
|
import os
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
import rich.console
|
|
5
|
-
from machineconfig.utils.terminal import
|
|
5
|
+
from machineconfig.utils.terminal import Response, MACHINE
|
|
6
6
|
from machineconfig.utils.path_extended import PathExtended, PLike, OPLike
|
|
7
7
|
from machineconfig.utils.accessories import pprint
|
|
8
8
|
# from machineconfig.utils.ve import get_ve_activate_line
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
def get_header(wdir: OPLike, toolbox: bool):
|
|
12
|
+
if toolbox:
|
|
13
|
+
toobox_code = """
|
|
14
|
+
try:
|
|
15
|
+
from crocodile.toolbox import *
|
|
16
|
+
except ImportError:
|
|
17
|
+
print("Crocodile not found, skipping import.")
|
|
18
|
+
pass
|
|
19
|
+
"""
|
|
20
|
+
else:
|
|
21
|
+
toobox_code = "# No toolbox import."
|
|
22
|
+
return f"""
|
|
23
|
+
# >> Code prepended
|
|
24
|
+
{toobox_code}
|
|
25
|
+
{'''sys.path.insert(0, r'{wdir}') ''' if wdir is not None else "# No path insertion."}
|
|
26
|
+
# >> End of header, start of script passed
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
|
|
11
30
|
@dataclass
|
|
12
31
|
class Scout:
|
|
13
32
|
source_full: PathExtended
|
|
@@ -217,7 +236,7 @@ class SSH: # inferior alternative: https://github.com/fabric/fabric
|
|
|
217
236
|
assert '"' not in cmd, 'Avoid using `"` in your command. I dont know how to handle this when passing is as command to python in pwsh command.'
|
|
218
237
|
if not return_obj:
|
|
219
238
|
return self.run(
|
|
220
|
-
cmd=f"""uv run --no-dev --project $HOME/code/machineconfig -c "{
|
|
239
|
+
cmd=f"""uv run --no-dev --project $HOME/code/machineconfig -c "{get_header(wdir=None, toolbox=True)}{cmd}\n""" + '"',
|
|
221
240
|
desc=desc or f"run_py on {self.get_remote_repr()}",
|
|
222
241
|
verbose=verbose,
|
|
223
242
|
strict_err=strict_err,
|
|
@@ -349,13 +368,4 @@ class SSH: # inferior alternative: https://github.com/fabric/fabric
|
|
|
349
368
|
target = target.unzip(inplace=True, content=True)
|
|
350
369
|
self.run_py(f"P(r'{source.as_posix()}').delete(sure=True)", desc="Cleaning temp zip files @ remote.", strict_returncode=True, strict_err=True)
|
|
351
370
|
print("\n")
|
|
352
|
-
return target
|
|
353
|
-
|
|
354
|
-
# def print_summary(self):
|
|
355
|
-
# import polars as pl
|
|
356
|
-
# df = pl.DataFrame(List(self.terminal_responses).apply(lambda rsp: dict(desc=rsp.desc, err=rsp.err, returncode=rsp.returncode)).list)
|
|
357
|
-
# print("\nSummary of operations performed:")
|
|
358
|
-
# print(df.to_pandas().to_markdown())
|
|
359
|
-
# if ((df.select('returncode').to_series().to_list()[2:] == [None] * (len(df) - 2)) and (df.select('err').to_series().to_list()[2:] == [''] * (len(df) - 2))): print("\nAll operations completed successfully.\n")
|
|
360
|
-
# else: print("\nSome operations failed. \n")
|
|
361
|
-
# return df
|
|
371
|
+
return target
|
machineconfig/utils/terminal.py
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
1
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
2
2
|
import subprocess
|
|
3
3
|
from typing import Any, BinaryIO, Optional, Union
|
|
4
|
-
import platform
|
|
5
|
-
import sys
|
|
6
|
-
import os
|
|
7
4
|
from typing import Literal, TypeAlias
|
|
8
5
|
from dataclasses import dataclass
|
|
9
6
|
|
|
@@ -102,11 +99,7 @@ class Response:
|
|
|
102
99
|
return self
|
|
103
100
|
|
|
104
101
|
|
|
105
|
-
|
|
106
|
-
# The Terminal class has been replaced with inline subprocess calls to underlying primitives.
|
|
107
|
-
# This file is kept for reference but should not be used.
|
|
108
|
-
|
|
109
|
-
|
|
102
|
+
'''
|
|
110
103
|
class Terminal:
|
|
111
104
|
def __init__(self, stdout: Optional[int] = subprocess.PIPE, stderr: Optional[int] = subprocess.PIPE, stdin: Optional[int] = subprocess.PIPE, elevated: bool = False):
|
|
112
105
|
self.machine: str = platform.system()
|
|
@@ -116,13 +109,13 @@ class Terminal:
|
|
|
116
109
|
self.stdin = stdin
|
|
117
110
|
|
|
118
111
|
# def set_std_system(self): self.stdout = sys.stdout; self.stderr = sys.stderr; self.stdin = sys.stdin
|
|
119
|
-
def set_std_pipe(self):
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
112
|
+
# def set_std_pipe(self):
|
|
113
|
+
# self.stdout = subprocess.PIPE
|
|
114
|
+
# self.stderr = subprocess.PIPE
|
|
115
|
+
# self.stdin = subprocess.PIPE
|
|
123
116
|
|
|
124
|
-
def set_std_null(self):
|
|
125
|
-
|
|
117
|
+
# def set_std_null(self):
|
|
118
|
+
# self.stdout, self.stderr, self.stdin = subprocess.DEVNULL, subprocess.DEVNULL, subprocess.DEVNULL # Equivalent to `echo 'foo' &> /dev/null`
|
|
126
119
|
|
|
127
120
|
def run(self, *cmds: str, shell: Optional[SHELLS] = "default", check: bool = False, ip: Optional[str] = None) -> Response: # Runs SYSTEM commands like subprocess.run
|
|
128
121
|
"""Blocking operation. Thus, if you start a shell via this method, it will run in the main and won't stop until you exit manually IF stdin is set to sys.stdin, otherwise it will run and close quickly. Other combinations of stdin, stdout can lead to funny behaviour like no output but accept input or opposite.
|
|
@@ -138,64 +131,7 @@ class Terminal:
|
|
|
138
131
|
resp: subprocess.CompletedProcess[str] = subprocess.run(my_list, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=check, input=ip)
|
|
139
132
|
else:
|
|
140
133
|
resp = __import__("ctypes").windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
def run_script(self, script: str, shell: SHELLS = "default", verbose: bool = False):
|
|
144
|
-
if self.machine == "Linux":
|
|
145
|
-
script = "#!/bin/bash" + "\n" + script # `source` is only available in bash.
|
|
146
|
-
script_file = PathExtended.tmpfile(name="tmp_shell_script", suffix=".ps1" if self.machine == "Windows" else ".sh", folder="tmp_scripts")
|
|
147
|
-
script_file.write_text(script, newline={"Windows": None, "Linux": "\n"}[self.machine])
|
|
148
|
-
if shell == "default":
|
|
149
|
-
if self.machine == "Windows":
|
|
150
|
-
start_cmd = "powershell" # default shell on Windows is cmd which is not very useful. (./source is not available)
|
|
151
|
-
full_command: Union[list[str], str] = [start_cmd, str(script_file)] # shell=True will cause this to be a string anyway (with space separation)
|
|
152
|
-
else:
|
|
153
|
-
start_cmd = "bash"
|
|
154
|
-
full_command = f"{start_cmd} {script_file}" # full_command = [start_cmd, str(script_file)]
|
|
155
|
-
else:
|
|
156
|
-
full_command = f"{shell} {script_file}" # full_command = [shell, str(tmp_file)]
|
|
157
|
-
if verbose:
|
|
158
|
-
desc = "Script to be executed:"
|
|
159
|
-
if platform.system() == "Windows":
|
|
160
|
-
lexer = "powershell"
|
|
161
|
-
elif platform.system() == "Linux":
|
|
162
|
-
lexer = "sh"
|
|
163
|
-
elif platform.system() == "Darwin":
|
|
164
|
-
lexer = "sh" # macOS uses similar shell to Linux
|
|
165
|
-
else:
|
|
166
|
-
raise NotImplementedError(f"Platform {platform.system()} not supported.")
|
|
167
|
-
from rich.console import Console
|
|
168
|
-
from rich.panel import Panel
|
|
169
|
-
from rich.syntax import Syntax
|
|
170
|
-
import rich.progress as pb
|
|
171
|
-
|
|
172
|
-
console = Console()
|
|
173
|
-
console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 {desc}"), style="bold red")
|
|
174
|
-
with pb.Progress(transient=True) as progress:
|
|
175
|
-
_task = progress.add_task(f"Running Script @ {script_file}", total=None)
|
|
176
|
-
resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
|
|
177
|
-
else:
|
|
178
|
-
resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
|
|
179
|
-
return Response.from_completed_process(resp)
|
|
180
|
-
|
|
181
|
-
def run_py(self, script: str, wdir: OPLike = None, interactive: bool = True, ipython: bool = True, shell: Optional[str] = None, terminal: str = "", new_window: bool = True, header: bool = True): # async run, since sync run is meaningless.
|
|
182
|
-
script = (Terminal.get_header(wdir=wdir, toolbox=True) if header else "") + script + ("\nDisplayData.set_pandas_auto_width()\n" if terminal in {"wt", "powershell", "pwsh"} else "")
|
|
183
|
-
py_script = PathExtended.tmpfile(name="tmp_python_script", suffix=".py", folder="tmp_scripts/terminal")
|
|
184
|
-
py_script.write_text(f"""print(r'''{script}''')""" + "\n" + script)
|
|
185
|
-
print(f"""🚀 [ASYNC PYTHON SCRIPT] Script URI:
|
|
186
|
-
{py_script.absolute().as_uri()}""")
|
|
187
|
-
print("Script to be executed asyncronously: ", py_script.absolute().as_uri())
|
|
188
|
-
shell_script = f"""
|
|
189
|
-
{f"cd {wdir}" if wdir is not None else ""}
|
|
190
|
-
{"ipython" if ipython else "python"} {"-i" if interactive else ""} {py_script}
|
|
191
|
-
"""
|
|
192
|
-
shell_path = PathExtended.tmpfile(name="tmp_shell_script", suffix=".sh" if self.machine == "Linux" else ".ps1", folder="tmp_scripts/shell")
|
|
193
|
-
shell_path.write_text(shell_script)
|
|
194
|
-
if shell is None and self.machine == "Windows":
|
|
195
|
-
shell = "pwsh"
|
|
196
|
-
window = "start" if new_window and self.machine == "Windows" else ""
|
|
197
|
-
os.system(f"{window} {terminal} {shell} {shell_script}")
|
|
198
|
-
|
|
134
|
+
return Response.from_completed_process(resp)
|
|
199
135
|
@staticmethod
|
|
200
136
|
def is_user_admin() -> bool: # adopted from: https://stackoverflow.com/questions/19672352/how-to-run-script-with-elevated-privilege-on-windows"""
|
|
201
137
|
if os.name == "nt":
|
|
@@ -209,6 +145,63 @@ class Terminal:
|
|
|
209
145
|
return False
|
|
210
146
|
else:
|
|
211
147
|
return os.getuid() == 0 # Check for root on Posix
|
|
148
|
+
'''
|
|
149
|
+
|
|
150
|
+
# def run_script(self, script: str, shell: SHELLS = "default", verbose: bool = False):
|
|
151
|
+
# if self.machine == "Linux":
|
|
152
|
+
# script = "#!/bin/bash" + "\n" + script # `source` is only available in bash.
|
|
153
|
+
# script_file = PathExtended.tmpfile(name="tmp_shell_script", suffix=".ps1" if self.machine == "Windows" else ".sh", folder="tmp_scripts")
|
|
154
|
+
# script_file.write_text(script, newline={"Windows": None, "Linux": "\n"}[self.machine])
|
|
155
|
+
# if shell == "default":
|
|
156
|
+
# if self.machine == "Windows":
|
|
157
|
+
# start_cmd = "powershell" # default shell on Windows is cmd which is not very useful. (./source is not available)
|
|
158
|
+
# full_command: Union[list[str], str] = [start_cmd, str(script_file)] # shell=True will cause this to be a string anyway (with space separation)
|
|
159
|
+
# else:
|
|
160
|
+
# start_cmd = "bash"
|
|
161
|
+
# full_command = f"{start_cmd} {script_file}" # full_command = [start_cmd, str(script_file)]
|
|
162
|
+
# else:
|
|
163
|
+
# full_command = f"{shell} {script_file}" # full_command = [shell, str(tmp_file)]
|
|
164
|
+
# if verbose:
|
|
165
|
+
# desc = "Script to be executed:"
|
|
166
|
+
# if platform.system() == "Windows":
|
|
167
|
+
# lexer = "powershell"
|
|
168
|
+
# elif platform.system() == "Linux":
|
|
169
|
+
# lexer = "sh"
|
|
170
|
+
# elif platform.system() == "Darwin":
|
|
171
|
+
# lexer = "sh" # macOS uses similar shell to Linux
|
|
172
|
+
# else:
|
|
173
|
+
# raise NotImplementedError(f"Platform {platform.system()} not supported.")
|
|
174
|
+
# from rich.console import Console
|
|
175
|
+
# from rich.panel import Panel
|
|
176
|
+
# from rich.syntax import Syntax
|
|
177
|
+
# import rich.progress as pb
|
|
178
|
+
|
|
179
|
+
# console = Console()
|
|
180
|
+
# console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 {desc}"), style="bold red")
|
|
181
|
+
# with pb.Progress(transient=True) as progress:
|
|
182
|
+
# _task = progress.add_task(f"Running Script @ {script_file}", total=None)
|
|
183
|
+
# resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
|
|
184
|
+
# else:
|
|
185
|
+
# resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
|
|
186
|
+
# return Response.from_completed_process(resp)
|
|
187
|
+
|
|
188
|
+
# def run_py(self, script: str, wdir: OPLike = None, interactive: bool = True, ipython: bool = True, shell: Optional[str] = None, terminal: str = "", new_window: bool = True, header: bool = True): # async run, since sync run is meaningless.
|
|
189
|
+
# script = (Terminal.get_header(wdir=wdir, toolbox=True) if header else "") + script + ("\nDisplayData.set_pandas_auto_width()\n" if terminal in {"wt", "powershell", "pwsh"} else "")
|
|
190
|
+
# py_script = PathExtended.tmpfile(name="tmp_python_script", suffix=".py", folder="tmp_scripts/terminal")
|
|
191
|
+
# py_script.write_text(f"""print(r'''{script}''')""" + "\n" + script)
|
|
192
|
+
# print(f"""🚀 [ASYNC PYTHON SCRIPT] Script URI:
|
|
193
|
+
# {py_script.absolute().as_uri()}""")
|
|
194
|
+
# print("Script to be executed asyncronously: ", py_script.absolute().as_uri())
|
|
195
|
+
# shell_script = f"""
|
|
196
|
+
# {f"cd {wdir}" if wdir is not None else ""}
|
|
197
|
+
# {"ipython" if ipython else "python"} {"-i" if interactive else ""} {py_script}
|
|
198
|
+
# """
|
|
199
|
+
# shell_path = PathExtended.tmpfile(name="tmp_shell_script", suffix=".sh" if self.machine == "Linux" else ".ps1", folder="tmp_scripts/shell")
|
|
200
|
+
# shell_path.write_text(shell_script)
|
|
201
|
+
# if shell is None and self.machine == "Windows":
|
|
202
|
+
# shell = "pwsh"
|
|
203
|
+
# window = "start" if new_window and self.machine == "Windows" else ""
|
|
204
|
+
# os.system(f"{window} {terminal} {shell} {shell_script}")
|
|
212
205
|
|
|
213
206
|
# @staticmethod
|
|
214
207
|
# def run_as_admin(file: PLike, params: Any, wait: bool = False):
|
|
@@ -216,22 +209,3 @@ class Terminal:
|
|
|
216
209
|
# # TODO update PATH for this to take effect immediately.
|
|
217
210
|
# if wait: time.sleep(1)
|
|
218
211
|
# return proce_info
|
|
219
|
-
|
|
220
|
-
@staticmethod
|
|
221
|
-
def get_header(wdir: OPLike, toolbox: bool):
|
|
222
|
-
if toolbox:
|
|
223
|
-
toobox_code = """
|
|
224
|
-
try:
|
|
225
|
-
from crocodile.toolbox import *
|
|
226
|
-
except ImportError:
|
|
227
|
-
print("Crocodile not found, skipping import.")
|
|
228
|
-
pass
|
|
229
|
-
"""
|
|
230
|
-
else:
|
|
231
|
-
toobox_code = "# No toolbox import."
|
|
232
|
-
return f"""
|
|
233
|
-
# >> Code prepended
|
|
234
|
-
{toobox_code}
|
|
235
|
-
{'''sys.path.insert(0, r'{wdir}') ''' if wdir is not None else "# No path insertion."}
|
|
236
|
-
# >> End of header, start of script passed
|
|
237
|
-
"""
|
|
@@ -11,6 +11,7 @@ machineconfig/cluster/remote/remote_machine.py,sha256=xRuoHKNsIT0-FTFSvF1q7scnGK
|
|
|
11
11
|
machineconfig/cluster/remote/script_execution.py,sha256=4U70FDtjOh6A6C2Ei-Xh90S888q64VhRPbExoEbdepk,9980
|
|
12
12
|
machineconfig/cluster/remote/script_notify_upon_completion.py,sha256=GRxnnbnOl1-hTovTN-zI_M9wdV7x293yA77_mou9I1o,2032
|
|
13
13
|
machineconfig/cluster/sessions_managers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
machineconfig/cluster/sessions_managers/ffile.py,sha256=QzkBU5Ysnah9SxlzODsGprx4Q_VskWntChoejaOCEdw,52
|
|
14
15
|
machineconfig/cluster/sessions_managers/wt_local.py,sha256=cnLAcyVUr2d2ZPh0dEEr-LHrLiwTMVu7YWXM21IS7_4,17507
|
|
15
16
|
machineconfig/cluster/sessions_managers/wt_local_manager.py,sha256=BaJNOOY5rAfssreJm8Nmr4we_PCxMkmQqzUMdimNwaM,24565
|
|
16
17
|
machineconfig/cluster/sessions_managers/wt_remote.py,sha256=XmZV9rLubwxND5UYAS15mAcpzDdXvm4KyubVGYkVBmo,8743
|
|
@@ -42,22 +43,22 @@ machineconfig/cluster/templates/run_remote.py,sha256=vCc56t8BUAUJp7tyb0PFfwy5hlm
|
|
|
42
43
|
machineconfig/cluster/templates/utils.py,sha256=5lHgjHvodoSPBD31AwluHBBNgwimwThUsDNWGN8iH9I,1647
|
|
43
44
|
machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
45
|
machineconfig/jobs/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
-
machineconfig/jobs/installer/installer_data.json,sha256=
|
|
46
|
-
machineconfig/jobs/installer/package_groups.py,sha256=
|
|
47
|
-
machineconfig/jobs/installer/custom/gh.py,sha256=
|
|
46
|
+
machineconfig/jobs/installer/installer_data.json,sha256=tBf8X6TEfdhRrvTbp5qyKUs0nEYxE62C8XgDkPCJnfc,72128
|
|
47
|
+
machineconfig/jobs/installer/package_groups.py,sha256=hG9-RLfEXlGg5u7-8x9PrNLr9mNtuoVLVrfDN9hqzQ0,6735
|
|
48
|
+
machineconfig/jobs/installer/custom/gh.py,sha256=iZZI4ND87eiWlj-Y5uJ7LuN8ln2QkqjJyeOMFZ0o-YA,2963
|
|
48
49
|
machineconfig/jobs/installer/custom/hx.py,sha256=FrUD0mlhWG2GxrnarccVIaW_sHJ5mxeF6yyzbBWyx6w,5840
|
|
49
50
|
machineconfig/jobs/installer/custom_dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
-
machineconfig/jobs/installer/custom_dev/alacritty.py,sha256=
|
|
51
|
-
machineconfig/jobs/installer/custom_dev/brave.py,sha256=
|
|
52
|
-
machineconfig/jobs/installer/custom_dev/bypass_paywall.py,sha256=
|
|
53
|
-
machineconfig/jobs/installer/custom_dev/code.py,sha256=
|
|
51
|
+
machineconfig/jobs/installer/custom_dev/alacritty.py,sha256=dQJ7EZ-23N3UOeWwccC-HTbrpfKDRxrzdmfqeIPKwQE,2738
|
|
52
|
+
machineconfig/jobs/installer/custom_dev/brave.py,sha256=6-jsdvvVEQDkqHbhnEubitF6fy7AXBB9Q-GLgIEOLoM,2987
|
|
53
|
+
machineconfig/jobs/installer/custom_dev/bypass_paywall.py,sha256=2DHZtMKjeH6BBVBaZKsup3PwzPfl4Cxmn9xlR7fzAkg,1904
|
|
54
|
+
machineconfig/jobs/installer/custom_dev/code.py,sha256=0Hb4ToMLQX4WWyG4xfUEJMTwN01ad5VZGogu3Llqtbc,2480
|
|
54
55
|
machineconfig/jobs/installer/custom_dev/cursor.py,sha256=3xoFAYFdZqurSHXeEG-vbG0KU1TNQpBMaMgL1eW6X4k,4326
|
|
55
|
-
machineconfig/jobs/installer/custom_dev/espanso.py,sha256=
|
|
56
|
-
machineconfig/jobs/installer/custom_dev/goes.py,sha256=
|
|
57
|
-
machineconfig/jobs/installer/custom_dev/lvim.py,sha256=
|
|
58
|
-
machineconfig/jobs/installer/custom_dev/nerdfont.py,sha256=
|
|
59
|
-
machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py,sha256=
|
|
60
|
-
machineconfig/jobs/installer/custom_dev/redis.py,sha256=
|
|
56
|
+
machineconfig/jobs/installer/custom_dev/espanso.py,sha256=H1rZb4xnjs72lL0_mB0M4d7NrDyVv1sAG3NOkOrCB64,4137
|
|
57
|
+
machineconfig/jobs/installer/custom_dev/goes.py,sha256=SIRkpzkCeWMof0BnPuoEJy3KHNkVZs8J5DnoZJXb9TY,2130
|
|
58
|
+
machineconfig/jobs/installer/custom_dev/lvim.py,sha256=2-wbh_IClTFcFkSYk9EsRiv88-isSNIVX6dNZ1L5m8Q,2985
|
|
59
|
+
machineconfig/jobs/installer/custom_dev/nerdfont.py,sha256=dsPmiqP9AJCack7mNeJ8Qzo4dSOwC0bsupH0Hn3gqSg,4149
|
|
60
|
+
machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py,sha256=6IRg95ToIfw1oGNxZNZPwsjrwgJgbjQHE6My8rTe36o,6073
|
|
61
|
+
machineconfig/jobs/installer/custom_dev/redis.py,sha256=bReDLsgy37eJyTU4TXE7FQpKFi-_usQC7bwhfXvZuBU,3259
|
|
61
62
|
machineconfig/jobs/installer/custom_dev/wezterm.py,sha256=BuTVRqV5WQUS2C7FpWMU4pQWgkPt4p3VVGcE6fTVG-0,2311
|
|
62
63
|
machineconfig/jobs/installer/custom_dev/winget.py,sha256=gLdwM20jKMf2bMV3BAcOg4MkuzwF09CU5OhXvLkPoHo,5738
|
|
63
64
|
machineconfig/jobs/installer/linux_scripts/brave.sh,sha256=m01xquA4YZW3YrhJiTCvTZuLliELmRI1avYFyuE5-Ws,2119
|
|
@@ -80,11 +81,11 @@ machineconfig/jobs/linux/msc/network.sh,sha256=dmISsh0hioDheinqee3qHfo2k7ClFx6G_
|
|
|
80
81
|
machineconfig/jobs/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
82
|
machineconfig/jobs/python/check_installations.py,sha256=ksuENfJg0NAo1mWLRnsj1MpZw7Ee7eKw1nWyUQeO7fg,11096
|
|
82
83
|
machineconfig/jobs/python/create_bootable_media.py,sha256=KKtcPk0rFLQc4eNVP6nbeYX-P7Gpqi0HvfIcUM6rVVs,827
|
|
83
|
-
machineconfig/jobs/python/python_cargo_build_share.py,sha256=
|
|
84
|
-
machineconfig/jobs/python/python_ve_symlink.py,sha256=
|
|
84
|
+
machineconfig/jobs/python/python_cargo_build_share.py,sha256=vy1v32-7Tui4NK4wG5XC5hxavQ4BeMpKprUtqzBjut0,2081
|
|
85
|
+
machineconfig/jobs/python/python_ve_symlink.py,sha256=HYVkNLIOm4Zk6zX8cNOKNLSKA7un9hXiZfBjq8vcwRs,1156
|
|
85
86
|
machineconfig/jobs/python/tasks.py,sha256=hrBDQOnBmcXtauTkicVgC8J2AOGcfdFfyx0K8eI6Coc,150
|
|
86
|
-
machineconfig/jobs/python/vscode/api.py,sha256=
|
|
87
|
-
machineconfig/jobs/python/vscode/sync_code.py,sha256=
|
|
87
|
+
machineconfig/jobs/python/vscode/api.py,sha256=Et0G-VUj13D1rshYMdDrw_CUYSO7Q6XRrEQO0WjVIKU,1683
|
|
88
|
+
machineconfig/jobs/python/vscode/sync_code.py,sha256=f9hxMg_nkIsC0xvfQMboJbc-Jhap9YQrV7k7a5YSI1c,2333
|
|
88
89
|
machineconfig/jobs/windows/start_terminal.ps1,sha256=wy0fGwgb4U7xaHsONDrR4V5u9JEkG5vtt4NZUBx0ro8,473
|
|
89
90
|
machineconfig/jobs/windows/startup_file.cmd,sha256=qOqDwL0MmRB-fHauJKjOO0mhczyA3-cdRUyY1p7NCok,95
|
|
90
91
|
machineconfig/jobs/windows/archive/archive_pygraphviz.ps1,sha256=XBMaFurdY8smiLdeP3iAm2p1x4Ui_F3Ty9lHikKSfUk,708
|
|
@@ -144,14 +145,14 @@ machineconfig/scripts/python/choose_wezterm_theme.py,sha256=Hlu_EOQhLM6wYdAdY25j
|
|
|
144
145
|
machineconfig/scripts/python/cloud_copy.py,sha256=_pxA8o3ar5vH9DkrAdwafHcZMiqNCbY_IfNzKCOMJ5k,8395
|
|
145
146
|
machineconfig/scripts/python/cloud_manager.py,sha256=YN0DYLzPKtMBaks-EAVwFmkCu3XeHWMr1D21uqX5dDk,3429
|
|
146
147
|
machineconfig/scripts/python/cloud_mount.py,sha256=RFMzRUep2D5HtVXANIi-pab3EkI-W8P1IJ32k1W7xQA,6756
|
|
147
|
-
machineconfig/scripts/python/cloud_repo_sync.py,sha256=
|
|
148
|
+
machineconfig/scripts/python/cloud_repo_sync.py,sha256=PTZ4gyhMFwW77DxE86GyNQK0JDFLcMUSF69AM80SvxY,9781
|
|
148
149
|
machineconfig/scripts/python/cloud_sync.py,sha256=RWGpAfJ9fnN18yNBSgN44dzA38Hmd4879JL5r2pcyrM,3514
|
|
149
150
|
machineconfig/scripts/python/croshell.py,sha256=wYi8xWkzYzpfg8YNppmu22mvx0Gxtbs979ERO3kZS2w,8587
|
|
150
151
|
machineconfig/scripts/python/devops.py,sha256=fTEut6gTDfmNqzS8-gRyRAsmWJYPGGIt8X35Irj7Cl8,3434
|
|
151
152
|
machineconfig/scripts/python/devops_add_identity.py,sha256=JfN3ZrYMCgmt4ks_VCfnV9BIIHAsOYO3E0W0wZ15FR8,3791
|
|
152
153
|
machineconfig/scripts/python/devops_add_ssh_key.py,sha256=KaoX83KltBsmutfKhSfZjd7nP_R1hJ2OLAWRhbswO7o,6889
|
|
153
154
|
machineconfig/scripts/python/devops_backup_retrieve.py,sha256=jZe5Vki7E2GCMG8hvqUZeOONFC4cNzISoGzq_dMG4GA,5601
|
|
154
|
-
machineconfig/scripts/python/devops_devapps_install.py,sha256=
|
|
155
|
+
machineconfig/scripts/python/devops_devapps_install.py,sha256=2MZsR5aOY_z7dhgrdeffxVhq1i3kxeuthtHLpKmCA18,9333
|
|
155
156
|
machineconfig/scripts/python/devops_update_repos.py,sha256=c5qBc9cuTGDEqDHufkjDT4d_vvJsswv3tlqk9MAulYk,8063
|
|
156
157
|
machineconfig/scripts/python/dotfile.py,sha256=SRcX-9Ak1jRvF-killBTTm2IWcsNxfiLucH6ZsytAFA,2202
|
|
157
158
|
machineconfig/scripts/python/fire_agents_help_launch.py,sha256=1ymWiszfjCyPv3ofinWzfOmbzLEt3d7ntac_afLh-V4,5017
|
|
@@ -159,16 +160,16 @@ machineconfig/scripts/python/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_l
|
|
|
159
160
|
machineconfig/scripts/python/fire_agents_helper_types.py,sha256=zKu8Vr6iucaGSkCm_Tkt_WrYU7-6Nript3coYyzTXzY,295
|
|
160
161
|
machineconfig/scripts/python/fire_agents_load_balancer.py,sha256=mpqx3uaQdBXYieuvhdK-qsvLepf9oIMo3pwPj9mSEDI,1079
|
|
161
162
|
machineconfig/scripts/python/fire_jobs.py,sha256=CqtFt4VGtdEP0tbmRRZ-qU5G232jQj0umlS8C_qtQRM,15911
|
|
162
|
-
machineconfig/scripts/python/fire_jobs_args_helper.py,sha256
|
|
163
|
+
machineconfig/scripts/python/fire_jobs_args_helper.py,sha256=-gl5I-26Op12nToIpAA-YEpvn8MMkNlI5XjhUbj50I0,4273
|
|
163
164
|
machineconfig/scripts/python/fire_jobs_route_helper.py,sha256=EFWsg6F9TeSAtYQec57WtPopUbm2euGZTUZv6J4RhNE,3026
|
|
164
165
|
machineconfig/scripts/python/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
166
|
machineconfig/scripts/python/ftpx.py,sha256=l_gdJS0QB2wVZErubtZvm4HJD9HZAJxSP68sbY73xwo,10278
|
|
166
167
|
machineconfig/scripts/python/get_zellij_cmd.py,sha256=e35-18hoXM9N3PFbvbizfkNY_-63iMicieWE3TbGcCQ,576
|
|
167
168
|
machineconfig/scripts/python/gh_models.py,sha256=3BLfW25mBRiPO5VKtVm-nMlKLv-PaZDw7mObajq6F6M,5538
|
|
168
|
-
machineconfig/scripts/python/interactive.py,sha256=
|
|
169
|
-
machineconfig/scripts/python/mount_nfs.py,sha256=
|
|
169
|
+
machineconfig/scripts/python/interactive.py,sha256=W0NIGTZb0RFyoJIcp02pToRUv_WP5F7-67AOX5N46G4,11797
|
|
170
|
+
machineconfig/scripts/python/mount_nfs.py,sha256=5HmtsAelFSVzl8o_F9mBoKiuVNIyRHjvdqKzFJR1P64,3376
|
|
170
171
|
machineconfig/scripts/python/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
|
|
171
|
-
machineconfig/scripts/python/mount_ssh.py,sha256=
|
|
172
|
+
machineconfig/scripts/python/mount_ssh.py,sha256=7dYCBtkJE43rwuvhxiYzyTlJ230RFQbZOA29veYQbuU,2284
|
|
172
173
|
machineconfig/scripts/python/onetimeshare.py,sha256=bmGsNnskym5OWfIhpOfZG5jq3m89FS0a6dF5Sb8LaZM,2539
|
|
173
174
|
machineconfig/scripts/python/pomodoro.py,sha256=SPkfeoZGv8rylGiOyzQ7UK3aXZ3G2FIOuGkSuBUggOI,2019
|
|
174
175
|
machineconfig/scripts/python/repos.py,sha256=Mz-d0ubynOZaKwC6YXKiZq9ojMnKFi4J6n0UbiJYZyY,4449
|
|
@@ -177,10 +178,10 @@ machineconfig/scripts/python/repos_helper_clone.py,sha256=xW5YZEoNt3k7h9NIULhUhO
|
|
|
177
178
|
machineconfig/scripts/python/repos_helper_record.py,sha256=YEEQORfEiLddOIIgePo5eEkyQUFruFg3kc8npMvRL-o,10927
|
|
178
179
|
machineconfig/scripts/python/repos_helper_update.py,sha256=AYyKIB7eQ48yoYmFjydIhRI1lV39TBv_S4_LCa-oKuQ,11042
|
|
179
180
|
machineconfig/scripts/python/scheduler.py,sha256=rKhssuxkD697EY6qaV6CSdNhxpAQLDWO4fE8GMCQ9FA,3061
|
|
180
|
-
machineconfig/scripts/python/sessions.py,sha256
|
|
181
|
+
machineconfig/scripts/python/sessions.py,sha256=moLdAPHMn90zd6blugplQ2V__xurOcMBH2WRYqRf-hA,8415
|
|
181
182
|
machineconfig/scripts/python/share_terminal.py,sha256=biuG35YiknTMVr3Mzs4bBZwEq53JcuBRlzMTp6eY90M,5009
|
|
182
183
|
machineconfig/scripts/python/snapshot.py,sha256=aDvKeoniZaeTSNv9zWBUajaj2yagAxVdfuvO1_tgq5Y,1026
|
|
183
|
-
machineconfig/scripts/python/start_slidev.py,sha256=
|
|
184
|
+
machineconfig/scripts/python/start_slidev.py,sha256=0rVK7uQL70FAYvVk1SQ-tKRlT1fEj-5wIKCLAnM4-9M,4913
|
|
184
185
|
machineconfig/scripts/python/start_terminals.py,sha256=DRWbMZumhPmL0DvvsCsbRNFL5AVQn1SgaziafTio3YQ,6149
|
|
185
186
|
machineconfig/scripts/python/t4.py,sha256=cZ45iWzS254V5pmVvq8wCw7jAuDhzr8G2Arzay76saU,316
|
|
186
187
|
machineconfig/scripts/python/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
|
|
@@ -217,9 +218,9 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-
|
|
|
217
218
|
machineconfig/scripts/python/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
218
219
|
machineconfig/scripts/python/helpers/cloud_helpers.py,sha256=GA-bxXouUmknk9fyQAsPT-Xl3RG9-yBed71a2tu9Pig,4914
|
|
219
220
|
machineconfig/scripts/python/helpers/helpers2.py,sha256=ZdqeF1MLlaBRwoqsQAqnHi4b8rW0byFCBnbyCrPKkoA,7336
|
|
220
|
-
machineconfig/scripts/python/helpers/helpers4.py,sha256=
|
|
221
|
+
machineconfig/scripts/python/helpers/helpers4.py,sha256=rwAy7HK1CbKQZORzQMQULSKNHj0i4jo7KbUXj3qLG9I,4765
|
|
221
222
|
machineconfig/scripts/python/helpers/helpers5.py,sha256=dPBvA9Tcyx9TMgM6On49A1CueGMhBdRzikDnlJGf3J0,1123
|
|
222
|
-
machineconfig/scripts/python/helpers/repo_sync_helpers.py,sha256=
|
|
223
|
+
machineconfig/scripts/python/helpers/repo_sync_helpers.py,sha256=umN6ktxjddkraC_h8w50D72olxHcyT4kn-CUq6_C_xI,5448
|
|
223
224
|
machineconfig/scripts/windows/agents.ps1,sha256=DqdrC_Xc2rwQ6kGzT0xh5CJz4B_0p5ZwB7s8XE6rPCM,77
|
|
224
225
|
machineconfig/scripts/windows/choose_wezterm_theme.ps1,sha256=LiXJ0a4LKjb6E-oH_bAg6DjegV4SqDUdiMp_svGCFlI,95
|
|
225
226
|
machineconfig/scripts/windows/cloud_copy.ps1,sha256=llTFhN2uInZTcoZYZuuhJcf5Ifo5MF226I5MpOzvc3A,82
|
|
@@ -376,23 +377,23 @@ machineconfig/setup_windows/web_shortcuts/croshell.ps1,sha256=cTQnegGLGYhuFY3Yuu
|
|
|
376
377
|
machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=-76toOluRnxtgo6NuAHgHWMnZQT3zroeCBBLkMTd13g,522
|
|
377
378
|
machineconfig/setup_windows/web_shortcuts/ssh.ps1,sha256=Tj9axEugJE7I3AQ0w1eUGLPb8ufME5jvU5S7VUjlLJE,424
|
|
378
379
|
machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
379
|
-
machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=
|
|
380
|
+
machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=D_U_q31sqyzR7QRi_FUFMYuOgVbp15VBlKc51VbFjp0,6807
|
|
380
381
|
machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
381
382
|
machineconfig/utils/accessories.py,sha256=W_9dLzjwNTW5JQk_pe3B2ijQ1nA2-8Kdg2r7VBtzgQs,4340
|
|
382
|
-
machineconfig/utils/code.py,sha256=
|
|
383
|
-
machineconfig/utils/installer.py,sha256=
|
|
383
|
+
machineconfig/utils/code.py,sha256=5W6kP9SMWdApbFDq0fklI_31RWt7E9ByioxU7XX00HE,5662
|
|
384
|
+
machineconfig/utils/installer.py,sha256=p2Mr5GQ8ZsUriV9qatXDwllBqGvYNfI-TQEKXwA8gcA,9961
|
|
384
385
|
machineconfig/utils/io.py,sha256=ZXB3aataS1IZ_0WMcCRSmoN1nbkvEO-bWYcs-TpngqU,2872
|
|
385
386
|
machineconfig/utils/links.py,sha256=riNUrG8aGElRszdOPOic4M2AyOcpdcth_-y8JEiZpJ4,10253
|
|
386
387
|
machineconfig/utils/notifications.py,sha256=vvdsY5IX6XEiILTnt5lNyHxhCi0ljdGX2T_67VRfrG4,9009
|
|
387
388
|
machineconfig/utils/options.py,sha256=8pG-apcc28xxJ5BQiACsGNTKwWtkQyH3hCtzBEhokK8,8366
|
|
388
|
-
machineconfig/utils/path_extended.py,sha256=
|
|
389
|
+
machineconfig/utils/path_extended.py,sha256=0Ev2BgkiruTDAYFHxsGzPvQ9EU3OGCGzx5ozZpO6UU8,53129
|
|
389
390
|
machineconfig/utils/path_helper.py,sha256=jqOf3TAlw5cqSp4HBAlOqjAR_bzC8_fvjA-_-CooI6Y,8030
|
|
390
391
|
machineconfig/utils/procs.py,sha256=Bm-yopmj19yiBO9tywJHEcs9rZmeRyJqbgTSe216LTU,11349
|
|
391
392
|
machineconfig/utils/scheduler.py,sha256=bUHDviS_HE9_6LaA1k9Nnfz5rr2FJIfrk5qO2FJ-oUs,15119
|
|
392
393
|
machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
|
|
393
394
|
machineconfig/utils/source_of_truth.py,sha256=GnjcVkKm11RyZFHGnPbne5YDEBYoZ5yryBNkpfGC7O4,854
|
|
394
|
-
machineconfig/utils/ssh.py,sha256=
|
|
395
|
-
machineconfig/utils/terminal.py,sha256=
|
|
395
|
+
machineconfig/utils/ssh.py,sha256=KTUp42nT4Vuh350_EvArQoR2N5iVXrc2BFld93fRUX4,20919
|
|
396
|
+
machineconfig/utils/terminal.py,sha256=Jqojb1xta_SLftUIXmWK7Mn87e1NJXavC5Hbf3fRT-I,11795
|
|
396
397
|
machineconfig/utils/upgrade_packages.py,sha256=H96zVJEWXJW07nh5vhjuSCrPtXGqoUb7xeJsFYYdmCI,3330
|
|
397
398
|
machineconfig/utils/ve.py,sha256=L-6PBXnQGXThiwWgheJMQoisAZOZA6SVCbGw2J-GFnI,2414
|
|
398
399
|
machineconfig/utils/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -407,8 +408,8 @@ machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=pTxvLzIpD5RF
|
|
|
407
408
|
machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
|
|
408
409
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
|
|
409
410
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
|
|
410
|
-
machineconfig-4.
|
|
411
|
-
machineconfig-4.
|
|
412
|
-
machineconfig-4.
|
|
413
|
-
machineconfig-4.
|
|
414
|
-
machineconfig-4.
|
|
411
|
+
machineconfig-4.97.dist-info/METADATA,sha256=TASblKhYFS5DONxX0YvajOjOzNPHg_WvLeSXnkgAmFI,7061
|
|
412
|
+
machineconfig-4.97.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
413
|
+
machineconfig-4.97.dist-info/entry_points.txt,sha256=LcwklRJPY_uKBvStgtOJn5G_pmFCEdpgRNzUUc6twAQ,1134
|
|
414
|
+
machineconfig-4.97.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
415
|
+
machineconfig-4.97.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|