Compare commits

...

223 Commits

Author SHA1 Message Date
Azalea Gui 98863df16d [U] Release 1.4.10 2023-08-16 23:37:23 -04:00
azalea 922a91ebb1 [U] Update readme 2023-08-14 21:21:28 -07:00
azalea e7938ea4c3 [+] More editor support 2023-08-14 21:20:45 -07:00
azalea 7491081946 [O] Optimize editor detection 2023-08-14 21:12:33 -07:00
azalea 14bde2e49b [F] Find actual editor name by tracing symlinks 2023-08-14 20:56:27 -07:00
azalea 242eae6de0 [U] Changelog 2023-08-14 20:43:03 -07:00
Azalea 53bbd3fdf8 [PR] #164 from OldWorldOrdr: Resolution for iOS 2023-08-14 23:22:43 -04:00
azalea 5c785f0819 [PR] dylanaraps/neofetch#2362 from CarterLi - LocalIP (macOS): improve detection
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2362
Thanks to @CarterLi

Co-authored-by: 李通洲 <zhangsongcui3371@sina.com>
2023-08-14 20:19:46 -07:00
azalea 75750f12a5 [F] Fix macOS route on VPN hangs
https://github.com/dylanaraps/neofetch/pull/2362
2023-08-14 20:19:11 -07:00
OldWorldOrdr 73b39252df Merge branch 'hykilpikonna:master' into master 2023-08-14 19:55:21 -04:00
李通洲 b313d39366 LocalIP (macOS): improve detection
When a VPN session is enabled, the default route interface is changed to `utun*`, however `ipconfig` doesn't support it for some reason

Use `ifconfig` instead
2023-08-14 15:40:36 +08:00
Azalea 116c83b513 [PR] dylanaraps/neofetch#2355 from Reisy243 - Adding Panwah logo
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2355
Thanks to @Reisy243

Co-authored-by: Reisy243 <reisimineredpanda@gmail.com>
2023-08-13 19:43:40 -07:00
Azalea e33ccd3484 [F] Fix fore-back for kubuntu
Closes #154
2023-08-13 19:32:10 -07:00
Azalea 1e68f174cd [F] Fix reset performance
Closes #158
2023-08-13 19:25:55 -07:00
Azalea d164d4c8f6 [PR] #166 from FragCGI: Venom Linux logo update 2023-08-13 22:14:14 -04:00
Azalea 445f97093a [PR] #167 from gapan: Add Slackel 2023-08-13 22:11:03 -04:00
George Vlahavas e81f2aa6d7 Add Slackel logo 2023-08-13 23:22:15 +03:00
FragCGI 53dec09f88 Update neofetch
Updated to new Venom Linux logo with small variant
2023-08-12 20:53:41 -03:00
FragCGI 3d7dfc0220 Update neofetch 2023-08-12 20:50:06 -03:00
Azalea 62710fa00e [PR] #165 from Alxhr0: New scratch package manager 2023-08-12 17:44:40 -04:00
Alxhr0 63f37d28e3 Added scratch support 2023-08-12 12:33:41 +02:00
OldWorldOrdr 8c4cbf656f resolution for iPhone OS 2023-08-12 05:26:31 -04:00
azalea 526c97fde6 [F] Fix shellcheck warnings https://github.com/dylanaraps/neofetch/pull/2356 2023-08-10 13:13:50 -07:00
azalea 391ff75cd1 [PR] dylanaraps/neofetch#2356 from CarterLi - Resolution (macOS): improve detection
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2356
Thanks to @CarterLi

Co-authored-by: 李通洲 <zhangsongcui3371@sina.com>
2023-08-10 13:09:28 -07:00
azalea df0c2be57a [PR] dylanaraps/neofetch#2358 from shivanandvp - Fix RebornOS logo
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2358
Thanks to @shivanandvp

Co-authored-by: shivanandvp <shivanandvp.oss@gmail.com>
2023-08-10 11:08:28 -07:00
azalea 59ef6434d7 [PR] dylanaraps/neofetch#2357 from gapan - Add Salix ascii art
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2357
Thanks to @gapan

Co-authored-by: George Vlahavas <vlahavas@gmail.com>
2023-08-10 11:04:15 -07:00
azalea 01821a8d7a [F] Fix editor version stuck on macOS using the pico editor
https://github.com/dylanaraps/neofetch/pull/2271
2023-08-09 18:52:55 -07:00
Azalea 65d82be06e [PR] #163 from mcneb10: Display global KDE Plasma theme
Display global KDE Plasma theme and fix bug with DE listing on windows
2023-08-09 21:30:05 -04:00
azalea b5e9edfae7 [F] Fix shellcheck warnings 2023-08-09 18:26:00 -07:00
mcneb10 98feca03f9 Don't try to display XDG_SESSION_TYPE on Windows 2023-08-09 13:04:55 -05:00
mcneb10 ce2a49e9a0 Display global KDE Plasma theme 2023-08-09 01:23:36 -05:00
shivanandvp d025ece2c3 Fix RebornOS logo 2023-08-08 05:37:57 -05:00
George Vlahavas c547ccb3c3 Add Salix ascii art
Requested in #2043
2023-08-08 12:36:45 +03:00
李通洲 6251cb5e43 Resolution (macOS): improve detection
1. fix detection when `screenresolution` is not available
2. make scale factor detection actually work
3. remove `screenresolution` dependency
2023-08-08 14:46:03 +08:00
Reisy243 ea42a29bbd Adding Panwah logo 2023-08-07 23:25:29 -06:00
Azalea 0305e269e0 [PR] #161 from Proximyst/mariellh/improve-colour-removal
perf: use sed for colour removals
2023-08-06 15:22:51 -04:00
Mariell Hoversholm cf17522d50 perf: use sed for colour removals
This has a notable change of performance.
2023-08-06 20:20:06 +02:00
Azalea 1bf2281912 [PR] #160 from EnterTheVoid-x86: Add Unicode arch
Add unicode arch logo
2023-08-06 00:04:28 -04:00
etvx86 4d39bd750f Add Unicode arch logo 2023-08-05 22:58:39 -04:00
etvx86 6db170e825 Merge branch 'hykilpikonna:master' into master 2023-08-05 22:57:27 -04:00
Azalea 25df70367a [+] gynesexual, androsexual flags
Closes #157
2023-08-05 11:04:52 -07:00
Azalea a9602f5619 [PR] dylanaraps/neofetch#2352 from riverscn - Wild card for various OpenWrt distribution
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2352
Thanks to @riverscn

Co-authored-by: Shun Li <riverscn@gmail.com>
2023-08-05 10:54:19 -07:00
Azalea 2f69013177 Merge branch 'master' of github.com:hykilpikonna/hyfetch 2023-08-05 10:50:09 -07:00
Azalea 434f5aeda8 [PR] dylanaraps/neofetch#2350 from Tracker-Friendly - Added evolution icon
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2350
Thanks to @Tracker-Friendly

Co-authored-by: Tracker-Friendly <jliwin98@pm.me>
2023-08-05 10:49:49 -07:00
Tracker-Friendly 988ca7993e Improved evolutionOS ASCII art further 2023-08-02 13:59:53 +01:00
Tracker-Friendly 1efafdfb81 Improved evolutionOS ASCII art 2023-08-02 13:59:42 +01:00
Tracker-Friendly 75fd94fa61 Added evolutionOS ASCII art 2023-08-02 13:59:23 +01:00
Shun Li 08029959f3 Wild card for various OpenWrt distribution 2023-08-02 12:11:28 +08:00
Azalea 9c59dc2791 [PR] #159 from Meowix-Linux
Add Meowix Linux logo
2023-07-31 08:49:43 -07:00
Nekosis e9ae4dbb6f Add Meowix Linux logo 2023-07-30 20:59:43 -05:00
Azalea 26453ea3d7 [O] Custom ^C message 2023-07-25 20:33:15 -07:00
Azalea 0385fd836d [U] Changelog 2023-07-23 15:33:09 -07:00
Azalea cec8152f3d [U] Changelog 2023-07-23 15:24:44 -07:00
Azalea 407387eb0b [PR] dylanaraps/neofetch#2346 from enfyna - Add windows 95 ASCII logo
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2346
Thanks to @enfyna

Co-authored-by: enfyna <legendraslan@gmail.com>
2023-07-23 14:41:11 -07:00
Azalea 484f13fa39 [PR] dylanaraps/neofetch#2342 from bmwiedemann - Smoothen the Tumbleweed logo
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2342
Thanks to @bmwiedemann

Co-authored-by: Bernhard M. Wiedemann <bernhard+gitcommit lsmod.de>
2023-07-23 14:35:33 -07:00
Azalea cf83073200 [+] Implement --package_separate flag
#135
2023-07-23 14:20:27 -07:00
Azalea 8e63a77335 [O] Separate flatpak-system and user
#135
2023-07-23 14:15:40 -07:00
Azalea 05c60fddfd [+] Add steam as a package manager
Closes #152
2023-07-23 13:51:13 -07:00
Azalea 04a6744e6d [+] Add squirrel package manager
Closes #153

Co-Authored-By: Skythrew <76571984+skythrew@users.noreply.github.com>
2023-07-23 13:32:16 -07:00
Azalea 68cf96e24a [PR] #155 from OldWorldOrdr: Fix a typo that broke OS on WSL 2023-07-23 13:23:22 -07:00
OldWorldOrdr 576facfd69 would a newline be better? 2023-07-22 22:24:12 -04:00
OldWorldOrdr bec385d02f typo that caused a bug when running on wsl 2023-07-22 22:19:47 -04:00
enfyna a32028755a Add windows 95 ASCII logo 2023-07-20 18:10:58 +03:00
etvx86 ebd6acd004 Update neofetch 2023-07-19 14:56:57 -04:00
etvx86 0694c10537 Add Kerbl Linux Logo 2023-07-19 14:43:25 -04:00
Bernhard M. Wiedemann 2dea4d54e0 Smoothen the Tumbleweed logo 2023-07-16 18:00:04 +02:00
Azalea 2f753325ae [PR] #151 from oluceps: typo-fix 2023-07-15 15:27:07 -04:00
Azalea Gui 0d018248e5 [PR] dylanaraps/neofetch#2045 from mmdbalkhi - add parch logo
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2045
Thanks to @mmdbalkhi

Co-authored-by: Sohrab Behdani <behdanisohrab@gmail.com>
2023-07-15 15:14:17 -04:00
Azalea Gui aa5bfe060c [PR] dylanaraps/neofetch#2341 from DSOE1024 - Update openkylin logo
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2341
Thanks to @DSOE1024

Co-authored-by: DSOE1024 <90103853+DSOE1024@users.noreply.github.com>
2023-07-15 14:54:01 -04:00
Azalea Gui 407fcd4987 [F] Fix override author 2023-07-15 13:18:43 -04:00
DSOE1024 bf16e1cd47 Update neofetch 2023-07-15 19:16:22 +08:00
DSOE1024 9f808b99ab Update neofetch 2023-07-15 19:15:32 +08:00
DSOE1024 dc778c3078 Update openkylin logo 2023-07-15 18:52:52 +08:00
oluceps 0634893733 fix typo 2023-07-15 06:42:06 +08:00
Azalea Gui 0aa0a76151 [O] Exclude irrelevant files
Fixes #149
2023-07-12 12:03:34 -04:00
Azalea Gui 511af9031c [-] Remove testing scripts 2023-07-12 11:54:32 -04:00
Azalea db54e8990d [PR] #148 from nexplorer-3e: add qwqfetch backend 2023-07-12 11:49:32 -04:00
eval Nya 673de9bb53 run_qwqfetch: rename & change entry point 2023-07-11 14:21:36 +08:00
eval Nya ed377261a2 feat: add qwqfetch backend 2023-07-03 23:55:18 +08:00
eval Nya a97d2805b1 tools: chore: add extract_color.py
dump ansi code number from neofetch script
2023-07-03 23:51:29 +08:00
Azalea 7bfac43dd9 [-] Remove outdated default.nix 2023-06-30 02:11:29 -07:00
Azalea 8bf694c7ba [PR] #139 from Inconn/therian-flag 2023-06-30 05:04:40 -04:00
Azalea 176f08ad0b [+] tot-safe: Count packages only when command succeed
Fixes #145
2023-06-30 01:58:52 -07:00
Azalea 2ce7a59a59 [-] Revert unexpected change
#140
2023-06-30 01:28:58 -07:00
Azalea 698afafa26 Merge branch 'master' of github.com:hykilpikonna/hyfetch 2023-06-30 01:27:04 -07:00
Azalea 4b1546ccd6 [U] Update mac model list
Closes #140
2023-06-30 01:27:00 -07:00
Azalea 6a023d4c91 [PR] Merge pull request #146 from OldWorldOrdr/master
make cargo run on all systems
2023-06-27 15:21:09 -04:00
OldWorldOrdr 40ea204223 make cargo run on all systems 2023-06-27 14:40:58 -04:00
Azalea 31af137e97 [PR] #144 from OldWorldOrdr: Fix cargo count 2023-06-26 16:00:15 -04:00
OldWorldOrdr 914890b4b0 fix cargo package count 2023-06-26 14:41:20 -04:00
Azalea 5ab2f2dcc5 Merge pull request #142 from EnterTheVoid-x86/phyOS
Add phyOS
2023-06-18 00:27:00 -04:00
etvx86 01aed343a6 add phyOS logo 2023-06-18 00:15:38 -04:00
Maxwell Winkler 8389a1dee9 add dash because it's hard to read w/o 2023-06-15 10:59:23 -05:00
Maxwell Winkler a2cf60bc4c changed name to be more accurate (it is not only therian.) 2023-06-15 10:57:14 -05:00
Maxwell Winkler 2577462649 added therian flag 2023-06-15 10:37:54 -05:00
Azalea 3edca64629 [O] Write to cache dir instead of config
Closes #136
2023-06-15 07:07:23 -07:00
Azalea 2edf9c1304 [+] Add cache path variable
#136
2023-06-15 07:05:45 -07:00
Azalea 50abc68f0d [+] Devbox package manager
Closes #137
2023-06-15 06:51:56 -07:00
Azalea 60b4b925d3 [O] Allow specifying default config to copy to ~/.config
Closes #133
2023-06-06 20:14:13 -07:00
Azalea 717b74c30b Merge branch 'master' of github.com:hykilpikonna/hyfetch 2023-06-06 20:05:31 -07:00
Azalea 506f345a9d [+] Add option to disable pride month animation
Closes #134
2023-06-06 20:05:28 -07:00
Azalea 42d8b0d860 [PR] #130 from D3vil0p3r: Athena OS 2023-06-05 13:12:51 -07:00
Azalea cdae93479f [PR] #132 from OldWorldOrdr: Update macOS version name list 2023-06-05 13:11:01 -07:00
OldWorldOrdr 82c949e5a1 add MacOS 14 Sonoma, make formating pretty 2023-06-05 14:13:57 -04:00
D3vil0p3r a8bcbfce09 Update neofetch.1 2023-06-04 14:25:45 +02:00
D3vil0p3r 43bea54532 Added Athena OS 2023-06-04 14:23:05 +02:00
Azalea df11c756dd [F] Fix: Only show pride month animation in tty mode 2023-06-02 00:49:30 -07:00
Azalea 5f066e4ebf [U] Release 1.4.9 2023-06-02 00:26:10 -07:00
Azalea ca3c887b61 [F] Fix list_distros compatibility 2023-06-02 00:24:31 -07:00
Azalea fac90ec5d3 [-] Remove todo 2023-06-02 00:19:30 -07:00
Azalea 4cb65c468c [U] Changelog 2023-06-02 00:19:18 -07:00
Azalea 0693d6e316 [+] Neofetch argument passthrough 2023-06-02 00:18:07 -07:00
Azalea 2a312d0a7b [U] Update changelog 2023-06-02 00:07:12 -07:00
Azalea 8f628bb37b [-] Remove commented code 2023-06-01 23:57:39 -07:00
Azalea 503251cbce [+] Add --c-overlay option 2023-06-01 23:57:12 -07:00
Azalea a37ee211f2 [+] Add global config option for overlay 2023-06-01 23:56:38 -07:00
Azalea 0ac2ffbba5 [+] Add overlay support to preset coloring 2023-06-01 23:55:55 -07:00
Azalea dd950092a6 [+] Auto detect pride month & start animation with hyfetch 2023-06-01 23:40:18 -07:00
Azalea bd8066407e [F] Fix color messed up after animation ends 2023-06-01 23:39:47 -07:00
Azalea 6be684c26f [+] Add press enter to continue 2023-06-01 23:23:02 -07:00
Azalea dba600cc89 [O] Allow press enter to continue 2023-06-01 23:19:14 -07:00
Azalea cdbf8a6b24 [+] Catch ctrl+c 2023-06-01 23:15:26 -07:00
Azalea a437957702 [O] Add every flag to display 2023-06-01 23:02:56 -07:00
Azalea bf5276bcc4 [U] Update boyflux flag
https://gender.fandom.com/wiki/Boyflux?file=0A84497D-7F5C-4CB1-B846-55B6591DF65C.jpeg
2023-06-01 23:02:44 -07:00
Azalea 11f4242598 [U] Update autoromantic flag
https://queerdom.fandom.com/wiki/Autoromantic?file=Alt_Autoromantic.jpg
2023-06-01 23:02:06 -07:00
Azalea dfe77dea5f Revert "[+] Random flag continuation"
This reverts commit c47d80ae1d.
2023-06-01 22:42:51 -07:00
Azalea c47d80ae1d [+] Random flag continuation 2023-06-01 22:42:48 -07:00
Azalea 83ba569fde [O] Add sin(y + 0.5 * frame) term in idx calculation 2023-06-01 22:18:47 -07:00
Azalea 73fc473ae3 [+] Text border 2023-06-01 22:15:04 -07:00
Azalea 625f48168b [+] Pride month animation 2023-06-01 22:03:12 -07:00
Azalea 9914ff2a55 [+] Implement color overlaying 2023-06-01 22:03:02 -07:00
Azalea f20e80375a [F] Apply fix #127 2023-06-01 12:05:00 -07:00
Azalea b8ec68a943 [PR] #129 from osalbahr: Add minimum terminal size
Add minimum terminal size. Fixes #128
2023-05-21 09:37:06 -07:00
Osama Albahrani 1f7f76e078 Add minimum terminal size. Fixes #128 2023-05-20 23:01:03 -04:00
Azalea e288da8de2 [F] Fix fqdn substitution 2023-05-15 20:14:09 -07:00
Azalea Gui a72a49da13 [PR] dylanaraps/neofetch#2326 from manoliptram - Add Nobara Linux to Hyfetch + Neowofetch
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2326
Thanks to @manoliptram

Co-authored-by: manolipt <manoliptram@gmail.com>
2023-05-09 10:56:06 -04:00
Azalea Gui 24e1ed4617 [+] Add option to override author when merging 2023-05-09 10:55:59 -04:00
Azalea Gui 01f65d91b5 [O] Use commits[-1] as author instead of [0] 2023-05-09 10:48:38 -04:00
Azalea Gui 953a09b686 [+] Pull request template 2023-05-09 10:46:23 -04:00
manolipt fe31b5bf34 Added Nobara Distro with Color 2023-05-09 02:17:53 -07:00
Azalea Gui bf0c20b188 [+] Feature request template 2023-05-02 08:25:07 -04:00
Azalea Gui c9ed3e1789 [+] HyFetch bug report template 2023-05-02 08:10:02 -04:00
Azalea Gui 6d1359d8e9 [+] Neofetch bug report template 2023-05-02 08:03:41 -04:00
Azalea 219a7c48cc [U] Update issue templates 2023-05-02 07:45:59 -04:00
Azalea Gui 3b1e1385cc [U] Update changelog 2023-05-01 23:48:07 -04:00
AI Moderator c6453e2137 [F] typo ;-; 2023-05-01 22:35:00 -04:00
AI Moderator 200c1a6d53 [O] Code cleanup 2023-05-01 22:20:33 -04:00
AI Moderator 4225a0c453 [+] AI Github Content Moderator 2023-05-01 22:19:34 -04:00
Azalea Gui 4fe0890f21 [+] gh moderator config
Co-Authored-By: AI Content Moderator <132312177+ai-moderator@users.noreply.github.com>
2023-05-01 20:07:25 -04:00
Azalea Gui 857037fa37 [-] Remove old issues moderator 2023-05-01 19:24:02 -04:00
Azalea Gui b7b2322346 [U] Update gitignore 2023-05-01 18:50:01 -04:00
Azalea Gui ac27543cd8 [O] Check distro arg before creating config 2023-05-01 18:44:21 -04:00
Azalea Gui c40cb09409 [+] Script to install autocompletion
https://github.com/hykilpikonna/hyfetch/issues/96
2023-05-01 17:23:58 -04:00
Azalea Gui 365abe2c80 [+] Generate shell completions
https://github.com/hykilpikonna/hyfetch/issues/96
2023-05-01 17:22:06 -04:00
Azalea Gui 2007c7c01e [+] Autocomplete generator script
https://github.com/hykilpikonna/hyfetch/issues/96
2023-05-01 16:33:52 -04:00
Azalea Gui 9747856f15 [O] Split create_parser function
https://github.com/hykilpikonna/hyfetch/issues/96
2023-05-01 16:23:17 -04:00
Azalea Gui 8104cd822a [F] Fix konsole ppid detection https://github.com/hykilpikonna/hyfetch/issues/116 2023-05-01 16:00:12 -04:00
Azalea Gui 2d1abc8e30 [+] Add FemboyOS
https://github.com/hykilpikonna/hyfetch/issues/121
2023-05-01 14:56:01 -04:00
Azalea Gui afb7092667 [U] Update issue moderator to allow dynamic blacklist file 2023-05-01 14:17:41 -04:00
Sohrab Behdani 2cda9e9b2c fixed parchlinux art 2023-04-28 14:37:05 +03:30
Azalea Gui 4a16cfec9b [PR] dylanaraps/neofetch#2316 from PowerMan2206 - Made sixel use -I
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2316
Thanks to @PowerMan2206

Co-authored-by: PowerMan2206 <61635519+PowerMan2206@users.noreply.github.com>
2023-04-27 09:07:21 -04:00
Azalea 9acc0c0719 [PR] #118 from pandaninjas: Change wording
Press any key -> Press enter
2023-04-27 08:11:56 -04:00
PandaNinjas 1315d0b2a7 Press any key -> Press enter 2023-04-26 18:26:22 -04:00
PowerMan2206 331deaf293 Made sixel use -I
Made the sixel image backend use high color mode (-I) as it gives better image quality
2023-04-24 17:13:52 +02:00
Azalea Gui 3a1ac3e25a [F] Fix shellcheck for 2313
https://github.com/dylanaraps/neofetch/pull/2313
2023-04-18 03:37:40 -04:00
Azalea Gui a6a17d102c Merge branch 'master' of github.com:hykilpikonna/hyfetch 2023-04-18 03:33:55 -04:00
Azalea Gui 9605e4036f [PR] dylanaraps/neofetch#2313 from RastaDill - Added new distro Astra Linux
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2313
Thanks to @RastaDill

Co-authored-by: Mike Voznesensky <mixask8@mail.ru>
2023-04-18 03:32:48 -04:00
Mike Voznesensky 088e0d484b Added new distro Astra Linux
* Added support Fly DE
* Improvment detected host model
HP ProDesk 490 G3 MT Business PC - bette than - HP 805F
ASUSTeK COMPUTER INC. X201EP - better than X201EP
2023-04-18 12:33:33 +03:00
Azalea 9b7756c5ae [PR] #114 from dnkmmr69420/patch-1: Add nix profile installation method 2023-04-14 13:32:42 -04:00
Azalea 5c22c75f72 [PR] #115 from realRurichan/master: Fix Windows encoding 2023-04-14 13:06:16 -04:00
realRurichan bac650c84a [F] Fix encoding errors on Windows with certain languages. 2023-04-15 01:00:46 +08:00
Hykilpikonna cbe8906073 [F] Fix #82 winget stuck on agreement 2023-04-13 04:26:09 -04:00
dnkmmr faa1cca154 Update README.md 2023-04-12 15:47:32 -05:00
Azalea Gui 8ef39ffcbf [PR] dylanaraps/neofetch#2309 from MrStanDu33 - Fix windows detection to match version
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2309
Thanks to @MrStanDu33

Co-authored-by: DANIELS-ROTH Stan <contact@daniels-roth-stan.fr>
2023-04-04 14:48:04 -04:00
DANIELS-ROTH Stan 6778fd42a5 neofetch: Fix windows detection to match version 2023-04-02 13:23:21 +02:00
Azalea Gui 4e5f51b2a2 [U] Update changelog 2023-04-01 21:23:48 -04:00
Azalea Gui 1d49e6109c [U] Merge tag push commands 2023-04-01 21:16:28 -04:00
Azalea Gui 9777652dac [U] Release 1.4.8 2023-04-01 21:13:38 -04:00
Azalea Gui 659811a66e [U] Update release script 2023-04-01 21:13:11 -04:00
Azalea Gui 617227da75 [U] Update release script 2023-04-01 21:12:03 -04:00
Azalea Gui 8ffb8063ca [O] Replace \t with " " 2023-04-01 21:06:03 -04:00
Azalea Gui 9018dbb461 [U] Update changelog 2023-04-01 20:58:39 -04:00
Azalea 1d29563e81 [U] Embed readme links in text (#112) 2023-03-25 00:31:05 -04:00
Azalea 0d06df3024 [PR] #112 from bittin: Add slackware package 2023-03-25 00:28:59 -04:00
bittin 964f718766 Added Slackbuilds Slackware Package
Slackbuild for Slackware 15 and current now uploaded and exists updated
2023-03-25 05:22:30 +01:00
Azalea 673e20ff2b [PR] #111 from slackingfred: Update iOS devices 2023-03-24 19:53:44 -04:00
Fred b4a0131359 Update iDevices list (2) 2023-03-24 16:26:54 +08:00
Fred 93ea451c34 Update iDevices list (1) 2023-03-24 12:22:41 +08:00
Azalea Gui a813400807 [F] Specify colorama version, closes #110 2023-03-23 23:58:47 -04:00
Azalea e970c8f672 [PR] #109 from Antiz96: Arch install instructions 2023-03-23 21:27:00 -04:00
Azalea Gui 573eb09f74 [F] Fix reading version requires typing dependency 2023-03-23 21:23:40 -04:00
Azalea Gui 6192b47758 [F] Fix setup.py warnings 2023-03-23 21:22:30 -04:00
Robin Candau 6771e8e7c1 Update the installation instructions for Arch 2023-03-24 00:27:43 +01:00
Azalea e8c9e30920 [PR] #108 from OpenSauce04: Archcraft variants 2023-03-22 19:51:45 -04:00
OpenSauce04 3b8cf64a5e Added archcraft_ascii 2023-03-22 21:46:36 +00:00
OpenSauce04 7d1ec7109f Added archcraft_minimal logo 2023-03-22 21:43:03 +00:00
Azalea Gui 5891522233 [+] Add pipx package manager, closes #107 2023-03-22 12:18:53 -04:00
Azalea Gui d00a3c086d [+] Add omniromantic and pangender, closes #106 2023-03-21 16:03:08 -04:00
Azalea Gui 538646160d [+] Changelog 2023-03-21 01:20:43 -04:00
Azalea Gui 182f2aad15 [+] Add PikaOS, closes #105 2023-03-21 01:15:03 -04:00
Azalea Gui 8c5905c858 [+] Add custom ascii file option, closes #104 2023-03-20 23:31:14 -04:00
Azalea 365ed5a91f [PR] #101 from cs127 - Better color formatting codes
Better colour/formatting codes
2023-03-15 16:33:31 -04:00
Hykilpikonna 859dd3eb83 [+] Add distro option in config #102 2023-03-15 16:29:14 -04:00
Hykilpikonna 5343182ea1 [PR] dylanaraps/neofetch#2305 from BomberFish - Fix Chrome OS.
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2305
Thanks to @BomberFish

Co-authored-by: BomberFish <87151697+BomberFish@users.noreply.github.com>
2023-03-15 16:23:35 -04:00
BomberFish 93639996bb oops 2023-03-15 14:44:59 -04:00
BomberFish 5f39250003 add cros fixes 2023-03-15 12:26:15 -04:00
cs127 08ecada71a Check for linux console 2023-03-13 18:04:01 +03:30
cs127 4d6743b886 Better colour codes 2023-03-13 18:00:04 +03:30
Azalea dcff08340e [PR] #99 from redalpa333/master
Improved ensure_git_bash
2023-03-11 15:36:54 -05:00
Ford Stewart 44a4555bce Improved ensure_git_bash
Better bash detection
Minimized git install now requires input
Moved literal_input function (Had to so I could confirm the minimized git install with it)
2023-03-10 18:18:23 -05:00
Azalea f855d0e244 [PR] #98 from axtloss/axtloss/update-vanilla-logo 2023-03-02 21:58:23 -05:00
axtloss 04d5965d49 Make vanilla logo more readable 2023-03-02 22:04:46 +01:00
Azalea Gui 197e11ee5f [PR] dylanaraps/neofetch#2301 from salientos - Salient OS Logos
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2301
Thanks to @salientos

Co-authored-by: Silent <d3signr@gmail.com>
2023-03-01 10:04:31 -05:00
Azalea Gui 58e60aea8e [F] ARM CPU Detection: Compatibility with clusters
#97
2023-02-24 09:55:09 -05:00
Azalea Gui d3ea2eeee2 [F] ARM CPU Detection: Use python3 instead of python
#97
2023-02-24 09:49:45 -05:00
Azalea Gui 2b4a35f12b [F] Positive look-ahead in regex matching 2023-02-21 09:55:14 -05:00
Azalea Gui 469dd762f2 [O] Better RE substitution 2023-02-21 09:51:27 -05:00
Sohrab Behdani 0033e31388 parch logo fix 2023-02-14 16:54:31 +03:30
Sohrab Behdani c02d375d71 renewed parchlogo 2023-02-14 16:49:37 +03:30
Silent d8bdffa1f1 Added SalientOS 2022-12-03 14:57:16 +00:00
Silent a3e93a03fc Update neofetch 2022-01-02 11:51:35 +00:00
Silent 0329c2825f Update neofetch 2021-12-30 17:11:10 +00:00
Silent 48acfaaebe Add SalientOS to Neofetch 2021-12-30 17:09:44 +00:00
65 changed files with 2865 additions and 799 deletions
-20
View File
@@ -1,20 +0,0 @@
## Description
If you're suggesting a new feature then just a description will suffice.
- [ ] Does this issue still occur in the master branch? (**Required if issue**)
#### Neofetch version
## Screenshot
## Config file
## Verbose log
1. Run `neofetch -vv 2> neofetchlog`
2. Upload the contents of `neofetchlog` to pastebin, gist or equivalent.
+19
View File
@@ -0,0 +1,19 @@
---
name: Content Request
about: Suggest supporting new flags, distros, package managers, etc.
title: ''
labels: 'content-request'
assignees: ''
---
### Describe the content
Describe the content you would like to see added to HyFetch.
### Links
Please include relevant links to the content.
e.g. For distros, include a link to the distro's official website, download link, or development repository.
### Additional context
Add any other context about the problem here.
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature Request
about: Suggest a new idea for this project
title: ''
labels: 'feature-request'
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+32
View File
@@ -0,0 +1,32 @@
---
name: HyFetch Bug Report
about: Create a report for coloring related bugs.
title: ''
labels: 'hyfetch'
assignees: ''
---
### Describe the bug
A clear and concise description of what the bug is.
- [ ] Does this issue still occur in the master branch? (**Required**)
### Expected behavior
A clear and concise description of what you expected to happen.
### Screenshots
Please include a screenshot of your system information if the specific system environment is relevant to the bug.
If applicable, add screenshots to help explain your problem.
### Config file
Please paste the content of `~/.config/hyfetch.json` below:
```json
"(here)"
```
### Additional context
Add any other context about the problem here.
+32
View File
@@ -0,0 +1,32 @@
---
name: Neofetch Bug Report
about: Create a report for system-information related bugs.
title: ''
labels: 'neofetch'
assignees: ''
---
### Describe the bug
A clear and concise description of what the bug is.
- [ ] Does this issue still occur in the master branch? (**Required**)
### Expected behavior
A clear and concise description of what you expected to happen.
### Screenshots
Please include a screenshot of your system information if the specific system environment is relevant to the bug.
If applicable, add screenshots to help explain your problem.
### Config file
1. Run `cp ~/.config/neofetch/config.conf conf.txt`
2. Drag `conf.txt` here to upload it.
### Verbose log
1. Run `neofetch -vv 2> neofetch.log`
2. Drag `neofetch.log` here to upload it.
### Additional context
Add any other context about the problem here.
+13 -5
View File
@@ -1,10 +1,18 @@
## Description
Only fill in the fields below if relevant.
<!-- Thank you so much for contributing! ❤️ -->
### Description
Describe the goals that the pull request accomplishes.
## Features
### Relevant Links
If there are related issues, please link them here.
## Issues
Please also include links relevant to the changes.
## TODO
e.g. For new distros, include a link to the distro's official website, download link, or development repository.
### Screenshots
If applicable, please include screenshots before and after your changes.
### Additional context
Add any other context about the problem or changes here.
+5 -1
View File
@@ -115,4 +115,8 @@ dmypy.json
# Custom
.idea
._*
._*
webhook-log
start_moderation.sh
gh_moderator.toml
moderator-data
+8
View File
@@ -1 +1,9 @@
include hyfetch/scripts/*
recursive-exclude tools *
recursive-exclude .github *
recursive-exclude .vscode *
exclude .gitignore
exclude .gitattributes
exclude package.json
exclude CONTRIBUTING.md
+122 -39
View File
@@ -8,7 +8,7 @@ neofetch with pride flags <3
This repo also serves as an updated version of the original `neofetch` since the upstream [dylanaraps/neofetch](https://github.com/dylanaraps/neofetch) doesn't seem to be maintained anymore (as of Jul 30, 2022, the original repo hasn't merged a pull request for 6 months). If you only want to use the updated neofetch without pride flags, you can use the `neofetch` script from this repo. To prevent command name conflict, I call it `neowofetch` :)
* Method 1: `pip install hyfetch` then run `neowofetch`
* Method 1: `pip install -U hyfetch` then run `neowofetch`
* Method 2: `npx neowofetch`
* Method 3: `P="$HOME/.local/bin/neowofetch" curl -L nf.hydev.org -o $P && chmod +x $P`
* Method 4: Run without install `bash <(curl -sL nf.hydev.org)`
@@ -21,16 +21,19 @@ This repo also serves as an updated version of the original `neofetch` since the
Install Python >= 3.7 first. Then, just do:
```sh
pip install hyfetch
pip install -U hyfetch
```
### Method 2: Install using system package manager
Currently, these distributions have existing packages for HyFetch:
* Arch Linux: `paru -S hyfetch` or `yay -S hyfetch` (Thanks to [@Aleksana](https://github.com/Aleksanaa))
* Arch Linux: `sudo pacman -S hyfetch` (Thanks to [@Aleksana](https://github.com/Aleksanaa) and [@Antiz96](https://github.com/Antiz96))
* Nix: `nix-env -i hyfetch` (Thanks to [@YisuiDenghua](https://github.com/YisuiDenghua))
* Guix: `guix install hyfetch` (Thanks to [@WammKD](https://github.com/WammKD))
* Slackware `sbopkg -b hyfetch` Slackware [Slackbuild](https://slackbuilds.org/repository/15.0/desktop/hyfetch/?search=hyfetch) (Thanks to [@bittin](https://github.com/bittin) and Urchlay)
* Nix Profile `nix profile install nixpkgs#hyfetch`
### Method 3: Install the latest developmental version using git
@@ -87,7 +90,6 @@ Updates to `neowofetch` begins with the emoji 🖼️
* [ ] (Important!) Refactor flag storage & coloring to support non-stride patterns
* [ ] Config menu: Allow left-right arrow keys for pagination
* [ ] Neofetch argument pass through
### Nightly
@@ -99,39 +101,120 @@ pip install git+https://github.com/hykilpikonna/hyfetch.git@master
<!-- CHANGELOG STARTS HERE --->
### 1.4.10
* 🌈 Add support for qwqfetch backend ([#148](https://github.com/hykilpikonna/hyfetch/pull/148))
* 🌈 Add nonhuman-unity flag ([#139](https://github.com/hykilpikonna/hyfetch/pull/139))
* 🌈 Add gynesexual, androsexual flags ([#157](https://github.com/hykilpikonna/hyfetch/pull/157))
* 🌈 Add option to disable pride month animation ([#134](https://github.com/hykilpikonna/hyfetch/pull/134))
* 🌈 Make ^C error message less aggressive (?)
* 🌈 Fix: Should not assume ~/.config is writable ([#136](https://github.com/hykilpikonna/hyfetch/pull/136))
* 🌈 Fix: Foreground-background arrangement not detected ([#154](https://github.com/hykilpikonna/hyfetch/pull/154))
* 🖼 OS - Update macOS version name list ([#140](https://github.com/hykilpikonna/hyfetch/pull/140))
* 🖼 Ascii - Improve color removal ([#161](https://github.com/hykilpikonna/hyfetch/pull/161))
* 🖼 Ascii - Fix reset character performance ([#158](https://github.com/hykilpikonna/hyfetch/pull/158))
* 🖼 Distro - Smoothen the Tumbleweed logo ([dylanaraps#2342](https://github.com/dylanaraps/neofetch/pull/2342))
* 🖼 Distro - Update RebornOS logo ([dylanaraps#2358](https://github.com/dylanaraps/neofetch/pull/2358))
* 🖼 Distro - Update Venom Linux logo ([#166](https://github.com/hykilpikonna/hyfetch/pull/166))
* 🖼 Distro - Add Windows 95 ASCII logo ([dylanaraps#2346](https://github.com/dylanaraps/neofetch/pull/2346))
* 🖼 Distro - Add ParchLinux ([dylanaraps#2045](https://github.com/dylanaraps/neofetch/pull/2045))
* 🖼 Distro - Add OpenKylin ([dylanaraps#2341](https://github.com/dylanaraps/neofetch/pull/2341))
* 🖼 Distro - Add EvolutionOS ([dylanaraps#2350](https://github.com/dylanaraps/neofetch/pull/2350))
* 🖼 Distro - Add Salix ([dylanaraps#2357](https://github.com/dylanaraps/neofetch/pull/2357))
* 🖼 Distro - Add Panwah ([dylanaraps#2355](https://github.com/dylanaraps/neofetch/pull/2355))
* 🖼 Distro - Add PhyOS ([#142](https://github.com/hykilpikonna/hyfetch/pull/142))
* 🖼 Distro - Add Athena OS ([#130](https://github.com/hykilpikonna/hyfetch/pull/130))
* 🖼 Distro - Add Meowix ([#159](https://github.com/hykilpikonna/hyfetch/pull/159))
* 🖼 Distro - Add Slackel ([#167](https://github.com/hykilpikonna/hyfetch/pull/167))
* 🖼 Distro - Support *Wrt variants ([dylanaraps#2352](https://github.com/dylanaraps/neofetch/pull/2352))
* 🖼 Version - Fix a typo that broke OS detection on WSL ([#155](https://github.com/hykilpikonna/hyfetch/pull/155))
* 🖼 Packages - Implement --package_separate flag ([#135](https://github.com/hykilpikonna/hyfetch/pull/135))
* 🖼 Packages - Separate flatpak-system and flatpak-user ([#135](https://github.com/hykilpikonna/hyfetch/pull/135))
* 🖼 Packages - Add steam as a package manager ([#152](https://github.com/hykilpikonna/hyfetch/pull/152))
* 🖼 Packages - Add squirrel package manager ([#153](https://github.com/hykilpikonna/hyfetch/pull/153))
* 🖼 Packages - Make cargo run on all systems ([#146](https://github.com/hykilpikonna/hyfetch/pull/146))
* 🖼 Packages - Fix cargo package count ([#144](https://github.com/hykilpikonna/hyfetch/pull/144))
* 🖼 Packages - Add Devbox package manager ([#137](https://github.com/hykilpikonna/hyfetch/pull/137))
* 🖼 Packages - Fix phantom package when pm command fails ([#145](https://github.com/hykilpikonna/hyfetch/pull/145))
* 🖼 Packages - Update scratch package manager ([#165](https://github.com/hykilpikonna/hyfetch/pull/165))
* 🖼 Editor - Better version detection
* 🖼 Resolution - Improve macOS resolution detection ([dylanaraps#2356](https://github.com/dylanaraps/neofetch/pull/2356))
* 🖼 Resolution - Add resolution lookup for iOS ([#164](https://github.com/hykilpikonna/hyfetch/pull/164))
* 🖼 Desktop - Display global KDE Plasma theme ([#163](https://github.com/hykilpikonna/hyfetch/pull/163))
* 🖼 IP - Improve macOS local IP detection ([dylanaraps#2362](https://github.com/dylanaraps/neofetch/pull/2362))
* 🖼 IP - Fix macOS route hangs on reverse DNS lookup
* 🖼 Config - Allow specifying default config to copy to ~/.config ([#133](https://github.com/hykilpikonna/hyfetch/pull/133))
### 1.4.9
* 🌈 Add pride month easter-egg animation! ⭐️
* 🌈 Autocompletion for bash, zsh, tcsh ([#96](https://github.com/hykilpikonna/hyfetch/pull/96))
* 🌈 Add nix profile installation method ([#114](https://github.com/hykilpikonna/hyfetch/pull/114))
* 🌈 Add experimental color overlay function for more accurate lightness adjusting (using `--c-overlay`)
* 🌈 Allow neofetch argument passthrough (using `--args='...'`)
* 🌈 Show recommended terminal size ([#129](https://github.com/hykilpikonna/hyfetch/pull/129))
* 🌈 Update issue & pull request templates
* 🖼 Hostname - Fix FQDN substitution
* 🖼 Version - Fix Windows version detection ([dylanaraps#2309](https://github.com/dylanaraps/neofetch/pull/2309))
* 🖼 Packages - Fix winget stuck on agreement ([#82](https://github.com/hykilpikonna/hyfetch/pull/82))
* 🖼 Distro - Fix Windows text encoding ([#115](https://github.com/hykilpikonna/hyfetch/pull/115))
* 🖼 Distro - Add Astra Linux ([dylanaraps#2313](https://github.com/dylanaraps/neofetch/pull/2313))
* 🖼 Distro - Add FemboyOS ([#121](https://github.com/hykilpikonna/hyfetch/pull/121))
* 🖼 Distro - Add Nobara Linux ([dylanaraps#2326](https://github.com/dylanaraps/neofetch/pull/2326))
* 🖼 Font - Fix Konsole ppid detection ([#116](https://github.com/hykilpikonna/hyfetch/pull/116))
* 🖼 Font - Fix Konsole terminal font detection ([#127](https://github.com/hykilpikonna/hyfetch/pull/127))
* 🖼 Image - Optimize sixel image display ([dylanaraps#2316](https://github.com/dylanaraps/neofetch/pull/2316))
### 1.4.8
* 🌈 Improved Windows git bash detection ([#99](https://github.com/hykilpikonna/hyfetch/pull/99))
* 🌈 Improved color formatting codes ([#101](https://github.com/hykilpikonna/hyfetch/pull/101))
* 🌈 Allow specifying distro in config ([#102](https://github.com/hykilpikonna/hyfetch/pull/102))
* 🌈 Allow specifying custom ascii files ([#104](https://github.com/hykilpikonna/hyfetch/pull/104))
* 🌈 Add omniromantic and pangender flags ([#106](https://github.com/hykilpikonna/hyfetch/pull/106))
* 🌈 Now officially packaged for ArchLinux Community & Slackware! ([#112](https://github.com/hykilpikonna/hyfetch/pull/112) | [#109](https://github.com/hykilpikonna/hyfetch/pull/109))
* 🖼 Host - Update Apple device model detection. ([#111](https://github.com/hykilpikonna/hyfetch/pull/111))
* 🖼 Distro - Add Salient OS. ([dylanaraps#2301](https://github.com/dylanaraps/neofetch/pull/2301))
* 🖼 Distro - Add PikaOS. ([#105](https://github.com/hykilpikonna/hyfetch/pull/105))
* 🖼 Distro - Add Archcraft minimal variant. ([#108](https://github.com/hykilpikonna/hyfetch/pull/108))
* 🖼 Distro - Update Vanilla logo. ([#98](https://github.com/hykilpikonna/hyfetch/pull/98))
* 🖼 Distro - ChromeOS version improvements. ([dylanaraps#2305](https://github.com/dylanaraps/neofetch/pull/2305))
* 🖼 CPU - Improved multi-cpu ARM chip detection. ([#97](https://github.com/hykilpikonna/hyfetch/pull/97))
* 🖼 Packages - Support pipx package manager. ([#107](https://github.com/hykilpikonna/hyfetch/pull/107))
### 1.4.7
* 🌈 Better Windows compatibility (#45, #84, #87, #89)
* 🌈 Add gendervoid flags (#81)
* 🌈 Fix ASCII extractor escape sequence generation (#90, #91)
* 🌈 Better Windows compatibility ([#45](https://github.com/hykilpikonna/hyfetch/pull/45), [#84](https://github.com/hykilpikonna/hyfetch/pull/84), [#87](https://github.com/hykilpikonna/hyfetch/pull/87), [#89](https://github.com/hykilpikonna/hyfetch/pull/89))
* 🌈 Add gendervoid flags ([#81](https://github.com/hykilpikonna/hyfetch/pull/81))
* 🌈 Fix ASCII extractor escape sequence generation ([#90](https://github.com/hykilpikonna/hyfetch/pull/90), [#91](https://github.com/hykilpikonna/hyfetch/pull/91))
* 🖼 Distro - Add CuteOS ([dylanaraps#2291](https://github.com/dylanaraps/neofetch/pull/2291))
* 🖼 Distro - Add Floflis ([dylanaraps#2289](https://github.com/dylanaraps/neofetch/pull/2289))
* 🖼 Distro - Add ArseLinux ([dylanaraps#2295](https://github.com/dylanaraps/neofetch/pull/2295))
* 🖼 Distro - Better Solaris support ([dylanaraps#2293](https://github.com/dylanaraps/neofetch/pull/2293))
* 🖼 Packages - Fix scoop package manager for Windows (#93)
* 🖼 Packages - Add Evox package manager for Stock Linux (#95)
* 🖼 WM - Fix false positive wm process name detection (#88, #94)
* 🖼 Packages - Fix scoop package manager for Windows ([#93](https://github.com/hykilpikonna/hyfetch/pull/93))
* 🖼 Packages - Add Evox package manager for Stock Linux ([#95](https://github.com/hykilpikonna/hyfetch/pull/95))
* 🖼 WM - Fix false positive wm process name detection ([#88](https://github.com/hykilpikonna/hyfetch/pull/88), [#94](https://github.com/hykilpikonna/hyfetch/pull/94))
* 🖼 Misc - Added BIOS and bluetooth detection
### 1.4.6
* 🌈 Add compatibility for FastFetch version `>1.8.0` (#62)
* 🖼 Distro - Add Aperture Science ascii art (#61)
* 🌈 Add compatibility for FastFetch version `>1.8.0` ([#62](https://github.com/hykilpikonna/hyfetch/pull/62))
* 🖼 Distro - Add Aperture Science ascii art ([#61](https://github.com/hykilpikonna/hyfetch/pull/61))
* 🖼 Distro - Add RhaymOS ([dylanaraps#2274](https://github.com/dylanaraps/neofetch/pull/2274))
* 🖼 Editor - Add editor information detection ([dylanaraps#2271](https://github.com/dylanaraps/neofetch/pull/2271))
* 🖼 Packages - Fix empty cargo directory (#58)
* 🖼 Packages - Fix empty cargo directory ([#58](https://github.com/hykilpikonna/hyfetch/pull/58))
* 🖼 Terminal - Display gnome-console instead of kgx ([dylanaraps#2277](https://github.com/dylanaraps/neofetch/pull/2277))
* 🖼 Terminal - Fix terminal detection with new get_process_name function
* 🖼 CPU - Detect ISA string on RISC-V CPUs (#60)
* 🖼 Song - Fix CMUS player song detection on macOS (#55)
* 🖼 Network - Fix macOS network detection (#56)
* 🖼 Misc - Change LICENSE year to 2023 (#59)
* 🖼 CPU - Detect ISA string on RISC-V CPUs ([#60](https://github.com/hykilpikonna/hyfetch/pull/60))
* 🖼 Song - Fix CMUS player song detection on macOS ([#55](https://github.com/hykilpikonna/hyfetch/pull/55))
* 🖼 Network - Fix macOS network detection ([#56](https://github.com/hykilpikonna/hyfetch/pull/56))
* 🖼 Misc - Change LICENSE year to 2023 ([#59](https://github.com/hykilpikonna/hyfetch/pull/59))
### 1.4.5
* 🌈 **Support using FastFetch as a HyFetch backend** (`hyfetch -b fastfetch`)
* 🌈 Add config file argument (#48)
* 🌈 Fix problems caused by color detection on Windows (#16)
* 🌈 Add config file argument ([#48](https://github.com/hykilpikonna/hyfetch/pull/48))
* 🌈 Fix problems caused by color detection on Windows ([#16](https://github.com/hykilpikonna/hyfetch/pull/16))
* 🌈 Support pure-python distro detection for FastFetch
* 🖼️ Distro - Add Aster Linux ([dylanaraps#2251](https://github.com/dylanaraps/neofetch/pull/2251))
* 🖼️ Distro - Add Hybrid Linux ([dylanaraps#2239](https://github.com/dylanaraps/neofetch/pull/2239))
@@ -139,21 +222,21 @@ pip install git+https://github.com/hykilpikonna/hyfetch.git@master
* 🖼️ Distro - Add Project Sasanqua ([dylanaraps#2264](https://github.com/dylanaraps/neofetch/pull/2264))
* 🖼️ Distro - Add Kali small variant ([dylanaraps#2242](https://github.com/dylanaraps/neofetch/pull/2242))
* 🖼️ Distro - Fix CachyOS matching ([dylanaraps#2026](https://github.com/dylanaraps/neofetch/pull/2026))
* 🖼 WM - Fix wm detection with `fuser` (#39)
* 🖼️ Memory - Make memory unit decimal calculation more accurate (#52)
* 🖼 Packages - Fix squirrel (Stock Linux) package count detection (#39)
* 🖼 Packages - Support cargo bin environment variable (#49)
* 🖼 WM - Fix wm detection with `fuser` ([#39](https://github.com/hykilpikonna/hyfetch/pull/39))
* 🖼️ Memory - Make memory unit decimal calculation more accurate ([#52](https://github.com/hykilpikonna/hyfetch/pull/52))
* 🖼 Packages - Fix squirrel (Stock Linux) package count detection ([#39](https://github.com/hykilpikonna/hyfetch/pull/39))
* 🖼 Packages - Support cargo bin environment variable ([#49](https://github.com/hykilpikonna/hyfetch/pull/49))
* 🖼 Packages - Add tea.xyz package manager (issue [dylanaraps#2235](https://github.com/dylanaraps/neofetch/pull/2235))
### 1.4.4
* 🌈 Fix Python 3.11 compatibility (#35)
* 🌈 Fix Python 3.11 compatibility ([#35](https://github.com/hykilpikonna/hyfetch/pull/35))
* 🌈 Fix many overflow problems when screen is too small
* 🖼️ Distro - Add Enso ([dylanaraps#2233](https://github.com/dylanaraps/neofetch/pull/2233))
* 🖼️ Memory - Optimize and fix memory unit conversion ([dylanaraps#2225](https://github.com/dylanaraps/neofetch/pull/2225))
* 🖼️ DE - Add dwl window manager ([dylanaraps#2234](https://github.com/dylanaraps/neofetch/pull/2234))
* 🖼️ DE - Fix XDG session detection for X11 ([dylanaraps#2232](https://github.com/dylanaraps/neofetch/pull/2232))
* 🖼️ CPU - Fix model detection for loongson (#34)
* 🖼️ CPU - Fix model detection for loongson ([#34](https://github.com/hykilpikonna/hyfetch/pull/34))
### 1.4.3
@@ -161,33 +244,33 @@ pip install git+https://github.com/hykilpikonna/hyfetch.git@master
* 🌈 **Optimize experience on light-themed terminals**
* 🌈 Fix bugs with lightness and light-mode config not applying
* 🌈 Fix color alignment for distros with first color ≠ `${c1}` (e.g. Ubuntu Budgie)
* 🌈 Add unlabeled flags (#25)
* 🌈 Add gender nonconforming & femboy & tomboy flags (#32)
* 🌈 Add unlabeled flags ([#25](https://github.com/hykilpikonna/hyfetch/pull/25))
* 🌈 Add gender nonconforming & femboy & tomboy flags ([#32](https://github.com/hykilpikonna/hyfetch/pull/32))
* 🌈 Fix jailbreak iOS shell `killed: 9` issue caused by ld signature check.
* 🖼️ Distro - Add garuda_small ([dylanaraps#2215](https://github.com/dylanaraps/neofetch/pull/2215))
* 🖼️ Distro - Add Cobalt Linux ([dylanaraps#2213](https://github.com/dylanaraps/neofetch/pull/2213))
* 🖼️ Distro - Add VanillaOS ([dylanaraps#2222](https://github.com/dylanaraps/neofetch/pull/2222))
* 🖼️ Distro - Surround macOS build number in parentheses (#28)
* 🖼️ Misc - Auto select stdout mode based on tty detection (#31)
* 🖼️ Bug Fix - Fix cols coloring reset for bash 3.2 (#24)
* 🖼️ Distro - Surround macOS build number in parentheses ([#28](https://github.com/hykilpikonna/hyfetch/pull/28))
* 🖼️ Misc - Auto select stdout mode based on tty detection ([#31](https://github.com/hykilpikonna/hyfetch/pull/31))
* 🖼️ Bug Fix - Fix cols coloring reset for bash 3.2 ([#24](https://github.com/hykilpikonna/hyfetch/pull/24))
### 1.4.2
* 🌈 Detailed runnning/contributing instructions in README.md (#21)
* 🖼️ Distro - Add Stock Linux (#23)
* 🌈 Detailed runnning/contributing instructions in README.md ([#21](https://github.com/hykilpikonna/hyfetch/pull/21))
* 🖼️ Distro - Add Stock Linux ([#23](https://github.com/hykilpikonna/hyfetch/pull/23))
* 🖼️ Distro - Add DietPi ([dylanaraps#1706](https://github.com/dylanaraps/neofetch/pull/1706))
* 🖼️ Distro - Add OmniOS illumos ([dylanaraps#2196](https://github.com/dylanaraps/neofetch/pull/2196))
* 🖼️ Distro - Add Droidian ([dylanaraps#2201](https://github.com/dylanaraps/neofetch/pull/2201))
* 🖼️ Distro - Add HamoniKR ([dylanaraps#2210](https://github.com/dylanaraps/neofetch/pull/2210))
* 🖼️ Song - Add support for TIDAL HiFi (#22)
* 🖼️ Song - Add support for TIDAL HiFi ([#22](https://github.com/hykilpikonna/hyfetch/pull/22))
* 🖼️ CPU - Detect multiple CPU models for ARM
* 🖼️ Misc - Better defaults: Show RAM in GiB, RAM percentage, CPU speed rounding, refresh rate
* 🖼️ Bug Fix - Fix bash 5.2 column cut off issue (#24)
* 🖼️ Bug Fix - Fix bash 5.2 column cut off issue ([#24](https://github.com/hykilpikonna/hyfetch/pull/24))
### 1.4.1
* 🌈 Paginate flags (#14)
* 🌈 Add release workflow (#15)
* 🌈 Paginate flags ([#14](https://github.com/hykilpikonna/hyfetch/pull/14))
* 🌈 Add release workflow ([#15](https://github.com/hykilpikonna/hyfetch/pull/15))
* 🌈 Create automatic release script
* 🌈 Config page - Give warning when terminal size is too small
* 🌈 Config page - Optimize color arrangement selection on small screens
@@ -208,7 +291,7 @@ pip install git+https://github.com/hykilpikonna/hyfetch.git@master
### 1.4.0
* 🌈 Add finsexual flag (#12)
* 🌈 Add finsexual flag ([#12](https://github.com/hykilpikonna/hyfetch/pull/12))
* 🚀 Addressed a total of 128 currently open pull requests from neofetch
<details>
@@ -424,11 +507,11 @@ pip install git+https://github.com/hykilpikonna/hyfetch.git@master
### 1.0.5
* Fix terminal emulator detection ([PR #2](https://github.com/hykilpikonna/hyfetch/pull/2))
* Fix terminal emulator detection ([PR [#2](https://github.com/hykilpikonna/hyfetch/pull/2)](https://github.com/hykilpikonna/hyfetch/pull/2))
### 1.0.4
* Add more flags ([PR #1](https://github.com/hykilpikonna/hyfetch/pull/1))
* Add more flags ([PR [#1](https://github.com/hykilpikonna/hyfetch/pull/1)](https://github.com/hykilpikonna/hyfetch/pull/1))
### 1.0.3
-36
View File
@@ -1,36 +0,0 @@
with import <nixpkgs> {};
rec {
hyfetch = python3Packages.buildPythonPackage rec {
pname = "HyFetch";
version = "1.0.7";
src = pythonPackages.fetchPypi {
inherit pname version;
hash = "sha256-3/6/3EtTqHXTMuRIo2nclIxYSzOFvQegR29OJsKMQU4=";
};
propagatedBuildInputs = with python3Packages; [
typing-extensions
setuptools
];
doCheck = false;
meta = with lib; {
description = "neofetch with pride flags <3";
longDescription = ''
HyFetch is a command-line system information tool fork of neofetch.
HyFetch displays information about your system next to your OS logo
in ASCII representation. The ASCII representation is then colored in
the pattern of the pride flag of your choice. The main purpose of
HyFetch is to be used in screenshots to show other users what
operating system or distribution you are running, what theme or
icon set you are using, etc.
'';
homepage = "https://github.com/hykilpikonna/HyFetch";
license = licenses.mit;
mainProgram = "hyfetch";
};
};
}
+7 -2
View File
@@ -1,4 +1,9 @@
from hyfetch import main
from . import main
from .color_util import printc
if __name__ == '__main__':
main.run()
try:
main.run()
except KeyboardInterrupt:
printc('&cThe program is interrupted by ^C, exiting...')
exit(0)
+1
View File
@@ -0,0 +1 @@
VERSION = '1.4.10'
+37 -5
View File
@@ -6,11 +6,33 @@ from dataclasses import dataclass, astuple
from .constants import GLOBAL_CFG
from .types import *
MINECRAFT_COLORS = ["&0/\033[0;30m", "&1/\033[0;34m", "&2/\033[0;32m", "&3/\033[0;36m", "&4/\033[0;31m",
"&5/\033[0;35m", "&6/\033[0;33m", "&7/\033[0;37m", "&8/\033[1;30m", "&9/\033[1;34m",
"&a/\033[1;32m", "&b/\033[1;36m", "&c/\033[1;31m", "&d/\033[1;35m", "&e/\033[1;33m",
"&f/\033[1;37m",
"&r/\033[0m", "&l/\033[1m", "&o/\033[3m", "&n/\033[4m", "&-/\n"]
MINECRAFT_COLORS = [
# Minecraft formatting codes
# ==========================
"&0/\033[38;5;0m", "&1/\033[38;5;4m", "&2/\033[38;5;2m", "&3/\033[38;5;6m",
"&4/\033[38;5;1m", "&5/\033[38;5;5m", "&6/\033[38;5;3m", "&7/\033[38;5;7m",
"&8/\033[38;5;8m", "&9/\033[38;5;12m", "&a/\033[38;5;10m", "&b/\033[38;5;14m",
"&c/\033[38;5;9m", "&d/\033[38;5;13m", "&e/\033[38;5;11m", "&f/\033[38;5;15m",
"&l/\033[1m", # Enable bold text
"&o/\033[3m", # Enable italic text
"&n/\033[4m", # Enable underlined text
"&k/\033[8m", # Enable hidden text
"&m/\033[9m", # Enable strikethrough text
"&r/\033[0m", # Reset everything
# Extended codes (not officially in Minecraft)
# ============================================
"&-/\n", # Line break
"&~/\033[39m", # Reset text color
"&*/\033[49m", # Reset background color
"&L/\033[22m", # Disable bold text
"&O/\033[23m", # Disable italic text
"&N/\033[24m", # Disable underlined text
"&K/\033[28m", # Disable hidden text
"&M/\033[29m", # Disable strikethrough text
]
MINECRAFT_COLORS = [(r[:2], r[3:]) for r in MINECRAFT_COLORS]
@@ -217,3 +239,13 @@ class RGB:
def is_light(self):
return self.hsl().l > 0.5
def overlay(self, color: 'RGB', alpha: float) -> 'RGB':
"""
Overlay a color on top of this color
:param color: Overlay color
:param alpha: Overlay alpha
:return: New color (original isn't modified)
"""
return RGB(*[round((1 - alpha) * v1 + alpha * v2) for v1, v2 in zip(self, color)])
+6 -2
View File
@@ -1,13 +1,14 @@
from __future__ import annotations
import os
import platform
from dataclasses import dataclass
from pathlib import Path
from .types import LightDark
from .__version__ import VERSION
CONFIG_PATH = Path.home() / '.config/hyfetch.json'
VERSION = '1.4.7'
TEST_ASCII = r"""
@@ -28,6 +29,8 @@ TEST_ASCII_WIDTH = max(len(line) for line in TEST_ASCII.split('\n'))
DEFAULT_DARK_L = 0.
IS_WINDOWS = platform.system() == 'Windows'
CACHE_PATH = Path(os.getenv("LOCALAPPDATA") or os.getenv("XDG_CACHE_HOME") or Path.home() / '.cache') / 'hyfetch'
@dataclass
class GlobalConfig:
# Global color mode default to 8-bit for compatibility
@@ -35,6 +38,7 @@ class GlobalConfig:
override_distro: str | None
debug: bool
is_light: bool
use_overlay: bool
def light_dark(self) -> LightDark:
return 'light' if self.is_light else 'dark'
@@ -45,6 +49,6 @@ class GlobalConfig:
return 0.65 if term.lower() == 'dark' else 0.4
GLOBAL_CFG = GlobalConfig(color_mode='8bit', override_distro=None, debug=False, is_light=False)
GLOBAL_CFG = GlobalConfig(color_mode='8bit', override_distro=None, debug=False, is_light=False, use_overlay=False)
MINGIT_URL = 'https://github.com/git-for-windows/git/releases/download/v2.37.2.windows.2/MinGit-2.37.2.2-busybox-32-bit.zip'
+27
View File
@@ -0,0 +1,27 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
archcraft_ascii = AsciiArt(match=r'''"archcraft_ascii"*''', color='6 1 2 3 4 5', ascii=r"""
${c1} -o\
:ooo:
.ooooo.
ooooooo.
+oooooooo.
-oooooooooo.
--:-+oooooooo.
yooo+=+sooooooo.
yoooooosooooooooo.
y+ooooooooooooooooo.
yoooooooooooooooooooo`
yoooooo+oo= :oo++ooooo`
:oooooo. +ooooo-
-ooooooo. .::. +ooosoo=
-oooooo` .oooo` +os-=o=
=ooooooo=: `oo+ :=ooo=--`.
+ooooooooos. .=sooooooo+-
.+osossos+-` `-+osososs+.
:sss+=-:` `:-=+ssss:
:=-:` `-=+:
""")
+27
View File
@@ -0,0 +1,27 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
archcraft_minimal = AsciiArt(match=r'''"archcraft_minimal"*''', color='6 1 2 3 4 5', ascii=r"""
${c1} ⢰⡆
⢠⣿⣿⡄
⢀⣾⣿⣿⣿⡀
⣼⣿⣿⣿⣿⣷⡀
⣼⣿⣿⣿⣿⣿⣿⣷
⢼⣿⣿⣿⣿⣿⣿⣿⣿⣧
⣰⣤⣈⠻⢿⣿⣿⣿⣿⣿⣿⣧
⣰⣿⣿⣿⣿⣮⣿⣿⣿⣿⣿⣿⣿⣧
⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
⣼⣿⣿⣿⣿⣿⡿⣿⣿⡟ ⠸⣿⣿⡿⣿⣿⣿⣿⣿⣷⡀
⣼⣿⣿⣿⣿⣿⡏ ⠈⣿⣿⣿⣿⣿⣷⡀
⢀⣼⣿⣿⣿⣿⣿⣿⡗ ⢀⣠⣤⣀ ⠸⣿⣿⣿⣿⣿⣿⣷⡀
⢀⣾⣿⣿⣿⣿⣿⡏⠁ ⢠⣿⣿⣿⣿⡇ ⢙⣿⣿⣻⠿⣿⣷⡀
⢀⣾⣿⣿⣿⣿⣿⣿⣷⣤⡀ ⠻⣿⣿⡿⠃ ⢀⣼⣿⣿⣿⣿⣦⣌⠙
⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏ ⢿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀
⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁ ⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄
⣠⣿⣿⣿⣿⠿⠛⠋⠁ ⠉⠙⠻⢿⣿⣿⣿⣿⣆
⡰⠟⠛⠉⠁ ⠉⠙⠛⠿⢆
""")
+29
View File
@@ -0,0 +1,29 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
astra_linux = AsciiArt(match=r'''"Astra Linux"*''', color='160 231', ascii=r"""
${c1} AA
${c1} AaaA
${c1} Aa${c2}/\${c1}aA
${c1} Aa${c2}/${c1}aa${c2}\${c1}aA
${c1} Aa${c2}/${c1}aAAa${c2}\${c1}aA
${c1} aA${c2}/${c1}aaAAaa${c2}\${c1}Aa
${c1} aA${c2}/${c1}aaAAAAaa${c2}\${c1}Aa
${c1} aaaaaaAAAAa${c2}/${c1}aaAAAAAAaa${c2}\${c1}aAAAAaaaaa
${c1} aAAa${c2}-----${c1}aaaaaAAAAAAAAAAaaaaa${c2}-----${c1}aAAa
${c1} aAA${c2}\ ${c1}aAAAAAAAAAAAAAAAAAAAAAAa${c2} /${c1}AAa
${c1} aAa${c2}\${c1}aAAA${c2}\${c1}AAAA${c2}\${c1}AAAA${c2}\${c1}AAA${c2}\${c1}AAa${c2}/${c1}aAa
${c1} aAa${c2}\${c1}aA${c2}\\${c1}AAA${c2}\\${c1}AAA${c2}\\${c1}AA${c2}\\/${c1}aAa
${c1} aAA${c2}\${c1}aA${c2}\\${c1}AAA${c2}\\${c1}AAA${c2}\\${c1}Aa${c2}/${c1}AAa
${c1} aA${c2}\${c1}aA${c2}\\${c1}AAA${c2}\\${c1}AAA${c2}\\/${c1}Aa
${c1} aA${c2}/${c1}AA${c2}\\\${c1}AA${c2}\\\${c1}AA${c2}\\\${c1}Aa
${c1} aA${c2}/\${c1}AAa${c2}\\\${c1}Aa${c2}\\\${c1}Aa${c2}\\\${c1}Aa
${c1} aA${c2}/\\${c1}AAa${c2}\\/\${c1}a${c2}\\\${c1}Aa${c2}\\${c1}Aa
${c1} aA${c2}/${c1}a${c2}\\\${c1}Aa${c2}\/${c1}AA${c2}\\\\\${c1}Aa${c2}\\${c1}Aa
${c1} aA${c2}/${c1}aA${c2}\\/${c1}aAa aAa${c2}\\\${c1}Aa${c2}\${c1}Aa
${c1} aA${c2}/\${c1}A${c2}\/${c1}Aa aA${c2}\\${c1}A${c2}\\${c1}Aa
${c1} A${c2}|/${c1}aaAa aAaa${c2}\|${c1}A
${c1} aAaa aaAa
""")
+31
View File
@@ -0,0 +1,31 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
athena = AsciiArt(match=r'''"Athena"*''', color='7 3', ascii=r"""
${c1} . ..
${c1} :####: ####.
${c1} .################
${c1} :##################
${c1}.###################.
${c1}######## #######
${c1}####### ${c2}####${c1} #####
${c1}:#######. ####
${c1} ######### ${c2}#${c1} ## #
${c1} ####### ${c2}##${c1} ####
${c1}######## ${c2}####${c1} #######
${c1}######## ${c2}#####${c1} ########
${c1}######## ${c2}#######${c1} #######
${c1} ####### ${c2}########${c1} #######
${c1} ######## ${c2}#########${c1} ######
${c1} ######## ${c2}#########${c1} #####
${c1} ####### ${c2}#########${c1} ####
${c1} ####### ${c2}#########${c1} ##
${c1} ####### ${c2}########${c1} ##
${c1} ###### ${c2}########${c1} #
${c1} ### ${c2}#######${c1}
${c1} ${c2}######${c1}
${c1} ${c2}####${c1}
${c1} ${c2}##${c1}
""")
+75 -3
View File
@@ -104,6 +104,14 @@ def detect(name: str) -> AsciiArt | None:
from .apricity import apricity
return apricity
if name.startswith('archcraft_ascii'):
from .archcraft_ascii import archcraft_ascii
return archcraft_ascii
if name.startswith('archcraft_minimal'):
from .archcraft_minimal import archcraft_minimal
return archcraft_minimal
if name.startswith('archcraft'):
from .archcraft import archcraft
return archcraft
@@ -156,6 +164,10 @@ def detect(name: str) -> AsciiArt | None:
from .arch import arch
return arch
if name.startswith('unicodearch'):
from .unicodearch import unicodearch
return unicodearch
if name.startswith('artix_small'):
from .artix_small import artix_small
return artix_small
@@ -180,6 +192,10 @@ def detect(name: str) -> AsciiArt | None:
from .aster import aster
return aster
if name.startswith('athena'):
from .athena import athena
return athena
if name.startswith('bedrock'):
from .bedrock import bedrock
return bedrock
@@ -368,6 +384,10 @@ def detect(name: str) -> AsciiArt | None:
from .deepin import deepin
return deepin
if name.startswith('openkylin'):
from .openkylin import openkylin
return openkylin
if name == 'desaos':
from .desaos import desaos
return desaos
@@ -440,6 +460,10 @@ def detect(name: str) -> AsciiArt | None:
from .eurolinux import eurolinux
return eurolinux
if name.startswith('evolutionos'):
from .evolutionos import evolutionos
return evolutionos
if name.startswith('exherbo'):
from .exherbo import exherbo
return exherbo
@@ -460,6 +484,10 @@ def detect(name: str) -> AsciiArt | None:
from .feren import feren
return feren
if name.startswith('femboyos'):
from .femboyos import femboyos
return femboyos
if name.startswith('finnix'):
from .finnix import finnix
return finnix
@@ -712,6 +740,10 @@ def detect(name: str) -> AsciiArt | None:
from .maui import maui
return maui
if name.startswith('meowix'):
from .meowix import meowix
return meowix
if name.startswith('mer'):
from .mer import mer
return mer
@@ -792,6 +824,10 @@ def detect(name: str) -> AsciiArt | None:
from .nixos import nixos
return nixos
if name.startswith('nobara'):
from .nobara import nobara
return nobara
if name.startswith('nomadbsd'):
from .nomadbsd import nomadbsd
return nomadbsd
@@ -844,9 +880,9 @@ def detect(name: str) -> AsciiArt | None:
from .openstage import openstage
return openstage
if name.startswith('openwrt'):
from .openwrt import openwrt
return openwrt
if (name.startswith('wrt') or name.endswith('wrt')):
from .wrt import wrt
return wrt
if name.startswith('open source media center') or name == 'osmc':
from .open_source_media_center import open_source_media_center
@@ -876,6 +912,10 @@ def detect(name: str) -> AsciiArt | None:
from .pacbsd import pacbsd
return pacbsd
if name.startswith('panwah'):
from .panwah import panwah
return panwah
if name.startswith('parabola_small'):
from .parabola_small import parabola_small
return parabola_small
@@ -920,6 +960,14 @@ def detect(name: str) -> AsciiArt | None:
from .pisi import pisi
return pisi
if name.startswith('pikaos'):
from .pikaos import pikaos
return pikaos
if name.startswith('phyos'):
from .phyos import phyos
return phyos
if name.startswith('pnm linux') or name.startswith('whpnm linux'):
from .pnm_linux import pnm_linux
return pnm_linux
@@ -1044,6 +1092,10 @@ def detect(name: str) -> AsciiArt | None:
from .rosa import rosa
return rosa
if name.startswith('astra linux'):
from .astra_linux import astra_linux
return astra_linux
if name.startswith('sabotage'):
from .sabotage import sabotage
return sabotage
@@ -1068,6 +1120,14 @@ def detect(name: str) -> AsciiArt | None:
from .sasanqua import sasanqua
return sasanqua
if name.startswith('salient os') or name.startswith('salientos') or name.startswith('salientos'):
from .salient_os import salient_os
return salient_os
if name.startswith('salix'):
from .salix import salix
return salix
if name.startswith('scientific'):
from .scientific import scientific
return scientific
@@ -1088,6 +1148,10 @@ def detect(name: str) -> AsciiArt | None:
from .siduction import siduction
return siduction
if name.startswith('slackel'):
from .slackel import slackel
return slackel
if name.startswith('slackware_small'):
from .slackware_small import slackware_small
return slackware_small
@@ -1260,6 +1324,10 @@ def detect(name: str) -> AsciiArt | None:
from .urukos import urukos
return urukos
if name.startswith('venom_small'):
from .venom_small import venom_small
return venom_small
if name.startswith('venom'):
from .venom import venom
return venom
@@ -1308,6 +1376,10 @@ def detect(name: str) -> AsciiArt | None:
from .windows_10 import windows_10
return windows_10
if name == 'windows95':
from .windows95 import windows95
return windows95
if name.startswith('windows'):
from .windows import windows
return windows
+25
View File
@@ -0,0 +1,25 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
evolutionos = AsciiArt(match=r'''"EvolutionOS"*''', color='4 7', ascii=r"""
${c1}\e[1;32m dddddddddddddddddddddddd
.dddd''''''''''''''''''''''dddd.
dd: dddddddddddddddddddd; dd:
dd: ldl:'''''''''''''''' dd:
dd: ldl: dd:
dd: ldl: dd:
dd: ldl: dd:
dd: ldl: dd:
dd: ldl: ddddddd; ddddd; dd:
dd: ldl: ''''''' ''''' dd:
dd: ldl: dd:
dd: ldl: dd:
dd: ldl: dd:
dd: ldl: dd:
dd: ldl: ddddddddddddddd; dd:
dddd:.''' ''''''''''''''' dddd:
dddddddddddddddddddddddddd;;'
'''''''''''''''''''''''''\e[0m
""")
+27
View File
@@ -0,0 +1,27 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
femboyos = AsciiArt(match=r'''"FemboyOS"*''', color='4', ascii=r"""
${c1}MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMWKkxkKWMMMMMMMMMMMMMMMMMMMMWKkxkKWMM
MMMMXo. .;xKWMMMMMMMMMMMMMMMMMMXo. .oXMM
MMWXx,..'..oXMMMMMMMMMMMMMMMMWKx, .lXMM
MMNo. .cOc.,xKWMMMMMMMMMMMMWXx;.....cXMM
MMXl..;kKl. .oXMMMMMMMMMMWKx;..,ok:.'o0W
WKx,.cKWNk;..lXMMMMMMMMWKx;..,o0NXl. .oN
No. .lXMMWKc.,dKWMMMMMMNo..;d0NWMNx,..lX
Nk:,:kNMMMNk:,ckNMMMMMMNxcxXWMMMMMN0ockN
MWNNNWMMMMMWNNNWMMMMMMMMWWWMMMMMMMMMWWWM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMNXKXNWMMMMMMMMMMMWNKOKWMMMMMMMMMM
MMMMMMWKdccxXMMMMMMMMMMW0o'.oXMMMMMMMMMM
MMMMMMMNO:.'o0NKkkkkkOXXo. .lXMMMMMMMMMM
MMMMMMMMNx,..;o;. .:o,..;kNMMMMMMMMMM
MMMMMMMMMNO: ... .cKWMMMMMMMMMMM
MMMMMMMMMMNx,. .;dk:. .;kNMMMMMMMMMMMM
MMMMMMMMMMMN0ocxXWNkl:,:xXWMMMMMMMMMMMMM
MMMMMMMMMMMMMWNWMMMWWNNNWMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
""")
+17
View File
@@ -0,0 +1,17 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
meowix = AsciiArt(match=r'''"Meowix"*''', color='1 3 3 4', ascii=r"""
${c1} #${c2}% ${c3}&${c4}*
${c1} ##${c2}%% ${c3}&&${c4}**
${c1} ## ${c2}%% ${c3}&& ${c4}**
${c1} ## ${c2}%% ${c3}&& ${c4}**
${c1} ## ${c2}%% ${c3}&& ${c4}**
${c1} ## ${c2}%% ${c3}&& ${c4}**
${c1} ## ${c2}%%${c3}&& ${c4}**
${c1} ## ${c2}%% ${c4}**
${c1} ## ${c4}**
${c1}## ${c4}**
""")
+24
View File
@@ -0,0 +1,24 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
nobara = AsciiArt(match=r'''"Nobara"*''', color='"#999999" "#d80a0a" "#e5b90b"', ascii=r"""
${c1} ⢀⣤⣴⣶⣶⣶⣦⣤⡀⠀⣀⣠⣤⣴⣶⣶⣶⣶⣶⣶⣶⣶⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠉⠁⠀⠀⠉⠉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀${c3}⢀⣀⣀⡀${c1}⠀⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀${c3}⢠⣾⣿⣿⣿⣿⣷⡄${c1}⠀⠻⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀${c3}⣿⣿⣿⣿⣿⣿⣿⡇${c1}⠀⣀⣀⣬⣽⣿⣿⣿⣿⣿⣿⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀${c3}⠈⠻⢿⣿⣿⡿⠟⠁${c1}⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠉⠉⠛⠛⢿⣿⣿⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀
${c2} ⠘⢿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀
${c2} ⠈⠙⠛⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠛⠛⠉⠁
""")
+25
View File
@@ -0,0 +1,25 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
openkylin = AsciiArt(match=r'''"openKylin"*''', color='2 7', ascii=r"""
${c1}
/KKK]
KKKKKKK` ]KKKK\
KKKKK/ /KKKKKKKKK\
KKKK/ ,KKKKKKKKKKKK^
,]KKK =KKK` /KKKKKKOOOOOO`
,KKKKKK =KK /` [\OOOOOOO\
\KKKKK =K ,OOOOOOO`
,KKKKK =^ \OOOOOO
,KKKK ^ OOOOOO^
*KKK^ =OOOOO^
OOKK^ OOOOOO^
\OOOK\ /OOOOOO`
OOOOOO] ,OOOOOOO^
,OOOOOOOO\] ,[OOOOOOOOO/
\OOOOOOOOOOOOOOOOOOOOO`
[OOOOOOOOOOOOOOOO/`
,[OOOOOOOOO]
""")
+10 -10
View File
@@ -5,16 +5,16 @@ from . import AsciiArt
opensuse_tumbleweed = AsciiArt(match=r'''"openSUSE Tumbleweed"* | "openSUSE_Tumbleweed"*''', color='2 7', ascii=r"""
${c2} ......
.,cdxxxoc,. .:kKMMMNWMMMNk:.
cKMMN0OOOKWMMXo. ; ;0MWk:. .:OMMk.
;WMK;. .lKMMNM, :NMK, .OMW;
cMW; 'WMMMN ,XMK, oMM'
.MMc ..;l. xMN: KM0
'MM. 'NMO oMM
cKMMN0OOOKWMMXo. A ;0MWk:' ':OMMk.
;WMK;' 'lKMMNM, :NMK' 'OMW;
cMW; WMMMN ,XMK' oMM.
.MMc ''^*~l. xMN: KM0
'MM. .NMO oMM
.MM, .kMMl xMN
KM0 .kMM0. .dl:,.. .WMd
.XM0. ,OMMK, OMMMK. .XMK
oWMO:. .;xNMMk, NNNMKl. .xWMx
:ONMMNXMMMKx; . ,xNMWKkxllox0NMWk,
..... .:dOOXXKOxl,
KM0 .kMM0' .dl>~,. .WMd
'XM0. ,OMMK' OMMM7' .XMK
*WMO:. .;xNMMk' NNNMKl. .xWMx
^ONMMNXMMMKx; V 'xNMWKkxllox0NMWk'
''''' ':dOOXXKOxl'
""")
+29
View File
@@ -0,0 +1,29 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
panwah = AsciiArt(match=r'''"Panwah"*''', color='7 1 0', ascii=r"""
${c1}
HHH
HAAAH HHH
HAAAAH HAAAH
HAAAAAAH HAAAAH
HAAAAAAH HAAAAAH
HAAAAAAAAH${c2}WWWWWWWWWWWWWWWW ${c1}HAAAAAH$
HAAAAAAAAH${c2}WWWWWWWWWWWWWWWWWWWW${c1} HAAAAAH
HAA${c2}WWWWWWWWWWWWWWWWWWWWWWWWWWWWW${c1}AAAAAH${c2}
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW${c1}WAH${c2}
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWW${c1}AAA${c2}WWWW WWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWW${c1}AAA${c2}WWWWW WWWWWWW WWWWWWWWWWWWWWW
WW${c1}AAA${c2}WWWWWWWWWWWWWWWWW WWWWW${c1}AAA${c2}WWWWWWWW
${c1}AAA${c2}WWWWW${c1}OOOOOOOOOOO${C2}WWWWWWWWWWW${c1}AAA${c2}WWWWWW
${c1}OOOO${c3}GGGGGGG${c1}OOOO${c2}WWWWWWWWWW${c1}AAA${c2}WWWW
${c1}OOO${c3}GGGGGGG${c1}OOO${c2}WWWWWWWWWWWW${c1}AAA${c2}W
${c1}OOOOOOOOO
""")
+20 -29
View File
@@ -3,34 +3,25 @@
from . import AsciiArt
parch = AsciiArt(match=r'''"parch"* | "Parch"* | "PARCH"*''', color='4 6', ascii=r"""
${c1} ,#/*%*
${c1} #. ..,..,*,,
${c1} ,/,,... ,. (/ ...
${c1} ,/,........ .,. ./(/%/ .* #*
${c1} .**,..... ...,%&. .,
${c1} ,%,.... ., ,
${c1} ,&,... .,, &. .
${c1} (%,... ..,& *.
${c1} *&*..... &,,,,,,,#& ..,&/ *. /
${c1} *&*,..... &***%&&**,& ...,&* / /
${c1} *&,.... &,**,,,**,# ..,&/ .
${c1} (/,... &***%%%(, ..,%( #
${c1} %*... #,,,% ..*% . *
${c1} %,.. .,% . /
${c1} %,. ..,,. .%
${c1} /,. ${c1} ..# .%
${c1} .,. ${c2} @@@@@# ${c1} ./ ./.
${c1} ,.. ${c2} #&%.%%@ ${c1} .#%&*
${c1} .,.. ${c2} @//(*(@, ${c1} ..
${c1} ,.. ${c2} #@ /@@, ${c1}
${c1} ... ${c2} &@ @@@ ${c1}
${c1} ,,. ${c2} (# .@@#, ${c1} ,
${c1} /,.. ${c2} *****@% #****/ ${c1} .
${c1} ((*....${c2} /***% %*** ${c1} .,.*
${c1} /&&&**,.., ${c2}* **,*,,. ${c1} ...,(&%*
${c1} %&&&#*(**,,,,,,,,,,,,,,,*//(&&&&#
${c1} /, .,....... .,,***/(/,,/
${c1} ./*/#*,,***,,***///(#%%*.
${c1}
+s;;:o-
s/sssso+/-'+\
+/ssssss/`
/ssssssss/
\ 'sssssss:
`o+;ssssssso\
/sssssssssssss\+
;ssssssssssssssss:
:sssssssssssssssssso;
/ssssssssssssssssssssss
`+ssssssssssssssssssssso\
so+'+ssssssssssssssss+'`
'` +osssssoooooosssss++oo\
/sssssssooooooosssssssso
`osssssssssoooossssssssso:
\sssssssssssssssssssss;
`+osssssssssssssss:/'
`\osssssssssso;+'
`\+;so:+-`
""")
+25
View File
@@ -0,0 +1,25 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
phyos = AsciiArt(match=r'''"phyOS"*''', color='33 33 7 1', ascii=r"""
${c1} '
.^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.^^^^^.
:777777777777777777777777777777^~7777:
.~~~~~~~~~~~~~~~~~~~~~^~7777!:!777!.
~7!!!!!!!!!!!!!!!!!^:!777~^!777~
^77777!!!!!!!!!7!^^7777^^7777^
^7777~.~~~~^. .~7777^~7777:
:!777~^!777~. !777!:~777!:
.!777!:~777!:~77~:!777!.
~777!^~7777:^~^!777~
^7777^^7777^^7777^
:7777~^!7777777:
.!777!:!7777!.
.~777!:~77~.
~7777^~~
^7777.
:77:
..
""")
+15
View File
@@ -0,0 +1,15 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
pikaos = AsciiArt(match=r'''"PikaOS"*''', color='11', ascii=r"""
${c1} /🐦🐦🐦$ /🐦/🐦 /🐦🐦🐦 /🐦🐦🐦
| 🐦__ $|__| 🐦 /🐦__ 🐦/🐦__ 🐦
| 🐦 \ 🐦/$| 🐦 /🐦 /🐦🐦🐦| 🐦 \ $| 🐦 \__/
| 🐦🐦🐦$| $| 🐦 /🐦/|____ $| 🐦 | $| 🐦🐦🐦
| 🐦____/| $| 🐦🐦🐦/ /🐦🐦🐦| 🐦 | 🐦\____ 🐦
| 🐦 | $| 🐦_ 🐦 /🐦__ $| 🐦 | 🐦/🐦 \ 🐦
| 🐦 | $| 🐦 \ $| 🐦🐦🐦| 🐦🐦🐦| 🐦🐦🐦/
|__/ |__|__/ \__/\_______/\______/ \______/ .
""")
+21 -19
View File
@@ -2,24 +2,26 @@
from . import AsciiArt
reborn_os = AsciiArt(match=r'''"Reborn OS"* | "Reborn"*''', color='2 2 8', ascii=r"""
${c3}
mMMMMMMMMM MMMMMMMMMm
NM MN
MM ${c1}dddddddd dddddddd ${c3}MN
mM ${c1}dd dd ${c3}MM
${c1}dd hhhhhh hhhhh dd
${c3}mM ${c1}hh hh ${c3}Mm
NM ${c1}hd ${c3}mMMMMMMd ${c1}dh ${c3}MN
NM ${c1}dd hh ${c3}mMMMMMMMMm ${c1}hh dd ${c3}MN
NM ${c1}dd hh ${c3}mMMMMMMMMMMm ${c1}hh dd ${c3}MN
NM ${c1}dd hh ${c3}mMMMMMMMMm ${c1}hh dd ${c3}MN
NM ${c1}hd ${c3}mMMMMMMm ${c1}dh ${c3}MN
mM ${c1}hh hh ${c3}Mm
${c1}dd hhhhhh hhhhhh dd
${c3}MM ${c1}dd dd ${c3}MM
MM ${c1}dddddddd dddddddd ${c3}MN
NM MN
mMMMMMMMMM MMMMMMMMMm
reborn_os = AsciiArt(match=r'''"Reborn OS"* | "Reborn"*''', color='0 4 6', ascii=r"""
${c1} .======================.
${c1}.#${c2}#*********${c1}%%${c2}*********#${c1}%:
${c1}:%${c2}#**********${c1}%%${c2}**********#${c1}%-
${c1}-%${c2}************${c1}%%${c2}************${c1}%=
${c1}+%${c2}******${c1}%%#####${c1}%%#####%%${c2}******${c1}%+
${c1}*%%#${c2}****${c1}%#${c3}+=====${c1}%%${c3}=====+${c1}#%${c2}****${c1}#%%*
${c1}*%${c2}*#${c1}#%%#%#${c3}====+++${c1}%%${c3}+++====${c1}#%#%%#${c2}#*${c1}##.
${c1}.##${c2}*****${c1}#%%%#${c3}*++${c1}%######%${c3}*+*${c1}#%%%#${c2}*****${c1}#%.
${c1}:%#${c2}*****${c1}#%${c3}*=+*${c1}#%%${c3}*++++++*${c1}%%#${c3}*+=*${c1}%#${c2}*****${c1}#%:
${c1}-%#${c2}*****${c1}#%${c3}+====*${c1}%${c3}*++++++++*${c1}%#${c3}====+${c1}%#${c2}******${c1}%-
${c1}-%#${c2}*****${c1}#%${c3}+====*${c1}%${c3}*++++++++*${c1}%#${c3}====+${c1}%#${c2}******${c1}%=
${c1}:%#${c2}*****${c1}#%${c3}*=+*${c1}#%%${c3}*++++++*${c1}%%#${c3}*+=*${c1}%#${c2}*****${c1}#%-
${c1}.##${c2}*****${c1}#%%%#${c3}*+*${c1}%######%${c3}*+*${c1}#%%%#${c2}*****${c1}#%:
${c1}.##${c2}**${c1}#%%#%#${c3}====+++${c1}%%${c3}+++====${c1}#%#%%#${c2}#*${c1}##.
${c1}*%%#${c2}****${c1}%#${c3}+=====${c1}%%${c3}=====+${c1}#%${c2}****${c1}#%%*
${c1}+%${c2}******${c1}%%#####%%#####%%${c2}******${c1}%*
${c1}-%${c2}************${c1}%%${c2}************${c1}%=
${c1}:%${c2}#**********${c1}%%${c2}**********#${c1}%-
${c1}:%${c2}#*********${c1}%%${c2}*********#${c1}%:
${c1}.======================.
""")
+27
View File
@@ -0,0 +1,27 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
salient_os = AsciiArt(match=r'''"Salient OS"* | "SalientOS"* | "salientos"*''', color='6 6 7 1', ascii=r"""
${c1} 00xxxx0
00xxxxxx0
0xxxxxxxxx 000000
0xxxxxxxxxx xxxxxxxxxx0
0xxxxxxxxxxx0 xxxxxxxxxxxxx0
0xxxxxxxxxxxx0 0xxxxxxxxxxxxxx0
0xxxxxxxxxxxxx0 0xxxxxxxxxxxxxxx0
0xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx0
xxxxxxxxxxxxxxxx0 0xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx 0xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx0 xxxxxxxxxxxxxx
0xxxxxxxxxxxxxxxxxx0 0xxxxxxxxxxxx0
0xxxxxxxxxxxxxxxxxx xxxxxxxxxxx0
0xxxxxxxxxxxxxxxxx xxxxxxxxxx0
0xxxxxxxxxxxxxxxx xxxxxxxxx0
0xxxxxxxxxxxx0 0xxxxxxx0
0xxxxxxx0 xxxxxx0
0xxx00
x00
""")
+27
View File
@@ -0,0 +1,27 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
salix = AsciiArt(match=r'''"Salix"*''', color='2', ascii=r"""
${c1} __s_aaaaaaaaauuoXSSSSSSSS:
._xSSSSSSSSSSSSSSSSSSSSSSSSSS:
_aSSSSSSSSSSSSSSSSSSSSSSSSSSSSS:
_xSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS:
<XSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS:
-"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'
.ssssssssssssssssssssssssssssssssssss
{SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSl
oSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS;
:XSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS;
{SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
-"\"\""\"\""\"\""\"\""\"\""\"\""\"\""\"\""\"\""\"\""\"\"\""'
<assssssssssssssssssssssssssssssss>
nSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS}
nSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS}`
XSSSSSSSSSSSSSSSSSSSSSSSSSSSS"`
SSSSSSSSSSSSSSSSSSSSSSSSS!"`
-"\"\""\"\""\"\""\"\""\"\""\"\""\"\""`
""")
+29
View File
@@ -0,0 +1,29 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
slackel = AsciiArt(match=r'''"Slackel"*''', color='3', ascii=r"""
${c1} _aawmmmmmwwaaaaas,,,_.
.ammmmm###mmmmmmm###BQmm##mws
.am###mmBmBmBmBmBmBmmmmm#mmmm#2
<q###mmBmBmBmBmBmBmBmBmBmBmmBmZ`
um#mmmBmBm##U##mmBmBmBmWmmBmWm#(
.wm#mmBBmm#Y~ ~XmBmBmWmmmmmBm#e
.dm#mmWmm#Z' ]#mBmBmmBZ!"\"\""`
.dm#mmBmm#2` ]mmmBmBm#2
jm#mmWmm#2` dmmBmBmB#(
)m##mBmmWZ` )##mBmBmmZ
:dmmmBmBm#' .d#mBmBmWZ(
j#mmBmBmme jmmmBmBm#2
_m#mBmWmmm' )mmmBmBmmZ`
]##mBmmm#2 <m#mBmBmB#^
dmmmBmWm#C <m#mBmBmB#(
ZmmBmBmmmh. _jm#mmBmBm#(
XBmBmBmBmm6s_aum##mmBmBm&^
3$mBmBmBmmm#mmmmmmBmBm#2'
+ZmBmBmWmBmBmWmmBmBm##!
)ZmBmBmmmBmBmmBmB##!`
-4U#mBmWmBmBm##2"
-!!XU##US*?"-
""")
+26
View File
@@ -0,0 +1,26 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
unicodearch = AsciiArt(match=r'''"unicodearch"*''', color='6 6 7 1', ascii=r"""
${c1}
▟█▙
▟███▙
▟█████▙
▟███████▙
▂▔▀▜██████▙
▟██▅▂▝▜█████▙
▟█████████████▙
▟███████████████▙
▟█████████████████▙
▟███████████████████▙
▟█████████▛▀▀▜████████▙
▟████████▛ ▜███████▙
▟█████████ ████████▙
▟██████████ █████▆▅▄▃▂
▟██████████▛ ▜█████████▙
▟██████▀▀▀ ▀▀██████▙
▟███▀▘ ▝▀███▙
▟▛▀ ▀▜▙
""")
+19 -17
View File
@@ -4,22 +4,24 @@ from . import AsciiArt
vanilla = AsciiArt(match=r'''"Vanilla"*''', color='11 15', ascii=r"""
${c1}
.----:
.-------.
:---::----:
.----::-----.
......... :----::-----: ..:::-::::..
.-----------------::------------------:
----::-----------::----------::::---:
-----:::--------::-------:::-------
:------::::--::...:::::---------:
.---------::.. ..:---------.
.::-----::.. .::----::.
.:------:.......:-------:
.--------::::::::-:::-------.
.-------::-----.:-----::------.
-----::------: :------::-----
:--::--------: .-------::---:
:----------:: .:----------
.OO.
.OOOO.
.OO${c2}II${c1}OO.
IOOO${c2}II${c1}OOOI
.OOOO${c2}II${c1}OOOO.
............IOOOO${c2}II${c1}OOOOI............
OOOOOOOOOOOOOOOOOO${c2}II${c1}OOOOOOOOOOOOOOOOOO
OOOO${c2}II${c1}OOOOOOOOOOO${c2}II${c1}OOOOOOOOOOO${c2}II${c1}OOOO
OOOOO${c2}III${c1}OOOOOOOO${c2}II${c1}OOOOOOOO${c2}III${c1}OOOOO
OOOOOOO${c2}IIII${c1}OO${c2}I....I${c1}OO${c2}IIII${c1}OOOOOOO
OOOOOOOOOO${c2}II.. ..II${c1}OOOOOOOOOO
OOOOOOO${c2}II. .II${c1}OOOOOOO
OOOOOO${c2}II:......:II${c1}OOOOOO
OOOOOOOOO${c2}IIIIIIII${c1}OOOOOOOOO
OOOOOO${c2}II${c1}OOOOOOOOOOOO${c2}II${c1}OOOOOO
OOOO${c2}II${c1}OOOOOOOI IOOOOOO${c2}II${c1}OOOO
IOO${c2}II${c1}OOOOOOOO: :OOOOOOOO${c2}II${c1}OOI
IOOOOOOOOOOII IIOOOOOOOOOOI
""")
+20 -15
View File
@@ -3,20 +3,25 @@
from . import AsciiArt
venom = AsciiArt(match=r'''"Venom"*''', color='8 4', ascii=r"""
${c1} ::::::: :::::::
mMMMMMMm dMMMMMMm
/MMMMMMMo +MMMMMMM/
yMMMMMMN mMMMMMMy
NMMMMMMs oMMMMMMm
+MMMMMMN: NMMMMMM+
hMMMMMMy sMMMMMMy
:NMMMMMM::NMMMMMN:
oMMMMMMyyMMMMMM+
dMMMMMMMMMMMMh
/MMMMMMMMMMMN:
sMMMMMMMMMMo
mMMMMMMMMd
+MMMMMMMN:
::::::
${c1}
`-`
-yys+/-`
`oyyyyy: /osyyyyso+:.
/yyyyy+`+yyyyyyyyyys/.
.-yyyyys.:+//+oyyyyyyyo.
`oy/`oyyyyy/ ./syyyyy:
syyys`:yyyyyo` :yyyyy:
/yyyyo .syyyyy- .yyyyy.
yyyyy. +yyyyy/ /yyyy/
`yyyyy :yyyyys` -yyyyo
yyyyy. `syyyyy- /yyyy/
/yyyyo /yyyyy+ .yyyyy.
syyyys. -yyyyys.:yyyy:
`oyyyyyo-` `oyyyyy:.sy:
:syyyyyyso+/++`/yyyyyo``
-oyyyyyyyyyyy-.syyyys.
-/+osyyyyso.`+yyyyy/
.-/+syo`
`.
""")
+18
View File
@@ -0,0 +1,18 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
venom_small = AsciiArt(match=r'''"venom_small"*''', color='8 4', ascii=r"""
${c1} ++**
*===**====+*
*====* +===+
*==*+===* *===*
*===* *===+ *===*
*===* +===+ *===*
*===* +===* *===*
*===* *===+*==*
+===+ *===+=*
*+====**===*
**++
""")
+25
View File
@@ -0,0 +1,25 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
windows95 = AsciiArt(match=r'''"Windows95"''', color='6 4 3 2 1 0', ascii=r"""
${c6} ___
.--=+++++=-:.
. _ *%@@@@@@@@@@@@@@*
*:+:.__ :+* @@@ @"${c5}_*&%${c6}@@${c4}%&&&*${c6}"@@@
"+.-#+ +%* " _ ${c5}++&&&%${c6}@@${c4}%&&&&&#${c6}@@
${c5} " , ${c6}%@@ ${c5}&&&&&%${c6}@@${c4}%&&&&&#${c6}@@
${c5} * oo *# ${c6}" _ ${c5}&&&&&%${c6}@@${c4}%&&&&&#${c6}@@
${c5} " , ${c6}%@@ ${c5}&&&&"${c6}@@@@#*${c4}"&&&${c6}@@
.${c5} * oo *# ${c6}" _ %@@@@@@@@@@@@@@@@
*:+:.__ :=* %@@ @"${c1}**&%${c6}@@${c3}%&&&*${c6}"@@@
"+.-#+ +%* " _ ${c1}&&&&&%${c6}@@${c3}%&&&&&#${c6}@@
${c1} " , ${c6}%@@ ${c1}&&&&&%${c6}@@${c3}%&&&&&#${c6}@@
${c1} * oo *# ${c6}" _ ${c1}&&&&&%${c6}@@${c3}%&&&&&#${c6}@@
${c1} " , ${c6}%@@ ${c1}&&*"${c6}%@@@@@@${c3}"*%&${c6}@@
.${c1} * oo *# ${c6}" _ @@@@@@@@@@@@@@@@@
*:+:.__ :+# @@@ @%#=+"\"\""\""+==%#@
"+.-#+ +%* %+" " ":@
" "
""")
+16
View File
@@ -0,0 +1,16 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
wrt = AsciiArt(match=r'''*"Wrt"*''', color='4 7 1', ascii=r"""
${c1} _______
| |.-----.-----.-----.
| - || _ | -__| |
|_______|| __|_____|__|__|
|__|
________ __
| | | |.----.| |_
| | | || _|| _|
|________||__| |____|
""")
+68 -78
View File
@@ -2,14 +2,14 @@
from __future__ import annotations
import argparse
import datetime
import json
import random
import traceback
from itertools import permutations
from math import ceil
from typing import Iterable
from . import termenv, neofetch_util
from . import termenv, neofetch_util, pride_month
from .color_scale import Scale
from .color_util import clear_screen
from .constants import *
@@ -34,50 +34,6 @@ def check_config(path) -> Config:
return create_config()
def literal_input(prompt: str, options: Iterable[str], default: str, show_ops: bool = True) -> str:
"""
Ask the user to provide an input among a list of options
:param prompt: Input prompt
:param options: Options
:param default: Default option
:param show_ops: Show options
:return: Selection
"""
options = list(options)
lows = [o.lower() for o in options]
if show_ops:
op_text = '|'.join([f'&l&n{o}&r' if o == default else o for o in options])
printc(f'{prompt} ({op_text})')
else:
printc(f'{prompt} (default: {default})')
def find_selection(sel: str):
if not sel:
return None
# Find exact match
if sel in lows:
return options[lows.index(sel)]
# Find starting abbreviation
for i, op in enumerate(lows):
if op.startswith(sel):
return options[i]
return None
selection = input('> ').lower() or default
while not find_selection(selection):
print(f'Invalid selection! {selection} is not one of {"|".join(options)}')
selection = input('> ').lower() or default
print()
return find_selection(selection)
def create_config() -> Config:
"""
Create config interactively
@@ -90,7 +46,7 @@ def create_config() -> Config:
asc = get_distro_ascii()
asc_width, asc_lines = ascii_size(asc)
logo = color("&b&lhyfetch&r" if det_bg is None or det_bg.is_light() else "&b&lhy&f&lfetch&r")
logo = color("&l&bhyfetch&~&L" if det_bg is None or det_bg.is_light() else "&l&bhy&ffetch&~&L")
title = f'Welcome to {logo} Let\'s set up some colors first.'
clear_screen(title)
@@ -100,7 +56,7 @@ def create_config() -> Config:
nonlocal title, option_counter
if not k.endswith(":"):
k += ':'
title += f"\n&e{option_counter}. {k.ljust(30)} &r{v}"
title += f"\n&e{option_counter}. {k.ljust(30)} &~{v}"
option_counter += 1
def print_title_prompt(prompt: str):
@@ -110,10 +66,12 @@ def create_config() -> Config:
# 0. Check term size
try:
term_len, term_lines = os.get_terminal_size().columns, os.get_terminal_size().lines
if term_len < 2 * asc_width + 4 or term_lines < 30:
term_len_min = 2 * asc_width + 4
term_lines_min = 30
if term_len < term_len_min or term_lines < term_lines_min:
printc(f'&cWarning: Your terminal is too small ({term_len} * {term_lines}). \n'
f'Please resize it for better experience.')
input('Press any key to ignore...')
f'Please resize it to at least ({term_len_min} * {term_lines_min}) for better experience.')
input('Press enter to ignore...')
except:
# print('Warning: We cannot detect your terminal size.')
pass
@@ -153,7 +111,7 @@ def create_config() -> Config:
return det_bg.is_light(), 'Detected background color'
clear_screen(title)
inp = literal_input(f'2. Is your terminal in &blight mode&r or &4dark mode&r?',
inp = literal_input(f'2. Is your terminal in &blight mode&~ or &4dark mode&~?',
['light', 'dark'], 'dark')
return inp == 'light', 'Selected background color'
@@ -341,6 +299,36 @@ def create_config() -> Config:
return c
def create_parser() -> argparse.ArgumentParser:
# Create CLI
hyfetch = color('&l&bhyfetch&~&L')
parser = argparse.ArgumentParser(description=color(f'{hyfetch} - neofetch with flags <3'), prog="hyfetch")
parser.add_argument('-c', '--config', action='store_true', help=color(f'Configure hyfetch'))
parser.add_argument('-C', '--config-file', dest='config_file', default=CONFIG_PATH, help=f'Use another config file')
parser.add_argument('-p', '--preset', help=f'Use preset', choices=list(PRESETS.keys()))
parser.add_argument('-m', '--mode', help=f'Color mode', choices=['8bit', 'rgb'])
parser.add_argument('-b', '--backend', help=f'Choose a *fetch backend', choices=['qwqfetch', 'neofetch', 'fastfetch', 'fastfetch-old'])
parser.add_argument('--args', help=f'Additional arguments pass-through to backend')
parser.add_argument('--c-scale', dest='scale', help=f'Lighten colors by a multiplier', type=float)
parser.add_argument('--c-set-l', dest='light', help=f'Set lightness value of the colors', type=float)
parser.add_argument('--c-overlay', action='store_true', dest='overlay', help=f'Use experimental overlay color adjusting instead of HSL lightness')
parser.add_argument('-V', '--version', dest='version', action='store_true', help=f'Check version')
parser.add_argument('--june', action='store_true', help=f'Show pride month easter egg')
parser.add_argument('--debug', action='store_true', help=f'Debug mode')
parser.add_argument('--distro', '--test-distro', dest='distro', help=f'Test for a specific distro')
parser.add_argument('--ascii-file', help='Use a specific file for the ascii art')
# Hidden debug arguments
# --test-print: Print the ascii distro and exit
parser.add_argument('--test-print', action='store_true', help=argparse.SUPPRESS)
# --ask-exit: Ask for input before exiting
parser.add_argument('--ask-exit', action='store_true', help=argparse.SUPPRESS)
return parser
def run():
# Optional: Import readline
try:
@@ -353,29 +341,13 @@ def run():
import colorama
colorama.just_fix_windows_console()
# Create CLI
hyfetch = color('&b&lhyfetch&r')
parser = argparse.ArgumentParser(description=color(f'{hyfetch} - neofetch with flags <3'))
parser.add_argument('-c', '--config', action='store_true', help=color(f'Configure {hyfetch}'))
parser.add_argument('-C', '--config-file', dest='config_file', default=CONFIG_PATH, help=f'Use another config file')
parser.add_argument('-p', '--preset', help=f'Use preset', choices=PRESETS.keys())
parser.add_argument('-m', '--mode', help=f'Color mode', choices=['8bit', 'rgb'])
parser.add_argument('-b', '--backend', help=f'Choose a *fetch backend', choices=['neofetch', 'fastfetch', 'fastfetch-old'])
parser.add_argument('--c-scale', dest='scale', help=f'Lighten colors by a multiplier', type=float)
parser.add_argument('--c-set-l', dest='light', help=f'Set lightness value of the colors', type=float)
parser.add_argument('-V', '--version', dest='version', action='store_true', help=f'Check version')
parser.add_argument('--debug', action='store_true', help=f'Debug mode')
parser.add_argument('--distro', '--test-distro', dest='distro', help=f'Test for a specific distro')
# Hidden debug arguments
# --test-print: Print the ascii distro and exit
parser.add_argument('--test-print', action='store_true', help=argparse.SUPPRESS)
# --ask-exit: Ask for input before exiting
parser.add_argument('--ask-exit', action='store_true', help=argparse.SUPPRESS)
parser = create_parser()
args = parser.parse_args()
# Use a custom distro
GLOBAL_CFG.override_distro = args.distro
GLOBAL_CFG.use_overlay = args.overlay
if args.version:
print(f'Version is {VERSION}')
return
@@ -384,10 +356,6 @@ def run():
ensure_git_bash()
check_windows_cmd()
# Use a custom distro
if args.distro:
GLOBAL_CFG.override_distro = args.distro
if args.debug:
GLOBAL_CFG.debug = True
@@ -406,6 +374,26 @@ def run():
# Load config or create config
config = create_config() if args.config else check_config(args.config_file)
# Check if it's June (pride month)
now = datetime.datetime.now()
june_path = CACHE_PATH / f'animation-displayed-{now.year}'
if now.month == 6 and now.year not in config.pride_month_shown and not june_path.is_file() and os.isatty(sys.stdout.fileno()):
args.june = True
if args.june and not config.pride_month_disable:
pride_month.start_animation()
print()
print("Happy pride month!")
print("(You can always view the animation again with `hyfetch --june`)")
print()
if not june_path.is_file():
june_path.parent.mkdir(parents=True, exist_ok=True)
june_path.touch()
# Use a custom distro
GLOBAL_CFG.override_distro = args.distro or config.distro
# Param overwrite config
if args.preset:
config.preset = args.preset
@@ -431,7 +419,9 @@ def run():
# Run
try:
neofetch_util.run(preset, config.color_align, config.backend)
asc = get_distro_ascii() if not args.ascii_file else Path(args.ascii_file).read_text("utf-8")
asc = config.color_align.recolor_ascii(asc, preset)
neofetch_util.run(asc, config.backend, args.args or '')
except Exception as e:
print(f'Error: {e}')
traceback.print_exc()
+4 -1
View File
@@ -16,6 +16,9 @@ class Config:
lightness: float | None = None
color_align: ColorAlignment = field(default_factory=lambda: ColorAlignment('horizontal'))
backend: BackendLiteral = "neofetch"
distro: str | None = None
pride_month_shown: list[int] = field(default_factory=list) # This is deprecated, see issue #136
pride_month_disable: bool = False
@classmethod
def from_dict(cls, d: dict):
@@ -24,4 +27,4 @@ class Config:
def save(self):
CONFIG_PATH.parent.mkdir(exist_ok=True, parents=True)
CONFIG_PATH.write_text(json_stringify(self), 'utf-8')
CONFIG_PATH.write_text(json_stringify(self, indent=4), 'utf-8')
+94 -29
View File
@@ -12,6 +12,7 @@ from dataclasses import dataclass
from pathlib import Path
from subprocess import check_output
from tempfile import TemporaryDirectory
from typing import Iterable
import pkg_resources
@@ -25,6 +26,50 @@ from .types import BackendLiteral, ColorAlignMode
RE_NEOFETCH_COLOR = re.compile('\\${c[0-9]}')
def literal_input(prompt: str, options: Iterable[str], default: str, show_ops: bool = True) -> str:
"""
Ask the user to provide an input among a list of options
:param prompt: Input prompt
:param options: Options
:param default: Default option
:param show_ops: Show options
:return: Selection
"""
options = list(options)
lows = [o.lower() for o in options]
if show_ops:
op_text = '|'.join([f'&l&n{o}&L&N' if o == default else o for o in options])
printc(f'{prompt} ({op_text})')
else:
printc(f'{prompt} (default: {default})')
def find_selection(sel: str):
if not sel:
return None
# Find exact match
if sel in lows:
return options[lows.index(sel)]
# Find starting abbreviation
for i, op in enumerate(lows):
if op.startswith(sel):
return options[i]
return None
selection = input('> ').lower() or default
while not find_selection(selection):
print(f'Invalid selection! {selection} is not one of {"|".join(options)}')
selection = input('> ').lower() or default
print()
return find_selection(selection)
def term_size() -> tuple[int, int]:
"""
Get terminal size
@@ -106,7 +151,7 @@ class ColorAlignment:
# Add new colors
if self.mode == 'horizontal':
colors = preset.with_length(len(lines))
asc = '\n'.join([l.replace(f'${{c{back}}}', colors[i].to_ansi()) + color('&r') for i, l in enumerate(lines)])
asc = '\n'.join([l.replace(f'${{c{back}}}', colors[i].to_ansi()) + color('&~&*') for i, l in enumerate(lines)])
else:
raise NotImplementedError()
@@ -121,9 +166,9 @@ class ColorAlignment:
# Add new colors
if self.mode == 'horizontal':
colors = preset.with_length(len(lines))
asc = '\n'.join([colors[i].to_ansi() + l + color('&r') for i, l in enumerate(lines)])
asc = '\n'.join([colors[i].to_ansi() + l + color('&~&*') for i, l in enumerate(lines)])
else:
asc = '\n'.join(preset.color_text(line) + color('&r') for line in lines)
asc = '\n'.join(preset.color_text(line) + color('&~&*') for line in lines)
else:
preset = preset.unique_colors()
@@ -185,7 +230,7 @@ def ensure_git_bash() -> Path:
return def_path
# Detect third-party git.exe in path
git_exe = shutil.which("git.exe") or shutil.which("git")
git_exe = shutil.which("bash") or shutil.which("git.exe") or shutil.which("git")
if git_exe is not None:
pth = Path(git_exe).parent
if (pth / r'bash.exe').is_file():
@@ -207,14 +252,17 @@ def ensure_git_bash() -> Path:
# No installation found, download a portable installation
print('Git installation not found. Git is required to use HyFetch/neofetch on Windows')
print('Downloading a minimal portable package for Git...')
from urllib.request import urlretrieve
urlretrieve(MINGIT_URL, pkg_path)
print('Download finished! Extracting...')
with zipfile.ZipFile(pkg_path, 'r') as zip_ref:
zip_ref.extractall(path)
print('Done!')
return path / r'bin\bash.exe'
if literal_input('Would you like to install a minimal package for Git? (if no is selected colors almost certainly won\'t work)', ['yes', 'no'], 'yes', False) == 'yes':
print('Downloading a minimal portable package for Git...')
from urllib.request import urlretrieve
urlretrieve(MINGIT_URL, pkg_path)
print('Download finished! Extracting...')
with zipfile.ZipFile(pkg_path, 'r') as zip_ref:
zip_ref.extractall(path)
print('Done!')
return path / r'bin\bash.exe'
else:
sys.exit()
def check_windows_cmd():
@@ -290,25 +338,44 @@ def get_distro_name():
return run_neofetch_cmd('ascii_distro_name', True)
def run(preset: ColorProfile, alignment: ColorAlignment, backend: BackendLiteral):
def run(asc: str, backend: BackendLiteral, args: str = ''):
if backend == "neofetch":
return run_neofetch(preset, alignment)
return run_neofetch(asc, args)
if backend == "fastfetch":
return run_fastfetch(preset, alignment)
return run_fastfetch(asc, args)
if backend == "fastfetch-old":
return run_fastfetch(preset, alignment, legacy=True)
return run_fastfetch(asc, args, legacy=True)
if backend == "qwqfetch":
return run_qwqfetch(asc, args)
def run_neofetch(preset: ColorProfile, alignment: ColorAlignment):
def run_qwqfetch(asc: str, args: str = ''):
"""
Run neofetch with colors
:param preset: Color palette
:param alignment: Color alignment settings
"""
asc = get_distro_ascii()
asc = alignment.recolor_ascii(asc, preset)
asc = asc.replace('\\', '\\\\')
# call qwqfetch to print string
try:
import qwqfetch
# distro_detector only return a bash variable
# so we use qwqfetch builtin distro detector
print(qwqfetch.get_ascres(asc))
except ImportError as e: # module not found etc
print("qwqfetch is not installed. Install it by executing:") # use print to output hint directly
print("pip install git+https://github.com/nexplorer-3e/qwqfetch") # TODO: public repo
raise e
def run_neofetch(asc: str, args: str = ''):
"""
Run neofetch with colors
:param asc: Ascii art
:param args: Additional arguments to pass to neofetch
"""
# Escape backslashes here because backslashes are escaped in neofetch for printf
asc = asc.replace('\\', '\\\\')
@@ -319,20 +386,19 @@ def run_neofetch(preset: ColorProfile, alignment: ColorAlignment):
path.write_text(asc)
# Call neofetch with the temp file
run_neofetch_cmd(f'--ascii --source {path.absolute()} --ascii-colors')
if args:
args = ' ' + args
run_neofetch_cmd(f'--ascii --source {path.absolute()} --ascii-colors' + args)
def run_fastfetch(preset: ColorProfile, alignment: ColorAlignment, legacy: bool = False):
def run_fastfetch(asc: str, args: str = '', legacy: bool = False):
"""
Run neofetch with colors
:param preset: Color palette
:param alignment: Color alignment settings
:param asc: Ascii art
:param args: Additional arguments to pass to fastfetch
:param legacy: Set true when using fastfetch < 1.8.0
"""
asc = get_distro_ascii()
asc = alignment.recolor_ascii(asc, preset)
# Write temp file
with TemporaryDirectory() as tmp_dir:
tmp_dir = Path(tmp_dir)
@@ -340,7 +406,7 @@ def run_fastfetch(preset: ColorProfile, alignment: ColorAlignment, legacy: bool
path.write_text(asc)
# Call fastfetch with the temp file
proc = subprocess.run(['fastfetch', '--raw' if legacy else '--file-raw', path.absolute()])
proc = subprocess.run(['fastfetch', '--raw' if legacy else '--file-raw', path.absolute(), *shlex.split(args)])
if proc.returncode == 144:
printc("&6Error code 144 detected: Please upgrade fastfetch to >=1.8.0 or use the 'fastfetch-old' backend")
@@ -358,7 +424,7 @@ def get_fore_back(distro: str | None = None) -> tuple[int, int] | None:
distro = get_distro_name().lower()
distro = distro.lower().replace(' ', '-')
for k, v in fore_back.items():
if distro == k.lower():
if distro.startswith(k.lower()):
return v
return None
@@ -366,7 +432,6 @@ def get_fore_back(distro: str | None = None) -> tuple[int, int] | None:
# Foreground-background recommendation
fore_back = {
'fedora': (2, 1),
'ubuntu': (2, 1),
'kubuntu': (2, 1),
'lubuntu': (2, 1),
'xubuntu': (2, 1),
+65 -35
View File
@@ -83,12 +83,12 @@ class ColorProfile:
for i, t in enumerate(txt):
if space_only and t != ' ':
if i > 0 and txt[i - 1] == ' ':
result += '\033[0m'
result += '\033[39;49m'
result += t
else:
result += colors[i].to_ansi(foreground=foreground) + t
result += '\033[0m'
result += '\033[39;49m'
return result
def lighten(self, multiplier: float) -> ColorProfile:
@@ -119,11 +119,35 @@ class ColorProfile:
:param term: Terminal color (can be "dark" or "light")
:return: New color profile (original isn't modified)
"""
if GLOBAL_CFG.use_overlay:
return self.overlay_dl(light, term)
term = term or GLOBAL_CFG.light_dark()
assert term.lower() in ['light', 'dark']
at_least, at_most = (True, None) if term.lower() == 'dark' else (None, True)
return self.set_light_raw(light, at_least, at_most)
def overlay_raw(self, color: RGB, alpha: float) -> 'ColorProfile':
"""
Overlay a color on top of the color profile
:param color: Color to overlay
:param alpha: Alpha value (0-1)
:return: New color profile (original isn't modified)
"""
return ColorProfile([c.overlay(color, alpha) for c in self.colors])
def overlay_dl(self, light: float, term: LightDark | None = None):
"""
Same as set_light_dl except that this function uses RGB overlaying instead of HSL lightness change
"""
term = term or GLOBAL_CFG.light_dark()
assert term.lower() in ['light', 'dark']
# If it's light bg, overlay black, else overlay white
overlay_color = RGB.from_hex('#000000' if term.lower() == 'light' else '#FFFFFF')
return self.overlay_raw(overlay_color, abs(light - 0.5) * 2)
def set_light_dl_def(self, term: LightDark | None = None):
"""
Set default lightness with respect to dark/light terminals
@@ -216,6 +240,14 @@ PRESETS: dict[str, ColorProfile] = {
'#8EA6FF',
]),
'omniromantic': ColorProfile([
'#FEC8E4',
'#FDA1DB',
'#89739A',
'#ABA7FE',
'#BFCEFF',
]),
# gay men sourced from https://www.flagcolorcodes.com/gay-men
'gay-men': ColorProfile([
'#078D70',
@@ -470,53 +502,22 @@ PRESETS: dict[str, ColorProfile] = {
'autoromantic': ColorProfile([ # symbol interpreted
'#99D9EA',
'#99D9EA',
'#99D9EA',
'#99D9EA',
'#99D9EA',
'#000000',
'#3DA542',
'#3DA542',
'#000000',
'#7F7F7F',
'#7F7F7F',
'#7F7F7F',
'#7F7F7F',
'#7F7F7F',
]),
# i didn't expect this one to work. cool!
'boyflux2': ColorProfile([
'boyflux2': ColorProfile(ColorProfile([
'#E48AE4',
'#9A81B4',
'#55BFAB',
'#FFFFFF',
'#A8A8A8',
'#81D5EF',
'#81D5EF',
'#81D5EF',
'#81D5EF',
'#81D5EF',
'#69ABE5',
'#69ABE5',
'#69ABE5',
'#69ABE5',
'#69ABE5',
'#69ABE5',
'#69ABE5',
'#69ABE5',
'#69ABE5',
'#69ABE5',
'#5276D4',
'#5276D4',
'#5276D4',
'#5276D4',
'#5276D4',
'#5276D4',
'#5276D4',
'#5276D4',
'#5276D4',
'#5276D4',
]),
]).with_weights([1, 1, 1, 1, 1, 5, 5, 5])),
"finsexual": ColorProfile([
"#B18EDF",
@@ -542,6 +543,16 @@ PRESETS: dict[str, ColorProfile] = {
'#7D2557'
]),
'pangender': ColorProfile([
'#FFF798',
'#FEDDCD',
'#FFEBFB',
'#FFFFFF',
'#FFEBFB',
'#FEDDCD',
'#FFF798',
]),
'gendernonconforming1': ColorProfile(
ColorProfile([
'#50284d',
@@ -586,6 +597,18 @@ PRESETS: dict[str, ColorProfile] = {
"#2f3fb9"
]),
'gynesexual': ColorProfile([
"#F4A9B7",
"#903F2B",
"#5B953B",
]),
'androsexual': ColorProfile([
"#01CCFF",
"#603524",
"#B799DE",
]),
# gendervoid and related flags sourced from: https://gender.fandom.com/wiki/Gendervoid
'gendervoid' : ColorProfile([
"#081149",
@@ -611,6 +634,13 @@ PRESETS: dict[str, ColorProfile] = {
"#0B130C"
]),
# used https://twitter.com/foxbrained/status/1667621855518236674/photo/1 as source and colorpicked
'nonhuman-unity' : ColorProfile([
"#177B49",
"#FFFFFF",
"#593C90"
]),
# Meme flags
'beiyang': ColorProfile([
'#DF1B12',
+127
View File
@@ -0,0 +1,127 @@
import math
from time import sleep
from hyfetch import presets
from hyfetch.color_util import RGB, color, printc
from hyfetch.constants import IS_WINDOWS
from hyfetch.neofetch_util import term_size
from hyfetch.presets import PRESETS
def key_pressed():
if IS_WINDOWS:
import msvcrt
return msvcrt.kbhit() # Non-blocking check for key press
else:
import select
import sys
return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], [])
def start_animation():
text = r"""
.======================================================.
| . . .__ . . . , . | |
| |__| _.._ ._ . [__)._.* _| _ |\/| _ ._ -+-|_ | |
| | |(_][_)[_)\_| | [ |(_](/, | |(_)[ ) | [ ) * |
| | | ._| |
'======================================================'""".strip("\n")
text_lines = text.split("\n")
text_height = len(text_lines)
text_width = len(text_lines[0])
notice = "Press enter to continue"
speed = 2
frame_delay = 1 / 25
colors: list[RGB] = []
frame = 0
w, h = term_size()
blocks = 9
block_width = w // blocks
text_start_y = h // 2 - text_height // 2
text_end_y = text_start_y + text_height
text_start_x = w // 2 - text_width // 2
text_end_x = text_start_x + text_width
notice_start_x = w - len(notice) - 1
notice_end_x = w - 1
notice_y = h - 1
# Add everything in PRESETS to colors
colors = [c for preset in PRESETS.values() for c in preset.colors]
black = RGB(0, 0, 0)
fg = RGB.from_hex("#FFE09B")
def draw_frame():
buf = ""
# Loop over the height
for y in range(h):
# Print the starting color
buf += colors[((frame + y) // block_width) % len(colors)].to_ansi_rgb(foreground=False)
buf += fg.to_ansi_rgb(foreground=True)
# Loop over the width
x = 0
while x < w:
idx = frame + x + y + int(math.sin(y + 0.5 * frame) * 2)
y_text = text_start_y <= y < text_end_y
border = 1 + int(not (y == text_start_y or y == text_end_y - 1))
# If it's a switching point
if idx % block_width == 0 or x == text_start_x - border or x == text_end_x + border \
or x == notice_start_x - 1 or x == notice_end_x + 1:
# Print the color at the current frame
c = colors[(idx // block_width) % len(colors)]
if (y_text and text_start_x - border <= x < text_end_x + border) \
or (y == notice_y and notice_start_x - 1 <= x < notice_end_x + 1):
# buf += c.set_light(0.3).to_ansi_rgb(foreground=False)
buf += c.overlay(black, 0.5).to_ansi_rgb(foreground=False)
else:
buf += c.to_ansi_rgb(foreground=False)
# If text should be printed, print text
if y_text and text_start_x <= x < text_end_x:
# Add white background
buf += text_lines[y - text_start_y][x - text_start_x]
elif y == notice_y and notice_start_x <= x < notice_end_x:
buf += notice[x - notice_start_x]
else:
buf += ' '
x += 1
# New line if it isn't the last line
if y != h - 1:
buf += color('&r\n')
print(buf, end='', flush=True)
try:
while 1:
# Clear the screen
print("\033[2J\033[H", end="")
draw_frame()
frame += speed
sleep(frame_delay)
if key_pressed():
break
except KeyboardInterrupt:
pass
# Clear the screen
printc("&r")
print("\033[2J\033[H", end="", flush=True)
if __name__ == '__main__':
start_animation()
+142
View File
@@ -0,0 +1,142 @@
# AUTOMATICALLY GENERATED by `shtab`
_shtab_hyfetch_option_strings=('-h' '--help' '-c' '--config' '-C' '--config-file' '-p' '--preset' '-m' '--mode' '-b' '--backend' '--c-scale' '--c-set-l' '-V' '--version' '--debug' '--distro' '--test-distro' '--ascii-file')
_shtab_hyfetch__p_choices=('rainbow' 'transgender' 'nonbinary' 'agender' 'queer' 'genderfluid' 'bisexual' 'pansexual' 'polysexual' 'omnisexual' 'omniromantic' 'gay-men' 'lesbian' 'abrosexual' 'asexual' 'aromantic' 'aroace1' 'aroace2' 'aroace3' 'autosexual' 'intergender' 'greygender' 'akiosexual' 'bigender' 'demigender' 'demiboy' 'demigirl' 'transmasculine' 'transfeminine' 'genderfaun' 'demifaun' 'genderfae' 'demifae' 'neutrois' 'biromantic1' 'biromantic2' 'autoromantic' 'boyflux2' 'finsexual' 'unlabeled1' 'unlabeled2' 'pangender' 'gendernonconforming1' 'gendernonconforming2' 'femboy' 'tomboy' 'gendervoid' 'voidgirl' 'voidboy' 'beiyang' 'burger')
_shtab_hyfetch___preset_choices=('rainbow' 'transgender' 'nonbinary' 'agender' 'queer' 'genderfluid' 'bisexual' 'pansexual' 'polysexual' 'omnisexual' 'omniromantic' 'gay-men' 'lesbian' 'abrosexual' 'asexual' 'aromantic' 'aroace1' 'aroace2' 'aroace3' 'autosexual' 'intergender' 'greygender' 'akiosexual' 'bigender' 'demigender' 'demiboy' 'demigirl' 'transmasculine' 'transfeminine' 'genderfaun' 'demifaun' 'genderfae' 'demifae' 'neutrois' 'biromantic1' 'biromantic2' 'autoromantic' 'boyflux2' 'finsexual' 'unlabeled1' 'unlabeled2' 'pangender' 'gendernonconforming1' 'gendernonconforming2' 'femboy' 'tomboy' 'gendervoid' 'voidgirl' 'voidboy' 'beiyang' 'burger')
_shtab_hyfetch__m_choices=('8bit' 'rgb')
_shtab_hyfetch___mode_choices=('8bit' 'rgb')
_shtab_hyfetch__b_choices=('neofetch' 'fastfetch' 'fastfetch-old')
_shtab_hyfetch___backend_choices=('neofetch' 'fastfetch' 'fastfetch-old')
_shtab_hyfetch__h_nargs=0
_shtab_hyfetch___help_nargs=0
_shtab_hyfetch__c_nargs=0
_shtab_hyfetch___config_nargs=0
_shtab_hyfetch__V_nargs=0
_shtab_hyfetch___version_nargs=0
_shtab_hyfetch___debug_nargs=0
_shtab_hyfetch___test_print_nargs=0
_shtab_hyfetch___ask_exit_nargs=0
# $1=COMP_WORDS[1]
_shtab_compgen_files() {
compgen -f -- $1 # files
}
# $1=COMP_WORDS[1]
_shtab_compgen_dirs() {
compgen -d -- $1 # recurse into subdirs
}
# $1=COMP_WORDS[1]
_shtab_replace_nonword() {
echo "${1//[^[:word:]]/_}"
}
# set default values (called for the initial parser & any subparsers)
_set_parser_defaults() {
local subparsers_var="${prefix}_subparsers[@]"
sub_parsers=${!subparsers_var}
local current_option_strings_var="${prefix}_option_strings[@]"
current_option_strings=${!current_option_strings_var}
completed_positional_actions=0
_set_new_action "pos_${completed_positional_actions}" true
}
# $1=action identifier
# $2=positional action (bool)
# set all identifiers for an action's parameters
_set_new_action() {
current_action="${prefix}_$(_shtab_replace_nonword $1)"
local current_action_compgen_var=${current_action}_COMPGEN
current_action_compgen="${!current_action_compgen_var}"
local current_action_choices_var="${current_action}_choices[@]"
current_action_choices="${!current_action_choices_var}"
local current_action_nargs_var="${current_action}_nargs"
if [ -n "${!current_action_nargs_var}" ]; then
current_action_nargs="${!current_action_nargs_var}"
else
current_action_nargs=1
fi
current_action_args_start_index=$(( $word_index + 1 ))
current_action_is_positional=$2
}
# Notes:
# `COMPREPLY`: what will be rendered after completion is triggered
# `completing_word`: currently typed word to generate completions for
# `${!var}`: evaluates the content of `var` and expand its content as a variable
# hello="world"
# x="hello"
# ${!x} -> ${hello} -> "world"
_shtab_hyfetch() {
local completing_word="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=()
prefix=_shtab_hyfetch
word_index=0
_set_parser_defaults
word_index=1
# determine what arguments are appropriate for the current state
# of the arg parser
while [ $word_index -ne $COMP_CWORD ]; do
local this_word="${COMP_WORDS[$word_index]}"
if [[ -n $sub_parsers && " ${sub_parsers[@]} " =~ " ${this_word} " ]]; then
# valid subcommand: add it to the prefix & reset the current action
prefix="${prefix}_$(_shtab_replace_nonword $this_word)"
_set_parser_defaults
fi
if [[ " ${current_option_strings[@]} " =~ " ${this_word} " ]]; then
# a new action should be acquired (due to recognised option string or
# no more input expected from current action);
# the next positional action can fill in here
_set_new_action $this_word false
fi
if [[ "$current_action_nargs" != "*" ]] && \
[[ "$current_action_nargs" != "+" ]] && \
[[ "$current_action_nargs" != *"..." ]] && \
(( $word_index + 1 - $current_action_args_start_index >= \
$current_action_nargs )); then
$current_action_is_positional && let "completed_positional_actions += 1"
_set_new_action "pos_${completed_positional_actions}" true
fi
let "word_index+=1"
done
# Generate the completions
if [[ "${completing_word}" == -* ]]; then
# optional argument started: use option strings
COMPREPLY=( $(compgen -W "${current_option_strings[*]}" -- "${completing_word}") )
else
# use choices & compgen
local IFS=$'\n' # items may contain spaces, so delimit using newline
COMPREPLY=( $([ -n "${current_action_compgen}" ] \
&& "${current_action_compgen}" "${completing_word}") )
unset IFS
COMPREPLY+=( $(compgen -W "${current_action_choices[*]}" -- "${completing_word}") )
fi
return 0
}
complete -o filenames -F _shtab_hyfetch hyfetch
+14
View File
@@ -0,0 +1,14 @@
# AUTOMATICALLY GENERATED by `shtab`
complete hyfetch \
'c/--/(mode test-distro preset config c-scale c-set-l config-file ascii-file version debug distro help backend)/' \
'c/-/(m h V C p b c -)/' \
'n/-p/(rainbow transgender nonbinary agender queer genderfluid bisexual pansexual polysexual omnisexual omniromantic gay-men lesbian abrosexual asexual aromantic aroace1 aroace2 aroace3 autosexual intergender greygender akiosexual bigender demigender demiboy demigirl transmasculine transfeminine genderfaun demifaun genderfae demifae neutrois biromantic1 biromantic2 autoromantic boyflux2 finsexual unlabeled1 unlabeled2 pangender gendernonconforming1 gendernonconforming2 femboy tomboy gendervoid voidgirl voidboy beiyang burger)/' \
'n/--preset/(rainbow transgender nonbinary agender queer genderfluid bisexual pansexual polysexual omnisexual omniromantic gay-men lesbian abrosexual asexual aromantic aroace1 aroace2 aroace3 autosexual intergender greygender akiosexual bigender demigender demiboy demigirl transmasculine transfeminine genderfaun demifaun genderfae demifae neutrois biromantic1 biromantic2 autoromantic boyflux2 finsexual unlabeled1 unlabeled2 pangender gendernonconforming1 gendernonconforming2 femboy tomboy gendervoid voidgirl voidboy beiyang burger)/' \
'n/-m/(8bit rgb)/' \
'n/--mode/(8bit rgb)/' \
'n/-b/(neofetch fastfetch fastfetch-old)/' \
'n/--backend/(neofetch fastfetch fastfetch-old)/' \
'p/*/()/'
+51
View File
@@ -0,0 +1,51 @@
#compdef hyfetch
# AUTOMATICALLY GENERATED by `shtab`
_shtab_hyfetch_commands() {
local _commands=(
)
_describe 'hyfetch commands' _commands
}
_shtab_hyfetch_options=(
"(- : *)"{-h,--help}"[show this help message and exit]"
{-c,--config}"[Configure hyfetch]"
{-C,--config-file}"[Use another config file]:config_file:"
{-p,--preset}"[Use preset]:preset:(rainbow transgender nonbinary agender queer genderfluid bisexual pansexual polysexual omnisexual omniromantic gay-men lesbian abrosexual asexual aromantic aroace1 aroace2 aroace3 autosexual intergender greygender akiosexual bigender demigender demiboy demigirl transmasculine transfeminine genderfaun demifaun genderfae demifae neutrois biromantic1 biromantic2 autoromantic boyflux2 finsexual unlabeled1 unlabeled2 pangender gendernonconforming1 gendernonconforming2 femboy tomboy gendervoid voidgirl voidboy beiyang burger)"
{-m,--mode}"[Color mode]:mode:(8bit rgb)"
{-b,--backend}"[Choose a \*fetch backend]:backend:(neofetch fastfetch fastfetch-old)"
"--c-scale[Lighten colors by a multiplier]:scale:"
"--c-set-l[Set lightness value of the colors]:light:"
{-V,--version}"[Check version]"
"--debug[Debug mode]"
{--distro,--test-distro}"[Test for a specific distro]:distro:"
"--ascii-file[Use a specific file for the ascii art]:ascii_file:"
)
_shtab_hyfetch() {
local context state line curcontext="$curcontext" one_or_more='(-)*' remainder='(*)'
if ((${_shtab_hyfetch_options[(I)${(q)one_or_more}*]} + ${_shtab_hyfetch_options[(I)${(q)remainder}*]} == 0)); then # noqa: E501
_shtab_hyfetch_options+=(': :_shtab_hyfetch_commands' '*::: :->hyfetch')
fi
_arguments -C $_shtab_hyfetch_options
case $state in
hyfetch)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:_shtab_hyfetch-$line[1]:"
case $line[1] in
esac
esac
}
typeset -A opt_args
_shtab_hyfetch "$@"
+62
View File
@@ -0,0 +1,62 @@
#!/usr/bin/env bash
# Usage: ./install-autocomplete.sh [Uninstall]
if [[ "$1" == "uninstall" ]]; then
uninstall=true
echo -n "Uninstalling "
else
echo -n "Installing "
fi
echo "autocomplete scripts for HyFetch..."
# Stop on error
set -e
# Obtain path of the current bash script
script_path="$(dirname "$(realpath "$0")")"
# Installing for a specific shell in a specific directory if it exists
install-for()
{
shell=$1
dir=$2
case $shell in
bash)
filename="hyfetch"
;;
zsh)
filename="_hyfetch"
;;
csh)
filename="hyfetch.completion.csh"
;;
*)
echo "Unknown shell: $shell"
exit 1
;;
esac
if [[ -d "$dir" ]]; then
if [[ "$uninstall" ]]; then
rm -f "$dir/$filename"
echo "⭐ Uninstalled for $shell in $dir"
else
cp "$script_path/autocomplete.$shell" "$dir/$filename"
echo "⭐ Installed for $shell in $dir"
fi
fi
}
# Copy files
install-for bash /etc/bash_completion.d
install-for bash /usr/share/bash-completion/completions
install-for zsh /usr/share/zsh/functions/Completion/Unix
install-for zsh /usr/share/zsh/site-functions
install-for zsh /usr/share/zsh-completions
install-for zsh /usr/local/share/zsh/site-functions
install-for csh /etc/profile.d
echo "Done!"
+1023 -294
View File
File diff suppressed because it is too large Load Diff
+46 -42
View File
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH NEOFETCH "1" "February 2023" "Neofetch 7.3.7" "User Commands"
.TH NEOFETCH "1" "August 2023" "Neofetch 7.3.10" "User Commands"
.SH NAME
Neofetch \- manual page for Neofetch 7.3.7
Neofetch \- manual page for Neofetch 7.3.10
.SH SYNOPSIS
.B neofetch
\fI\,func_name --option "value" --option "value"\/\fR
@@ -46,6 +46,9 @@ Hide/Show Fully Qualified Domain Name in title.
\fB\-\-package_managers\fR on/off
Hide/Show Package Manager names. (on, tiny, off)
.TP
\fB\-\-package_separate\fR on/off
Whether to separate system/user modes for supported package managers
.TP
\fB\-\-os_arch\fR on/off
Hide/Show OS architecture.
.TP
@@ -312,47 +315,48 @@ Which Distro's ascii art to print
.TP
NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy,
Android, Antergos, antiX, AOSC OS, AOSC OS/Retro, Aperio GNU/Linux,
Aperture, Apricity, Arch, ArchBox, Archcraft, ARCHlabs, ArchMerge,
ArchStrike, ArcoLinux, ArseLinux, Artix, Arya, Asahi, Aster,
AsteroidOS, astOS, Bedrock, BigLinux, Bitrig, BlackArch,
blackPanther, BLAG, BlankOn, BlueLight, Bodhi, bonsai, BSD,
BunsenLabs, CachyOS, Calculate, CalinixOS, Carbs, CBL\-Mariner,
CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, ChonkySealOS,
Chrom, Cleanjaro, Clear Linux OS, ClearOS, Clover, Cobalt, Condres,
Container Linux by CoreOS, CRUX, Crystal Linux, Cucumber,
CutefishOS, CuteOS, CyberOS, dahlia, DarkOs, Darwin, Debian, Deepin,
DesaOS, Devuan, DietPi, DracOS, DragonFly, Drauger, Droidian,
Elementary, Elive, EncryptOS, EndeavourOS, Endless, Enso, EuroLinux,
Exherbo, Exodia Predator OS, Fedora, Feren, Finnix, Floflis,
FreeBSD, FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo,
GhostBSD, glaucus, gNewSense, GNOME, GNU, GoboLinux, GrapheneOS,
Grombyang, Guix, Haiku, HamoniKR, HarDClanZ, Hash, Huayra, Hybrid,
HydroOS, Hyperbola, iglunix, instantOS, IRIX, Itc, januslinux,
Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion, Korora, KrassOS, KSLinux,
Kubuntu, LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux,
Linux Lite, Linux Mint, Linux Mint Old, Live Raizo, LMDE, Lubuntu,
Lunar, mac, Mageia, MagpieOS, Mandriva, Manjaro, MassOS, MatuusOS,
Maui, Mer, Minix, MIRACLE LINUX, MX, Namib, NekOS, Neptune, NetBSD,
Netrunner, Nitrux, NixOS, NomadBSD, Nurunner, NuTyX, Obarun,
OBRevenge, OmniOS, Open Source Media Center, OpenBSD, openEuler,
OpenIndiana, openmamba, OpenMandriva, OpenStage, openSUSE, openSUSE
Leap, openSUSE Tumbleweed, OpenWrt, OPNsense, Oracle, orchid, OS
Elbrus, PacBSD, Parabola, parch, Pardus, Parrot, Parsix, PCBSD,
PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, Pisi, PNM Linux,
Pop!_OS, Porteus, PostMarketOS, Profelis SambaBOX, Proxmox, PuffOS,
Puppy, PureOS, Q4OS, Qubes, Qubyt, Quibian, Radix, Raspbian,
ravynOS, Reborn OS, Red Star, Redcore, Redhat, Refracted Devuan,
Regata, Regolith, RhaymOS, rocky, Rosa, Sabayon, sabotage, Sailfish,
SalentOS, Sasanqua, Scientific, semc, Septor, Serene, SharkLinux,
ShastraOS, Siduction, SkiffOS, Slackware, SliTaz, SmartOS, Soda,
Solus, Source Mage, Sparky, Star, SteamOS, Stock Linux, Sulin,
Aperture, Apricity, Arch, ArchBox, Archcraft, archcraft_ascii,
archcraft_minimal, ARCHlabs, ArchMerge, ArchStrike, ArcoLinux,
ArseLinux, Artix, Arya, Asahi, Aster, AsteroidOS, astOS, Astra
Linux, Athena, Bedrock, BigLinux, Bitrig, BlackArch, blackPanther,
BLAG, BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, CachyOS,
Calculate, CalinixOS, Carbs, CBL\-Mariner, CelOS, Center, CentOS,
Chakra, ChaletOS, Chapeau, ChonkySealOS, Chrom, Cleanjaro, Clear
Linux OS, ClearOS, Clover, Cobalt, Condres, Container Linux by
CoreOS, CRUX, Crystal Linux, Cucumber, CutefishOS, CuteOS, CyberOS,
dahlia, DarkOs, Darwin, Debian, Deepin, DesaOS, Devuan, DietPi,
DracOS, DragonFly, Drauger, Droidian, Elementary, Elive, EncryptOS,
EndeavourOS, Endless, Enso, EuroLinux, EvolutionOS, Exherbo, Exodia
Predator OS, Fedora, FemboyOS, Feren, Finnix, Floflis, FreeBSD,
FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, GhostBSD,
glaucus, gNewSense, GNOME, GNU, GoboLinux, GrapheneOS, Grombyang,
Guix, Haiku, HamoniKR, HarDClanZ, Hash, Huayra, Hybrid, HydroOS,
Hyperbola, iglunix, instantOS, IRIX, Itc, januslinux, Kaisen, Kali,
KaOS, KDE, Kibojoe, Kogaion, Korora, KrassOS, KSLinux, Kubuntu,
LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux, Linux
Lite, Linux Mint, Linux Mint Old, Live Raizo, LMDE, Lubuntu, Lunar,
mac, Mageia, MagpieOS, Mandriva, Manjaro, MassOS, MatuusOS, Maui,
Meowix, Mer, Minix, MIRACLE LINUX, MX, Namib, NekOS, Neptune,
NetBSD, Netrunner, Nitrux, NixOS, Nobara, NomadBSD, Nurunner, NuTyX,
Obarun, OBRevenge, OmniOS, Open Source Media Center, OpenBSD,
openEuler, OpenIndiana, openKylin, openmamba, OpenMandriva,
OpenStage, openSUSE, openSUSE Leap, openSUSE Tumbleweed, OPNsense,
Oracle, orchid, OS Elbrus, PacBSD, Panwah, Parabola, parch, Pardus,
Parrot, Parsix, PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo,
Peppermint, phyOS, PikaOS, Pisi, PNM Linux, Pop!_OS, Porteus,
PostMarketOS, Profelis SambaBOX, Proxmox, PuffOS, Puppy, PureOS,
Q4OS, Qubes, Qubyt, Quibian, Radix, Raspbian, ravynOS, Reborn OS,
Red Star, Redcore, Redhat, Refracted Devuan, Regata, Regolith,
RhaymOS, rocky, Rosa, Sabayon, sabotage, Sailfish, SalentOS, Salient
OS, Salix, Sasanqua, Scientific, semc, Septor, Serene, SharkLinux,
ShastraOS, Siduction, SkiffOS, Slackel, Slackware, SliTaz, SmartOS,
Soda, Solus, Source Mage, Sparky, Star, SteamOS, Stock Linux, Sulin,
SunOS, SwagArch, t2, Tails, TeArch, TorizonCore, Trisquel, Twister,
Ubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE,
Ubuntu Studio, Ubuntu Sway, Ubuntu Touch, Ubuntu\-GNOME,
ubuntu_old02, Ultramarine Linux, Univalent, Univention, Uos, UrukOS,
uwuntu, Vanilla, Venom, VNux, Void, VzLinux, wii\-linux\-ngx, Windows,
Windows 10, Windows 11, XFerience, Xubuntu, yiffOS, Zorin have ascii
logos.
ubuntu_old02, Ultramarine Linux, unicodearch, Univalent, Univention,
Uos, UrukOS, uwuntu, Vanilla, Venom, VNux, Void, VzLinux, wii\-linuxngx, Windows, Windows 10, Windows 11, Windows95, Wrt, XFerience,
Xubuntu, yiffOS, Zorin have ascii logos.
.TP
NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu
have 'old' logo variants, use {distro}_old to use them.
@@ -362,8 +366,8 @@ CalinixOS, centos, cleanjaro, crux, debian, dragonfly, elementary,
fedora, freebsd, garuda, gentoo, guix, haiku, hyperbola, kali,
linuxlite, linuxmint, mac, mageia, manjaro, mx, netbsd, nixos,
openbsd, opensuse, orchid, parabola, popos, postmarketos, pureos,
Raspbian, rocky, slackware, sunos, ubuntu, void have 'small' logo
variants, use {distro}_small to use them.
Raspbian, rocky, slackware, sunos, ubuntu, venom, void have 'small'
logo variants, use {distro}_small to use them.
.TP
\fB\-\-ascii_bold\fR on/off
Whether or not to bold the ascii logo.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "neowofetch",
"version": "1.4.7",
"version": "1.4.10",
"description": "Updated neofetch",
"repository": {
"type": "git",
-6
View File
@@ -1,6 +0,0 @@
#!/usr/bin/env python3
import hyfetch
if __name__ == '__main__':
hyfetch.main.run()
+5 -5
View File
@@ -1,9 +1,9 @@
#!/usr/bin/env python3
import pathlib
from setuptools import setup, find_packages
from setuptools import setup, find_namespace_packages
import hyfetch.constants
from hyfetch.__version__ import VERSION
# The directory containing this file
HERE = pathlib.Path(__file__).parent
@@ -14,7 +14,7 @@ README = (HERE / "README.md").read_text('utf-8')
# This call to setup() does all the work
setup(
name="HyFetch",
version=hyfetch.constants.VERSION,
version=VERSION,
description="neofetch with flags <3",
long_description=README,
long_description_content_type="text/markdown",
@@ -31,7 +31,7 @@ setup(
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
],
packages=find_packages(),
packages=find_namespace_packages(),
package_data={'hyfetch': ['hyfetch/*']},
include_package_data=True,
install_requires=[
@@ -40,7 +40,7 @@ setup(
# Windows dependencies
'psutil ; platform_system=="Windows"',
'colorama ; platform_system=="Windows"',
'colorama>=0.4.6 ; platform_system=="Windows"',
],
entry_points={
"console_scripts": [
-68
View File
@@ -1,68 +0,0 @@
from __future__ import annotations
import sys
import time
from dataclasses import dataclass
from pathlib import Path
from urllib.request import urlretrieve
from hyfetch.color_util import printc, color
from hyfetch.neofetch_util import term_size
@dataclass
class Theme:
done_char: str
todo_char: str
prefix: str = ''
suffix: str = ''
done_len: int = 1
todo_len: int = 1
CLASSIC_THEME = Theme('', '.', '[', ']')
NEW_THEME = Theme('&a━', '&c━')
EMOJI_THEME = Theme('', '🕑', done_len=2, todo_len=2)
EGG_THEME = Theme('🐣', '🥚', done_len=2, todo_len=2)
FLOWER_THEME = Theme('🌸', '🥀', done_len=2, todo_len=2)
def print_progressbar(total: int, i: int, length: int | None = None, theme: Theme = EMOJI_THEME, unit=''):
if not length:
length = term_size()[0]
i += 1
completed = f'{i * 100 / total:.0f}%'
placeholder = 'PLACEHOLDER_BAR'
template = f'{theme.prefix}{placeholder}{theme.suffix}&r {completed} {i}/{total}{unit}'
length -= len(template) - len(placeholder) + 2
progress = int(i / total * length)
bar = f'{theme.done_char * (progress // theme.todo_len)}{theme.todo_char * ((length - progress) // theme.done_len)}'
print(color(template.replace(placeholder, bar)), end='\r', flush=True)
def download_pbar(url: str, path: Path):
def hook(b: int, bsize: int, tsize: int):
print_progressbar(tsize // 1024 // 1024, b * bsize // 1024 // 1024, unit=' MB')
if path.is_dir():
filename = url.split('/')[-1]
path = path / filename
path.parent.mkdir(exist_ok=True, parents=True)
urlretrieve(url, filename=path, reporthook=hook)
print()
if __name__ == '__main__':
# theme = {'emoji': EMOJI_THEME, 'flower': FLOWER_THEME, 'egg': EGG_THEME, 'classic': CLASSIC_THEME, 'new': NEW_THEME}
#
# for name, t in theme.items():
# print(f'\n{name} theme:')
# for i in range(100):
# print_progressbar(100, i, theme=t)
# time.sleep(0.015)
# print()
download_pbar('https://github.com/git-for-windows/git/releases/download/v2.37.2.windows.2/MinGit-2.37.2.2-busybox-64-bit.zip', Path('Downloads'))
+3 -1
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env python3
import argparse
import json
import os
import shlex
from subprocess import check_output
@@ -52,7 +53,8 @@ if __name__ == '__main__':
# Fetch commit information
commits = http.get(f'https://api.github.com/repos/{upstream}/pulls/{pr}/commits').json()
author = commits[0]['commit']['author']
override_author = os.environ.get("override_author")
author = json.loads(override_author) if override_author else commits[-1]['commit']['author']
# Create commit message
title = info["title"].replace('"', '\\"')
+3
View File
@@ -0,0 +1,3 @@
Symbolic11
GentlemanMC
dr03m
1 Symbolic11
2 GentlemanMC
3 dr03m
+2 -2
View File
@@ -25,12 +25,12 @@ def test_rgb_8bit_conversion():
for r in range(0, 255, 16):
for g in range(0, 255, 16):
print(RGB(r, g, 0).to_ansi_rgb(False), end=' ')
printc('&r')
printc('&*')
print()
for r in range(0, 255, 16):
for g in range(0, 255, 16):
print(RGB(r, g, 0).to_ansi_8bit(False), end=' ')
printc('&r')
printc('&*')
print()
+7 -6
View File
@@ -25,6 +25,7 @@ def pre_check():
assert os.path.islink('./hyfetch/scripts/neowofetch'), 'neowofetch is not a symbolic link'
# subprocess.check_call(shlex.split('git diff-index --quiet HEAD --')) # 'Please commit all changes before release'
print('Running shellcheck... (This may take a while)')
subprocess.check_call(shlex.split('shellcheck neofetch'))
@@ -46,8 +47,8 @@ def edit_versions(version: str):
path.write_text(json.dumps(content, ensure_ascii=False, indent=2))
# 2. hyfetch/constants.py
print('Editing hyfetch/constants.py...')
path = Path('hyfetch/constants.py')
print('Editing hyfetch/__version__.py...')
path = Path('hyfetch/__version__.py')
content = [f"VERSION = '{version}'" if l.startswith('VERSION = ') else l for l in path.read_text().split('\n')]
path.write_text('\n'.join(content))
@@ -63,7 +64,7 @@ def edit_versions(version: str):
# 4. neofetch script
print('Editing neofetch...')
path = Path('neofetch')
lines = path.read_text().split('\n')
lines = path.read_text().replace("\t", " ").split('\n')
version_i = next(i for i, l in enumerate(lines) if l.startswith('version='))
nf = pv.parse(lines[version_i].replace('version=', ''))
new = pv.parse(version)
@@ -102,6 +103,7 @@ def post_check():
"""
Check after changes are made
"""
print('Running shellcheck... (This may take a while)')
subprocess.check_call(shlex.split('shellcheck neofetch'))
@@ -112,7 +114,7 @@ def create_release(v: str):
print('Committing changes...')
# 1. Add files
subprocess.check_call(['git', 'add', 'hyfetch/constants.py', 'neofetch', 'neofetch.1', 'package.json', 'README.md',
subprocess.check_call(['git', 'add', 'hyfetch/__version__.py', 'neofetch', 'neofetch.1', 'package.json', 'README.md',
'hyfetch/distros/*'])
# 2. Commit
@@ -128,8 +130,7 @@ def create_release(v: str):
# 4. Push
print('Pushing commits...')
subprocess.check_call(['git', 'push'])
subprocess.check_call(['git', 'push', 'origin', v])
subprocess.check_call(['git', 'push', 'origin', f'neofetch-{NEOFETCH_NEW_VERSION}'])
subprocess.check_call(['git', 'push', 'origin', v, f'neofetch-{NEOFETCH_NEW_VERSION}'])
def deploy():
+33
View File
@@ -0,0 +1,33 @@
import re, json
distro_color = {}
def color(colornum): # see neofetch color()
reset = "\e[0m"
ascii_bold = "\e[1m"
if colornum == "fg" or colornum == "7":
return f"\e[37m{reset}"
if colornum == "#":
pass # TODO
if int(colornum) >= 0 and int(colornum) < 7:
return f"{reset}\e[3{colornum}m"
return f"\e38;5;{colornum}m"
with open("neofetch") as f:
s = f.read()
l = iter(s.split("\n"))
for i in l:
p = re.search(r'"\D+"\*\)', i)
if p is None:
continue
distros = re.sub(r"\"|\)|\*", "", i.strip(" ")).split("|")
c = next(l).strip(" ")
if "set_colors" not in c:
continue
colors = c.split(" ")[1:]
for dist in distros:
distro_color[dist.strip(" ").rstrip(" ")] = colors
with open("distcolor.json", "w") as f:
json.dump(distro_color, f)
+8
View File
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
# Echo all commands
set -x
shtab --shell=bash -u hyfetch.main.create_parser > hyfetch/scripts/autocomplete.bash
shtab --shell=zsh -u hyfetch.main.create_parser > hyfetch/scripts/autocomplete.zsh
shtab --shell=tcsh -u hyfetch.main.create_parser > hyfetch/scripts/autocomplete.csh
+10
View File
@@ -0,0 +1,10 @@
# Secret of Github Webhook to verify the request is from Github
webhook_secret = "secret"
# Github token and repo to regulate
gh_token = "token"
gh_repo = "owner/repo"
# AI harm classifier token
harm_classifier_url = "https://example.com/classify"
harm_classifier_token = "token"
+155
View File
@@ -0,0 +1,155 @@
# Start the server with:
#
# uvicorn tools.gh_moderator:app --reload --port 59523
#
# pip install openai pygithub fastapi uvicorn hypy_utils
import hashlib
import hmac
import json
import unicodedata
from datetime import datetime
from pathlib import Path
import openai
import tomllib as toml
from fastapi import FastAPI, Request, Response
from github import Github
from hypy_utils import write, json_stringify
from hypy_utils.logging_utils import setup_logger
from openai.openai_object import OpenAIObject
from hyfetch.color_util import printc
log = setup_logger()
def read_config():
with open(Path.home() / ".config/gh_moderator.toml", "rb") as f:
return toml.load(f)
app = FastAPI()
config = read_config()
webhook_secret = bytes(config["webhook_secret"], "utf-8")
gh = Github(per_page=100, login_or_token=config["gh_token"])
me = gh.get_user()
repo = gh.get_repo(config["gh_repo"])
printc(f"&a[+] Logged in as {me.login}")
harm_classifier_url, harm_classifier_token = config["harm_classifier_url"], config["harm_classifier_token"]
script_path = Path(__file__).parent
supported_events = ["issue_comment", "issues", "pull_request", "pull_request_review_comment"]
ai_notice = f"If you think this is a false-positive, please contact the owner of this repo."
openai.organization = config['OpenAI']['org']
openai.api_key = config['OpenAI']['key']
openai_model = config['OpenAI']['model']
def get_content(event: str, obj: dict) -> str:
# Get the content of the event
match event:
case "issue_comment" | "pull_request_review_comment":
return obj["comment"]["body"]
case "issues":
return obj["issue"]["title"] + "\n\n" + obj["issue"]["body"]
case "pull_request":
return obj["pull_request"]["title"] + "\n\n" + obj["pull_request"]["body"]
def redact(event: str, obj: dict, id: str, reason: str):
"""
Redact the event
"""
printc(f"&c[!] Redacting {event} {id} for {reason}.")
tail = f"\n\n> Reason: {reason}\n> {ai_notice}"
redact_notice = f"[Redacted by [AI Content Moderator]({me.html_url})]{tail}"
match event:
case "issue_comment":
# Redact the comment
comment = repo.get_issue(obj["issue"]["number"]).get_comment(obj["comment"]["id"])
comment.edit(body=redact_notice)
case "pull_request_review_comment":
# Redact the comment
comment = repo.get_pull(obj["pull_request"]["number"]).get_review_comment(obj["comment"]["id"])
comment.edit(body=redact_notice)
case "issues" | "pull_request":
# Close the issue
iss = repo.get_issue(obj["issue"]["number"])
iss.edit(title="[Redacted]", body=redact_notice, state="closed")
iss.create_comment(f"Issue closed for potentially offensive content.{tail}")
iss.lock("spam")
async def process_event(event: str, obj: dict, id: str):
# Preliminary checks
if event not in supported_events:
printc(f"&7[-] Unknown event: {event}")
return
if obj['repository']['full_name'] != repo.full_name:
printc(f"&7[-] Unknown repository: {obj['repository']['full_name']}")
return
blacklist_users = {v for v in (script_path / "blacklist_users.csv").read_text().split("\n") if v}
actor = obj["sender"]["login"]
if actor == me.login:
printc(f"&7[-] Ignoring event by myself: {id} {event} by {actor}")
return
printc(f"&e[+] Received event: {id} {event} by {actor}")
if actor in blacklist_users:
redact(event, obj, id, "User is blacklisted")
return
# Normalize content
content = unicodedata.normalize("NFKC", get_content(event, obj))
# Ask OpenAI to predict if it's offensive
res: OpenAIObject = openai.Moderation.create(content, openai_model).results[0]
write(f"moderator-data/openai/{id}.json", json_stringify(res))
if res.flagged:
printc(f"\n&c[!] AI classified {event} {id} by {actor} as offensive !!!\n> Content: {content}\n\n")
reason = " | ".join(f"{k} {res.category_scores.get(k) * 100:.0f}%" for k, v in res.categories.items() if v)
redact(event, obj, id, f"Flagged by OpenAI : {reason}")
return
printc(f"&a[~] AI classified {event} {id} by {actor} as safe.")
@app.post("/")
async def handle_webhook(request: Request, response: Response):
# Read headers
event = request.headers.get("X-GitHub-Event")
signature = request.headers.get("X-Hub-Signature")
# Verify the signature
body = await request.body()
if not verify_signature(signature, body):
response.status_code = 401
return {"message": "Invalid signature"}
# Parse the event body
obj = json.loads(body.decode())
# Log the request
id = datetime.now().isoformat()
write(f"moderator-data/webhook/{id}-{event}.json", json_stringify(obj, indent=4))
await process_event(event, obj, id)
return {"message": "OK"}
# Helper function to verify the signature
def verify_signature(signature: str, payload: bytes) -> bool:
hash_type, signature = signature.split("=")
digest = hmac.new(webhook_secret, msg=payload, digestmod=getattr(hashlib, hash_type)).hexdigest()
return hmac.compare_digest(digest, signature)
-21
View File
@@ -1,21 +0,0 @@
import os
import time
from github import Github
if __name__ == '__main__':
gh = Github(per_page=100, login_or_token=os.environ.get('GH_TOKEN'))
repo = gh.get_repo("hykilpikonna/hyfetch")
while True:
iss = repo.get_issues(state='open')
for i in iss:
if i.user.login in ['Symbolic11']:
i.edit(title="[Redacted]", body="[Redacted by Content Moderation Bot]", state="closed")
i.create_comment("Issue closed by bot for offensive content.")
print(f"Closed {i.number}")
time.sleep(2)
+1 -1
View File
@@ -15,7 +15,7 @@ from hypy_utils import write
from hyfetch.distros import AsciiArt
RE_SPLIT = regex.compile('EOF[ \n]*?;;')
RE_COLORS = regex.compile("""(?<=set_colors )[a-z\\d ]+(?=\n)""")
RE_COLORS = regex.compile("""(?<=set_colors )[\"#a-z\\d ]+(?=\n)""")
def substr(s: str, start: str, end: str | None = None):
+5 -6
View File
@@ -3,20 +3,19 @@
This script turns readme shorthand pull request references (i.e. dylanaraps/neofetch#1946) into full
GitHub pull request links.
"""
import re
import regex as re
from pathlib import Path
RE_SHORTHAND = re.compile(r"""[a-z0-9]+?/[a-z0-9]+?#[0-9]+""")
RE_SHORTHAND = re.compile(r"(\w+?)/(\w+?)#(\d+)")
MY_RE = re.compile(r"(?<=[^\w\[])#(\d+)")
def reformat_readme():
readme = Path('README.md').read_text()
for shorthand in RE_SHORTHAND.findall(readme):
user, pull = shorthand.split('/')
repo, pull = pull.split('#')
readme = readme.replace(shorthand, f'[{user}#{pull}](https://github.com/{user}/{repo}/pull/{pull})')
readme = re.sub(RE_SHORTHAND, r'[\1#\3](https://github.com/\1/\2/pull/\3)', readme)
readme = re.sub(MY_RE, r'[#\1](https://github.com/hykilpikonna/hyfetch/pull/\1)', readme)
Path('README.md').write_text(readme)