nirob 2.0.0__tar.gz

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.
nirob-2.0.0/PKG-INFO ADDED
@@ -0,0 +1,56 @@
1
+ Metadata-Version: 2.4
2
+ Name: nirob
3
+ Version: 2.0.0
4
+ Summary: NIROB PIP — Auto install all essential Python packages with VIP Cyberpunk UI
5
+ Home-page: https://t.me/MT_0G
6
+ Author: NIROB
7
+ Author-email: your@email.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Operating System :: OS Independent
10
+ Classifier: Environment :: Console
11
+ Classifier: Topic :: Utilities
12
+ Requires-Python: >=3.6
13
+ Description-Content-Type: text/markdown
14
+ Dynamic: author
15
+ Dynamic: author-email
16
+ Dynamic: classifier
17
+ Dynamic: description
18
+ Dynamic: description-content-type
19
+ Dynamic: home-page
20
+ Dynamic: requires-python
21
+ Dynamic: summary
22
+
23
+ # NIROB PIP
24
+
25
+ ```
26
+ ███╗ ██╗██╗██████╗ ██████╗ ██████╗
27
+ ████╗ ██║██║██╔══██╗██╔═══██╗██╔══██╗
28
+ ██╔██╗ ██║██║██████╔╝██║ ██║██████╔╝
29
+ ██║╚██╗██║██║██╔══██╗██║ ██║██╔══██╗
30
+ ██║ ╚████║██║██║ ██║╚██████╔╝██████╔╝
31
+ ╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═════╝╚═════╝
32
+ ```
33
+
34
+ **⚡ Powered By: NIROB | 📱 Telegram: @MT_0G | 🔖 v2.0.0**
35
+
36
+ ## Install
37
+
38
+ ```bash
39
+ pip install nirob
40
+ ```
41
+
42
+ ## Usage
43
+
44
+ ```bash
45
+ nirob
46
+ ```
47
+
48
+ Automatically installs **47 essential Python packages** with a beautiful **VIP Cyberpunk terminal UI** — glitch animations, matrix rain, live progress bars, and more.
49
+
50
+ ## Features
51
+
52
+ - 🎨 Cyberpunk VIP terminal UI with glitch & matrix effects
53
+ - ⚡ Live animated progress bars with spinner
54
+ - 🔁 Auto-retry with alternative package names
55
+ - ✅ Full summary report with success/fail count
56
+ - 🐍 Works on Termux (Android), Linux, Windows, macOS
nirob-2.0.0/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # NIROB PIP
2
+
3
+ ```
4
+ ███╗ ██╗██╗██████╗ ██████╗ ██████╗
5
+ ████╗ ██║██║██╔══██╗██╔═══██╗██╔══██╗
6
+ ██╔██╗ ██║██║██████╔╝██║ ██║██████╔╝
7
+ ██║╚██╗██║██║██╔══██╗██║ ██║██╔══██╗
8
+ ██║ ╚████║██║██║ ██║╚██████╔╝██████╔╝
9
+ ╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═════╝╚═════╝
10
+ ```
11
+
12
+ **⚡ Powered By: NIROB | 📱 Telegram: @MT_0G | 🔖 v2.0.0**
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ pip install nirob
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ```bash
23
+ nirob
24
+ ```
25
+
26
+ Automatically installs **47 essential Python packages** with a beautiful **VIP Cyberpunk terminal UI** — glitch animations, matrix rain, live progress bars, and more.
27
+
28
+ ## Features
29
+
30
+ - 🎨 Cyberpunk VIP terminal UI with glitch & matrix effects
31
+ - ⚡ Live animated progress bars with spinner
32
+ - 🔁 Auto-retry with alternative package names
33
+ - ✅ Full summary report with success/fail count
34
+ - 🐍 Works on Termux (Android), Linux, Windows, macOS
@@ -0,0 +1,4 @@
1
+ from .main import main
2
+
3
+ __version__ = "2.0.0"
4
+ __author__ = "NIROB"
@@ -0,0 +1,483 @@
1
+ import sys
2
+ import time
3
+ import subprocess
4
+ import random
5
+ import os
6
+ import shutil
7
+
8
+ VERSION = "v2.0.0"
9
+ TELEGRAM = "@MT_0G"
10
+ POWERED_BY = "NIROB"
11
+
12
+ # ═══════════════════════════════════════════════
13
+ # COLOR PALETTE — VIP Neon Cyberpunk
14
+ # ═══════════════════════════════════════════════
15
+ # Standard
16
+ BD = "\033[1m" # bold
17
+ DM = "\033[2m" # dim
18
+ RS = "\033[0m" # reset
19
+ W = "\033[97m" # white
20
+
21
+ # Neon palette
22
+ C = "\033[96m" # bright cyan — general text
23
+ TC = "\033[36m" # teal — dim fills
24
+ PR = "\033[95m" # hot magenta — accents / PIP logo
25
+ GD = "\033[93m" # gold/yellow — borders, brackets
26
+ OR = "\033[33m" # orange — bar fill (in-progress)
27
+ BL = "\033[94m" # electric blue — info labels
28
+ LB = "\033[96m" # light blue-cyan — info values
29
+ GR = "\033[92m" # neon green — success
30
+ RD = "\033[91m" # hot red — fail
31
+ YL = "\033[93m" # yellow — warnings / version
32
+ PK = "\033[35m" # deep purple/pink — NIROB logo shadow rows
33
+
34
+ # 256-color extras (safe on most modern terminals / Termux)
35
+ GOLD = "\033[38;5;220m" # vivid gold
36
+ PINK = "\033[38;5;213m" # neon pink
37
+ LIME = "\033[38;5;154m" # neon lime
38
+ ORANGE = "\033[38;5;208m" # neon orange
39
+ VIOLET = "\033[38;5;129m" # deep violet
40
+
41
+ # ═══════════════════════════════════════════════
42
+ # TERMINAL WIDTH helper
43
+ # ═══════════════════════════════════════════════
44
+ def tw():
45
+ return min(shutil.get_terminal_size((80, 24)).columns, 80)
46
+
47
+ # ═══════════════════════════════════════════════
48
+ # ANIMATIONS
49
+ # ═══════════════════════════════════════════════
50
+
51
+ GLITCH_CHARS = list("█▓▒░▄▀■□◆◇▲▼◈⣿⢿⡿⣾⣽⣻⢿⡿⣷")
52
+
53
+ def glitch_text(text, cycles=4, delay=0.04):
54
+ """Flicker a line with random glitch chars before revealing."""
55
+ glitch_colors = [PINK, ORANGE, GOLD, LIME, VIOLET, RD]
56
+ for _ in range(cycles):
57
+ glitched = ""
58
+ col = random.choice(glitch_colors)
59
+ for ch in text:
60
+ if ch != " " and random.random() < 0.38:
61
+ glitched += random.choice(GLITCH_CHARS)
62
+ else:
63
+ glitched += ch
64
+ sys.stdout.write(f"\r{col}{BD}{glitched}{RS}")
65
+ sys.stdout.flush()
66
+ time.sleep(delay)
67
+ sys.stdout.write(f"\r{PINK}{BD}{text}{RS}\n")
68
+ sys.stdout.flush()
69
+
70
+ def type_print(text, color=None, delay=0.018, newline=True):
71
+ """Typewriter effect."""
72
+ color = color or C
73
+ for ch in text:
74
+ sys.stdout.write(f"{color}{BD}{ch}{RS}")
75
+ sys.stdout.flush()
76
+ time.sleep(delay)
77
+ if newline:
78
+ print()
79
+
80
+ def pulse_line(text, color=C, times=3, delay=0.12):
81
+ """Dim→bright pulse on a single line."""
82
+ for _ in range(times):
83
+ sys.stdout.write(f"\r{DM}{color}{text}{RS}")
84
+ sys.stdout.flush()
85
+ time.sleep(delay)
86
+ sys.stdout.write(f"\r{BD}{color}{text}{RS}")
87
+ sys.stdout.flush()
88
+ time.sleep(delay)
89
+ print()
90
+
91
+ def scan_effect(lines, delay=0.025):
92
+ """Print lines with a fast scan feel."""
93
+ for line in lines:
94
+ print(line)
95
+ time.sleep(delay)
96
+
97
+ def matrix_rain(rows=5, delay=0.04):
98
+ """Quick matrix-style rain before banner."""
99
+ width = min(tw(), 60)
100
+ chars = list("ニロブ01アイウエオ█▓░NIROB◈⚡★")
101
+ rain_colors = [LIME, PINK, GOLD, C, GR, ORANGE]
102
+ for _ in range(rows):
103
+ rain = ""
104
+ for _ in range(width):
105
+ if random.random() > 0.45:
106
+ rain += DM + random.choice(rain_colors) + random.choice(chars)
107
+ else:
108
+ rain += " "
109
+ print(f" {rain}{RS}")
110
+ time.sleep(delay)
111
+ print()
112
+
113
+ def loading_dots(msg, count=5, delay=0.18):
114
+ for i in range(count):
115
+ dots = "." * ((i % 3) + 1) + " "
116
+ sys.stdout.write(f"\r {C}{BD}{msg}{dots}{RS}")
117
+ sys.stdout.flush()
118
+ time.sleep(delay)
119
+ print()
120
+
121
+ # ═══════════════════════════════════════════════
122
+ # BANNER
123
+ # ═══════════════════════════════════════════════
124
+
125
+ LOGO = [
126
+ r" ███╗ ██╗██╗██████╗ ██████╗ ██████╗ ",
127
+ r" ████╗ ██║██║██╔══██╗██╔═══██╗██╔══██╗",
128
+ r" ██╔██╗ ██║██║██████╔╝██║ ██║██████╔╝",
129
+ r" ██║╚██╗██║██║██╔══██╗██║ ██║██╔══██╗",
130
+ r" ██║ ╚████║██║██║ ██║╚██████╔╝██████╔╝",
131
+ r" ╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═════╝╚═════╝ ",
132
+ ]
133
+
134
+ PIP_LOGO = [
135
+ r" ██████╗ ██╗██████╗ ",
136
+ r" ██╔══██╗██║██╔══██╗",
137
+ r" ██████╔╝██║██████╔╝",
138
+ r" ██╔═══╝ ██║██╔═══╝ ",
139
+ r" ██║ ██║██║ ",
140
+ r" ╚═╝ ╚═╝╚═╝ ",
141
+ ]
142
+
143
+ def border_line(char="═", width=None):
144
+ w = width or min(tw() - 2, 54)
145
+ return C + "╔" + char * w + "╗" + RS
146
+
147
+ def banner():
148
+ os.system("clear")
149
+
150
+ # Matrix rain intro
151
+ matrix_rain(rows=4, delay=0.03)
152
+
153
+ # Top animated border — gold
154
+ w = min(tw() - 2, 54)
155
+ anim_border = list("═" * w)
156
+ for i in range(0, w, 3):
157
+ anim_border[i] = "▓"
158
+ sys.stdout.write(f"\r {VIOLET}╔{''.join(anim_border)}╗{RS}")
159
+ sys.stdout.flush()
160
+ time.sleep(0.012)
161
+ sys.stdout.write(f"\r {GOLD}╔{'═'*w}╗{RS}\n")
162
+ sys.stdout.flush()
163
+
164
+ # NIROB logo — gradient colors row by row
165
+ LOGO_COLORS = [PINK, PR, ORANGE, GOLD, LIME, C]
166
+ for i, (line, col) in enumerate(zip(LOGO, LOGO_COLORS)):
167
+ if i == 0 or i == 5:
168
+ # override glitch reveal color per row
169
+ sys.stdout.write(f"\r{col}{BD}{line}{RS}\n")
170
+ sys.stdout.flush()
171
+ # do a quick glitch
172
+ for _ in range(3):
173
+ glitched = "".join(
174
+ random.choice(GLITCH_CHARS) if ch != " " and random.random() < 0.3 else ch
175
+ for ch in line
176
+ )
177
+ sys.stdout.write(f"\r{random.choice([PINK,ORANGE,VIOLET])}{BD}{glitched}{RS}")
178
+ sys.stdout.flush()
179
+ time.sleep(0.03)
180
+ sys.stdout.write(f"\r{col}{BD}{line}{RS}\n")
181
+ sys.stdout.flush()
182
+ else:
183
+ print(f"{col}{BD}{line}{RS}")
184
+ time.sleep(0.025)
185
+
186
+ print()
187
+
188
+ # PIP logo — electric gold
189
+ PIP_COLORS = [GOLD, GOLD, ORANGE, ORANGE, GD, GD]
190
+ for line, col in zip(PIP_LOGO, PIP_COLORS):
191
+ print(f"{col}{BD}{line}{RS}")
192
+ time.sleep(0.022)
193
+
194
+ print()
195
+
196
+ # Bottom border pulse — violet → gold
197
+ for col in [VIOLET, GOLD, VIOLET, GOLD]:
198
+ sys.stdout.write(f"\r {col}{BD}╚{'═'*w}╝{RS}")
199
+ sys.stdout.flush()
200
+ time.sleep(0.09)
201
+ print()
202
+ print()
203
+
204
+ # Info box — multicolor
205
+ info_w = 52
206
+ print(f" {GOLD}╔{'═'*info_w}╗{RS}")
207
+
208
+ def info_row(icon, label, lc, value, vc):
209
+ plain_len = len(f" {icon} {label:<12}: {value} ")
210
+ pad = max(info_w - plain_len, 0)
211
+ print(
212
+ f" {GOLD}║{RS} "
213
+ f"{icon} "
214
+ f"{lc}{BD}{label:<12}{RS}"
215
+ f"{W}:{RS} "
216
+ f"{vc}{BD}{value}{RS}"
217
+ f"{' '*pad}"
218
+ f" {GOLD}║{RS}"
219
+ )
220
+
221
+ info_row("⚡", "Powered By", PINK, POWERED_BY, PINK)
222
+ info_row("📱", "Telegram", PR, TELEGRAM, C)
223
+ info_row("🔖", "Version", GOLD, VERSION, GOLD)
224
+ info_row("🐍", "Python", LIME, sys.version.split()[0], LIME)
225
+ print(f" {GOLD}╚{'═'*info_w}╝{RS}")
226
+ print()
227
+
228
+ # Welcome — pulse gold border, pink typing
229
+ pulse_line(" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", GOLD, times=2, delay=0.09)
230
+ type_print(" ★ Welcome To NIROB PIP INSTALLER ★", PINK, delay=0.022)
231
+ pulse_line(" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", GOLD, times=2, delay=0.09)
232
+ print()
233
+
234
+
235
+ # ═══════════════════════════════════════════════
236
+ # PACKAGES
237
+ # ═══════════════════════════════════════════════
238
+ PACKAGES = [
239
+ ("requests", "requests"),
240
+ ("httpx", "httpx"),
241
+ ("aiohttp", "aiohttp"),
242
+ ("urllib3", "urllib3"),
243
+ ("websocket-client", "websocket-client"),
244
+ ("beautifulsoup4", "beautifulsoup4"),
245
+ ("lxml", "lxml"),
246
+ ("flask", "flask"),
247
+ ("fastapi", "fastapi"),
248
+ ("django", "django"),
249
+ ("uvicorn", "uvicorn"),
250
+ ("gunicorn", "gunicorn"),
251
+ ("numpy", "numpy"),
252
+ ("pandas", "pandas"),
253
+ ("matplotlib", "matplotlib"),
254
+ ("scipy", "scipy"),
255
+ ("scikit-learn", "scikit-learn"),
256
+ ("pillow", "Pillow"),
257
+ ("opencv-python", "opencv-python"),
258
+ ("colorama", "colorama"),
259
+ ("rich", "rich"),
260
+ ("click", "click"),
261
+ ("tqdm", "tqdm"),
262
+ ("python-dotenv", "python-dotenv"),
263
+ ("cryptography", "cryptography"),
264
+ ("pycryptodome", "pycryptodome"),
265
+ ("paramiko", "paramiko"),
266
+ ("psutil", "psutil"),
267
+ ("schedule", "schedule"),
268
+ ("apscheduler", "APScheduler"),
269
+ ("sqlalchemy", "SQLAlchemy"),
270
+ ("pymongo", "pymongo"),
271
+ ("redis", "redis"),
272
+ ("pymysql", "PyMySQL"),
273
+ ("pytest", "pytest"),
274
+ ("black", "black"),
275
+ ("flake8", "flake8"),
276
+ ("setuptools", "setuptools"),
277
+ ("wheel", "wheel"),
278
+ ("twine", "twine"),
279
+ ("python-telegram-bot", "python-telegram-bot"),
280
+ ("pydantic", "pydantic"),
281
+ ("jinja2", "Jinja2"),
282
+ ("pytz", "pytz"),
283
+ ("arrow", "arrow"),
284
+ ("faker", "Faker"),
285
+ ("loguru", "loguru"),
286
+ ]
287
+
288
+ ALT_NAMES = {
289
+ "pillow": ["Pillow", "pillow"],
290
+ "opencv-python": ["opencv-python", "opencv-python-headless"],
291
+ "pycryptodome": ["pycryptodome", "pycryptodomex"],
292
+ "sqlalchemy": ["SQLAlchemy", "sqlalchemy"],
293
+ "apscheduler": ["APScheduler", "apscheduler"],
294
+ "pymysql": ["PyMySQL", "pymysql"],
295
+ "scikit-learn": ["scikit-learn", "sklearn"],
296
+ "jinja2": ["Jinja2", "jinja2"],
297
+ "faker": ["Faker", "faker"],
298
+ }
299
+
300
+
301
+ # ═══════════════════════════════════════════════
302
+ # PROGRESS BAR + SPINNER
303
+ # ═══════════════════════════════════════════════
304
+
305
+ SPINNER_FRAMES = [
306
+ PINK+"⣾"+RS, ORANGE+"⣽"+RS, GOLD+"⣻"+RS, LIME+"⢿"+RS,
307
+ C+"⡿"+RS, PINK+"⣟"+RS, ORANGE+"⣯"+RS, GOLD+"⣷"+RS,
308
+ ]
309
+ CYBER_FRAMES = [
310
+ GOLD+"◢"+RS, ORANGE+"◣"+RS, PINK+"◤"+RS, VIOLET+"◥"+RS,
311
+ LIME+"◈"+RS, C+"◉"+RS, GOLD+"◈"+RS, PINK+"◈"+RS,
312
+ ]
313
+
314
+ def draw_bar(percent, width=28, done=False, fail=False):
315
+ filled = int(width * percent / 100)
316
+ empty = width - filled
317
+ if done:
318
+ # green gradient fill
319
+ bar = LIME + "█" * filled + DM + TC + "░" * empty + RS
320
+ elif fail:
321
+ bar = RD + "█" * filled + DM + "░" * empty + RS
322
+ else:
323
+ # orange fill with pink tip
324
+ tip = PINK + "▓" + RS if filled > 0 else ""
325
+ bar = ORANGE + "█" * max(filled - 1, 0) + tip + DM + TC + "░" * empty + RS
326
+ return bar
327
+
328
+ def animate_install(label, pkg_index):
329
+ """Animated spinner while installing."""
330
+ frames = CYBER_FRAMES if pkg_index % 2 == 0 else SPINNER_FRAMES
331
+ for p in range(0, 91, 3):
332
+ sp = frames[(p // 6) % len(frames)]
333
+ bar = draw_bar(p)
334
+ sys.stdout.write(
335
+ f"\r {sp} {GOLD}{BD}{label:<28}{RS} "
336
+ f"{VIOLET}[{RS}{bar}{VIOLET}]{RS} "
337
+ f"{ORANGE}{BD}{p:>3}%{RS} "
338
+ )
339
+ sys.stdout.flush()
340
+ time.sleep(0.016)
341
+
342
+ def finish_bar(label, percent, status):
343
+ if status == "done":
344
+ icon = LIME + BD + "✔" + RS
345
+ bar = draw_bar(percent, done=True)
346
+ pct_col = LIME
347
+ else:
348
+ icon = RD + BD + "✘" + RS
349
+ bar = draw_bar(percent, fail=True)
350
+ pct_col = RD
351
+ sys.stdout.write(
352
+ f"\r {icon} {GOLD}{BD}{label:<28}{RS} "
353
+ f"{VIOLET}[{RS}{bar}{VIOLET}]{RS} "
354
+ f"{pct_col}{BD}{percent:>3}%{RS} "
355
+ )
356
+ sys.stdout.flush()
357
+
358
+
359
+ # ═══════════════════════════════════════════════
360
+ # INSTALL LOGIC
361
+ # ═══════════════════════════════════════════════
362
+
363
+ def try_install(pkg_key, pypi_name):
364
+ candidates = ALT_NAMES.get(pkg_key, [pypi_name])
365
+ if pypi_name not in candidates:
366
+ candidates = [pypi_name] + candidates
367
+ for attempt, name in enumerate(candidates):
368
+ try:
369
+ result = subprocess.run(
370
+ [sys.executable, "-m", "pip", "install", name,
371
+ "-q", "--disable-pip-version-check"],
372
+ capture_output=True, text=True, timeout=120
373
+ )
374
+ if result.returncode == 0:
375
+ return True, name, attempt
376
+ except subprocess.TimeoutExpired:
377
+ pass
378
+ return False, pypi_name, len(candidates)
379
+
380
+
381
+ def install_all():
382
+ total = len(PACKAGES)
383
+ success = []
384
+ failed = []
385
+
386
+ # Header
387
+ print(f" {GOLD}{BD}► Total packages : {LIME}{total}{RS}")
388
+ print(f" {GOLD}{BD}► Installing...{RS}")
389
+ print()
390
+ time.sleep(0.4)
391
+
392
+ for i, (pkg_key, pypi_name) in enumerate(PACKAGES, 1):
393
+ label = f"[{i:>2}/{total}] {pypi_name}"
394
+
395
+ animate_install(label, i)
396
+ ok, used_name, attempts = try_install(pkg_key, pypi_name)
397
+
398
+ if ok:
399
+ finish_bar(label, 100, "done")
400
+ retry_note = f" {YL}↳ alt: {used_name}{RS}" if attempts > 0 else ""
401
+ print(
402
+ f"\n {LIME}╔══ ✔ INSTALLED{RS} "
403
+ f"{GOLD}{BD}{pypi_name}{RS}"
404
+ f"{retry_note}"
405
+ )
406
+ print(f" {ORANGE}╚{'─'*38}◈{RS}")
407
+ success.append(pypi_name)
408
+ else:
409
+ finish_bar(label, 100, "fail")
410
+ print(
411
+ f"\n {RD}╔══ ✘ FAILED {RS} "
412
+ f"{GOLD}{BD}{pypi_name}{RS}"
413
+ )
414
+ print(f" {ORANGE}╚{'─'*38}◈{RS}")
415
+ failed.append(pypi_name)
416
+
417
+ sys.stdout.flush()
418
+ time.sleep(0.06)
419
+
420
+ # ── SUMMARY ─────────────────────────────────────────
421
+ print()
422
+ loading_dots(" Generating report", count=6, delay=0.12)
423
+
424
+ sw = 50
425
+ print(f" {GOLD}╔{'═'*sw}╗{RS}")
426
+
427
+ # Glitch title then final
428
+ title = " ◈ INSTALLATION COMPLETE ◈ "
429
+ for _ in range(4):
430
+ g = "".join(
431
+ random.choice(GLITCH_CHARS) if ch != " " and random.random() < 0.35 else ch
432
+ for ch in title.center(sw)
433
+ )
434
+ sys.stdout.write(f"\r {GOLD}║{random.choice([PINK,ORANGE,LIME])}{BD}{g}{RS}{GOLD}║{RS}")
435
+ sys.stdout.flush()
436
+ time.sleep(0.04)
437
+ print(f"\r {GOLD}║{PINK}{BD}{title.center(sw)}{RS}{GOLD}║{RS}")
438
+
439
+ print(f" {GOLD}╠{'═'*sw}╣{RS}")
440
+
441
+ def srow(icon, lc, label, vc, val):
442
+ plain = f" {icon} {label:<12}: {val}"
443
+ pad = sw - len(plain) - 1
444
+ print(
445
+ f" {GOLD}║{RS} "
446
+ f"{icon} "
447
+ f"{lc}{BD}{label:<12}{RS}"
448
+ f"{W}:{RS} "
449
+ f"{vc}{BD}{val}{RS}"
450
+ f"{' '*max(pad,0)}"
451
+ f"{GOLD}║{RS}"
452
+ )
453
+
454
+ srow("✔", LIME, "Success", LIME, len(success))
455
+ srow("✘", RD, "Failed", RD, len(failed))
456
+ srow("◈", C, "Total", GOLD, total)
457
+ srow("🐍", ORANGE, "Python", ORANGE, sys.version.split()[0])
458
+
459
+ print(f" {GOLD}╚{'═'*sw}╝{RS}")
460
+ print()
461
+
462
+ if failed:
463
+ print(f" {RD}{BD}Failed packages:{RS}")
464
+ for f in failed:
465
+ print(f" {RD}•{RS} {GOLD}{f}{RS}")
466
+ print()
467
+
468
+ # Done animation
469
+ pulse_line(" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", GOLD, times=3, delay=0.08)
470
+ type_print(f" ⚡ Done! Powered By: {POWERED_BY} | {TELEGRAM}", PINK, delay=0.025)
471
+ pulse_line(" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", GOLD, times=3, delay=0.08)
472
+ print()
473
+
474
+
475
+ # ═══════════════════════════════════════════════
476
+ # ENTRY POINT
477
+ # ═══════════════════════════════════════════════
478
+ def main():
479
+ banner()
480
+ install_all()
481
+
482
+ if __name__ == "__main__":
483
+ main()
@@ -0,0 +1,56 @@
1
+ Metadata-Version: 2.4
2
+ Name: nirob
3
+ Version: 2.0.0
4
+ Summary: NIROB PIP — Auto install all essential Python packages with VIP Cyberpunk UI
5
+ Home-page: https://t.me/MT_0G
6
+ Author: NIROB
7
+ Author-email: your@email.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Operating System :: OS Independent
10
+ Classifier: Environment :: Console
11
+ Classifier: Topic :: Utilities
12
+ Requires-Python: >=3.6
13
+ Description-Content-Type: text/markdown
14
+ Dynamic: author
15
+ Dynamic: author-email
16
+ Dynamic: classifier
17
+ Dynamic: description
18
+ Dynamic: description-content-type
19
+ Dynamic: home-page
20
+ Dynamic: requires-python
21
+ Dynamic: summary
22
+
23
+ # NIROB PIP
24
+
25
+ ```
26
+ ███╗ ██╗██╗██████╗ ██████╗ ██████╗
27
+ ████╗ ██║██║██╔══██╗██╔═══██╗██╔══██╗
28
+ ██╔██╗ ██║██║██████╔╝██║ ██║██████╔╝
29
+ ██║╚██╗██║██║██╔══██╗██║ ██║██╔══██╗
30
+ ██║ ╚████║██║██║ ██║╚██████╔╝██████╔╝
31
+ ╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═════╝╚═════╝
32
+ ```
33
+
34
+ **⚡ Powered By: NIROB | 📱 Telegram: @MT_0G | 🔖 v2.0.0**
35
+
36
+ ## Install
37
+
38
+ ```bash
39
+ pip install nirob
40
+ ```
41
+
42
+ ## Usage
43
+
44
+ ```bash
45
+ nirob
46
+ ```
47
+
48
+ Automatically installs **47 essential Python packages** with a beautiful **VIP Cyberpunk terminal UI** — glitch animations, matrix rain, live progress bars, and more.
49
+
50
+ ## Features
51
+
52
+ - 🎨 Cyberpunk VIP terminal UI with glitch & matrix effects
53
+ - ⚡ Live animated progress bars with spinner
54
+ - 🔁 Auto-retry with alternative package names
55
+ - ✅ Full summary report with success/fail count
56
+ - 🐍 Works on Termux (Android), Linux, Windows, macOS
@@ -0,0 +1,9 @@
1
+ README.md
2
+ setup.py
3
+ nirob/__init__.py
4
+ nirob/main.py
5
+ nirob.egg-info/PKG-INFO
6
+ nirob.egg-info/SOURCES.txt
7
+ nirob.egg-info/dependency_links.txt
8
+ nirob.egg-info/entry_points.txt
9
+ nirob.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ nirob = nirob.main:main
@@ -0,0 +1 @@
1
+ nirob
nirob-2.0.0/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
nirob-2.0.0/setup.py ADDED
@@ -0,0 +1,25 @@
1
+ from setuptools import setup, find_packages
2
+
3
+ setup(
4
+ name="nirob",
5
+ version="2.0.0",
6
+ author="NIROB",
7
+ author_email="your@email.com",
8
+ description="NIROB PIP — Auto install all essential Python packages with VIP Cyberpunk UI",
9
+ long_description=open("README.md", encoding="utf-8").read(),
10
+ long_description_content_type="text/markdown",
11
+ url="https://t.me/MT_0G",
12
+ packages=find_packages(),
13
+ python_requires=">=3.6",
14
+ entry_points={
15
+ "console_scripts": [
16
+ "nirob=nirob.main:main",
17
+ ],
18
+ },
19
+ classifiers=[
20
+ "Programming Language :: Python :: 3",
21
+ "Operating System :: OS Independent",
22
+ "Environment :: Console",
23
+ "Topic :: Utilities",
24
+ ],
25
+ )