bday-cli 1.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.
Files changed (41) hide show
  1. bday_cli-1.0.0/PKG-INFO +62 -0
  2. bday_cli-1.0.0/README.md +51 -0
  3. bday_cli-1.0.0/bday_cli/__init__.py +0 -0
  4. bday_cli-1.0.0/bday_cli/cli.py +196 -0
  5. bday_cli-1.0.0/bday_cli/config.py +4 -0
  6. bday_cli-1.0.0/bday_cli/core/__init__.py +0 -0
  7. bday_cli-1.0.0/bday_cli/core/engine.py +31 -0
  8. bday_cli-1.0.0/bday_cli/modes/__init__.py +0 -0
  9. bday_cli-1.0.0/bday_cli/modes/anime.py +11 -0
  10. bday_cli-1.0.0/bday_cli/modes/professional.py +11 -0
  11. bday_cli-1.0.0/bday_cli/modes/we9.py +11 -0
  12. bday_cli-1.0.0/bday_cli/modules/__init__.py +0 -0
  13. bday_cli-1.0.0/bday_cli/modules/cpu.py +4 -0
  14. bday_cli-1.0.0/bday_cli/modules/disk.py +4 -0
  15. bday_cli-1.0.0/bday_cli/modules/git_status.py +12 -0
  16. bday_cli-1.0.0/bday_cli/modules/memory.py +4 -0
  17. bday_cli-1.0.0/bday_cli/modules/uptime.py +6 -0
  18. bday_cli-1.0.0/bday_cli/personal_themes/__init__.py +0 -0
  19. bday_cli-1.0.0/bday_cli/personal_themes/abhay.py +32 -0
  20. bday_cli-1.0.0/bday_cli/personal_themes/anagha.py +32 -0
  21. bday_cli-1.0.0/bday_cli/personal_themes/archana.py +32 -0
  22. bday_cli-1.0.0/bday_cli/personal_themes/archit.py +32 -0
  23. bday_cli-1.0.0/bday_cli/personal_themes/arya.py +32 -0
  24. bday_cli-1.0.0/bday_cli/personal_themes/deeksha.py +32 -0
  25. bday_cli-1.0.0/bday_cli/personal_themes/krupa.py +32 -0
  26. bday_cli-1.0.0/bday_cli/personal_themes/lavanya.py +32 -0
  27. bday_cli-1.0.0/bday_cli/themes/__init__.py +0 -0
  28. bday_cli-1.0.0/bday_cli/themes/aot.py +37 -0
  29. bday_cli-1.0.0/bday_cli/themes/base.py +16 -0
  30. bday_cli-1.0.0/bday_cli/themes/demon.py +33 -0
  31. bday_cli-1.0.0/bday_cli/themes/vinland.py +34 -0
  32. bday_cli-1.0.0/bday_cli/utils/__init__.py +0 -0
  33. bday_cli-1.0.0/bday_cli/utils/display.py +165 -0
  34. bday_cli-1.0.0/bday_cli.egg-info/PKG-INFO +62 -0
  35. bday_cli-1.0.0/bday_cli.egg-info/SOURCES.txt +39 -0
  36. bday_cli-1.0.0/bday_cli.egg-info/dependency_links.txt +1 -0
  37. bday_cli-1.0.0/bday_cli.egg-info/entry_points.txt +2 -0
  38. bday_cli-1.0.0/bday_cli.egg-info/requires.txt +2 -0
  39. bday_cli-1.0.0/bday_cli.egg-info/top_level.txt +1 -0
  40. bday_cli-1.0.0/pyproject.toml +21 -0
  41. bday_cli-1.0.0/setup.cfg +4 -0
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.4
2
+ Name: bday-cli
3
+ Version: 1.0.0
4
+ Summary: An anime-themed CLI system monitor
5
+ Author-email: Your Name <you@email.com>
6
+ License: MIT
7
+ Requires-Python: >=3.8
8
+ Description-Content-Type: text/markdown
9
+ Requires-Dist: rich
10
+ Requires-Dist: psutil
11
+
12
+ # CLI_TOOL1
13
+ This is an anime themed CLI tool for Ashwith's Bday !!!!
14
+
15
+ So what we are making is a CLI tool which is anime based
16
+ It has functions like checking CPU/memory status etc
17
+
18
+ Current Anime Themes:
19
+ 1)Attack On Titan
20
+ 2)Demon Slayer
21
+ 3)Fire Force
22
+ 4)Vinland Saga
23
+
24
+ bday_cli/
25
+
26
+ ├── main.py
27
+ ├── config.py
28
+ ├── modes/
29
+ │ ├── professional.py
30
+ │ └── anime.py
31
+
32
+ ├── core/
33
+ │ └── engine.py
34
+ ├── themes/
35
+ │ ├── base.py
36
+ │ ├── aot.py
37
+ │ ├── demon.py
38
+ │ ├── vinland.py
39
+
40
+
41
+ ├── personal_themes/
42
+ │ ├── abhay.py
43
+ │ ├── anagha.py
44
+ │ ├── archana.py
45
+ │ ├── archit.py
46
+ │ ├── arya.py
47
+ │ ├── deeksha.py
48
+ │ ├── krupa.py
49
+ │ ├── lavanya.py
50
+
51
+ ├── modules/
52
+ │ ├── cpu.py
53
+ │ ├── memory.py
54
+ │ ├── disk.py
55
+ │ ├── git_status.py
56
+ │ └── uptime.py
57
+
58
+ └── utils/
59
+ └── display.py
60
+
61
+ While adding a new theme
62
+ add folder -> copy paste code of an existing theme -> alter the display texts -> change the class name -> import that in cli.py -> add the name in praser and in the theme function
@@ -0,0 +1,51 @@
1
+ # CLI_TOOL1
2
+ This is an anime themed CLI tool for Ashwith's Bday !!!!
3
+
4
+ So what we are making is a CLI tool which is anime based
5
+ It has functions like checking CPU/memory status etc
6
+
7
+ Current Anime Themes:
8
+ 1)Attack On Titan
9
+ 2)Demon Slayer
10
+ 3)Fire Force
11
+ 4)Vinland Saga
12
+
13
+ bday_cli/
14
+
15
+ ├── main.py
16
+ ├── config.py
17
+ ├── modes/
18
+ │ ├── professional.py
19
+ │ └── anime.py
20
+
21
+ ├── core/
22
+ │ └── engine.py
23
+ ├── themes/
24
+ │ ├── base.py
25
+ │ ├── aot.py
26
+ │ ├── demon.py
27
+ │ ├── vinland.py
28
+
29
+
30
+ ├── personal_themes/
31
+ │ ├── abhay.py
32
+ │ ├── anagha.py
33
+ │ ├── archana.py
34
+ │ ├── archit.py
35
+ │ ├── arya.py
36
+ │ ├── deeksha.py
37
+ │ ├── krupa.py
38
+ │ ├── lavanya.py
39
+
40
+ ├── modules/
41
+ │ ├── cpu.py
42
+ │ ├── memory.py
43
+ │ ├── disk.py
44
+ │ ├── git_status.py
45
+ │ └── uptime.py
46
+
47
+ └── utils/
48
+ └── display.py
49
+
50
+ While adding a new theme
51
+ add folder -> copy paste code of an existing theme -> alter the display texts -> change the class name -> import that in cli.py -> add the name in praser and in the theme function
File without changes
@@ -0,0 +1,196 @@
1
+ import argparse
2
+ import json
3
+ import os
4
+
5
+ from rich.console import Console
6
+ from bday_cli.core.engine import Engine
7
+ from bday_cli.themes.aot import AOTTheme
8
+ from bday_cli.themes.demon import DemonTheme
9
+ from bday_cli.themes.vinland import VinlandSaga
10
+ from bday_cli.personal_themes.abhay import Abhay
11
+ from bday_cli.personal_themes.archana import Archana
12
+ from bday_cli.personal_themes.anagha import Anagha
13
+ from bday_cli.personal_themes.arya import Arya
14
+ from bday_cli.personal_themes.deeksha import Deeksha
15
+ from bday_cli.personal_themes.krupa import Krupa
16
+ from bday_cli.personal_themes.lavanya import Lavanya
17
+ from bday_cli.personal_themes.archit import Archit
18
+ from bday_cli.modes import professional, anime, we9
19
+ import bday_cli.utils.display as display
20
+
21
+
22
+ CONFIG_PATH = os.path.expanduser("~/.bday_config.json")
23
+
24
+
25
+ # ---------------------------
26
+ # Config Handling
27
+ # ---------------------------
28
+
29
+ def load_config():
30
+ if os.path.exists(CONFIG_PATH):
31
+ try:
32
+ with open(CONFIG_PATH, "r") as f:
33
+ return json.load(f)
34
+ except Exception:
35
+ pass
36
+ return None # Signal that setup is needed
37
+
38
+
39
+ def save_config(mode, theme):
40
+ with open(CONFIG_PATH, "w") as f:
41
+ json.dump({"mode": mode, "theme": theme}, f)
42
+
43
+
44
+ def run_setup():
45
+ from rich.prompt import Prompt
46
+ from rich.panel import Panel
47
+
48
+ console = Console()
49
+ console.print(Panel("Welcome to bday CLI\nLet's get you set up.", title="⚔ SETUP"))
50
+
51
+ mode = Prompt.ask(
52
+ "Choose your mode",
53
+ choices=["anime", "professional","we9"],
54
+ default="anime"
55
+ )
56
+
57
+ if(mode=="anime"):
58
+ theme = Prompt.ask(
59
+ "\nChoose your theme",
60
+ choices=["aot", "demon", "vinland", "archit"],
61
+ default="aot"
62
+ )
63
+ elif (mode == "we9"):
64
+ theme = Prompt.ask(
65
+ "\nChoose your theme",
66
+ choices=["abhay", "anagha","archana","archit","arya","deeksha","krupa","lavanya"],
67
+ default="archit"
68
+ )
69
+
70
+ save_config(mode, theme)
71
+ display.show_banner(theme, mode)
72
+ console.print("\n[green]Setup complete! Run `bday --pcinfo` to get started.[/green]")
73
+
74
+
75
+ # ---------------------------
76
+ # Theme Factory
77
+ # ---------------------------
78
+
79
+ def get_theme(theme_name):
80
+ themes = {
81
+ "aot": AOTTheme,
82
+ "demon": DemonTheme,
83
+ "vinland":VinlandSaga,
84
+ "abhay":Abhay,
85
+ "anagha":Anagha,
86
+ "archana":Archana,
87
+ "archit":Archit,
88
+ "arya":Arya,
89
+ "deeksha":Deeksha,
90
+ "krupa":Krupa,
91
+ "lavanya":Lavanya,
92
+ }
93
+
94
+ theme_class = themes.get(theme_name)
95
+ if theme_class:
96
+ return theme_class()
97
+
98
+ # Fallback safety
99
+ return AOTTheme()
100
+
101
+
102
+ # ---------------------------
103
+ # Main CLI Logic
104
+ # ---------------------------
105
+
106
+ def main():
107
+ config_data = load_config()
108
+
109
+ if config_data is None:
110
+ run_setup()
111
+ config_data = load_config() # Reload after setup
112
+ return
113
+
114
+ parser = argparse.ArgumentParser()
115
+ parser.add_argument("--setup", action="store_true")
116
+ parser.add_argument("--mode", choices=["professional", "anime","we9"])
117
+
118
+ # Build choices based on current mode
119
+ if config_data and config_data["mode"] == "anime":
120
+ theme_choices = ["aot", "demon", "vinland", "archit"]
121
+ elif config_data and config_data["mode"] == "we9":
122
+ theme_choices = ["abhay", "anagha", "archana", "archit", "arya", "ashwith", "deeksha", "krupa", "lavanya"]
123
+ else:
124
+ theme_choices = ["aot", "demon", "vinland", "archit",
125
+ "abhay", "anagha", "archana", "arya",
126
+ "ashwith", "deeksha", "krupa", "lavanya"]
127
+ parser.add_argument("--theme", choices=theme_choices)
128
+ parser.add_argument("--watch", action="store_true")
129
+ parser.add_argument("--pcinfo", action="store_true")
130
+ parser.add_argument("--quote", action="store_true")
131
+
132
+ # Hidden birthday flag
133
+ parser.add_argument("--birthday", action="store_true", help=argparse.SUPPRESS)
134
+
135
+ args = parser.parse_args()
136
+
137
+ # ---------------------------
138
+ # 1️⃣ Birthday Override
139
+ # ---------------------------
140
+ if args.birthday:
141
+ display.show_birthday()
142
+ return
143
+
144
+ # ---------------------------
145
+ # 2️⃣ Config Change (Theme / Mode)
146
+ # ---------------------------
147
+ if args.setup:
148
+ run_setup()
149
+ return
150
+
151
+ if args.mode or args.theme:
152
+ new_mode = args.mode if args.mode else config_data["mode"]
153
+ new_theme = args.theme if args.theme else config_data["theme"]
154
+
155
+ save_config(new_mode, new_theme)
156
+
157
+ display.show_banner(new_theme,new_mode)
158
+ return
159
+
160
+ # ---------------------------
161
+ # 3️⃣ Quote Command
162
+ # ---------------------------
163
+ if args.quote:
164
+ theme = get_theme(config_data["theme"])
165
+ display.show_quote(theme.random_quote())
166
+ return
167
+
168
+ # ---------------------------
169
+ # 4️⃣ PC Info Command
170
+ # ---------------------------
171
+ if args.pcinfo:
172
+ engine = Engine()
173
+
174
+ theme = get_theme(config_data["theme"])
175
+ mode_name = config_data["mode"]
176
+
177
+ if mode_name == "professional":
178
+ professional.run(engine, theme, display, watch=args.watch)
179
+ else:
180
+ anime.run(engine, theme, display, watch=args.watch)
181
+
182
+ return
183
+
184
+ # ---------------------------
185
+ # 5️⃣ Default Behavior
186
+ # ---------------------------
187
+ # If no arguments provided → show help
188
+ parser.print_help()
189
+
190
+
191
+ # ---------------------------
192
+ # Entry Point
193
+ # ---------------------------
194
+
195
+ if __name__ == "__main__":
196
+ main()
@@ -0,0 +1,4 @@
1
+ # config.py
2
+
3
+ DEFAULT_THEME = "aot"
4
+ DEFAULT_MODE = "professional"
File without changes
@@ -0,0 +1,31 @@
1
+ import bday_cli.modules.cpu as cpu
2
+ import bday_cli.modules.memory as memory
3
+ import bday_cli.modules.disk as disk
4
+ import bday_cli.modules.git_status as git_status
5
+ import bday_cli.modules.uptime as uptime
6
+
7
+ class Engine:
8
+
9
+ def collect(self):
10
+ return {
11
+ "cpu": cpu.get_cpu(),
12
+ "memory": memory.get_memory(),
13
+ "disk": disk.get_disk(),
14
+ "git": git_status.get_git_status(),
15
+ "uptime": uptime.get_uptime()
16
+ }
17
+
18
+ def process(self, theme, intensity):
19
+ data = self.collect()
20
+
21
+ messages = {
22
+ "cpu_msg": theme.cpu_message(data["cpu"], intensity),
23
+ "mem_msg": theme.memory_message(data["memory"], intensity),
24
+ }
25
+
26
+ if data["git"]:
27
+ messages["git_msg"] = theme.git_message(
28
+ data["git"]["dirty"], intensity
29
+ )
30
+
31
+ return data, messages
File without changes
@@ -0,0 +1,11 @@
1
+ def run(engine, theme, display, watch=False):
2
+ import time
3
+
4
+ while True:
5
+ display.console.clear()
6
+ data, messages = engine.process(theme, intensity="high")
7
+ display.render_anime(data, messages)
8
+
9
+ if not watch:
10
+ break
11
+ time.sleep(1)
@@ -0,0 +1,11 @@
1
+ def run(engine, theme, display, watch=False):
2
+ import time
3
+
4
+ while True:
5
+ display.console.clear()
6
+ data, messages = engine.process(theme, intensity="low")
7
+ display.render_professional(data, messages)
8
+
9
+ if not watch:
10
+ break
11
+ time.sleep(1)
@@ -0,0 +1,11 @@
1
+ def run(engine, theme, display, watch=False):
2
+ import time
3
+
4
+ while True:
5
+ display.console.clear()
6
+ data, messages = engine.process(theme, intensity="high")
7
+ display.render_anime(data, messages)
8
+
9
+ if not watch:
10
+ break
11
+ time.sleep(1)
File without changes
@@ -0,0 +1,4 @@
1
+ import psutil
2
+
3
+ def get_cpu():
4
+ return psutil.cpu_percent(interval=0.3)
@@ -0,0 +1,4 @@
1
+ import psutil
2
+
3
+ def get_disk():
4
+ return psutil.disk_usage("/").percent
@@ -0,0 +1,12 @@
1
+ import os
2
+ from git import Repo, InvalidGitRepositoryError
3
+
4
+ def get_git_status():
5
+ try:
6
+ repo = Repo(os.getcwd())
7
+ return {
8
+ "branch": repo.active_branch.name,
9
+ "dirty": repo.is_dirty()
10
+ }
11
+ except InvalidGitRepositoryError:
12
+ return None
@@ -0,0 +1,4 @@
1
+ import psutil
2
+
3
+ def get_memory():
4
+ return psutil.virtual_memory().percent
@@ -0,0 +1,6 @@
1
+ import psutil
2
+ import time
3
+
4
+ def get_uptime():
5
+ boot = psutil.boot_time()
6
+ return int(time.time() - boot)
File without changes
@@ -0,0 +1,32 @@
1
+ from ..themes.base import BaseTheme
2
+
3
+ class Abhay(BaseTheme):
4
+
5
+ quotes = [
6
+ "Muh diya toh kuch bhi bolega",
7
+ "AAAP yaha aajaye",
8
+ "PC hai toh kuch bhi karega",
9
+ "Accha londe"
10
+
11
+ ]
12
+ def cpu_message(self, cpu, intensity):
13
+ if intensity == "low":
14
+ return "System stable." if cpu < 70 else "High CPU usage."
15
+
16
+ if cpu > 90:
17
+ return "PC band mado ley!!"
18
+ elif cpu > 70:
19
+ return ""
20
+ return " CPU Resting at the Butterfly Mansion"
21
+
22
+ def memory_message(self, memory, intensity):
23
+ if intensity == "low":
24
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
25
+
26
+ return " Final Selection. Your RAM is packed with demons" if memory > 80 else "Memory might be infinite castle"
27
+
28
+ def git_message(self, dirty, intensity):
29
+ if intensity == "low":
30
+ return "Repo clean." if not dirty else "Uncommitted changes."
31
+
32
+ return " Repo turning to Infinite castle not clean" if dirty else "Water Breathing 6th form Calm sea repo clean"
@@ -0,0 +1,32 @@
1
+ from ..themes.base import BaseTheme
2
+
3
+ class Anagha(BaseTheme):
4
+
5
+ quotes = [
6
+ "Muh diya toh kuch bhi bolega",
7
+ "AAAP yaha aajaye",
8
+ "PC hai toh kuch bhi karega",
9
+ "Accha londe"
10
+
11
+ ]
12
+ def cpu_message(self, cpu, intensity):
13
+ if intensity == "low":
14
+ return "System stable." if cpu < 70 else "High CPU usage."
15
+
16
+ if cpu > 90:
17
+ return "PC band mado ley!!"
18
+ elif cpu > 70:
19
+ return ""
20
+ return " CPU Resting at the Butterfly Mansion"
21
+
22
+ def memory_message(self, memory, intensity):
23
+ if intensity == "low":
24
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
25
+
26
+ return " Final Selection. Your RAM is packed with demons" if memory > 80 else "Memory might be infinite castle"
27
+
28
+ def git_message(self, dirty, intensity):
29
+ if intensity == "low":
30
+ return "Repo clean." if not dirty else "Uncommitted changes."
31
+
32
+ return " Repo turning to Infinite castle not clean" if dirty else "Water Breathing 6th form Calm sea repo clean"
@@ -0,0 +1,32 @@
1
+ from ..themes.base import BaseTheme
2
+
3
+ class Archana(BaseTheme):
4
+
5
+ quotes = [
6
+ "Muh diya toh kuch bhi bolega",
7
+ "AAAP yaha aajaye",
8
+ "PC hai toh kuch bhi karega",
9
+ "Accha londe"
10
+
11
+ ]
12
+ def cpu_message(self, cpu, intensity):
13
+ if intensity == "low":
14
+ return "System stable." if cpu < 70 else "High CPU usage."
15
+
16
+ if cpu > 90:
17
+ return "PC band mado ley!!"
18
+ elif cpu > 70:
19
+ return ""
20
+ return " CPU Resting at the Butterfly Mansion"
21
+
22
+ def memory_message(self, memory, intensity):
23
+ if intensity == "low":
24
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
25
+
26
+ return " Final Selection. Your RAM is packed with demons" if memory > 80 else "Memory might be infinite castle"
27
+
28
+ def git_message(self, dirty, intensity):
29
+ if intensity == "low":
30
+ return "Repo clean." if not dirty else "Uncommitted changes."
31
+
32
+ return " Repo turning to Infinite castle not clean" if dirty else "Water Breathing 6th form Calm sea repo clean"
@@ -0,0 +1,32 @@
1
+ from ..themes.base import BaseTheme
2
+
3
+ class Archit(BaseTheme):
4
+
5
+ quotes = [
6
+ "Muh diya toh kuch bhi bolega",
7
+ "AAAP yaha aajaye",
8
+ "PC hai toh kuch bhi karega",
9
+ "Accha londe"
10
+
11
+ ]
12
+ def cpu_message(self, cpu, intensity):
13
+ if intensity == "low":
14
+ return "System stable." if cpu < 70 else "High CPU usage."
15
+
16
+ if cpu > 90:
17
+ return "PC band mado ley!!"
18
+ elif cpu > 70:
19
+ return ""
20
+ return " CPU Resting at the Butterfly Mansion nigga"
21
+
22
+ def memory_message(self, memory, intensity):
23
+ if intensity == "low":
24
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
25
+
26
+ return " Final Selection. Your RAM is packed with demons" if memory > 80 else "Memory might be infinite castle"
27
+
28
+ def git_message(self, dirty, intensity):
29
+ if intensity == "low":
30
+ return "Repo clean." if not dirty else "Uncommitted changes."
31
+
32
+ return " Repo turning to Infinite castle not clean" if dirty else "Water Breathing 6th form Calm sea repo clean"
@@ -0,0 +1,32 @@
1
+ from ..themes.base import BaseTheme
2
+
3
+ class Arya(BaseTheme):
4
+
5
+ quotes = [
6
+ "Muh diya toh kuch bhi bolega",
7
+ "AAAP yaha aajaye",
8
+ "PC hai toh kuch bhi karega",
9
+ "Accha londe"
10
+
11
+ ]
12
+ def cpu_message(self, cpu, intensity):
13
+ if intensity == "low":
14
+ return "System stable." if cpu < 70 else "High CPU usage."
15
+
16
+ if cpu > 90:
17
+ return "PC band mado ley!!"
18
+ elif cpu > 70:
19
+ return ""
20
+ return " CPU Resting at the Butterfly Mansion"
21
+
22
+ def memory_message(self, memory, intensity):
23
+ if intensity == "low":
24
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
25
+
26
+ return " Final Selection. Your RAM is packed with demons" if memory > 80 else "Memory might be infinite castle"
27
+
28
+ def git_message(self, dirty, intensity):
29
+ if intensity == "low":
30
+ return "Repo clean." if not dirty else "Uncommitted changes."
31
+
32
+ return " Repo turning to Infinite castle not clean" if dirty else "Water Breathing 6th form Calm sea repo clean"
@@ -0,0 +1,32 @@
1
+ from ..themes.base import BaseTheme
2
+
3
+ class Deeksha(BaseTheme):
4
+
5
+ quotes = [
6
+ "Muh diya toh kuch bhi bolega",
7
+ "AAAP yaha aajaye",
8
+ "PC hai toh kuch bhi karega",
9
+ "Accha londe"
10
+
11
+ ]
12
+ def cpu_message(self, cpu, intensity):
13
+ if intensity == "low":
14
+ return "System stable." if cpu < 70 else "High CPU usage."
15
+
16
+ if cpu > 90:
17
+ return "PC band mado ley!!"
18
+ elif cpu > 70:
19
+ return ""
20
+ return " CPU Resting at the Butterfly Mansion"
21
+
22
+ def memory_message(self, memory, intensity):
23
+ if intensity == "low":
24
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
25
+
26
+ return " Final Selection. Your RAM is packed with demons" if memory > 80 else "Memory might be infinite castle"
27
+
28
+ def git_message(self, dirty, intensity):
29
+ if intensity == "low":
30
+ return "Repo clean." if not dirty else "Uncommitted changes."
31
+
32
+ return " Repo turning to Infinite castle not clean" if dirty else "Water Breathing 6th form Calm sea repo clean"
@@ -0,0 +1,32 @@
1
+ from ..themes.base import BaseTheme
2
+
3
+ class Krupa(BaseTheme):
4
+
5
+ quotes = [
6
+ "Muh diya toh kuch bhi bolega",
7
+ "AAAP yaha aajaye",
8
+ "PC hai toh kuch bhi karega",
9
+ "Accha londe"
10
+
11
+ ]
12
+ def cpu_message(self, cpu, intensity):
13
+ if intensity == "low":
14
+ return "System stable." if cpu < 70 else "High CPU usage."
15
+
16
+ if cpu > 90:
17
+ return "PC band mado ley!!"
18
+ elif cpu > 70:
19
+ return ""
20
+ return " CPU Resting at the Butterfly Mansion"
21
+
22
+ def memory_message(self, memory, intensity):
23
+ if intensity == "low":
24
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
25
+
26
+ return " Final Selection. Your RAM is packed with demons" if memory > 80 else "Memory might be infinite castle"
27
+
28
+ def git_message(self, dirty, intensity):
29
+ if intensity == "low":
30
+ return "Repo clean." if not dirty else "Uncommitted changes."
31
+
32
+ return " Repo turning to Infinite castle not clean" if dirty else "Water Breathing 6th form Calm sea repo clean"
@@ -0,0 +1,32 @@
1
+ from ..themes.base import BaseTheme
2
+
3
+ class Lavanya(BaseTheme):
4
+
5
+ quotes = [
6
+ "Muh diya toh kuch bhi bolega",
7
+ "AAAP yaha aajaye",
8
+ "PC hai toh kuch bhi karega",
9
+ "Accha londe"
10
+
11
+ ]
12
+ def cpu_message(self, cpu, intensity):
13
+ if intensity == "low":
14
+ return "System stable." if cpu < 70 else "High CPU usage."
15
+
16
+ if cpu > 90:
17
+ return "PC band mado ley!!"
18
+ elif cpu > 70:
19
+ return ""
20
+ return " CPU Resting at the Butterfly Mansion"
21
+
22
+ def memory_message(self, memory, intensity):
23
+ if intensity == "low":
24
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
25
+
26
+ return " Final Selection. Your RAM is packed with demons" if memory > 80 else "Memory might be infinite castle"
27
+
28
+ def git_message(self, dirty, intensity):
29
+ if intensity == "low":
30
+ return "Repo clean." if not dirty else "Uncommitted changes."
31
+
32
+ return " Repo turning to Infinite castle not clean" if dirty else "Water Breathing 6th form Calm sea repo clean"
File without changes
@@ -0,0 +1,37 @@
1
+ from .base import BaseTheme
2
+
3
+ class AOTTheme(BaseTheme):
4
+
5
+ quotes = [
6
+ "If you don’t fight, you can’t win.",
7
+ "The world is cruel, but also beautiful.",
8
+ "What a Beautiful Day It Is",
9
+ "Those Who Can’t Abandon Anything Can’t Change Anything",
10
+ "On the Other Side of the Ocean",
11
+ "There is no truth in this world. Anyone can become a God or a Devil",
12
+ "He is already great. Because he was born into this world",
13
+ "On the other side of the sea..is freedom",
14
+ "What are you doing? Stand up, dad. Did you forget what you came here to do?"
15
+ ]
16
+
17
+ def cpu_message(self, cpu, intensity):
18
+ if intensity == "low":
19
+ return "System stable." if cpu < 70 else "High CPU usage."
20
+
21
+ if cpu > 90:
22
+ return " Titans have broken wall Maria!!!"
23
+ elif cpu > 70:
24
+ return "The CPU rumbling has begun!!!!"
25
+ return " The CPU walls stand strong."
26
+
27
+ def memory_message(self, memory, intensity):
28
+ if intensity == "low":
29
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
30
+
31
+ return "King Firtz might erase memory !!" if memory > 80 else "Eren regained Memory"
32
+
33
+ def git_message(self, dirty, intensity):
34
+ if intensity == "low":
35
+ return "Repo clean." if not dirty else "Uncommitted changes."
36
+
37
+ return " Levi says not clean enough!!" if dirty else " Levi approves your cleanliness."
@@ -0,0 +1,16 @@
1
+ import random
2
+
3
+ class BaseTheme:
4
+ def cpu_message(self, cpu: float, intensity: str) -> str:
5
+ raise NotImplementedError
6
+
7
+ def memory_message(self, memory: float, intensity: str) -> str:
8
+ raise NotImplementedError
9
+
10
+ def git_message(self, dirty: bool, intensity: str) -> str:
11
+ raise NotImplementedError
12
+
13
+ def random_quote(self):
14
+ if hasattr(self, "quotes"):
15
+ return random.choice(self.quotes)
16
+ return "No quote available."
@@ -0,0 +1,33 @@
1
+ from .base import BaseTheme
2
+
3
+ class DemonTheme(BaseTheme):
4
+
5
+ quotes = [
6
+ "Set your heart ablaze ",
7
+ "Having such a simple mind that you call this simple, I envy you",
8
+ "Life is a series of decisions. You never have unlimited options or unlimited time to think, but what you choose in that instant defines who you are",
9
+ "Train until it kills you. Because really, when you get down to it, there's nothing else you can do",
10
+ "All that lives must die. Only feelings are eternal and undying",
11
+ "Even the strongest attcks are pointless if they dont hit"
12
+ ]
13
+ def cpu_message(self, cpu, intensity):
14
+ if intensity == "low":
15
+ return "System stable." if cpu < 70 else "High CPU usage."
16
+
17
+ if cpu > 90:
18
+ return "Hinokami Kagura! You're pushing past your CPU limits"
19
+ elif cpu > 70:
20
+ return " Total Concentration: CPU You are in a flow state"
21
+ return " CPU Resting at the Butterfly Mansion"
22
+
23
+ def memory_message(self, memory, intensity):
24
+ if intensity == "low":
25
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
26
+
27
+ return " Final Selection. Your RAM is packed with demons" if memory > 80 else "Memory might be infinite castle"
28
+
29
+ def git_message(self, dirty, intensity):
30
+ if intensity == "low":
31
+ return "Repo clean." if not dirty else "Uncommitted changes."
32
+
33
+ return " Repo turning to Infinite castle not clean" if dirty else "Water Breathing 6th form Calm sea repo clean"
@@ -0,0 +1,34 @@
1
+ from .base import BaseTheme
2
+
3
+ class VinlandSaga(BaseTheme):
4
+
5
+ quotes = [
6
+ "I have no enemies ",
7
+ "I want to be a kinder, gentler person. I want to be... a stronger person",
8
+ "Where is your sword...Dont need it",
9
+ "A true warrior dosent need a sword",
10
+ "There is no meaning to dying for someone else... But there's meaning in dying together with someone",
11
+ "You're young. Time is on your side. You'll grow up and I'll grow old. Someday you'll likely beat me. It's only natural. Even the strongest man must die",
12
+ "To be free is to own your choices, however hard the road may be"
13
+ ]
14
+ def cpu_message(self, cpu, intensity):
15
+ if intensity == "low":
16
+ return "System stable." if cpu < 70 else "High CPU usage."
17
+
18
+ if cpu > 90:
19
+ return "Thats THORKELL on the bridge destroying the CPU"
20
+ elif cpu > 70:
21
+ return "Dual dagger weilding CPU"
22
+ return "Far across the sea....lies a place....Vinland"
23
+
24
+ def memory_message(self, memory, intensity):
25
+ if intensity == "low":
26
+ return "Memory usage normal." if memory < 80 else "Memory usage high."
27
+
28
+ return "The memories of your murder is pulling you down" if memory > 80 else "Quick on your toes huh...see still got will to live?"
29
+
30
+ def git_message(self, dirty, intensity):
31
+ if intensity == "low":
32
+ return "Repo clean." if not dirty else "Uncommitted changes."
33
+
34
+ return "You need to move forward with the things you have done" if dirty else "Now that you are truly empty you can we can fill that up with something"
File without changes
@@ -0,0 +1,165 @@
1
+ from rich.console import Console
2
+ from rich.table import Table
3
+ from rich.panel import Panel
4
+ import random
5
+ import time
6
+
7
+ console = Console()
8
+
9
+ def render_professional(data, messages):
10
+ table = Table(title="System Overview")
11
+
12
+ table.add_column("Metric")
13
+ table.add_column("Value")
14
+
15
+ table.add_row("CPU", f"{data['cpu']}%")
16
+ table.add_row("Memory", f"{data['memory']}%")
17
+ table.add_row("Disk", f"{data['disk']}%")
18
+ table.add_row("Uptime (s)", str(data["uptime"]))
19
+
20
+ console.print(table)
21
+
22
+ if "git_msg" in messages:
23
+ console.print(messages["git_msg"])
24
+
25
+
26
+ def render_anime(data, messages):
27
+ text = f"""
28
+ CPU: {data['cpu']}%
29
+ Memory: {data['memory']}%
30
+ Disk: {data['disk']}%
31
+ Uptime: {data['uptime']} sec
32
+
33
+ {messages['cpu_msg']}
34
+ {messages['mem_msg']}
35
+ """
36
+
37
+ if "git_msg" in messages:
38
+ text += f"\n{messages['git_msg']}"
39
+
40
+ console.print(Panel(text, title="⚔ Titan Mode"))
41
+
42
+
43
+
44
+ def show_banner(theme, mode):
45
+ import os
46
+ import time
47
+ os.system("cls" if os.name == "nt" else "clear")
48
+ time.sleep(0.1)
49
+
50
+ if mode == "anime":
51
+ if theme == "aot":
52
+ art = r"""
53
+ ████████╗██╗████████╗ █████╗ ███╗ ██╗
54
+ ╚══██╔══╝██║╚══██╔══╝██╔══██╗████╗ ██║
55
+ ██║ ██║ ██║ ███████║██╔██╗ ██║
56
+ ██║ ██║ ██║ ██╔══██║██║╚██╗██║
57
+ ██║ ██║ ██║ ██║ ██║██║ ╚████║
58
+ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝
59
+
60
+ TITAN MODE ACTIVATED"""
61
+
62
+ elif theme == "demon":
63
+ art = r"""██████╗ ███████╗███╗ ███╗ ██████╗ ███╗ ██╗ ███████╗██╗ █████╗ ██╗ ██╗███████╗██████╗
64
+ ██╔══██╗██╔════╝████╗ ████║██╔═══██╗████╗ ██║ ██╔════╝██║ ██╔══██╗╚██╗ ██╔╝██╔════╝██╔══██╗
65
+ ██║ ██║█████╗ ██╔████╔██║██║ ██║██╔██╗ ██║ ███████╗██║ ███████║ ╚████╔╝ █████╗ ██████╔╝
66
+ ██║ ██║██╔══╝ ██║╚██╔╝██║██║ ██║██║╚██╗██║ ╚════██║██║ ██╔══██║ ╚██╔╝ ██╔══╝ ██╔══██╗
67
+ ██████╔╝███████╗██║ ╚═╝ ██║╚██████╔╝██║ ╚████║ ███████║███████╗██║ ██║ ██║ ███████╗██║ ██║
68
+ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝
69
+
70
+ DEMON SLAYER MODE ENGAGED"""
71
+
72
+ elif theme == "vinland":
73
+ art = r"""██╗ ██╗██╗███╗ ██╗██╗ █████╗ ███╗ ██╗██████╗ ███████╗ █████╗ ██████╗ █████╗
74
+ ██║ ██║██║████╗ ██║██║ ██╔══██╗████╗ ██║██╔══██╗ ██╔════╝██╔══██╗██╔════╝ ██╔══██╗
75
+ ██║ ██║██║██╔██╗ ██║██║ ███████║██╔██╗ ██║██║ ██║ ███████╗███████║██║ ███╗███████║
76
+ ╚██╗ ██╔╝██║██║╚██╗██║██║ ██╔══██║██║╚██╗██║██║ ██║ ╚════██║██╔══██║██║ ██║██╔══██║
77
+ ╚████╔╝ ██║██║ ╚████║███████╗██║ ██║██║ ╚████║██████╔╝ ███████║██║ ██║╚██████╔╝██║ ██║
78
+ ╚═══╝ ╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝
79
+
80
+ VINLAND SAGA MODE ENGAGED"""
81
+
82
+ else:
83
+ art = "ANIME MODE ENGAGED"
84
+
85
+ console.print(Panel(art, title="⚔ THEME UPDATED")) # ← single print for all anime themes
86
+
87
+ elif mode == "we9":
88
+ if theme == "archit":
89
+ art = r""" ___ .______ ______ __ __ __ .___________.
90
+ / \ | _ \ / || | | | | | | |
91
+ / ^ \ | |_) | | ,----'| |__| | | | `---| |----`
92
+ / /_\ \ | / | | | __ | | | | |
93
+ / _____ \ | |\ \----.| `----.| | | | | | | |
94
+ /__/ \__\ | _| `._____| \______||__| |__| |__| |__|
95
+
96
+ ARCHIT MODE ENGAGED"""
97
+
98
+ elif theme == "arya":
99
+ art = r"""ARYA MODE ENGAGED""" # ← replace with real art
100
+
101
+ elif theme == "archana":
102
+ art = r"""ARCHANA MODE ENGAGED"""
103
+
104
+ elif theme == "abhay":
105
+ art = r"""ABHAY MODE ENGAGED"""
106
+
107
+ elif theme == "anagha":
108
+ art = r"""ANAGHA MODE ENGAGED"""
109
+
110
+ elif theme == "deeksha":
111
+ art = r"""DEEKSHA MODE ENGAGED"""
112
+
113
+ elif theme == "krupa":
114
+ art = r"""KRUPA MODE ENGAGED"""
115
+
116
+ elif theme == "lavanya":
117
+ art = r"""LAVANYA MODE ENGAGED"""
118
+
119
+ else:
120
+ art = "WE9 MODE ENGAGED"
121
+
122
+ console.print(Panel(art, title="👥 WE9 THEME UPDATED")) # ← single print for all we9 themes
123
+
124
+ else:
125
+ console.print(Panel("THEME UPDATED", title="THEME UPDATED"))
126
+
127
+
128
+
129
+ def show_birthday():
130
+ confetti = ["✨", "🎉", "🎊", "🔥", "⚔"]
131
+
132
+ for _ in range(3):
133
+ line = " ".join(random.choice(confetti) for _ in range(20))
134
+ console.print(line)
135
+ time.sleep(0.2)
136
+
137
+ art = r"""
138
+ ██╗ ██╗ █████╗ ██████╗ ███████╗
139
+ ██║ ██║██╔══██╗██╔══██╗██╔════╝
140
+ ██║ ██║███████║██║ ██║█████╗
141
+ ╚██╗ ██╔╝██╔══██║██║ ██║██╔══╝
142
+ ╚████╔╝ ██║ ██║██████╔╝███████╗
143
+ ╚═══╝ ╚═╝ ╚═╝╚═════╝ ╚══════╝
144
+
145
+ ██╗ ██╗ █████╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ ██╗██████╗ ████████╗██╗ ██╗██████╗ █████╗ ██╗ ██╗
146
+ ██║ ██║██╔══██╗██╔══██╗██╔══██╗╚██╗ ██╔╝ ██╔══██╗██║██╔══██╗╚══██╔══╝██║ ██║██╔══██╗██╔══██╗╚██╗ ██╔╝
147
+ ███████║███████║██████╔╝██████╔╝ ╚████╔╝ ██████╔╝██║██████╔╝ ██║ ███████║██║ ██║███████║ ╚████╔╝
148
+ ██╔══██║██╔══██║██╔═══╝ ██╔═══╝ ╚██╔╝ ██╔══██╗██║██╔══██╗ ██║ ██╔══██║██║ ██║██╔══██║ ╚██╔╝
149
+ ██║ ██║██║ ██║██║ ██║ ██║ ██████╔╝██║██║ ██║ ██║ ██║ ██║██████╔╝██║ ██║ ██║
150
+ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═╝
151
+
152
+ """
153
+
154
+ console.print(Panel(art, title="🎂 SYSTEM OVERRIDE 🎂"))
155
+ console.print("\nThe system bends to your will today.\n")
156
+
157
+
158
+ def show_quote(quote):
159
+ console.print(
160
+ Panel(
161
+ quote,
162
+ title="⚔ Anime Quote",
163
+ border_style="bright_magenta"
164
+ )
165
+ )
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.4
2
+ Name: bday-cli
3
+ Version: 1.0.0
4
+ Summary: An anime-themed CLI system monitor
5
+ Author-email: Your Name <you@email.com>
6
+ License: MIT
7
+ Requires-Python: >=3.8
8
+ Description-Content-Type: text/markdown
9
+ Requires-Dist: rich
10
+ Requires-Dist: psutil
11
+
12
+ # CLI_TOOL1
13
+ This is an anime themed CLI tool for Ashwith's Bday !!!!
14
+
15
+ So what we are making is a CLI tool which is anime based
16
+ It has functions like checking CPU/memory status etc
17
+
18
+ Current Anime Themes:
19
+ 1)Attack On Titan
20
+ 2)Demon Slayer
21
+ 3)Fire Force
22
+ 4)Vinland Saga
23
+
24
+ bday_cli/
25
+
26
+ ├── main.py
27
+ ├── config.py
28
+ ├── modes/
29
+ │ ├── professional.py
30
+ │ └── anime.py
31
+
32
+ ├── core/
33
+ │ └── engine.py
34
+ ├── themes/
35
+ │ ├── base.py
36
+ │ ├── aot.py
37
+ │ ├── demon.py
38
+ │ ├── vinland.py
39
+
40
+
41
+ ├── personal_themes/
42
+ │ ├── abhay.py
43
+ │ ├── anagha.py
44
+ │ ├── archana.py
45
+ │ ├── archit.py
46
+ │ ├── arya.py
47
+ │ ├── deeksha.py
48
+ │ ├── krupa.py
49
+ │ ├── lavanya.py
50
+
51
+ ├── modules/
52
+ │ ├── cpu.py
53
+ │ ├── memory.py
54
+ │ ├── disk.py
55
+ │ ├── git_status.py
56
+ │ └── uptime.py
57
+
58
+ └── utils/
59
+ └── display.py
60
+
61
+ While adding a new theme
62
+ add folder -> copy paste code of an existing theme -> alter the display texts -> change the class name -> import that in cli.py -> add the name in praser and in the theme function
@@ -0,0 +1,39 @@
1
+ README.md
2
+ pyproject.toml
3
+ bday_cli/__init__.py
4
+ bday_cli/cli.py
5
+ bday_cli/config.py
6
+ bday_cli.egg-info/PKG-INFO
7
+ bday_cli.egg-info/SOURCES.txt
8
+ bday_cli.egg-info/dependency_links.txt
9
+ bday_cli.egg-info/entry_points.txt
10
+ bday_cli.egg-info/requires.txt
11
+ bday_cli.egg-info/top_level.txt
12
+ bday_cli/core/__init__.py
13
+ bday_cli/core/engine.py
14
+ bday_cli/modes/__init__.py
15
+ bday_cli/modes/anime.py
16
+ bday_cli/modes/professional.py
17
+ bday_cli/modes/we9.py
18
+ bday_cli/modules/__init__.py
19
+ bday_cli/modules/cpu.py
20
+ bday_cli/modules/disk.py
21
+ bday_cli/modules/git_status.py
22
+ bday_cli/modules/memory.py
23
+ bday_cli/modules/uptime.py
24
+ bday_cli/personal_themes/__init__.py
25
+ bday_cli/personal_themes/abhay.py
26
+ bday_cli/personal_themes/anagha.py
27
+ bday_cli/personal_themes/archana.py
28
+ bday_cli/personal_themes/archit.py
29
+ bday_cli/personal_themes/arya.py
30
+ bday_cli/personal_themes/deeksha.py
31
+ bday_cli/personal_themes/krupa.py
32
+ bday_cli/personal_themes/lavanya.py
33
+ bday_cli/themes/__init__.py
34
+ bday_cli/themes/aot.py
35
+ bday_cli/themes/base.py
36
+ bday_cli/themes/demon.py
37
+ bday_cli/themes/vinland.py
38
+ bday_cli/utils/__init__.py
39
+ bday_cli/utils/display.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ bday = bday_cli.cli:main
@@ -0,0 +1,2 @@
1
+ rich
2
+ psutil
@@ -0,0 +1 @@
1
+ bday_cli
@@ -0,0 +1,21 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "bday-cli"
7
+ version = "1.0.0"
8
+ description = "An anime-themed CLI system monitor"
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ license = {text = "MIT"}
12
+ authors = [
13
+ {name = "Your Name", email = "you@email.com"}
14
+ ]
15
+ dependencies = [
16
+ "rich",
17
+ "psutil"
18
+ ]
19
+
20
+ [project.scripts]
21
+ bday = "bday_cli.cli:main"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+