machineconfig 6.77__py3-none-any.whl → 6.79__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.

Files changed (43) hide show
  1. machineconfig/jobs/installer/custom/boxes.py +61 -0
  2. machineconfig/jobs/installer/installer_data.json +43 -9
  3. machineconfig/jobs/installer/package_groups.py +6 -5
  4. machineconfig/scripts/linux/mcfgs +29 -5
  5. machineconfig/scripts/python/ai/initai.py +0 -18
  6. machineconfig/scripts/python/croshell.py +6 -6
  7. machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
  8. machineconfig/scripts/python/fire_jobs.py +15 -1
  9. machineconfig/scripts/python/helpers_devops/cli_config.py +1 -1
  10. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -7
  11. machineconfig/scripts/python/helpers_devops/cli_self.py +3 -3
  12. machineconfig/scripts/python/helpers_devops/cli_utils.py +88 -9
  13. machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +15 -1
  14. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +1 -0
  15. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +1 -1
  16. machineconfig/scripts/python/nw/mount_nfs +1 -1
  17. machineconfig/scripts/python/utils.py +10 -4
  18. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
  19. machineconfig/setup_linux/web_shortcuts/interactive.sh +1 -1
  20. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +1 -1
  21. machineconfig/utils/code.py +1 -1
  22. machineconfig/utils/meta.py +10 -3
  23. machineconfig/utils/ssh.py +1 -1
  24. machineconfig/utils/upgrade_packages.py +1 -4
  25. {machineconfig-6.77.dist-info → machineconfig-6.79.dist-info}/METADATA +1 -1
  26. {machineconfig-6.77.dist-info → machineconfig-6.79.dist-info}/RECORD +37 -42
  27. {machineconfig-6.77.dist-info → machineconfig-6.79.dist-info}/entry_points.txt +1 -1
  28. machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
  29. machineconfig/jobs/python/__init__.py +0 -0
  30. machineconfig/jobs/python/python_ve_symlink.py +0 -37
  31. machineconfig/jobs/python/vscode/api.py +0 -57
  32. machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
  33. machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
  34. /machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +0 -0
  35. /machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +0 -0
  36. /machineconfig/jobs/{windows/archive → installer/powershell_scripts}/archive_pygraphviz.ps1 +0 -0
  37. /machineconfig/jobs/{windows/archive → installer/powershell_scripts}/openssh-server_add_key.ps1 +0 -0
  38. /machineconfig/jobs/{windows/archive → installer/powershell_scripts}/openssh-server_copy-ssh-id.ps1 +0 -0
  39. /machineconfig/scripts/python/{entry.py → mcfg.py} +0 -0
  40. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  41. /machineconfig/setup_linux/{nix → others}/cli_installation.sh +0 -0
  42. {machineconfig-6.77.dist-info → machineconfig-6.79.dist-info}/WHEEL +0 -0
  43. {machineconfig-6.77.dist-info → machineconfig-6.79.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,61 @@
1
+
2
+
3
+ import platform
4
+ from typing import Optional
5
+
6
+ from rich.console import Console
7
+ from rich.panel import Panel
8
+ from machineconfig.utils.installer_utils.installer_abc import WINDOWS_INSTALL_PATH
9
+
10
+ from machineconfig.utils.installer_utils.installer_class import Installer
11
+ from machineconfig.utils.schemas.installer.installer_types import InstallerData
12
+
13
+ installer_data_modified: InstallerData = {
14
+ "appName": "boxes",
15
+ "repoURL": "https://github.com/ascii-boxes/boxes",
16
+ "doc": "📦 ASCI draws boxes around text.",
17
+ "fileNamePattern": {
18
+ "amd64": {
19
+ "windows": "boxes-{version}-intel-win32.zip",
20
+ "linux": None,
21
+ "macos": None
22
+ },
23
+ "arm64": {
24
+ "linux": None,
25
+ "macos": None,
26
+ "windows": None
27
+ }
28
+ }
29
+ }
30
+
31
+ def main(installer_data: InstallerData, version: Optional[str] = None) -> None:
32
+ console = Console()
33
+ _ = installer_data
34
+ console.print(
35
+ Panel.fit(
36
+ "\n".join([f"🖥️ Platform: {platform.system()}", f"🔄 Version: {'latest' if version is None else version}"]),
37
+ title="📦 Boxes Installer",
38
+ border_style="blue",
39
+ )
40
+ )
41
+
42
+ installer = Installer(installer_data=installer_data_modified)
43
+ downloaded, _version_to_be_installed = installer.download(version=version)
44
+ decomp_path = downloaded.decompress()
45
+ from pathlib import Path
46
+ for item in decomp_path.rglob("*"):
47
+ if "boxes.exe" in item.name:
48
+ dest_exe = Path(WINDOWS_INSTALL_PATH) / "boxes.exe"
49
+ if dest_exe.exists():
50
+ dest_exe.unlink()
51
+ item.rename(dest_exe)
52
+ if "boxes.cfg" in item.name:
53
+ dest_cfg = Path(WINDOWS_INSTALL_PATH) / "boxes.cfg"
54
+ if dest_cfg.exists():
55
+ dest_cfg.unlink()
56
+ item.rename(dest_cfg)
57
+ console.print("📦 Boxes downloaded and decompressed.", style="bold green")
58
+
59
+
60
+ if __name__ == "__main__":
61
+ pass
@@ -173,11 +173,11 @@
173
173
  },
174
174
  {
175
175
  "appName": "boxes",
176
- "repoURL": "https://github.com/ascii-boxes/boxes",
176
+ "repoURL": "CMD",
177
177
  "doc": "📦 ASCI draws boxes around text.",
178
178
  "fileNamePattern": {
179
179
  "amd64": {
180
- "windows": "boxes-{version}-intel-win32.zip",
180
+ "windows": "boxes.py",
181
181
  "linux": null,
182
182
  "macos": null
183
183
  },
@@ -1208,6 +1208,40 @@
1208
1208
  }
1209
1209
  }
1210
1210
  },
1211
+ {
1212
+ "appName": "pgweb",
1213
+ "repoURL": "https://github.com/sosedoff/pgweb/",
1214
+ "doc": "🗃️ Web-based PostgreSQL database browser written in Go",
1215
+ "fileNamePattern": {
1216
+ "amd64": {
1217
+ "linux": "pgweb-linux-amd64.zip",
1218
+ "macos": "pgweb_darwin_amd64.zip",
1219
+ "windows": "pgweb_windows_amd64.zip"
1220
+ },
1221
+ "arm64": {
1222
+ "linux": "pgweb-linux-arm64.zip",
1223
+ "macos": "pgweb_darwin_arm64.zip",
1224
+ "windows": "pgweb_windows_arm64.zip"
1225
+ }
1226
+ }
1227
+ },
1228
+ {
1229
+ "appName": "dbgate",
1230
+ "repoURL": "https://github.com/dbgate/dbgate",
1231
+ "doc": "🗃️ Cross-platform database manager for developers and database administrators",
1232
+ "fileNamePattern": {
1233
+ "amd64": {
1234
+ "linux": "dbgate-{version}-linux_x64.tar.gz",
1235
+ "macos": "dbgate-{version}-mac_x64.zip",
1236
+ "windows": "dbgate-windows-latest.zip"
1237
+ },
1238
+ "arm64": {
1239
+ "linux": "dbgate-{version}-linux_arm64.tar.gz",
1240
+ "macos": "dbgate-{version}-mac_arm64.zip",
1241
+ "windows": "dbgate-windows-latest-arm64.exe"
1242
+ }
1243
+ }
1244
+ },
1211
1245
  {
1212
1246
  "appName": "duckdb",
1213
1247
  "repoURL": "https://github.com/duckdb/duckdb",
@@ -2184,14 +2218,14 @@
2184
2218
  "doc": "Kilocode agent extension in the terminal",
2185
2219
  "fileNamePattern": {
2186
2220
  "amd64": {
2187
- "linux": "npm install -g @kilocode/cli@alpha",
2188
- "windows": "npm install -g @kilocode/cli@alpha",
2189
- "macos": "npm install -g @kilocode/cli@alpha"
2221
+ "linux": "npm install -g @kilocode/cli",
2222
+ "windows": "npm install -g @kilocode/cli",
2223
+ "macos": "npm install -g @kilocode/cli"
2190
2224
  },
2191
2225
  "arm64": {
2192
- "linux": "npm install -g @kilocode/cli@alpha",
2193
- "windows": "npm install -g @kilocode/cli@alpha",
2194
- "macos": "npm install -g @kilocode/cli@alpha"
2226
+ "linux": "npm install -g @kilocode/cli",
2227
+ "windows": "npm install -g @kilocode/cli",
2228
+ "macos": "npm install -g @kilocode/cli"
2195
2229
  }
2196
2230
  }
2197
2231
  },
@@ -2247,7 +2281,7 @@
2247
2281
  }
2248
2282
  },
2249
2283
  {
2250
- "appName": "opencode-ai",
2284
+ "appName": "opencode",
2251
2285
  "repoURL": "CMD",
2252
2286
  "doc": "Terminal-based CLI agents and tools for productivity and coding.",
2253
2287
  "fileNamePattern": {
@@ -1,9 +1,9 @@
1
1
  from typing import Literal, TypeAlias, Union
2
2
 
3
3
  # AI/LLM Tools - AI-powered coding and chat assistants
4
- BUNDLE_AI = [
4
+ AGENTS = [
5
5
  "aider",
6
- "github-copilot-cli",
6
+ "copilot",
7
7
  "gemini",
8
8
  "crush",
9
9
  "opencode-ai",
@@ -14,6 +14,8 @@ BUNDLE_AI = [
14
14
  "qwen-code",
15
15
  "cursor-cli",
16
16
  "droid",
17
+ "kilocode",
18
+ "cline",
17
19
  "auggie",
18
20
  ]
19
21
 
@@ -217,7 +219,7 @@ PACKAGES_TERMINAL_SHELL = [
217
219
  PACKAGE_GROUPS: TypeAlias = Literal[
218
220
  "ESSENTIAL",
219
221
  "DEV",
220
- "AI_TOOLS",
222
+ "AGENTS",
221
223
  "TUNNELING",
222
224
  "TERMINAL_EMULATORS",
223
225
  "BROWSERS",
@@ -249,7 +251,6 @@ ESSENTIAL = [
249
251
  *PACKAGES_SYSTEM_MONITORS,
250
252
  *PACKAGES_TERMINAL_SHELL,
251
253
  *PACKAGES_FILE,
252
- *BUNDLE_AI,
253
254
  ]
254
255
  DEV = [
255
256
  *PACKAGES_TERMINAL_EMULATORS,
@@ -267,7 +268,7 @@ DEV = [
267
268
  PACKAGE_GROUP2NAMES: dict[PACKAGE_GROUPS, list[str]] = {
268
269
  "ESSENTIAL": ESSENTIAL,
269
270
  "DEV": DEV,
270
- "AI_TOOLS": BUNDLE_AI,
271
+ "AGENTS": AGENTS,
271
272
  "TERMINAL_EMULATORS": PACKAGES_TERMINAL_EMULATORS,
272
273
  "BROWSERS": PACKAGES_BROWSERS,
273
274
  "CODE_EDITORS": PACKAGES_CODE_EDITORS,
@@ -1,14 +1,38 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
1
3
 
4
+ RANDOM_NAME=$(date +%s%N | sha256sum | head -c 16)
5
+ OP_DIR="$HOME/tmp_results/tmp_scripts/machineconfig"
6
+ OP_PROGRAM_PATH="$OP_DIR/${RANDOM_NAME}.sh"
7
+ export OP_PROGRAM_PATH
2
8
 
9
+ # ANSI color/style codes
10
+ BOLD="\033[1m"
11
+ RESET="\033[0m"
12
+ GREEN="\033[32m"
13
+ YELLOW="\033[33m"
14
+ BLUE="\033[34m"
15
+ RED="\033[31m"
3
16
 
4
- RANDOM_NAME=$(date +%s%N | sha256sum | head -c 16)
5
- export OP_PROGRAM_PATH="$HOME/tmp_results/tmp_scripts/machineconfig/${RANDOM_NAME}.sh"
17
+ timestamp=$(date -u +"%Y-%m-%d %H:%M:%SZ")
18
+
19
+ printf "%b\n" "${BOLD}${BLUE}🛠️ machineconfig — running mcfg${RESET}"
20
+ printf "%b\n" "${BLUE}Timestamp:${RESET} ${timestamp}"
21
+ printf "%b\n" "${BLUE}Op program path:${RESET} ${OP_PROGRAM_PATH}"
6
22
 
23
+ # Forward arguments to the mcfg command
7
24
  mcfg "$@"
8
25
 
9
26
  if [[ -f "$OP_PROGRAM_PATH" ]]; then
10
- echo "Found op program at: $OP_PROGRAM_PATH"
11
- bash "$OP_PROGRAM_PATH"
27
+ printf "%b\n" "${GREEN}✅ Found op program:${RESET} ${OP_PROGRAM_PATH}"
28
+ printf "%b\n" "${GREEN}▶ Running...${RESET}"
29
+ . "$OP_PROGRAM_PATH"
30
+ status=$?
31
+ if [[ $status -eq 0 ]]; then
32
+ printf "%b\n" "${GREEN}✅ Completed successfully (exit ${status})${RESET}"
33
+ else
34
+ printf "%b\n" "${YELLOW}⚠️ Program exited with status ${status}${RESET}"
35
+ fi
12
36
  else
13
- echo "no op program found"
37
+ printf "%b\n" "${YELLOW}⚠️ No op program found at: ${OP_PROGRAM_PATH}${RESET}"
14
38
  fi
@@ -15,24 +15,6 @@ def add_ai_configs(repo_root: Path) -> None:
15
15
  repo_root_resolved = get_repo_root(repo_root)
16
16
  if repo_root_resolved is not None:
17
17
  repo_root = repo_root_resolved # this means you can run the command from any subdirectory of the repo.
18
-
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
35
-
36
18
  dot_ai_dir = repo_root.joinpath(".ai")
37
19
  dot_ai_dir.mkdir(parents=True, exist_ok=True)
38
20
  dot_scripts_dir = repo_root.joinpath(".scripts")
@@ -125,16 +125,16 @@ def croshell(
125
125
  pass
126
126
  if visidata:
127
127
  if file_obj.suffix == ".json":
128
- fire_line = f"uv run --with visidata vd {str(file_obj)}"
128
+ fire_line = f"uv run --python 3.14 --with visidata vd {str(file_obj)}"
129
129
  else:
130
- fire_line = f"uv run --with visidata,pyarrow vd {str(file_obj)}"
130
+ fire_line = f"uv run --python 3.14 --with visidata,pyarrow vd {str(file_obj)}"
131
131
  elif marimo:
132
132
  if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--with marimo --project "{str(Path.home().joinpath("code/machineconfig"))}" """
133
- else: requirements = """--with "marimo,machineconfig[plot]>=6.57" """
133
+ else: requirements = """--python 3.14 --with "marimo,machineconfig[plot]>=6.57" """
134
134
  fire_line = f"""
135
135
  cd {str(pyfile.parent)}
136
- uv run --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
137
- uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
136
+ uv run --python 3.14 --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
137
+ uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
138
138
  """
139
139
  elif jupyter:
140
140
  if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with jupyterlab """
@@ -153,7 +153,7 @@ code --new-window {str(pyfile)}
153
153
  if interpreter == "ipython": profile = f" --profile {ipython_profile} --no-banner"
154
154
  else: profile = ""
155
155
  if Path.home().joinpath("code/machineconfig").exists(): ve_line = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
156
- else: ve_line = """--with "machineconfig[plot]>=6.57" """
156
+ else: ve_line = """--python 3.14 --with "machineconfig[plot]>=6.57" """
157
157
  # ve_path_maybe, ipython_profile_maybe = get_ve_path_and_ipython_profile(Path.cwd())
158
158
  # --python 3.14
159
159
  fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=6.77",
5
+ # "machineconfig>=6.79",
6
6
  # "textual",
7
7
  # "pyperclip",
8
8
  # ]
@@ -42,6 +42,18 @@ def route(args: FireJobArgs, fire_args: str = "") -> None:
42
42
  if ipy_profile is None:
43
43
  ipy_profile = "default"
44
44
 
45
+ if args.marimo:
46
+ tmp_dir = PathExtended.tmp().joinpath(f"tmp_scripts/marimo/{choice_file.stem}_{randstr()}")
47
+ tmp_dir.mkdir(parents=True, exist_ok=True)
48
+ script = f"""
49
+ cd {tmp_dir}
50
+ uv run --python 3.14 --with marimo marimo convert {choice_file} -o marimo_nb.py
51
+ uv run --project {repo_root} --with marimo marimo edit --host 0.0.0.0 marimo_nb.py
52
+ """
53
+ from machineconfig.utils.code import exit_then_run_shell_script
54
+ print(f"🚀 Launching Marimo notebook for `{choice_file}`...")
55
+ exit_then_run_shell_script(script)
56
+ return
45
57
 
46
58
  # ========================= preparing kwargs_dict
47
59
  if choice_file.suffix == ".py":
@@ -129,7 +141,7 @@ except ImportError as _ex:
129
141
  elif args.module:
130
142
  # both selected function and kwargs are mentioned in the made up script, therefore no need for fire module.
131
143
  command = f"{exe} {choice_file} "
132
- elif choice_function is not None:
144
+ elif choice_function is not None and choice_file.suffix == ".py":
133
145
  command = f"{exe} -m fire {choice_file} {choice_function} {fire_args}"
134
146
  elif args.streamlit:
135
147
  # for .streamlit config to work, it needs to be in the current directory.
@@ -214,6 +226,7 @@ def fire(
214
226
  choose_function: Annotated[bool, typer.Option("--choose-function", "-c", help="Choose function interactively")] = False,
215
227
  loop: Annotated[bool, typer.Option("--loop", "-l", help="Infinite recursion (runs again after completion/interruption)")] = False,
216
228
  jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="Open in a jupyter notebook")] = False,
229
+ marimo: Annotated[bool, typer.Option("--marimo", "-M", help="Open in a marimo notebook")] = False,
217
230
  module: Annotated[bool, typer.Option("--module", "-m", help="Launch the main file")] = False,
218
231
  optimized: Annotated[bool, typer.Option("--optimized", "-O", help="Run the optimized version of the function")] = False,
219
232
  zellij_tab: Annotated[Optional[str], typer.Option("--zellij-tab", "-z", help="Open in a new zellij tab")] = None,
@@ -244,6 +257,7 @@ def fire(
244
257
  choose_function=choose_function,
245
258
  loop=loop,
246
259
  jupyter=jupyter,
260
+ marimo=marimo,
247
261
  submit_to_cloud=submit_to_cloud,
248
262
  remote=remote,
249
263
  module=module,
@@ -46,7 +46,7 @@ def path():
46
46
  uv_with = ["textual"]
47
47
  uv_project_dir = None
48
48
  if not Path.home().joinpath("code/machineconfig").exists():
49
- uv_with.append("machineconfig>=6.77")
49
+ uv_with.append("machineconfig>=6.79")
50
50
  else:
51
51
  uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
52
52
  run_shell_script(get_uv_command_executing_python_script(python_script=path.read_text(encoding="utf-8"), uv_with=uv_with, uv_project_dir=uv_project_dir)[0])
@@ -5,13 +5,6 @@ from typing import Annotated
5
5
  import typer
6
6
 
7
7
 
8
- # @app.command()
9
- # def symlinks_new():
10
- # """🆕 SYMLINKS new. consider moving to the new config command, then may be merge it with the dotfile subcommand"""
11
- # import machineconfig.jobs.python.python_ve_symlink as helper
12
- # helper.main()
13
-
14
-
15
8
  def main(
16
9
  file: Annotated[str, typer.Argument(help="file/folder path.")],
17
10
  overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="Overwrite.")] = False,
@@ -41,9 +41,9 @@ def install(no_copy_assets: Annotated[bool, typer.Option("--no-assets-copy", "-n
41
41
  else:
42
42
  import platform
43
43
  if platform.system() == "Windows":
44
- run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=6.77" """)
44
+ run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=6.79" """)
45
45
  else:
46
- run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.77" """)
46
+ run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.79" """)
47
47
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
48
48
  if not no_copy_assets:
49
49
  create_default_shell_profile() # involves copying assets too
@@ -68,7 +68,7 @@ def navigate():
68
68
  path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
69
69
  from machineconfig.utils.code import run_shell_script
70
70
  if Path.home().joinpath("code/machineconfig").exists(): executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
71
- else: executable = """--with "machineconfig>=6.77,textual" """
71
+ else: executable = """--with "machineconfig>=6.79,textual" """
72
72
  run_shell_script(f"""uv run {executable} {path}""")
73
73
 
74
74
 
@@ -1,10 +1,8 @@
1
1
 
2
2
 
3
3
  import typer
4
- from typing import Annotated, Optional, TypedDict
4
+ from typing import Annotated, Literal, Optional, TypedDict
5
5
  from pathlib import Path
6
- import subprocess
7
- import requests
8
6
 
9
7
 
10
8
  def download(
@@ -17,7 +15,8 @@ def download(
17
15
  raise typer.Exit(code=1)
18
16
  typer.echo(f"📥 Downloading from: {url}")
19
17
  download_path = Path(output) if output else Path(url.split("/")[-1])
20
-
18
+ import requests
19
+ import subprocess
21
20
  try:
22
21
  response = requests.get(url, allow_redirects=True, stream=True, timeout=60)
23
22
  response.raise_for_status()
@@ -79,15 +78,14 @@ def download(
79
78
 
80
79
 
81
80
  def merge_pdfs(
82
- pdf1: Annotated[str, typer.Argument(..., help="Path to the first PDF file.")],
83
- pdf2: Annotated[str, typer.Argument(..., help="Path to the second PDF file.")],
81
+ pdfs: Annotated[list[str], typer.Argument(..., help="Paths to the PDF files to merge.")],
84
82
  output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output merged PDF file path.")] = None,
85
83
  compress: Annotated[bool, typer.Option("--compress", "-c", help="Compress the output PDF.")] = False,
86
84
  ) -> None:
87
- def merge_pdfs_internal(pdf1: str, pdf2: str, output: str | None, compress: bool) -> None:
85
+ def merge_pdfs_internal(pdfs: list[str], output: str | None, compress: bool) -> None:
88
86
  from pypdf import PdfReader, PdfWriter
89
87
  writer = PdfWriter()
90
- for pdf_path in [pdf1, pdf2]:
88
+ for pdf_path in pdfs:
91
89
  reader = PdfReader(pdf_path)
92
90
  for page in reader.pages:
93
91
  writer.add_page(page)
@@ -111,12 +109,64 @@ def merge_pdfs(
111
109
  writer.write(output_path)
112
110
  print(f"✅ Merged PDF saved to: {output_path}")
113
111
  from machineconfig.utils.meta import lambda_to_python_script
114
- code = lambda_to_python_script(lambda : merge_pdfs_internal(pdf1=pdf1, pdf2=pdf2, output=output, compress=compress), in_global=True, import_module=False)
112
+ code = lambda_to_python_script(lambda : merge_pdfs_internal(pdfs=pdfs, output=output, compress=compress), in_global=True, import_module=False)
115
113
  from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
116
114
  uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=["pypdf"], uv_project_dir=None)
117
115
  run_shell_script(uv_command)
118
116
 
119
117
 
118
+ def compress_pdf(
119
+ pdf_input: Annotated[str, typer.Argument(..., help="Path to the input PDF file to compress.")],
120
+ output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output compressed PDF file path.")] = None,
121
+ quality: Annotated[int, typer.Option("--quality", "-q", help="JPEG quality for image compression (0-100, 0=no change, 100=best).")] = 85,
122
+ image_dpi: Annotated[int, typer.Option("--image-dpi", "-d", help="Target DPI for image resampling. If set, images above this DPI will be downsampled.")] = 0,
123
+ # remove_images: Annotated[bool, typer.Option("--remove-images", "-r", help="Remove all images from the PDF.")] = False,
124
+ compress_streams: Annotated[bool, typer.Option("--compress-streams", "-c", help="Compress uncompressed streams.")] = True,
125
+ use_objstms: Annotated[bool, typer.Option("--object-streams", "-s", help="Use object streams for additional compression.")] = True,
126
+ ) -> None:
127
+ def compress_pdf_internal(pdf_input: str, output: str | None, quality: int, image_dpi: int, compress_streams: bool, use_objstms: bool) -> None:
128
+ import pymupdf
129
+ from pathlib import Path
130
+ output_path = output if output else pdf_input.replace(".pdf", "_compressed.pdf")
131
+ doc = pymupdf.open(pdf_input)
132
+ try:
133
+ # if remove_images:
134
+ # for page in doc:
135
+ # page.remove_images()
136
+ if quality > 0 or image_dpi > 0:
137
+ doc.rewrite_images(
138
+ dpi_threshold=image_dpi if image_dpi > 0 else None,
139
+ dpi_target=max(72, image_dpi - 10) if image_dpi > 72 else 72,
140
+ quality=quality,
141
+ lossy=True,
142
+ lossless=True,
143
+ )
144
+ doc.save(
145
+ output_path,
146
+ deflate=compress_streams,
147
+ garbage=3,
148
+ use_objstms=1 if use_objstms else 0,
149
+ )
150
+ input_size = Path(pdf_input).stat().st_size
151
+ output_size = Path(output_path).stat().st_size
152
+ ratio = (1 - output_size / input_size) * 100
153
+ print(f"✅ Compressed PDF saved to: {output_path}")
154
+ print(f" Original: {input_size / 1024 / 1024:.2f} MB")
155
+ print(f" Compressed: {output_size / 1024 / 1024:.2f} MB")
156
+ print(f" Reduction: {ratio:.1f}%")
157
+ finally:
158
+ doc.close()
159
+ from machineconfig.utils.meta import lambda_to_python_script
160
+ code = lambda_to_python_script(
161
+ lambda: compress_pdf_internal(pdf_input=pdf_input, output=output, quality=quality, image_dpi=image_dpi, compress_streams=compress_streams, use_objstms=use_objstms),
162
+ in_global=True,
163
+ import_module=False,
164
+ )
165
+ from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
166
+ uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=["pymupdf"], uv_project_dir=None)
167
+ run_shell_script(uv_command)
168
+
169
+
120
170
  class MachineSpecs(TypedDict):
121
171
  system: str
122
172
  distro: str
@@ -140,3 +190,32 @@ def get_machine_specs() -> MachineSpecs:
140
190
  import json
141
191
  path.write_text(json.dumps(specs, indent=4), encoding="utf-8")
142
192
  return specs
193
+
194
+
195
+ def init_project(python: Annotated[Literal["3.13", "3.14"], typer.Option("--python", "-p", help="Python version for the uv virtual environment.")]= "3.13") -> None:
196
+ _ = python
197
+ repo_root = Path.cwd()
198
+ if not (repo_root / "pyproject.toml").exists():
199
+ typer.echo("❌ Error: pyproject.toml not found.", err=True)
200
+ raise typer.Exit(code=1)
201
+ print(f"Adding group `plot` with common data science and plotting packages...")
202
+ script = """
203
+ uv add --group plot \
204
+ # Data & computation
205
+ numpy pandas polars duckdb-engine python-magic \
206
+ # Plotting / visualization
207
+ matplotlib plotly kaleido \
208
+ # Notebooks / interactive
209
+ ipython ipykernel jupyterlab nbformat marimo \
210
+ # Code analysis / type checking / linting
211
+ mypy pyright ruff pylint pyrefly \
212
+ # Packaging / build / dev
213
+ cleanpy \
214
+ # CLI / debugging / utilities
215
+ ipdb pudb \
216
+ # Type hints for packages
217
+ types-python-dateutil types-pyyaml types-requests types-tqdm \
218
+ types-mysqlclient types-paramiko types-pytz types-sqlalchemy types-toml types-urllib3 \
219
+ """
220
+ from machineconfig.utils.code import run_shell_script
221
+ run_shell_script(script)
@@ -2,7 +2,21 @@
2
2
  from typing import Literal, TypeAlias, TypedDict
3
3
 
4
4
 
5
- AGENTS: TypeAlias = Literal["cursor-agent", "gemini", "crush", "q", "opencode"]
5
+ # Vscode extensions for AI-assisted coding.
6
+ # Github copilot
7
+ # Roo
8
+ # Cline
9
+ # Kilocode
10
+ # Continue
11
+ # CodeGPT
12
+ # qodo (and cli)
13
+
14
+ # Editors based on AI
15
+ # Kiro
16
+ # Cursor
17
+ # Warp
18
+
19
+ AGENTS: TypeAlias = Literal["cursor-agent", "gemini", "qwen-code", "copilot", "crush", "q", "opencode", "kilocode", "cline", "auggie", "warp", "droid"]
6
20
  HOST: TypeAlias = Literal["local", "docker"]
7
21
  PROVIDER: TypeAlias = Literal["azure", "google", "aws", "openai", "anthropic", "openrouter", "xai"]
8
22
  MODEL: TypeAlias = Literal["zai/glm-4.6", "anthropic/sonnet-4.5", "google/gemini-2.5-pro", "openai/gpt-5-codex",
@@ -15,6 +15,7 @@ class FireJobArgs:
15
15
  choose_function: bool = False
16
16
  loop: bool = False
17
17
  jupyter: bool = False
18
+ marimo: bool = False
18
19
  submit_to_cloud: bool = False
19
20
  remote: bool = False
20
21
  module: bool = False
@@ -80,7 +80,7 @@ git pull originEnc master
80
80
  uv_project_dir = f"""{str(Path.home().joinpath("code/machineconfig"))}"""
81
81
  uv_with = None
82
82
  else:
83
- uv_with = ["machineconfig>=6.77"]
83
+ uv_with = ["machineconfig>=6.79"]
84
84
  uv_project_dir = None
85
85
 
86
86
  import tempfile
@@ -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>=6.77" python -m machineconfig.scripts.python.mount_nfs
8
+ uv run --python 3.14 --with "machineconfig>=6.79" 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."
@@ -1,6 +1,6 @@
1
1
 
2
2
 
3
- from machineconfig.scripts.python.helpers_devops.cli_utils import download, merge_pdfs, get_machine_specs
3
+ from machineconfig.scripts.python.helpers_devops.cli_utils import download, merge_pdfs, get_machine_specs, init_project, compress_pdf
4
4
  import typer
5
5
  from typing import Annotated, Optional
6
6
  from pathlib import Path
@@ -47,13 +47,19 @@ def get_app() -> typer.Typer:
47
47
  app.command(name="k", no_args_is_help=False, help="Choose a process to kill", hidden=True)(kill_process)
48
48
  app.command(name="download", no_args_is_help=True, help="[d] Download a file from a URL and optionally decompress it.")(download)
49
49
  app.command(name="d", no_args_is_help=True, hidden=True)(download)
50
- app.command(name="merge-pdfs", no_args_is_help=True, help="[m] Merge two PDF files into one.")(merge_pdfs)
51
- app.command(name="m", no_args_is_help=True, hidden=True)(merge_pdfs)
52
50
  app.command(name="get-machine-specs", no_args_is_help=False, help="[g] Get machine specifications.")(get_machine_specs)
53
51
  app.command(name="g", no_args_is_help=False, hidden=True)(get_machine_specs)
54
- return app
52
+ app.command(name="init-project", no_args_is_help=False, help="[i] Initialize a project with a uv virtual environment and install dev packages.")(init_project)
53
+ app.command(name="i", no_args_is_help=False, hidden=True)(init_project)
55
54
 
55
+ app.command(name="pdf-merge", no_args_is_help=True, help="[pm] Merge two PDF files into one.")(merge_pdfs)
56
+ app.command(name="pm", no_args_is_help=True, hidden=True)(merge_pdfs)
57
+ app.command(name="pdf-compress", no_args_is_help=True, help="[pc] Compress a PDF file.")(compress_pdf)
58
+ app.command(name="pc", no_args_is_help=True, hidden=True)(compress_pdf)
59
+ return app
56
60
 
61
+ # def func():
62
+ # import pycr
57
63
 
58
64
  def main():
59
65
  app = get_app()
@@ -7,7 +7,7 @@ $user = ''
7
7
  $sharePath = ''
8
8
  $driveLetter = ''
9
9
 
10
- uv run --python 3.14 --with "machineconfig>=6.77" python -m machineconfig.scripts.python.mount_ssh
10
+ uv run --python 3.14 --with "machineconfig>=6.79" 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,7 +1,7 @@
1
1
  #!/bin/bash
2
2
  . <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/uv.sh")
3
3
  mcfg() {
4
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.77" mcfg "$@"
4
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.79" mcfg "$@"
5
5
  }
6
6
  alias d="mcfg devops"
7
7
  alias c="mcfg cloud"
@@ -2,7 +2,7 @@
2
2
 
3
3
  iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
4
4
  function mcfg {
5
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.77" mcfg $args
5
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.79" mcfg $args
6
6
  }
7
7
  function d { mcfg devops @args }
8
8
  function c { mcfg cloud @args }
@@ -43,7 +43,7 @@ def run_lambda_function(lmb: Callable[[], Any], uv_with: Optional[list[str]], uv
43
43
  code = lambda_to_python_script(lmb, in_global=True, import_module=False)
44
44
  uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=uv_with, uv_project_dir=uv_project_dir)
45
45
  run_shell_script(uv_command)
46
- def run_python_script_in_marino(py_script: str, uv_project_with: Optional[str]):
46
+ def run_python_script_in_marimo(py_script: str, uv_project_with: Optional[str]):
47
47
  tmp_dir = Path.home().joinpath("tmp_results", "tmp_scripts", "marimo", randstr())
48
48
  tmp_dir.mkdir(parents=True, exist_ok=True)
49
49
  pyfile = tmp_dir / "marimo_db_explore.py"
@@ -225,10 +225,17 @@ def lambda_to_python_script(lmb: Callable[[], Any], in_global: bool, import_modu
225
225
  header = f"def {func_name}{new_sig}:\n"
226
226
  result_text = header + body_text
227
227
 
228
- if import_prefix:
229
- return f"{import_prefix}{result_text}"
230
- return f"""from typing import Optional, Any, Literal""" + "\n" + result_text
228
+ if in_global:
229
+ lines = result_text.splitlines()
230
+ if lines[-1].startswith("return "):
231
+ lines[-1] = lines[-1].replace("return ", "# return ", 1)
232
+ result_text = "\n".join(lines)
233
+ if "Optional[" in result_text or "Any" in result_text or "Union[" in result_text or "Literal[" in result_text:
234
+ result_text = "from typing import *\n\n" + result_text
231
235
 
236
+ if import_prefix:
237
+ result_text = f"{import_prefix}{result_text}"
238
+ return result_text
232
239
 
233
240
  if __name__ == "__main__":
234
241
  pass
@@ -8,7 +8,7 @@ from machineconfig.utils.terminal import Response
8
8
  from machineconfig.utils.accessories import pprint, randstr
9
9
  from machineconfig.utils.meta import lambda_to_python_script
10
10
  UV_RUN_CMD = "$HOME/.local/bin/uv run" if platform.system() != "Windows" else """& "$env:USERPROFILE/.local/bin/uv" run"""
11
- MACHINECONFIG_VERSION = "machineconfig>=6.77"
11
+ MACHINECONFIG_VERSION = "machineconfig>=6.79"
12
12
  DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
13
13
 
14
14
  class SSH:
@@ -1,3 +1,4 @@
1
+
1
2
  """
2
3
 
3
4
  Generate uv add commands from pyproject.toml dependency groups.
@@ -8,10 +9,6 @@ rm ./uv.lock
8
9
  rm -rfd .venv
9
10
  uv venv --python 3.13
10
11
  uv init
11
- # Install main dependencies
12
- uv add aiohttp aiosqlite asyncpg authlib binance-connector binance-futures-connector boto3 ccxt crocodile dataclasses-json exchanges httpx ipykernel ipython lightgbm machineconfig matplotlib mypy nbformat numba numpy objgraph onnx onnxruntime onnxscript orjson pandas "pandera[mypy]" plotext plotly polars prophet psycopg2-binary pybit pyright pyyaml "redis[hiredis]" requests rich ruff scikit-learn scipy shap skforecast sqlalchemy sqlmodel streamlit streamlit-option-menu ta tenacity tqdm visidata websockets wrapt-timeout-decorator
13
- # Install dev dependencies
14
- uv add --dev kaleido torch torchaudio torchinfo torchview torchvision types-python-dateutil types-pyyaml types-requests types-tqdm
15
12
 
16
13
  """
17
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 6.77
3
+ Version: 6.79
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -47,8 +47,9 @@ machineconfig/cluster/templates/cli_trogon.py,sha256=PFWGy8SFYIhT9r3ZV4oIEYfImsQ
47
47
  machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
48
  machineconfig/jobs/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
49
  machineconfig/jobs/installer/check_installations.py,sha256=hkHmmT7Bx3_QWRn2v8dCKOzAapFzqHRzbe-Q08GLnKE,10743
50
- machineconfig/jobs/installer/installer_data.json,sha256=PPpfmo2WZi6RSHMsb7YvqewRr9IQ81B5-tN7bCXjCFc,77032
51
- machineconfig/jobs/installer/package_groups.py,sha256=i4z83F_rk7BVsrwFhz5Vn4SLF0IHxyQBFSxpAaZBl8M,5270
50
+ machineconfig/jobs/installer/installer_data.json,sha256=O2IuDvPApr1cCGG_HyVJfhT5exd2wmZmxyV81_WRXhQ,78081
51
+ machineconfig/jobs/installer/package_groups.py,sha256=CvSJogQgnz5HZfGS9DoCoPfmv0qUinLfh76zw4x58Q8,5262
52
+ machineconfig/jobs/installer/custom/boxes.py,sha256=ws8QRbDn48oKhbQntr54I0nSfkwINbprjTy0HOpuX40,1974
52
53
  machineconfig/jobs/installer/custom/gh.py,sha256=gn7TUSrsLx7uqFqj1Z-iYglS0EYBSgtJ9jWHxaJIfXM,4119
53
54
  machineconfig/jobs/installer/custom/hx.py,sha256=YQClQXqWtGvon8BLFGf1Fp20JPkHgZeEZ6ebmCJQQfI,5838
54
55
  machineconfig/jobs/installer/custom_dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -70,7 +71,9 @@ machineconfig/jobs/installer/linux_scripts/brave.sh,sha256=_al_D5iZSwtlDRTeqjjK3
70
71
  machineconfig/jobs/installer/linux_scripts/docker.sh,sha256=4NYWXCdvh6qlggVVH7FGe6jWkYuWoaJoDwLJvI4oRNQ,4471
71
72
  machineconfig/jobs/installer/linux_scripts/docker_start.sh,sha256=8L2fLex6PU8nCpBii7yT8w4CvULZ9_JcDvxdCGJQ6cU,894
72
73
  machineconfig/jobs/installer/linux_scripts/edge.sh,sha256=f1UI2Z2s0ToZ-QGlzkS1ThcRsTz5tMHOjxSFqfHK9SQ,1319
74
+ machineconfig/jobs/installer/linux_scripts/lid.sh,sha256=nUw870lc5p8GA8KT3JI29ob2wKSVKzCvOHIxEjoSTOA,864
73
75
  machineconfig/jobs/installer/linux_scripts/nerdfont.sh,sha256=ute9wl4BcqHUqavVHWJlnMcmugdb50LbnUVlU0cUVso,1475
76
+ machineconfig/jobs/installer/linux_scripts/network.sh,sha256=j3kRV2mFEZK05XL2UdR9ssW2hkLH5rOYM7LU539UUEE,1358
74
77
  machineconfig/jobs/installer/linux_scripts/ngrok.sh,sha256=K-t62nhnAHxhppTmqjubIJRHozkNHfBxXGbn1Oz3w-A,287
75
78
  machineconfig/jobs/installer/linux_scripts/pgsql.sh,sha256=FbIteF6RVCcDdHl8seFFO7FuAX9siZpkwr9WVeKn5NA,1655
76
79
  machineconfig/jobs/installer/linux_scripts/q.sh,sha256=lPSHBeZm4z6xv5K3cYPiOkK0A-LaNSNJN2ysVb1Qa9Y,261
@@ -79,18 +82,10 @@ machineconfig/jobs/installer/linux_scripts/timescaledb.sh,sha256=PTvo7KBpyxmWdpV
79
82
  machineconfig/jobs/installer/linux_scripts/vscode.sh,sha256=fI6lNCWUjlstNE319Y-rUtimvLLb9GcNh3z9t1KRaaE,4541
80
83
  machineconfig/jobs/installer/linux_scripts/warp-cli.sh,sha256=dnMHZjyyYARwKFa1XZbIonLntIHTRGROyr2v4Eodd6s,2157
81
84
  machineconfig/jobs/installer/linux_scripts/wezterm.sh,sha256=hZBS0CopWr-VrGhFSVjoWATFzHqCt6V41_N8bImAQRc,1294
85
+ machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1,sha256=UbOApUB0UiAHANOnGFHIP3zY_UCtWBhT5I6vqPhwqgE,618
82
86
  machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1,sha256=JsQfGAMkvirhiUmBNOifMlbum2PfHSs0-Akgj-J-WZw,3177
83
- machineconfig/jobs/linux/msc/cli_agents.sh,sha256=MMa_cd4yijI69c7tztTY1b0tl9I1ECTbxqLCShElhFU,184
84
- machineconfig/jobs/linux/msc/lid.sh,sha256=nUw870lc5p8GA8KT3JI29ob2wKSVKzCvOHIxEjoSTOA,864
85
- machineconfig/jobs/linux/msc/network.sh,sha256=j3kRV2mFEZK05XL2UdR9ssW2hkLH5rOYM7LU539UUEE,1358
86
- machineconfig/jobs/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
- machineconfig/jobs/python/python_ve_symlink.py,sha256=Mw2SK_TDLK5Ct_mEESh_Pd-Rn-B1oBSp7a_9y_eZbqw,1140
88
- machineconfig/jobs/python/vscode/api.py,sha256=Et0G-VUj13D1rshYMdDrw_CUYSO7Q6XRrEQO0WjVIKU,1683
89
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1,sha256=UbOApUB0UiAHANOnGFHIP3zY_UCtWBhT5I6vqPhwqgE,618
90
- machineconfig/jobs/windows/archive/openssh-server_add_key.ps1,sha256=91cL3K4H2saAuzOS1GxGicpc64ZDpgvPY39YPBWyxZI,269
91
- machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1,sha256=-7pElYiGFXUvO4dp6rW0LXmNo65h3hFTHJWyHbmO3Xc,745
92
- machineconfig/jobs/windows/msc/cli_agents.bat,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
- machineconfig/jobs/windows/msc/cli_agents.ps1,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1,sha256=91cL3K4H2saAuzOS1GxGicpc64ZDpgvPY39YPBWyxZI,269
88
+ machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1,sha256=-7pElYiGFXUvO4dp6rW0LXmNo65h3hFTHJWyHbmO3Xc,745
94
89
  machineconfig/profile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
90
  machineconfig/profile/backup.toml,sha256=Hb25sIdKVvLqOF62NgiOpGZxd45I6IhsNHu623RtfQQ,766
96
91
  machineconfig/profile/bash_shell_profiles.md,sha256=mio0xkMTwO-F3fikWIfgcdQaPCmQrmkxJMNtZsTe9TI,514
@@ -111,7 +106,7 @@ machineconfig/scripts/linux/fzfag,sha256=x0rX7vM_YjKLZ822D2Xh0HdaTj5kR_gG3g_5_w6
111
106
  machineconfig/scripts/linux/fzffg,sha256=jjeeyFkWmBbwH2taRqC3EOzZep2KR-ZYoI4UI-5kHqg,1090
112
107
  machineconfig/scripts/linux/fzfg,sha256=ClGnJZUsIk4y0qs3W5iXGo-nd0FaqAHMsnh8uoXQFy8,1190
113
108
  machineconfig/scripts/linux/fzfrga,sha256=xSdws6ae28ZXkkqz_uupZ0MYw_vxE2qpLT2DLS3WITM,460
114
- machineconfig/scripts/linux/mcfgs,sha256=GYxtQrFCxa56hvuAyjfEDGHfp2ghU11pTKzmCHUMicg,300
109
+ machineconfig/scripts/linux/mcfgs,sha256=l8xt5BLEmN_Xa7OD9ZgpPc85hG4R1cM5CIRFYQi2VjI,1125
115
110
  machineconfig/scripts/linux/skrg,sha256=JgQJGwxaChr148bDnpTB0rrqZMe2o2zGSDA9x_oUhWM,133
116
111
  machineconfig/scripts/linux/warp-cli.sh,sha256=shFFZ9viet_DSEEHT8kxlGRHoJpO6o85pKYnc3rIkaA,3868
117
112
  machineconfig/scripts/linux/z_ls,sha256=h5YJYfnJrmtLe4c2iKk5aZdaK_Zeaj3CpQX8SSr7fr0,3310
@@ -123,18 +118,18 @@ machineconfig/scripts/linux/other/switch_ip,sha256=NQfeKMBSbFY3eP6M-BadD-TQo5qMP
123
118
  machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
119
  machineconfig/scripts/python/agents.py,sha256=gGeeWCI0AN_DyDJ3G5KR9qSsXv8zkUd5dBRRWqz-dQE,10722
125
120
  machineconfig/scripts/python/cloud.py,sha256=yAD6ciKiEtv2CH3g2NScDK5cpCZQi7Vu8yyeehw_cU8,1263
126
- machineconfig/scripts/python/croshell.py,sha256=gidD9wF4A23WlRNfzbKcPa2BvIKqcAkzQ1CSlN3A2NY,8580
121
+ machineconfig/scripts/python/croshell.py,sha256=QyQbVboNqDQHJkUeSsJvdT212t4TW46yat3GBzneqsQ,8649
127
122
  machineconfig/scripts/python/devops.py,sha256=Lv4d-UlyOREj4VTcu_pxswYo54Mawe3XGeKjreGQDYg,2222
128
123
  machineconfig/scripts/python/devops_navigator.py,sha256=5Cm384D4S8_GsvMzTwr0C16D0ktf8_5Mk5bEJncwDO8,237
129
- machineconfig/scripts/python/entry.py,sha256=TB5lZDZDImGqX4_mMSEv4ZoFigIPA0RXn-9H2cmPS6g,2457
130
- machineconfig/scripts/python/fire_jobs.py,sha256=7L9g4NCr-0gGw3XGNvRCtu77fpfTrTTXMWZ_R4EoSlc,13912
124
+ machineconfig/scripts/python/fire_jobs.py,sha256=UrxCwFKg7ZtBYKFpsSHe62ngcpmHFomSxFWDLnM7CmQ,14645
131
125
  machineconfig/scripts/python/ftpx.py,sha256=A13hL_tDYfcsaK9PkshK-0lrUS6KPhPCtwqWtLSo6IM,9764
132
126
  machineconfig/scripts/python/interactive.py,sha256=zt3g6nGKR_Y5A57UnR4Y5-JpLzrpnCOSaqU1bnaikK0,11666
127
+ machineconfig/scripts/python/mcfg.py,sha256=TB5lZDZDImGqX4_mMSEv4ZoFigIPA0RXn-9H2cmPS6g,2457
133
128
  machineconfig/scripts/python/sessions.py,sha256=JfN8M7r7f8DkfiGJ4jz2NfXvABm90nOZJmLGxPgw_2M,9518
134
- machineconfig/scripts/python/utils.py,sha256=9ckI_2Nu9Z8W9cT6QNKreXVtwNA5RXD05nWemPb2sIg,2797
129
+ machineconfig/scripts/python/utils.py,sha256=Pdk75UjapwE3gou-CMHtqqPhNhpPZP2t1Pm1LPbam-Y,3280
135
130
  machineconfig/scripts/python/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
131
  machineconfig/scripts/python/ai/generate_files.py,sha256=VfjKdwgF8O6E4oiRtfWNliibLmmwGe7f9ld6wpOsXTw,14498
137
- machineconfig/scripts/python/ai/initai.py,sha256=9SZtWOcRuwk8ZU3wHOfPzjInERD79ZTYFY8tVACgza4,2260
132
+ machineconfig/scripts/python/ai/initai.py,sha256=P4-NCLJPWeNef_k-l4TQ92AB1Xm1k3xzdqSBIjmevnQ,1573
138
133
  machineconfig/scripts/python/ai/vscode_tasks.py,sha256=61wMMIhtNTUO8Zvl8IziEdyadzgi5H0h8ACwq3cw6Ho,1255
139
134
  machineconfig/scripts/python/ai/command_runner/command_runner.sh,sha256=PRaQyeI3lDi3s8pm_0xZc71gRvUFO0bEt8o1g1rwwD4,761
140
135
  machineconfig/scripts/python/ai/command_runner/prompt.txt,sha256=-2NFBMf-8yk5pOe-3LBX3RTIhqIZHJS_m-v4k-j9sWI,779
@@ -164,7 +159,7 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.json,sha256=nahHKRw1
164
159
  machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
165
160
  machineconfig/scripts/python/env_manager/__init__.py,sha256=E4LAHbU1wo2dLjE36ntv8U7QNTe8TasujUAYK9SLvWk,6
166
161
  machineconfig/scripts/python/env_manager/path_manager_backend.py,sha256=ZVGlGJALhg7zNABDdwXxL7MFbL2BXPebObipXSLGbic,1552
167
- machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=YXPhrlu8OCg5HetmdSSStdIoUuEFx1Hh1q-rI4wEkuk,6932
162
+ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=Uo1YkX85ebzWSDInbudXg2rJ-qbMk0WszicY5u4ZND8,6932
168
163
  machineconfig/scripts/python/helpers_cloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
169
164
  machineconfig/scripts/python/helpers_cloud/cloud_copy.py,sha256=OV1w3ajFVFs6FJytjIPOntYB_aW2ywGohKi73V4Dm2Y,8691
170
165
  machineconfig/scripts/python/helpers_cloud/cloud_helpers.py,sha256=GA-bxXouUmknk9fyQAsPT-Xl3RG9-yBed71a2tu9Pig,4914
@@ -180,15 +175,15 @@ machineconfig/scripts/python/helpers_croshell/start_slidev.py,sha256=HfJReOusTPh
180
175
  machineconfig/scripts/python/helpers_croshell/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
181
176
  machineconfig/scripts/python/helpers_croshell/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
182
177
  machineconfig/scripts/python/helpers_devops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
- machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=dNbUJ_J-zO2sWu7YOB2jYOy6AVu_uKIpFciDJ-lWwec,7218
184
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=rjTys4FNf9_feP9flWM7Zvq17dxWmetSiGaHPxp25nk,2737
178
+ machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=_xa_QKyCE-HFrMNO2xSFQ7hReI1Kaon4tDAEa9ahyjY,7218
179
+ machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=fluxRtD6hlbh131_RmeKr2Dy8tZpeC4H9-wp2sYt0dM,2486
185
180
  machineconfig/scripts/python/helpers_devops/cli_data.py,sha256=79Xvx7YnbueruEnl69hrDg2AhVxf_zCUdlVcKfeMGyQ,1774
186
181
  machineconfig/scripts/python/helpers_devops/cli_nw.py,sha256=B5Xa9pV5MdC4vPo3EmKaHvNMlThsY3c5F92YPE5j3rI,4176
187
182
  machineconfig/scripts/python/helpers_devops/cli_repos.py,sha256=Xwkv1adqHZvTfRSPWiqSK3PZ1XADyx3llw_YkbxaKyE,12505
188
- machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=NYWSV4c3fxi8i_zqHmX4XgNFxCnmrfOt5jRNTnEYnUY,6225
183
+ machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=JN_3naxPT76qTUWl4TwbAs89Wr8XIiMudM2yoYGFDrg,6225
189
184
  machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=q9pFJ6AxPuygMr3onMNOKEuuQHbVE_6Qoyo7xRT5FX0,4196
190
185
  machineconfig/scripts/python/helpers_devops/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
191
- machineconfig/scripts/python/helpers_devops/cli_utils.py,sha256=gj9KNY6GyzSflXJRkX0lzyvypvwdgseudXhgJcmAtPY,6074
186
+ machineconfig/scripts/python/helpers_devops/cli_utils.py,sha256=KGIU1uTWC4g3kvBBkGrM-TtmcR8V1jTxVMGKXDSLnLA,10183
192
187
  machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py,sha256=Dn8luB6QJzxKiiFSC-NMqiYddWZoca3A8eOjMYZDzTc,5598
193
188
  machineconfig/scripts/python/helpers_devops/devops_status.py,sha256=PJVPhfhXq8der6Xd-_fjZfnizfM-RGfJApkRGhGBmNo,20525
194
189
  machineconfig/scripts/python/helpers_devops/devops_update_repos.py,sha256=kSln8_-Wn7Qu0NaKdt-QTN_bBVyTIAWHH8xVYKK-vCM,10133
@@ -200,7 +195,7 @@ machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py,sha25
200
195
  machineconfig/scripts/python/helpers_fire/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
196
  machineconfig/scripts/python/helpers_fire/fire_agents_help_launch.py,sha256=GBhi9WvmQDwJOcF3sjvge5x5U7TUokcVo4K4CbEm-OI,5619
202
197
  machineconfig/scripts/python/helpers_fire/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
203
- machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py,sha256=TUzFEPySE3IeOIWX99a6baD82MtJFIRl-lIUSIfwaOw,1061
198
+ machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py,sha256=umX-Na6W_8kGZX7ccElnvGP8yxJ8prGBiG3-dO9vXJ0,1304
204
199
  machineconfig/scripts/python/helpers_fire/fire_agents_load_balancer.py,sha256=mpqx3uaQdBXYieuvhdK-qsvLepf9oIMo3pwPj9mSEDI,1079
205
200
  machineconfig/scripts/python/helpers_fire/helpers4.py,sha256=iKR5vVJygaDIpFXhcdma9jOpyxKtUhmqcmalFxJmY0w,4749
206
201
  machineconfig/scripts/python/helpers_fire/prompt.txt,sha256=Ni6r-Dh0Ez2XwfOZl3MOMDhfn6BJ2z4IdK3wFvA3c_o,116
@@ -214,7 +209,7 @@ machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py,sha2
214
209
  machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py,sha256=uh0Blj_EHnUbLPqmqgc67HwaVuz5CllC3q2ILEtG7sU,1694
215
210
  machineconfig/scripts/python/helpers_fire_command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
211
  machineconfig/scripts/python/helpers_fire_command/cloud_manager.py,sha256=YN0DYLzPKtMBaks-EAVwFmkCu3XeHWMr1D21uqX5dDk,3429
217
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py,sha256=UUrGB2N_pR7PxFKtKTJxIUiS58WjQX0U50y2ft8Ul4w,4334
212
+ machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py,sha256=teioVhLI-skNpbYOJGo7WJEnz_FHzyidHff174CZSg8,4359
218
213
  machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py,sha256=4MrlCVijbx7GQyAN9s5LDh-7heSjMXYrXdqiP6uC3ug,5378
219
214
  machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
220
215
  machineconfig/scripts/python/helpers_navigator/__init__.py,sha256=5qPsu5ztoj0gkrioY0Yg0GTZ9JAn6SG2gAk-6DpuQ00,764
@@ -226,7 +221,7 @@ machineconfig/scripts/python/helpers_navigator/main_app.py,sha256=R1vOBMUKaiFHOg
226
221
  machineconfig/scripts/python/helpers_navigator/search_bar.py,sha256=kDi8Jhxap8wdm7YpDBtfhwcPnSqDPFrV2LqbcSBWMT4,414
227
222
  machineconfig/scripts/python/helpers_repos/action.py,sha256=9AxWy8mB9HFeV5t11-qD_l-KA5jkUmm0pXVKT1L6-Qk,14894
228
223
  machineconfig/scripts/python/helpers_repos/clone.py,sha256=UULEG5xJuXlPGU0nqXH6U45jA9DOFqLw8B4iPytCwOQ,5471
229
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=5ejhLAM-hob-JMWNWnB2aLUVOz2pknvwJsG7YEpH5tQ,10450
224
+ machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=l1OXbC4QNme2xDytBIbEFX7KNZSTuPsOW9BnnooJEww,10450
230
225
  machineconfig/scripts/python/helpers_repos/count_lines.py,sha256=Q5c7b-DxvTlQmljoic7niTuiAVyFlwYvkVQ7uRJHiTo,16009
231
226
  machineconfig/scripts/python/helpers_repos/count_lines_frontend.py,sha256=vSDtrF4829jziwp6WZmGt9G8MJ9jY4hfXqtf0vhkYSE,607
232
227
  machineconfig/scripts/python/helpers_repos/entrypoint.py,sha256=WYEFGUJp9HWImlFjbs_hiFZrUqM_KEYm5VvSUjWd04I,2810
@@ -242,7 +237,7 @@ machineconfig/scripts/python/nw/add_ssh_key.py,sha256=9JLmWu8pE7PAL5VuCFd19iVEdC
242
237
  machineconfig/scripts/python/nw/devops_add_identity.py,sha256=aPjcHbTLhxYwWYcandyAHdwuO15ZBu3fB82u6bI0tMQ,3773
243
238
  machineconfig/scripts/python/nw/devops_add_ssh_key.py,sha256=CkIl85hZLtG9k7yXLSzqi88YrilHV4hIUWHAPBwxWjw,8922
244
239
  machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
245
- machineconfig/scripts/python/nw/mount_nfs,sha256=tNqn03hJRFehayyUwEtamYnMTqKyzIxzNkkVs13z470,1855
240
+ machineconfig/scripts/python/nw/mount_nfs,sha256=6OpFOWk5LlT2dmMmqENudAqmMNGGAm8mZxCrV-o8MfY,1855
246
241
  machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
247
242
  machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
248
243
  machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
@@ -260,7 +255,7 @@ machineconfig/scripts/windows/mcfgs.ps1,sha256=uuK5pEz38D3_SOjfhbvkDT8Kt4I62YhNz
260
255
  machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
261
256
  machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
262
257
  machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
263
- machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=H7UYPPBNOdMgdHJNW6C8ThtUDtKrJqjJZ8yB8TqNXbU,322
258
+ machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=ds2EyRuM3e5SI7-XX9sX2Tr_27yO3yfPVjvnofpeIcU,322
264
259
  machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
265
260
  machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
266
261
  machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
@@ -372,12 +367,12 @@ machineconfig/setup_linux/apps.sh,sha256=XOEzhuwYNat83ybamUdnVhDaGf2wlQiT5wVNvz2
372
367
  machineconfig/setup_linux/apps_desktop.sh,sha256=L2b_pcw3GiQdoAaoMO7J4bVvUoG5Pnuy9kDhV8JqprU,3325
373
368
  machineconfig/setup_linux/apps_gui.sh,sha256=lFPYq7H2bRogPwW6QoEuSr9GnTjHS-jRM_eYg2rjOmM,2301
374
369
  machineconfig/setup_linux/uv.sh,sha256=cyegPmMMB7B3OnVx9KxZiU1JQU3Z_oqboUgwzmW2W40,487
375
- machineconfig/setup_linux/nix/cli_installation.sh,sha256=gVvszYZJgKPRJx2SEaE31BXDP0Fmeta4--gpr-zJZlY,4010
370
+ machineconfig/setup_linux/others/android.sh,sha256=gzep6bBhK7FCBvGcXK0fdJCtkSfBOftt0aFyDZq_eMs,68
371
+ machineconfig/setup_linux/others/cli_installation.sh,sha256=gVvszYZJgKPRJx2SEaE31BXDP0Fmeta4--gpr-zJZlY,4010
376
372
  machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKGPn8fIdZMn3p0RrHEkb8rWBGsdVGbus,1207
377
373
  machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
378
374
  machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
379
- machineconfig/setup_linux/web_shortcuts/android.sh,sha256=gzep6bBhK7FCBvGcXK0fdJCtkSfBOftt0aFyDZq_eMs,68
380
- machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=YJYDhHa9D_vm8QURMPVHJJHKeFVX1lsZfJ4FUVnZzQA,464
375
+ machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=g-MVdfkpU98FApzB2EGb_K2t6iU1UrEW-aDKdVP6OsI,464
381
376
  machineconfig/setup_mac/__init__.py,sha256=Q1waupi5vCBroLqc8Rtnw69_7jLnm2Cs7_zH_GSZgMs,616
382
377
  machineconfig/setup_mac/apps.sh,sha256=R0N6fBwLCzwy4qAormyMerXXXrHazibSkY6NrNOpTQU,2772
383
378
  machineconfig/setup_mac/uv.sh,sha256=CSN8oCBKS-LK1vJJqYOhAMcrouTf4Q_F3cpplc_ddMA,1157
@@ -391,16 +386,16 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
391
386
  machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
392
387
  machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
393
388
  machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
394
- machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=kJdxgkldiYld_Fe0aeAE87Ni4TseZb1kr59B1C4tKCc,581
389
+ machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=ySfDew5rnUoW48kZbQFq1RWDSCHm26KNNnu_4ythKNI,581
395
390
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
396
391
  machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
397
392
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
398
393
  machineconfig/utils/accessories.py,sha256=Rs8R0GUb2Ub6YimkgXHnI02CShS5BKlrZdCigVxfPlk,4339
399
- machineconfig/utils/code.py,sha256=FGM3s422q0I4zoYi2Gftohj1xZpyL7XKAHM__oEVGZg,5493
394
+ machineconfig/utils/code.py,sha256=2hz171Uw706QGbvup0X7RUH0L_0ELRBekKjco71hFEQ,5493
400
395
  machineconfig/utils/installer.py,sha256=UzI_DtTcKbgvkAkWkNLAPUtx-RVqITHCpvZyLiCpD9g,10377
401
396
  machineconfig/utils/io.py,sha256=4dSieoqZO8Vvi4vW8lLoITDHBvmFp4dtl3kyeZHQ6Co,2528
402
397
  machineconfig/utils/links.py,sha256=KM6vIn3hag9FYEzLSHP5MAM9tU_RStw2mCq2_OvmmZA,23672
403
- machineconfig/utils/meta.py,sha256=af7q6p9ASpc_YXL564ptGgo7ZgmlmX4Av11si8O27bY,9511
398
+ machineconfig/utils/meta.py,sha256=RXbq3_DSFAFNAEt9GjWqP2TjCWUs0v7gAkKCgRpdwO8,9853
404
399
  machineconfig/utils/notifications.py,sha256=tuXIudcip0tEioG-bm8BbLr3FMDve4f6BktlznBhKxM,9013
405
400
  machineconfig/utils/options.py,sha256=vUO4Kej-vDOv64wHr2HNDyu6PATURpjd7xp6N8OOoJg,7083
406
401
  machineconfig/utils/path_extended.py,sha256=WyJwoHnXdvSQQJ-yrxTX78FpqYmgVeKDYpNEB9UsRck,53223
@@ -409,10 +404,10 @@ machineconfig/utils/procs.py,sha256=YPA_vEYQGwPd_o_Lc6nOTBo5BrB1tSs8PJ42XiGpenM,
409
404
  machineconfig/utils/scheduler.py,sha256=fguwvINyaupOxdU5Uadyxalh_jXTXDzt0ioEgjEOKcM,14705
410
405
  machineconfig/utils/scheduling.py,sha256=6x5zLA7sY5gohrEtN6zGrXIqNFasMoyBfwLcOjrjiME,11109
411
406
  machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
412
- machineconfig/utils/ssh.py,sha256=gpvIA8DLy2pUhCnieJhKGpvMAxEztX5J6aLF6L13i3s,38991
407
+ machineconfig/utils/ssh.py,sha256=lnGtFWzD7kPRVRvLrxU_ZQHqscRwMqbCThd8IR58jfM,38991
413
408
  machineconfig/utils/terminal.py,sha256=VDgsjTjBmMGgZN0YIc0pJ8YksLDrBtiXON1EThy7_is,4264
414
409
  machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
415
- machineconfig/utils/upgrade_packages.py,sha256=mSFyKvB3JhHte_x1dtmEgrJZCAXgTUQoaJUSx1OXQ3Y,4145
410
+ machineconfig/utils/upgrade_packages.py,sha256=TCohwiwc0btSsInOloxDVuk5i88yc1vBK8RZcoMWoUw,3425
416
411
  machineconfig/utils/ve.py,sha256=L-6PBXnQGXThiwWgheJMQoisAZOZA6SVCbGw2J-GFnI,2414
417
412
  machineconfig/utils/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
418
413
  machineconfig/utils/cloud/onedrive/README.md,sha256=i20oRG110AN0yLF3DARHfWXDJjPBiSgWI8CP2HQAqrk,3774
@@ -438,8 +433,8 @@ machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoS
438
433
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
439
434
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
440
435
  machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
441
- machineconfig-6.77.dist-info/METADATA,sha256=sYoaWnpma70lmOUlTn5qABsZG9yV9dmqpFsw06n66hI,2928
442
- machineconfig-6.77.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
443
- machineconfig-6.77.dist-info/entry_points.txt,sha256=NTW7hbUlpt5Vx9DdQrONLkYMCuBXpvYh1dt0AtlGxeI,466
444
- machineconfig-6.77.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
445
- machineconfig-6.77.dist-info/RECORD,,
436
+ machineconfig-6.79.dist-info/METADATA,sha256=pLf4KEFUES6kyMpjq-biKf-5-FcWJanWwE8KcflCGdM,2928
437
+ machineconfig-6.79.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
438
+ machineconfig-6.79.dist-info/entry_points.txt,sha256=2OetLXw0yXtfG6MmJXbzZipCQfPueeM3oMgTORSEfYs,465
439
+ machineconfig-6.79.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
440
+ machineconfig-6.79.dist-info/RECORD,,
@@ -5,6 +5,6 @@ croshell = machineconfig.scripts.python.croshell:main
5
5
  devops = machineconfig.scripts.python.devops:main
6
6
  fire = machineconfig.scripts.python.fire_jobs:main
7
7
  ftpx = machineconfig.scripts.python.ftpx:main
8
- mcfg = machineconfig.scripts.python.entry:main
8
+ mcfg = machineconfig.scripts.python.mcfg:main
9
9
  sessions = machineconfig.scripts.python.sessions:main
10
10
  utils = machineconfig.scripts.python.utils:main
@@ -1,16 +0,0 @@
1
- #!/bin/bash
2
-
3
-
4
- # Vscode extensions for AI-assisted coding.
5
- # Github copilot
6
- # Roo
7
- # Cline
8
- # Kilocode
9
- # Continue
10
- # CodeGPT
11
- # qodo (and cli)
12
-
13
- # Editors based on AI
14
- # Kiro
15
- # Cursor
16
- # Warp
File without changes
@@ -1,37 +0,0 @@
1
- """Symlinks"""
2
-
3
- from rich import box
4
- from rich.console import Console
5
- from rich.panel import Panel
6
-
7
- from machineconfig.utils.path_extended import PathExtended
8
-
9
-
10
- def main() -> None:
11
- console = Console()
12
- console.print(
13
- Panel.fit(
14
- "\n".join(["Create symlinks for virtual environments"]),
15
- title="🔗 Symlink Creator",
16
- border_style="cyan",
17
- box=box.ROUNDED,
18
- )
19
- )
20
- target = PathExtended(input("🎯 Symlink to which target? ")).expanduser().absolute()
21
- source = input(f"📍 Symlink from which source? [default to: CWD/{target.name}] ") or PathExtended.cwd().joinpath(target.name)
22
- if isinstance(source, str):
23
- source = PathExtended(source).expanduser().absolute()
24
- source.symlink_to(target, overwrite=True)
25
- console.print(
26
- Panel.fit(
27
- "\n".join([f"📍 Source: {source}", f"🎯 Target: {target}"]),
28
- title="✅ Symlink Created",
29
- border_style="green",
30
- box=box.ROUNDED,
31
- )
32
- )
33
- console.print("🔗 Finished creating symlink.", style="bold cyan")
34
-
35
-
36
- if __name__ == "__main__":
37
- pass
@@ -1,57 +0,0 @@
1
- from pathlib import Path
2
- from typing import Annotated
3
-
4
- import typer
5
- from rich import box
6
- from rich.console import Console
7
- from rich.panel import Panel
8
- from rich.syntax import Syntax
9
-
10
- from machineconfig.utils.accessories import randstr
11
-
12
-
13
- def open_file_in_new_instance(file_path: str):
14
- import git
15
-
16
- repo = git.Repo(search_parent_directories=True)
17
- repo_path = repo.working_tree_dir
18
- # Ensure repo_path is not None before passing to Path
19
- repo_name = Path(repo_path if repo_path is not None else ".").name
20
- repo_copy_name = f"{repo_name}_{randstr(5)}"
21
- copy_path = Path.home().joinpath(".config", "machingconfig", "vscode_api", repo_name, repo_copy_name)
22
- copy_path.parent.mkdir(parents=True, exist_ok=True)
23
- code = f"""
24
- ln -s {repo_path} {copy_path}
25
- cd {copy_path}
26
- code --profile bitProfile --new-window {file_path}
27
- """
28
- console = Console()
29
- panel = Panel(
30
- Syntax(code, lexer="bash"),
31
- title="🔍 VS CODE API | Opening file in new instance",
32
- subtitle=f"📂 {file_path}",
33
- border_style="bright_blue",
34
- box=box.DOUBLE,
35
- padding=(1, 2),
36
- )
37
- console.print(panel)
38
-
39
- code_path = Path.home().joinpath(".config", "machingconfig", "vscode_api", "code_temp")
40
- code_path.parent.mkdir(parents=True, exist_ok=True)
41
- code_path.write_text(code, encoding="utf-8")
42
- code_path.chmod(0o755)
43
- import subprocess
44
-
45
- subprocess.run([str(code_path)], shell=True, check=True)
46
-
47
-
48
- def main(file_path: Annotated[str, typer.Argument(help="Path to the file to open")]) -> None:
49
- open_file_in_new_instance(file_path)
50
-
51
-
52
- def arg_parser() -> None:
53
- typer.run(main)
54
-
55
-
56
- if __name__ == "__main__":
57
- arg_parser()
File without changes
File without changes
File without changes