machineconfig 6.78__py3-none-any.whl → 6.81__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 (34) hide show
  1. machineconfig/jobs/installer/custom/boxes.py +61 -0
  2. machineconfig/jobs/installer/installer_data.json +36 -2
  3. machineconfig/scripts/linux/mcfgs +29 -5
  4. machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
  5. machineconfig/scripts/python/fire_jobs.py +14 -0
  6. machineconfig/scripts/python/helpers_devops/cli_config.py +1 -1
  7. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -7
  8. machineconfig/scripts/python/helpers_devops/cli_self.py +3 -3
  9. machineconfig/scripts/python/helpers_devops/cli_utils.py +40 -20
  10. machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +14 -0
  11. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +1 -0
  12. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +1 -1
  13. machineconfig/scripts/python/nw/mount_nfs +1 -1
  14. machineconfig/scripts/python/utils.py +7 -5
  15. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
  16. machineconfig/setup_linux/web_shortcuts/interactive.sh +1 -1
  17. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +1 -1
  18. machineconfig/utils/ssh.py +2 -2
  19. {machineconfig-6.78.dist-info → machineconfig-6.81.dist-info}/METADATA +1 -1
  20. {machineconfig-6.78.dist-info → machineconfig-6.81.dist-info}/RECORD +28 -33
  21. machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
  22. machineconfig/jobs/python/__init__.py +0 -0
  23. machineconfig/jobs/python/python_ve_symlink.py +0 -37
  24. machineconfig/jobs/python/vscode/api.py +0 -57
  25. machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
  26. machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
  27. /machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +0 -0
  28. /machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +0 -0
  29. /machineconfig/jobs/{windows/archive → installer/powershell_scripts}/archive_pygraphviz.ps1 +0 -0
  30. /machineconfig/jobs/{windows/archive → installer/powershell_scripts}/openssh-server_add_key.ps1 +0 -0
  31. /machineconfig/jobs/{windows/archive → installer/powershell_scripts}/openssh-server_copy-ssh-id.ps1 +0 -0
  32. {machineconfig-6.78.dist-info → machineconfig-6.81.dist-info}/WHEEL +0 -0
  33. {machineconfig-6.78.dist-info → machineconfig-6.81.dist-info}/entry_points.txt +0 -0
  34. {machineconfig-6.78.dist-info → machineconfig-6.81.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",
@@ -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
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=6.78",
5
+ # "machineconfig>=6.81",
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":
@@ -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.78")
49
+ uv_with.append("machineconfig>=6.81")
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.78" """)
44
+ run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=6.81" """)
45
45
  else:
46
- run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.78" """)
46
+ run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.81" """)
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.78,textual" """
71
+ else: executable = """--with "machineconfig>=6.81,textual" """
72
72
  run_shell_script(f"""uv run {executable} {path}""")
73
73
 
74
74
 
@@ -78,15 +78,14 @@ def download(
78
78
 
79
79
 
80
80
  def merge_pdfs(
81
- pdf1: Annotated[str, typer.Argument(..., help="Path to the first PDF file.")],
82
- 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.")],
83
82
  output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output merged PDF file path.")] = None,
84
83
  compress: Annotated[bool, typer.Option("--compress", "-c", help="Compress the output PDF.")] = False,
85
84
  ) -> None:
86
- 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:
87
86
  from pypdf import PdfReader, PdfWriter
88
87
  writer = PdfWriter()
89
- for pdf_path in [pdf1, pdf2]:
88
+ for pdf_path in pdfs:
90
89
  reader = PdfReader(pdf_path)
91
90
  for page in reader.pages:
92
91
  writer.add_page(page)
@@ -110,7 +109,7 @@ def merge_pdfs(
110
109
  writer.write(output_path)
111
110
  print(f"✅ Merged PDF saved to: {output_path}")
112
111
  from machineconfig.utils.meta import lambda_to_python_script
113
- 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)
114
113
  from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
115
114
  uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=["pypdf"], uv_project_dir=None)
116
115
  run_shell_script(uv_command)
@@ -119,31 +118,52 @@ def merge_pdfs(
119
118
  def compress_pdf(
120
119
  pdf_input: Annotated[str, typer.Argument(..., help="Path to the input PDF file to compress.")],
121
120
  output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output compressed PDF file path.")] = None,
122
- flate_level: Annotated[int, typer.Option("--flate-level", "-f", help="Flate compression level (0-9, default 9).")] = 9,
123
- recompress: Annotated[bool, typer.Option("--recompress", "-r", help="Recompress already compressed streams.")] = True,
124
- linearize: Annotated[bool, typer.Option("--linearize", "-l", help="Linearize PDF for faster web viewing.")] = False,
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,
125
126
  ) -> None:
126
- def compress_pdf_internal(pdf_input: str, output: str | None, flate_level: int, recompress: bool, linearize: bool) -> None:
127
- from pikepdf import Pdf, ObjectStreamMode, settings
128
- settings.set_flate_compression_level(flate_level)
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
129
130
  output_path = output if output else pdf_input.replace(".pdf", "_compressed.pdf")
130
- with Pdf.open(pdf_input) as pdf:
131
- pdf.save(
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(
132
145
  output_path,
133
- compress_streams=True,
134
- recompress_flate=recompress,
135
- object_stream_mode=ObjectStreamMode.generate,
136
- linearize=linearize,
146
+ deflate=compress_streams,
147
+ garbage=3,
148
+ use_objstms=1 if use_objstms else 0,
137
149
  )
138
- print(f"✅ Compressed PDF saved to: {output_path}")
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()
139
159
  from machineconfig.utils.meta import lambda_to_python_script
140
160
  code = lambda_to_python_script(
141
- lambda: compress_pdf_internal(pdf_input=pdf_input, output=output, flate_level=flate_level, recompress=recompress, linearize=linearize),
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),
142
162
  in_global=True,
143
163
  import_module=False,
144
164
  )
145
165
  from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
146
- uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=["pikepdf"], uv_project_dir=None)
166
+ uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=["pymupdf"], uv_project_dir=None)
147
167
  run_shell_script(uv_command)
148
168
 
149
169
 
@@ -2,6 +2,20 @@
2
2
  from typing import Literal, TypeAlias, TypedDict
3
3
 
4
4
 
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
+
5
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"]
@@ -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.78"]
83
+ uv_with = ["machineconfig>=6.81"]
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.78" python -m machineconfig.scripts.python.mount_nfs
8
+ uv run --python 3.14 --with "machineconfig>=6.81" 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."
@@ -47,17 +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
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)
55
53
  app.command(name="i", no_args_is_help=False, hidden=True)(init_project)
56
- app.command(name="compress-pdf", no_args_is_help=False, help="[c] Compress a PDF file.")(compress_pdf)
57
- app.command(name="c", no_args_is_help=False, hidden=True)(compress_pdf)
58
- return app
59
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
60
60
 
61
+ # def func():
62
+ # import pycr
61
63
 
62
64
  def main():
63
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.78" python -m machineconfig.scripts.python.mount_ssh
10
+ uv run --python 3.14 --with "machineconfig>=6.81" 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.78" mcfg "$@"
4
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.81" 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.78" mcfg $args
5
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.81" mcfg $args
6
6
  }
7
7
  function d { mcfg devops @args }
8
8
  function c { mcfg cloud @args }
@@ -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.78"
11
+ MACHINECONFIG_VERSION = "machineconfig>=6.81"
12
12
  DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
13
13
 
14
14
  class SSH:
@@ -290,7 +290,7 @@ class SSH:
290
290
  shutil.make_archive(str(zip_path), "zip", source_obj.parent, source_obj.name)
291
291
  source_obj = Path(str(zip_path) + ".zip")
292
292
  if not target_rel2home.endswith(".zip"): target_rel2home = target_rel2home + ".zip"
293
- self.create_dir(path_rel2home=target_rel2home, overwrite_existing=overwrite_existing)
293
+ self.create_dir(path_rel2home=str(Path(target_rel2home).parent), overwrite_existing=overwrite_existing)
294
294
  print(f"""📤 [SFTP UPLOAD] Sending file: {repr(source_obj)} ==> Remote Path: {target_rel2home}""")
295
295
  try:
296
296
  with self.tqdm_wrap(ascii=True, unit="b", unit_scale=True) as pbar:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 6.78
3
+ Version: 6.81
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=anwdQWktf5_SLGHgty3WK_52NsxfR9Kc3kcXnvYoJLE,76993
50
+ machineconfig/jobs/installer/installer_data.json,sha256=O2IuDvPApr1cCGG_HyVJfhT5exd2wmZmxyV81_WRXhQ,78081
51
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
@@ -126,12 +121,12 @@ machineconfig/scripts/python/cloud.py,sha256=yAD6ciKiEtv2CH3g2NScDK5cpCZQi7Vu8yy
126
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/fire_jobs.py,sha256=BAC2czEtHRuz1AmoEZC9TsGQSAzZw6_cbTSSixi6Cv8,13944
124
+ machineconfig/scripts/python/fire_jobs.py,sha256=UrxCwFKg7ZtBYKFpsSHe62ngcpmHFomSxFWDLnM7CmQ,14645
130
125
  machineconfig/scripts/python/ftpx.py,sha256=A13hL_tDYfcsaK9PkshK-0lrUS6KPhPCtwqWtLSo6IM,9764
131
126
  machineconfig/scripts/python/interactive.py,sha256=zt3g6nGKR_Y5A57UnR4Y5-JpLzrpnCOSaqU1bnaikK0,11666
132
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=ClADQVO8qU47s_mJBe1DcAjgrCivGJfYD1tG7ldSIHQ,3247
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
132
  machineconfig/scripts/python/ai/initai.py,sha256=P4-NCLJPWeNef_k-l4TQ92AB1Xm1k3xzdqSBIjmevnQ,1573
@@ -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=6m1FhpiK9rg2GZuOHzb3RG_RSIRi9nXlYa458E1IbRM,6932
162
+ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=-pd5Qi571_RHEnA_b7LXPu2B7gt2qNb9KN6Z_XBOQLE,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=YAgl2y-ONqfPkTwPd-lfP5yFMIgPOIwif_HDTMuFR9Q,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=DuKqawGdSMdOMfQyAJrDSnTc7s30LjgORS4HII3_dzI,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=bcu93kawcclkhapf8bdiF1VWdNgX9z8FOYZaJq4h3bE,6225
183
+ machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=kT8Bh6z3UVlqbVZE16a8f7AJEP6D4iYLSZUA1SOUc5c,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=TV5hOgN3amR0k6Bx5s4LnDWkGIrdpGwDtgt-IbhzlfY,9142
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=bP7LPu9w2BzS1N_oV3XGlobBZYlCkXE-62cR3NrIJHE,1133
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=ly4uCaoUfa-FEMqNdKCB2Xi7Skk1GX1aVXmb2CipbQA,10450
224
+ machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=y3FC57KBKY0w2MwYb6P8uJus_S0ZYalTHvTWsdu6I34,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=WAszkWoj-13aAFzBa-ghn8_f-Epq0SQN2Uuqiey457A,1855
240
+ machineconfig/scripts/python/nw/mount_nfs,sha256=bIddaHflyhKg0ONjGD3bKZX9nV2iWyUiYdFk5B8Djvs,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=nJQmw6h1IXDLDEGREfnBAg735dwhkrOS1I0JaNyW7TQ,322
258
+ machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=smJZuyHwcS0ZDNJHXD3gYtROQa86MhRgQqmE2EzvGEc,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
@@ -377,7 +372,7 @@ machineconfig/setup_linux/others/cli_installation.sh,sha256=gVvszYZJgKPRJx2SEaE3
377
372
  machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKGPn8fIdZMn3p0RrHEkb8rWBGsdVGbus,1207
378
373
  machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
379
374
  machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
380
- machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=z71tE60TYm5lU6Gmn1BnW0RdRiiZH29iQk6IN3cYvn0,464
375
+ machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=6nJEEtNqMg_IRkFxH83RF7rIwKjyqCfsoOQhA4pExWw,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,7 +386,7 @@ 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=IpzCBUx16pnKSVuSJPXLpCSKOXd9VI-WrZRJxqV0Y0Y,581
389
+ machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=c5TXAJ7o5pSD_9YByBSa6emWBlEbJC4pZwVrZc2Sapc,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
@@ -409,7 +404,7 @@ 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=My-1sSzYXJCG8wMQ06TJx4y1Rnv5DDzI42fwyf85Cwc,38991
407
+ machineconfig/utils/ssh.py,sha256=eOJFTxzDr_N81xqcEDPDvGiITMxE4m-sO5RZAUkEODs,39009
413
408
  machineconfig/utils/terminal.py,sha256=VDgsjTjBmMGgZN0YIc0pJ8YksLDrBtiXON1EThy7_is,4264
414
409
  machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
415
410
  machineconfig/utils/upgrade_packages.py,sha256=TCohwiwc0btSsInOloxDVuk5i88yc1vBK8RZcoMWoUw,3425
@@ -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.78.dist-info/METADATA,sha256=1JsMqsRoJW459h3MHYgFp-QoL4OV7LFX944vD5VH6pM,2928
442
- machineconfig-6.78.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
443
- machineconfig-6.78.dist-info/entry_points.txt,sha256=2OetLXw0yXtfG6MmJXbzZipCQfPueeM3oMgTORSEfYs,465
444
- machineconfig-6.78.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
445
- machineconfig-6.78.dist-info/RECORD,,
436
+ machineconfig-6.81.dist-info/METADATA,sha256=akyrWPX9TB4A7xBMBUNJOW7CgsRn4W2ra1dNUug_Y88,2928
437
+ machineconfig-6.81.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
438
+ machineconfig-6.81.dist-info/entry_points.txt,sha256=2OetLXw0yXtfG6MmJXbzZipCQfPueeM3oMgTORSEfYs,465
439
+ machineconfig-6.81.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
440
+ machineconfig-6.81.dist-info/RECORD,,
@@ -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