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

@@ -79,7 +79,7 @@ def read_mapper() -> MapperFileData:
79
79
 
80
80
 
81
81
  def apply_mapper(mapper_data: dict[str, list[ConfigMapper]],
82
- on_conflict: Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"],
82
+ on_conflict: Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"],
83
83
  method: Literal["symlink", "copy"]
84
84
  ):
85
85
  operation_records: list[OperationRecord] = []
@@ -4,7 +4,7 @@ from typing import Optional, Literal, Annotated
4
4
 
5
5
 
6
6
  def main_public_from_parser(method: Annotated[Literal["symlink", "copy"], typer.Option(..., help="Method to use for setting up the config file.")],
7
- on_conflict: Annotated[Literal["throw-error", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., help="Action to take on conflict")],
7
+ on_conflict: Annotated[Literal["throw-error", "overwrite-default-path", "backup-default-path"], typer.Option(..., help="Action to take on conflict")],
8
8
  which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] = None,
9
9
  interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
10
10
  """Terminology:
@@ -32,7 +32,7 @@ def main_public_from_parser(method: Annotated[Literal["symlink", "copy"], typer.
32
32
 
33
33
 
34
34
  def main_private_from_parser(method: Annotated[Literal["symlink", "copy"], typer.Option(..., help="Method to use for linking files")],
35
- on_conflict: Annotated[Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., help="Action to take on conflict")] = "throw-error",
35
+ on_conflict: Annotated[Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"], typer.Option(..., help="Action to take on conflict")] = "throw-error",
36
36
  which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] = None,
37
37
  interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
38
38
  from machineconfig.profile.create_links import ConfigMapper, read_mapper
@@ -27,18 +27,18 @@ wrap_in_shell_script() {
27
27
  "$command" "$@"
28
28
 
29
29
  if [[ -f "$OP_PROGRAM_PATH" ]]; then
30
- printf "%b\n" "${GREEN} Found op program:${RESET} ${OP_PROGRAM_PATH}"
30
+ printf "%b\n" "${GREEN}🚀 Taking over from python script @ ${OP_PROGRAM_PATH}${RESET}"
31
31
  bat --style=plain --paging=never "$OP_PROGRAM_PATH"
32
32
  printf "%b\n" "${GREEN}▶ Running...${RESET}"
33
33
  . "$OP_PROGRAM_PATH"
34
34
  status=$?
35
35
  if [[ $status -eq 0 ]]; then
36
- printf "%b\n" "${GREEN}✅ Completed successfully (exit ${status})${RESET}"
36
+ printf "%b\n" "${GREEN}✅ '${command}' execution completed.${RESET}"
37
37
  else
38
38
  printf "%b\n" "${YELLOW}⚠️ Program exited with status ${status}${RESET}"
39
39
  fi
40
40
  else
41
- printf "%b\n" "${YELLOW}⚠️ No op program found at: ${OP_PROGRAM_PATH}${RESET}"
41
+ printf "%b\n" "${GREEN} '${command}' execution completed.${RESET}"
42
42
  fi
43
43
  }
44
44
 
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=6.99",
5
+ # "machineconfig>=7.32",
6
6
  # "textual",
7
7
  # "pyperclip",
8
8
  # ]
@@ -7,21 +7,23 @@ import machineconfig.scripts.python.helpers_devops.cli_config_dotfile as dotfile
7
7
 
8
8
 
9
9
  def private(method: Annotated[Literal["symlink", "copy"], typer.Option(..., "--method", "-m", help="Method to use for linking files")],
10
- on_conflict: Annotated[Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
10
+ on_conflict: Annotated[Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
11
11
  which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = None,
12
12
  interactive: Annotated[bool, typer.Option(..., "--interactive", "-ia", help="Run in interactive mode")] = False):
13
13
  """🔗 Manage private configuration files."""
14
14
  import machineconfig.profile.create_links_export as create_links_export
15
15
  create_links_export.main_private_from_parser(method=method, on_conflict=on_conflict, which=which, interactive=interactive)
16
16
 
17
+
17
18
  def public(method: Annotated[Literal["symlink", "copy"], typer.Option(..., "--method", "-m", help="Method to use for setting up the config file.")],
18
- on_conflict: Annotated[Literal["throw-error", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
19
+ on_conflict: Annotated[Literal["throw-error", "overwrite-default-path", "backup-default-path"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
19
20
  which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = None,
20
21
  interactive: Annotated[bool, typer.Option(..., "--interactive", "-ia", help="Run in interactive mode")] = False):
21
22
  """🔗 Manage public configuration files."""
22
23
  import machineconfig.profile.create_links_export as create_links_export
23
24
  create_links_export.main_public_from_parser(method=method, on_conflict=on_conflict, which=which, interactive=interactive)
24
25
 
26
+
25
27
  def shell():
26
28
  """🔗 Configure your shell profile."""
27
29
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
@@ -37,7 +39,7 @@ def path():
37
39
  uv_with = ["textual"]
38
40
  uv_project_dir = None
39
41
  if not Path.home().joinpath("code/machineconfig").exists():
40
- uv_with.append("machineconfig>=6.99")
42
+ uv_with.append("machineconfig>=7.32")
41
43
  else:
42
44
  uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
43
45
  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])
@@ -50,6 +52,7 @@ def pwsh_theme():
50
52
  import subprocess
51
53
  subprocess.run(["pwsh", "-File", str(file)])
52
54
 
55
+
53
56
  def starship_theme():
54
57
  """🔗 Select starship prompt theme."""
55
58
  import subprocess
@@ -78,6 +81,7 @@ def starship_theme():
78
81
  except ValueError:
79
82
  typer.echo("❌ Please enter a valid number")
80
83
 
84
+
81
85
  def copy_assets(which: Annotated[Literal["scripts", "settings", "both"], typer.Argument(..., help="Which assets to copy")]):
82
86
  """🔗 Copy asset files from library to machine."""
83
87
  import machineconfig.profile.create_helper as create_helper
@@ -1,3 +1,4 @@
1
+
1
2
  """Like yadm and dotter."""
2
3
 
3
4
  from typing import Annotated, Literal
@@ -7,10 +8,9 @@ import typer
7
8
  def main(
8
9
  file: Annotated[str, typer.Argument(help="file/folder path.")],
9
10
  method: Annotated[Literal["symlink", "copy"], typer.Option(..., "--method", "-m", help="Method to use for linking files")] = "copy",
10
- on_conflict: Annotated[Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
11
+ on_conflict: Annotated[Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
11
12
  sensitivity: Annotated[Literal["private", "public"], typer.Option(..., "--sensitivity", "-s", help="Sensitivity of the config file.")] = "private",
12
- destination: Annotated[str, typer.Option("--destination", "-d", help="destination folder (override the default, use at your own risk)")] = "",
13
- ) -> None:
13
+ destination: Annotated[str, typer.Option("--destination", "-d", help="destination folder (override the default, use at your own risk)")] = "",) -> None:
14
14
  from rich.console import Console
15
15
  from rich.panel import Panel
16
16
  from machineconfig.utils.links import symlink_map, copy_map
@@ -33,25 +33,23 @@ def main(
33
33
  new_path = dest_path.joinpath(orig_path.name)
34
34
 
35
35
  from machineconfig.utils.path_extended import PathExtended
36
- if method == "copy":
37
- copy_map(config_file_default_path=PathExtended(orig_path), self_managed_config_file_path=PathExtended(new_path), on_conflict=on_conflict)
38
- elif method == "symlink":
39
- symlink_map(config_file_default_path=PathExtended(orig_path), self_managed_config_file_path=PathExtended(new_path), on_conflict=on_conflict)
40
- else:
41
- raise ValueError(f"Unknown method: {method}")
42
- console.print(
43
- Panel(
44
- "\n".join(
45
- [
46
- "✅ Symbolic link created successfully!",
47
- "🔄 Add the following snippet to mapper.toml to persist this mapping:",
48
- ]
49
- ),
50
- title="Symlink Created",
51
- border_style="green",
52
- padding=(1, 2),
53
- )
54
- )
36
+ match method:
37
+ case "copy":
38
+ try:
39
+ copy_map(config_file_default_path=PathExtended(orig_path), self_managed_config_file_path=PathExtended(new_path), on_conflict=on_conflict)
40
+ except Exception as e:
41
+ typer.echo(f"[red]Error:[/] {e}")
42
+ typer.Exit(code=1)
43
+ return
44
+ case "symlink":
45
+ try:
46
+ symlink_map(config_file_default_path=PathExtended(orig_path), self_managed_config_file_path=PathExtended(new_path), on_conflict=on_conflict)
47
+ except Exception as e:
48
+ typer.echo(f"[red]Error:[/] {e}")
49
+ typer.Exit(code=1)
50
+ case _:
51
+ raise ValueError(f"Unknown method: {method}")
52
+ console.print(Panel("\n".join(["✅ Symbolic link created successfully!", "🔄 Add the following snippet to mapper.toml to persist this mapping:",]), title="Symlink Created", border_style="green", padding=(1, 2),))
55
53
 
56
54
  # mapper_snippet = "\n".join(
57
55
  # [
@@ -61,7 +59,6 @@ def main(
61
59
  # f"{orig_path.name.split('.')[0]} = {{ this = '{orig_path.collapseuser().as_posix()}', to_this = '{new_path.collapseuser().as_posix()}' }}",
62
60
  # ]
63
61
  # )
64
-
65
62
  # console.print(
66
63
  # Panel(
67
64
  # mapper_snippet,
@@ -48,9 +48,9 @@ def install(no_copy_assets: Annotated[bool, typer.Option("--no-assets-copy", "-n
48
48
  else:
49
49
  import platform
50
50
  if platform.system() == "Windows":
51
- run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=6.99" """)
51
+ run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=7.32" """)
52
52
  else:
53
- run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.99" """)
53
+ run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=7.32" """)
54
54
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
55
55
  if not no_copy_assets:
56
56
  create_default_shell_profile() # involves copying assets too
@@ -75,7 +75,7 @@ def navigate():
75
75
  path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
76
76
  from machineconfig.utils.code import run_shell_script
77
77
  if Path.home().joinpath("code/machineconfig").exists(): executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
78
- else: executable = """--with "machineconfig>=6.99,textual" """
78
+ else: executable = """--with "machineconfig>=7.32,textual" """
79
79
  run_shell_script(f"""uv run {executable} {path}""")
80
80
 
81
81
 
@@ -140,7 +140,8 @@ croc {relay_arg} send {zip_arg} {qrcode_arg} {text_arg} {path_arg}"""
140
140
  exit_then_run_shell_script(script=script, strict=False)
141
141
 
142
142
 
143
- def share_file_receive(code_args: Annotated[list[str], typer.Argument(help="Receive code or relay command. Examples: '7121-donor-olympic-bicycle' or '--relay 10.17.62.206:443 7121-donor-olympic-bicycle'")],) -> None:
143
+ def share_file_receive(code_args: Annotated[list[str], typer.Argument(help="Receive code or relay command. Examples: '7121-donor-olympic-bicycle' or '--relay 10.17.62.206:443 7121-donor-olympic-bicycle'")],
144
+ ) -> None:
144
145
  """Receive a file using croc with relay server.
145
146
  Usage examples:
146
147
  devops network receive 7121-donor-olympic-bicycle
@@ -150,9 +151,22 @@ Usage examples:
150
151
  from machineconfig.utils.installer_utils.installer import install_if_missing
151
152
  install_if_missing(which="croc")
152
153
  import platform
154
+ import sys
153
155
 
154
156
  is_windows = platform.system() == "Windows"
155
157
 
158
+ # If no args passed via typer, try to get them from sys.argv directly
159
+ # This handles the case where -- was used and arguments weren't parsed by typer
160
+ if not code_args or (len(code_args) == 1 and code_args[0] in ['--relay', 'croc']):
161
+ # Find the index of 'rx' or 'receive' in sys.argv and get everything after it
162
+ try:
163
+ for i, arg in enumerate(sys.argv):
164
+ if arg in ['rx', 'receive', 'r'] and i + 1 < len(sys.argv):
165
+ code_args = sys.argv[i + 1:]
166
+ break
167
+ except Exception:
168
+ pass
169
+
156
170
  # Join all arguments
157
171
  input_str = " ".join(code_args)
158
172
  tokens = input_str.split()
@@ -161,25 +175,30 @@ Usage examples:
161
175
  relay_server: str | None = None
162
176
  secret_code: str | None = None
163
177
 
164
- # Remove 'croc' from tokens if present
165
- tokens = [t for t in tokens if t != 'croc']
178
+ # Remove 'croc' and 'export' from tokens if present
179
+ tokens = [t for t in tokens if t not in ['croc', 'export']]
166
180
 
167
181
  # Look for --relay flag and capture next token
168
- if '--relay' in tokens:
169
- relay_idx = tokens.index('--relay')
170
- if relay_idx + 1 < len(tokens):
171
- relay_server = tokens[relay_idx + 1]
182
+ relay_idx = -1
183
+ for i, token in enumerate(tokens):
184
+ if token == '--relay' and i + 1 < len(tokens):
185
+ relay_server = tokens[i + 1]
186
+ relay_idx = i
187
+ break
172
188
 
173
189
  # Look for CROC_SECRET= prefix in any token
174
190
  for token in tokens:
175
191
  if token.startswith('CROC_SECRET='):
176
- secret_code = token.split('=', 1)[1].strip('"')
192
+ secret_code = token.split('=', 1)[1].strip('"').strip("'")
177
193
  break
178
194
 
179
195
  # If no secret code found yet, look for tokens with dashes (typical pattern: number-word-word-word)
196
+ # Skip relay server and relay flag
180
197
  if not secret_code:
181
- for token in tokens:
182
- if '-' in token and not token.startswith('-') and token not in [relay_server, 'export']:
198
+ for i, token in enumerate(tokens):
199
+ if '-' in token and not token.startswith('-') and token != relay_server:
200
+ if relay_idx >= 0 and (i == relay_idx or i == relay_idx + 1):
201
+ continue # Skip relay server parts
183
202
  secret_code = token
184
203
  break
185
204
 
@@ -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.99"]
83
+ uv_with = ["machineconfig>=7.32"]
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.92" python -m machineconfig.scripts.python.mount_nfs
8
+ uv run --python 3.14 --with "machineconfig>=7.32" 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."
@@ -69,6 +69,7 @@ def get_session_tabs() -> list[tuple[str, str]]:
69
69
  print(result)
70
70
  return result
71
71
 
72
+
72
73
  def start_wt(layout_name: Annotated[str, typer.Argument(help="Layout name to start.")]):
73
74
  from pathlib import Path
74
75
  layouts_file = Path.home().joinpath("dotfiles/machineconfig/layouts.json")
@@ -87,7 +88,6 @@ def start_wt(layout_name: Annotated[str, typer.Argument(help="Layout name to sta
87
88
  raise typer.Exit(code=1)
88
89
  from machineconfig.cluster.sessions_managers.wt_local import run_wt_layout
89
90
  run_wt_layout(layout_config=chosen_layout)
90
-
91
91
  # cmd = f'powershell -ExecutionPolicy Bypass -File "./{layout_name}_layout.ps1"'
92
92
  # from machineconfig.utils.code import exit_then_run_shell_script
93
93
  # exit_then_run_shell_script(cmd, strict=True)
@@ -30,10 +30,11 @@ function wrap_in_shell_script {
30
30
 
31
31
  # Check if the file exists
32
32
  if (Test-Path $env:OP_PROGRAM_PATH) {
33
- Write-Host "Found op program at: $env:OP_PROGRAM_PATH"
33
+ Write-Host "🚀 Taking over from python script @ $env:OP_PROGRAM_PATH"
34
34
  & $env:OP_PROGRAM_PATH
35
+ Write-Host "✅ '$Command' execution completed."
35
36
  } else {
36
- Write-Host "no op program found"
37
+ Write-Host " '$Command' execution completed."
37
38
  }
38
39
 
39
40
  # Clean up the temporary environment variable so it doesn't leak to other processes/sessions
@@ -7,7 +7,7 @@ $user = ''
7
7
  $sharePath = ''
8
8
  $driveLetter = ''
9
9
 
10
- uv run --python 3.14 --with "machineconfig>=6.99" python -m machineconfig.scripts.python.mount_ssh
10
+ uv run --python 3.14 --with "machineconfig>=7.32" 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
@@ -54,7 +54,7 @@ alias ff='wrap_in_shell_script ftpx'
54
54
  alias f='wrap_in_shell_script fire'
55
55
  alias r='wrap_in_shell_script croshell'
56
56
  alias u='wrap_in_shell_script utils'
57
- alias t='wrap_in_shell_script term'
57
+ alias t='wrap_in_shell_script terminal'
58
58
 
59
59
 
60
60
  # alias gcs='gh copilot suggest -t shell'
@@ -2,15 +2,15 @@
2
2
  . <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/uv.sh")
3
3
  . <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/linux/mcfgs")
4
4
 
5
- alias devops='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=6.99" devops'
6
- alias cloud='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=6.99" cloud'
7
- alias agents='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=6.99" agents'
8
- alias sessions='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=6.99" sessions'
9
- alias ftpx='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=6.99" ftpx'
10
- alias fire='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=6.99" fire'
11
- alias croshell='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=6.99" croshell'
12
- alias utils='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=6.99" utils'
13
- alias terminal='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=6.99" terminal'
5
+ alias devops='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" devops'
6
+ alias cloud='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" cloud'
7
+ alias agents='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" agents'
8
+ alias sessions='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" sessions'
9
+ alias ftpx='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" ftpx'
10
+ alias fire='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" fire'
11
+ alias croshell='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" croshell'
12
+ alias utils='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" utils'
13
+ alias terminal='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" terminal'
14
14
 
15
15
  alias d='wrap_in_shell_script devops'
16
16
  alias c='wrap_in_shell_script cloud'
@@ -3,15 +3,15 @@
3
3
  iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
4
4
  iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/windows/mcfgs.ps1").Content
5
5
 
6
- function devops { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=6.99" devops $args }
7
- function cloud { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=6.99" cloud $args }
8
- function agents { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=6.99" agents $args }
9
- function sessions { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=6.99" sessions $args }
10
- function ftpx { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=6.99" ftpx $args }
11
- function fire { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=6.99" fire $args }
12
- function croshell { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=6.99" croshell $args }
13
- function utils { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=6.99" utils $args }
14
- function terminal { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=6.99" terminal $args }
6
+ function devops { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" devops $args }
7
+ function cloud { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" cloud $args }
8
+ function agents { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" agents $args }
9
+ function sessions { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" sessions $args }
10
+ function ftpx { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" ftpx $args }
11
+ function fire { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" fire $args }
12
+ function croshell { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" croshell $args }
13
+ function utils { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" utils $args }
14
+ function terminal { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" terminal $args }
15
15
 
16
16
  function d { wrap_in_shell_script devops @args }
17
17
  function c { wrap_in_shell_script cloud @args }
@@ -96,7 +96,7 @@ def build_links(target_paths: list[tuple[PLike, str]], repo_root: PLike):
96
96
 
97
97
 
98
98
  def symlink_map(config_file_default_path: PathExtended, self_managed_config_file_path: PathExtended,
99
- on_conflict: Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"]
99
+ on_conflict: Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"]
100
100
  ) -> OperationResult:
101
101
  """helper function. creates a symlink from `config_file_default_path` to `self_managed_config_file_path`.
102
102
 
@@ -104,10 +104,10 @@ def symlink_map(config_file_default_path: PathExtended, self_managed_config_file
104
104
 
105
105
  on_conflict strategies:
106
106
  - throw-error: Raise exception when files differ
107
- - overwriteSelfManaged: Delete self_managed_config_file_path (self-managed), move config_file_default_path to self_managed_config_file_path, create symlink
108
- - backupSelfManaged: Backup self_managed_config_file_path (self-managed), move config_file_default_path to self_managed_config_file_path, create symlink
109
- - overwriteDefaultPath: Delete config_file_default_path (default path), create symlink to self_managed_config_file_path
110
- - backupDefaultPath: Backup config_file_default_path (default path), create symlink to self_managed_config_file_path
107
+ - overwrite-self-managed: Delete self_managed_config_file_path (self-managed), move config_file_default_path to self_managed_config_file_path, create symlink
108
+ - backup-self-managed: Backup self_managed_config_file_path (self-managed), move config_file_default_path to self_managed_config_file_path, create symlink
109
+ - overwrite-default-path: Delete config_file_default_path (default path), create symlink to self_managed_config_file_path
110
+ - backup-default-path: Backup config_file_default_path (default path), create symlink to self_managed_config_file_path
111
111
 
112
112
  Note: `config_file_default_path` is the default system location, `self_managed_config_file_path` is the self-managed config location
113
113
 
@@ -170,32 +170,33 @@ def symlink_map(config_file_default_path: PathExtended, self_managed_config_file
170
170
  except Exception:
171
171
  console.print(Panel("⚠️ Could not show diff using 'delta'. Please install 'delta' for better diff visualization.", title="Delta Not Found", expand=False))
172
172
 
173
- if on_conflict == "throw-error":
174
- raise RuntimeError(f"Conflict detected: {config_file_default_path} and {self_managed_config_file_path} both exist with different content")
175
- elif on_conflict == "overwriteSelfManaged":
176
- action_taken = "backing_up_target"
177
- details = "Overwriting self-managed config, moving default path to self-managed location"
178
- console.print(Panel(f"📦 OVERWRITE SELF-MANAGED | Deleting {self_managed_config_file_path}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Overwrite Self-Managed", expand=False))
179
- self_managed_config_file_path.delete(sure=True)
180
- config_file_default_path.move(path=self_managed_config_file_path)
181
- elif on_conflict == "backupSelfManaged":
182
- backup_name = f"{self_managed_config_file_path}.orig_{randstr()}"
183
- action_taken = "backing_up_target"
184
- details = f"Backed up self-managed config to {backup_name}"
185
- console.print(Panel(f"📦 BACKUP SELF-MANAGED | Moving {self_managed_config_file_path} to {backup_name}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Backup Self-Managed", expand=False))
186
- self_managed_config_file_path.move(path=backup_name)
187
- config_file_default_path.move(path=self_managed_config_file_path)
188
- elif on_conflict == "overwriteDefaultPath":
189
- action_taken = "backupConfigDefaultPath"
190
- details = "Overwriting default path, creating symlink to self-managed config"
191
- console.print(Panel(f"📦 OVERWRITE DEFAULT | Deleting {config_file_default_path}, creating symlink to {self_managed_config_file_path}", title="Overwrite Default", expand=False))
192
- config_file_default_path.delete(sure=True)
193
- elif on_conflict == "backupDefaultPath":
194
- backup_name = f"{config_file_default_path}.orig_{randstr()}"
195
- action_taken = "backupConfigDefaultPath"
196
- details = f"Backed up default path to {backup_name}"
197
- console.print(Panel(f"📦 BACKUP DEFAULT | Moving {config_file_default_path} to {backup_name}, creating symlink to {self_managed_config_file_path}", title="Backup Default", expand=False))
198
- config_file_default_path.move(path=backup_name)
173
+ match on_conflict:
174
+ case "throw-error":
175
+ raise RuntimeError(f"Conflict detected: {config_file_default_path} and {self_managed_config_file_path} both exist with different content")
176
+ case "overwrite-self-managed":
177
+ action_taken = "backing_up_target"
178
+ details = "Overwriting self-managed config, moving default path to self-managed location"
179
+ console.print(Panel(f"📦 OVERWRITE SELF-MANAGED | Deleting {self_managed_config_file_path}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Overwrite Self-Managed", expand=False))
180
+ self_managed_config_file_path.delete(sure=True)
181
+ config_file_default_path.move(path=self_managed_config_file_path)
182
+ case "backup-self-managed":
183
+ backup_name = f"{self_managed_config_file_path}.orig_{randstr()}"
184
+ action_taken = "backing_up_target"
185
+ details = f"Backed up self-managed config to {backup_name}"
186
+ console.print(Panel(f"📦 BACKUP SELF-MANAGED | Moving {self_managed_config_file_path} to {backup_name}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Backup Self-Managed", expand=False))
187
+ self_managed_config_file_path.move(path=backup_name)
188
+ config_file_default_path.move(path=self_managed_config_file_path)
189
+ case "overwrite-default-path":
190
+ action_taken = "backupConfigDefaultPath"
191
+ details = "Overwriting default path, creating symlink to self-managed config"
192
+ console.print(Panel(f"📦 OVERWRITE DEFAULT | Deleting {config_file_default_path}, creating symlink to {self_managed_config_file_path}", title="Overwrite Default", expand=False))
193
+ config_file_default_path.delete(sure=True)
194
+ case "backup-default-path":
195
+ backup_name = f"{config_file_default_path}.orig_{randstr()}"
196
+ action_taken = "backupConfigDefaultPath"
197
+ details = f"Backed up default path to {backup_name}"
198
+ console.print(Panel(f"📦 BACKUP DEFAULT | Moving {config_file_default_path} to {backup_name}, creating symlink to {self_managed_config_file_path}", title="Backup Default", expand=False))
199
+ config_file_default_path.move(path=backup_name)
199
200
  else:
200
201
  # self_managed_config_file_path doesn't exist
201
202
  if config_file_default_path.is_symlink():
@@ -243,7 +244,7 @@ def symlink_map(config_file_default_path: PathExtended, self_managed_config_file
243
244
  return {"action": action_taken, "details": details}
244
245
 
245
246
 
246
- def copy_map(config_file_default_path: PathExtended, self_managed_config_file_path: PathExtended, on_conflict: Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"]) -> OperationResult:
247
+ def copy_map(config_file_default_path: PathExtended, self_managed_config_file_path: PathExtended, on_conflict: Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"]) -> OperationResult:
247
248
  config_file_default_path = PathExtended(config_file_default_path).expanduser().absolute()
248
249
  self_managed_config_file_path = PathExtended(self_managed_config_file_path).expanduser().absolute()
249
250
 
@@ -301,25 +302,25 @@ def copy_map(config_file_default_path: PathExtended, self_managed_config_file_pa
301
302
  match on_conflict:
302
303
  case "throw-error":
303
304
  raise RuntimeError(f"Conflict detected: {config_file_default_path} and {self_managed_config_file_path} both exist with different content")
304
- case "overwriteSelfManaged":
305
+ case "overwrite-self-managed":
305
306
  action_taken = "backing_up_target"
306
307
  details = "Overwriting self-managed config with default path content"
307
308
  console.print(Panel(f"📦 OVERWRITE SELF-MANAGED | Deleting {self_managed_config_file_path}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Overwrite Self-Managed", expand=False))
308
309
  self_managed_config_file_path.delete(sure=True)
309
310
  config_file_default_path.move(path=self_managed_config_file_path)
310
- case "backupSelfManaged":
311
+ case "backup-self-managed":
311
312
  backup_name = f"{self_managed_config_file_path}.orig_{randstr()}"
312
313
  action_taken = "backing_up_target"
313
314
  details = f"Backed up self-managed config to {backup_name}"
314
315
  console.print(Panel(f"📦 BACKUP SELF-MANAGED | Moving {self_managed_config_file_path} to {backup_name}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Backup Self-Managed", expand=False))
315
316
  self_managed_config_file_path.move(path=backup_name)
316
317
  config_file_default_path.move(path=self_managed_config_file_path)
317
- case "overwriteDefaultPath":
318
+ case "overwrite-default-path":
318
319
  action_taken = "backupConfigDefaultPath"
319
320
  details = "Overwriting default path with self-managed config"
320
321
  console.print(Panel(f"📦 OVERWRITE DEFAULT | Deleting {config_file_default_path}, will copy from {self_managed_config_file_path}", title="Overwrite Default", expand=False))
321
322
  config_file_default_path.delete(sure=True)
322
- case "backupDefaultPath":
323
+ case "backup-default-path":
323
324
  backup_name = f"{config_file_default_path}.orig_{randstr()}"
324
325
  action_taken = "backupConfigDefaultPath"
325
326
  details = f"Backed up default path to {backup_name}"
@@ -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.99"
11
+ MACHINECONFIG_VERSION = "machineconfig>=7.32"
12
12
  DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
13
13
 
14
14
  class SSH:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 7.2
3
+ Version: 7.32
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -94,8 +94,8 @@ machineconfig/profile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
94
94
  machineconfig/profile/backup.toml,sha256=Hb25sIdKVvLqOF62NgiOpGZxd45I6IhsNHu623RtfQQ,766
95
95
  machineconfig/profile/bash_shell_profiles.md,sha256=mio0xkMTwO-F3fikWIfgcdQaPCmQrmkxJMNtZsTe9TI,514
96
96
  machineconfig/profile/create_helper.py,sha256=_iNeuwmcEGTx6sf_f40JKHfOCuJRZQRpyE8Fo_3Q6bI,1519
97
- machineconfig/profile/create_links.py,sha256=Zz9gDtL1C33uQdBzXLMPWq8-7_OklyPQ3FQRsueWO-k,14220
98
- machineconfig/profile/create_links_export.py,sha256=n5GKQZGd0YytW_YVuau_SL7CTDWuNEe4O9x1yEsHGv8,3297
97
+ machineconfig/profile/create_links.py,sha256=gdjRWEO4NDSlBWvCPbkBCqegapRB0mKdIsz1z4RJDT0,14228
98
+ machineconfig/profile/create_links_export.py,sha256=BXav-70rme4oagfU8I-xrv_xc6E409ipafegGeIuUDw,3309
99
99
  machineconfig/profile/create_shell_profile.py,sha256=fib3YOj4QMV4dy7ysJtSzner1x-0nGtnGvnTKGyq578,10280
100
100
  machineconfig/profile/mapper.toml,sha256=CGGKi4VbRo1-AuHU7w1g94NbAys0pxn6fI-2l-lUmY0,12469
101
101
  machineconfig/profile/records/generic/shares.toml,sha256=FduDztfyQtZcr5bfx-RSKhEEweweQSWfVXkKWnx8hCY,143
@@ -110,9 +110,8 @@ machineconfig/scripts/linux/fzfag,sha256=x0rX7vM_YjKLZ822D2Xh0HdaTj5kR_gG3g_5_w6
110
110
  machineconfig/scripts/linux/fzffg,sha256=jjeeyFkWmBbwH2taRqC3EOzZep2KR-ZYoI4UI-5kHqg,1090
111
111
  machineconfig/scripts/linux/fzfg,sha256=ClGnJZUsIk4y0qs3W5iXGo-nd0FaqAHMsnh8uoXQFy8,1190
112
112
  machineconfig/scripts/linux/fzfrga,sha256=xSdws6ae28ZXkkqz_uupZ0MYw_vxE2qpLT2DLS3WITM,460
113
- machineconfig/scripts/linux/mcfgs,sha256=DlnOwqCroszbTOM_XtJiz3Hz7po0uV5dQHf5eKcXAhg,1391
113
+ machineconfig/scripts/linux/mcfgs,sha256=R2WmmIVOL9nVtyZdvU02664GD7lYrmQUW4Y8b-wjLM8,1387
114
114
  machineconfig/scripts/linux/skrg,sha256=JgQJGwxaChr148bDnpTB0rrqZMe2o2zGSDA9x_oUhWM,133
115
- machineconfig/scripts/linux/term,sha256=CNPY8p6SitOmtOPKXPervPPabjJNYBerA12SHN_v7w4,1139
116
115
  machineconfig/scripts/linux/other/share_cloud.sh,sha256=lIZrXiaOT11kzu4NFNTXvANhc2bMdSPDYD1-7XUO_C0,2027
117
116
  machineconfig/scripts/linux/other/share_nfs,sha256=LDQZQ9TV7z2y7RtNHiO4Wb513MztyGjaAV-GzTGwUdc,1374
118
117
  machineconfig/scripts/linux/other/start_docker,sha256=_yDN_PPqgzSUnPT7dmniMTpL4IfeeaGy1a2OL3IJlDU,525
@@ -129,7 +128,7 @@ machineconfig/scripts/python/ftpx.py,sha256=A13hL_tDYfcsaK9PkshK-0lrUS6KPhPCtwqW
129
128
  machineconfig/scripts/python/interactive.py,sha256=jFHpiQq_lisa51BS4-qUlWPJ1-pmHmPAfA6dixdsOzY,11745
130
129
  machineconfig/scripts/python/mcfg.py,sha256=TB5lZDZDImGqX4_mMSEv4ZoFigIPA0RXn-9H2cmPS6g,2457
131
130
  machineconfig/scripts/python/sessions.py,sha256=Q_fbprawvW1x_E6jKQ-Z2Z5MRurRaepKUvi5z1G4CUw,9531
132
- machineconfig/scripts/python/terminal.py,sha256=5D0RlZkx9ut5WlwjDI8j-t_z6u-H_jJD1eKBnWy_TGU,5191
131
+ machineconfig/scripts/python/terminal.py,sha256=RY7hJ0JIefJeGe_sp7ZiZpOG_vhXLmEAFRq-Fon-VEY,5191
133
132
  machineconfig/scripts/python/utils.py,sha256=9vwF5QRbHphNF154UYg6Ld3W0b3N9uEkfMEeR-nP_sg,2802
134
133
  machineconfig/scripts/python/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
134
  machineconfig/scripts/python/ai/generate_files.py,sha256=VfjKdwgF8O6E4oiRtfWNliibLmmwGe7f9ld6wpOsXTw,14498
@@ -163,7 +162,7 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.json,sha256=nahHKRw1
163
162
  machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
164
163
  machineconfig/scripts/python/env_manager/__init__.py,sha256=E4LAHbU1wo2dLjE36ntv8U7QNTe8TasujUAYK9SLvWk,6
165
164
  machineconfig/scripts/python/env_manager/path_manager_backend.py,sha256=ZVGlGJALhg7zNABDdwXxL7MFbL2BXPebObipXSLGbic,1552
166
- machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=xCfevrfzL4rLjWeGhWgykBxCGK-zS_7SxeD8whp7m1M,6932
165
+ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=uzbNgu5m9itV87-WXfI4cR2yCuT_70mlfpt59L2zL3U,6932
167
166
  machineconfig/scripts/python/helpers_agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
167
  machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py,sha256=YD6-rtudHNip8tx85amSmOZZIHBP9khq4az3dF41j6U,5934
169
168
  machineconfig/scripts/python/helpers_agents/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
@@ -193,13 +192,13 @@ machineconfig/scripts/python/helpers_croshell/start_slidev.py,sha256=HfJReOusTPh
193
192
  machineconfig/scripts/python/helpers_croshell/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
194
193
  machineconfig/scripts/python/helpers_croshell/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
195
194
  machineconfig/scripts/python/helpers_devops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
- machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=mFEqpjCEhRfHRX4I8NspFmIOB8VvsJ6U9B5YOCIVDlE,6875
197
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=Qp6Pgbs-nJzf7_us_wPsIimPLJhY4TFYwIiFcmy-dxU,3249
195
+ machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=kWgtoTPejj5lNk2FD2E1scgqloaxUq00_7oFuDSH0AI,6891
196
+ machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=pVUFE1SUtyTiulLzUssf8FrtU190EIV-l9rpwucsBa0,3427
198
197
  machineconfig/scripts/python/helpers_devops/cli_data.py,sha256=79Xvx7YnbueruEnl69hrDg2AhVxf_zCUdlVcKfeMGyQ,1774
199
198
  machineconfig/scripts/python/helpers_devops/cli_nw.py,sha256=9NcVJvPYaUDtmI_DSKthZxR4emMBeNWVM_M5f0YR8EQ,7302
200
199
  machineconfig/scripts/python/helpers_devops/cli_repos.py,sha256=Xwkv1adqHZvTfRSPWiqSK3PZ1XADyx3llw_YkbxaKyE,12505
201
- machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=QV7URlqzl1c1SW0dD0zWuDFdwfegEbpCBseNxMDZRq0,6621
202
- machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=qNGpLYWEYsgILqogd7yrXG5Rz3R25AOsXeAUc7fdBEo,10222
200
+ machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=FDB8YjLYYj1qZkCeeAMVc7jnGy4fPVzRzqUxlvZa4DU,6621
201
+ machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=BJnm9mEI0PGA2xK_ciNX1docIiRQ_fNhygGrDCcTekw,11076
203
202
  machineconfig/scripts/python/helpers_devops/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
204
203
  machineconfig/scripts/python/helpers_devops/cli_utils.py,sha256=B9pnosujOxZLpwzJO4YAqeO-2rvvOFIZgrUwGREZXfM,11118
205
204
  machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py,sha256=Dn8luB6QJzxKiiFSC-NMqiYddWZoca3A8eOjMYZDzTc,5598
@@ -226,7 +225,7 @@ machineconfig/scripts/python/helpers_navigator/search_bar.py,sha256=kDi8Jhxap8wd
226
225
  machineconfig/scripts/python/helpers_repos/action.py,sha256=8je051kpGZ7A_GRsQyWKhPZ8xVW7tSm4bnPu6VjxaXk,9755
227
226
  machineconfig/scripts/python/helpers_repos/action_helper.py,sha256=XRCtkGkNrxauqUd9qkxtfJt02Mx2gejSYDLL0jyWn24,6176
228
227
  machineconfig/scripts/python/helpers_repos/clone.py,sha256=UULEG5xJuXlPGU0nqXH6U45jA9DOFqLw8B4iPytCwOQ,5471
229
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=a2AfMjqAHwBr2gI83VG7SU2hys8VAZE1dwmlp9_PJ60,10450
228
+ machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=3iub-GApBNiOaPLfcOxB9RVF_RPCLWKZ7A8w3CtrFcA,10450
230
229
  machineconfig/scripts/python/helpers_repos/count_lines.py,sha256=Q5c7b-DxvTlQmljoic7niTuiAVyFlwYvkVQ7uRJHiTo,16009
231
230
  machineconfig/scripts/python/helpers_repos/count_lines_frontend.py,sha256=vSDtrF4829jziwp6WZmGt9G8MJ9jY4hfXqtf0vhkYSE,607
232
231
  machineconfig/scripts/python/helpers_repos/entrypoint.py,sha256=WYEFGUJp9HWImlFjbs_hiFZrUqM_KEYm5VvSUjWd04I,2810
@@ -242,7 +241,7 @@ machineconfig/scripts/python/nw/add_ssh_key.py,sha256=9JLmWu8pE7PAL5VuCFd19iVEdC
242
241
  machineconfig/scripts/python/nw/devops_add_identity.py,sha256=aPjcHbTLhxYwWYcandyAHdwuO15ZBu3fB82u6bI0tMQ,3773
243
242
  machineconfig/scripts/python/nw/devops_add_ssh_key.py,sha256=CkIl85hZLtG9k7yXLSzqi88YrilHV4hIUWHAPBwxWjw,8922
244
243
  machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
245
- machineconfig/scripts/python/nw/mount_nfs,sha256=x5_rKgP2Kza6LHCHFJqE0Ej___aUXHs-AwzcIlhYY-g,1855
244
+ machineconfig/scripts/python/nw/mount_nfs,sha256=Dri4hGiM2GxpqqxpdBPbf7dRHrr7P1HzZy6xtrHYQfU,1855
246
245
  machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
247
246
  machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
248
247
  machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
@@ -256,12 +255,11 @@ machineconfig/scripts/python/nw/wsl_windows_transfer.py,sha256=jHJyFTuks_Kw4cgE8
256
255
  machineconfig/scripts/windows/fzfb.ps1,sha256=Bmngm2aY8hnPa3iKAOK6EPDYdKzGLUc81wYOnJhNoqg,149
257
256
  machineconfig/scripts/windows/fzfg.ps1,sha256=CHJbMrMuZePd4dxwIwz3g4XWAEmWmckuX-Nrx2xgRkg,27
258
257
  machineconfig/scripts/windows/fzfrga.bat,sha256=rU_KBMO6ii2EZ0akMnmDk9vpuhKSUZqkV0o8a8ywXcM,488
259
- machineconfig/scripts/windows/mcfgs.ps1,sha256=Ag-r5klgkRxeCI1AN3vlgmwriHvC_g7XSuDt0YnH5-w,1778
260
- machineconfig/scripts/windows/term.ps1,sha256=nme_OWis84qN-zI2c0rdysNcDIdoaEKajXZhP2QioQs,1742
258
+ machineconfig/scripts/windows/mcfgs.ps1,sha256=1mLCFDPBG-1uNVaZe3fIAgvS_uo3u55TQaysG6Wj9Sw,1868
261
259
  machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
262
260
  machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
263
261
  machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
264
- machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=24Zp11dG4_l35-bVuc3hbgh88J5bbuw08y5oQrs3sCs,322
262
+ machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=lO0zd1Qyu_nC43TOzfCcfu4rPmMYZlluFKZWYzb2GnY,322
265
263
  machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
266
264
  machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
267
265
  machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
@@ -333,7 +331,7 @@ machineconfig/settings/rofi/config.rasi,sha256=nDX5B8wdXQYF1fwiOTBRJUI4l_gQbYaLa
333
331
  machineconfig/settings/rofi/config_default.rasi,sha256=rTfKnC-bZuWX1l-lWQACCUOE1ShhkfykAxtXX9PlQHE,4694
334
332
  machineconfig/settings/shells/alacritty/alacritty.toml,sha256=EbL-2Y4QunW1pvRWB2yuLCw8MMPONheJr5LFoWRieUQ,871
335
333
  machineconfig/settings/shells/alacritty/alacritty.yml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
- machineconfig/settings/shells/bash/init.sh,sha256=BBIeIkhBp7IJHU5_KcUBCTilqjmmC6ZWYqNSHIs_ABA,2927
334
+ machineconfig/settings/shells/bash/init.sh,sha256=EoZemahn3ewLsxUWv1RD1XLq-WZNNVE8yIhIu7ENDZs,2931
337
335
  machineconfig/settings/shells/hyper/.hyper.js,sha256=h-HqeYlvPvPD4Ee7828Cxo87uVkzbMGJFqXTZIWoegw,8884
338
336
  machineconfig/settings/shells/ipy/profiles/default/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
339
337
  machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -379,7 +377,7 @@ machineconfig/setup_linux/others/cli_installation.sh,sha256=gVvszYZJgKPRJx2SEaE3
379
377
  machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKGPn8fIdZMn3p0RrHEkb8rWBGsdVGbus,1207
380
378
  machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
381
379
  machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
382
- machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=moKocCzB0Oik4YvQcQs6lt5mN7f4bUnNsO-VBRguMXA,1449
380
+ machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=c1aV0EhTTDU8YTG1XKkiRN8cAYG8WKFJVn6CEGydQ6s,1449
383
381
  machineconfig/setup_mac/__init__.py,sha256=Q1waupi5vCBroLqc8Rtnw69_7jLnm2Cs7_zH_GSZgMs,616
384
382
  machineconfig/setup_mac/apps.sh,sha256=R0N6fBwLCzwy4qAormyMerXXXrHazibSkY6NrNOpTQU,2772
385
383
  machineconfig/setup_mac/apps_gui.sh,sha256=3alvddg918oMlJB2aUWJWpGGoaq5atlxcaOwhnyXlRI,9517
@@ -394,7 +392,7 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
394
392
  machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
395
393
  machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
396
394
  machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
397
- machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=-hZQv00ogDbe4jNz17J09PmfOv0zGju0gS35XAD0-yQ,1751
395
+ machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=WXWrFz-Ws9QpFkNPHa_hCt8f91Xzm94yzYyzIJwzvf0,1751
398
396
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
399
397
  machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
400
398
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -402,7 +400,7 @@ machineconfig/utils/accessories.py,sha256=Rs8R0GUb2Ub6YimkgXHnI02CShS5BKlrZdCigV
402
400
  machineconfig/utils/code.py,sha256=fVeQnhZE8-aoPBsrgjNcBTcv3NuyBSSQv9P8jyC8W_M,6635
403
401
  machineconfig/utils/installer.py,sha256=1ScBaTe_pRsfTYht9-LXmirgnNizNy8u1GgetUfEDO4,10351
404
402
  machineconfig/utils/io.py,sha256=4dSieoqZO8Vvi4vW8lLoITDHBvmFp4dtl3kyeZHQ6Co,2528
405
- machineconfig/utils/links.py,sha256=j2gHll55iqUXtB4NQbo3QwANRL1ztLGZfpcwLoJQZyk,25033
403
+ machineconfig/utils/links.py,sha256=mA98WNkX5iK4c6f8Ht3HKv7sB6VjIwqukTxXY23PVjk,25143
406
404
  machineconfig/utils/meta.py,sha256=4ocYH3Zi6bVN6FVgXoGIfoasV6oxi67I9rQ8hvyYinc,9892
407
405
  machineconfig/utils/notifications.py,sha256=tuXIudcip0tEioG-bm8BbLr3FMDve4f6BktlznBhKxM,9013
408
406
  machineconfig/utils/options.py,sha256=VWYx3EKJxIp-CJ8gDGYdjclKSc1tMUhyrC8v3seeneo,7447
@@ -412,7 +410,7 @@ machineconfig/utils/procs.py,sha256=YPA_vEYQGwPd_o_Lc6nOTBo5BrB1tSs8PJ42XiGpenM,
412
410
  machineconfig/utils/scheduler.py,sha256=fguwvINyaupOxdU5Uadyxalh_jXTXDzt0ioEgjEOKcM,14705
413
411
  machineconfig/utils/scheduling.py,sha256=vcJgajeJPSWkJNlarYJSmLvasdOuCtBM4druOAB1Nwc,11089
414
412
  machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
415
- machineconfig/utils/ssh.py,sha256=6LHTYA4OB5GtsmTjQ8Rut0S6JUqZgm7Vx_Rm2s1G98s,39008
413
+ machineconfig/utils/ssh.py,sha256=xrMpTa4WFQG6QgaE00uJQZYq0RPaDWvx28Ke6YogYZo,39008
416
414
  machineconfig/utils/terminal.py,sha256=VDgsjTjBmMGgZN0YIc0pJ8YksLDrBtiXON1EThy7_is,4264
417
415
  machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
418
416
  machineconfig/utils/upgrade_packages.py,sha256=75kabcI-chMiaBnafJ_hdhDUz_GyH7AsDt7rW3hyu9M,5851
@@ -441,8 +439,8 @@ machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoS
441
439
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
442
440
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
443
441
  machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
444
- machineconfig-7.2.dist-info/METADATA,sha256=DC93r9S7PPEHc072tYmxoheeY2fls1KhmVq93sGl5yg,3395
445
- machineconfig-7.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
446
- machineconfig-7.2.dist-info/entry_points.txt,sha256=0ho96z7b1toS6CeiajpTwEwQa83UrJ3g1onD4Wxax9o,624
447
- machineconfig-7.2.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
448
- machineconfig-7.2.dist-info/RECORD,,
442
+ machineconfig-7.32.dist-info/METADATA,sha256=Cr6xNtBnHDG4jLnsqC1QAje0Wn1LR5pm5gih8-c5ZhI,3396
443
+ machineconfig-7.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
444
+ machineconfig-7.32.dist-info/entry_points.txt,sha256=0ho96z7b1toS6CeiajpTwEwQa83UrJ3g1onD4Wxax9o,624
445
+ machineconfig-7.32.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
446
+ machineconfig-7.32.dist-info/RECORD,,
@@ -1,39 +0,0 @@
1
-
2
- #!/usr/bin/env bash
3
- set -euo pipefail
4
-
5
- RANDOM_NAME=$(date +%s%N | sha256sum | head -c 16)
6
- OP_DIR="$HOME/tmp_results/tmp_scripts/machineconfig"
7
- OP_PROGRAM_PATH="$OP_DIR/${RANDOM_NAME}.sh"
8
- export OP_PROGRAM_PATH
9
-
10
- # ANSI color/style codes
11
- BOLD="\033[1m"
12
- RESET="\033[0m"
13
- GREEN="\033[32m"
14
- YELLOW="\033[33m"
15
- BLUE="\033[34m"
16
- RED="\033[31m"
17
-
18
- timestamp=$(date -u +"%Y-%m-%d %H:%M:%SZ")
19
-
20
- printf "%b\n" "${BOLD}${BLUE}🛠️ terminal — running term${RESET}"
21
- printf "%b\n" "${BLUE}Timestamp:${RESET} ${timestamp}"
22
- printf "%b\n" "${BLUE}Op program path:${RESET} ${OP_PROGRAM_PATH}"
23
-
24
- terminal "$@"
25
-
26
- if [[ -f "$OP_PROGRAM_PATH" ]]; then
27
- printf "%b\n" "${GREEN}✅ Found op program:${RESET} ${OP_PROGRAM_PATH}"
28
- bat --style=plain --paging=never "$OP_PROGRAM_PATH"
29
- printf "%b\n" "${GREEN}▶ Running...${RESET}"
30
- . "$OP_PROGRAM_PATH"
31
- status=$?
32
- if [[ $status -eq 0 ]]; then
33
- printf "%b\n" "${GREEN}✅ Completed successfully (exit ${status})${RESET}"
34
- else
35
- printf "%b\n" "${YELLOW}⚠️ Program exited with status ${status}${RESET}"
36
- fi
37
- else
38
- printf "%b\n" "${YELLOW}⚠️ No op program found at: ${OP_PROGRAM_PATH}${RESET}"
39
- fi
@@ -1,48 +0,0 @@
1
- # Equivalent PowerShell script for term.ps1
2
-
3
- Set-StrictMode -Version Latest
4
- $ErrorActionPreference = 'Stop'
5
-
6
- # Generate random name using timestamp and SHA256 hash
7
- $timestampNs = [DateTimeOffset]::Now.ToUnixTimeMilliseconds() * 1000000
8
- $hashInput = [System.Text.Encoding]::UTF8.GetBytes($timestampNs.ToString())
9
- $sha256 = [System.Security.Cryptography.SHA256]::Create()
10
- $hashBytes = $sha256.ComputeHash($hashInput)
11
- $hashString = -join ($hashBytes | ForEach-Object { $_.ToString('x2') })
12
- $randomName = $hashString.Substring(0, 16)
13
-
14
- $opDir = "$env:USERPROFILE\tmp_results\tmp_scripts\machineconfig"
15
- $opProgramPath = "$opDir\$randomName.ps1"
16
- $global:OP_PROGRAM_PATH = $opProgramPath
17
-
18
- # ANSI color/style codes (using Write-Host colors)
19
- $bold = [char]27 + '[1m'
20
- $reset = [char]27 + '[0m'
21
- $green = [char]27 + '[32m'
22
- $yellow = [char]27 + '[33m'
23
- $blue = [char]27 + '[34m'
24
- $red = [char]27 + '[31m'
25
-
26
- $timestamp = Get-Date -Format 'u'
27
-
28
- Write-Host "${bold}${blue}🛠️ terminal — running term${reset}"
29
- Write-Host "${blue}Timestamp:${reset} ${timestamp}"
30
- Write-Host "${blue}Op program path:${reset} ${opProgramPath}"
31
-
32
- terminal $args
33
-
34
- if (Test-Path $opProgramPath) {
35
- Write-Host "${green}✅ Found op program:${reset} ${opProgramPath}"
36
- # Assuming bat is available; otherwise, use Get-Content
37
- & bat --style=plain --paging=never $opProgramPath
38
- Write-Host "${green}▶ Running...${reset}"
39
- . $opProgramPath
40
- $status = $LASTEXITCODE
41
- if ($status -eq 0) {
42
- Write-Host "${green}✅ Completed successfully (exit ${status})${reset}"
43
- } else {
44
- Write-Host "${yellow}⚠️ Program exited with status ${status}${reset}"
45
- }
46
- } else {
47
- Write-Host "${yellow}⚠️ No op program found at: ${opProgramPath}${reset}"
48
- }