diff --git a/__main__.py b/__main__.py index 19923bc..2584743 100644 --- a/__main__.py +++ b/__main__.py @@ -1,5 +1,7 @@ import time -import sys, os, platform, socket, psutil, getpass, cpuinfo +from datetime import datetime +import sys, os, platform, socket, psutil, getpass, cpuinfo, lsb_release +import psutil._psutil_linux, subprocess def getNameComponent(index): comp = {} @@ -12,40 +14,89 @@ def getNameComponent(index): return (" "*4) + comp[index] -def getHost(): - return " "*4 + f"\033[0;36m{getpass.getuser()}\033[0m@\033[0;36m{socket.gethostname()}\033[1;35m" +def get_host(): + return " "*4 + f"\033[0;36m{getpass.getuser()}\033[0m@\033[0;36m{platform.node()}\033[1;35m" + +def get_product_name() -> str: + path_name = '/sys/devices/virtual/dmi/id/product_name' + path_ver = '/sys/devices/virtual/dmi/id/product_version' + + if os.path.isfile(path_name) and os.path.isfile(path_ver): + product_name = open(path_name, 'r').read().strip() + product_version = open(path_ver, 'r').read().strip() + return f"{product_name} - {product_version}" + + return "Not Supported" + +def get_boottime() -> str: + uptimestp = psutil.boot_time() + uptime = datetime.fromtimestamp(uptimestp) + return f"{uptime.hour} Hours {uptime.minute} Mins" + +def get_uptime(): + f_uptime_raw = open('/proc/uptime').readline() + f_uptime_sec = float(f_uptime_raw.split()[0]) + + uptime = {} + uptime['hour'] = int(f_uptime_sec / 3600) + uptime['mins'] = int((f_uptime_sec % 3600) / 60) + + return uptime + +def get_packages(): + packages = {} + packages['dpkg'] = int(subprocess.check_output('dpkg --list | wc -l', shell=True).strip()) - 1 + packages['snap'] = int(subprocess.check_output('snap list --all | wc -l', shell=True).strip()) + return packages + +def get_shell(): + return os.path.realpath(os.path.join('/proc/', str(os.getppid()), 'exe')) + +def get_memory(): + memory = psutil.virtual_memory() + mem = {} + mem['used'] = str(round(memory.used / 1024 ** 2)) + "MB" + mem['total'] = str(round(memory.total / 1024 ** 2)) + "MB" + mem['percent'] = str(memory.percent) + "%" + return mem + +def get_os(): + release = lsb_release.get_os_release() + return f"{release['DESCRIPTION']} [{release['CODENAME']}]" def getSystemInfo(): uname = platform.uname() - memory = psutil.virtual_memory() - memory_used = str(round(memory.used / 1024 ** 2)) + "MB" - memory_total = str(round(memory.total / 1024 ** 2)) + "MB" + memory = get_memory() info = {} - info['system'] = uname.system + info['system'] = get_os() info['kernel'] = uname.release info['version'] = uname.version + info['shell'] = get_shell() info['arch'] = uname.machine - info['host'] = socket.gethostname() + info['host'] = get_product_name() info['ip'] = socket.gethostbyname(socket.gethostname()) info['processor'] = cpuinfo.get_cpu_info()['brand_raw'] - info['memory'] = f"{memory_used} / {memory_total}" + info['memory'] = f"{memory['used']} / {memory['total']} ({memory['percent']})" + info['uptime'] = f"{get_uptime()['hour']} Hour, {get_uptime()['mins']} Mins" + info['boottime'] = get_boottime() + info['packages'] = f"{get_packages()['dpkg']} [dpkg], {get_packages()['snap']} [snap]" return info def printSystemInfo(name, key): info = getSystemInfo() return " "*4 + f"\033[1;35m{name}: \033[0m{info[key]}\033[1;35m" -def getMotd(): +def get_icon(): return f"""\033[1;35m -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡶⠶⠿⠛⠛⠻⡶⠾⠟⠛⠛⠛⠻⠷⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀{getHost()} -⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠷⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀{getNameComponent(0)} -⠀⠀⠀⠀⠀⠀⠀⢀⣴⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢷⣄⠀⠀⠀⠀⠀⠀⠀{getNameComponent(1)} -⠀⠀⠀⠀⠀⠀⣰⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣧⠀⠀⠀⠀⠀⠀{getNameComponent(2)} -⠀⠀⠀⠀⠀⢰⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣧⠀⠀⠀⠀⠀{getNameComponent(3)} -⠀⠀⠀⠀⠀⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡆⠀⠀⠀⠀{getNameComponent(0)} -⠀⠀⠀⠀⢰⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣧⠀⠀⠀⠀{printSystemInfo('Processor', 'processor')} +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡶⠶⠿⠛⠛⠻⡶⠾⠟⠛⠛⠛⠻⠷⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠷⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⢀⣴⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢷⣄⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⣰⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣧⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⢰⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣧⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡆⠀⠀⠀⠀ +⠀⠀⠀⠀⢰⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣧⠀⠀⠀⠀ ⠀⠀⠀⠀⣾⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀ ⠀⠀⠀⢠⡿⠀⠀⠀⠀⢀⡆⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡆⠀⠀⠀ ⠀⠀⠀⣼⠇⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣧⡀⠀⠀⠀⠀⠀⠀⠘⣷⡀⠀⠀ @@ -62,20 +113,42 @@ def getMotd(): ⠀⠀⠀⠀⠀⠀⠀⠙⠷⣦⣤⣀⣘⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -\033[0m -NolaOS v1.0.2-ginger -Copyright 2021 (c) Norman Andrians - """ -def run(): - print("Starting Nola motd with fetch...") +def fetch(): + icon_component = get_icon().splitlines() + fetch_component = icon_component + system_informations = [ + get_host(), + getNameComponent(0), + getNameComponent(1), + getNameComponent(2), + getNameComponent(3), + getNameComponent(0), + printSystemInfo('OS', 'system'), + printSystemInfo('Host', 'host'), + printSystemInfo('Kernel', 'kernel'), + printSystemInfo('Uptime', 'uptime'), + printSystemInfo('Boot Time', 'boottime'), + printSystemInfo('Packages', 'packages'), + printSystemInfo('Shell', 'shell'), + printSystemInfo('Architecture', 'arch') + ] - motd = getMotd() + for i in range(len(system_informations)): + fetch_component[i+1] = fetch_component[i+1] + system_informations[i] + + return "\n".join(fetch_component) + +def run(): + print("Starting Nola fetch...") + print("Reading System information...") + + texts = fetch() os.system("clear") - for p in motd: + for p in texts: print(p, end='') sys.stdout.flush() time.sleep(0.00001)