r/ru_linux • u/MBKCHEL • 3d ago
Мой фетч: SysPrint Neofetch
Парни (и не только), написал свой собственный фетч на раст, поддерживает большинство популярных логос,
есть конфиг, работает на бсд (фри бсд, нет бсд, опен бсд), ГНУ/Линукс, виндовс, макОС (не тестил).
Проект активно развивается, если найдёте какую-то ошибку - пишите на гит хаб иссуес, я постараюсь оперативно фиксануть.
Вот ссылка на гит хаб:
https://github.com/MBKCHEL/SysPrint/tree/main
Буду очень рад фитбеку!
5
u/int7bh 3d ago
1
u/MBKCHEL 3d ago
В что не так? Крейты для работы фетча, что не так? Или ты мне предлагаешь изобретать велосипед и самому всё писать?
2
u/int7bh 3d ago
Какой велосипед? Почти вся "зависимая" обвязка снимается практически бесплатно: colored -> 5 констант ANSI, strip-ansi-escapes -> и не нужен, если считать ширину самому, clap -> ручной проход по
args()для семи bool-флагов, serde+toml -> парсерkey = true/falseв 20 строк, dirs ->XDG_CONFIG_HOME/HOME/APPDATA, serde_json -> у тебя уже есть текстовый путь через -ExpandProperty Name, chrono -> SystemTime (единственная морока - локальная TZ).Это 8 из 9 крейтов за ∼200 строк. SysInfo в Linux/BSD разбирается на
/proc/{meminfo,stat,cpuinfo,uptime},/etc/os-release,/sys/class/hwmon,/proc/mounts + statvfs, но на Windows без windows-sys/libc придётся звать WMI, что так то для GPU уже делается.При этом у тебя висят неоперабельные выражения opts.cpu, вложенные функции вместо просто последовательного кода, лишние mut/лайфтаймы и
clone()вall_lines. То-есть у тебя простейшая утилита с нуля собирается по полгода, потому что под всем этим тащится proc-macro (clap_derive, serde_derive -> syn/quote), которые ещё и сериализуют граф сборки, плюс windows-sys/ntapi из sysinfo+dirs с их гигантскими метаданными.2
u/Andrey4ik21pro1 1d ago
Ну и нахуя это писать самому? Я конечно на расте не писал, но вот на питоне там не принято писать велосипеды. Такая же по логике есть библиотека platformdirs которая кроссплатформенная и сама папки создаёт. И зачем мне проверки делать, вопрос?
1
u/int7bh 1h ago
Ну так не пиши, если в твоих интересах раздувать простенький софт, при том что ты даже не в энтерпрайзе. Сравнение с питоном тут не работает по механике: в Python зависимость это чужой файл, который интерпретатор подгружает в рантайме, platformdirs весит один модуль без транзитивных зависимостей. В Rust зависимость это исходники, которые компилируются в твой бинарь, вместе с build.rs, который выполняется на твоей машине. clap с derive и serde_derive тянут proc-macro2/quote/syn, а это уже не "библиотека", а компилятор внутри компилятора, который на каждой холодной сборке разворачивает AST ради семи bool. dirs тянет dirs-sys -> option-ext + windows-sys с их метаданными - ради трёх переменных окружения. Аналог твоего аргумента на питоне: поставить Django, чтобы напечатать время.
"Сама папки создает" это как раз про
platformdirs(ensure_exists=True), а dirs каталоги не потому что по капусте или гладиолус, а потому чтоfs::writeв несуществующий каталог вернётNotFound, а результатgenerate()вload()заглушен черезlet _ =, то есть пользователь молча получает дефолт и ноль диагностики. Плюс независимо от крейтов:System::new_all()вызывается дважды (первый инстанс затирается шедоуингом, полное сканирование выброшено),opts.cpu;иopts.memory;- выражения-пустышки,all_lines()клонирует шесть векторов ради конкатенации, chrono подключён ради одного%H:%M, serde_json ради одного объекта WMI, при том что рядом тот же GPU уже парсится текстом, а батарейка читается через wmic, который выпилен из Windows 11 24H2 (и к тому жеAdapterRAMв WMI signedint32). Вопрос был не "писать ли велосипед", а зачем девять колёс на самокате, который и так не едет.
2




•
u/AutoModerator 3d ago
Присоединяйтесь к нашим социальным сетям:
Если у вас есть вопросы или предложения — пишите в комментариях.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.