machineconfig 4.9__py3-none-any.whl → 4.91__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/jobs/installer/package_groups.py +4 -1
- machineconfig/scripts/linux/agents +2 -0
- machineconfig/scripts/linux/sessions +2 -0
- machineconfig/scripts/python/{fire_agents.py → agents.py} +7 -0
- machineconfig/scripts/python/croshell.py +13 -27
- machineconfig/scripts/python/devops.py +0 -13
- machineconfig/scripts/python/devops_devapps_install.py +123 -135
- machineconfig/scripts/python/interactive.py +20 -45
- machineconfig/scripts/python/{fire_jobs_layout_helper.py → sessions.py} +7 -0
- machineconfig/utils/installer.py +25 -2
- {machineconfig-4.9.dist-info → machineconfig-4.91.dist-info}/METADATA +1 -1
- {machineconfig-4.9.dist-info → machineconfig-4.91.dist-info}/RECORD +15 -14
- {machineconfig-4.9.dist-info → machineconfig-4.91.dist-info}/entry_points.txt +2 -0
- machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
- {machineconfig-4.9.dist-info → machineconfig-4.91.dist-info}/WHEEL +0 -0
- {machineconfig-4.9.dist-info → machineconfig-4.91.dist-info}/top_level.txt +0 -0
|
@@ -146,9 +146,12 @@ PACKAGES_NAMES_ESSENTIAL = Literal[
|
|
|
146
146
|
"zoxide",
|
|
147
147
|
]
|
|
148
148
|
|
|
149
|
-
PACKAGE_GROUPS: TypeAlias = Literal["ESSENTIAL", "DEV"]
|
|
149
|
+
PACKAGE_GROUPS: TypeAlias = Literal["ESSENTIAL", "DEV", "ESSENTIAL_SYSTEM", "DEV_SYSTEM"]
|
|
150
150
|
PACKAGE_GROUP2NAMES: dict[PACKAGE_GROUPS, list[str]] = {
|
|
151
151
|
"ESSENTIAL": list(PACKAGES_NAMES_ESSENTIAL.__args__),
|
|
152
152
|
"DEV": list(PACKAGES_NAMES_DEV.__args__),
|
|
153
|
+
"ESSENTIAL_SYSTEM": [],
|
|
154
|
+
"DEV_SYSTEM": [],
|
|
153
155
|
}
|
|
156
|
+
|
|
154
157
|
_ = Union
|
|
@@ -193,5 +193,12 @@ fire_agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
|
|
|
193
193
|
typer.echo(f"Template bash script written to {save_path}")
|
|
194
194
|
|
|
195
195
|
|
|
196
|
+
def main_from_parser():
|
|
197
|
+
agents_app = typer.Typer(help="🤖 AI Agents management subcommands")
|
|
198
|
+
agents_app.command("create")(create)
|
|
199
|
+
agents_app.command("collect")(collect)
|
|
200
|
+
agents_app.command("template")(template)
|
|
201
|
+
return agents_app()
|
|
202
|
+
|
|
196
203
|
if __name__ == "__main__": # pragma: no cover
|
|
197
204
|
pass
|
|
@@ -10,10 +10,10 @@ from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
|
10
10
|
from machineconfig.utils.accessories import randstr
|
|
11
11
|
|
|
12
12
|
from machineconfig.utils.options import choose_from_options
|
|
13
|
-
from machineconfig.utils.ve import get_ve_activate_line
|
|
13
|
+
# from machineconfig.utils.ve import get_ve_activate_line
|
|
14
14
|
from rich.console import Console
|
|
15
15
|
from rich.panel import Panel
|
|
16
|
-
from rich.text import Text
|
|
16
|
+
# from rich.text import Text
|
|
17
17
|
|
|
18
18
|
console = Console()
|
|
19
19
|
|
|
@@ -173,41 +173,27 @@ print(f"🐊 Crocodile Shell | Running @ {Path.cwd()}")
|
|
|
173
173
|
title = "Running Python File"
|
|
174
174
|
else:
|
|
175
175
|
title = "Executed code"
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
pyfile.write_text(total_program, encoding="utf-8")
|
|
179
|
-
|
|
176
|
+
python_program = preprogram + add_print_header_pycode(str(pyfile), title=title) + program
|
|
177
|
+
pyfile.write_text(python_program, encoding="utf-8")
|
|
180
178
|
# ve_root_from_file, ipython_profile = get_ve_path_and_ipython_profile(PathExtended(file))
|
|
181
179
|
ipython_profile = ipython_profile if ipython_profile is not None else "default"
|
|
182
180
|
# ve_activateion_line = get_ve_activate_line(ve_name=args.ve or ve_profile_suggested, a_path=str(PathExtended.cwd()))
|
|
183
|
-
|
|
184
|
-
final_program = f"""
|
|
181
|
+
shell_program = """
|
|
185
182
|
#!/bin/bash
|
|
186
183
|
|
|
187
|
-
{activate_ve_line}
|
|
188
|
-
|
|
189
184
|
"""
|
|
190
185
|
if jupyter:
|
|
191
186
|
fire_line = f"code --new-window {str(pyfile)}"
|
|
192
187
|
else:
|
|
193
|
-
fire_line = interpreter
|
|
194
|
-
if interpreter == "ipython":
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
title = "🚀 LAUNCHING SCRIPT"
|
|
201
|
-
text1 = f"📄 Script: {pyfile}"
|
|
202
|
-
text2 = f"🔥 Command: {fire_line}"
|
|
203
|
-
launch_message = f"{title} \n{text1}\n{text2}"
|
|
204
|
-
console.print(Panel(Text(launch_message, justify="left"), expand=False, border_style="blue"))
|
|
205
|
-
|
|
206
|
-
# PROGRAM_PATH.write_text(data=final_program, encoding="utf-8")
|
|
207
|
-
# (PROGRAM_PATH + ".py").write_text(str(pyfile), encoding='utf-8')
|
|
188
|
+
fire_line = f"uv run --project $HOME/code/machineconfig/.venv {interpreter} {interactivity} "
|
|
189
|
+
if interpreter == "ipython": fire_line += f" --profile {ipython_profile} --no-banner"
|
|
190
|
+
fire_line += " " + str(pyfile)
|
|
191
|
+
shell_program += fire_line
|
|
192
|
+
from rich.syntax import Syntax
|
|
193
|
+
console.print(Syntax(shell_program, lexer="bash"))
|
|
194
|
+
print()
|
|
208
195
|
import subprocess
|
|
209
|
-
|
|
210
|
-
subprocess.run(final_program, shell=True, check=True)
|
|
196
|
+
subprocess.run(shell_program, shell=True, check=True)
|
|
211
197
|
|
|
212
198
|
|
|
213
199
|
def arg_parser() -> None:
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""devops with emojis"""
|
|
2
2
|
|
|
3
|
-
import machineconfig.scripts.python.fire_agents as fire_agents
|
|
4
|
-
import machineconfig.scripts.python.fire_jobs_layout_helper as fire_jobs_layout_helper
|
|
5
3
|
import machineconfig.scripts.python.devops_devapps_install as installer_entry_point
|
|
6
4
|
import machineconfig.scripts.python.share_terminal as share_terminal
|
|
7
5
|
import machineconfig.scripts.python.repos as repos
|
|
@@ -10,17 +8,6 @@ import typer
|
|
|
10
8
|
|
|
11
9
|
app = typer.Typer(help="🛠️ DevOps operations with emojis", no_args_is_help=True)
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
agents_app = typer.Typer(help="🤖 AI Agents management subcommands")
|
|
15
|
-
agents_app.command("create")(fire_agents.create)
|
|
16
|
-
agents_app.command("collect")(fire_agents.collect)
|
|
17
|
-
app.add_typer(agents_app, name="agents")
|
|
18
|
-
|
|
19
|
-
layouts_app = typer.Typer(help="Layouts management subcommands")
|
|
20
|
-
layouts_app.command("launch")(fire_jobs_layout_helper.launch)
|
|
21
|
-
layouts_app.command("load-balance")(fire_jobs_layout_helper.load_balance)
|
|
22
|
-
app.add_typer(layouts_app, name="session")
|
|
23
|
-
|
|
24
11
|
app.command(name="install", help="📦 Install essential packages")(installer_entry_point.main)
|
|
25
12
|
app.command(name="share-terminal", help="📡 Share terminal via web browser")(share_terminal.main)
|
|
26
13
|
app.command(name="repos", help="📁 Manage git repositories")(repos.main)
|
|
@@ -1,33 +1,29 @@
|
|
|
1
1
|
"""Devops Devapps Install"""
|
|
2
2
|
|
|
3
|
+
from machineconfig.utils.installer import get_installers_system_groups
|
|
3
4
|
import typer
|
|
4
5
|
from rich.progress import Progress, SpinnerColumn, TextColumn
|
|
5
6
|
from rich.console import Console
|
|
6
7
|
from rich.panel import Panel
|
|
7
8
|
from rich.table import Table
|
|
8
9
|
from platform import system
|
|
9
|
-
from typing import Optional,
|
|
10
|
+
from typing import Optional, cast, get_args
|
|
11
|
+
from machineconfig.jobs.installer.package_groups import PACKAGE_GROUPS
|
|
10
12
|
|
|
11
13
|
console = Console()
|
|
12
14
|
|
|
13
|
-
WHICH_CAT: TypeAlias = Literal["essentials", "essentialsDev", "systemPackages", "precheckedPackages", "ia"]
|
|
14
|
-
|
|
15
15
|
|
|
16
16
|
def _handle_installer_not_found(search_term: str, all_installers: list["InstallerData"]) -> None: # type: ignore
|
|
17
17
|
"""Handle installer not found with friendly suggestions using fuzzy matching."""
|
|
18
18
|
from difflib import get_close_matches
|
|
19
|
-
|
|
20
|
-
# Get all possible names (both exe names and app names)
|
|
19
|
+
|
|
21
20
|
all_names = []
|
|
22
21
|
for inst in all_installers:
|
|
23
22
|
exe_name = inst["appName"]
|
|
24
23
|
all_names.append(exe_name)
|
|
25
|
-
|
|
26
|
-
# Find close matches using fuzzy matching
|
|
27
24
|
close_matches = get_close_matches(search_term, all_names, n=5, cutoff=0.4)
|
|
28
|
-
|
|
29
25
|
console.print(f"\n❌ '[red]{search_term}[/red]' was not found.", style="bold")
|
|
30
|
-
|
|
26
|
+
|
|
31
27
|
if close_matches:
|
|
32
28
|
console.print("🤔 Did you mean one of these?", style="yellow")
|
|
33
29
|
table = Table(show_header=False, box=None, pad_edge=False)
|
|
@@ -40,64 +36,44 @@ def _handle_installer_not_found(search_term: str, all_installers: list["Installe
|
|
|
40
36
|
sample_names = []
|
|
41
37
|
for inst in all_installers[:10]:
|
|
42
38
|
exe_name = inst["appName"]
|
|
43
|
-
sample_names.append(exe_name)
|
|
44
|
-
|
|
39
|
+
sample_names.append(exe_name)
|
|
40
|
+
|
|
45
41
|
table = Table(show_header=False, box=None, pad_edge=False)
|
|
46
42
|
for i, name in enumerate(sample_names, 1):
|
|
47
43
|
table.add_row(f"[cyan]{i}.[/cyan]", f"[green]{name}[/green]")
|
|
48
44
|
console.print(table)
|
|
49
|
-
|
|
45
|
+
|
|
50
46
|
if len(all_installers) > 10:
|
|
51
47
|
console.print(f" [dim]... and {len(all_installers) - 10} more[/dim]")
|
|
52
|
-
|
|
48
|
+
|
|
53
49
|
panel = Panel(
|
|
54
|
-
"[bold blue]💡 Use 'ia' to interactively browse all available installers.[/bold blue]\n"
|
|
55
|
-
f"[bold blue]💡 Use one of the categories: {list(get_args(WHICH_CAT))}[/bold blue]",
|
|
56
|
-
title="[yellow]Helpful Tips[/yellow]",
|
|
57
|
-
border_style="yellow"
|
|
50
|
+
f"[bold blue]💡 Use 'ia' to interactively browse all available installers.[/bold blue]\n[bold blue]💡 Use one of the categories: {list(get_args(PACKAGE_GROUPS))}[/bold blue]", title="[yellow]Helpful Tips[/yellow]", border_style="yellow"
|
|
58
51
|
)
|
|
59
52
|
console.print(panel)
|
|
60
53
|
|
|
61
54
|
|
|
62
55
|
def main_with_parser():
|
|
63
56
|
import typer
|
|
57
|
+
|
|
64
58
|
app = typer.Typer()
|
|
65
59
|
app.command()(main)
|
|
66
60
|
app()
|
|
67
61
|
|
|
68
62
|
|
|
69
|
-
def main(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
exe_name = installer["appName"]
|
|
84
|
-
app_name = installer["appName"]
|
|
85
|
-
if exe_name == a_which or app_name == a_which:
|
|
86
|
-
selected_installer = installer
|
|
87
|
-
break
|
|
88
|
-
|
|
89
|
-
if selected_installer is None:
|
|
90
|
-
_handle_installer_not_found(a_which, all_installers)
|
|
91
|
-
return None
|
|
92
|
-
message = Installer(selected_installer).install_robust(version=None) # finish the task
|
|
93
|
-
total_messages.append(message)
|
|
94
|
-
|
|
95
|
-
if total_messages:
|
|
96
|
-
console.print("\n[bold green]📊 Installation Results:[/bold green]")
|
|
97
|
-
for a_message in total_messages:
|
|
98
|
-
console.print(f"[blue]• {a_message}[/blue]")
|
|
99
|
-
return None
|
|
100
|
-
|
|
63
|
+
def main(
|
|
64
|
+
which: Optional[str] = typer.Option(None, "--which", "-w", help="Comma-separated list of program names to install."),
|
|
65
|
+
group: Optional[PACKAGE_GROUPS] = typer.Option(None, "--group", "-g", help=f"Group name (one of {list(get_args(PACKAGE_GROUPS))})"),
|
|
66
|
+
interactive: bool = typer.Option(False, "--interactive", "-ia", help="Interactive selection of programs to install."),
|
|
67
|
+
) -> None:
|
|
68
|
+
if which is not None:
|
|
69
|
+
return install_clis(clis_names=[x.strip() for x in which.split(",") if x.strip() != ""])
|
|
70
|
+
if group is not None:
|
|
71
|
+
return get_programs_by_category(package_group=group)
|
|
72
|
+
if interactive:
|
|
73
|
+
return install_interactively()
|
|
74
|
+
typer.echo("❌ You must provide either --which, --group, or --interactive/-ia option.")
|
|
75
|
+
# typer.help(main)
|
|
76
|
+
raise typer.Exit(1)
|
|
101
77
|
|
|
102
78
|
|
|
103
79
|
def install_interactively():
|
|
@@ -106,118 +82,130 @@ def install_interactively():
|
|
|
106
82
|
from machineconfig.utils.installer import get_installers
|
|
107
83
|
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
108
84
|
installers = get_installers(os=get_os_name(), arch=get_normalized_arch(), which_cats=["ESSENTIAL", "DEV"])
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
installer_options
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
progress.update(task, advance=1)
|
|
115
|
-
category_options = [f"📦 {cat}" for cat in get_args(WHICH_CAT)]
|
|
116
|
-
options = category_options + ["─" * 50] + installer_options
|
|
85
|
+
installer_options = []
|
|
86
|
+
for x in installers:
|
|
87
|
+
installer_options.append(Installer(installer_data=x).get_description())
|
|
88
|
+
category_options = [f"📦 {cat}" for cat in get_args(PACKAGE_GROUPS)]
|
|
89
|
+
options = category_options + ["─" * 50] + installer_options
|
|
117
90
|
program_names = choose_from_options(multi=True, msg="Categories are prefixed with 📦", options=options, header="🚀 CHOOSE DEV APP OR CATEGORY", default="📦 essentials", fzf=True)
|
|
118
91
|
installation_messages: list[str] = []
|
|
119
92
|
for _an_idx, a_program_name in enumerate(program_names):
|
|
120
|
-
if a_program_name.startswith("─"):
|
|
93
|
+
if a_program_name.startswith("─"): # 50 dashes separator
|
|
121
94
|
continue
|
|
122
95
|
if a_program_name.startswith("📦 "):
|
|
123
96
|
category_name = a_program_name[2:] # Remove "📦 " prefix
|
|
124
|
-
if category_name in get_args(
|
|
125
|
-
get_programs_by_category(
|
|
97
|
+
if category_name in get_args(PACKAGE_GROUPS):
|
|
98
|
+
get_programs_by_category(package_group=cast(PACKAGE_GROUPS, category_name))
|
|
126
99
|
else:
|
|
127
100
|
installer_idx = installer_options.index(a_program_name)
|
|
128
101
|
an_installer_data = installers[installer_idx]
|
|
129
102
|
status_message = Installer(an_installer_data).install_robust(version=None) # finish the task - this returns a status message, not a command
|
|
130
103
|
installation_messages.append(status_message)
|
|
131
104
|
if installation_messages:
|
|
132
|
-
panel = Panel(
|
|
133
|
-
"\n".join([f"[blue]• {message}[/blue]" for message in installation_messages]),
|
|
134
|
-
title="[bold green]📊 Installation Summary[/bold green]",
|
|
135
|
-
border_style="green",
|
|
136
|
-
padding=(1, 2)
|
|
137
|
-
)
|
|
105
|
+
panel = Panel("\n".join([f"[blue]• {message}[/blue]" for message in installation_messages]), title="[bold green]📊 Installation Summary[/bold green]", border_style="green", padding=(1, 2))
|
|
138
106
|
console.print(panel)
|
|
139
107
|
|
|
140
108
|
|
|
141
|
-
def get_programs_by_category(
|
|
142
|
-
panel = Panel(
|
|
143
|
-
f"[bold yellow]Installing programs from category: [green]{program_name}[/green][/bold yellow]",
|
|
144
|
-
title="[bold blue]📦 Category Installation[/bold blue]",
|
|
145
|
-
border_style="blue",
|
|
146
|
-
padding=(1, 2)
|
|
147
|
-
)
|
|
109
|
+
def get_programs_by_category(package_group: PACKAGE_GROUPS):
|
|
110
|
+
panel = Panel(f"[bold yellow]Installing programs from category: [green]{package_group}[/green][/bold yellow]", title="[bold blue]📦 Category Installation[/bold blue]", border_style="blue", padding=(1, 2))
|
|
148
111
|
console.print(panel)
|
|
149
|
-
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
150
112
|
from machineconfig.utils.installer import get_installers, install_all
|
|
151
|
-
from machineconfig.utils.installer_utils.installer_abc import parse_apps_installer_linux, parse_apps_installer_windows
|
|
152
113
|
from machineconfig.utils.schemas.installer.installer_types import get_normalized_arch, get_os_name
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
case "essentials":
|
|
114
|
+
match package_group:
|
|
115
|
+
case "ESSENTIAL":
|
|
156
116
|
installers_ = get_installers(os=get_os_name(), arch=get_normalized_arch(), which_cats=["ESSENTIAL"])
|
|
157
117
|
install_all(installers_data=installers_)
|
|
158
|
-
case "
|
|
118
|
+
case "DEV":
|
|
159
119
|
installers_ = get_installers(os=get_os_name(), arch=get_normalized_arch(), which_cats=["DEV", "ESSENTIAL"])
|
|
160
120
|
install_all(installers_data=installers_)
|
|
161
|
-
case "
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
121
|
+
case "DEV_SYSTEM" | "ESSENTIAL_SYSTEM":
|
|
122
|
+
options_system = get_installers_system_groups()
|
|
123
|
+
from machineconfig.utils.schemas.installer.installer_types import get_normalized_arch, get_os_name
|
|
124
|
+
for an_item in options_system:
|
|
125
|
+
if an_item["appName"] == package_group:
|
|
126
|
+
program = an_item["fileNamePattern"][get_normalized_arch()][get_os_name()]
|
|
127
|
+
if program is not None:
|
|
128
|
+
install_terminal_packages(program)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def choose_from_system_package_groups(options_system: dict[str, tuple[str, str]]) -> str:
|
|
132
|
+
from machineconfig.utils.options import choose_from_options
|
|
133
|
+
display_options = []
|
|
134
|
+
for group_name, (description, _) in options_system.items():
|
|
135
|
+
if description:
|
|
136
|
+
display_options.append(f"{group_name:<20} - {description}")
|
|
137
|
+
else:
|
|
138
|
+
display_options.append(group_name)
|
|
139
|
+
program_names = choose_from_options(multi=True, msg="", options=sorted(display_options), header="🚀 CHOOSE DEV APP", fzf=True)
|
|
140
|
+
program = ""
|
|
141
|
+
for display_name in program_names:
|
|
142
|
+
# Extract the actual group name (everything before " - " if present)
|
|
143
|
+
group_name = display_name.split(" - ")[0].strip() if " - " in display_name else display_name.strip()
|
|
144
|
+
console.print(f"\n[bold cyan]⚙️ Installing: [yellow]{group_name}[/yellow][/bold cyan]", style="bold")
|
|
145
|
+
_, sub_program = options_system[group_name] # Extract content from tuple
|
|
146
|
+
if sub_program.startswith("#winget"):
|
|
147
|
+
sub_program = sub_program[1:]
|
|
148
|
+
program += "\n" + sub_program
|
|
149
|
+
return program
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def install_terminal_packages(program: str):
|
|
153
|
+
from pathlib import Path
|
|
154
|
+
|
|
155
|
+
if system() == "Windows":
|
|
156
|
+
temp_script_path = Path("C:/Windows/Temp/temp_install_script.ps1")
|
|
157
|
+
lexer = "powershell"
|
|
158
|
+
else:
|
|
159
|
+
temp_script_path = Path("/tmp/temp_install_script.sh")
|
|
160
|
+
lexer = "bash"
|
|
161
|
+
temp_script_path.write_text(program, encoding="utf-8")
|
|
162
|
+
console.print(f"📝 [blue]Temporary script written to:[/blue] [green]{temp_script_path}[/green]")
|
|
163
|
+
from rich.syntax import Syntax
|
|
164
|
+
|
|
165
|
+
console.print(Panel(Syntax(code=program, lexer=lexer), title="📄 Installation Program", subtitle="shell code"), style="bold red")
|
|
166
|
+
console.print("🚀 [bold yellow]Starting installation...[/bold yellow]")
|
|
167
|
+
if system() == "Windows":
|
|
168
|
+
import subprocess
|
|
169
|
+
|
|
170
|
+
subprocess.run(["powershell", "-ExecutionPolicy", "Bypass", "-File", str(temp_script_path)], check=True)
|
|
171
|
+
elif system() == "Linux":
|
|
172
|
+
import subprocess
|
|
173
|
+
|
|
174
|
+
subprocess.run(["bash", str(temp_script_path)], check=True)
|
|
175
|
+
console.print("✅ [bold green]Installation completed.[/bold green]")
|
|
176
|
+
temp_script_path.unlink(missing_ok=True)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def install_clis(clis_names: list[str]):
|
|
180
|
+
from machineconfig.utils.schemas.installer.installer_types import get_normalized_arch, get_os_name
|
|
181
|
+
from machineconfig.utils.installer import get_installers
|
|
182
|
+
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
183
|
+
|
|
184
|
+
total_messages: list[str] = []
|
|
185
|
+
for a_which in clis_names:
|
|
186
|
+
all_installers = get_installers(os=get_os_name(), arch=get_normalized_arch(), which_cats=["ESSENTIAL", "DEV"])
|
|
187
|
+
selected_installer = None
|
|
188
|
+
for installer in all_installers:
|
|
189
|
+
exe_name = installer["appName"]
|
|
190
|
+
app_name = installer["appName"]
|
|
191
|
+
if exe_name == a_which or app_name == a_which:
|
|
192
|
+
selected_installer = installer
|
|
193
|
+
break
|
|
194
|
+
if selected_installer is None:
|
|
195
|
+
_handle_installer_not_found(a_which, all_installers)
|
|
196
|
+
return None
|
|
197
|
+
message = Installer(selected_installer).install_robust(version=None) # finish the task
|
|
198
|
+
total_messages.append(message)
|
|
199
|
+
if total_messages:
|
|
200
|
+
console.print("\n[bold green]📊 Installation Results:[/bold green]")
|
|
201
|
+
for a_message in total_messages:
|
|
202
|
+
console.print(f"[blue]• {a_message}[/blue]")
|
|
203
|
+
return None
|
|
217
204
|
|
|
218
205
|
|
|
219
206
|
if __name__ == "__main__":
|
|
220
207
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
221
208
|
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
209
|
+
|
|
222
210
|
_ = InstallerData, Installer
|
|
223
211
|
pass
|
|
@@ -21,6 +21,7 @@ import subprocess
|
|
|
21
21
|
import sys
|
|
22
22
|
from pathlib import Path
|
|
23
23
|
from platform import system
|
|
24
|
+
from typing import cast
|
|
24
25
|
|
|
25
26
|
import questionary
|
|
26
27
|
from questionary import Choice
|
|
@@ -29,6 +30,7 @@ from rich.panel import Panel
|
|
|
29
30
|
from rich.text import Text
|
|
30
31
|
|
|
31
32
|
|
|
33
|
+
_ = cast
|
|
32
34
|
console = Console()
|
|
33
35
|
|
|
34
36
|
|
|
@@ -102,16 +104,16 @@ def install_windows_desktop_apps() -> bool:
|
|
|
102
104
|
def get_installation_choices() -> list[str]:
|
|
103
105
|
"""Get user choices for installation options."""
|
|
104
106
|
choices = [
|
|
105
|
-
Choice(value="install_apps", title="📥 Install Apps - Install base system applications", checked=False),
|
|
106
107
|
Choice(value="upgrade_system", title="🔄 Upgrade System Packages - Update all system packages", checked=False),
|
|
107
|
-
Choice(value="
|
|
108
|
+
Choice(value="ESSENTIAL_SYSTEM", title="📥 Install Apps - Install base system applications", checked=False),
|
|
109
|
+
Choice(value="ESSENTIAL", title="⚡ Install CLI Apps - Command-line tools installation", checked=False),
|
|
110
|
+
Choice(value="DEV_SYSTEM", title="🛠️ Install Development Tools - rust, libssl-dev, ffmpeg, wezterm, brave, code", checked=False),
|
|
111
|
+
Choice(value="TerminalEyeCandy", title="🎨 Install ASCII Art Libraries - Terminal visualization tools", checked=False),
|
|
112
|
+
Choice(value="install_repos", title="🐍 Install Repos - Set up Python environment and repositories permanently.", checked=False),
|
|
108
113
|
Choice(value="install_ssh_server", title="🔒 Install SSH Server - Set up remote access", checked=False),
|
|
109
114
|
Choice(value="create_symlinks", title="🔗 Create Symlinks - Set up configuration symlinks (finish dotfiles transfer first)", checked=False),
|
|
110
|
-
Choice(value="install_cli_apps", title="⚡ Install CLI Apps - Command-line tools installation", checked=False),
|
|
111
|
-
Choice(value="install_dev_tools", title="🛠️ Install Development Tools - rust, libssl-dev, ffmpeg, wezterm, brave, code", checked=False),
|
|
112
115
|
Choice(value="retrieve_repositories", title="📚 Retrieve Repositories - Clone repositories to ~/code", checked=False),
|
|
113
116
|
Choice(value="retrieve_data", title="💾 Retrieve Data - Backup restoration", checked=False),
|
|
114
|
-
Choice(value="install_ascii_art", title="🎨 Install ASCII Art Libraries - Terminal visualization tools", checked=False),
|
|
115
117
|
]
|
|
116
118
|
# Add Windows-specific options
|
|
117
119
|
if system() == "Windows":
|
|
@@ -126,18 +128,18 @@ def execute_installations(selected_options: list[str]) -> None:
|
|
|
126
128
|
console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Setting up base virtual environment[/italic]", border_style="green"))
|
|
127
129
|
run_command("curl https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/ve.sh | bash", "Setting up base virtual environment")
|
|
128
130
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
run_command(
|
|
131
|
+
for maybe_a_group in selected_options:
|
|
132
|
+
if maybe_a_group in ("ESSENTIAL", "DEV", "ESSENTIAL_SYSTEM", "DEV_SYSTEM", "TerminalEyeCandy"):
|
|
133
|
+
console.print(Panel("⚡ [bold bright_yellow]CLI APPLICATIONS[/bold bright_yellow]\n[italic]Command-line tools installation[/italic]", border_style="bright_yellow"))
|
|
134
|
+
console.print("🔧 Installing CLI applications", style="bold cyan")
|
|
135
|
+
try:
|
|
136
|
+
from machineconfig.scripts.python.devops_devapps_install import main as devops_devapps_install_main
|
|
137
|
+
# maybe_a_group = cast(PA, maybe_a_group)
|
|
138
|
+
devops_devapps_install_main(group=maybe_a_group) # type: ignore
|
|
139
|
+
console.print("✅ CLI applications installed successfully", style="bold green")
|
|
140
|
+
except Exception as e:
|
|
141
|
+
console.print(f"❌ Error installing CLI applications: {e}", style="bold red")
|
|
142
|
+
run_command(". $HOME/.bashrc", "Reloading bash configuration")
|
|
141
143
|
|
|
142
144
|
if "upgrade_system" in selected_options:
|
|
143
145
|
if system() == "Windows":
|
|
@@ -147,7 +149,7 @@ def execute_installations(selected_options: list[str]) -> None:
|
|
|
147
149
|
run_command("sudo nala upgrade -y", "Upgrading system packages")
|
|
148
150
|
else:
|
|
149
151
|
console.print(f"❌ System upgrade not supported on {system()}.", style="bold red")
|
|
150
|
-
if "
|
|
152
|
+
if "install_repos" in selected_options:
|
|
151
153
|
console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Virtual environment setup[/italic]", border_style="green"))
|
|
152
154
|
from machineconfig import setup_linux as module
|
|
153
155
|
script = Path(module.__file__).parent / "repos.sh"
|
|
@@ -181,27 +183,6 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
|
|
|
181
183
|
else:
|
|
182
184
|
console.print("⏭️ Skipping symlink creation - finish dotfiles transfer first", style="yellow")
|
|
183
185
|
|
|
184
|
-
if "install_cli_apps" in selected_options:
|
|
185
|
-
console.print(Panel("⚡ [bold bright_yellow]CLI APPLICATIONS[/bold bright_yellow]\n[italic]Command-line tools installation[/italic]", border_style="bright_yellow"))
|
|
186
|
-
console.print("🔧 Installing CLI applications", style="bold cyan")
|
|
187
|
-
try:
|
|
188
|
-
from machineconfig.scripts.python.devops_devapps_install import main as devops_devapps_install_main
|
|
189
|
-
devops_devapps_install_main(which="essentials")
|
|
190
|
-
console.print("✅ CLI applications installed successfully", style="bold green")
|
|
191
|
-
except Exception as e:
|
|
192
|
-
console.print(f"❌ Error installing CLI applications: {e}", style="bold red")
|
|
193
|
-
run_command(". $HOME/.bashrc", "Reloading bash configuration")
|
|
194
|
-
|
|
195
|
-
if "install_dev_tools" in selected_options:
|
|
196
|
-
console.print(Panel("🛠️ [bold bright_blue]DEVELOPMENT TOOLS[/bold bright_blue]\n[italic]Software development packages[/italic]", border_style="bright_blue"))
|
|
197
|
-
console.print("🔧 Installing development applications", style="bold cyan")
|
|
198
|
-
try:
|
|
199
|
-
from machineconfig.scripts.python.devops_devapps_install import main as devops_devapps_install_main
|
|
200
|
-
devops_devapps_install_main(which="wezterm,brave,code")
|
|
201
|
-
console.print("✅ Development applications installed successfully", style="bold green")
|
|
202
|
-
except Exception as e:
|
|
203
|
-
console.print(f"❌ Error installing development applications: {e}", style="bold red")
|
|
204
|
-
|
|
205
186
|
if "retrieve_repositories" in selected_options:
|
|
206
187
|
console.print(Panel("📚 [bold bright_magenta]REPOSITORIES[/bold bright_magenta]\n[italic]Project code retrieval[/italic]", border_style="bright_magenta"))
|
|
207
188
|
from machineconfig.scripts.python import repos as module
|
|
@@ -217,12 +198,6 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
|
|
|
217
198
|
except Exception as e:
|
|
218
199
|
console.print(f"❌ Error retrieving backup data: {e}", style="bold red")
|
|
219
200
|
|
|
220
|
-
if "install_ascii_art" in selected_options:
|
|
221
|
-
console.print(Panel("🎨 [bold bright_green]ASCII ART[/bold bright_green]\n[italic]Terminal visualization tools[/italic]", border_style="bright_green"))
|
|
222
|
-
from machineconfig import setup_linux as module
|
|
223
|
-
script = Path(module.__file__).parent / "web_shortcuts" / "ascii_art.sh"
|
|
224
|
-
run_command(f"bash {script}", "Installing ASCII art libraries")
|
|
225
|
-
|
|
226
201
|
if "install_windows_desktop" in selected_options:
|
|
227
202
|
install_windows_desktop_apps()
|
|
228
203
|
|
|
@@ -127,5 +127,12 @@ def launch(layout_path: str = typer.Argument(..., help="Path to the layout.json
|
|
|
127
127
|
print(f"❌ Unsupported platform: {platform.system()}")
|
|
128
128
|
|
|
129
129
|
|
|
130
|
+
def main_from_parser():
|
|
131
|
+
layouts_app = typer.Typer(help="Layouts management subcommands")
|
|
132
|
+
layouts_app.command("launch")(launch)
|
|
133
|
+
layouts_app.command("load-balance")(load_balance)
|
|
134
|
+
return layouts_app()
|
|
135
|
+
|
|
136
|
+
|
|
130
137
|
if __name__ == "__main__":
|
|
131
138
|
from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
|
machineconfig/utils/installer.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""package manager"""
|
|
2
2
|
|
|
3
|
-
from machineconfig.utils.installer_utils.installer_abc import check_if_installed_already
|
|
3
|
+
from machineconfig.utils.installer_utils.installer_abc import check_if_installed_already, parse_apps_installer_linux, parse_apps_installer_windows
|
|
4
|
+
|
|
4
5
|
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
5
6
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData, InstallerDataFiles, get_normalized_arch, get_os_name, OPERATING_SYSTEMS, CPU_ARCHITECTURES
|
|
6
7
|
from machineconfig.jobs.installer.package_groups import PACKAGE_GROUPS, PACKAGE_GROUP2NAMES
|
|
@@ -8,7 +9,7 @@ from rich.console import Console
|
|
|
8
9
|
from rich.panel import Panel
|
|
9
10
|
|
|
10
11
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
11
|
-
from machineconfig.utils.source_of_truth import INSTALL_VERSION_ROOT, LINUX_INSTALL_PATH
|
|
12
|
+
from machineconfig.utils.source_of_truth import INSTALL_VERSION_ROOT, LINUX_INSTALL_PATH, LIBRARY_ROOT
|
|
12
13
|
from machineconfig.utils.io import read_json
|
|
13
14
|
|
|
14
15
|
from typing import Any
|
|
@@ -119,6 +120,28 @@ def get_all_installer_data_files() -> list[InstallerData]:
|
|
|
119
120
|
return res_final
|
|
120
121
|
|
|
121
122
|
|
|
123
|
+
def get_installers_system_groups():
|
|
124
|
+
res_final: list[InstallerData] = []
|
|
125
|
+
from platform import system
|
|
126
|
+
if system() == "Windows":
|
|
127
|
+
options_system = parse_apps_installer_windows(LIBRARY_ROOT.joinpath("setup_windows/apps.ps1").read_text(encoding="utf-8"))
|
|
128
|
+
elif system() == "Linux" or system() == "Darwin":
|
|
129
|
+
options_system = parse_apps_installer_linux(LIBRARY_ROOT.joinpath("setup_linux/apps.sh").read_text(encoding="utf-8"))
|
|
130
|
+
else:
|
|
131
|
+
raise NotImplementedError(f"❌ System {system()} not supported")
|
|
132
|
+
os_name = get_os_name()
|
|
133
|
+
for group_name, (docs, script) in options_system.items():
|
|
134
|
+
item: InstallerData = {
|
|
135
|
+
"appName": group_name,
|
|
136
|
+
"doc": docs,
|
|
137
|
+
"repoURL": "CMD",
|
|
138
|
+
"fileNamePattern": {
|
|
139
|
+
"amd64": {os_name: script,},
|
|
140
|
+
"arm64": {os_name: script,},}}
|
|
141
|
+
res_final.append(item)
|
|
142
|
+
return res_final
|
|
143
|
+
|
|
144
|
+
|
|
122
145
|
def install_all(installers_data: list[InstallerData], safe: bool = False, jobs: int = 10, fresh: bool = False):
|
|
123
146
|
print(f"\n{'=' * 80}\n🚀 BULK INSTALLATION PROCESS 🚀\n{'=' * 80}")
|
|
124
147
|
if fresh:
|
|
@@ -43,7 +43,7 @@ machineconfig/cluster/templates/utils.py,sha256=5lHgjHvodoSPBD31AwluHBBNgwimwThU
|
|
|
43
43
|
machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
44
|
machineconfig/jobs/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
45
|
machineconfig/jobs/installer/installer_data.json,sha256=sOfqIPU4uarxbuD4HBRs3tXfIKx5tUtNQQdALygwk2o,71545
|
|
46
|
-
machineconfig/jobs/installer/package_groups.py,sha256=
|
|
46
|
+
machineconfig/jobs/installer/package_groups.py,sha256=SayXJYkgYZiUyAT2YLWrDBXB1YYJbuHe0D_eFQQIQn8,2505
|
|
47
47
|
machineconfig/jobs/installer/custom/gh.py,sha256=hic8Z1ZdncbljY6hgHzl2rmOLOcb6imIUstMALSS3-Y,3082
|
|
48
48
|
machineconfig/jobs/installer/custom/hx.py,sha256=FrUD0mlhWG2GxrnarccVIaW_sHJ5mxeF6yyzbBWyx6w,5840
|
|
49
49
|
machineconfig/jobs/installer/custom_dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -102,6 +102,7 @@ machineconfig/profile/records/windows/apps_summary_report.csv,sha256=nN5BoACBqXg
|
|
|
102
102
|
machineconfig/profile/records/windows/apps_summary_report.md,sha256=O5hmAcpObaLmOjYLvHg9kkPJryqFwFaP8OsmfPwfR1o,137
|
|
103
103
|
machineconfig/scripts/__init__.py,sha256=v0cMjnaIo39C3ltLiTf1S0fCTMAqWtEU7zrVenUj4PQ,71
|
|
104
104
|
machineconfig/scripts/cloud/init.sh,sha256=zPn3_hwsHduaRxHs97TTn-BoLaJS44I2XwlLmZudQ80,4646
|
|
105
|
+
machineconfig/scripts/linux/agents,sha256=zahzfVZ8_NIkC1TKMjcZqo0vsBtFl-xBhpz63sn29yA,96
|
|
105
106
|
machineconfig/scripts/linux/choose_wezterm_theme,sha256=T7_vS-XvIZErRkfqtlyoZuHEVKFQQwhIeQMFIVTjtxg,145
|
|
106
107
|
machineconfig/scripts/linux/cloud_copy,sha256=IU5TO7roSUYB-U4Km9bhAZOvlUr4nRJtJf4tqCPIPAs,100
|
|
107
108
|
machineconfig/scripts/linux/cloud_mount,sha256=QnDUPUv9q3V14PONOwM4tAPHqOopF_uvjEN1tL24jZA,102
|
|
@@ -125,6 +126,7 @@ machineconfig/scripts/linux/mount_nw_drive,sha256=pNzHc7yZn5YIzn2BkpKvd5530Pqbes
|
|
|
125
126
|
machineconfig/scripts/linux/mount_smb,sha256=7UN5EP1kuxYL_-CnyaH4f9Wuu2CgALDZpJ0mPcdvCiY,94
|
|
126
127
|
machineconfig/scripts/linux/repos,sha256=1qbmIemZjkjcPmiL1Bp8pD46E83OXsR5EJ0XQt29Bhc,96
|
|
127
128
|
machineconfig/scripts/linux/scheduler,sha256=Z9Wu0N9vWRbi4FoRbpcc4ydq4bVaDjZOXESR35ZN0rI,100
|
|
129
|
+
machineconfig/scripts/linux/sessions,sha256=A4vxUDHnDhyph833iy-tBprgQ7av_DZ5t031PRrbqVQ,98
|
|
128
130
|
machineconfig/scripts/linux/share_cloud.sh,sha256=75IzCm7Nob1wO-zlfaNyPPod1IjAsVCG5lcMFdXmiI4,3010
|
|
129
131
|
machineconfig/scripts/linux/share_nfs,sha256=LDQZQ9TV7z2y7RtNHiO4Wb513MztyGjaAV-GzTGwUdc,1374
|
|
130
132
|
machineconfig/scripts/linux/share_smb,sha256=HZX8BKgMlS9JzkGIYnxTsPvoxEBBuVLVkqzR3pmGFGY,20
|
|
@@ -137,33 +139,32 @@ machineconfig/scripts/linux/warp-cli.sh,sha256=shFFZ9viet_DSEEHT8kxlGRHoJpO6o85p
|
|
|
137
139
|
machineconfig/scripts/linux/wifi_conn,sha256=X4TH3OvcVZfOveSbF9WW8uXb4U_G7ZSnCERc7VYAqkc,95
|
|
138
140
|
machineconfig/scripts/linux/z_ls,sha256=ATZtu0ccN3AKvAOxkwLq1xgQjJ3en5byEWJ3Q8afnNg,3340
|
|
139
141
|
machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
142
|
+
machineconfig/scripts/python/agents.py,sha256=RtRR53Mt3zTqHqJbS5nY7XHRbZPty8hPl1mpgKAvaME,9832
|
|
140
143
|
machineconfig/scripts/python/choose_wezterm_theme.py,sha256=Hlu_EOQhLM6wYdAdY25jcqEK11BkVwQYwkz04xnIBVU,3397
|
|
141
144
|
machineconfig/scripts/python/cloud_copy.py,sha256=_pxA8o3ar5vH9DkrAdwafHcZMiqNCbY_IfNzKCOMJ5k,8395
|
|
142
145
|
machineconfig/scripts/python/cloud_manager.py,sha256=YN0DYLzPKtMBaks-EAVwFmkCu3XeHWMr1D21uqX5dDk,3429
|
|
143
146
|
machineconfig/scripts/python/cloud_mount.py,sha256=RFMzRUep2D5HtVXANIi-pab3EkI-W8P1IJ32k1W7xQA,6756
|
|
144
147
|
machineconfig/scripts/python/cloud_repo_sync.py,sha256=GBhdUu9BJwhLYmhxxtvqJGLy7xKdQcnH9kkL4jcbzEE,9502
|
|
145
148
|
machineconfig/scripts/python/cloud_sync.py,sha256=RWGpAfJ9fnN18yNBSgN44dzA38Hmd4879JL5r2pcyrM,3514
|
|
146
|
-
machineconfig/scripts/python/croshell.py,sha256=
|
|
147
|
-
machineconfig/scripts/python/devops.py,sha256=
|
|
149
|
+
machineconfig/scripts/python/croshell.py,sha256=wYi8xWkzYzpfg8YNppmu22mvx0Gxtbs979ERO3kZS2w,8587
|
|
150
|
+
machineconfig/scripts/python/devops.py,sha256=fTEut6gTDfmNqzS8-gRyRAsmWJYPGGIt8X35Irj7Cl8,3434
|
|
148
151
|
machineconfig/scripts/python/devops_add_identity.py,sha256=JfN3ZrYMCgmt4ks_VCfnV9BIIHAsOYO3E0W0wZ15FR8,3791
|
|
149
152
|
machineconfig/scripts/python/devops_add_ssh_key.py,sha256=KaoX83KltBsmutfKhSfZjd7nP_R1hJ2OLAWRhbswO7o,6889
|
|
150
153
|
machineconfig/scripts/python/devops_backup_retrieve.py,sha256=jZe5Vki7E2GCMG8hvqUZeOONFC4cNzISoGzq_dMG4GA,5601
|
|
151
|
-
machineconfig/scripts/python/devops_devapps_install.py,sha256=
|
|
154
|
+
machineconfig/scripts/python/devops_devapps_install.py,sha256=f22pUQQjY0AGs4jjxSgYz1e0LOfZGXucTH1lmgQa5Vw,10233
|
|
152
155
|
machineconfig/scripts/python/devops_update_repos.py,sha256=c5qBc9cuTGDEqDHufkjDT4d_vvJsswv3tlqk9MAulYk,8063
|
|
153
156
|
machineconfig/scripts/python/dotfile.py,sha256=SRcX-9Ak1jRvF-killBTTm2IWcsNxfiLucH6ZsytAFA,2202
|
|
154
|
-
machineconfig/scripts/python/fire_agents.py,sha256=aLxwM8o3Tpe4nYpNdnEvG8WVdplE3_tfnDECIXONzAg,9579
|
|
155
157
|
machineconfig/scripts/python/fire_agents_help_launch.py,sha256=1ymWiszfjCyPv3ofinWzfOmbzLEt3d7ntac_afLh-V4,5017
|
|
156
158
|
machineconfig/scripts/python/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
|
|
157
159
|
machineconfig/scripts/python/fire_agents_helper_types.py,sha256=zKu8Vr6iucaGSkCm_Tkt_WrYU7-6Nript3coYyzTXzY,295
|
|
158
160
|
machineconfig/scripts/python/fire_agents_load_balancer.py,sha256=mpqx3uaQdBXYieuvhdK-qsvLepf9oIMo3pwPj9mSEDI,1079
|
|
159
161
|
machineconfig/scripts/python/fire_jobs.py,sha256=7R4CO7wGRkG6akPLK6SMHr82_RdIeXIJNicCAdgh1ok,20262
|
|
160
162
|
machineconfig/scripts/python/fire_jobs_args_helper.py,sha256=5zqnYvBjXSLFUqMHg5fgI62YnDu7CpVC4RLmXUKpI2I,2050
|
|
161
|
-
machineconfig/scripts/python/fire_jobs_layout_helper.py,sha256=u0VssrTXOzH7km89yaL1K8T5DF83LRyllj1E_30N9ZQ,8083
|
|
162
163
|
machineconfig/scripts/python/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
163
164
|
machineconfig/scripts/python/ftpx.py,sha256=l_gdJS0QB2wVZErubtZvm4HJD9HZAJxSP68sbY73xwo,10278
|
|
164
165
|
machineconfig/scripts/python/get_zellij_cmd.py,sha256=e35-18hoXM9N3PFbvbizfkNY_-63iMicieWE3TbGcCQ,576
|
|
165
166
|
machineconfig/scripts/python/gh_models.py,sha256=3BLfW25mBRiPO5VKtVm-nMlKLv-PaZDw7mObajq6F6M,5538
|
|
166
|
-
machineconfig/scripts/python/interactive.py,sha256=
|
|
167
|
+
machineconfig/scripts/python/interactive.py,sha256=AM2jPIAHbXppVj-lA9iYcOTGWmOMWZtIaJIz9K5FxK8,11983
|
|
167
168
|
machineconfig/scripts/python/mount_nfs.py,sha256=c8pWXimDWdgCkSskcnPgT-8ESPosil6Cvy2hGSaIBJE,3359
|
|
168
169
|
machineconfig/scripts/python/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
|
|
169
170
|
machineconfig/scripts/python/mount_ssh.py,sha256=rGY2pgtlnWMi0Rrge1aCdjtfbULrj2cyaStDoX-y2w4,2236
|
|
@@ -175,6 +176,7 @@ machineconfig/scripts/python/repos_helper_clone.py,sha256=xW5YZEoNt3k7h9NIULhUhO
|
|
|
175
176
|
machineconfig/scripts/python/repos_helper_record.py,sha256=YEEQORfEiLddOIIgePo5eEkyQUFruFg3kc8npMvRL-o,10927
|
|
176
177
|
machineconfig/scripts/python/repos_helper_update.py,sha256=AYyKIB7eQ48yoYmFjydIhRI1lV39TBv_S4_LCa-oKuQ,11042
|
|
177
178
|
machineconfig/scripts/python/scheduler.py,sha256=rKhssuxkD697EY6qaV6CSdNhxpAQLDWO4fE8GMCQ9FA,3061
|
|
179
|
+
machineconfig/scripts/python/sessions.py,sha256=WT-WVmrYDe3u-4Gjjm_1Apq879qcOtM6TCR4Q-9JZys,8299
|
|
178
180
|
machineconfig/scripts/python/share_terminal.py,sha256=biuG35YiknTMVr3Mzs4bBZwEq53JcuBRlzMTp6eY90M,5009
|
|
179
181
|
machineconfig/scripts/python/snapshot.py,sha256=aDvKeoniZaeTSNv9zWBUajaj2yagAxVdfuvO1_tgq5Y,1026
|
|
180
182
|
machineconfig/scripts/python/start_slidev.py,sha256=U5ujAL7R5Gd5CzFReTsnF2SThjY91aFBg0Qz_MMl6U4,4573
|
|
@@ -359,7 +361,6 @@ machineconfig/setup_linux/nix/cli_installation.sh,sha256=AQ_wRmldeD1tPqCmU7qgz9Z
|
|
|
359
361
|
machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKGPn8fIdZMn3p0RrHEkb8rWBGsdVGbus,1207
|
|
360
362
|
machineconfig/setup_linux/others/openssh-server_add_pub_key.sh,sha256=UiJcD1o4UekKKtp5YJKRq135PpqdTLXy7M6HvQ-Qum4,1993
|
|
361
363
|
machineconfig/setup_linux/web_shortcuts/android.sh,sha256=gzep6bBhK7FCBvGcXK0fdJCtkSfBOftt0aFyDZq_eMs,68
|
|
362
|
-
machineconfig/setup_linux/web_shortcuts/ascii_art.sh,sha256=RWcxH_Db7WHH37PclYmc92o6zAS557wGZxcYTuyTUZ0,3550
|
|
363
364
|
machineconfig/setup_linux/web_shortcuts/croshell.sh,sha256=X9-B1cVptbaFWaWTA-2ELNQx_2ktxu7ZVe48RvpCmkU,316
|
|
364
365
|
machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=3bQr-0Gtly7lx6LPXtCUCs49jiCCozv3T1idHK678EY,463
|
|
365
366
|
machineconfig/setup_linux/web_shortcuts/ssh.sh,sha256=k6BAY-zAWsi1beOMiZODxw4VOjZCTABZu__gxSET1eU,1924
|
|
@@ -376,7 +377,7 @@ machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=rZZJamy3YxAeJh
|
|
|
376
377
|
machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
377
378
|
machineconfig/utils/accessories.py,sha256=W_9dLzjwNTW5JQk_pe3B2ijQ1nA2-8Kdg2r7VBtzgQs,4340
|
|
378
379
|
machineconfig/utils/code.py,sha256=pKPHInKgXJWeACVbxuE7sMdYeZCbNttaYCsfonGhFfc,4464
|
|
379
|
-
machineconfig/utils/installer.py,sha256=
|
|
380
|
+
machineconfig/utils/installer.py,sha256=Aoq93RMOQFmv1iYJS90sxrBHeG_K6N5DtIthYffcIOU,9743
|
|
380
381
|
machineconfig/utils/io.py,sha256=ZXB3aataS1IZ_0WMcCRSmoN1nbkvEO-bWYcs-TpngqU,2872
|
|
381
382
|
machineconfig/utils/links.py,sha256=riNUrG8aGElRszdOPOic4M2AyOcpdcth_-y8JEiZpJ4,10253
|
|
382
383
|
machineconfig/utils/notifications.py,sha256=vvdsY5IX6XEiILTnt5lNyHxhCi0ljdGX2T_67VRfrG4,9009
|
|
@@ -403,8 +404,8 @@ machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=pTxvLzIpD5RF
|
|
|
403
404
|
machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
|
|
404
405
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
|
|
405
406
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
|
|
406
|
-
machineconfig-4.
|
|
407
|
-
machineconfig-4.
|
|
408
|
-
machineconfig-4.
|
|
409
|
-
machineconfig-4.
|
|
410
|
-
machineconfig-4.
|
|
407
|
+
machineconfig-4.91.dist-info/METADATA,sha256=6itSuVawfwaAdJH3RfxSZVJddeSL434HDZ20XU63PBk,7061
|
|
408
|
+
machineconfig-4.91.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
409
|
+
machineconfig-4.91.dist-info/entry_points.txt,sha256=LcwklRJPY_uKBvStgtOJn5G_pmFCEdpgRNzUUc6twAQ,1134
|
|
410
|
+
machineconfig-4.91.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
411
|
+
machineconfig-4.91.dist-info/RECORD,,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
[console_scripts]
|
|
2
|
+
agents = machineconfig.scripts.python.agents:main_from_parser
|
|
2
3
|
choose_wezterm_theme = machineconfig.scripts.python.choose_wezterm_theme:main
|
|
3
4
|
cloud_copy = machineconfig.scripts.python.cloud_copy:arg_parser
|
|
4
5
|
cloud_mount = machineconfig.scripts.python.cloud_mount:arg_parser
|
|
@@ -13,5 +14,6 @@ kill_process = machineconfig.utils.procs:main
|
|
|
13
14
|
mount_nfs = machineconfig.scripts.python.mount_nfs:main
|
|
14
15
|
mount_nw_drive = machineconfig.scripts.python.mount_nw_drive:main
|
|
15
16
|
repos = machineconfig.scripts.python.repos:main_from_parser
|
|
17
|
+
sessions = machineconfig.scripts.python.sessions:main_from_parser
|
|
16
18
|
start_slidev = machineconfig.scripts.python.start_slidev:arg_parser
|
|
17
19
|
wifi_conn = machineconfig.scripts.python.wifi_conn:arg_parser
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/bash
|
|
2
|
-
#=======================================================================
|
|
3
|
-
# 🎨 ASCII ART TOOLS INSTALLATION SCRIPT
|
|
4
|
-
#=======================================================================
|
|
5
|
-
# This script installs various ASCII art and text formatting tools
|
|
6
|
-
|
|
7
|
-
echo """#=======================================================================
|
|
8
|
-
🖼️ ASCII ART TOOLS | Installing terminal visualization packages
|
|
9
|
-
#=======================================================================
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
# Alternate Nix installation method (commented reference)
|
|
13
|
-
# if [ -f "$HOME/.nix-profile/bin/nix-env" ]; then
|
|
14
|
-
# echo """# #=======================================================================
|
|
15
|
-
# 📦 NIX PACKAGE INSTALLATION | Using Nix package manager
|
|
16
|
-
# #=======================================================================
|
|
17
|
-
# """
|
|
18
|
-
# ~/.nix-profile/bin/nix-env -iA nixpkgs.cowsay || true
|
|
19
|
-
# ~/.nix-profile/bin/nix-env -iA nixpkgs.lolcat || true
|
|
20
|
-
# ~/.nix-profile/bin/nix-env -iA nixpkgs.boxes || true
|
|
21
|
-
# ~/.nix-profile/bin/nix-env -iA nixpkgs.figlet || true
|
|
22
|
-
# else
|
|
23
|
-
|
|
24
|
-
# Check if cowsay is installed, if not install it
|
|
25
|
-
if [ ! -f "/usr/games/cowsay" ]; then
|
|
26
|
-
echo """ #=======================================================================
|
|
27
|
-
🐮 INSTALLING COWSAY | ASCII art animals with speech bubbles
|
|
28
|
-
#=======================================================================
|
|
29
|
-
|
|
30
|
-
📋 Usage examples:
|
|
31
|
-
$ cowsay "Hello World"
|
|
32
|
-
$ cowsay -l (to list available figures)
|
|
33
|
-
$ cowsay -f tux "Linux rocks!"
|
|
34
|
-
"""
|
|
35
|
-
sudo nala install cowsay -y || true
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# Check if lolcat is installed, if not install it
|
|
39
|
-
if [ ! -f "/usr/games/lolcat" ]; then
|
|
40
|
-
echo """ #=======================================================================
|
|
41
|
-
🌈 INSTALLING LOLCAT | Rainbow text colorizer for terminal
|
|
42
|
-
#=======================================================================
|
|
43
|
-
|
|
44
|
-
📋 Usage examples:
|
|
45
|
-
$ echo "Hello World" | lolcat
|
|
46
|
-
$ cowsay "Rainbow cow" | lolcat
|
|
47
|
-
"""
|
|
48
|
-
sudo nala install lolcat -y || true
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
# Check if boxes is installed, if not install it
|
|
52
|
-
if [ ! -f "/usr/bin/boxes" ]; then
|
|
53
|
-
echo """ #=======================================================================
|
|
54
|
-
📦 INSTALLING BOXES | ASCII art box drawing around text
|
|
55
|
-
#=======================================================================
|
|
56
|
-
|
|
57
|
-
📋 Usage examples:
|
|
58
|
-
$ echo "Hello World" | boxes
|
|
59
|
-
$ echo "Custom box" | boxes -d stone
|
|
60
|
-
$ boxes -l (to list available box styles)
|
|
61
|
-
"""
|
|
62
|
-
sudo nala install boxes -y || true
|
|
63
|
-
fi
|
|
64
|
-
|
|
65
|
-
# Check if figlet is installed, if not install it
|
|
66
|
-
if [ ! -f "/usr/bin/figlet" ]; then
|
|
67
|
-
echo """ #=======================================================================
|
|
68
|
-
📝 INSTALLING FIGLET | Large ASCII text generator
|
|
69
|
-
#=======================================================================
|
|
70
|
-
|
|
71
|
-
📋 Usage examples:
|
|
72
|
-
$ figlet "Hello World"
|
|
73
|
-
$ showfigfonts (to view available fonts)
|
|
74
|
-
$ figlet -f slant "Custom font"
|
|
75
|
-
"""
|
|
76
|
-
sudo nala install figlet -y || true
|
|
77
|
-
fi
|
|
78
|
-
|
|
79
|
-
echo """#=======================================================================
|
|
80
|
-
✅ INSTALLATION COMPLETE | All ASCII art tools installed successfully
|
|
81
|
-
#=======================================================================
|
|
82
|
-
|
|
83
|
-
🎨 Installed tools:
|
|
84
|
-
✓ cowsay - ASCII art animals with text
|
|
85
|
-
✓ lolcat - Rainbow text colorizer
|
|
86
|
-
✓ boxes - Text in ASCII art boxes
|
|
87
|
-
✓ figlet - Large ASCII text generator
|
|
88
|
-
|
|
89
|
-
💡 Try combining them:
|
|
90
|
-
$ figlet "Cool text" | boxes | lolcat
|
|
91
|
-
$ cowsay -f tux "Linux" | lolcat
|
|
92
|
-
"""
|
|
93
|
-
# fi
|
|
File without changes
|
|
File without changes
|