ikali 1.0.3__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.
- ikali-1.0.3.dist-info/METADATA +43 -0
- ikali-1.0.3.dist-info/RECORD +6 -0
- ikali-1.0.3.dist-info/WHEEL +5 -0
- ikali-1.0.3.dist-info/entry_points.txt +2 -0
- ikali-1.0.3.dist-info/top_level.txt +1 -0
- ikali.py +180 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ikali
|
|
3
|
+
Version: 1.0.3
|
|
4
|
+
Summary: iKali, runs a command when typing ikali into the terminal.
|
|
5
|
+
Home-page: https://github.com/HypaTobaYT/ikali
|
|
6
|
+
Author: Hypa
|
|
7
|
+
Author-email: hypertobayt@gmail.com
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
11
|
+
Classifier: Environment :: Console
|
|
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
|
+
# iKALI
|
|
24
|
+
|
|
25
|
+
This was created out of boredom.
|
|
26
|
+
|
|
27
|
+
## Installation (May require pip3)
|
|
28
|
+
```bash
|
|
29
|
+
pip install ikali
|
|
30
|
+
```
|
|
31
|
+
## Update
|
|
32
|
+
```bash
|
|
33
|
+
pip install -U ikali
|
|
34
|
+
```
|
|
35
|
+
## Uninstall
|
|
36
|
+
```bash
|
|
37
|
+
pip uninstall ikali
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Usage
|
|
41
|
+
```bash
|
|
42
|
+
ikali
|
|
43
|
+
```
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
ikali.py,sha256=SIj-R2MgEf1uw25QE0Z23WvMciD3jNZUMvdBHRDc-uQ,5489
|
|
2
|
+
ikali-1.0.3.dist-info/METADATA,sha256=C8jLy3yhYlyXY3G815chUm6eM2UsYcyDoBMGbnhuIP0,856
|
|
3
|
+
ikali-1.0.3.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
4
|
+
ikali-1.0.3.dist-info/entry_points.txt,sha256=bSPyWDw6B7m0t3SW7koU3Ea4LQ6UZ7c_UihcIRSmZa0,37
|
|
5
|
+
ikali-1.0.3.dist-info/top_level.txt,sha256=EyM7_SIR4_QYX-DqbpCzx1A-f0_UIJDKSUSGRUd8VQ8,6
|
|
6
|
+
ikali-1.0.3.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ikali
|
ikali.py
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"""
|
|
2
|
+
iKALI - The iCarly-themed terminal experience
|
|
3
|
+
A joke on Kali Linux meets iCarly
|
|
4
|
+
Now with TRUE RGB gradient colors!
|
|
5
|
+
"""
|
|
6
|
+
import time
|
|
7
|
+
import sys
|
|
8
|
+
import os
|
|
9
|
+
import math
|
|
10
|
+
|
|
11
|
+
def rgb_to_ansi(r, g, b):
|
|
12
|
+
"""Convert RGB to ANSI true color code"""
|
|
13
|
+
return f"\033[38;2;{r};{g};{b}m"
|
|
14
|
+
|
|
15
|
+
def reset_color():
|
|
16
|
+
"""Reset color to default"""
|
|
17
|
+
return "\033[0m"
|
|
18
|
+
|
|
19
|
+
def get_rainbow_rgb(position):
|
|
20
|
+
"""Generate smooth RGB rainbow color using HSV color wheel"""
|
|
21
|
+
# Normalize position to 0-1 range
|
|
22
|
+
hue = (position % 360) / 360.0
|
|
23
|
+
|
|
24
|
+
# Convert HSV (hue, saturation=1, value=1) to RGB
|
|
25
|
+
h = hue * 6.0
|
|
26
|
+
x = 1 - abs((h % 2) - 1)
|
|
27
|
+
|
|
28
|
+
if h < 1:
|
|
29
|
+
r, g, b = 1, x, 0
|
|
30
|
+
elif h < 2:
|
|
31
|
+
r, g, b = x, 1, 0
|
|
32
|
+
elif h < 3:
|
|
33
|
+
r, g, b = 0, 1, x
|
|
34
|
+
elif h < 4:
|
|
35
|
+
r, g, b = 0, x, 1
|
|
36
|
+
elif h < 5:
|
|
37
|
+
r, g, b = x, 0, 1
|
|
38
|
+
else:
|
|
39
|
+
r, g, b = 1, 0, x
|
|
40
|
+
|
|
41
|
+
# Convert to 0-255 range
|
|
42
|
+
return int(r * 255), int(g * 255), int(b * 255)
|
|
43
|
+
|
|
44
|
+
def rainbow_text(text, offset=0):
|
|
45
|
+
"""Apply smooth gradient rainbow colors to text"""
|
|
46
|
+
result = ""
|
|
47
|
+
char_count = 0
|
|
48
|
+
for char in text:
|
|
49
|
+
if char != ' ' and char != '\n':
|
|
50
|
+
# Calculate hue position (0-360 degrees)
|
|
51
|
+
hue = (offset * 10 + char_count * 8) % 360
|
|
52
|
+
r, g, b = get_rainbow_rgb(hue)
|
|
53
|
+
result += rgb_to_ansi(r, g, b) + char
|
|
54
|
+
char_count += 1
|
|
55
|
+
else:
|
|
56
|
+
result += char
|
|
57
|
+
return result + reset_color()
|
|
58
|
+
|
|
59
|
+
def clear_screen():
|
|
60
|
+
"""Clear the terminal screen"""
|
|
61
|
+
os.system('clear' if os.name != 'nt' else 'cls')
|
|
62
|
+
|
|
63
|
+
def hide_cursor():
|
|
64
|
+
"""Hide the terminal cursor"""
|
|
65
|
+
sys.stdout.write('\033[?25l')
|
|
66
|
+
sys.stdout.flush()
|
|
67
|
+
|
|
68
|
+
def show_cursor():
|
|
69
|
+
"""Show the terminal cursor"""
|
|
70
|
+
sys.stdout.write('\033[?25h')
|
|
71
|
+
sys.stdout.flush()
|
|
72
|
+
|
|
73
|
+
def print_logo_animated():
|
|
74
|
+
"""Print iKALI ASCII logo with animated rainbow effect"""
|
|
75
|
+
logo = """
|
|
76
|
+
██╗██╗ ██╗ █████╗ ██╗ ██╗
|
|
77
|
+
╚═╝██║ ██╔╝██╔══██╗██║ ██║
|
|
78
|
+
██╗█████╔╝ ███████║██║ ██║
|
|
79
|
+
██║██╔═██╗ ██╔══██║██║ ██║
|
|
80
|
+
██║██║ ██╗██║ ██║███████╗██║
|
|
81
|
+
╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
lines = logo.strip().split('\n')
|
|
85
|
+
|
|
86
|
+
# Print initial logo
|
|
87
|
+
for line in lines:
|
|
88
|
+
print(rainbow_text(line, offset=0))
|
|
89
|
+
|
|
90
|
+
# Animate the logo with smooth gradient flow
|
|
91
|
+
for cycle in range(1, 36): # Full color wheel cycle
|
|
92
|
+
sys.stdout.write(f'\033[{len(lines)}A') # Move cursor up
|
|
93
|
+
for line in lines:
|
|
94
|
+
sys.stdout.write('\033[K') # Clear line
|
|
95
|
+
print(rainbow_text(line, offset=cycle))
|
|
96
|
+
sys.stdout.flush()
|
|
97
|
+
time.sleep(0.05) # Smooth animation speed
|
|
98
|
+
|
|
99
|
+
def print_line_animated(text, cycles=36, delay=0.05):
|
|
100
|
+
"""Print a single line with animated gradient rainbow effect"""
|
|
101
|
+
# Print initial version
|
|
102
|
+
print(rainbow_text(text, offset=0))
|
|
103
|
+
|
|
104
|
+
# Animate it through color spectrum
|
|
105
|
+
for cycle in range(1, cycles):
|
|
106
|
+
sys.stdout.write('\033[1A') # Move up one line
|
|
107
|
+
sys.stdout.write('\033[K') # Clear the line
|
|
108
|
+
print(rainbow_text(text, offset=cycle))
|
|
109
|
+
sys.stdout.flush()
|
|
110
|
+
time.sleep(delay)
|
|
111
|
+
|
|
112
|
+
def sing_theme():
|
|
113
|
+
"""Display the iCarly theme song lyrics with animation"""
|
|
114
|
+
lyrics = [
|
|
115
|
+
"I know, you see",
|
|
116
|
+
"Somehow the world will change for me",
|
|
117
|
+
"And be so wonderful",
|
|
118
|
+
"",
|
|
119
|
+
"Live life, breathe air",
|
|
120
|
+
"I know somehow we're gonna get there",
|
|
121
|
+
"And feel so wonderful",
|
|
122
|
+
"",
|
|
123
|
+
"It's all for real",
|
|
124
|
+
"I'm telling you just how I feel",
|
|
125
|
+
"So wake up the members of my nation",
|
|
126
|
+
"It's your time to be",
|
|
127
|
+
"There's no chance unless you take one",
|
|
128
|
+
"And the time to see",
|
|
129
|
+
"The brighter side of every situation",
|
|
130
|
+
"Some things are meant to be",
|
|
131
|
+
"So give me your best and leave the rest to me",
|
|
132
|
+
"",
|
|
133
|
+
"Leave it all to me",
|
|
134
|
+
"leave it all to me",
|
|
135
|
+
"Just leave it all to me",
|
|
136
|
+
]
|
|
137
|
+
|
|
138
|
+
for line in lyrics:
|
|
139
|
+
if line:
|
|
140
|
+
print_line_animated(line, cycles=36, delay=0.05)
|
|
141
|
+
time.sleep(0.4)
|
|
142
|
+
else:
|
|
143
|
+
print()
|
|
144
|
+
time.sleep(0.3)
|
|
145
|
+
|
|
146
|
+
def footer():
|
|
147
|
+
"""Print footer message"""
|
|
148
|
+
print("\n")
|
|
149
|
+
messages = [
|
|
150
|
+
"iKALI: a stupid command that shouldn't exist.",
|
|
151
|
+
"Not affiliated with Kali Linux or Nickelodeon.",
|
|
152
|
+
"Powered by nostalgia and plenty of Vodka.",
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
for msg in messages:
|
|
156
|
+
print_line_animated(msg, cycles=36, delay=0.05)
|
|
157
|
+
time.sleep(0.3)
|
|
158
|
+
print()
|
|
159
|
+
|
|
160
|
+
def main():
|
|
161
|
+
"""Main function"""
|
|
162
|
+
try:
|
|
163
|
+
hide_cursor()
|
|
164
|
+
clear_screen()
|
|
165
|
+
print_logo_animated()
|
|
166
|
+
print("\n")
|
|
167
|
+
time.sleep(0.8)
|
|
168
|
+
sing_theme()
|
|
169
|
+
time.sleep(1)
|
|
170
|
+
footer()
|
|
171
|
+
time.sleep(3)
|
|
172
|
+
show_cursor()
|
|
173
|
+
except KeyboardInterrupt:
|
|
174
|
+
show_cursor()
|
|
175
|
+
r, g, b = get_rainbow_rgb(60) # Yellow
|
|
176
|
+
print(f"\n\n{rgb_to_ansi(r, g, b)}Interrupted! See you later! 👋{{r{eset_color()}")
|
|
177
|
+
sys.exit(0)
|
|
178
|
+
|
|
179
|
+
if __name__ == "__main__":
|
|
180
|
+
main()
|