168 lines
5.1 KiB
Python
Executable File
168 lines
5.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# Ferit Yiğit BALABAN <fyb@duck.com>, 2022
|
|
#
|
|
# fetchpy, fetch script alternative to neofetch
|
|
import os
|
|
from subprocess import run
|
|
from rich.console import Console
|
|
from rich.traceback import install
|
|
install(show_locals=True)
|
|
|
|
|
|
COLOR1 = '#75FDFF'
|
|
COLOR2 = '#FFE252'
|
|
COLOR3 = '#D66565'
|
|
COLOR4 = '#FFAB3D'
|
|
|
|
|
|
def read_theme():
|
|
with open('/home/ferit/scripts/fetch.theme', 'r') as f:
|
|
l = f.readlines()
|
|
f.close()
|
|
global COLOR1
|
|
global COLOR2
|
|
global COLOR3
|
|
global COLOR4
|
|
COLOR1 = l[0]
|
|
COLOR2 = l[1]
|
|
COLOR3 = l[2]
|
|
COLOR4 = l[3]
|
|
|
|
|
|
def coloring(text):
|
|
frame = COLOR2
|
|
info = COLOR3
|
|
title = COLOR1
|
|
color_dictionary = {
|
|
'╭': frame,
|
|
'╰': frame,
|
|
'╯': frame,
|
|
'─': frame,
|
|
'╮': frame,
|
|
'┤': frame,
|
|
'│': frame,
|
|
'├': frame,
|
|
'DST': info,
|
|
'KRN': info,
|
|
'SHL': info,
|
|
'PCK': info,
|
|
'CPU': info,
|
|
'GPU': info,
|
|
'MEM': info,
|
|
'UPT': info,
|
|
'ferit@navi': title,
|
|
'Hardware': title,
|
|
'O': COLOR1,
|
|
'o': COLOR1,
|
|
':': COLOR2,
|
|
';': COLOR2,
|
|
'>': COLOR3,
|
|
',': COLOR4,
|
|
'.:/': COLOR4,
|
|
'/': COLOR4,
|
|
'\\\\\\': COLOR4,
|
|
'\\': COLOR4,
|
|
',,///;,': COLOR4,
|
|
'\';\\': COLOR4,
|
|
'\';\\\\': COLOR4,
|
|
',;/': COLOR4,
|
|
'\'\'\\\\\\\\\\\'"': COLOR4
|
|
}
|
|
c = Console()
|
|
iterator = 0
|
|
while iterator < len(text):
|
|
character = text[iterator]
|
|
peekable = iterator < len(text) - 1
|
|
peek = text[iterator + 1] if peekable else ' '
|
|
|
|
if character == ' ':
|
|
if peekable and peek != ' ' and not color_dictionary.__contains__(peek):
|
|
print(' ', end='')
|
|
word, jump_to = read_until_space(text, start_at=iterator + 1)
|
|
if color_dictionary.__contains__(word):
|
|
if '\\' in word:
|
|
word_style = color_dictionary[word]
|
|
for character in word:
|
|
c.print(character, style=word_style, end='')
|
|
else:
|
|
c.print(f'[{color_dictionary[word]}]{word}[/{color_dictionary[word]}]', end='')
|
|
else:
|
|
print(word, end='')
|
|
iterator = jump_to
|
|
print(' ', end='')
|
|
elif color_dictionary.__contains__(character):
|
|
if character == '\\':
|
|
c.print(character, style=color_dictionary[character], end='')
|
|
else:
|
|
c.print(f'[{color_dictionary[character]}]{character}[/{color_dictionary[character]}]', end='')
|
|
else:
|
|
print(character, end='')
|
|
iterator += 1
|
|
print('')
|
|
|
|
|
|
def read_until_space(text, start_at):
|
|
buffer = ''
|
|
iterator = start_at
|
|
while text[iterator] != ' ':
|
|
buffer += text[iterator]
|
|
iterator += 1
|
|
next_space_at = iterator
|
|
return buffer, next_space_at
|
|
|
|
|
|
def main():
|
|
read_theme()
|
|
padding_count = 23
|
|
|
|
distro_name = 'Arch GNU/Linux'
|
|
distro_name = distro_name.ljust(padding_count, ' ')
|
|
|
|
kernel_version = str(os.uname().release)
|
|
kernel_version = kernel_version.ljust(padding_count, ' ')
|
|
|
|
installed_packages = run(['pacman', '-Q'], text=True, capture_output=True).stdout.splitlines()
|
|
shell_name = 'fish'
|
|
for _ in installed_packages:
|
|
if shell_name in _:
|
|
shell_name = _.removesuffix('\n').ljust(padding_count, ' ')
|
|
package_count = str(len(installed_packages)).ljust(padding_count, ' ')
|
|
|
|
total_memory, used_memory, free_memory, d1, d2, d3 = map(int, os.popen('free -m').readlines()[1].split()[1:])
|
|
memory_usage = f'{round((used_memory / 1024), 1)} GB / {round((total_memory / 1024), 1)} GB'.ljust(padding_count, ' ')
|
|
|
|
with open('/proc/uptime', 'r') as f:
|
|
uptime_seconds = float(f.readline().split()[0])
|
|
f.close()
|
|
if uptime_seconds < 60:
|
|
uptime = str(uptime_seconds).split('.')[0] + ' seconds'
|
|
elif uptime_seconds < 3600:
|
|
number = str(uptime_seconds / 60).split('.')[0]
|
|
uptime = f'{number} minute' if number == '1' else f'{number} minutes'
|
|
else:
|
|
number = str(uptime_seconds / 3600).split('.')[0]
|
|
uptime = f'{number} hour' if number == '1' else f'{number} hours'
|
|
uptime = uptime.ljust(padding_count, ' ')
|
|
|
|
txt = f'''
|
|
|
|
╭──────── ferit@navi ────────╮
|
|
│ DST {distro_name}│
|
|
O O , │ KRN {kernel_version}│
|
|
o o .:/ │ SHL {shell_name}│
|
|
o ,,///;, ,;/ │ PCK {package_count}│
|
|
o o)::::::;;/// ├───────── Hardware ─────────┤
|
|
>::::::::;;\\\\\\ │ CPU AMD Ryzen 7 5800H │
|
|
''\\\\\\\\\\'" ';\\ │ GPU NV GeForce RTX3050 Ti │
|
|
';\\ │ MEM {memory_usage}│
|
|
│ UPT {uptime}│
|
|
╰────────────────────────────╯
|
|
|
|
'''
|
|
coloring(txt)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|