Compare commits

...

873 Commits

Author SHA1 Message Date
azalea 62fdc22c00 [U] Release 2.0.5 2025-11-21 07:21:23 -05:00
azalea 1fdcfa66b8 Update neofetch 2025-11-21 20:20:39 +08:00
azalea d08a0745a5 [F] Fix shell check 2025-11-21 20:18:44 +08:00
azalea 4ee5344209 Update deploy.md 2025-11-21 20:10:23 +08:00
azalea 26030b0628 [+] Changelogs 2025-11-21 20:04:03 +08:00
azalea 9b376f97c0 [F] Fix #460: Hyfetch panics upon entering invalid alignment option after roll 2025-11-21 19:38:19 +08:00
azalea 2dc18050ca [F] Fix warning 2025-11-21 19:32:14 +08:00
azalea e816235637 [F] Fix #462 Python version prints Traceback on KeyboardInterrupt 2025-11-21 19:27:52 +08:00
azalea 8046e9bab3 [F] Fix #465 2025-11-21 19:21:23 +08:00
ruby_rose e03cda1475 Added femme flag (#456)
* Added femme

* Properly added femme to the list in build.rs

* Revert "Properly added femme to the list in build.rs"

This reverts commit be7f0748ac042bb824a074a664d9978e835a3a58.

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-11-21 19:14:56 +08:00
Tini 20e5fb3f89 issue #440 void_old added (#457) 2025-11-21 19:10:36 +08:00
LithTheFox e253a75924 Added back the flags that were lost in the python and rust presets merge (#466)
* Added flags that were lost in the Python and Rust presets merge

* [F] Should be above meme flags

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-11-21 19:09:54 +08:00
azalea 2252fc36e7 Merge branch 'master' of github.com:hykilpikonna/hyfetch 2025-10-22 13:15:42 +08:00
azalea 4e23243384 [O] Colorize secureblue (#434) 2025-10-22 13:15:17 +08:00
azalea f6dc68d7dc [+] Secureblue (closes #434) 2025-10-22 13:02:53 +08:00
azalea f947373a23 [U] Release 2.0.4 2025-10-22 00:46:55 -04:00
azalea 5b745cde01 [U] Changelog 2025-10-22 00:29:49 -04:00
azalea 1afbd66355 [O] Specify python 3.7 to be min version 2025-10-22 12:29:29 +08:00
azalea 2fe21deea8 [F] Fix windows binary mixed with unix 2025-10-22 12:08:39 +08:00
azalea 37a19901bb [U] Update build tool to work with new builder 2025-10-22 11:56:40 +08:00
azalea 063679b72d [O] Moderize python build tool from setup-tools to hatchling 2025-10-22 11:55:07 +08:00
azalea 264cf11690 Merge branch 'master' of github.com:hykilpikonna/hyfetch 2025-10-22 11:34:09 +08:00
azalea 6280d370bc [U] Clarify notes 2025-10-22 11:30:49 +08:00
azalea 6cfc337d83 [O] Fix unused warning on non-windows 2025-10-22 11:28:52 +08:00
azalea 533de96e80 [U] Update notes 2025-10-22 11:24:49 +08:00
azalea dee984f931 [U] Release 2.0.3 2025-10-21 23:20:52 -04:00
azalea 959d42ee9c [F] Typo 2025-10-21 23:20:00 -04:00
azalea eb349aa1aa [U] Changelog 2025-10-21 23:17:56 -04:00
azalea d5751e06af [O] Shorten 2025-10-22 10:53:51 +08:00
azalea 981602b690 [O] Anyhow 2025-10-22 10:42:58 +08:00
azalea a8d752aa9f [F] Preserve preset order in codegen 2025-10-22 10:33:11 +08:00
azalea c57e8a4a49 [+] Rust codegen for presets
#451
2025-10-22 10:27:18 +08:00
azalea 67ae918ae8 [O] Fix weights
#451
2025-10-22 09:53:46 +08:00
azalea e788f93c2b [F] from __future__ import annotations 2025-10-22 08:27:50 +08:00
azalea 75a2e9d8d3 [O] Python load presets from json
#451
2025-10-22 08:24:32 +08:00
azalea 23888c0e3e Merge branch 'SHORTEN' 2025-10-21 19:52:01 +08:00
azalea e5ad9e564d Merge branch 'master' of github.com:hykilpikonna/hyfetch 2025-10-21 19:51:35 +08:00
azalea 328381b336 [+] presets.json 2025-10-21 19:50:59 +08:00
ObsoleteDev 28a181d97b [+] Transbian pride flag (#449)
* [+] Transbian flag py

* [C} Update wording on py Transbian flag

* [+] Add Transbian flag to rust

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-10-21 19:28:46 +08:00
ObsoleteDev bb514f8fd9 [+] Autism pride flag (py & rust) (#450)
Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-10-21 19:27:26 +08:00
ObsoleteDev b585ee1e26 [+] Add Transneutral & Cenelian flags (#452) 2025-10-21 19:26:14 +08:00
ObsoleteDev de2141347e Fix: Hyfetch panics on some distros that are not defined (#455) 2025-10-21 19:25:48 +08:00
Un1q32 ba88581ed4 Support iOS 1.x (#444)
* support iOS 1.x

* add comment

* reword and fix typo
2025-10-13 15:24:39 +08:00
apaz 932042b62c Swap inside fstring to double quote (#442) 2025-10-10 12:48:03 +08:00
thea f5c5e31691 [F] Fix 3-length hex codes in Python when using custom preset (#443)
[F] Fix 3-length hex codes in Python
2025-10-10 12:46:41 +08:00
azalea 15ca855a04 [O] Shorten 2025-10-02 02:11:58 +08:00
azalea 666d2dc90a Update hyfetch.rs 2025-10-02 01:33:25 +08:00
azalea 34583294c6 [O] Make code more readable 2025-10-02 01:25:07 +08:00
azalea 03615ab4ee [O] Make code more readable 2025-10-02 01:06:39 +08:00
azalea c722c73e79 [O] shorten code 2025-10-02 00:44:05 +08:00
azalea 8f5199974b [F] Fix windows build #439 2025-10-02 00:43:25 +08:00
azalea 8168877fb1 [U] Update crates 2025-10-02 00:40:05 +08:00
azalea 4e20b18d45 [U] Upgrade deps 2025-10-01 23:58:01 +08:00
thea 5dc1709f58 [+] Allow passing hex colors as preset (#435) 2025-10-01 08:13:09 -07:00
Un1q32 fb1e35172e Support old Apple TV models (#438) 2025-10-01 08:12:37 -07:00
ObsoleteDev fc9292be3f 🌈 Support custom ASCII art file path (#429)
* Feature: Add custom ascii file saving to python version of hyfetch

* Feature: Add custom ascii file saving to rust version of hyfetch

* [-] Remove test ascii

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-10-01 08:12:05 -07:00
ObsoleteDev 3f41cb40e2 [+] Add fluidflux flags (#437)
* [+] Add fluidflux flags to py

* [+] Add fluidflux flags rust
2025-09-18 21:48:54 -07:00
ObsoleteDev 729024a45f [+] libragender flags (#433)
* [+] libragender flags py

* [+] libragender flags rust
2025-09-13 02:21:01 +09:00
ObsoleteDev ef1407d00e [F] Only mark pride month easter egg as displayed when its june (rust) (#430)
fix(rust): Only mark pride month easter egg as displayed when its june
2025-09-10 07:49:32 -07:00
Thundertides 075fc467d2 Temporary fix to GH-399 (#428) 2025-09-07 09:59:02 -07:00
azalea a463f4234c [U] Release 2.0.2 2025-09-04 07:12:01 -04:00
azalea beb04101db [F] Fix script 2025-09-04 07:09:56 -04:00
azalea bf60e4265b [F] Fix script 2025-09-04 07:05:40 -04:00
azalea 42421bc57d [+] Changelog 2025-09-04 06:52:58 -04:00
azalea f64ee7b7e9 [O] Better warning message #419 2025-09-04 06:46:20 -04:00
azalea 1fa29cf831 [+] Adipophilia flag (#424) 2025-09-04 06:24:10 -04:00
azalea 4861dd5d4a [+] Nullflux flag #397 2025-09-04 06:11:55 -04:00
azalea 5614b723fd [+] Hypergender flags
Fixes hykilpikonna/hyfetch#422
2025-09-04 06:04:37 -04:00
azalea 5e1e13b091 [M] Move flag order 2025-09-04 05:52:17 -04:00
azalea 79ddb3ca92 [+] Fictosexual flag (#394) 2025-09-04 05:41:49 -04:00
azalea 684929edea [U] gitignore 2025-09-04 05:41:49 -04:00
Emi f02ec8c4ba Fix nixos_small logo (#421)
* [F] Fix nixos_small logo

* [F] Fix nixos_small logo missing line break

* [?] i was trying to fix a difference between the python version and the rust version what the hell dude
2025-08-27 15:10:59 +09:00
azalea 5fd4ed9b0c [F] Fix #420 fastfetch custom config 2025-08-25 02:20:24 -04:00
a catgirl 003c295084 [F] fix: custom *fetch configurations breaking hyfetch (#420)
if the backend is fastfetch, hyfetch calls
`/bin/fastfetch --logo none -s OS --disable-linewrap`
which for me returns:
`  Artix Linux x86_64`
... and that breaks hyfetch

instead, get the information from the source (/etc/os-release), which im
pretty sure most fetch backends read from anyway

this won't work on *BSD though, because those lack
/etc/os-release, so unless calling `uname -s` is alright, BSDs would
still have the problem

related pull: https://github.com/hykilpikonna/hyfetch/issues/418
2025-08-23 17:34:57 -07:00
azalea d4560e3edb [U] Release 2.0.1 2025-08-21 12:56:30 -04:00
azalea 62b4c27404 [+] Changelog 2025-08-21 12:55:45 -04:00
azalea 169368a784 [F] :) 2025-08-21 12:46:00 -04:00
azalea 3e47640c1a [F] Maybe fix git install 2025-08-21 12:42:12 -04:00
azalea 6ddd762b35 [F] ? 2025-08-21 12:37:37 -04:00
azalea 713bcce0ec [F] Fix git install 2025-08-21 12:35:04 -04:00
azalea fdfd9816f5 [F] Fix deploy script 2025-08-21 12:06:24 -04:00
azalea d6f9d1f569 [F] Fix june flicker #408 2025-08-21 11:48:24 -04:00
azalea b28aa0ddf2 [U] Bump 2025-08-21 11:23:37 -04:00
azalea a5e784c528 [F] Fix distro name detection 2025-08-21 11:21:48 -04:00
azalea 93b4dd3471 [U] Bump 2025-08-21 11:02:20 -04:00
azalea d15afe579f [O] Optimize calculations 2025-08-21 11:01:59 -04:00
azalea f79aca3c65 [-] Remove unused warning 2025-08-21 10:09:00 -04:00
azalea fa3fc59a5f [F] Fix trying to get backend from non-existing backend 2025-08-21 10:08:06 -04:00
azalea afa3c1dfb9 [F] Fix cache path might be missing 2025-08-21 10:05:02 -04:00
azalea cf6b77a1b7 [F] 💢💢💢💢💢💢💢💢💢💢💢 2025-08-21 09:52:03 -04:00
azalea b58425badd [F] 💢💢💢💢💢 2025-08-21 09:47:48 -04:00
azalea 8c1713c37d [F] Forgot to bump lock 2025-08-21 09:29:42 -04:00
azalea 3c7c449da4 [F] Maybe this can work 2025-08-21 09:28:44 -04:00
azalea 2fe4b3f287 [F] Fix cargo publish #405 2025-08-21 09:14:05 -04:00
azalea 6a80928f10 [F] Fix path 2025-08-21 08:35:42 -04:00
azalea 4ac698817d [F] Fix cargo publish #405 2025-08-21 08:31:41 -04:00
azalea 13acc0b6b6 [U] Bump 2025-08-21 08:31:41 -04:00
Ven0m0 455f0382e7 [+] Use cloudflare for public IP field (#416)
* Update neofetch

* [F] Fix drill cloudflare and add fallback

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-08-21 05:05:08 -07:00
azalea 0c9e4db742 [F] Fix #418 2025-08-21 03:17:56 -04:00
Aiden Bohlander aee058e591 Update logic to not mark the pride month animation as shown if --june is explicitly specified. (#411)
Update logic to not mark the pride month animation as shown if --june is explicitly specified.
2025-06-02 04:03:08 -04:00
azalea b74787768f [+] Bazzite (#406) 2025-05-27 11:43:32 +09:00
Zulta 218c535d06 Add Rhino Linux Logo (#407)
* added Rhino Linux Logo

* updated rhino.py

* fixed the ;; on line 8745

* [F] Fix python generation

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-05-25 21:59:28 -04:00
stella :3c 76ae5e507a [FEATURE PROTOTYPE] adds step on interactive setup which prompts the user for either the default or small variant of their distro logo. (#392)
* adds step on interactive setup which prompts the user for either the default or small variant of their distro logo.

* fixed distro small logo variant check

* fixes logo vec index overflow error

* now takes --distro as an input when attempting to fetch a small logo variant

* fixes an incorrect error message
2025-04-06 01:05:04 -04:00
Yuki Kurosawa d2dfd950a3 Update KSLinux detection due to kpt and kpm command is removed (#395)
* Update KSLinux detection due to kpt and kpm command is removed

* Fix Bugs
2025-04-06 01:03:39 -04:00
Paul 45ee7e199e Fix unwanted space in Python version (#401)
Before:

```
Python: Python 3.13.2 [Clang 16.0.0 ]
```

After:

```
Python: Python 3.13.2 [Clang 16.0.0]
```
2025-04-06 01:02:46 -04:00
azalea 2cfea54a88 [+] Cisgender flag for #386
Okay I think if I added this, someone will ask about the straight flag again.

In terms of historical context, the cisgender flag has been used neutrally, and it has not been used as a symbol of dismissal like the straight flag did. While some people question whether it's necessary to have a pride flag for the majority identity that do not face discrimination, its existence isn't perceived as offensive by the LGBTQ+ community. So I judged it would be harmless to add the cisgender flag, while adding the straight flag would be harmful.
2025-02-16 17:41:21 -05:00
Alice 0cc6ddbca8 [PR] Auto detect light/dark mode, changing the theme accordingly (#380)
* disable clippy lint

* fmt

* move detect bg into a function

* auto detect light/dark opt

* auto detect dark cli opt

* optional light-dark

* cli opt

* nicer looking output

* [-] Revert code style changes

* [-] Revert code style changes

* [-] Revert code style changes

* [-] Revert

* make the default theme dark

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-02-16 16:58:45 -05:00
Streaksu 8a536c30f0 [PR] Separate Gloire from Ironclad (#388) 2025-02-15 09:08:03 -05:00
Un1q32 5c24bd443a [PR] fix cpu fetching code for leopard and tiger (#387)
* fix cpu fetching code for leopard and tiger

* some 10.5 systems have this sysctl, just check if it exists like this
2025-02-15 09:03:48 -05:00
Un1q32 e691b2d9da [PR] fix memory code for old macOS versions (#389)
* fix memory code for old macOS versions

* don't print memory at all here, instead of just printing zeros
2025-02-15 10:48:21 +08:00
Ameyama Izumi 5ec7b4f01a [+] Add Kessoku Band flag for meme (#384)
* [+] Add Kessoku Band flag for meme

* [F] Fix key

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-01-19 05:55:17 +08:00
azalea f38b754783 [F] Port fix #383 to rust 2025-01-18 16:51:17 -05:00
jjanzen 211beb7b6a Limit permutations to 1000 (#383)
limit permutations to 1000

Co-authored-by: jjanzen <jjanzen@jjanzen.ca>
2025-01-19 03:08:12 +08:00
azalea 02c64ef281 [F] Fix #379 2025-01-06 04:53:25 -05:00
azalea 4e9c510240 [F] Fix #378 2025-01-06 04:47:46 -05:00
zenobit d6b559fb40 [F] am count packages fix (#375) 2025-01-04 03:16:00 +08:00
azalea 9806ced8b2 [F] Fix windows build 2024-12-22 08:25:13 -05:00
azalea 982ac52c69 [O] Better pathfinding 2024-12-22 08:14:24 -05:00
azalea f9c9a92048 [O] Write neofetch file instead of finding path 2024-12-22 06:56:55 -05:00
azalea b8e5dadd78 [O] Use include_str instead of hardcoding 2024-12-22 06:38:40 -05:00
azalea 287921439d [U] Update readme 2024-12-22 06:34:09 -05:00
azalea e8e0a58e4b [U] Update builder script 2024-12-22 06:23:55 -05:00
azalea 3a80670491 [F] Fix version detection 2024-12-22 06:23:17 -05:00
azalea 8cc06c02b5 [F] Fix entry 2024-12-22 06:19:24 -05:00
azalea 48f52be2d3 [F] Fix windows build 2024-12-22 05:55:38 -05:00
azalea b009342d78 [F] Fix osx build strip issue 2024-12-22 05:53:46 -05:00
azalea 8e4b57e33a [F] Fix rust musl build segfault 2024-12-22 05:53:28 -05:00
azalea 9a9101a9a3 [+] Rust entrypoint in pypi 2024-12-22 04:59:40 -05:00
azalea 90d12d9385 [+] OSXCross rust build 2024-12-22 04:47:16 -05:00
azalea ca74acbafb [O] Build rust using musl static 2024-12-22 04:22:52 -05:00
azalea afd9ad33d4 [F] Fix rust builder 2024-12-22 01:39:13 -05:00
azalea cafa3ff752 [+] Rust builder? 2024-12-22 01:09:44 -05:00
azalea a0db219ba3 [+] Rust launcher 2024-12-22 00:27:22 -05:00
azalea 89cced9950 [F] Fix rust windows build 2024-12-22 00:27:10 -05:00
azalea 1ff4b12f19 [F] Fix windows 2024-12-22 00:26:55 -05:00
azalea 4f8ddd1c22 [O] Shorten code for #372 2024-12-21 21:40:06 -05:00
azalea 7a42824883 [PR] #370 from teohhanhui/rust-catchup
Port missed changes from the Python version
2024-12-21 21:31:01 -05:00
azalea 916f7274df [PR] #372 from ctcl-bregis: n/p for next/previous shorthand
One-letter page selection and page number roll over on Rust version
2024-12-21 21:30:27 -05:00
ctcl-bregis 79fc190013 shorthand next and prev and page number roll over 2024-12-16 19:51:46 -05:00
azalea e78d95e573 [U] Bump version to 2.0.0 2024-12-10 08:56:33 -05:00
azalea 943503004d [+] Add print_font_logo CLI option 2024-12-10 08:54:32 -05:00
azalea deb2bddbe1 [+] Font logo 2024-12-10 08:54:10 -05:00
azalea 15fabbdb1a [PR] #371 from bertronika/fast-rpm: Speed-up rpm total package count
neofetch: Speed-up rpm total package count
2024-12-10 04:04:16 -05:00
Nejc Bertoncelj df71b0132a neofetch: Speed-up rpm total package count
Skipping package digest and signature verification yields a significant
speed-up when counting total packages.

Idea taken from rpm's bash-completion script.
2024-11-30 20:27:13 +01:00
Teoh Han Hui 191995c0fe Fix preset name mismatch ("throatlozenges") 2024-11-30 09:37:17 +08:00
Teoh Han Hui 6558cf39f1 Apply fix from clippy (Rust 1.83) 2024-11-30 08:52:31 +08:00
Teoh Han Hui 99d652383a Add random preset option (port of 1211dc6) 2024-11-30 08:52:31 +08:00
Teoh Han Hui e78ae3233c Add a higher-contrast version of pangender flag (port of f4d6b75) 2024-11-30 08:52:31 +08:00
Teoh Han Hui a60dd35169 Add caninekin flag for all the dogs (port of #318) 2024-11-30 08:52:30 +08:00
Teoh Han Hui ccc8121550 Add queer subculture flags (port of #302) 2024-11-30 08:52:19 +08:00
azalea bb260890c5 Merge pull request #369 from LS-KR/master
[+] Add watermelon cream lozenges flag for meme
2024-11-22 02:46:58 -05:00
Elihuso Quigley 057b3b53e2 [F] Fix build 2024-11-22 15:06:13 +08:00
Elihuso Quigley 3a96fe8561 [+] Add watermelon cream lozenges for meme 2024-11-22 15:00:42 +08:00
azalea 1b3b5ca883 [PR] #365 from bittin: Add Slackware credits
Update README.md
2024-11-11 21:15:10 -05:00
Luna Jernberg 53f7e3fcdb Update README.md
Add more Slackware credits
2024-11-10 15:06:19 +01:00
Cat e630b7837f [F] Update openSUSE logos, add Slowroll 2024-10-29 13:46:19 -07:00
Lubos Kocman aa065fe910 openSUSE distro refresh
* Add openSUSE Slowroll
* Updated logos for openSUSE Leap and Tumbleweed
  gh#openSUSE/branding#154 gh#openSUSE/branding#160
* Update neofetch accordingly to gh#openSUSE/neofetch fork
2024-10-29 14:30:28 +01:00
azalea 28b365d418 [PR] #361 from getchoo-contrib: Run neowofetch directly on unix
fix: run `neowofetch` directly on unix
2024-10-25 15:05:28 -07:00
seth 4ea0a4a9dc fix: run neowofetch directly on unix
The script should contain a shebang, so no need to spawn a subshell for
it
2024-10-24 15:21:41 -04:00
azalea b5b49ecbc0 [PR] #317 from rust-malaysia: RIIR
Rewrite it in Rust
2024-10-23 14:52:35 -07:00
azalea cf56c60006 [U] Release 1.99.0 2024-10-23 17:36:53 -04:00
azalea a6225d698f [F] mkdir is actually used, can't remove it 2024-10-23 17:35:10 -04:00
azalea d5621877d5 [U] Update changelog 2024-10-23 17:07:58 -04:00
azalea d5b93829fc [F] Fix windows 7 support (???) 2024-10-23 16:35:35 -04:00
Cat f3fc92dc7d [U] Change references from BKasin to catumin
Have changed name irl and updated online identity in other places, so change here to match. Bailey -> Cat.
2024-10-23 12:43:34 -07:00
azalea 36fc38c7a9 [O] Use fastfetch as the default backend option if it's installed 2024-10-23 15:15:45 -04:00
azalea 6af128fb05 [U] Update build script 2024-10-23 15:12:44 -04:00
azalea 8b3e4bba76 [+] Fastfetch build scripts 2024-10-23 14:54:37 -04:00
azalea 1211dc6978 [+] Add random preset (Closes #334) 2024-10-23 13:18:02 -04:00
azalea d0f911922a [+] Fix backward compat issue with #303 2024-10-23 13:16:49 -04:00
azalea c68dd7fe5b [F] Fix #305 2024-10-23 12:23:07 -04:00
azalea 49b26dc7ea [PR] #302 from C-HCM: Subculture flags
Subculture flags
2024-10-23 09:03:03 -07:00
azalea f815d2bdd6 Merge branch 'master' into master 2024-10-23 09:01:16 -07:00
azalea b0b8c51d35 [PR] #303 from luna-1024: Fix custom_colors keys type mismatch
Fix ColorAlignment.custom_colors.keys() / slots type mismatch
2024-10-23 08:59:45 -07:00
azalea 87e6092446 [PR] #311 from Til7701: Colorful NixOS Logo
Colorful NixOS logo
2024-10-23 08:58:12 -07:00
azalea fb52256729 [PR] #337 from AlbydST: pip, bonsai, rad, radula, birb, appimage
Add support for more package managers and AppImageLauncher
2024-10-23 08:57:08 -07:00
azalea 5e11110c66 Merge branch 'master' into better-pm 2024-10-23 08:55:48 -07:00
azalea a8b94f9187 [PR] #344 from Paranoid-Pufferfish: Generate magix python file
Proprely adding Magix support for hyfetch
2024-10-23 08:52:39 -07:00
azalea 3754aada04 [-] Remove makefile according to discussion
https://github.com/hykilpikonna/hyfetch/commit/5b759e098630f84fdd5f2dcf0ee2bd814199b8b8#commitcomment-148190744
2024-10-21 22:24:53 -04:00
azalea f94e788547 [+] Changelog 2024-10-21 21:56:55 -04:00
azalea a5f648a3fa [PR] #340 from barracuda156: Add MacPorts for linux & bsd
neofetch: support MacPorts on Linux & BSD
2024-10-21 20:07:28 -04:00
azalea e184ed613a [PR] #318 from yari-dog: Add caninekin
caninekin flag for all the dogs
2024-10-21 20:05:25 -04:00
azalea f4d6b75f56 [+] Add a higher-contrast version of pangender flag
Closes #359
2024-10-21 20:01:23 -04:00
azalea 865850da59 Merge branch 'master' of github.com:hykilpikonna/hyfetch 2024-10-21 20:00:10 -04:00
azalea 54e0f55a08 [O] Normalize formatting, remove duplicate preset 2024-10-21 20:00:00 -04:00
azalea c969ce3a21 [PR] #360 from devnoname120/macos/fix-network-speed
Fix network speed on macOS
2024-10-21 19:34:57 -04:00
Paul afc646c679 [F] Fix network speed on macOS
The `airport` utility is deprecated and not working on newer macOS versions.
2024-10-22 01:10:31 +02:00
azalea 6ac7f70c51 [F] Fix #298? 2024-10-07 06:49:53 -04:00
azalea c1fbd137a0 [F] Fix font logo matching 2024-10-07 06:26:58 -04:00
azalea 6f913b6d4a [+] Add functionality to print font logo 2024-10-07 06:20:50 -04:00
azalea 1077ee5142 Merge branch 'master' of github.com:hykilpikonna/hyfetch 2024-10-07 06:19:21 -04:00
azalea cec24f6bd0 [+] Font logos 2024-10-07 06:17:43 -04:00
Cat 9636c980e7 [PR] #348 from MingcongBai: fix(neofetch): list all Intel GPUs as detected 2024-09-06 21:51:57 -07:00
Mingcong Bai 3866ad0249 fix(neofetch): list all Intel GPUs as detected
Now that Intel is selling its own dedicated GPUs, it is increasingly
common to see laptops and desktop devices with multiple Intel GPUs. This
patch is intended to fix GPU detection on a laptop with both an integrated
UHD Graphics GPU and an Arc 380 (DG2).

Note that this may potentially cause regressions, but the original
upstream did not record the original issue, so I'm inclined to write it
off as an outdated fix:

  commit ee815f9c66
  Author: Dylan Araps <dylan.araps@gmail.com>
  Date:   Mon Apr 9 09:51:23 2018 +1000

      gpu: Fixed duplicate intel bug.
2024-09-03 16:57:36 +08:00
Teoh Han Hui 0ca67a5608 Set foreground colors for the newly added distro logos 2024-08-30 00:31:18 +08:00
Teoh Han Hui b2f7a3cee9 Merge remote-tracking branch 'origin/master' into riir 2024-08-30 00:14:04 +08:00
Teoh Han Hui b33b26625a Merge pull request #44 from BKasin/riir
Add missing upstream flags
2024-08-30 00:06:14 +08:00
AIT MEDDOUR Fouad-Eddine 1e67d65cec Merge branch 'hykilpikonna:master' into master 2024-08-29 14:34:05 +01:00
Bailey Kasin e04ef3b0fd Add note of where polyam colours were pulled from
Co-authored-by: Teoh Han Hui <teohhanhui@gmail.com>
2024-08-29 01:27:22 -07:00
Bailey Kasin a51a19658a Add missing upstream flags
Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
2024-08-28 23:37:20 -07:00
Bailey Kasin a65a229b0e [PR] #343 from BKasin: neofetch: add mauna linux logo 2024-08-28 18:06:07 -07:00
Bailey Kasin 5c0662142e neofetch: add mauna linux logo
Fixes: https://github.com/hykilpikonna/hyfetch/issues/308

Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
2024-08-28 17:58:20 -07:00
Bailey Kasin 88d835f511 [PR] #341 from barracuda156: neofetch: support host info for PowerPC Macintosh models 2024-08-28 16:24:09 -07:00
Bailey Kasin ce358fc155 [PR] #342 from BKasin, naviabbot: Add extra flags
* Adding Polyamorous flag

* Added extra flags

* Fixed Sapphic

* Added new flags and merged fixes from origin.

* Added genderqueer

---------

Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
Co-authored-by: Jaida Corvera <jaida@jcorvera.me>
Co-authored-by: Joshua Cain <72349atbwhs@gmail.com>
Fixes: https://github.com/hykilpikonna/hyfetch/issues/332
Closes: https://github.com/hykilpikonna/hyfetch/pull/295
2024-08-28 15:14:57 -07:00
Bailey Kasin d5b283e64d [PR] #339 from CrackedMatter: Escape AmogOS logo backslashes 2024-08-28 12:31:32 -07:00
Sergey Fedorov a609edc505 neofetch: add info for PowerBook/iBook models 2024-08-28 19:25:22 +08:00
Sergey Fedorov 753d35b56e neofetch: add info for PowerMac/iMac models 2024-08-28 18:56:46 +08:00
Sergey Fedorov d309f2d8a8 neofetch: support MacPorts on Linux & BSD 2024-08-28 18:35:38 +08:00
Paranoid-Pufferfish e59a0556ed Add Magix art for hyfetch 2024-08-26 12:51:37 +01:00
AlbydS afa18885ee Remove urpmq because it doesn't list installed packages
Urpmq doesn't list installed packages. `uprmq --list-media active` lists active repositories instead. Mageia uses RPM to count installed packages.
2024-08-25 16:48:19 +00:00
CrackedMatter 69f07aec8f Escape AmogOS backslashes 2024-08-25 12:25:12 +02:00
azalea 95a6cc7f4b [PR] #320 from felipemroni: Add biglinux large
Update biglinux colors
2024-08-25 00:38:56 -04:00
azalea 896ba8fc7d [F] Fix case order 2024-08-25 00:38:35 -04:00
azalea 319afd2aa9 [+] BigLinux_large by felipemroni 2024-08-25 00:37:22 -04:00
azalea 3df77e0042 [PR] #321 from dennis1248: Add Arkane Linux
Add Arkane Linux logo
2024-08-25 00:25:36 -04:00
azalea 729e81a3e2 [PR] #331 from malex342: Add kenochoric, veldian, solian, lunian
added four flags!
2024-08-25 00:23:49 -04:00
azalea 3dafba3554 [PR] #336 from AlbydST: lfs logo
Add Linux From Scratch logo
2024-08-25 00:12:37 -04:00
azalea 36d87c2c35 [F] Fix shellcheck error 2024-08-25 00:07:11 -04:00
azalea 0f744ff815 [F] Fix shellcheck warnings 2024-08-25 00:02:55 -04:00
azalea 0dea6eb11b [O] Remove duplicate pkg_info 2024-08-24 23:49:49 -04:00
azalea 05685de193 [O] Remove duplicate guix 2024-08-24 23:45:47 -04:00
azalea 03a6802b8f [O] Clarify bonsai 2024-08-24 23:44:42 -04:00
azalea d6341d241a [PR] #338 from Paranoid-Pufferfish
Add Magix art
2024-08-24 23:24:40 -04:00
Paranoid-Pufferfish 32dd56dc63 Add Magix art 2024-08-23 23:19:52 +01:00
AlbydS 6732945af8 Add support for more package managers and AppImageLauncher
I added support for the following package managers:
- Bonsai
- pkg_info (CRUX)
- GNU Guix
- Rad / Radula
- URPMI
- Birb

I also improved AppImage detection, now it supports AppImageLauncher and automatically detects where the files are.
2024-08-23 13:58:32 +00:00
AlbydS bb6b9b1d37 Add Linux From Scratch logo
I added an ASCII logo for Linux From Scratch
2024-08-23 10:49:51 +00:00
Teoh Han Hui 474f744bc6 Default to fastfetch if it is installed
Otherwise fall back to neofetch.
2024-08-19 00:58:24 +08:00
Teoh Han Hui 7c139595a6 Use fastfetch as fallback on platforms other than *nix
* Use fastfetch on Android (Termux)
2024-08-10 14:37:17 +08:00
Teoh Han Hui ebd253523b Merge pull request #43 from teohhanhui/riir
Use "alternate screen" for Pride month animation
2024-07-30 21:27:14 +08:00
Teoh Han Hui 13e29325b9 Use "alternate screen" for Pride month animation
This removes the need to clear screen at each frame, which fixes the
screen flickering.
2024-07-30 21:23:40 +08:00
Teoh Han Hui 00369355e6 Fix vertical fore-back coloring when span is empty
e.g. back-to-back color codes, or color code at end of line
2024-07-28 06:40:46 +08:00
Teoh Han Hui 2865ee7131 Add more fg distros 2024-07-28 05:42:47 +08:00
Teoh Han Hui faa7ab240f Merge pull request #42 from teohhanhui/riir
Track only fg color indices in ascii art; the rest are bg colors
2024-07-28 02:43:57 +08:00
Teoh Han Hui bcdc720d8a Track only fg color indices in ascii art; the rest are bg colors
* Fix vertical fore-back coloring when there are non-ASCII chars
* Allow 0-width / 0-height ascii art (again)

Co-authored-by: Luna <contact@luna.computer>
2024-07-28 02:35:32 +08:00
Teoh Han Hui 52844b55ad Merge pull request #41 from teohhanhui/riir
Put fore-back color indices in ascii art structs
2024-07-27 04:41:44 +08:00
Teoh Han Hui 6ccf0d9c31 Put fore-back color indices in ascii art structs
* Support multiple color indices for fore-back
2024-07-27 04:36:05 +08:00
malex e46e78ecd5 fixing color typo…
picked the wrong color for solian flag
2024-07-26 13:42:07 -04:00
Teoh Han Hui 2f18cc2826 Merge pull request #40 from teohhanhui/riir
Use structs to represent ascii art in different states of processing
2024-07-27 01:39:52 +08:00
Teoh Han Hui 4c72ed6d79 Use structs to represent ascii art in different states of processing
Stop passing raw strings around, as that's error prone.
2024-07-27 01:35:04 +08:00
Teoh Han Hui 55b0eed88d Merge pull request #39 from teohhanhui/riir
Use checked arithmetic
2024-07-26 11:31:00 +08:00
Teoh Han Hui 28f98a40fb Use checked arithmetic
This hurts readability, but should be worth it for correctness...
2024-07-26 11:09:35 +08:00
malex bbe40930c2 added four flags
in reference to issue #328
2024-07-25 17:57:48 -04:00
Teoh Han Hui a5913cc3d7 Fix nits 2024-07-25 06:36:43 +08:00
Teoh Han Hui f976781997 Merge pull request #38 from teohhanhui/riir
Remove `--c-overlay` option
2024-07-25 05:03:34 +08:00
Teoh Han Hui cbe176ff4e Remove --c-overlay option
It no longer serves any purpose.
2024-07-25 05:00:12 +08:00
Teoh Han Hui fe7ed923ea Merge pull request #37 from teohhanhui/riir
Fix all the line iterators
2024-07-25 03:55:46 +08:00
Teoh Han Hui c2795125d2 Fix all the line iterators
Use `str::lines` for proper line splitting.
2024-07-25 03:53:40 +08:00
Teoh Han Hui 370b56c1db Merge pull request #35 from 1337isnot1337/riir
created --june pride month animation! still needs some work. first PR be kind pls :3
2024-07-24 22:39:03 +08:00
Teoh Han Hui f47561c947 Clean up pride_month.rs 2024-07-24 22:36:10 +08:00
Cinna Davis 89e5342614 FIxed most bugs, should be working fine now? 2024-07-24 21:57:54 +08:00
Cinna Davis 4e3ec2604a created --june pride month animation! still needs some work though. changed cargo toml a bit too and I might have done something wrong. 2024-07-24 21:57:53 +08:00
Tilman Holube 279311fea0 Merge branch 'hykilpikonna:master' into master 2024-07-22 13:13:31 +02:00
Teoh Han Hui a7c277cb76 Move create_config back to hyfetch.rs
p/s: sorry...
2024-07-22 17:40:29 +08:00
Teoh Han Hui c2586212d6 Remove fastfetch-old backend
fastfetch version < 1.8.0 is very old at this point. Even EPEL 8 is
on 1.12.2
2024-07-22 16:44:53 +08:00
Teoh Han Hui 632296dbb4 Merge pull request #34 from teohhanhui/riir
Add `macchina` backend
2024-07-22 02:09:00 +08:00
Teoh Han Hui fe7d902dac Add macchina backend
* Remove `qwqfetch` TODOs as that project is unmaintained
2024-07-21 23:56:46 +08:00
Teoh Han Hui c7295ebed8 Add debug in recolor_ascii to see fields from tracing::instrument 2024-07-21 00:54:13 +08:00
Teoh Han Hui bdd03a34af Merge remote-tracking branch 'origin/master' into riir 2024-07-20 23:52:36 +08:00
Teoh Han Hui 683d1fc2ec Move create_config to Config::create_config 2024-07-20 23:45:57 +08:00
Teoh Han Hui c80a6185fc Handle name clashes in ascii distro patterns 2024-07-20 19:17:25 +08:00
Azalea 6564ca72c2 [PR] #325 from nekopsykose: Remove setuptools
remove unneeded setuptools dependency
2024-07-20 18:45:54 +08:00
Teoh Han Hui 2a8cd48674 Merge pull request #33 from teohhanhui/riir
Implement select_backend and save config
2024-07-20 17:57:13 +08:00
Teoh Han Hui 13ead437ec Implement select_backend and save config 2024-07-20 17:51:50 +08:00
Teoh Han Hui 8edb50c4d8 Merge pull request #32 from teohhanhui/riir
Support foreground-background for vertical color alignment
2024-07-19 23:34:25 +08:00
Teoh Han Hui 14ff66b836 Support foreground-background for vertical color alignment 2024-07-19 23:29:42 +08:00
Teoh Han Hui 0c7c43d71c Merge pull request #31 from teohhanhui/riir
Fix stray newlines
2024-07-19 01:26:30 +08:00
Teoh Han Hui 2613471978 Merge pull request #28 from luna-1024/riir-fix-escaped-backslashes
Fix escaped backslashes in output ascii art by unescaping them
2024-07-19 01:23:31 +08:00
Teoh Han Hui a558cf7ac9 Fix stray newlines 2024-07-19 01:19:42 +08:00
Luna cd1858134c Fix escaped backslashes in output ascii art by unescaping them 2024-07-18 10:12:03 -07:00
Teoh Han Hui 0a31cd0817 Merge pull request #29 from teohhanhui/riir
Use rainbow preset for color testing
2024-07-18 08:09:35 +08:00
Teoh Han Hui e25684cfd8 Use rainbow preset for color testing 2024-07-18 08:07:23 +08:00
Teoh Han Hui de43bf74a9 Merge pull request #27 from teohhanhui/riir
Implement "check term size" and select_color_mode
2024-07-17 22:43:31 +08:00
Teoh Han Hui d8f3302b89 Implement "check term size" and select_color_mode 2024-07-17 22:38:29 +08:00
Teoh Han Hui 5517283fb2 Merge pull request #26 from teohhanhui/riir
Implement selection of color alignment
2024-07-16 10:07:44 +08:00
Teoh Han Hui 66b08f7a2e Implement selection of color alignment 2024-07-16 10:03:49 +08:00
Teoh Han Hui 19e3b382b4 Use same-file only on Windows 2024-07-14 22:39:42 +08:00
Teoh Han Hui e10bdac351 Merge pull request #25 from springmaple/riir
Fix git-bash finding in Windows not working properly
2024-07-14 19:58:19 +08:00
SpringMaple 6e28482706 Fix git-bash finding in Windows not working properly 2024-07-14 19:34:58 +08:00
Teoh Han Hui 198742e15b Merge pull request #24 from teohhanhui/riir
Implement select_lightness
2024-07-14 05:02:33 +08:00
Teoh Han Hui a5de091883 Implement select_lightness 2024-07-14 04:59:37 +08:00
Teoh Han Hui da5f6ef655 Switch to terminal-colorsaurus 2024-07-13 23:37:41 +08:00
Teoh Han Hui dbecd3d705 Merge pull request #23 from teohhanhui/riir
Attempt to better support fallback executable paths on Windows
2024-07-13 16:58:25 +08:00
Teoh Han Hui e2d538df1f Attempt to better support fallback executable paths on Windows 2024-07-13 16:52:19 +08:00
Teoh Han Hui 8514629960 Merge pull request #22 from teohhanhui/riir
Use selected backend to get distro name
2024-07-13 04:12:31 +08:00
Teoh Han Hui d11f6f0a9f Use selected backend to get distro name 2024-07-13 04:07:31 +08:00
Luna 45347e0714 Fix ColorAlignment.custom_colors.keys() / slots type mismatch 2024-07-12 10:46:20 -07:00
Teoh Han Hui d79196a7fc Merge pull request #21 from teohhanhui/riir
Prompt for preset selection
2024-07-12 22:44:32 +08:00
Teoh Han Hui 114de9be12 Prompt for preset selection 2024-07-12 22:42:58 +08:00
Teoh Han Hui 4861744b50 Merge pull request #20 from teohhanhui/riir
[WIP] Implement `--config` option
2024-07-12 19:17:06 +08:00
Teoh Han Hui 66b57cfea6 [WIP] Implement --config option 2024-07-12 19:06:13 +08:00
Teoh Han Hui ca583bddcb Merge pull request #19 from teohhanhui/riir
Support fastfetch backend
2024-07-11 22:28:09 +08:00
Teoh Han Hui 965b009bc7 Support fastfetch backend 2024-07-11 19:44:07 +08:00
psykose 5b759e0986 remove unneeded setuptools dependency
this was added back in 2b5ef302a5
when pkg_resources was used, but that is no longer used since
5c34876c53
2024-07-11 06:10:19 +02:00
Teoh Han Hui 3cc26d7dd9 Fix wrong line length counting of ascii art
Count Unicode grapheme clusters instead of bytes.
2024-07-11 00:35:11 +08:00
Teoh Han Hui 85a85ad4d3 Merge pull request #18 from teohhanhui/riir
Tie fore-back to distro ascii instead of config
2024-07-10 23:58:43 +08:00
Teoh Han Hui f3b1840e92 Tie fore-back to distro ascii instead of config 2024-07-10 23:53:39 +08:00
Teoh Han Hui d773c69918 Merge pull request #17 from teohhanhui/riir
Run neofetch using git bash on Windows
2024-07-09 01:36:51 +08:00
Teoh Han Hui 290da7c363 Fix path normalization on Windows 2024-07-09 01:35:31 +08:00
Teoh Han Hui fa66bb486b Run neofetch using git bash on Windows 2024-07-08 15:50:12 +08:00
Teoh Han Hui 1239e86d1a Merge pull request #16 from teohhanhui/riir
Finish implementation of recolor_ascii
2024-07-08 03:46:13 +08:00
Teoh Han Hui 66491a4e73 Implement recoloring of ascii art using "custom" colors 2024-07-08 03:40:58 +08:00
Teoh Han Hui c100ca52a6 Implement recoloring of ascii art that don't use fore-back 2024-07-08 02:04:45 +08:00
Teoh Han Hui 46b618252f Merge pull request #15 from teohhanhui/riir
Implement recolored ascii output
2024-07-07 04:47:25 +08:00
Teoh Han Hui be70233b03 Implement recolored ascii output 2024-07-07 04:39:41 +08:00
Dennis ten Hoove b5588d8259 Add Arkane Linux logo 2024-07-04 17:43:17 +02:00
Teoh Han Hui ff46c8f4ca Merge pull request #14 from teohhanhui/riir
Add more scaffolding
2024-07-03 23:57:18 +08:00
Teoh Han Hui 59213687fb Add more scaffolding 2024-07-03 23:53:25 +08:00
Teoh Han Hui 475b10ba07 Merge pull request #13 from teohhanhui/riir
Apply lightness to preset color profile
2024-07-03 05:51:11 +08:00
Teoh Han Hui b0737a33ba Apply lightness to preset color profile 2024-07-03 05:48:51 +08:00
felipemroni 3e4e679b11 Update biglinux colors
just a big linux fan :)
2024-07-02 08:53:15 -03:00
Teoh Han Hui 3c355f54f2 Merge pull request #12 from teohhanhui/riir
Parse config
2024-07-01 04:08:10 +08:00
Teoh Han Hui 86e442b8a4 Parse config
Co-authored-by: Chiew Yan Wei <chiewyanwei@gmail.com>
Co-authored-by: Tan Chee Keong <tanck2005@gmail.com>
2024-07-01 04:03:56 +08:00
Teoh Han Hui a0856aa4f5 Merge pull request #11 from teohhanhui/riir
Implement neofetch_util functions
2024-06-29 21:40:11 +08:00
Teoh Han Hui d1d99daa87 Implement neofetch_util functions
Co-authored-by: Chiew Yan Wei <chiewyanwei@gmail.com>
2024-06-29 21:36:17 +08:00
Teoh Han Hui 4f1efbc699 Merge pull request #8 from teohhanhui/riir
Clean up build.rs
2024-06-29 17:39:12 +08:00
Teoh Han Hui c1b30918e9 Clean up build.rs 2024-06-29 17:37:22 +08:00
Teoh Han Hui 517dde43cc Merge pull request #5 from Venketaramana/riir
[rust] implement list_distros match_condition method in rust
2024-06-29 16:28:10 +08:00
Venket 955046c959 [rust] implement list_distros match_condition method in rust 2024-06-29 16:01:50 +08:00
Teoh Han Hui 274440e9db Merge pull request #4 from teohhanhui/riir
Add some more scaffolding
2024-06-29 15:03:20 +08:00
Teoh Han Hui fd413caba4 Add some more scaffolding 2024-06-29 14:59:05 +08:00
Teoh Han Hui 474c339599 Set default-run in Cargo.toml 2024-06-29 13:09:39 +08:00
Teoh Han Hui 927803549e Merge pull request #3 from teohhanhui/riir
Generate distros.rs on build
2024-06-29 10:40:51 +08:00
Teoh Han Hui 11601933f9 Generate distros.rs on build 2024-06-29 10:36:55 +08:00
yari b7f2992ecd forgot to actually git add caninekin lmao 2024-06-28 00:31:53 +01:00
yari 1f1362a0b5 added caninekind 2024-06-28 00:28:23 +01:00
Teoh Han Hui 7c874a8e9a Enable color output in bpaf 2024-06-28 05:53:00 +08:00
Teoh Han Hui 6e0e3fd18a Merge pull request #2 from teohhanhui/riir
Get distro name from neofetch
2024-06-28 05:17:12 +08:00
Teoh Han Hui 974c4514b2 Fix distro overriding 2024-06-28 05:09:32 +08:00
Teoh Han Hui e3b220a248 Switch to tracing 2024-06-28 01:13:42 +08:00
Teoh Han Hui ae1f6a2b3f Get distro name from neofetch 2024-06-27 22:25:49 +08:00
Teoh Han Hui 290445110d Parse the rest of the CLI options 2024-06-27 16:31:39 +08:00
Teoh Han Hui 4f9e6deb90 Add xenogender preset 2024-06-27 01:24:43 +08:00
Teoh Han Hui 3b94b94528 Merge remote-tracking branch 'origin/master' into riir 2024-06-27 01:22:15 +08:00
Teoh Han Hui 39b44ad041 Merge pull request #1 from teohhanhui/riir
Parse CLI options, including presets
2024-06-27 01:17:38 +08:00
Teoh Han Hui bf2c3c51d4 Parse CLI options, including presets 2024-06-27 01:13:40 +08:00
azalea 2a01c50aa6 [-] Remove lilu detection
Closes #310
2024-06-27 01:07:08 +08:00
Azalea 7f18d0e042 [PR] #307 from Iris-TheRainbow: Allow lightness values without a % to parse 2024-06-27 00:39:35 +08:00
Azalea 2307f9de20 [PR] #309 from AnarchistHoneybun: Add xenogender
xenogender flag preset added
2024-06-27 00:38:55 +08:00
Azalea c185f018a4 [PR] #314 from thepigeongenerator: fix colours not reverting properly
fix colours not reverting properly
2024-06-27 00:35:24 +08:00
Azalea 9b159c7472 [PR] #316 from ark-lamp-umbrella/master
add BlackMesa
2024-06-27 00:29:07 +08:00
ark-lamp-umbrella ca77102be1 add BlackMesa 2024-06-25 22:19:31 -07:00
Quinn 5ee89eb148 include bash version < 5 case 2024-06-20 14:13:18 +02:00
Quinn ced109f0ea fix colours not reverting properly 2024-06-20 13:45:40 +02:00
AnarchistHoneybun 5051b692f0 xenogender flag preset added
source : https://commons.wikimedia.org/wiki/File:Xenogender_pride_flag.svg
2024-06-13 18:21:51 +05:30
iris 07e23e2a5b allow lightness values like '45' to parse 2024-06-11 00:37:41 -05:00
Tilman Holube 270334a385 Merge branch 'hykilpikonna:master' into master 2024-05-30 18:29:10 +02:00
C-HCM df7884c2ac Update presets.py
lets go lesbian
2024-05-29 19:25:23 -03:00
C-HCM a8f02e94b6 Update presets.py
+ otter and twink
2024-05-29 13:47:07 -03:00
C-HCM 881833d3c9 Update presets.py 2024-05-28 23:36:47 -03:00
C-HCM 207c608cd6 Update autocomplete.zsh 2024-05-28 22:49:35 -03:00
C-HCM ccab992c7b Update autocomplete.csh 2024-05-28 22:49:19 -03:00
C-HCM e385eef74a Update autocomplete.bash 2024-05-28 22:48:53 -03:00
C-HCM 820b78fb3b Update presets.py
added leather flag (two variants)
2024-05-28 22:39:50 -03:00
C-HCM 09c823d8c8 Update autocomplete.zsh 2024-05-28 18:45:39 -03:00
C-HCM aef326ae07 Update autocomplete.csh 2024-05-28 18:45:00 -03:00
C-HCM 1139abd9c6 Update autocomplete.bash 2024-05-28 18:44:21 -03:00
C-HCM 4517efc07e Update autocomplete.bash
🐻
2024-05-28 18:43:51 -03:00
C-HCM 3b5b3a556b Update presets.py
added bears 🐻
2024-05-28 18:42:28 -03:00
azalea 7534371b05 [+] Add ultramarine to foreground-background configuration list
Closes #276
2024-05-26 19:44:25 +08:00
Azalea fc98d61109 [PR] #299 from jelly: Make typing-extensions optional
Make typing_extensions only required for 3.7
2024-05-26 19:40:13 +08:00
Jelle van der Waa 359226c26b Make typing_extensions only required for 3.7
Literal was introduced in Python 3.8.
2024-05-25 19:26:26 +02:00
Azalea 109d7d2f01 [PR] #294 from luna-1024: Fix windows utf8
Support unicode ascii art on Windows
2024-05-25 01:27:24 +08:00
Luna 33fd55e6ad Support unicode ascii art on Windows
Windows Terminal can output UTF-8 characters. Configuration may be needed on Windows 10.
2024-05-22 13:39:42 -07:00
Bailey Kasin e08e864be0 [+] Add "Furreto Linux" support 2024-05-19 05:00:21 -07:00
Bailey Kasin 07da5d5f4b Revert auto-generated files
Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
2024-05-19 04:55:57 -07:00
FurretDev c2a26cf0ae changed something from the neofetch file even though i don't really know what does it do qwp 2024-05-17 20:17:07 +02:00
FurretDev 1c1483822c properly added furreto linux 2024-05-17 20:07:57 +02:00
FurretDev 46d38d4851 properly added furreto 2024-05-17 20:06:33 +02:00
FurretDev a8c2cfb921 added furreto 2024-05-16 22:56:09 +02:00
FurretDev d8affa54cd added furreto 2024-05-16 22:55:51 +02:00
azalea 4707704330 [F] Fix rehash 2024-05-16 21:55:14 +08:00
azalea 882dafd11b [U] bump version to 1.5.0a3 for testing (pypi testing only!) 2024-05-16 21:50:56 +08:00
azalea 9a867c6819 [U] Update deploy script 2024-05-16 21:50:22 +08:00
azalea bfeca1535b [-] Less verbose 2024-05-16 21:48:44 +08:00
azalea b2afcb8a64 [O] Edit WHEEL info 2024-05-16 21:47:31 +08:00
azalea 6e7ac1839d [+] Rehash tool 2024-05-16 21:45:44 +08:00
azalea 515afa90c3 [-] Remove distros ascii art that are removed from neofetch source 2024-05-16 21:41:28 +08:00
azalea 1a3e6a8e29 [O] Normalize distro package name 2024-05-16 21:32:03 +08:00
azalea cff0fdf6d8 [F] Fix win amd64 build? 2024-05-16 20:56:25 +08:00
azalea 896658d5e1 [F] Fix win amd64 packaging 2024-05-16 20:45:45 +08:00
azalea cdc0071e28 [U] bump version: 1.5.0a2 2024-05-16 20:42:04 +08:00
azalea 4ed4f19196 [+] Add a prompt to select backend 2024-05-16 20:37:55 +08:00
azalea 38b8173be4 [O] Exclude tools from packaging 2024-05-16 20:00:50 +08:00
azalea d70baebbf0 [+] Backup issue #261 analysis code 2024-05-16 19:52:15 +08:00
Azalea a2abe13b86 [PR] #272 from Un1q32: Add "Apple Terminal"
Add `Apple_Terminal` to list of special cases in get_term()
2024-05-16 01:51:00 +08:00
Azalea cd6f74931c [PR] #284 from harveyongh: Gilbert Baker flag
Add baker flag preset
2024-05-16 01:47:51 +08:00
Azalea 1b1c90ec44 [PR] #285 from JustSoup312: Add Chimera Linux
add Chimera Linux
2024-05-16 01:36:56 +08:00
Azalea d942de0b88 [PR] #288 from mekb-turtle: Add pnpm
Add support for pnpm packages
2024-05-16 01:35:30 +08:00
azalea d41a302e44 [F] Fix #286: Termux missing /usr/bin/env 2024-05-16 01:33:30 +08:00
Azalea 566011efff [PR] #287 from Atmois: Update readme
Update neofetch reference in README
2024-05-16 01:27:14 +08:00
mekb 96ba35b0bf Add support for pnpm packages
Fixes #282
2024-05-15 21:07:15 +10:00
Atmois 4c06a53c68 Update README.md
Update information in regards to the orignal neofetch as it has been archived on Apr 26, 2024
2024-05-15 10:09:56 +01:00
Aster Boese 30d1e67b53 add Chimera Linux 2024-05-13 14:52:21 -04:00
Harvey 22c8d76193 Merge branch 'hykilpikonna:master' into master 2024-05-13 10:41:09 -05:00
Azalea 36cdc6da2a [PR] #280 from topazus: Add fedora package in readme
hyfetch is in Fedora official repo
2024-05-10 17:06:44 +08:00
topazus 293889b9ad hyfetch is in Fedora official repo 2024-05-10 16:55:40 +08:00
Azalea e21f9bef26 [PR] #277 from msoderlund2027: Fraysexual flag
Added fraysexual flag!
2024-05-08 19:35:36 -07:00
Mischa Soderlund bbe141557e Merge pull request #1 from msoderlund2027/fraysexual-flag
Added fraysexual flag!
2024-05-08 20:03:11 -04:00
Mischa Soderlund f06c3fda31 Added fraysexual flag!
In reference to issue #275.
2024-05-08 19:51:08 -04:00
Azalea dbe67789d8 Merge pull request #274 from BKasin/neon
Add exception for KDE neon to *buntu version check
2024-05-08 06:24:25 -07:00
Tilman Holube 6a1ba72df9 adding more color options to nixos logo 2024-05-07 13:48:30 +02:00
Bailey Kasin 413a7d3681 Add except for KDE neon to *buntu version check 2024-05-06 19:41:54 -07:00
Bailey Kasin 18107d9601 [+] Add Ubuntu install note 2024-05-05 23:02:01 -07:00
Un1q32 5ded23e8dd Update neofetch 2024-05-03 16:06:59 -04:00
Un1q32 09506aaa3c Update neofetch 2024-05-03 16:02:21 -04:00
Azalea 770ffb01a5 [PR] #269 from BKasin: Kinfo for plasma 6
Use kinfo when plasma6 is detected
2024-05-03 10:11:15 -04:00
Bailey Kasin 41d767fa4e Use kinfo when plasma6 is detected
Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
2024-05-02 21:50:58 -07:00
Azalea e5169705b3 [PR] #267 from Un1q32: Display neovim version
Add neovim to list of editors that display fancy version info
2024-05-02 18:57:09 -04:00
Azalea 73bb634326 [PR] #265 from felipecrs: Improve pkgx
Improve pkgx integration
2024-05-02 18:52:51 -04:00
Un1q32 8eadfec466 Update neofetch 2024-05-02 17:15:59 -04:00
Felipe Santos 6816679ad9 Improve pkgx integration 2024-05-01 21:44:05 -03:00
Azalea 2a87f1d3b4 [PR] #263 from pokemonpasta: Add genderflux and girlflux flags
Add girlflux and genderflux flags
2024-05-01 17:41:02 -04:00
Azalea 6dec8c4a58 [PR] #259 from techie2000: Fix readme install instructions
docs: Update README.md
2024-05-01 17:37:06 -04:00
Azalea e466389ae9 Merge pull request #257 from OpenSauce04/package_minimal
neowofetch: Add `--package_minimal` option
2024-05-01 17:33:30 -04:00
pokemonpasta bb5f45a71c Add girlflux and genderflux flags 2024-05-01 12:56:24 +01:00
OpenSauce04 3a415600d5 Add --package_minimal
Reduces 'packages' output by omitting language package managers and Steam games, improving execution speed
2024-04-30 13:27:24 +00:00
techie2000 5bafa5128b docs: Update README.md
Modify method 3. Fixes #258
2024-04-30 14:12:33 +01:00
Azalea Gui 51f0ebf3ea [U] Change glibc version according to fastfetch upstream 2024-04-26 02:33:11 -04:00
azalea c7d6c753d9 [O] Specify glibc version in manylinux package 2024-04-25 00:34:32 -04:00
Azalea Gui d8bb0097c1 [+] Add win_amd64 build 2024-04-24 23:45:13 -04:00
Azalea Gui 9292a602df [O] NixOS XDG path #255 2024-04-24 23:40:03 -04:00
Azalea dbe657a05f [PR] #256 from rrotter/mac-studio-id
correct M2 Mac Studio hw.model
2024-04-24 22:29:35 -04:00
Ryan Rotter bb156173b5 correct M2 Mac Studio hw.model
per https://support.apple.com/en-us/102231
2024-04-24 22:01:54 -04:00
Azalea Gui 9cebc9df35 [U] Bump version 1.5.0alpha1 2024-04-23 08:59:00 -04:00
Azalea Gui 25a64b6ce3 [O] Finalize build process 2024-04-23 08:57:39 -04:00
azalea 5c34876c53 [O] Greatly simplify things 2024-04-23 08:54:21 -04:00
azalea 1e30a7701f [-] Remove GIT URL 2024-04-23 08:38:07 -04:00
Azalea Gui 1c9480b764 [+] Get bundled fastfetch path 2024-04-23 08:36:16 -04:00
Azalea Gui a385480d89 [+] Package fastfetch into hyfetch 2024-04-23 08:31:23 -04:00
azalea 81f4dc90e8 [F] Fix current dir 2024-04-23 07:43:48 -04:00
azalea 2b6d17c559 Merge branch 'master' of https://github.com/hykilpikonna/hyfetch 2024-04-23 07:42:14 -04:00
azalea 6f9155fe83 [+] Better build script 2024-04-23 07:42:08 -04:00
Azalea f32df6e6d0 [PR] Merge pull request #252 from YukariChiba/master
add eweOS
2024-04-19 02:11:38 -04:00
Yukari Chiba ece02c5d44 add eweOS 2024-04-19 13:42:47 +08:00
azalea d47a63d237 [+] Package windows git inside hyfetch wheel 2024-04-14 12:39:48 -04:00
azalea be8f75df01 [O] Optimize npm query
Closes https://github.com/hykilpikonna/hyfetch/issues/246
2024-04-13 19:54:28 -04:00
azalea bd9c0b30cf [F] Fix npm list count #240 2024-04-02 20:56:31 -04:00
Azalea b835eea039 [PR] #250 from oSoWoSo: better showing of apps managed by am 2024-04-02 20:35:48 -04:00
zenobit 01a01fb21b better showing of apps managed by am 2024-04-02 22:32:45 +02:00
Azalea 1bcf46aa42 Merge pull request #249 from oSoWoSo/dev
am fix
2024-03-29 22:59:21 -04:00
zenobit 811ec5d2d2 am fix 2024-03-29 16:23:58 +01:00
harvey mobile dc359abe45 Add baker flag layout to presets 2024-03-27 15:17:12 -05:00
Azalea be05f6984d [PR] #245 from solelychloe: Cider support
Add support for Cider
2024-03-20 04:37:04 -04:00
Chloe Arciniega e6d94bf20d Add support for Cider 2024-03-18 21:10:56 +05:00
Azalea Gui f9a43fba5f Merge https://git.vern.cc/mertoalex/hyfetch 2024-03-11 02:18:38 -04:00
mertoalex bc8499e2fb added plural flag 2024-03-10 23:47:49 +03:00
Azalea Gui 3ba7830824 [PR] dylanaraps/neofetch#2439 from krolmiki2011 - Add new Distro
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2439
Thanks to @krolmiki2011

Co-authored-by: krolmiki2011 <mikolajziolkowski504@gmail.com>
2024-03-04 00:23:35 -05:00
Azalea Gui d914d3ea2b [PR] dylanaraps/neofetch#2448 from EllisK-L - Fixed GPU not displaying in Haiku
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2448
Thanks to @EllisK-L

Co-authored-by: ellisk-l <ellis.keener.lacroix@gmail.com>
2024-03-04 00:17:27 -05:00
ellisk-l 7eb4102417 fixed GPU not displaying in Haiku 2024-03-04 09:35:46 -04:00
Azalea 7da1531d34 [PR] #238 from PerchunPak: Add fedora unicode
Add Fedora_unicode
2024-02-28 18:29:43 -05:00
PerchunPak b283b0d11d Run tools/list_distros.py 2024-02-28 17:47:17 +01:00
PerchunPak b8115e97ae Add Fedora_unicode 2024-02-28 17:46:57 +01:00
azalea 7c41025c55 [U] tea package manager is pkgx.sh now 2024-02-27 12:10:19 -05:00
Azalea 98d3d9f629 [U] Update repology badge
#204
2024-02-24 18:17:35 -08:00
Azalea d374354cb6 [PR] #235 from syimyuzya: Fix terminal font info for yakuake (again) 2024-02-20 18:56:14 -05:00
syimyuzya eeffb35944 [F] Fix terminal font info for yakuake (again)
Once fixed in dylanaraps#1615, but got broken again with the fix of
hykilpikonna#116.
2024-02-15 15:58:19 +08:00
azalea 048e2d93fd [F] Fix shellcheck 2024-02-14 00:03:36 -05:00
Azalea b9db6d2cc5 [PR] #234 from oSoWoSo: support "AM" Application Manager 2024-02-14 00:00:10 -05:00
zenobit d5e3b07c1c feat: AM: AppImages Manager 2024-02-13 23:48:16 +01:00
Azalea fd5ff6a821 Merge pull request #229 from slackingfred/1ststart
Fix Git package download
2024-02-06 19:26:18 -05:00
Bailey Kasin a33f85d45a [PR] #231 from ToasterUwU: Update PikaOS ASCII Art 2024-02-06 16:25:03 -08:00
ToasterUwU 1b89fc9531 Update PikaOS ASCII Art 2024-02-01 22:05:34 +01:00
krolmiki2011 2aa368ee9e Fix Issue 2024-01-28 11:57:25 +01:00
krolmiki2011 3d6be24e9f Add new Distro 2024-01-28 08:49:20 +01:00
Fred f2ed3e7155 Fix Git package download 2024-01-19 18:14:17 -08:00
Azalea 98efa7a44d [+] Add windows instructinos 2024-01-12 15:43:30 -08:00
azalea 25ec6bbac5 Merge branch 'master' of https://github.com/hykilpikonna/hyfetch 2024-01-08 23:36:35 -05:00
azalea eef4153c5b [PR] dylanaraps/neofetch#2434 from JohnMertz - Fedora immutable
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2434
Thanks to @JohnMertz

Co-authored-by: John Mertz <git@john.me.tz>
2024-01-08 23:36:08 -05:00
John Mertz 17e02a384f Add to lists of ASCIIs and distros
Re-flow lines to <=100 columns per CONTRIBUTING.md
2024-01-04 21:44:39 -07:00
John Mertz e50ec9e366 Add step to recognize Fedora variants and variant logos
These must appear before Fedora in the switch statement in order to match. Otherwise updating `"Fedora"*` to `"Fedora Linux"*` should work.
2024-01-04 21:43:32 -07:00
John Mertz 057f075a0e Container Linux is deprecated and succeeded by Fedora CoreOS, with the same logo
Still match the old name, if necessary
2024-01-04 21:40:21 -07:00
John Mertz a410eb0646 Erroneous tabs 2024-01-04 21:37:25 -07:00
Bailey Kasin 56796a331f [+] Add FAQ note about using hyfetch in motd 2023-12-28 00:48:38 -08:00
azalea 2c33e7e37d [PR] dylanaraps/neofetch#2424 from geaaru - Add Macaroni OS
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2424
Thanks to @geaaru

Co-authored-by: Daniele Rondina <geaaru@gmail.com>
2023-12-22 18:40:47 -05:00
Daniele Rondina 8edddeaf8b Add Macaroni OS
* add Macaroni OS support

  * add anise package manager support
2023-12-22 11:59:17 +01:00
azalea caa1547e8c [F] Fix tripple-quote escaping #222 2023-12-22 01:58:15 -05:00
Azalea 807eed022d [PR] #221 from SubOptimal/debian
Adds instruction to install on Debian.
2023-12-20 22:01:10 -05:00
Frank Dietrich b69c400fa4 Adds instruction to install on Debian. 2023-12-20 09:53:45 +01:00
azalea 5f266a3f16 [F] Fix debian version on ubuntu #195 2023-12-18 22:38:08 -05:00
azalea b740ddc3e5 [F] Fix debian version on ubuntu #195 2023-12-18 22:32:04 -05:00
azalea dfc3f59323 Merge branch 'master' of https://github.com/hykilpikonna/hyfetch 2023-12-02 13:31:03 -05:00
Azalea 0c1ac93a4d [PR] #220 from streaksu: Fix terminal emulator selection 2023-12-03 03:30:48 +09:00
streaksu f449cfadc3 Fix terminal emulator selection 2023-12-02 19:17:30 +01:00
Azalea bdb222f9f8 [PR] #219 from streaksu: Ironclad OS 2023-12-03 02:55:34 +09:00
streaksu 985f32e5a6 Add Ironclad OS 2023-12-02 17:57:51 +01:00
azalea da48f1d32c [O] Reorder changelog 2023-12-01 19:33:06 -05:00
azalea 98a3befd4b [U] Release 1.4.11 2023-12-01 19:22:33 -05:00
azalea 09c62956a3 [F] Fix distro listing 2023-12-01 19:21:31 -05:00
azalea 9945075de5 [F] Fix deploy script 2023-12-01 19:17:36 -05:00
azalea 5f079cec46 [F] Fix distro listing script 2023-12-01 19:14:49 -05:00
azalea 97a31aba52 [+] Changelog 2023-12-01 19:05:15 -05:00
azalea 76f3ce2608 [PR] dylanaraps/neofetch#2417 from ACertainPersons - Added linux_small
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2417
Thanks to @ACertainPersons

Co-authored-by: ACertainPersons <127463096+ACertainPersons@users.noreply.github.com>
2023-12-01 14:35:09 -05:00
azalea 3a5ce4eb58 [F] Fix parch alignment
https://github.com/dylanaraps/neofetch/pull/2045
2023-12-01 14:30:35 -05:00
azalea 44c9a5491b [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-12-01 14:26:57 -05:00
Sohrab Behdani 2cbd8e440d changed parch neofetch logo 2023-12-01 20:56:47 +03:30
azalea 4516747954 Merge branch 'master' of https://github.com/hykilpikonna/hyfetch 2023-12-01 06:16:10 -05:00
azalea 813b6f7173 [F] Fix shellcheck #218 2023-12-01 06:15:55 -05:00
Azalea 937e5041c4 [PR] #217 from OldWorldOrdr: Add windows NT 2023-12-01 20:01:37 +09:00
azalea f59f6f55d2 [F] Fix backslash escape bug #218 2023-12-01 05:58:19 -05:00
Azalea 2ce3bb6a11 [PR] Merge pull request #218 from mc680x0/master 2023-12-01 19:52:03 +09:00
Horst G. Burkhardt a2fb43bfca add Adélie Linux to list of ASCII logos 2023-11-30 10:24:24 +00:00
Horst G. Burkhardt 9a5d8fb971 colourise Adélie Linux logo 2023-11-30 07:53:19 +00:00
ACertainPersons 8ee497ad97 Readded Plasma for Backwards Compatibility 2023-11-29 20:20:06 -06:00
ACertainPersons 5072baf1cf Added linux_small 2023-11-29 19:47:33 -06:00
Horst G. Burkhardt b407bc0ea4 fix and colourise digital UNIX logo 2023-11-30 00:26:06 +00:00
Horst G. Burkhardt 78bcf1e5cc add digital UNIX logo (uncolourised) for OSF/1, DEC UNIX, and Tru64 2023-11-30 00:13:34 +00:00
Horst G. Burkhardt e080924040 Update distro logo for Adélie Linux with distro tagline 2023-11-30 00:08:44 +00:00
Horst G. Burkhardt c2f69d64f4 Add distro logo for Adélie Linux 2023-11-30 00:01:37 +00:00
Horst G. Burkhardt 620bc2ca88 preliminary support for OSF/1 2023-11-29 08:34:06 +00:00
OldWorldOrdr ea61ca96b7 Update neofetch 2023-11-24 19:35:56 -05:00
azalea 979e3950e9 [-] Remove Aster Linux #216
Closes #216
2023-11-24 12:10:37 -05:00
azalea ce1423bfbd [+] Add Peropesis Linux support
https://github.com/dylanaraps/neofetch/issues/2414
2023-11-22 04:26:55 -05:00
azalea f66b128caf [PR] dylanaraps/neofetch#2413 from Xray-OS - ASCII Artwork for Xray_OS (Arch Linux)
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2413
Thanks to @Xray-OS

Co-authored-by: xray_os <xray_os@proton.me>
2023-11-22 03:42:48 -05:00
azalea e63e2693c2 [+] Add support for npm global packages
Closes #215
2023-11-22 02:16:25 -05:00
xray_os 5e109afceb edit the name of the distro 2023-11-18 10:37:47 -04:00
Azalea 524baf9cf7 [PR] #214 from BKasin: Check for newer xfce4-term config
[+] Check for newer xfce4-term config
2023-11-17 13:07:48 -08:00
Bailey Kasin deac271585 [+] Check for newer xfce4-term config
Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
2023-11-17 01:11:37 -08:00
xray_os b027dc4cb5 fixing even more 2023-11-12 23:59:06 -04:00
xray_os 5b93e00b63 fixing even more 2023-11-12 23:54:32 -04:00
xray_os d7e9ee8499 fixing 2023-11-12 23:33:40 -04:00
xray_os 48da56a78e ASCII Artwork done 2023-11-12 23:26:29 -04:00
azalea a1e42b4f89 [O] Keep original plasma for backward compatibility
https://github.com/dylanaraps/neofetch/pull/2411
2023-11-10 22:14:10 -05:00
azalea 0f62374205 [PR] dylanaraps/neofetch#2411 from ACertainPersons - Fixed Kubuntu recognized as Ubuntu
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2411
Thanks to @ACertainPersons

Co-authored-by: ACertainPersons <127463096+ACertainPersons@users.noreply.github.com>
2023-11-10 22:12:45 -05:00
ACertainPersons 953001537f Fixed Kubuntu recognized as Ubuntu 2023-11-10 20:12:10 -06:00
azalea 05bdef915a [PR] dylanaraps/neofetch#2409 from makuhlmann - Added support for Interix (Windows Subsystem for UNIX)
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2409
Thanks to @makuhlmann

Co-authored-by: makuhlmann <19255462+makuhlmann@users.noreply.github.com>
2023-11-01 00:35:53 -04:00
azalea 91ced42151 Merge branch 'master' of https://github.com/hykilpikonna/hyfetch 2023-11-01 00:24:49 -04:00
azalea 5d076fcea6 [PR] dylanaraps/neofetch#2407 from Online122228 - added MainsailOS support and ascii art
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2407
Thanks to @Online122228

Co-authored-by: Online122228 <pemtimdukaj@hotmail.com>
2023-11-01 00:23:51 -04:00
makuhlmann ec8693322a Code style fixes according to coding convention 2023-10-31 16:26:49 +01:00
makuhlmann a6e184bd4a Added Interix support for OS, Distro, Model, Kernel, Uptime, CPU, GPU, Memory, Battery, Packages, Battery; Fixed Logo not displying properly on Interix Bash 2023-10-31 15:51:50 +01:00
Bailey Kasin d16806cb16 [F] Add code tags to commands 2023-10-31 06:11:21 -07:00
makuhlmann bfcd8b1f67 Added Interix logo 2023-10-31 13:53:18 +01:00
Azalea 81cdaa980c Merge pull request #211 from EnterTheVoid-x86/master
Fix phyOS logo
2023-10-31 03:10:25 -04:00
etvx86 2af4aa9adc Fix phyOS logo 2023-10-30 20:03:54 -04:00
Online122228 ae4e484d65 added MainsailOS support and ascii art 2023-10-30 01:04:13 +01:00
Azalea 1e736ae011 [PR] #210 from delgh1: Edit FAQ
[trivial change] update README.md: add one FAQ
2023-10-29 17:52:01 -04:00
Jing Luo f316b2b5cb Update README.md: add one FAQ 2023-10-27 05:13:07 +09:00
azalea b87bb47502 [PR] dylanaraps/neofetch#2339 from RedFireSoftwareEntertainment - Added AZOS GNU/Linux
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2339
Thanks to @RedFireSoftwareEntertainment

Co-authored-by: RedFireSoftwareEntertainment <98542488+RedFireSoftwareEntertainment@users.noreply.github.com>
2023-10-26 13:12:04 -04:00
azalea 797199dd05 [PR] dylanaraps/neofetch#2382 from hasecilu - Add LainOS distro
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2382
Thanks to @hasecilu

Co-authored-by: hasecilu <hasecilu@tuta.io>
2023-10-26 12:44:49 -04:00
Bailey Kasin 42a275b27b [F] Use correct awk logic for toml vs yml
I have no idea how, but I had the awk logic reversed.

Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
2023-10-21 23:18:37 -07:00
Bailey Kasin d267aaa90c [U] hyfetch is now in the official Gentoo repos 2023-10-20 00:43:24 -07:00
Bailey Kasin f06dea80fc [U] Add openSUSE and Homebrew 2023-10-18 14:15:37 -07:00
Bailey Kasin 1114fe53d4 [U] Add repology badge 2023-10-18 14:06:01 -07:00
Osama Albahrani a214e65b08 README: Add repology badge 2023-10-18 16:23:41 -04:00
Azalea b24f6663ba [U] Closes #203 2023-10-14 10:38:29 -07:00
azalea d91db75b4a Merge branch 'master' of https://github.com/hykilpikonna/hyfetch 2023-10-14 13:35:56 -04:00
azalea 294805f045 [+] Add Xenia by @bhavyakukkar
Co-Authored-By: bhavyakukkar <60596790+bhavyakukkar@users.noreply.github.com>
2023-10-14 13:35:50 -04:00
Bailey Kasin 47dea65fa8 [U] Add support for alacritty's new config format 2023-10-14 10:32:12 -07:00
Bailey Kasin 8e367e41a4 Add support for alacritty's new config format
Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
2023-10-13 20:14:29 -07:00
azalea 81134bbb34 [PR] dylanaraps/neofetch#2396 from malik1004x - No Hackintosh check on arm64
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2396
Thanks to @malik1004x

Co-authored-by: malik <malikowskirobert@gmail.com>
2023-10-12 17:46:17 -04:00
malik 0729e40e00 simplify iterm profile check 2023-10-12 13:40:40 +02:00
malik 598731bf89 no hackintosh check on arm64 2023-10-12 13:07:47 +02:00
azalea afcf53f01f [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-10-10 22:19:02 -04:00
李通洲 c505323826 Resolution (macOS): improve detection
1. fix detection when `screenresolution` is not available
2. make scale factor detection actually work
3. remove `screenresolution` dependency

EDIT: applied changes suggested by @hykilpikonna and fixed a
[bug](https://github.com/hykilpikonna/hyfetch/issues/196) that neofetch
fails to print scale factors when `system_profiler` fails to detect
refresh rates.
2023-10-11 09:18:50 +08:00
azalea 10b227a780 [PR] dylanaraps/neofetch#2391 from Pickles888 - Add EndeavourOS Small Option
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2391
Thanks to @Pickles888

Co-authored-by: Pickles888 <121081484+Pickles888@users.noreply.github.com>
2023-10-10 16:44:01 -04:00
azalea a9d76846a9 [U] Add lure.sh package 2023-10-10 16:30:00 -04:00
Pickles888 73d305ac69 Add EndeavourOS Small Option 2023-10-08 12:13:54 -07:00
RedFireSoftwareEntertainment d3577a8878 Update neofetch 2023-10-07 19:35:00 +00:00
azalea 5519dd16a0 [F] Fix #192 2023-10-02 19:17:42 -04:00
Bailey Kasin 20e93689b6 [F] Do not read debian_version on Ubuntu
Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
2023-09-29 11:32:21 -07:00
Azalea fca42c0390 Merge pull request #194 from YisuiDenghua/patch-5
Update for Gentoo in README
2023-09-28 21:45:40 -07:00
Milena - 一穗灯花 ce9c4aa432 Update README.md, Gentoo 2023-09-29 12:43:20 +08:00
RedFireSoftwareEntertainment 3ebfcfd474 Update neofetch 2023-09-27 15:55:43 +03:00
RedFireSoftwareEntertainment d7c3475726 Logo change on AZOS is now updated 2023-09-27 15:52:06 +03:00
Azalea 8d0393d654 [U] Update installation method
Closes #188
2023-09-26 07:48:15 -07:00
Azalea 54d82ff557 [PR] #191 from BKasin/debian-version
[F] Use /etc/debian_version to get .x on Debian
2023-09-26 07:46:06 -07:00
Azalea fd96030436 [PR] #190 from hasecilu/LainOS_hyfetch
Add LainOS distro
2023-09-26 07:44:35 -07:00
Azalea b1df896e44 [PR] #171 from OldWorldOrdr/fix-sed
use sed -r instead of -E when using GNU sed
2023-09-26 07:42:19 -07:00
azalea 4a053f942c [PR] dylanaraps/neofetch#2360 from XanuduBuster - Adding aerOS Logo
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2360
Thanks to @XanuduBuster

Co-authored-by: Piotr Zalewski <bardzoglodnypiotrek@gmail.com>
2023-09-26 10:40:23 -04:00
Piotr Zalewski 025dff4c30 fixes coloring of aerOS logo 2023-09-26 07:59:10 +00:00
OldWorldOrdr c33c897724 make it a wrapper function 2023-09-25 23:44:28 -04:00
Bailey Kasin ff8f9b2879 [F] Use /etc/debian_version to get .x on Debian
/etc/os-release on Debian only reports the major
version, so use mix os-release and debian_version
to build PRETTY_NAME.

Signed-off-by: Bailey Kasin <baileykasin@gmail.com>
2023-09-25 18:46:20 -07:00
hasecilu 6b84920587 Fix colors.
Oops! colors swapped
2023-09-25 14:00:58 -06:00
hasecilu a5f2653675 Fix colors.
First and second color were swapped.
2023-09-25 13:54:58 -06:00
hasecilu 5f527960e9 Add LainOS distro 2023-09-24 13:44:49 -06:00
hasecilu d312ca97cc Add LainOS distro 2023-09-24 13:15:34 -06:00
OldWorldOrdr c77a05809e Merge branch 'hykilpikonna:master' into fix-sed 2023-09-21 19:34:11 -04:00
Azalea Gui 74d1bb5622 Merge branch 'AOSC-Dev-aosc/afterdark-rename-and-logo' 2023-09-12 13:44:17 -04:00
Azalea d9d9998d99 [PR] #185 from AOSC-Dev/aosc/aosc-os-logo
neofetch: use new AOSC OS logo
2023-09-12 13:35:47 -04:00
Mingcong Bai a8f26f9e36 neofetch: rename AOSC OS/Retro as Afterglow; update logo
Refer to our newsletter for details on the rebranding.

Ref: https://aosc.io/news/posts/2023-08-25-coffee-break/
2023-09-08 16:27:41 +08:00
Mingcong Bai 1e8fade4be neofetch: use new AOSC OS logo 2023-09-08 15:46:10 +08:00
Azalea ace0245097 [PR] #177 from BKasin/config 2023-09-06 23:19:27 -04:00
Azalea 5122d08ff6 [U] Update release script for #174 2023-09-06 20:18:00 -07:00
Azalea 179fa567a3 [PR] #174 from BKasin/makefile 2023-09-06 23:14:49 -04:00
Azalea 1acfe273e8 [PR] #181 from BKasin/config_args 2023-09-06 23:11:12 -04:00
Bailey Kasin 1ff772a01b [+] Add ability to set backend args in config file
Adds the option to set permanent backend args in
the config file, as requested in #180.
2023-08-30 01:02:45 -07:00
Bailey Kasin 8182224dc7 [F] Fix config file argument not being used 2023-08-25 21:19:37 -07:00
Bailey Kasin 57a28da23b all shouldn’t call install, whoops 2023-08-23 01:38:39 -07:00
Bailey Kasin 4536dafa09 remove neowofetch.1 since it was a copy of neofetch.1 2023-08-22 23:55:49 -07:00
Bailey Kasin c8185944dc Update Makefile to be able to install hyfetch 2023-08-22 23:47:53 -07:00
OldWorldOrdr 4a90533097 Merge branch 'hykilpikonna:master' into fix-sed 2023-08-18 13:44:07 -04:00
azalea b353cb7247 Merge branch 'master' of https://github.com/hykilpikonna/hyfetch 2023-08-18 09:41:45 -07:00
azalea 4d9bbbae9c [F] Fix DE empty bracket in macOS
Closes #172

Co-Authored-By: Carter Li <6134068+carterli@users.noreply.github.com>
2023-08-18 09:41:43 -07:00
Azalea edf2a697d9 [PR] #170 from OldWorldOrdr: Fix color blocks for bash !=3 & <5 2023-08-18 12:37:07 -04:00
OldWorldOrdr c7a516247a use sed -r instead of -E when using GNU sed 2023-08-17 15:21:20 -04:00
OldWorldOrdr 29cbbae974 fix issue with cols 2023-08-17 09:03:27 -04:00
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
Xanudu 6167ba885b Update neofetch 2023-08-09 14:45:40 +05:30
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
komeil Parseh 5bbaf0a658 Update neofetch
Co-authored-by: Azalea <hykilpikonna@gmail.com>
2023-07-16 10:21:39 +03:30
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
RedFireSoftwareEntertainment 41d1446476 Update neofetch 2023-07-10 10:54:12 +03:00
RedFireSoftwareEntertainment 02b8e6bd5f Update neofetch 2023-07-10 10:47:24 +03:00
RedFireSoftwareEntertainment 356c83f057 Update neofetch 2023-07-10 10:00:52 +03:00
RedFireSoftwareEntertainment 38cf9502c5 Update neofetch.1 2023-07-10 09:38:30 +03:00
RedFireSoftwareEntertainment ae70359fca Update neofetch.1 2023-07-10 09:08:28 +03: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
Azalea Gui 48d7772b7f [U] Release 1.4.7 2023-02-18 22:04:19 -05:00
Azalea Gui 664de7810d [U] Changelog 2023-02-18 22:01:15 -05:00
Azalea Gui fa4749cc21 [+] Initial ASCII Logo for CuteOS
Credit to: https://gitee.com/cute-os/neofetch/commit/6c461c937d156645365c5b6daebf5770a462b8bc

Discussion at: dylanaraps/neofetch#2291

Co-Authored-By: Floating dream <115727099+Cute-Swifts@users.noreply.github.com>
2023-02-18 22:00:22 -05:00
Azalea Gui b8091f4a79 [U] Changelog 2023-02-18 21:55:51 -05:00
Azalea Gui de50bfdbeb [PR] dylanaraps/neofetch#2295 from LiamAEdwards - Add support for ArseLinux
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2295
Thanks to @LiamAEdwards

Co-authored-by: LiamAEdwards <liam.a.edwards@protonmail.com>
2023-02-18 21:36:02 -05:00
LiamAEdwards cbd3ef92d4 Fixed formatting 2023-02-18 18:52:57 +00:00
LiamAEdwards 92b79b704e Fixed the logo not loading 2023-02-18 18:51:32 +00:00
LiamAEdwards 13d47b1687 Added ArseLinux logo 2023-02-18 18:48:05 +00:00
Azalea Gui a35b03865f [F] Fix shellcheck SC2181 with PR dylanaraps/neofetch#2293 2023-02-17 17:08:53 -05:00
Azalea Gui 8e753e5f42 [PR] dylanaraps/neofetch#2293 from senjan - simple improvements for Solaris
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2293
Thanks to @senjan

Co-authored-by: senjan <senjan@atlas.cz>
2023-02-17 17:04:13 -05:00
Hykilpikonna 037a1a58ca [PR] #94 from medanisjbara: WM exact name matches 2023-02-14 13:24:39 -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
Hykilpikonna 4f955dc0b9 [PR] #95 from stock-linux
[U] Update Stock Linux package counter for the new package manager
2023-02-13 09:04:37 -05:00
Skythrew 971c3b8284 [U] Update Stock Linux package counter for the new package manager 2023-02-13 11:02:51 +01:00
Med Anis Jbara 6a44c6b441 WM exact name matches 2023-02-13 00:56:58 +01:00
Azalea Gui 731d9a96d9 [-] Revert unintended change 5a212e3 #2289 2023-02-11 23:32:46 -05:00
Azalea Gui 61c4cf5b35 [PR] dylanaraps/neofetch#2289 from danimesq - Add Floflis
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2289
Thanks to @danimesq

Co-authored-by: Daniell Mesquita <daniellmesquita@protonmail.com>
2023-02-11 23:31:44 -05:00
Hykilpikonna ecde2776b0 [PR] #93 from OldWorldOrdr: Fix scoop 2023-02-11 23:15:29 -05:00
Hykilpikonna 3834122a37 [U] scoop: Use pkgs_h instead of custom sed 2023-02-11 23:14:29 -05:00
OldWorldOrdr 928dfd713c fix 2023-02-11 19:22:50 -05:00
OldWorldOrdr 049f259227 this is no longer nessesary and also doesnt work anymore 2023-02-11 19:15:34 -05:00
Azalea Gui a87e2267ea [O] Add automatically generated notice for distro files
#90 #91 #92
2023-02-10 23:30:58 -05:00
Azalea Gui be475f0211 [-] Remove old catchy_os.py (Fixes #92) 2023-02-10 23:25:16 -05:00
Azalea Gui db69285ec1 [F] Fix generator script quotation escaping #91 #90 2023-02-10 23:05:23 -05:00
Hykilpikonna ecbc5ceed3 [PR] #88 from medanisjbara: Fix false positive sway detection 2023-02-10 00:16:22 -05:00
Med Anis Jbara dddc2d15d0 Merge branch 'hykilpikonna:master' into patch-1 2023-02-09 22:52:35 +01:00
Azalea Gui 2860c1efd6 [F] Properly escape path #89 2023-02-08 15:03:40 -05:00
Azalea Gui 6302ccbfdf [U] Changelog 2023-02-08 14:50:39 -05:00
Med Anis Jbara bfeac2203c fix: swaybg causing sway false positives
Many  wlroots based WMs use swaybg to set the background. Which does occasionally cause false positives (detection of sway as a WM when it's actually not the case).
2023-02-08 20:08:35 +01:00
Azalea Gui 99511a4863 [+] Use colorama to fix colors on Windows #45 2023-02-07 18:53:14 -05:00
Azalea Gui fec5ebe628 [+] Add colorama dependency for windows only 2023-02-07 18:52:51 -05:00
Azalea Gui 96a48659e5 [O] Global IS_WINDOWS constant 2023-02-07 18:52:37 -05:00
Azalea Gui 6f0e659d90 [F] Add even more paths #84 2023-02-07 18:45:22 -05:00
Azalea Gui 089f669e6a [F] Add more detection path for get_command_path #84 2023-02-07 18:41:19 -05:00
Azalea Gui 212ac1a3df [O] Syntax consistency 2023-02-07 18:24:24 -05:00
Hykilpikonna b9eeb068fa [PR] #87 from RealFX-Code: Windows git command check 2023-02-07 18:18:33 -05:00
rlfx 026cfffde1 add vscode debugger profile, It's why my copy didn't work. 2023-02-07 19:13:37 +01:00
rlfx 0bf0473b90 Fix git path being hard-coded This enables running hyfetch on machines without git installed via the git-for-windows installer. 2023-02-07 17:44:19 +01:00
Azalea Gui 7034721435 [O] Put bios date in parentheses
https://github.com/dylanaraps/neofetch/issues/2284
2023-01-20 20:05:08 -05:00
Azalea Gui 62486ca5ef [+] Linux bluetooth detection
https://github.com/dylanaraps/neofetch/issues/2284
2023-01-20 20:04:41 -05:00
Azalea Gui b366211d70 [+] Linux bios detection
https://github.com/dylanaraps/neofetch/issues/2284
2023-01-20 19:54:38 -05:00
Hykilpikonna e8f8968e4a [PR] #81 from cybfuyu: add gendervoid flag colors 2023-01-20 19:39:53 -05:00
Hykilpikonna 1c45b42058 Merge branch 'master' into master 2023-01-20 19:37:06 -05:00
Azalea Gui a2ba1c9ca2 [+] Add burger flag 🍔 2023-01-20 19:34:46 -05:00
cybfuyu a93d17705b add gendervoid flag colors 2023-01-20 22:16:55 +00:00
Silent d8bdffa1f1 Added SalientOS 2022-12-03 14:57:16 +00:00
senjan 1369828e3e simple improvements for Solaris 2022-10-17 22:38:14 +02:00
Daniell Mesquita 586c652eab Solve conflicts/merge upstream 2022-02-09 13:46:38 -03: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
Daniell Mesquita 5a212e38ce update old files? 2021-12-01 16:11:41 -03:00
Daniell Mesquita d9d36690f9 add Floflis 2021-07-03 22:46:37 -03:00
486 changed files with 14383 additions and 1827 deletions
+2
View File
@@ -0,0 +1,2 @@
[env]
CARGO_WORKSPACE_DIR = { value = "", relative = true }
+71
View File
@@ -0,0 +1,71 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org
root = true
[*]
# Change these settings to your own preference
indent_style = space
indent_size = 4
# We recommend you to keep these unchanged
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.csv]
trim_trailing_whitespace = false
[*.js]
indent_style = space
indent_size = 4
[*.json]
indent_style = space
indent_size = 4
[*.md]
trim_trailing_whitespace = false
[*.py]
indent_style = space
indent_size = 4
[*.rs]
indent_style = space
indent_size = 4
[*.sh]
indent_style = space
indent_size = 4
[*.toml]
indent_style = space
indent_size = 4
[*.{yaml,yml}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = false
[.github/{actions,workflows}/**/*.yml]
indent_style = space
indent_size = 2
[Cargo.toml]
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab
indent_size = 4
[neofetch]
indent_style = space
indent_size = 4
[package.json]
indent_style = space
indent_size = 2
+17 -2
View File
@@ -1,2 +1,17 @@
# Auto detect text files and perform LF normalization
* text=auto
* text=auto eol=lf
*.csv text eol=lf
*.js text eol=lf
*.json text eol=lf
*.md text eol=lf
*.py text eol=lf
*.rs text eol=lf
*.sh text eol=lf
*.toml text eol=lf
*.txt text eol=lf
*.yaml text eol=lf
*.yml text eol=lf
Cargo.lock text eol=lf merge=binary
Makefile text eol=lf
MANIFEST.in text eol=lf
neofetch text eol=lf
-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.
+17 -1
View File
@@ -115,4 +115,20 @@ dmypy.json
# Custom
.idea
._*
._*
webhook-log
start_moderation.sh
gh_moderator.toml
moderator-data
hyfetch/git
build
dist
target
.vscode
.idea
*.iml
*.egg-info
__pycache__
*.pyc
*.pyo
*.pyd
+15
View File
@@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Module",
"type": "python",
"request": "launch",
"module": "hyfetch",
"justMyCode": true
}
]
}
Generated
+1298
View File
File diff suppressed because it is too large Load Diff
+51
View File
@@ -0,0 +1,51 @@
[workspace]
resolver = "2"
members = ["crates/*"]
[workspace.package]
version = "2.0.5"
authors = ["Azalea Gui <azalea@hydev.org>"]
edition = "2021"
rust-version = "1.75.0"
description = "Neofetch with LGBTQ+ pride flags!"
repository = "https://github.com/hykilpikonna/hyfetch"
license = "MIT"
[workspace.dependencies]
aho-corasick = { version = "1.1.3", default-features = false }
ansi_colours = { version = "1.2.2", default-features = false }
anstream = { version = "0.6.14", default-features = false }
anyhow = { version = "1.0.86", default-features = false }
bpaf = { version = "0.9.12", default-features = false }
crossterm = { version = "0.29.0", default-features = false }
deranged = { version = "0.3.11", default-features = false }
directories = { version = "6.0.0", default-features = false }
enable-ansi-support = { version = "0.2.1", default-features = false }
enterpolation = { version = "0.2.1", default-features = false }
fastrand = { version = "2.1.0", default-features = false }
indexmap = { version = "2.2.6", default-features = false }
itertools = { version = "0.14.0", default-features = false }
normpath = { version = "1.2.0", default-features = false }
palette = { version = "0.7.6", default-features = false }
regex = { version = "1.10.5", default-features = false }
same-file = { version = "1.0.6", default-features = false }
serde = { version = "1.0.203", default-features = false }
serde_json = { version = "1.0.118", default-features = false }
serde_path_to_error = { version = "0.1.16", default-features = false }
shell-words = { version = "1.1.0", default-features = false }
strum = { version = "0.27.2", default-features = false }
supports-color = { version = "3.0.0", default-features = false }
tempfile = { version = "3.10.1", default-features = false }
terminal-colorsaurus = { version = "1.0.0", default-features = false }
terminal_size = { version = "0.4.3", default-features = false }
thiserror = { version = "1.0.61", default-features = false }
time = { version = "0.3.36", default-features = false }
toml_edit = { version = "0.23.6", default-features = false }
tracing = { version = "0.1.40", default-features = false }
tracing-subscriber = { version = "0.3.18", default-features = false }
unicode-normalization = { version = "0.1.23", default-features = false }
unicode-segmentation = { version = "1.11.0", default-features = false }
which = { version = "7.0.1", default-features = false }
[workspace.lints.clippy]
arithmetic_side_effects = "warn"
-1
View File
@@ -1 +0,0 @@
include hyfetch/scripts/*
-16
View File
@@ -1,16 +0,0 @@
PREFIX = /usr
MANDIR = $(PREFIX)/share/man
all:
@echo Run \'make install\' to install Neofetch.
install:
@mkdir -p $(DESTDIR)$(PREFIX)/bin
@mkdir -p $(DESTDIR)$(MANDIR)/man1
@cp -p neofetch $(DESTDIR)$(PREFIX)/bin/neofetch
@cp -p neofetch.1 $(DESTDIR)$(MANDIR)/man1
@chmod 755 $(DESTDIR)$(PREFIX)/bin/neofetch
uninstall:
@rm -rf $(DESTDIR)$(PREFIX)/bin/neofetch
@rm -rf $(DESTDIR)$(MANDIR)/man1/neofetch.1*
+382 -43
View File
@@ -6,42 +6,57 @@ neofetch with pride flags <3
### Running Updated Original Neofetch
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` :)
This repo also serves as an updated version of the original `neofetch` since the upstream [dylanaraps/neofetch](https://github.com/dylanaraps/neofetch) isn't maintained anymore and has been archived. 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 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)`
## Installation
### Method 1: Install using Python pip (Recommended)
### Method 1: Install using pip (Recommended)
Install Python >= 3.7 first. Then, just do:
Even though hyfetch has been rewritten in Rust since 2.0.0, we also published PyPI packages with prebuilt rust binaries to allow seamless transition from the Python version. You can install the rust binaries using pip:
```sh
pip install hyfetch
pip install wheel
pip install -U hyfetch
```
If a rust binary is not available for your platform (e.g. riscv64), it will automatically fall back to the v1.99.0 Python version.
### 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))
* Universal [Lure.sh](https://lure.sh/): `lure in hyfetch` (Thanks to [@Elara6331](https://github.com/Elara6331))
* Arch Linux: `sudo pacman -S hyfetch` (Thanks to [@Aleksana](https://github.com/Aleksanaa) and [@Antiz96](https://github.com/Antiz96))
* Fedora Linux: `sudo dnf install hyfetch` (packaged by [@topazus](http://github.com/topazus))
* Nix: `nix-env -i hyfetch` (Thanks to [@YisuiDenghua](https://github.com/YisuiDenghua))
* Nix Profile: `nix profile install nixpkgs#hyfetch`
* Guix: `guix install hyfetch` (Thanks to [@WammKD](https://github.com/WammKD))
* Slackware: `sbopkg -b hyfetch` [Slackbuild](https://slackbuilds.org/repository/15.0/desktop/hyfetch/?search=hyfetch) (Thanks to [@bittin](https://github.com/bittin) , willysr (https://github.com/willysr), jebrhansen and Urchlay)
* Homebrew: `brew install hyfetch` (Thanks to [@catumin](https://github.com/catumin) and [@osalbahr](https://github.com/osalbahr))
* openSUSE Tumbleweed: `zypper in python311-hyfetch` (Thanks to [@catumin](https://github.com/catumin))
* Gentoo: `emerge --ask app-misc/hyfetch` (Thanks to [@catumin](https://github.com/catumin))
* Debian and Ubuntu `apt install hyfetch` (for Debian flavor >= [Trixie](https://packages.debian.org/trixie/hyfetch), Ubuntu flavor >= [Noble](https://packages.ubuntu.com/noble/hyfetch)) (Thanks to [@catumin](https://github.com/catumin))
### Method 3: Install the latest developmental version using git
[![Packaging status](https://repology.org/badge/vertical-allrepos/hyfetch.svg?columns=4&exclude_unsupported=1)](https://repology.org/project/hyfetch/versions)
Install Python >= 3.7 first. Then run the following commands:
### Method 3: Install using Cargo
Since hyfetch has been rewritten in Rust since 2.0.0, you can now install it using Cargo:
```sh
git clone https://github.com/hykilpikonna/hyfetch.git
cd hyfetch
pip install .
cargo install hyfetch
```
> [!WARNING]
> If you install using Cargo, you would need to manually install dependencies like fastfetch if you want to use it as the backend, and Git Bash if you're on Windows.
>
> The PyPI package has all the dependencies bundled, so it's recommended to use that instead.
## Usage
@@ -64,6 +79,22 @@ Feel free to experiment with it!
![image](https://user-images.githubusercontent.com/22280294/162614553-eb758e4e-1936-472c-8ca7-b601c696c6eb.png)
#### Q: Why do you use pride flag's coloring? I don't think it looks nice at all.
A: The core idea behind HyFetch coloring isn't just to make logos look nicer, it's about representation and identity. While it's okay to assess the visual appeal, you also need to understand that the LGBTQ+ flag colors serves a much deeper purpose than just aesthetics.
For many in the LGBTQ+ community, these flags symbolize their identity, struggles, and pride. Integrating these symbols into a showcase of the tech specs they share can provide a sense of empowerment. It's combining their enthusiasm for their favorite distro / hardware with their LGBTQ+ identity.
Also, by including flag coloring along with the updated neofetch, we're also broadcasting a wider message about the importance of inclusivity and representation. It's not just a design choice, it's a statement that promotes awareness and understanding toward the LGBTQ+ community.
#### Q: When I use `hyfetch` or `neowofetch` in my MotD, no art displays. How do I get the art back?
A: Most likely, the `stdout` detection is set to auto and is removing the ascii art and colors. To change this, you can: set `args` in your hyfetch.json to `"--stdout=off"`, add `--stdout=off` to the `neowofetch` command in your motd script, or set the option in $HOME/.config/(neofetch|neowofetch)/config.conf to off.
#### Q: How can I run HyFetch on Windows?
A: Install Python > 3.7 and Git > 2.42.0 first. Then, either open Git Bash terminal or install a terminal emulator that can display RGB colors (the default Windows cmd.exe cannot, but the new [Windows Terminal](https://apps.microsoft.com/detail/9N0DX20HK701?hl=en-US&gl=US) can). Then, run `pip install hyfetch` and run `hyfetch`.
## Contributing
@@ -87,37 +118,345 @@ 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
Note: You can install the latest nightly version by using:
```sh
pip install git+https://github.com/hykilpikonna/hyfetch.git@master
cargo install --git https://github.com/hykilpikonna/hyfetch
```
<!-- CHANGELOG STARTS HERE --->
### 2.0.5
**✨ Features & Enhancements**
* Added support for Secureblue ([#434](https://github.com/hykilpikonna/hyfetch/pull/434)).
* Added `void_old` logo variant ([#457](https://github.com/hykilpikonna/hyfetch/pull/457)).
* Added Femme flag ([#456](https://github.com/hykilpikonna/hyfetch/pull/456)).
**🐛 Bug Fixes**
* Fixed a panic when entering an invalid alignment option after rolling ([#460](https://github.com/hykilpikonna/hyfetch/issues/460)).
* Fixed Traceback printing on KeyboardInterrupt ([#462](https://github.com/hykilpikonna/hyfetch/issues/462)).
* Restored flags lost during Python/Rust presets merge ([#466](https://github.com/hykilpikonna/hyfetch/pull/466)).
* Fixed a panic with file metadata access ([#465](https://github.com/hykilpikonna/hyfetch/issues/465)).
### 2.0.4
**🔧 Building Pipeline Refactoring**
* Modernize Python building toolchain from `setup.py` to `pyproject.toml`
* Fixed a bug where Windows binaries are mistakenly built into Unix packages.
* Fixed a bug where `presets.json` was not being included in the built package.
### 2.0.3
(changelog is generated by Gemini from commit history)
This update brings a significant internal refactor to how color presets are managed, along with a new batch of pride flags and several important bug fixes.
**✨ Features & Enhancements**
* **Custom ASCII Art**: You can now specify a file path for custom ASCII art ([#429](https://github.com/hykilpikonna/hyfetch/pull/429)).
* **Hex Color Presets**: Added the ability to pass a custom comma-separated hex color string list (e.g., `#RRGGBB,#RRGGBB`) directly as a preset ([#435](https://github.com/hykilpikonna/hyfetch/pull/435)).
**🏳️‍🌈 New Flags**
* Added Transbian flag ([#449](https://github.com/hykilpikonna/hyfetch/pull/449))
* Added Autism Pride flag ([#450](https://github.com/hykilpikonna/hyfetch/pull/450))
* Added Transneutral & Cenelian flags ([#452](https://github.com/hykilpikonna/hyfetch/pull/452))
* Added Fluidflux flags ([#437](https://github.com/hykilpikonna/hyfetch/pull/437))
* Added Libragender flags ([#433](https://github.com/hykilpikonna/hyfetch/pull/433))
**🐛 Bug Fixes**
* **Crash Fix**: Fixed a panic that could occur if hyfetch was run on a distro with no defined ASCII art ([#455](https://github.com/hykilpikonna/hyfetch/pull/455)).
* **OS Support**: Added support for iOS 1.x ([#444](https://github.com/hykilpikonna/hyfetch/pull/444)) and old Apple TV models ([#438](https://github.com/hykilpikonna/hyfetch/pull/438)).
* **Python**:
* Fixed a bug where 3-length hex codes (e.g., `#FFF`) does not work properly ([#443](https://github.com/hykilpikonna/hyfetch/pull/443)).
* Fixed a string formatting issue for python 3.11 and earlier versions ([#442](https://github.com/hykilpikonna/hyfetch/pull/442)).
* Fixed a bug where extra top padding would appear above output ascii art ([#428](https://github.com/hykilpikonna/hyfetch/pull/428)).
* **Rust**:
* Fixed the logic for the pride month easter egg so it only marks itself as "displayed" during June ([#430](https://github.com/hykilpikonna/hyfetch/pull/430)).
* Fixed a build issue on Windows ([#439](https://github.com/hykilpikonna/hyfetch/pull/439)).
**🔧 Maintenance & Refactoring**
* **Preset Refactor**: Color presets are now stored in a central `presets.json` file. ([#451](https://github.com/hykilpikonna/hyfetch/issues/451)).
* **Dependency Updates**: Upgraded various Rust crates and other dependencies to their latest versions.
* **Code Cleanup**: General code shortening and readability improvements.
### 2.0.2
This is a small patch release that adds more flags and fixes some bugs from the recent Rust rewrite.
* 🏳️‍🌈 **New Flags**: Added new pride flags for Nullflux ([#397](https://github.com/hykilpikonna/hyfetch/pull/397)), Hypergender ([#422](https://github.com/hykilpikonna/hyfetch/pull/422)), Fictosexual ([#394](https://github.com/hykilpikonna/hyfetch/pull/394)), and Adipophilia ([#424](https://github.com/hykilpikonna/hyfetch/pull/424)).
* 🐛 **Bug Fixes**:
* Fixed a critical bug where custom `fastfetch` configurations could break hyfetch ([#420](https://github.com/hykilpikonna/hyfetch/pull/420)).
* Corrected the `nixos_small` ASCII logo to display properly ([#421](https://github.com/hykilpikonna/hyfetch/pull/421)).
* 🔧 **Improvements**:
* Improved a warning message for better clarity ([#419](https://github.com/hykilpikonna/hyfetch/issues/419)).
### 2.0.1
(changelog is generated by Gemini from commit history)
**🦀 The Rust Rewrite!**
This is a massive update, rewriting the entire hyfetch core from Python to Rust for significantly improved performance, reliability, and maintainability. A huge thank you to **@teohhanhui** and all the contributors who made this possible!
* 🚀 **Complete Rewrite in Rust**: The entire codebase has been ported to Rust, resulting in major performance improvements and a smaller binary size.
* ⚙️ **New Backends**: In addition to neofetch and fastfetch, hyfetch now supports **macchina** as a backend option.
* 🌈 **Improved June Animation**: The `--june` pride month animation is now smoother, flicker-free ([#408](https://github.com/hykilpikonna/hyfetch/pull/408)).
* 🪟 **Native Windows Support**: The Rust version provides much-improved support for Windows.
**✨ Features & Enhancements**
* 🎨 **Automatic Theme Detection**: Hyfetch can now automatically detect your terminal's light/dark mode (when auto_detect_light_dark is true) ([#380](https://github.com/hykilpikonna/hyfetch/pull/380)).
* ✍️ **Font Logos**: Added a new feature to display a logo created from your system's font.
* 🌐 **Cloudflare for Public IP**: Now uses Cloudflare to fetch the public IP address, with a fallback option ([#416](https://github.com/hykilpikonna/hyfetch/pull/416)).
* 🖼️ **Interactive Logo Selection**: An interactive setup step now allows you to choose between default and small logo variants for your distro ([#392](https://github.com/hykilpikonna/hyfetch/pull/392)).
* 🏳️‍🌈 **New Pride Flags**: Added flags for Cisgender ([#386](https://github.com/hykilpikonna/hyfetch/pull/386)), Kessoku Band ([#384](https://github.com/hykilpikonna/hyfetch/pull/384)), and Watermelon Cream Lozenges ([#369](https://github.com/hykilpikonna/hyfetch/pull/369)) for memes.
* 📄 **Page Navigation**: Added `n` and `p` as shorthands for next/previous page selection and implemented page number roll-over ([#372](https://github.com/hykilpikonna/hyfetch/pull/372)).
**🖼️ New & Updated Distro Support**
* **Added Bazzite** ([#406](https://github.com/hykilpikonna/hyfetch/pull/406))
* **Added Rhino Linux Logo** ([#407](https://github.com/hykilpikonna/hyfetch/pull/407))
* **Updated openSUSE Logos & Added Slowroll**
* **Updated KSLinux Detection** ([#395](https://github.com/hykilpikonna/hyfetch/pull/395))
**🐛 Bug Fixes**
* **macOS**: Fixed CPU and memory fetching on older macOS versions like Leopard and Tiger ([#387](https://github.com/hykilpikonna/hyfetch/pull/387), [#389](https://github.com/hykilpikonna/hyfetch/pull/389)).
* **Packaging**: Resolved several issues with `cargo publish` to ensure reliable package deployment ([#405](https://github.com/hykilpikonna/hyfetch/pull/405)).
* **Performance**: Sped up RPM package counting by skipping digest and signature verification ([#371](https://github.com/hykilpikonna/hyfetch/pull/371)).
* **Animation**: Updated logic to ensure the pride month animation is always shown when `--june` is explicitly used ([#411](https://github.com/hykilpikonna/hyfetch/pull/411)).
* **General**: Fixed numerous bugs related to builds, path detection, cache handling, and distro name detection.
* **Formatting**: Fixed an unwanted space in the Python version output ([#401](https://github.com/hykilpikonna/hyfetch/pull/401)).
**🔧 Maintenance**
* **Documentation**: Updated the README with additional credits for Slackware contributors ([#365](https://github.com/hykilpikonna/hyfetch/pull/365)).
* **Build System**: Overhauled the build scripts for Rust, including support for `musl` static builds and cross-compilation for macOS and Windows.
### 1.99.0
This version would be the last version of HyFetch on Python as we migrate to Rust (Huge thanks to everyone on [#317](https://github.com/hykilpikonna/hyfetch/pull/317)!). It will also be an effort to start a transition that phases out the neowofetch/neofetch backend in favor of FastFetch, since the time needed to maintain the NF backend currently exceed our capacity. If you are willing to help maintaining it, please let us know!
* 🌈 **Improve Windows support**
* 🌈 **Include FastFetch into HyFetch PyPI package**
* 🌈 Detached our fork from neofetch
* 🌈 Build architecture-specific wheels for PyPI
* 🌈 Add plural flag (bc8499e2)
* 🌈 Add genderflux and girlflux flags ([#263](https://github.com/hykilpikonna/hyfetch/pull/263))
* 🌈 Add Fraysexual flag ([#277](https://github.com/hykilpikonna/hyfetch/pull/277))
* 🌈 Add Xenogender flag ([#309](https://github.com/hykilpikonna/hyfetch/pull/309))
* 🌈 Add Caninekin flag ([#318](https://github.com/hykilpikonna/hyfetch/pull/318))
* 🌈 Add Kenochoric, veldian, solian, lunian flags ([#331](https://github.com/hykilpikonna/hyfetch/pull/331))
* 🌈 Add Polyamorous, sapphic, androgyne, interprogress, progress, intersex, equal-rights, drag, neofluid, genderqueer, and pronoun flags ([#342](https://github.com/hykilpikonna/hyfetch/pull/342))
* 🌈 Add Gilbert Baker's original rainbow flag ([#284](https://github.com/hykilpikonna/hyfetch/pull/284))
* 🌈 Add Queer subculture flags ([#302](https://github.com/hykilpikonna/hyfetch/pull/302))
* 🌈 Add random flag option ([#334](https://github.com/hykilpikonna/hyfetch/pull/334))
* 🌈 Fix distro logo triple-quotation mark escaping ([#222](https://github.com/hykilpikonna/hyfetch/pull/222))
* 🌈 Fix Windows encoding issue on non-English systems ([#294](https://github.com/hykilpikonna/hyfetch/pull/294))
* 🌈 Fix termux compatibility ([#286](https://github.com/hykilpikonna/hyfetch/pull/286))
* 🌈 Fix term background detection not resetting properly ([#298](https://github.com/hykilpikonna/hyfetch/pull/298))
* 🌈 Make typing-extensions optional ([#299](https://github.com/hykilpikonna/hyfetch/pull/299))
* 🌈 Remove setuptools dependency ([#325](https://github.com/hykilpikonna/hyfetch/pull/325))
* 🌈 Allow lightness value without a '%' sign in config prompt ([#307](https://github.com/hykilpikonna/hyfetch/pull/307))
* 🌈 Fix Windows 7 and Python 3.7.0 support.
* 🖼 OS - Update Apple hardware ID list ([#256](https://github.com/hykilpikonna/hyfetch/pull/256))
* 🖼 OS - Remove Lilu detection for hackintosh ([#310](https://github.com/hykilpikonna/hyfetch/pull/310))
* 🖼 OS - Support host info on PowerPC Macs ([#341](https://github.com/hykilpikonna/hyfetch/pull/341))
* 🖼 DE - Show Kinfo for Plasma 6 ([#269](https://github.com/hykilpikonna/hyfetch/pull/269))
* 🖼 GPU - Fix GPU not displaying in Haiku (dylanaraps#2448)
* 🖼 GPU - List all intel GPU as detected ([#348](https://github.com/hykilpikonna/hyfetch/pull/348))
* 🖼 Distro - Add eweOS ([#252](https://github.com/hykilpikonna/hyfetch/pull/252))
* 🖼 Distro - Add Fedora Immutable distros (dylanaraps#2434)
* 🖼 Distro - Add Macaroni OS (dylanaraps#2424)
* 🖼 Distro - Add Ironclad OS ([#219](https://github.com/hykilpikonna/hyfetch/pull/219))
* 🖼 Distro - Add Chimera Linux ([#285](https://github.com/hykilpikonna/hyfetch/pull/285))
* 🖼 Distro - Add Tatra (dylanaraps#2439)
* 🖼 Distro - Add Furreto Linux ([#290](https://github.com/hykilpikonna/hyfetch/pull/290))
* 🖼 Distro - Add BlackMesa ([#316](https://github.com/hykilpikonna/hyfetch/pull/316))
* 🖼 Distro - Add Magix ([#338](https://github.com/hykilpikonna/hyfetch/pull/338))
* 🖼 Distro - Add Mauna ([#343](https://github.com/hykilpikonna/hyfetch/pull/343))
* 🖼 Distro - Add Arkane Linux ([#321](https://github.com/hykilpikonna/hyfetch/pull/321))
* 🖼 Distro - Add Linux From Scratch ([#336](https://github.com/hykilpikonna/hyfetch/pull/336))
* 🖼 Distro - Fix debian version on Ubuntu ([#195](https://github.com/hykilpikonna/hyfetch/pull/195))
* 🖼 Ascii - Update PikaOS logo ([#231](https://github.com/hykilpikonna/hyfetch/pull/231))
* 🖼 Ascii - Add Fedora unicode logo ([#238](https://github.com/hykilpikonna/hyfetch/pull/238))
* 🖼 Ascii - Fix colors not reverting properly ([#314](https://github.com/hykilpikonna/hyfetch/pull/314))
* 🖼 Ascii - Fix AmogOS backslash escape ([#339](https://github.com/hykilpikonna/hyfetch/pull/339))
* 🖼 Ascii - Add colorful NixOS logo ([#311](https://github.com/hykilpikonna/hyfetch/pull/311))
* 🖼 Terminal - Fix terminal emulator selection ([#220](https://github.com/hykilpikonna/hyfetch/pull/220))
* 🖼 Terminal - Fix terminal font info for yakuake ([#235](https://github.com/hykilpikonna/hyfetch/pull/235))
* 🖼 Terminal - Add Apple Terminal ([#272](https://github.com/hykilpikonna/hyfetch/pull/272))
* 🖼 Editor - Display neovim version ([#267](https://github.com/hykilpikonna/hyfetch/pull/267))
* 🖼 Package - Add an option to hide some package managers ([#257](https://github.com/hykilpikonna/hyfetch/pull/257))
* 🖼 Package - Add "AM" application manager ([#234](https://github.com/hykilpikonna/hyfetch/pull/234))
* 🖼 Package - Fix npm list count mismatch ([#240](https://github.com/hykilpikonna/hyfetch/pull/240))
* 🖼 Package - Add pnpm ([#288](https://github.com/hykilpikonna/hyfetch/pull/288))
* 🖼 Package - Add pkgx.sh ([#265](https://github.com/hykilpikonna/hyfetch/pull/265))
* 🖼 Package - Add pip, bonsai, rad, radula, birb ([#337](https://github.com/hykilpikonna/hyfetch/pull/337))
* 🖼 Package - Add MacPorts for Linux support ([#340](https://github.com/hykilpikonna/hyfetch/pull/340))
* 🖼 Package - Use XDG path for Nix package counting ([#255](https://github.com/hykilpikonna/hyfetch/pull/255))
* 🖼 Package - Fix short package count ([#305](https://github.com/hykilpikonna/hyfetch/pull/305))
* 🖼 Song - Add Cider player ([#245](https://github.com/hykilpikonna/hyfetch/pull/245))
* 🖼 Network - Fix network speed detection on macOS ([#360](https://github.com/hykilpikonna/hyfetch/pull/360))
### 1.4.11
* 🌈 Add ability to set backend args in hyfetch config file ([#181](https://github.com/hykilpikonna/hyfetch/pull/181))
* 🌈 Update makefile to be able to install hyfetch ([#174](https://github.com/hykilpikonna/hyfetch/pull/174))
* 🌈 Fix config file argument ([#177](https://github.com/hykilpikonna/hyfetch/pull/177))
* 🌈 Support pipx installation ([#188](https://github.com/hykilpikonna/hyfetch/pull/188), [#192](https://github.com/hykilpikonna/hyfetch/pull/192))
* 🌈 Create package for Debian, OpenSUSE, Homebrew, Gentoo, and lure.sh
([#184](https://github.com/hykilpikonna/hyfetch/pull/184), [#194](https://github.com/hykilpikonna/hyfetch/pull/194), [#207](https://github.com/hykilpikonna/hyfetch/pull/207), [#206](https://github.com/hykilpikonna/hyfetch/pull/206)) Huge thanks to @catumin!
* 🖼 DE - Fix DE empty bracket in macOS ([#172](https://github.com/hykilpikonna/hyfetch/pull/172))
* 🖼 OS - Disable Hackintosh check on arm64 processors ([dylanaraps#2396](https://github.com/dylanaraps/neofetch/pull/2396))
* 🖼 OS - Add Windows NT ([#217](https://github.com/hykilpikonna/hyfetch/pull/217))
* 🖼 Distro - Fixed Kubuntu recognized as Ubuntu ([dylanaraps#2411](https://github.com/dylanaraps/neofetch/pull/2411))
* 🖼 Distro - Use /etc/debian_version to get .x on Debian ([#191](https://github.com/hykilpikonna/hyfetch/pull/191))
* 🖼 Distro - Add LainOS ([#190](https://github.com/hykilpikonna/hyfetch/pull/190))
* 🖼 Distro - Add aerOS ([dylanaraps#2360](https://github.com/dylanaraps/neofetch/pull/2360))
* 🖼 Distro - Add Xenia ([#197](https://github.com/hykilpikonna/hyfetch/pull/197))
* 🖼 Distro - Add EndeavourOS Small Option ([dylanaraps#2391](https://github.com/dylanaraps/neofetch/pull/2391))
* 🖼 Distro - Add AZOS ([dylanaraps#2339](https://github.com/dylanaraps/neofetch/pull/2339))
* 🖼 Distro - Add MainsailOS ([dylanaraps#2407](https://github.com/dylanaraps/neofetch/pull/2407))
* 🖼 Distro - Add Interix ([dylanaraps#2409](https://github.com/dylanaraps/neofetch/pull/2409))
* 🖼 Distro - Add Peropesis Linux ([dylanaraps#2414](https://github.com/dylanaraps/neofetch/pull/2414))
* 🖼 Distro - Add Adélie Linux ([#218](https://github.com/hykilpikonna/hyfetch/pull/218))
* 🖼 Distro - Add Xray_OS ([dylanaraps#2413](https://github.com/dylanaraps/neofetch/pull/2413))
* 🖼 Ascii - Update AOSC logo ([#185](https://github.com/hykilpikonna/hyfetch/pull/185))
* 🖼 Ascii - Update phyOS logo ([#211](https://github.com/hykilpikonna/hyfetch/pull/211))
* 🖼 Ascii - Update Parch logo ([dylanaraps#2045](https://github.com/dylanaraps/neofetch/pull/2045))
* 🖼 Ascii - Add linux_small ([dylanaraps#2417](https://github.com/dylanaraps/neofetch/pull/2417))
* 🖼 Bug Fix - Fix color blocks for bash !=3 & <5 ([#170](https://github.com/hykilpikonna/hyfetch/pull/170))
* 🖼 Bug Fix - Use sed -r instead of -E when using GNU sed ([#171](https://github.com/hykilpikonna/hyfetch/pull/171))
* 🖼 Resolution - Improved MacOS resolution detection ([dylanaraps#2356](https://github.com/dylanaraps/neofetch/pull/2356))
* 🖼 Terminal - Add support for alacritty's new config format ([#202](https://github.com/hykilpikonna/hyfetch/pull/202))
* 🖼 Terminal - Check for newer xfce4-term config ([#214](https://github.com/hykilpikonna/hyfetch/pull/214))
* 🖼 Package - Add support for npm global packages ([#215](https://github.com/hykilpikonna/hyfetch/pull/215))
### 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](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](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))
@@ -125,21 +464,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
@@ -147,33 +486,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
@@ -194,7 +533,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>
@@ -410,11 +749,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
+66
View File
@@ -0,0 +1,66 @@
[package]
name = "hyfetch"
version = { workspace = true }
authors = { workspace = true }
edition = { workspace = true }
rust-version = { workspace = true }
description = { workspace = true }
repository = { workspace = true }
license = { workspace = true }
default-run = "hyfetch"
[dependencies]
aho-corasick = { workspace = true, features = ["perf-literal", "std"] }
ansi_colours = { workspace = true, features = [] }
anstream = { workspace = true, features = [], optional = true }
anyhow = { workspace = true, features = ["std"] }
bpaf = { workspace = true, features = [] }
crossterm = { workspace = true, features = [] }
deranged = { workspace = true, features = ["serde", "std"] }
directories = { workspace = true, features = [] }
enterpolation = { workspace = true, features = ["bspline", "std"] }
fastrand = { workspace = true, features = ["std"] }
indexmap = { workspace = true, features = ["serde", "std"] }
itertools = { workspace = true, features = ["use_std"] }
palette = { workspace = true, features = ["std"] }
serde = { workspace = true, features = ["derive", "std"] }
serde_json = { workspace = true, features = ["std"] }
serde_path_to_error = { workspace = true, features = [] }
shell-words = { workspace = true, features = ["std"] }
strum = { workspace = true, features = ["derive", "std"] }
supports-color = { workspace = true, features = [] }
tempfile = { workspace = true, features = [] }
terminal-colorsaurus = { workspace = true, features = [] }
terminal_size = { workspace = true, features = [] }
thiserror = { workspace = true, features = [] }
time = { workspace = true, features = ["local-offset", "std"] }
toml_edit = { workspace = true, features = [], optional = true }
tracing = { workspace = true, features = ["attributes", "std"] }
tracing-subscriber = { workspace = true, features = ["ansi", "fmt", "smallvec", "std", "tracing-log"] }
unicode-segmentation = { workspace = true, features = [] }
which = { workspace = true, features = [] }
[build-dependencies]
indexmap = { workspace = true, features = ["std", "serde"] }
regex = { workspace = true, features = ["perf", "std", "unicode"] }
unicode-normalization = { workspace = true, features = ["std"] }
fs_extra = "1.3.0"
serde = { workspace = true, features = ["derive", "std"] }
serde_json = { workspace = true, features = ["std"] }
anyhow = { workspace = true, features = ["std"] }
heck = "0.5.0"
[target.'cfg(windows)'.dependencies]
enable-ansi-support = { workspace = true, features = [] }
normpath = { workspace = true, features = [] }
same-file = { workspace = true, features = [] }
crossterm = { workspace = true, features = ["windows"] }
[features]
default = ["autocomplete", "color", "macchina"]
autocomplete = ["bpaf/autocomplete"]
color = ["bpaf/dull-color"]
macchina = ["dep:anstream", "dep:toml_edit", "toml_edit/display"]
[lints]
workspace = true
+322
View File
@@ -0,0 +1,322 @@
use std::env;
use std::fmt::Write as _;
use std::fs;
use std::io::{BufWriter, Write};
use std::path::{Path, PathBuf};
use anyhow::{Context, Result};
use fs_extra::dir::CopyOptions;
use heck::ToUpperCamelCase;
use indexmap::IndexMap;
use regex::Regex;
use serde::Deserialize;
use unicode_normalization::UnicodeNormalization as _;
#[derive(Debug)]
struct AsciiDistro {
pattern: String,
art: String,
}
impl AsciiDistro {
fn friendly_name(&self) -> String {
self.pattern
.split('|')
.next()
.expect("invalid distro pattern")
.trim_matches(|c: char| c.is_ascii_punctuation() || c == ' ')
.replace(['"', '*'], "")
}
}
fn anything_that_exist(paths: &[&Path]) -> Option<PathBuf> {
paths.iter().copied().find(|p| p.exists()).map(Path::to_path_buf)
}
fn main() -> Result<()> {
// Path hack to make file paths work in both workspace and manifest directory
let dir = PathBuf::from(env::var_os("CARGO_WORKSPACE_DIR").unwrap_or_else(|| env::var_os("CARGO_MANIFEST_DIR").unwrap()));
let o = PathBuf::from(env::var_os("OUT_DIR").unwrap());
for file in &["neofetch", "hyfetch/data"] {
let src = anything_that_exist(&[
&dir.join(file),
&dir.join("../../").join(file),
]).context("couldn't find neofetch")?;
let dst = o.join(file);
println!("cargo:rerun-if-changed={}", src.display());
// Copy either file or directory
if src.is_dir() {
let opt = CopyOptions { overwrite: true, copy_inside: true, ..CopyOptions::default() };
println!("copying {} to {}", src.display(), dst.display());
fs_extra::dir::copy(&src, &dst, &opt)?;
}
else { fs::copy(&src, &dst)?; }
}
preset_codegen(&o.join("hyfetch/data/presets.json"), &o.join("presets.rs"))?;
export_distros(&o.join("neofetch"), &o)?;
Ok(())
}
fn export_distros(neofetch_path: &Path, out_path: &Path) -> Result<()>
{
let distros = parse_ascii_distros(neofetch_path)?;
let mut variants = IndexMap::with_capacity(distros.len());
for distro in &distros {
let variant = distro
.friendly_name()
.replace(|c: char| c.is_ascii_punctuation() || c == ' ', "_")
.nfc()
.collect::<String>();
if variants.contains_key(&variant) {
let variant_fallback = format!("{variant}_fallback");
if variants.contains_key(&variant_fallback) {
todo!("too many name clashes in ascii distro patterns: {variant}");
}
variants.insert(variant_fallback, distro);
continue;
}
variants.insert(variant, distro);
}
let mut buf = r###"
#[derive(Clone, Eq, PartialEq, Hash, Debug)]
pub enum Distro {
"###.to_string();
for (variant, AsciiDistro { pattern, .. }) in &variants {
write!(buf, r###"
// {pattern})
{variant},
"###)?;
}
buf.push_str(
r###"
}
impl Distro {
pub fn detect<S>(name: S) -> Option<Self>
where
S: AsRef<str>,
{
let name = name.as_ref().to_lowercase();
"###,
);
for (variant, AsciiDistro { pattern, .. }) in &variants {
let patterns = pattern.split('|').map(|s| s.trim());
let mut conds = Vec::new();
for m in patterns {
let stripped = m.trim_matches(['*', '\'', '"']).to_lowercase();
if stripped.contains(['*', '"']) {
if let Some((prefix, suffix)) = stripped.split_once(r#""*""#) {
conds.push(format!(
r#"name.starts_with("{prefix}") && name.ends_with("{suffix}")"#
));
continue;
}
todo!("cannot properly parse: {m}");
}
// Exact matches
if m.trim_matches('*') == m {
conds.push(format!(r#"name == "{stripped}""#));
continue;
}
// Both sides are *
if m.starts_with('*') && m.ends_with('*') {
conds.push(format!(
r#"name.starts_with("{stripped}") || name.ends_with("{stripped}")"#
));
continue;
}
// Ends with *
if m.ends_with('*') {
conds.push(format!(r#"name.starts_with("{stripped}")"#));
continue;
}
// Starts with *
if m.starts_with('*') {
conds.push(format!(r#"name.ends_with("{stripped}")"#));
continue;
}
}
let condition = conds.join(" || ");
write!(buf, r###"
if {condition} {{
return Some(Self::{variant});
}}
"###)?;
}
buf.push_str(
r###"
None
}
pub fn ascii_art(&self) -> &str {
let art = match self {
"###,
);
let quotes = "#".repeat(80);
for (variant, AsciiDistro { art, .. }) in &variants {
write!(buf, r###"
Self::{variant} => r{quotes}"
{art}
"{quotes},
"###)?;
}
buf.push_str(
r###"
};
&art[1..art.len().checked_sub(1).unwrap()]
}
}
"###,
);
fs::write(out_path.join("distros.rs"), buf)?;
Ok(())
}
/// Parses ascii distros from neofetch script.
fn parse_ascii_distros(neofetch_path: &Path) -> Result<Vec<AsciiDistro>>
{
let nf = {
let nf = fs::read_to_string(neofetch_path)?;
// Get the content of "get_distro_ascii" function
let (_, nf) = nf
.split_once("get_distro_ascii() {\n")
.context("couldn't find get_distro_ascii function")?;
let (nf, _) = nf
.split_once("\n}\n")
.context("couldn't find end of get_distro_ascii function")?;
let mut nf = nf.replace('\t', &" ".repeat(4));
// Remove trailing spaces
while nf.contains(" \n") {
nf = nf.replace(" \n", "\n");
}
nf
};
let case_re = Regex::new(r"case .*? in\n")?;
let eof_re = Regex::new(r"EOF[ \n]*?;;")?;
// Split by blocks
let mut blocks = Vec::new();
for b in case_re.split(&nf) {
blocks.extend(eof_re.split(b).map(|sub| sub.trim()));
}
// Parse blocks
fn parse_block(block: &str) -> Option<AsciiDistro> {
let (block, art) = block.split_once("'EOF'\n")?;
// Join \
//
// > A <backslash> that is not quoted shall preserve the literal value of the
// > following character, with the exception of a <newline>. If a <newline>
// > follows the <backslash>, the shell shall interpret this as line
// > continuation. The <backslash> and <newline> shall be removed before
// > splitting the input into tokens. Since the escaped <newline> is removed
// > entirely from the input and is not replaced by any white space, it cannot
// > serve as a token separator.
// See https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_01
let block = block.replace("\\\n", "");
// Get case pattern
let pattern = block
.split('\n')
.next()
.and_then(|pattern| pattern.trim().strip_suffix(')'))?;
// Unescape backslashes here because backslashes are escaped in neofetch
// for printf
let art = art.replace(r"\\", r"\");
Some(AsciiDistro { pattern: pattern.to_owned(), art })
}
Ok(blocks.iter().filter_map(|block| parse_block(block)).collect())
}
// Preset parsing
#[derive(Deserialize, Debug)]
#[serde(untagged)]
enum PresetEntry {
Simple(Vec<String>),
Complex { colors: Vec<String>, weights: Option<Vec<u32>> },
}
type PresetMap = IndexMap<String, PresetEntry>;
fn preset_codegen(json_path: &Path, out_path: &Path) -> Result<()> {
// 1. Read and parse the JSON file
let json_str = fs::read_to_string(json_path)?;
let map: PresetMap = serde_json::from_str(&json_str)?;
let mut f = BufWriter::new(fs::File::create(&out_path)?);
// 2. Build the code string
let mut code_decl = String::new();
let mut code_match = String::new();
for (key, data) in map.iter() {
let colors = match data {
PresetEntry::Simple(c) => c,
PresetEntry::Complex { colors, .. } => colors,
};
let colors = colors.iter().map(|s| format!("\"{}\"", s)).collect::<Vec<_>>().join(", ");
let uck = key.to_upper_camel_case();
code_decl += &format!(r#"
#[serde(rename = "{key}")]
#[strum(serialize = "{key}")]
{uck},
"#);
let w = if let PresetEntry::Complex { weights: Some(w), .. } = data {
format!(".and_then(|c| c.with_weights(vec![{}]))", w.iter().map(|n| n.to_string()).collect::<Vec<_>>().join(", "))
} else { "".to_string() };
code_match += &format!(r#"
Preset::{uck} => ColorProfile::from_hex_colors(vec![{colors}]){w},
"#);
}
// 3. Write the static map to the generated file
writeln!(f, r#"
pub use crate::color_profile::ColorProfile;
use serde::{{Deserialize, Serialize}};
use strum::{{AsRefStr, EnumCount, EnumString, VariantArray, VariantNames}};
#[derive(Copy, Clone, Hash, Debug, AsRefStr, Deserialize, EnumCount, EnumString, Serialize, VariantArray, VariantNames)]
pub enum Preset {{
{code_decl}
}}
impl Preset {{
pub fn color_profile(&self) -> ColorProfile {{
(match self {{
{code_match}
}})
.expect("preset color profiles should be valid")
}}
}}"#)?;
f.flush()?;
Ok(())
}
+402
View File
@@ -0,0 +1,402 @@
use std::borrow::Cow;
use std::fmt::Write as _;
use std::ops::Range;
use aho_corasick::AhoCorasick;
use anyhow::{Context as _, Result};
use indexmap::IndexMap;
use tracing::debug;
use unicode_segmentation::UnicodeSegmentation;
use crate::color_util::{
color, ForegroundBackground, NeofetchAsciiIndexedColor, ToAnsiString as _,
};
use crate::neofetch_util::{
ascii_size, ColorAlignment, NEOFETCH_COLORS_AC, NEOFETCH_COLOR_PATTERNS,
};
use crate::presets::ColorProfile;
use crate::types::{AnsiMode, TerminalTheme};
/// Raw ascii art before any processing.
#[derive(Clone, Debug)]
pub struct RawAsciiArt {
pub asc: String,
pub fg: Vec<NeofetchAsciiIndexedColor>,
}
/// Normalized ascii art where every line has the same width.
#[derive(Clone, Debug)]
pub struct NormalizedAsciiArt {
pub lines: Vec<String>,
pub w: u8,
pub h: u8,
pub fg: Vec<NeofetchAsciiIndexedColor>,
}
/// Recolored ascii art with all color codes replaced.
#[derive(Clone, Debug)]
pub struct RecoloredAsciiArt {
pub lines: Vec<String>,
pub w: u8,
pub h: u8,
}
impl RawAsciiArt {
/// Makes sure every line is the same width.
#[tracing::instrument(level = "debug", skip(self))]
pub fn to_normalized(&self) -> Result<NormalizedAsciiArt> {
debug!("normalize ascii");
let (w, h) = ascii_size(&self.asc).context("failed to get ascii size")?;
let lines = self
.asc
.lines()
.map(|line| {
let (line_w, _) = ascii_size(line).unwrap();
let pad = " ".repeat(usize::from(w.checked_sub(line_w).unwrap()));
format!("{line}{pad}")
})
.collect();
Ok(NormalizedAsciiArt {
lines,
w: w.try_into().context("width does not fit in u8")?,
h: h.try_into().context("height does not fit in u8")?,
fg: self.fg.clone(),
})
}
}
impl NormalizedAsciiArt {
/// Uses a color alignment to recolor the ascii art.
#[tracing::instrument(level = "debug", skip(self), fields(self.w = self.w, self.h = self.h))]
pub fn to_recolored(
&self,
color_align: &ColorAlignment,
color_profile: &ColorProfile,
color_mode: AnsiMode,
theme: TerminalTheme,
) -> Result<RecoloredAsciiArt> {
debug!("recolor ascii");
if self.lines.is_empty() {
return Ok(RecoloredAsciiArt {
lines: self.lines.clone(),
w: 0,
h: 0,
});
}
let reset = color("&~&*", color_mode).expect("color reset should not be invalid");
let lines = match (color_align, self) {
(ColorAlignment::Horizontal, Self { fg, .. }) => {
let Self { lines, .. } = self
.fill_starting()
.context("failed to fill in starting neofetch color codes")?;
let ac = NEOFETCH_COLORS_AC
.get_or_init(|| AhoCorasick::new(NEOFETCH_COLOR_PATTERNS).unwrap());
// Replace foreground colors
let asc = {
let asc = lines.join("\n");
let mut replacements = NEOFETCH_COLOR_PATTERNS;
let fg_color = color(
match theme {
TerminalTheme::Light => "&0",
TerminalTheme::Dark => "&f",
},
color_mode,
)
.expect("foreground color should not be invalid");
for &fore in fg {
replacements[usize::from(u8::from(fore)).checked_sub(1).unwrap()] =
&fg_color;
}
ac.replace_all(&asc, &replacements)
};
let lines = asc.lines();
// Add new colors
let lines = {
let ColorProfile { colors } = color_profile
.with_length(self.h.try_into().expect("`h` should not be 0"))
.with_context(|| {
format!("failed to spread color profile to length {h}", h = self.h)
})?;
lines.enumerate().map(move |(i, line)| {
let bg_color =
colors[i].to_ansi_string(color_mode, ForegroundBackground::Foreground);
const N: usize = NEOFETCH_COLOR_PATTERNS.len();
let replacements = [&bg_color; N];
ac.replace_all(line, &replacements)
})
};
// Reset colors at end of each line to prevent color bleeding
lines.map(|line| format!("{line}{reset}")).collect()
},
(ColorAlignment::Vertical, Self { fg, .. }) if !fg.is_empty() => {
if self.w == 0 {
return Ok(RecoloredAsciiArt {
lines: self.lines.clone(),
w: 0,
h: self.h,
});
}
let Self { lines, .. } = self
.fill_starting()
.context("failed to fill in starting neofetch color codes")?;
let color_profile = color_profile
.with_length(self.w.try_into().expect("`w` should not be 0"))
.with_context(|| {
format!("failed to spread color profile to length {w}", w = self.w)
})?;
// Apply colors
let ac = NEOFETCH_COLORS_AC
.get_or_init(|| AhoCorasick::new(NEOFETCH_COLOR_PATTERNS).unwrap());
lines
.into_iter()
.map(|line| {
let line: &str = line.as_ref();
// `AhoCorasick` operates on bytes; we need to map that back to grapheme
// clusters (i.e. a character as seen on the terminal)
// See https://github.com/BurntSushi/aho-corasick/issues/72#issuecomment-821128859
let byte_idx_to_grapheme_idx: IndexMap<usize, usize> = {
let mut m: IndexMap<_, _> = line
.grapheme_indices(true)
.enumerate()
.map(|(gr_idx, (byte_idx, _))| (byte_idx, gr_idx))
.collect();
// Add an extra entry at the end, to support lookup using exclusive
// range end
m.insert(line.len(), m.len());
m
};
let mut matches = ac.find_iter(line).peekable();
let mut dst = String::new();
let mut offset: u8 = 0;
loop {
let current = matches.next();
let next = matches.peek();
let (neofetch_color_idx, span, done) = match (current, next) {
(Some(m), Some(m_next)) => {
let ai_start = m.start().checked_add(3).unwrap();
let ai_end = m.end().checked_sub(1).unwrap();
let neofetch_color_idx: NeofetchAsciiIndexedColor = line
[ai_start..ai_end]
.parse()
.expect("neofetch color index should be valid");
if offset == 0 && m.start() > 0 {
dst.push_str(&line[..m.start()]);
}
offset =
offset.checked_add(u8::try_from(m.len()).unwrap()).unwrap();
let mut span = m.span();
span.start = m.end();
span.end = m_next.start();
(neofetch_color_idx, span, false)
},
(Some(m), None) => {
// Last color code
let ai_start = m.start().checked_add(3).unwrap();
let ai_end = m.end().checked_sub(1).unwrap();
let neofetch_color_idx: NeofetchAsciiIndexedColor = line
[ai_start..ai_end]
.parse()
.expect("neofetch color index should be valid");
if offset == 0 && m.start() > 0 {
dst.push_str(&line[..m.start()]);
}
offset =
offset.checked_add(u8::try_from(m.len()).unwrap()).unwrap();
let mut span = m.span();
span.start = m.end();
span.end = line.len();
(neofetch_color_idx, span, true)
},
(None, _) => {
// No color code in the entire line
unreachable!(
"`fill_starting` ensured each line of ascii art starts \
with neofetch color code"
);
},
};
if span.is_empty() {
continue;
}
let txt = &line[span];
if fg.contains(&neofetch_color_idx) {
let fore = color(
match theme {
TerminalTheme::Light => "&0",
TerminalTheme::Dark => "&f",
},
color_mode,
)
.expect("foreground color should not be invalid");
write!(dst, "{fore}{txt}{reset}").unwrap();
} else {
let mut c_range: Range<usize> = span.into();
c_range.start = byte_idx_to_grapheme_idx
.get(&c_range.start)
.unwrap()
.checked_sub(usize::from(offset))
.unwrap();
c_range.end = byte_idx_to_grapheme_idx
.get(&c_range.end)
.unwrap()
.checked_sub(usize::from(offset))
.unwrap();
dst.push_str(
&ColorProfile::new(Vec::from(&color_profile.colors[c_range]))
.color_text(
txt,
color_mode,
ForegroundBackground::Foreground,
false,
)
.context("failed to color text using color profile")?,
);
}
if done {
break;
}
}
Ok(dst)
})
.collect::<Result<_>>()?
},
(ColorAlignment::Vertical, Self { fg, .. }) if fg.is_empty() => {
// Remove existing colors
let asc = {
let asc = self.lines.join("\n");
let ac = NEOFETCH_COLORS_AC
.get_or_init(|| AhoCorasick::new(NEOFETCH_COLOR_PATTERNS).unwrap());
const N: usize = NEOFETCH_COLOR_PATTERNS.len();
const REPLACEMENTS: [&str; N] = [""; N];
ac.replace_all(&asc, &REPLACEMENTS)
};
let lines = asc.lines();
// Add new colors
lines
.map(|line| {
let line = color_profile
.color_text(line, color_mode, ForegroundBackground::Foreground, false)
.context("failed to color text using color profile")?;
Ok(line)
})
.collect::<Result<_>>()?
},
(
ColorAlignment::Custom {
colors: custom_colors,
},
_,
) => {
let Self { lines, .. } = self
.fill_starting()
.context("failed to fill in starting neofetch color codes")?;
let ColorProfile { colors } = color_profile.unique_colors();
// Apply colors
let asc = {
let asc = lines.join("\n");
let ac = NEOFETCH_COLORS_AC
.get_or_init(|| AhoCorasick::new(NEOFETCH_COLOR_PATTERNS).unwrap());
const N: usize = NEOFETCH_COLOR_PATTERNS.len();
let mut replacements = vec![Cow::from(""); N];
for (&ai, &pi) in custom_colors {
let ai: u8 = ai.into();
let pi: u8 = pi.into();
replacements[usize::from(ai.checked_sub(1).unwrap())] = colors
[usize::from(pi)]
.to_ansi_string(color_mode, ForegroundBackground::Foreground)
.into();
}
ac.replace_all(&asc, &replacements)
};
let lines = asc.lines();
// Reset colors at end of each line to prevent color bleeding
lines.map(|line| format!("{line}{reset}")).collect()
},
_ => {
unreachable!()
},
};
Ok(RecoloredAsciiArt {
lines,
w: self.w,
h: self.h,
})
}
/// Fills the missing starting placeholders.
///
/// e.g. `"${c1}...\n..."` -> `"${c1}...\n${c1}..."`
fn fill_starting(&self) -> Result<Self> {
let ac =
NEOFETCH_COLORS_AC.get_or_init(|| AhoCorasick::new(NEOFETCH_COLOR_PATTERNS).unwrap());
let mut last = None;
let lines =
self.lines
.iter()
.map(|line| {
let line: &str = line.as_ref();
let mut new = String::new();
let mut matches = ac.find_iter(line).peekable();
match matches.peek() {
Some(m)
if m.start() == 0
|| line[0..m.start()].trim_end_matches(' ').is_empty() =>
{
// Line starts with neofetch color code
last = Some(&line[m.span()]);
},
Some(_) => {
new.push_str(last.context(
"failed to find neofetch color code from a previous line",
)?);
},
None => {
new.push_str(last.unwrap_or(NEOFETCH_COLOR_PATTERNS[0]));
},
}
new.push_str(line);
// Get the last placeholder for the next line
if let Some(m) = matches.last() {
last.context("non-space character seen before first color code")?;
last = Some(&line[m.span()]);
}
Ok(new)
})
.collect::<Result<_>>()?;
Ok(Self {
lines,
fg: self.fg.clone(),
..*self
})
}
}
File diff suppressed because it is too large Load Diff
+237
View File
@@ -0,0 +1,237 @@
use std::iter;
use std::path::PathBuf;
use std::str::FromStr as _;
use anyhow::Context as _;
#[cfg(feature = "autocomplete")]
use bpaf::ShellComp;
use bpaf::{construct, long, OptionParser, Parser as _};
use directories::BaseDirs;
use itertools::Itertools as _;
use strum::VariantNames;
use crate::color_util::{color, Lightness};
use crate::presets::Preset;
use crate::types::{AnsiMode, Backend};
#[derive(Clone, Debug)]
pub struct Options {
pub config: bool,
pub config_file: PathBuf,
pub preset: Option<String>,
pub mode: Option<AnsiMode>,
pub backend: Option<Backend>,
pub args: Option<Vec<String>>,
pub scale: Option<f32>,
pub lightness: Option<Lightness>,
pub june: bool,
pub debug: bool,
pub distro: Option<String>,
pub ascii_file: Option<PathBuf>,
pub print_font_logo: bool,
pub test_print: bool,
pub ask_exit: bool,
pub auto_detect_light_dark: Option<bool>,
}
pub fn options() -> OptionParser<Options> {
let config = long("config").short('c').help("Configure hyfetch").switch();
let config_file = long("config-file")
.short('C')
.help("Use another config file")
.argument("CONFIG_FILE");
#[cfg(feature = "autocomplete")]
let config_file = config_file.complete_shell(ShellComp::Nothing);
let config_file = config_file
.fallback_with(|| {
Ok::<_, anyhow::Error>(
BaseDirs::new()
.context("failed to get base dirs")?
.config_dir()
.join("hyfetch.json"),
)
})
.debug_fallback();
let preset = long("preset")
.short('p')
.help(&*format!(
"Use preset or comma-separated color list or comma-separated hex colors (e.g., \"#ff0000,#00ff00,#0000ff\")
PRESET={{{presets}}}",
presets = <Preset as VariantNames>::VARIANTS
.iter()
.chain(iter::once(&"random"))
.join(",")
))
.argument::<String>("PRESET");
#[cfg(feature = "autocomplete")]
let preset = preset.complete(complete_preset);
let preset = preset.optional();
let mode = long("mode")
.short('m')
.help(&*format!(
"Color mode
MODE={{{modes}}}",
modes = AnsiMode::VARIANTS.join(",")
))
.argument::<String>("MODE");
#[cfg(feature = "autocomplete")]
let mode = mode.complete(complete_mode);
let mode = mode
.parse(|s| {
AnsiMode::from_str(&s).with_context(|| {
format!(
"MODE should be one of {{{modes}}}",
modes = AnsiMode::VARIANTS.join(",")
)
})
})
.optional();
let backend = long("backend")
.short('b')
.help(&*format!(
"Choose a *fetch backend
BACKEND={{{backends}}}",
backends = Backend::VARIANTS.join(",")
))
.argument::<String>("BACKEND");
#[cfg(feature = "autocomplete")]
let backend = backend.complete(complete_backend);
let backend = backend
.parse(|s| {
Backend::from_str(&s).with_context(|| {
format!(
"BACKEND should be one of {{{backends}}}",
backends = Backend::VARIANTS.join(",")
)
})
})
.optional();
let args = long("args")
.help("Additional arguments pass-through to backend")
.argument::<String>("ARGS")
.parse(|s| shell_words::split(&s).context("ARGS should be valid command-line arguments"))
.optional();
let scale = long("c-scale")
.help("Lighten colors by a multiplier")
.argument("SCALE")
.optional();
let lightness = long("c-set-l")
.help("Set lightness value of the colors")
.argument("LIGHTNESS")
.optional();
let june = long("june").help("Show pride month easter egg").switch();
let debug = long("debug").help("Debug mode").switch();
let distro = long("distro")
.help("Test for a specific distro")
.argument("DISTRO")
.optional();
let test_distro = long("test-distro")
.help("Test for a specific distro")
.argument("DISTRO")
.optional();
let distro = construct!([distro, test_distro]);
let ascii_file = long("ascii-file")
.help("Use a specific file for the ascii art")
.argument("ASCII_FILE");
#[cfg(feature = "autocomplete")]
let ascii_file = ascii_file.complete_shell(ShellComp::Nothing);
let ascii_file = ascii_file.optional();
let print_font_logo = long("print-font-logo")
.help("Print the Font Logo / Nerd Font icon of your distro and exit")
.switch();
// hidden
let test_print = long("test-print")
.help("Print the ascii distro and exit")
.switch()
.hide();
let ask_exit = long("ask-exit")
.help("Ask for input before exiting")
.switch()
.hide();
let auto_detect_light_dark = long("auto-detect-light-dark")
.help("Enables hyfetch to detect light/dark terminal background in runtime")
.argument("BOOL")
.optional();
construct!(Options {
config,
config_file,
preset,
mode,
backend,
args,
scale,
lightness,
june,
debug,
distro,
ascii_file,
print_font_logo,
// hidden
test_print,
ask_exit,
auto_detect_light_dark,
})
.to_options()
.header(
&*color(
"&l&bhyfetch&~&L - neofetch with flags <3",
AnsiMode::Ansi256,
)
.expect("header should not contain invalid color codes"),
)
.version(env!("CARGO_PKG_VERSION"))
}
#[cfg(feature = "autocomplete")]
fn complete_preset(input: &String) -> Vec<(String, Option<String>)> {
<Preset as VariantNames>::VARIANTS
.iter()
.chain(iter::once(&"random"))
.filter_map(|&name| {
if name.starts_with(input) {
Some((name.to_owned(), None))
} else {
None
}
})
.collect::<Vec<_>>()
}
#[cfg(feature = "autocomplete")]
fn complete_mode(input: &String) -> Vec<(String, Option<String>)> {
AnsiMode::VARIANTS
.iter()
.filter_map(|&name| {
if name.starts_with(input) {
Some((name.to_owned(), None))
} else {
None
}
})
.collect::<Vec<_>>()
}
#[cfg(feature = "autocomplete")]
fn complete_backend(input: &String) -> Vec<(String, Option<String>)> {
Backend::VARIANTS
.iter()
.filter_map(|&name| {
if name.starts_with(input) {
Some((name.to_owned(), None))
} else {
None
}
})
.collect::<Vec<_>>()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn check_options() {
options().check_invariants(false)
}
}
+232
View File
@@ -0,0 +1,232 @@
use std::iter;
use std::num::{NonZeroU8, NonZeroUsize};
use anyhow::{anyhow, Result, Context as _};
use indexmap::IndexSet;
use palette::num::ClampAssign as _;
use palette::{IntoColorMut as _, LinSrgb, Okhsl, Srgb};
use tracing::debug;
use unicode_segmentation::UnicodeSegmentation as _;
use crate::color_util::{ForegroundBackground, Lightness, ToAnsiString as _};
use crate::types::{AnsiMode, TerminalTheme};
#[derive(Clone, Eq, PartialEq, Debug)]
pub struct ColorProfile {
pub colors: Vec<Srgb<u8>>,
}
#[derive(Clone, PartialEq, Debug)]
pub enum AssignLightness {
Replace(Lightness),
ClampMax(Lightness),
ClampMin(Lightness),
}
impl ColorProfile {
pub fn new(colors: Vec<Srgb<u8>>) -> Self {
Self { colors }
}
pub fn from_hex_colors<S>(hex_colors: Vec<S>) -> Result<Self>
where
S: AsRef<str>,
{
let colors = hex_colors
.into_iter()
.map(|s| s.as_ref().parse())
.collect::<Result<_, _>>()
.context("failed to parse hex colors")?;
Ok(Self::new(colors))
}
/// Maps colors based on weights.
///
/// # Arguments
///
/// * `weights` - Weights of each color (`weights[i]` = how many times
/// `colors[i]` appears)
pub fn with_weights(&self, weights: Vec<u8>) -> Result<Self> {
if weights.len() != self.colors.len() {
debug!(?weights, ?self.colors, "length mismatch between `weights` and `colors`");
return Err(anyhow!(
"`weights` should have the same number of elements as `colors`"
));
}
let mut weighted_colors = Vec::new();
for (i, w) in weights.into_iter().enumerate() {
weighted_colors.extend(iter::repeat(self.colors[i]).take(usize::from(w)));
}
Ok(Self::new(weighted_colors))
}
/// Creates a new color profile, with the colors spread to the specified
/// length.
pub fn with_length(&self, length: NonZeroU8) -> Result<Self> {
let orig_len = self.colors.len();
let orig_len: NonZeroUsize = orig_len.try_into().expect("`colors` should not be empty");
let orig_len: NonZeroU8 = orig_len
.try_into()
.expect("`colors` should not have more than 255 elements");
// TODO: I believe weird things can happen because of this...
// if length < orig_len {
// unimplemented!("compressing length of color profile not implemented");
// }
let center_i = usize::from(orig_len.get() / 2);
// How many copies of each color should be displayed at least?
let repeats = length.get().div_euclid(orig_len.get());
let mut weights = vec![repeats; NonZeroUsize::from(orig_len).get()];
// How many extra spaces left?
let mut extras = length.get().rem_euclid(orig_len.get());
// If there is an odd space left, extend the center by one space
if extras % 2 == 1 {
weights[center_i] = weights[center_i].checked_add(1).unwrap();
extras = extras.checked_sub(1).unwrap();
}
// Add weight to border until there's no space left (extras must be even at this
// point)
let weights_len = weights.len();
for border_i in 0..usize::from(extras / 2) {
weights[border_i] = weights[border_i].checked_add(1).unwrap();
let border_opp = weights_len
.checked_sub(border_i)
.unwrap()
.checked_sub(1)
.unwrap();
weights[border_opp] = weights[border_opp].checked_add(1).unwrap();
}
self.with_weights(weights)
}
/// Colors a text.
///
/// # Arguments
///
/// * `foreground_background` - Whether the color is shown on the foreground
/// text or the background block
/// * `space_only` - Whether to only color spaces
pub fn color_text<S>(
&self,
txt: S,
color_mode: AnsiMode,
foreground_background: ForegroundBackground,
space_only: bool,
) -> Result<String>
where
S: AsRef<str>,
{
let txt = txt.as_ref();
let txt: Vec<&str> = txt.graphemes(true).collect();
let ColorProfile { colors } = {
let length = txt.len();
let length: NonZeroUsize = length.try_into().context("`txt` should not be empty")?;
let length: NonZeroU8 = length.try_into().with_context(|| {
format!(
"`txt` should not have more than {limit} characters",
limit = u8::MAX
)
})?;
self.with_length(length)
.with_context(|| format!("failed to spread color profile to length {length}"))?
};
let mut buf = String::new();
for (i, &gr) in txt.iter().enumerate() {
if space_only && gr != " " {
if i > 0 && txt[i.checked_sub(1).unwrap()] == " " {
buf.push_str("\x1b[39;49m");
}
buf.push_str(gr);
} else {
buf.push_str(&colors[i].to_ansi_string(color_mode, foreground_background));
buf.push_str(gr);
}
}
buf.push_str("\x1b[39;49m");
Ok(buf)
}
/// Creates a new color profile, with the colors lightened by a multiplier.
pub fn lighten(&self, multiplier: f32) -> Self {
let mut rgb_f32_colors: Vec<LinSrgb> =
self.colors.iter().map(|c| c.into_linear()).collect();
{
let okhsl_f32_colors: &mut [Okhsl] = &mut rgb_f32_colors.into_color_mut();
for okhsl_f32_color in okhsl_f32_colors {
okhsl_f32_color.lightness *= multiplier;
}
}
let rgb_u8_colors: Vec<_> = rgb_f32_colors
.into_iter()
.map(Srgb::<u8>::from_linear)
.collect();
Self {
colors: rgb_u8_colors,
}
}
/// Creates a new color profile, with the colors set to the specified
/// [`Okhsl`] lightness value.
pub fn with_lightness(&self, assign_lightness: AssignLightness) -> Self {
let mut rgb_f32_colors: Vec<LinSrgb> =
self.colors.iter().map(|c| c.into_linear()).collect();
{
let okhsl_f32_colors: &mut [Okhsl] = &mut rgb_f32_colors.into_color_mut();
for okhsl_f32_color in okhsl_f32_colors {
match assign_lightness {
AssignLightness::Replace(lightness) => {
okhsl_f32_color.lightness = lightness.into();
},
AssignLightness::ClampMax(lightness) => {
okhsl_f32_color.lightness.clamp_max_assign(lightness.into());
},
AssignLightness::ClampMin(lightness) => {
okhsl_f32_color.lightness.clamp_min_assign(lightness.into());
},
}
}
}
let rgb_u8_colors: Vec<Srgb<u8>> = rgb_f32_colors
.into_iter()
.map(Srgb::<u8>::from_linear)
.collect();
Self {
colors: rgb_u8_colors,
}
}
/// Creates a new color profile, with the colors set to the specified
/// [`Okhsl`] lightness value, adapted to the terminal theme.
pub fn with_lightness_adaptive(&self, lightness: Lightness, theme: TerminalTheme) -> Self {
match theme {
TerminalTheme::Dark => self.with_lightness(AssignLightness::ClampMin(lightness)),
TerminalTheme::Light => self.with_lightness(AssignLightness::ClampMax(lightness)),
}
}
/// Creates another color profile with only the unique colors.
pub fn unique_colors(&self) -> Self {
let unique_colors: IndexSet<[u8; 3]> = self.colors.iter().map(|&c| c.into()).collect();
let unique_colors: Vec<Srgb<u8>> = unique_colors.into_iter().map(|c| c.into()).collect();
Self::new(unique_colors)
}
}
+435
View File
@@ -0,0 +1,435 @@
use std::io::{self, Write as _};
use std::num::{ParseFloatError, ParseIntError};
use std::str::FromStr;
use std::sync::OnceLock;
use aho_corasick::AhoCorasick;
use ansi_colours::{ansi256_from_grey, rgb_from_ansi256, AsRGB as _};
use anyhow::{anyhow, Context as _, Result};
use deranged::RangedU8;
use palette::color_difference::ImprovedCiede2000 as _;
use palette::{
FromColor as _, IntoColor as _, IntoColorMut as _, Lab, LinSrgb, Okhsl, Srgb, SrgbLuma,
};
use serde::{Deserialize, Serialize};
use thiserror::Error;
use crate::types::{AnsiMode, TerminalTheme};
const MINECRAFT_COLORS: [(&str, &str); 30] = [
// Minecraft formatting codes
// ==========================
("&0", "\x1b[38;5;0m"),
("&1", "\x1b[38;5;4m"),
("&2", "\x1b[38;5;2m"),
("&3", "\x1b[38;5;6m"),
("&4", "\x1b[38;5;1m"),
("&5", "\x1b[38;5;5m"),
("&6", "\x1b[38;5;3m"),
("&7", "\x1b[38;5;7m"),
("&8", "\x1b[38;5;8m"),
("&9", "\x1b[38;5;12m"),
("&a", "\x1b[38;5;10m"),
("&b", "\x1b[38;5;14m"),
("&c", "\x1b[38;5;9m"),
("&d", "\x1b[38;5;13m"),
("&e", "\x1b[38;5;11m"),
("&f", "\x1b[38;5;15m"),
("&l", "\x1b[1m"), // Enable bold text
("&o", "\x1b[3m"), // Enable italic text
("&n", "\x1b[4m"), // Enable underlined text
("&k", "\x1b[8m"), // Enable hidden text
("&m", "\x1b[9m"), // Enable strikethrough text
("&r", "\x1b[0m"), // Reset everything
// Extended codes (not officially in Minecraft)
// ============================================
("&-", "\n"), // Line break
("&~", "\x1b[39m"), // Reset text color
("&*", "\x1b[49m"), // Reset background color
("&L", "\x1b[22m"), // Disable bold text
("&O", "\x1b[23m"), // Disable italic text
("&N", "\x1b[24m"), // Disable underlined text
("&K", "\x1b[28m"), // Disable hidden text
("&M", "\x1b[29m"), // Disable strikethrough text
];
const RGB_COLOR_PATTERNS: [&str; 2] = ["&gf(", "&gb("];
/// See https://github.com/mina86/ansi_colours/blob/b9feefce10def2ac632b215ecd20830a4fca7836/src/ansi256.rs#L109
const ANSI256_GRAYSCALE_COLORS: [u8; 30] = [
16, 59, 102, 145, 188, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
];
static MINECRAFT_COLORS_AC: OnceLock<(AhoCorasick, Box<[&str; 30]>)> = OnceLock::new();
static RGB_COLORS_AC: OnceLock<AhoCorasick> = OnceLock::new();
/// Represents the lightness component in [`Okhsl`].
///
/// The range of valid values is
/// [`Lightness::MIN`]`..=`[`Lightness::MAX`]
///
/// [`Okhsl`]: palette::Okhsl
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug, Deserialize, Serialize)]
pub struct Lightness(f32);
#[derive(Debug, Error)]
pub enum LightnessError {
#[error(
"invalid lightness {0}, expected value between {min} and {max}",
min = Lightness::MIN,
max = Lightness::MAX
)]
OutOfRange(f32),
}
#[derive(Debug, Error)]
pub enum ParseLightnessError {
#[error("invalid float")]
InvalidFloat(#[from] ParseFloatError),
#[error("invalid lightness")]
InvalidLightness(#[from] LightnessError),
}
/// An indexed color where the color palette is the set of colors used in
/// neofetch ascii art.
///
/// The range of valid values as supported in neofetch is
/// [`NeofetchAsciiIndexedColor::MIN`]`..=`[`NeofetchAsciiIndexedColor::MAX`]
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Deserialize, Serialize)]
pub struct NeofetchAsciiIndexedColor(
RangedU8<{ NeofetchAsciiIndexedColor::MIN }, { NeofetchAsciiIndexedColor::MAX }>,
);
/// An indexed color where the color palette is the set of unique colors in a
/// preset.
///
/// The range of valid values depends on the number of unique colors in a
/// certain preset.
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Deserialize, Serialize)]
pub struct PresetIndexedColor(u8);
/// Whether the color is for foreground text or background color.
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub enum ForegroundBackground {
Foreground,
Background,
}
pub trait ToAnsiString {
/// Converts RGB to ANSI escape code.
fn to_ansi_string(&self, mode: AnsiMode, foreground_background: ForegroundBackground)
-> String;
}
pub trait Theme {
fn theme(&self) -> TerminalTheme;
}
pub trait ContrastGrayscale {
/// Calculates the grayscale foreground color which provides the highest
/// contrast against this background color.
///
/// The returned color is one of the ANSI 256 (8-bit) grayscale colors.
///
/// See <https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg>
fn contrast_grayscale(&self) -> SrgbLuma<u8>;
}
impl Lightness {
pub const MAX: f32 = 1.0f32;
pub const MIN: f32 = 0.0f32;
pub fn new(value: f32) -> Result<Self, LightnessError> {
if !(Self::MIN..=Self::MAX).contains(&value) {
return Err(LightnessError::OutOfRange(value));
}
Ok(Self(value))
}
}
impl TryFrom<f32> for Lightness {
type Error = LightnessError;
fn try_from(value: f32) -> Result<Self, Self::Error> {
Lightness::new(value)
}
}
impl FromStr for Lightness {
type Err = ParseLightnessError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(Lightness::new(s.parse()?)?)
}
}
impl From<Lightness> for f32 {
fn from(value: Lightness) -> Self {
value.0
}
}
impl NeofetchAsciiIndexedColor {
pub const MAX: u8 = 6;
pub const MIN: u8 = 1;
}
impl TryFrom<u8> for NeofetchAsciiIndexedColor {
type Error = deranged::TryFromIntError;
fn try_from(value: u8) -> Result<Self, Self::Error> {
Ok(Self(value.try_into()?))
}
}
impl FromStr for NeofetchAsciiIndexedColor {
type Err = deranged::ParseIntError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(Self(s.parse()?))
}
}
impl From<NeofetchAsciiIndexedColor> for u8 {
fn from(value: NeofetchAsciiIndexedColor) -> Self {
value.0.get()
}
}
impl From<u8> for PresetIndexedColor {
fn from(value: u8) -> Self {
Self(value)
}
}
impl FromStr for PresetIndexedColor {
type Err = ParseIntError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(Self(s.parse()?))
}
}
impl From<PresetIndexedColor> for u8 {
fn from(value: PresetIndexedColor) -> Self {
value.0
}
}
impl ToAnsiString for Srgb<u8> {
fn to_ansi_string(
&self,
mode: AnsiMode,
foreground_background: ForegroundBackground,
) -> String {
let c: u8 = match foreground_background {
ForegroundBackground::Foreground => 38,
ForegroundBackground::Background => 48,
};
match mode {
AnsiMode::Rgb => {
let [r, g, b]: [u8; 3] = (*self).into();
format!("\x1b[{c};2;{r};{g};{b}m")
},
AnsiMode::Ansi256 => {
let rgb: [u8; 3] = (*self).into();
let indexed = rgb.to_ansi256();
format!("\x1b[{c};5;{indexed}m")
},
AnsiMode::Ansi16 => {
unimplemented!();
},
}
}
}
impl ToAnsiString for SrgbLuma<u8> {
fn to_ansi_string(
&self,
mode: AnsiMode,
foreground_background: ForegroundBackground,
) -> String {
let c: u8 = match foreground_background {
ForegroundBackground::Foreground => 38,
ForegroundBackground::Background => 48,
};
match mode {
AnsiMode::Rgb => {
let rgb_f32_color: LinSrgb = self.into_linear().into_color();
let [r, g, b]: [u8; 3] = Srgb::<u8>::from_linear(rgb_f32_color).into();
format!("\x1b[{c};2;{r};{g};{b}m")
},
AnsiMode::Ansi256 => {
let indexed = ansi256_from_grey(self.luma);
format!("\x1b[{c};5;{indexed}m")
},
AnsiMode::Ansi16 => {
unimplemented!();
},
}
}
}
impl Theme for Srgb<u8> {
fn theme(&self) -> TerminalTheme {
let mut rgb_f32_color: LinSrgb = self.into_linear();
{
let okhsl_f32_color: &mut Okhsl = &mut rgb_f32_color.into_color_mut();
if okhsl_f32_color.lightness > 0.5 {
TerminalTheme::Light
} else {
TerminalTheme::Dark
}
}
}
}
impl ContrastGrayscale for Srgb<u8> {
fn contrast_grayscale(&self) -> SrgbLuma<u8> {
let self_lab_f32: Lab = self.into_linear().into_color();
let mut best_contrast = None;
for indexed in ANSI256_GRAYSCALE_COLORS {
let rgb_u8_color: Srgb<u8> = rgb_from_ansi256(indexed).into();
let lab_f32_color: Lab = rgb_u8_color.into_linear().into_color();
let diff = lab_f32_color.improved_difference(self_lab_f32);
best_contrast = match best_contrast {
Some((_, best_diff)) if diff > best_diff => Some((lab_f32_color, diff)),
None => Some((lab_f32_color, diff)),
best => best,
};
}
let (best_lab_f32, _) = best_contrast.expect("`best_contrast` should not be `None`");
SrgbLuma::from_color(best_lab_f32).into_format()
}
}
/// Replaces extended minecraft color codes in message.
///
/// Returns message with escape codes.
pub fn color<S>(msg: S, mode: AnsiMode) -> Result<String>
where
S: AsRef<str>,
{
let msg = msg.as_ref();
let msg = {
let (ac, escape_codes) = MINECRAFT_COLORS_AC.get_or_init(|| {
let (color_codes, escape_codes): (Vec<_>, Vec<_>) =
MINECRAFT_COLORS.into_iter().unzip();
let ac = AhoCorasick::new(color_codes).unwrap();
(
ac,
escape_codes.try_into().expect(
"`MINECRAFT_COLORS` should have the same number of elements as \
`MINECRAFT_COLORS_AC.get_or_init(...).1`",
),
)
});
ac.replace_all(msg, &escape_codes[..])
};
let ac = RGB_COLORS_AC.get_or_init(|| AhoCorasick::new(RGB_COLOR_PATTERNS).unwrap());
let mut dst = String::new();
let mut ret_err = None;
ac.replace_all_with(&msg, &mut dst, |m, _, dst| {
let start = m.end();
let end = msg[start..]
.find(')')
.context("missing closing brace for color code");
let end = match end {
Ok(end) => end,
Err(err) => {
ret_err = Some(err);
return false;
},
};
let code = &msg[start..end];
let foreground_background = if m.pattern().as_usize() == 0 {
ForegroundBackground::Foreground
} else {
ForegroundBackground::Background
};
let rgb: Srgb<u8> = if code.starts_with('#') {
let rgb = code.parse().context("failed to parse hex color");
match rgb {
Ok(rgb) => rgb,
Err(err) => {
ret_err = Some(err);
return false;
},
}
} else {
let rgb: Result<[&str; 3], _> = code
.split(&[',', ';', ' '])
.filter(|x| x.is_empty())
.collect::<Vec<_>>()
.try_into()
.map_err(|_| anyhow!("wrong number of rgb components"));
let rgb = match rgb {
Ok(rgb) => rgb,
Err(err) => {
ret_err = Some(err);
return false;
},
};
let rgb = rgb
.into_iter()
.map(u8::from_str)
.collect::<Result<Vec<_>, _>>()
.context("failed to parse rgb components");
let rgb: [u8; 3] = match rgb {
Ok(rgb) => rgb.try_into().unwrap(),
Err(err) => {
ret_err = Some(err);
return false;
},
};
rgb.into()
};
dst.push_str(&rgb.to_ansi_string(mode, foreground_background));
true
});
if let Some(err) = ret_err {
return Err(err);
}
Ok(dst)
}
#[macro_export]
macro_rules! printc {
($($arg:tt)*) => {
println!("{}", color(format!("{}&r", format!($($arg)*)), AnsiMode::Rgb).expect("failed to color message"));
};
}
/// Prints with color.
pub fn printc<S>(msg: S, mode: AnsiMode) -> Result<()>
where
S: AsRef<str>,
{
println!("{msg}", msg = color(format!("{msg}&r", msg = msg.as_ref()), mode).context("failed to color message")?);
Ok(())
}
/// Clears screen using ANSI escape codes.
pub fn clear_screen(title: Option<&str>, mode: AnsiMode, debug_mode: bool) -> Result<()> {
if !debug_mode {
write!(io::stdout(), "\x1b[2J\x1b[H")
.and_then(|_| io::stdout().flush())
.context("failed to write clear screen sequence to stdout")?;
}
if let Some(title) = title {
printc(format!("\n{title}\n"), mode).context("failed to print title")?;
}
Ok(())
}
+3
View File
@@ -0,0 +1,3 @@
#![allow(non_camel_case_types)]
include!(concat!(env!("OUT_DIR"), "/distros.rs"));
+42
View File
@@ -0,0 +1,42 @@
use crate::neofetch_util::get_distro_name;
use crate::types::Backend;
use crate::utils::get_cache_path;
use anyhow::{Context, Result};
use std::collections::HashMap;
use std::fs::{File};
use std::io::{Read, Write};
const FONT_LOGOS: &str = include_str!(concat!(env!("OUT_DIR"), "/hyfetch/data/font_logos.json"));
pub fn get_font_logo(backend: Backend) -> Result<String> {
// Check if the cache file exists and return its contents if it does
let cache_path = get_cache_path().context("Failed to get cache path")?.join("font_logo");
if cache_path.exists() {
let mut cached_logo = String::new();
File::open(cache_path).context("Failed to open cache file")?
.read_to_string(&mut cached_logo).context("Failed to read from cache file")?;
return Ok(cached_logo);
}
// Deserialize the JSON into a HashMap
let font_logos: HashMap<String, String> = serde_json::from_str::<HashMap<String, String>>(FONT_LOGOS)
.context("Failed to deserialize font logos JSON file")?
.into_iter().map(|(k, v)| (k.to_lowercase(), v)).collect();
// Get the distro name
let distro = get_distro_name(backend).context("Failed to get distro name")?.to_lowercase();
// Find the most likely matching distro from font_logos
let matched_distro = font_logos.keys().find(|&k| distro.contains(k))
.or_else(|| font_logos.keys().find(|k| k.contains(&distro)))
.or_else(|| font_logos.keys().find(|k| k.split_whitespace().any(|part| distro.contains(part))))
.ok_or_else(|| anyhow::anyhow!("No font logo found for distro: {distro}. The supported logos are in https://github.com/Lukas-W/font-logos"))?;
let logo = font_logos.get(matched_distro).unwrap();
// Write the logo to the cache file
let mut cache_file = File::create(cache_path).context("Failed to create cache file")?;
cache_file.write_all(logo.as_bytes()).context("Failed to write logo to cache file")?;
Ok(logo.clone())
}
+12
View File
@@ -0,0 +1,12 @@
pub mod ascii;
pub mod cli_options;
pub mod color_util;
pub mod distros;
pub mod font_logo;
pub mod models;
pub mod neofetch_util;
pub mod presets;
pub mod pride_month;
pub mod types;
pub mod utils;
pub mod color_profile;
+119
View File
@@ -0,0 +1,119 @@
use serde::{Deserialize, Serialize};
use crate::color_util::Lightness;
use crate::neofetch_util::ColorAlignment;
use crate::types::{AnsiMode, Backend, TerminalTheme};
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Config {
pub preset: String,
pub mode: AnsiMode,
pub auto_detect_light_dark: Option<bool>,
pub light_dark: Option<TerminalTheme>,
pub lightness: Option<Lightness>,
pub color_align: ColorAlignment,
pub backend: Backend,
#[serde(default)]
#[serde(with = "self::args_serde")]
pub args: Option<Vec<String>>,
pub distro: Option<String>,
pub pride_month_disable: bool,
pub custom_ascii_path: Option<String>,
}
impl Config {
pub fn default_lightness(theme: TerminalTheme) -> Lightness {
match theme {
TerminalTheme::Dark => {
Lightness::new(0.65).expect("default lightness should not be invalid")
},
TerminalTheme::Light => {
Lightness::new(0.4).expect("default lightness should not be invalid")
},
}
}
}
mod args_serde {
use std::fmt;
use serde::de::{self, value, Deserialize, Deserializer, SeqAccess, Visitor};
use serde::ser::Serializer;
type Value = Option<Vec<String>>;
pub(super) fn serialize<S>(value: &Value, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match value {
Some(value) => serializer.serialize_some(&shell_words::join(value)),
None => serializer.serialize_none(),
}
}
pub(super) fn deserialize<'de, D>(deserializer: D) -> Result<Value, D::Error>
where
D: Deserializer<'de>,
{
struct StringOrVec;
struct OptionVisitor;
impl<'de> Visitor<'de> for StringOrVec {
type Value = Vec<String>;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("string or list of strings")
}
fn visit_str<E>(self, s: &str) -> Result<Self::Value, E>
where
E: de::Error,
{
shell_words::split(s).map_err(de::Error::custom)
}
fn visit_seq<S>(self, seq: S) -> Result<Self::Value, S::Error>
where
S: SeqAccess<'de>,
{
Deserialize::deserialize(value::SeqAccessDeserializer::new(seq))
}
}
impl<'de> Visitor<'de> for OptionVisitor {
type Value = Value;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("option")
}
#[inline]
fn visit_unit<E>(self) -> Result<Self::Value, E>
where
E: de::Error,
{
Ok(None)
}
#[inline]
fn visit_none<E>(self) -> Result<Self::Value, E>
where
E: de::Error,
{
Ok(None)
}
#[inline]
fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
where
D: Deserializer<'de>,
{
deserializer.deserialize_any(StringOrVec).map(Some)
}
}
deserializer.deserialize_option(OptionVisitor)
}
}
+760
View File
@@ -0,0 +1,760 @@
use std::borrow::Cow;
use std::ffi::OsStr;
#[cfg(feature = "macchina")]
use std::fs;
use std::io::{Write as _};
#[cfg(windows)]
use std::io::{self};
use std::path::PathBuf;
use std::process::Command;
use std::sync::OnceLock;
use std::{env, fmt};
use aho_corasick::AhoCorasick;
use anyhow::{Context as _, Result};
use indexmap::IndexMap;
use itertools::Itertools as _;
#[cfg(windows)]
use anyhow::anyhow;
#[cfg(windows)]
use crate::utils::find_file;
#[cfg(windows)]
use std::path::Path;
#[cfg(windows)]
use normpath::PathExt as _;
#[cfg(windows)]
use same_file::is_same_file;
use serde::{Deserialize, Serialize};
use strum::AsRefStr;
#[cfg(feature = "macchina")]
use toml_edit::{value, DocumentMut, Item, Table};
use tracing::debug;
use unicode_segmentation::UnicodeSegmentation as _;
use which::which;
use crate::ascii::{RawAsciiArt, RecoloredAsciiArt};
use crate::color_util::{printc, NeofetchAsciiIndexedColor, PresetIndexedColor};
use crate::distros::Distro;
use crate::types::{AnsiMode, Backend};
use crate::utils::{find_in_path, get_cache_path, input, process_command_status};
pub const TEST_ASCII: &str = r####################"
### |\___/| ###
### ) ( ###
## =\ /= ##
#### )===( ####
### / \ ###
### | | ###
## / {txt} \ ##
## \ / ##
_/\_\_ _/_/\_
|##| ( ( |##|
|##| ) ) |##|
|##| (_( |##|
"####################;
pub const NEOFETCH_COLOR_PATTERNS: [&str; 6] =
["${c1}", "${c2}", "${c3}", "${c4}", "${c5}", "${c6}"];
pub static NEOFETCH_COLORS_AC: OnceLock<AhoCorasick> = OnceLock::new();
pub const NEOFETCH_SCRIPT: &str = include_str!(concat!(env!("OUT_DIR"), "/neofetch"));
#[derive(Clone, Eq, PartialEq, Debug, AsRefStr, Deserialize, Serialize)]
#[serde(tag = "mode")]
#[serde(rename_all = "lowercase")]
#[strum(serialize_all = "lowercase")]
pub enum ColorAlignment {
Horizontal,
Vertical,
Custom {
#[serde(rename = "custom_colors")]
#[serde(deserialize_with = "crate::utils::index_map_serde::deserialize")]
colors: IndexMap<NeofetchAsciiIndexedColor, PresetIndexedColor>,
},
}
/// Asks the user to provide an input among a list of options.
pub fn literal_input<'a, S1, S2>(
prompt: S1,
options: &'a [S2],
default: &str,
show_options: bool,
color_mode: AnsiMode,
) -> Result<&'a str>
where
S1: AsRef<str>,
S2: AsRef<str>,
{
let prompt = prompt.as_ref();
if show_options {
let options_text = options
.iter()
.map(|o| {
let o = o.as_ref();
if o == default {
format!("&l&n{o}&L&N")
} else {
o.to_owned()
}
})
.collect::<Vec<_>>()
.join("|");
printc(format!("{prompt} ({options_text})"), color_mode)
.context("failed to print input prompt")?;
} else {
printc(format!("{prompt} (default: {default})"), color_mode)
.context("failed to print input prompt")?;
}
loop {
let selection = input(Some("> ")).context("failed to read input")?;
let selection = if selection.is_empty() {
default.to_owned()
} else {
selection.to_lowercase()
};
if let Some(selected) = find_selection(&selection, options) {
println!();
return Ok(selected);
} else {
let options_text = options.iter().map(AsRef::as_ref).join("|");
println!("Invalid selection! {selection} is not one of {options_text}");
}
}
fn find_selection<'a, S>(sel: &str, options: &'a [S]) -> Option<&'a str>
where
S: AsRef<str>,
{
if sel.is_empty() {
return None;
}
// Find exact match
if let Some(selected) = options.iter().find(|&o| o.as_ref().to_lowercase() == sel) {
return Some(selected.as_ref());
}
// Find starting abbreviation
if let Some(selected) = options
.iter()
.find(|&o| o.as_ref().to_lowercase().starts_with(sel))
{
return Some(selected.as_ref());
}
None
}
}
/// Add the PyPI pacakge path to the PATH environment variable (for this local process only).
/// This is done so that `which` can find the commands inside the PyPI package.
pub fn add_pkg_path() -> Result<()> {
// Get PATH
let pv = &env::var_os("PATH").context("`PATH` env var is not set or invalid")?;
let mut path = env::split_paths(pv).collect::<Vec<_>>();
let exe = env::current_exe().context("failed to get path of current running executable")?;
let base = exe.parent().unwrap();
// Add from bin: ../git, ../fastfetch, ../scripts
let to_add = ["git", "fastfetch", "scripts", "fastfetch/usr/bin"];
if let Some(parent) = base.parent() {
path.extend(to_add.iter().map(|d| parent.join(d)));
}
// Add from cwd: ./hyfetch/git, ./hyfetch/fastfetch, ./hyfetch/scripts
path.extend(to_add.iter().map(|d| PathBuf::from("hyfetch").join(d)));
// Set PATH
env::set_var("PATH", env::join_paths(path).context("failed to join paths")?);
debug!("Added PyPI package path to PATH, PATH={}", env::var("PATH")?);
Ok(())
}
/// Gets the absolute path of the [neofetch] command.
///
/// [neofetch]: https://github.com/hykilpikonna/hyfetch#running-updated-original-neofetch
pub fn neofetch_path() -> Result<PathBuf> {
if let Ok(p) = which("neowofetch") {
return Ok(p);
}
// Instead of doing that, let's write the neofetch script to a temp file
let f: PathBuf = get_cache_path().context("Failed to get cache path")?.join("nf_script.sh");
let mut file = fs::File::create(&f).context("Failed to create neofetch script file")?;
file.write_all(NEOFETCH_SCRIPT.as_bytes())
.context("Failed to write neofetch script to file")?;
Ok(f)
}
/// Gets the absolute path of the [macchina] command.
///
/// [macchina]: https://github.com/Macchina-CLI/macchina
#[cfg(feature = "macchina")]
pub fn macchina_path() -> Result<Option<PathBuf>> {
let macchina_path = {
#[cfg(not(windows))]
{
find_in_path("macchina").context("failed to check existence of `macchina` in `PATH`")?
}
#[cfg(windows)]
{
find_in_path("macchina.exe")
.context("failed to check existence of `macchina.exe` in `PATH`")?
}
};
// Fall back to `macchina.exe` in directory of current executable
#[cfg(windows)]
let macchina_path = macchina_path.map_or_else(
|| {
let current_exe_path: PathBuf = env::current_exe()
.and_then(|p| p.normalize().map(|p| p.into()))
.context("failed to get path of current running executable")?;
let current_exe_dir_path = current_exe_path
.parent()
.expect("parent should not be `None`");
let macchina_path = current_exe_dir_path.join("macchina.exe");
find_file(&macchina_path)
.with_context(|| format!("failed to check existence of file {macchina_path:?}"))
},
|path| Ok(Some(path)),
)?;
Ok(macchina_path)
}
/// Gets the distro ascii of the current distro. Or if distro is specified, get
/// the specific distro's ascii art instead.
#[tracing::instrument(level = "debug")]
pub fn get_distro_ascii<S>(distro: Option<S>, backend: Backend) -> Result<RawAsciiArt>
where
S: AsRef<str> + fmt::Debug,
{
let distro: Cow<_> = if let Some(distro) = distro.as_ref() {
distro.as_ref().into()
} else {
get_distro_name(backend)
.context("failed to get distro name")?
.into()
};
debug!(%distro, "distro name");
// Try new codegen-based detection method
if let Some(distro) = Distro::detect(&distro) {
let asc = distro.ascii_art().to_owned();
let fg = ascii_foreground(&distro);
return Ok(RawAsciiArt { asc, fg });
}
debug!(%distro, "could not find a match for distro; falling back to neofetch");
// Old detection method that calls neofetch
let asc = run_neofetch_command_piped(&["print_ascii", "--ascii_distro", distro.as_ref()])
.context("failed to get ascii art from neofetch")?;
// Unescape backslashes here because backslashes are escaped in neofetch for
// printf
let asc = asc.replace(r"\\", r"\");
Ok(RawAsciiArt {
asc,
fg: Vec::new(),
})
}
#[tracing::instrument(level = "debug", skip(asc), fields(asc.w = asc.w, asc.h = asc.h))]
pub fn run(asc: RecoloredAsciiArt, backend: Backend, args: Option<&Vec<String>>) -> Result<()> {
let asc = asc.lines.join("\n");
match backend {
Backend::Neofetch => run_neofetch(asc, args).context("failed to run neofetch")?,
Backend::Fastfetch => run_fastfetch(asc, args).context("failed to run fastfetch")?,
#[cfg(feature = "macchina")]
Backend::Macchina => run_macchina(asc, args).context("failed to run macchina")?,
}
Ok(())
}
/// Gets distro ascii width and height, ignoring color code.
pub fn ascii_size<S>(asc: S) -> Result<(u16, u16)>
where
S: AsRef<str>,
{
let asc = asc.as_ref();
if asc.is_empty() {
return Ok((0, 0));
}
let asc = {
let ac =
NEOFETCH_COLORS_AC.get_or_init(|| AhoCorasick::new(NEOFETCH_COLOR_PATTERNS).unwrap());
const N: usize = NEOFETCH_COLOR_PATTERNS.len();
const REPLACEMENTS: [&str; N] = [""; N];
ac.replace_all(asc, &REPLACEMENTS)
};
if asc.is_empty() {
return Ok((0, 0));
}
let width = asc.lines()
.map(|line| line.graphemes(true).count()).max()
.expect("line iterator should not be empty");
let width: u16 = width.try_into().context("ascii art width should fit in u16")?;
let height: u16 = asc.lines().count().try_into().context("ascii art height should fit in u16")?;
Ok((width, height))
}
/// Gets the absolute path of the bash command.
#[cfg(windows)]
fn bash_path() -> Result<PathBuf> {
// Find `bash.exe` in `PATH`, but exclude the known bad paths
if let Some(bash_path) = find_in_path("bash.exe").context("bash.exe not found")? {
// Check if it's not MSYS bash https://stackoverflow.com/a/58418686/1529493
if !bash_path.ends_with(r"Git\usr\bin\bash.exe") {
// Check if it's not WSL bash
// See https://github.com/hykilpikonna/hyfetch/issues/233
let windir = env::var_os("windir").context("`windir` environ not found")?;
match is_same_file(&bash_path, Path::new(&windir).join(r"System32\bash.exe")) {
Ok(false) => return Ok(bash_path),
Err(err) if err.kind() == io::ErrorKind::NotFound => return Ok(bash_path),
_ => {}
}
}
}
if let Some(bash_path) = find_in_path("git.exe").context("failed to find `git.exe` in `PATH`")? {
if bash_path.ends_with(r"Git\cmd\git.exe") {
let pth = bash_path.parent().unwrap().parent().unwrap().join(r"bin\bash.exe");
if pth.is_file() {
return Ok(pth);
}
}
}
Err(anyhow!("bash.exe not found"))
}
/// Runs neofetch command, returning the piped stdout output.
fn run_neofetch_command_piped<S>(args: &[S]) -> Result<String>
where
S: AsRef<OsStr> + fmt::Debug,
{
let mut command = make_neofetch_command(args)?;
let output = command
.output()
.context("failed to execute neofetch as child process")?;
debug!(?output, "neofetch output");
process_command_status(&output.status).context("neofetch command exited with error")?;
let out = String::from_utf8(output.stdout)
.context("failed to process neofetch output as it contains invalid UTF-8")?
.trim()
.to_owned();
Ok(out)
}
fn make_neofetch_command<S>(args: &[S]) -> Result<Command>
where
S: AsRef<OsStr>,
{
// Find neofetch script
let neofetch_path = neofetch_path().context("neofetch command not found")?;
debug!(?neofetch_path, "neofetch path");
#[cfg(not(windows))]
{
let mut command = Command::new("bash");
command.arg(neofetch_path);
command.args(args);
Ok(command)
}
#[cfg(windows)]
{
let bash_path = bash_path().context("failed to get bash path")?;
let mut command = Command::new(bash_path);
command.arg(neofetch_path);
command.args(args);
Ok(command)
}
}
/// Runs fastfetch command, returning the piped stdout output.
fn run_fastfetch_command_piped<S>(args: &[S]) -> Result<String>
where
S: AsRef<OsStr> + fmt::Debug,
{
let mut command = make_fastfetch_command(args)?;
let output = command
.output()
.context("failed to execute fastfetch as child process")?;
debug!(?output, "fastfetch output");
process_command_status(&output.status).context("fastfetch command exited with error")?;
let out = String::from_utf8(output.stdout)
.context("failed to process fastfetch output as it contains invalid UTF-8")?
.trim()
.to_owned();
Ok(out)
}
pub fn fastfetch_path() -> Result<PathBuf> {
which("fastfetch").context("fastfetch command not found")
}
fn make_fastfetch_command<S>(args: &[S]) -> Result<Command>
where
S: AsRef<OsStr>,
{
// Find fastfetch executable
let ff_path = fastfetch_path()?;
debug!(?ff_path, "fastfetch path");
let mut command = Command::new(ff_path);
command.env("FFTS_IGNORE_PARENT", "1");
command.args(args);
Ok(command)
}
/// Runs macchina command, returning the piped stdout output.
#[cfg(feature = "macchina")]
fn run_macchina_command_piped<S>(args: &[S]) -> Result<String>
where
S: AsRef<OsStr> + fmt::Debug,
{
let mut command = make_macchina_command(args)?;
let output = command
.output()
.context("failed to execute macchina as child process")?;
debug!(?output, "macchina output");
process_command_status(&output.status).context("macchina command exited with error")?;
let out = String::from_utf8(output.stdout)
.context("failed to process macchina output as it contains invalid UTF-8")?
.trim()
.to_owned();
Ok(out)
}
#[cfg(feature = "macchina")]
fn make_macchina_command<S>(args: &[S]) -> Result<Command>
where
S: AsRef<OsStr>,
{
// Find macchina executable
let macchina_path = macchina_path()
.context("failed to get macchina path")?
.context("macchina command not found")?;
debug!(?macchina_path, "macchina path");
let mut command = Command::new(macchina_path);
command.args(args);
Ok(command)
}
#[tracing::instrument(level = "debug")]
pub fn get_distro_name(backend: Backend) -> Result<String> {
match backend {
Backend::Neofetch => run_neofetch_command_piped(&["ascii_distro_name"])
.context("failed to get distro name from neofetch"),
Backend::Fastfetch => Ok(run_fastfetch_command_piped(&["--logo", "none", "-c", "none", "-s", "OS",])
.context("failed to get distro name from fastfetch")?.replace("OS: ", "")),
#[cfg(feature = "macchina")]
Backend::Macchina => {
// Write ascii art to temp file
let asc_file_path = {
let mut temp_file = tempfile::Builder::new()
.suffix("ascii.txt")
.tempfile()
.context("failed to create temp file for ascii art")?;
temp_file
.write_all(b"\t\n\t\n")
.context("failed to write ascii art to temp file")?;
temp_file.into_temp_path()
};
// Write macchina theme to temp file
let theme_file_path = {
let project_dirs = directories::ProjectDirs::from("", "", "macchina")
.context("failed to get base dirs")?;
let themes_path = project_dirs.config_dir().join("themes");
fs::create_dir_all(&themes_path).with_context(|| {
format!("failed to create macchina themes dir {themes_path:?}")
})?;
let mut temp_file = tempfile::Builder::new()
.suffix("theme.toml")
.tempfile_in(themes_path)
.context("failed to create temp file for macchina theme")?;
let theme_doc = {
let mut doc = DocumentMut::new();
doc["spacing"] = value(0);
doc["padding"] = value(0);
// See https://github.com/Macchina-CLI/macchina/issues/319
// doc["hide_ascii"] = value(true);
doc["separator"] = value("");
doc["custom_ascii"] = Item::Table(Table::from_iter([(
"path",
&*asc_file_path.to_string_lossy(),
)]));
doc["keys"] = Item::Table(Table::from_iter([("os", ""), ("distro", "")]));
doc
};
debug!(%theme_doc, "macchina theme");
temp_file
.write_all(theme_doc.to_string().as_bytes())
.context("failed to write macchina theme to temp file")?;
temp_file.into_temp_path()
};
let args: [&OsStr; 4] = [
"--show".as_ref(),
if cfg!(target_os = "linux") {
"distribution"
} else {
"operating-system"
}
.as_ref(),
"--theme".as_ref(),
theme_file_path
.file_stem()
.expect("file name should not be `None`"),
];
run_macchina_command_piped(&args[..])
.map(|s| {
anstream::adapter::strip_str(&s)
.to_string()
.trim()
.to_owned()
})
.context("failed to get distro name from macchina")
},
}
}
/// Runs neofetch with custom ascii art.
#[tracing::instrument(level = "debug", skip(asc))]
fn run_neofetch(asc: String, args: Option<&Vec<String>>) -> Result<()> {
// Escape backslashes here because backslashes are escaped in neofetch for
// printf
let asc = asc.replace('\\', r"\\");
// Write ascii art to temp file
let asc_file_path = {
let mut temp_file = tempfile::Builder::new()
.suffix("ascii.txt")
.tempfile()
.context("failed to create temp file for ascii art")?;
temp_file
.write_all(asc.as_bytes())
.context("failed to write ascii art to temp file")?;
temp_file.into_temp_path()
};
// Call neofetch
let args = {
let mut v: Vec<Cow<OsStr>> = vec![
OsStr::new("--ascii").into(),
OsStr::new("--source").into(),
OsStr::new(&asc_file_path).into(),
OsStr::new("--ascii_colors").into(),
];
if let Some(args) = args {
v.extend(args.iter().map(|arg| OsStr::new(arg).into()));
}
v
};
let mut command = make_neofetch_command(&args[..])?;
debug!(?command, "neofetch command");
let status = command
.status()
.context("failed to execute neofetch command as child process")?;
process_command_status(&status).context("neofetch command exited with error")?;
Ok(())
}
/// Runs fastfetch with custom ascii art.
#[tracing::instrument(level = "debug", skip(asc))]
fn run_fastfetch(asc: String, args: Option<&Vec<String>>) -> Result<()> {
// Write ascii art to temp file
let asc_file_path = {
let mut temp_file = tempfile::Builder::new()
.suffix("ascii.txt")
.tempfile()
.context("failed to create temp file for ascii art")?;
temp_file
.write_all(asc.as_bytes())
.context("failed to write ascii art to temp file")?;
temp_file.into_temp_path()
};
// Call fastfetch
let args = {
let mut v: Vec<Cow<OsStr>> = vec![
OsStr::new("--file-raw").into(),
OsStr::new(&asc_file_path).into(),
];
if let Some(args) = args {
v.extend(args.iter().map(|arg| OsStr::new(arg).into()));
}
v
};
let mut command = make_fastfetch_command(&args[..])?;
debug!(?command, "fastfetch command");
let status = command
.status()
.context("failed to execute fastfetch command as child process")?;
process_command_status(&status).context("fastfetch command exited with error")?;
Ok(())
}
/// Runs macchina with custom ascii art.
#[cfg(feature = "macchina")]
#[tracing::instrument(level = "debug", skip(asc))]
fn run_macchina(asc: String, args: Option<&Vec<String>>) -> Result<()> {
// Write ascii art to temp file
let asc_file_path = {
let mut temp_file = tempfile::Builder::new()
.suffix("ascii.txt")
.tempfile()
.context("failed to create temp file for ascii art")?;
temp_file
.write_all(asc.as_bytes())
.context("failed to write ascii art to temp file")?;
temp_file.into_temp_path()
};
// Write macchina theme to temp file
let theme_file_path = {
let project_dirs = directories::ProjectDirs::from("", "", "macchina")
.context("failed to get base dirs")?;
let themes_path = project_dirs.config_dir().join("themes");
fs::create_dir_all(&themes_path)
.with_context(|| format!("failed to create macchina themes dir {themes_path:?}"))?;
let mut temp_file = tempfile::Builder::new()
.suffix("theme.toml")
.tempfile_in(themes_path)
.context("failed to create temp file for macchina theme")?;
let theme_doc = {
let mut doc = DocumentMut::new();
doc["custom_ascii"] = Item::Table(Table::from_iter([(
"path",
&*asc_file_path.to_string_lossy(),
)]));
doc
};
debug!(%theme_doc, "macchina theme");
temp_file
.write_all(theme_doc.to_string().as_bytes())
.context("failed to write macchina theme to temp file")?;
temp_file.into_temp_path()
};
let args = {
let mut v: Vec<Cow<OsStr>> = vec![
OsStr::new("--theme").into(),
theme_file_path
.file_stem()
.expect("file name should not be `None`")
.into(),
];
if let Some(args) = args {
v.extend(args.iter().map(|arg| OsStr::new(arg).into()));
}
v
};
let mut command = make_macchina_command(&args[..])?;
debug!(?command, "macchina command");
let status = command
.status()
.context("failed to execute macchina command as child process")?;
process_command_status(&status).context("macchina command exited with error")?;
Ok(())
}
/// Gets the color indices that should be considered as foreground, for a
/// particular distro's ascii art.
fn ascii_foreground(distro: &Distro) -> Vec<NeofetchAsciiIndexedColor> {
let fg: Vec<u8> = match distro {
Distro::Anarchy => vec![2],
Distro::Android => vec![2],
Distro::Antergos => vec![1],
Distro::ArchStrike => vec![2],
Distro::Arkane => vec![1],
Distro::Asahi => vec![5],
Distro::Astra_Linux => vec![2],
Distro::BlackArch => vec![3],
Distro::CelOS => vec![3],
Distro::Chapeau => vec![2],
Distro::Chrom => vec![5],
Distro::Clear_Linux_OS => vec![2],
Distro::Container_Linux_by_CoreOS => vec![3],
Distro::CRUX => vec![3],
Distro::EuroLinux => vec![2],
Distro::eweOS => vec![3],
Distro::Fedora => vec![2],
Distro::Fedora_Sericea => vec![2],
Distro::Fedora_Silverblue => vec![2],
Distro::GalliumOS => vec![2],
Distro::Gentoo => vec![1],
Distro::HarDClanZ => vec![2],
Distro::Kibojoe => vec![3],
Distro::KrassOS => vec![2],
Distro::Kubuntu => vec![2],
Distro::Linux => vec![1],
Distro::LinuxFromScratch => vec![1, 3],
Distro::Lubuntu => vec![2],
Distro::openEuler => vec![2],
Distro::orchid => vec![1],
Distro::Panwah => vec![1],
Distro::Peppermint => vec![2],
Distro::PNM_Linux => vec![2],
Distro::Pop__OS => vec![2],
Distro::Reborn_OS => vec![1],
Distro::SalentOS => vec![4],
Distro::Septor => vec![2],
Distro::Ubuntu_Cinnamon => vec![2],
Distro::Ubuntu_Kylin => vec![2],
Distro::Ubuntu_MATE => vec![2],
Distro::Ubuntu_old => vec![2],
Distro::Ubuntu_Studio => vec![2],
Distro::Ubuntu_Sway => vec![2],
Distro::Ultramarine_Linux => vec![2],
Distro::Univention => vec![2],
Distro::uwuntu => vec![2],
Distro::Vanilla => vec![2],
Distro::VNux => vec![3, 5],
Distro::Void => vec![2],
Distro::Xray_OS => vec![2, 3],
Distro::Xubuntu => vec![2],
_ => Vec::new(),
};
fg.into_iter()
.map(|fore| {
fore.try_into()
.expect("`fore` should be a valid neofetch color index")
})
.collect()
}
+3
View File
@@ -0,0 +1,3 @@
#![allow(non_camel_case_types)]
include!(concat!(env!("OUT_DIR"), "/presets.rs"));
+269
View File
@@ -0,0 +1,269 @@
use std::fmt::Write as _;
use std::io::{self, Write as _};
use std::num::{NonZeroU16, NonZeroUsize, Wrapping};
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
use std::time::Duration;
use std::{cmp, thread};
use anyhow::{anyhow, Context as _, Result};
use crossterm::execute;
use crossterm::terminal::{
BeginSynchronizedUpdate, EndSynchronizedUpdate, EnterAlternateScreen, LeaveAlternateScreen,
};
use palette::blend::Blend as _;
use palette::{LinSrgba, Srgb, WithAlpha as _};
use strum::VariantArray as _;
use terminal_size::{terminal_size, Height, Width};
use crate::color_util::{color, ForegroundBackground, ToAnsiString as _};
use crate::neofetch_util::ascii_size;
use crate::presets::Preset;
use crate::types::AnsiMode;
const TEXT_ASCII: &str = r"
.======================================================.
| . . .__ . . . , . | |
| |__| _.._ ._ . [__)._.* _| _ |\/| _ ._ -+-|_ | |
| | |(_][_)[_)\_| | [ |(_](/, | |(_)[ ) | [ ) * |
| | | ._| |
'======================================================'
";
const TEXT_ASCII_SMALL: &str = r"
.====================.
| Happy Pride Month! |
'===================='
";
const NOTICE: &str = "Press enter to continue";
pub fn start_animation(color_mode: AnsiMode) -> Result<()> {
let (w, h) = {
let (Width(w), Height(h)) = terminal_size().context("failed to get terminal size")?;
let w: NonZeroU16 = w.try_into().context("terminal width should not be 0")?;
let h: NonZeroU16 = h.try_into().context("terminal height should not be 0")?;
(w, h)
};
let text = &TEXT_ASCII[1..TEXT_ASCII.len().checked_sub(1).unwrap()];
let (text_w, text_h) = ascii_size(text)?;
let (text, text_width, text_height) = {
const TEXT_BORDER_WIDTH: u16 = 2;
const NOTICE_BORDER_WIDTH: u16 = 1;
const VERTICAL_MARGIN: u16 = 1;
let notice_w: u16 = NOTICE.len().try_into()?;
let notice_h: u16 = NOTICE.lines().count().try_into()?;
let term_w_min = cmp::max(
text_w + TEXT_BORDER_WIDTH * 2,
notice_w + NOTICE_BORDER_WIDTH * 2,
);
let term_h_min = u16::from(text_h) + notice_h + VERTICAL_MARGIN * 2;
if w.get() >= term_w_min && h.get() >= term_h_min {
(text, text_w, text_h)
} else {
let text = &TEXT_ASCII_SMALL[1..TEXT_ASCII_SMALL.len().checked_sub(1).unwrap()];
let (text_w, text_h) = ascii_size(text)?;
let term_w_min = cmp::max(
text_w + TEXT_BORDER_WIDTH * 2,
notice_w + NOTICE_BORDER_WIDTH * 2,
);
let term_h_min = text_h + notice_h + VERTICAL_MARGIN * 2;
if w.get() < term_w_min || h.get() < term_h_min {
return Err(anyhow!("terminal size should be at least ({term_w_min} * {term_h_min})"));
}
(text, text_w, text_h)
}
};
let text_lines: Vec<&str> = text.lines().collect();
const BLOCKS: u8 = 9;
let block_width: NonZeroU16 = w
.get()
.div_euclid(u16::from(BLOCKS))
.try_into()
.with_context(|| format!("terminal width should be at least {BLOCKS}"))?;
let text_start_y = h
.get()
.div_euclid(2)
.checked_sub((text_height / 2).into())
.unwrap();
let text_end_y = text_start_y.checked_add(text_height.into()).unwrap();
let text_start_x = w
.get()
.div_euclid(2)
.checked_sub((text_width / 2).into())
.unwrap();
let text_end_x = text_start_x.checked_add(text_width.into()).unwrap();
let notice_start_x = w
.get()
.checked_sub(
u8::try_from(NOTICE.len())
.expect("`NOTICE` length should fit in `u8`")
.into(),
)
.unwrap()
.checked_sub(1)
.unwrap();
let notice_end_x = w.get().checked_sub(1).unwrap();
let notice_y = h.get().checked_sub(1).unwrap();
// Add every preset to colors
let colors: Vec<Srgb<u8>> = Preset::VARIANTS
.iter()
.flat_map(|p| p.color_profile().colors)
.collect();
let fg: Srgb<u8> = "#FFE09B"
.parse()
.expect("foreground color hex should be valid");
let black = LinSrgba::new(0.0, 0.0, 0.0, 0.5);
let draw_frame = |frame: usize| -> Result<()> {
execute!(io::stdout(), BeginSynchronizedUpdate)
.context("failed to begin synchronized update")?;
let mut buf = String::new();
// Loop over the height
for y in 0..h.get() {
// Print the starting color
write!(
buf,
"{bg}{fg}",
bg = colors[frame
.wrapping_add(y.into())
.div_euclid(block_width.get().into())
.rem_euclid(colors.len())]
.to_ansi_string(color_mode, ForegroundBackground::Background),
fg = fg.to_ansi_string(color_mode, ForegroundBackground::Foreground)
)?;
// Loop over the width
for x in 0..w.get() {
let idx = frame
.wrapping_add(x.into())
.wrapping_add(y.into())
.wrapping_add_signed((2.0 * (y as f64 + 0.5 * frame as f64).sin()) as isize);
let y_text = text_start_y <= y && y < text_end_y;
let border = 1u16 + if y == text_start_y || y == (text_end_y - 1) { 0 } else { 1 };
let text_bounds_x1 = text_start_x - border;
let text_bounds_x2 = text_end_x - border;
let notice_bounds_x1 = notice_start_x - 1;
let notice_bounds_x2 = notice_end_x - 1;
// If it's a switching point
if idx.rem_euclid(NonZeroUsize::from(block_width).get()) == 0
|| x == text_bounds_x1
|| x == text_bounds_x2
|| x == notice_bounds_x1
|| x == notice_bounds_x2
{
// Print the color at the current frame
let ci = idx
.div_euclid(NonZeroUsize::from(block_width).get())
.rem_euclid(colors.len());
let c = colors[ci];
if (y_text && (text_bounds_x1 <= x) && (x < text_bounds_x2))
|| (y == notice_y && notice_bounds_x1 <= x && x < notice_bounds_x2)
{
let c: LinSrgba = c.with_alpha(1.0).into_linear();
let c = Srgb::<u8>::from_linear(c.overlay(black).without_alpha());
write!(buf, "{bg}", bg = c.to_ansi_string(color_mode, ForegroundBackground::Background))?;
} else {
write!(buf, "{bg}", bg = c.to_ansi_string(color_mode, ForegroundBackground::Background))?;
}
}
// If text should be printed, print text
if y_text && text_start_x <= x && x < text_end_x {
write!(
buf,
"{text_char}",
text_char = text_lines[usize::from(y.checked_sub(text_start_y).unwrap())]
.chars()
.nth(usize::from(x.checked_sub(text_start_x).unwrap()))
.unwrap(),
)?;
} else if y == notice_y && notice_start_x <= x && x < notice_end_x {
write!(
buf,
"{notice_char}",
notice_char = NOTICE
.chars()
.nth(usize::from(x.checked_sub(notice_start_x).unwrap()))
.unwrap(),
)?;
} else {
write!(buf, " ")?;
}
}
// New line if it isn't the last line
if y != h.get().checked_sub(1).unwrap() {
writeln!(buf, "{reset}", reset = color("&r", color_mode)?)?;
}
}
{
let mut stdout = io::stdout().lock();
write!(stdout, "{buf}")
.and_then(|_| stdout.flush())
.context("failed to write to stdout")?;
}
execute!(io::stdout(), EndSynchronizedUpdate)
.context("failed to end synchronized update")?;
Ok(())
};
let key_pressed = Arc::new(AtomicBool::new(false));
// TODO: use non-blocking I/O; no need for another thread
let _handle = thread::spawn({
let key_pressed = Arc::clone(&key_pressed);
move || {
loop {
match io::stdin().lines().next() {
Some(Ok(_)) => {
key_pressed.store(true, Ordering::Release);
break;
},
Some(Err(err)) => {
eprintln!("failed to read line from stdin: {err}");
},
None => {
// EOF
},
}
}
}
});
let mut frame: Wrapping<usize> = Wrapping(0);
const SPEED: u8 = 2;
let frame_delay = Duration::from_secs_f32(2.0 / 25.0);
execute!(io::stdout(), EnterAlternateScreen).context("failed to enter alternate screen")?;
loop {
// Move cursor to the top left corner
print!("\x1B[H");
draw_frame(frame.0)?;
frame += usize::from(SPEED);
thread::sleep(frame_delay);
if key_pressed.load(Ordering::Acquire) {
break;
}
}
execute!(io::stdout(), LeaveAlternateScreen).context("failed to leave alternate screen")?;
Ok(())
}
+70
View File
@@ -0,0 +1,70 @@
use serde::{Deserialize, Serialize};
use strum::{AsRefStr, EnumString, VariantNames};
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, AsRefStr, Deserialize, EnumString, Serialize)]
#[serde(rename_all = "lowercase")]
#[strum(serialize_all = "lowercase")]
pub enum AnsiMode {
#[serde(rename = "ansi")]
#[serde(skip)]
#[strum(serialize = "ansi")]
#[strum(disabled)]
Ansi16,
#[serde(rename = "8bit")]
#[strum(serialize = "8bit")]
Ansi256,
Rgb,
}
#[derive(
Copy,
Clone,
Eq,
PartialEq,
Hash,
Debug,
AsRefStr,
Deserialize,
EnumString,
Serialize,
VariantNames,
)]
#[serde(rename_all = "lowercase")]
#[strum(serialize_all = "lowercase")]
pub enum TerminalTheme {
Light,
Dark,
}
impl Default for TerminalTheme {
fn default() -> Self {
Self::Dark
}
}
#[derive(
Copy,
Clone,
Eq,
PartialEq,
Hash,
Debug,
AsRefStr,
Deserialize,
EnumString,
Serialize,
VariantNames,
)]
#[serde(rename_all = "kebab-case")]
#[strum(serialize_all = "kebab-case")]
pub enum Backend {
Neofetch,
Fastfetch,
#[cfg(feature = "macchina")]
Macchina,
}
// See https://github.com/Peternator7/strum/issues/244
impl VariantNames for AnsiMode {
const VARIANTS: &'static [&'static str] = &["8bit", "rgb"];
}
+226
View File
@@ -0,0 +1,226 @@
use std::io::Write as _;
#[cfg(unix)]
use std::os::unix::process::ExitStatusExt as _;
use std::path::{Path, PathBuf};
use std::process::ExitStatus;
use std::{env, fs, io};
use anyhow::{anyhow, Context as _, Result};
use directories::ProjectDirs;
#[cfg(windows)]
use normpath::PathExt as _;
use tracing::debug;
pub fn get_cache_path() -> Result<PathBuf> {
let path = ProjectDirs::from("", "", "hyfetch")
.context("failed to get base dirs")?
.cache_dir()
.to_owned();
// Make sure the cache directory exists
if !path.exists() {
fs::create_dir_all(&path).with_context(|| format!("failed to create cache dir {path:?}"))?;
}
Ok(path)
}
/// Reads a string from standard input. The trailing newline is stripped.
///
/// The prompt string, if given, is printed to standard output without a
/// trailing newline before reading input.
pub fn input<S>(prompt: Option<S>) -> Result<String>
where
S: AsRef<str>,
{
if let Some(prompt) = prompt {
write!(io::stdout(), "{prompt}", prompt = prompt.as_ref())
.and_then(|_| io::stdout().flush())
.context("failed to write prompt to stdout")?;
}
io::stdin()
.lines()
.next()
.unwrap_or_else(|| Ok(String::new()))
.context("failed to read line from stdin")
}
/// Finds a command in `PATH`.
///
/// Returns the canonicalized / normalized absolute path of the command.
pub fn find_in_path<P>(program: P) -> Result<Option<PathBuf>>
where
P: AsRef<Path>,
{
let program = program.as_ref();
// Only accept program name, i.e. a relative path with one component
if program.parent() != Some(Path::new("")) {
return Err(anyhow!("invalid command name {program:?}"));
};
let path_env = env::var_os("PATH").context("`PATH` env var is not set or invalid")?;
for search_path in env::split_paths(&path_env) {
let path = search_path.join(program);
let path = find_file(&path)
.with_context(|| format!("failed to check existence of file {path:?}"))?;
if path.is_some() {
return Ok(path);
}
}
Ok(None)
}
/// Finds a file.
///
/// Returns the canonicalized / normalized absolute path of the file.
pub fn find_file<P>(path: P) -> Result<Option<PathBuf>>
where
P: AsRef<Path>,
{
let path = path.as_ref();
let metadata = match fs::metadata(path) {
Ok(metadata) => metadata,
Err(_) => return Ok(None)
};
if !metadata.is_file() {
debug!(?path, "path exists but is not a file");
return Ok(None);
}
#[cfg(not(windows))]
{
path.canonicalize()
.with_context(|| format!("failed to canonicalize path {path:?}"))
.map(Some)
}
#[cfg(windows)]
{
path.normalize()
.with_context(|| format!("failed to normalize path {path:?}"))
.map(|p| Some(p.into()))
}
}
pub fn process_command_status(status: &ExitStatus) -> Result<()> {
if status.success() {
return Ok(());
}
let err = if let Some(code) = status.code() {
anyhow!("child process exited with status code: {code}")
} else {
#[cfg(unix)]
{
anyhow!(
"child process terminated by signal: {signal}",
signal = status
.signal()
.expect("either one of status code or signal should be set")
)
}
#[cfg(not(unix))]
{
unimplemented!("status code not expected to be `None` on non-Unix platforms")
}
};
Err(err)
}
pub(crate) mod index_map_serde {
use std::fmt;
use std::hash::Hash;
use std::marker::PhantomData;
use std::str::FromStr;
use indexmap::IndexMap;
use serde::de::{self, DeserializeSeed, MapAccess, Visitor};
use serde::{Deserialize, Deserializer};
pub(crate) fn deserialize<'de, D, K, V>(deserializer: D) -> Result<IndexMap<K, V>, D::Error>
where
D: Deserializer<'de>,
K: Eq + Hash + FromStr,
K::Err: fmt::Display,
V: Deserialize<'de>,
{
struct KeySeed<K> {
k: PhantomData<K>,
}
impl<'de, K> DeserializeSeed<'de> for KeySeed<K>
where
K: FromStr,
K::Err: fmt::Display,
{
type Value = K;
fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
where
D: Deserializer<'de>,
{
deserializer.deserialize_str(self)
}
}
impl<K> Visitor<'_> for KeySeed<K>
where
K: FromStr,
K::Err: fmt::Display,
{
type Value = K;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("a string")
}
fn visit_str<E>(self, s: &str) -> Result<Self::Value, E>
where
E: de::Error,
{
K::from_str(s).map_err(de::Error::custom)
}
}
struct MapVisitor<K, V> {
k: PhantomData<K>,
v: PhantomData<V>,
}
impl<'de, K, V> Visitor<'de> for MapVisitor<K, V>
where
K: Eq + Hash + FromStr,
K::Err: fmt::Display,
V: Deserialize<'de>,
{
type Value = IndexMap<K, V>;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("a map")
}
fn visit_map<A>(self, mut input: A) -> Result<Self::Value, A::Error>
where
A: MapAccess<'de>,
{
let mut map = IndexMap::new();
while let Some((k, v)) =
input.next_entry_seed(KeySeed { k: PhantomData }, PhantomData)?
{
map.insert(k, v);
}
Ok(map)
}
}
deserializer.deserialize_map(MapVisitor {
k: PhantomData,
v: PhantomData,
})
}
}
-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";
};
};
}
+80
View File
@@ -0,0 +1,80 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH VERSION: "1" "November 2025" "Version: 2.0.5" "User Commands"
.SH NAME
Version: \- manual page for Version: 2.0.5
.SH SYNOPSIS
.B hyfetch
[\fI\,-c\/\fR] [\fI\,-C=CONFIG_FILE\/\fR] [\fI\,-p=PRESET\/\fR] [\fI\,-m=MODE\/\fR] [\fI\,-b=BACKEND\/\fR] [\fI\,--args=ARGS\/\fR] [\fI\,--c-scale=\/\fR
.SH DESCRIPTION
SCALE] [\-\-c\-set\-l=LIGHTNESS] [\-\-june] [\-\-debug] ([\-\-distro=DISTRO] | [\-\-test\-distro=DISTRO]) [
\fB\-\-ascii\-file\fR=\fI\,ASCII_FILE]\/\fR [\-\-print\-font\-logo] [\-\-auto\-detect\-light\-dark=BOOL]
.PP
hyfetch \- neofetch with flags <3
.SS "Available options:"
.TP
\fB\-c\fR, \fB\-\-config\fR
Configure hyfetch
.TP
\fB\-C\fR, \fB\-\-config\-file\fR=\fI\,CONFIG_FILE\/\fR
Use another config file
[default: "/home/azalea/.config/hyfetch.json"]
.TP
\fB\-p\fR, \fB\-\-preset\fR=\fI\,PRESET\/\fR
Use preset or comma\-separated color list or comma\-separated hex colors
(e.g., "#ff0000,#00ff00,#0000ff")
PRESET={rainbow,transgender,nonbinary,xenogender,agender,queer,genderfluid,bisexual,pansexual,polysexual,omnisexual,omniromantic,gay\-men,lesbian,abrosexual,asexual,aromantic,fictosexual,aroace1,aroace2,aroace3,autosexual,intergender,greygender,akiosexual,bigender,demigender,demiboy,demigirl,transmasculine,transfeminine,genderfaun,demifaun,genderfae,demifae,neutrois,biromantic1,biromantic2,autoromantic,boyflux2,girlflux,genderflux,nullflux,hypergender,hyperboy,hypergirl,hyperandrogyne,hyperneutrois,finsexual,unlabeled1,unlabeled2,pangender,pangender.contrast,gendernonconforming1,gendernonconforming2,femboy,tomboy,gynesexual,androsexual,gendervoid,voidgirl,voidboy,nonhuman\-unity,plural,fraysexual,bear,butch,femme,leather,otter,twink,adipophilia,kenochoric,veldian,solian,lunian,polyam,sapphic,androgyne,interprogress,progress,intersex,old\-polyam,equal\-rights,drag,pronounfluid,pronounflux,exipronoun,neopronoun,neofluid,genderqueer,cisgender,baker,caninekin,libragender,librafeminine,libramasculine,libraandrogyne,libranonbinary,fluidflux1,fluidflux2,transbian,autism,cenelian,transneutral,beiyang,burger,throatlozenges,band,random}
.TP
\fB\-m\fR, \fB\-\-mode\fR=\fI\,MODE\/\fR
Color mode MODE={8bit,rgb}
.TP
\fB\-b\fR, \fB\-\-backend\fR=\fI\,BACKEND\/\fR
Choose a *fetch backend BACKEND={neofetch,fastfetch,macchina}
.TP
\fB\-\-args\fR=\fI\,ARGS\/\fR
Additional arguments pass\-through to backend
.TP
\fB\-\-c\-scale\fR=\fI\,SCALE\/\fR
Lighten colors by a multiplier
.TP
\fB\-\-c\-set\-l\fR=\fI\,LIGHTNESS\/\fR
Set lightness value of the colors
.TP
\fB\-\-june\fR
Show pride month easter egg
.TP
\fB\-\-debug\fR
Debug mode
.TP
\fB\-\-distro\fR=\fI\,DISTRO\/\fR
Test for a specific distro
.TP
\fB\-\-test\-distro\fR=\fI\,DISTRO\/\fR
Test for a specific distro
.TP
\fB\-\-ascii\-file\fR=\fI\,ASCII_FILE\/\fR
Use a specific file for the ascii art
.TP
\fB\-\-print\-font\-logo\fR
Print the Font Logo / Nerd Font icon of your distro and exit
.TP
\fB\-\-auto\-detect\-light\-dark\fR=\fI\,BOOL\/\fR
Enables hyfetch to detect light/dark terminal background in
runtime
.TP
\fB\-h\fR, \fB\-\-help\fR
Prints help information
.TP
\fB\-V\fR, \fB\-\-version\fR
Prints version information
.SH "SEE ALSO"
The full documentation for
.B Version:
is maintained as a Texinfo manual. If the
.B info
and
.B Version:
programs are properly installed at your site, the command
.IP
.B info Version:
.PP
should give you access to the complete manual.
+72 -52
View File
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH NEOFETCH "1" "January 2023" "Neofetch 7.3.6" "User Commands"
.TH NEOFETCH "1" "November 2025" "Neofetch 8.0.5" "User Commands"
.SH NAME
Neofetch \- manual page for Neofetch 7.3.6
Neofetch \- manual page for Neofetch 8.0.5
.SH SYNOPSIS
.B neofetch
\fI\,func_name --option "value" --option "value"\/\fR
@@ -46,6 +46,12 @@ 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\-\-package_minimal\fR
Reduce output of packages list by not showing programming language package managers or Steam games
.TP
\fB\-\-os_arch\fR on/off
Hide/Show OS architecture.
.TP
@@ -310,59 +316,73 @@ Colors to print the ascii art
\fB\-\-ascii_distro\fR distro
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, 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, 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, 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, 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,
NOTE: Ad??lie, aerOS, Afterglow, AIX, AlmaLinux, Alpine, Alter,
Amazon, AmogOS, Anarchy, Android, Antergos, antiX, AOSC OS, Aperio
GNU/Linux, Aperture, Apricity, Arch, ArchBox, Archcraft,
archcraft_ascii, archcraft_minimal, ARCHlabs, ArchMerge, ArchStrike,
ArcoLinux, Arkane, ArseLinux, Artix, Arya, Asahi, AsteroidOS, astOS,
Astra Linux, Athena, azos, Bazzite, Bedrock, BigLinux,
BigLinux_large, Bitrig, BlackArch, BlackMesa, blackPanther, BLAG,
BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, CachyOS,
Calculate, CalinixOS, Carbs, CBL\-Mariner, CelOS, Center, CentOS,
Chakra, ChaletOS, Chapeau, Chimera, 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,
digital UNIX, DracOS, DragonFly, Drauger, Droidian, Elementary,
Elive, EncryptOS, EndeavourOS, Endless, Enso, EuroLinux,
EvolutionOS, eweOS, Exherbo, Exodia Predator OS, Fedora, Fedora
Kinoite, Fedora Sericea, Fedora Silverblue, Fedora_unicode,
FemboyOS, Feren, Finnix, Floflis, FreeBSD, FreeMiNT, Frugalware,
Funtoo, Furreto, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus,
Gloire, gNewSense, GNOME, GNU, GoboLinux, GrapheneOS, Grombyang,
Guix, Haiku, HamoniKR, HarDClanZ, Hash, Huayra, Hybrid, HydroOS,
Hyperbola, iglunix, instantOS, Interix, IRIX, Itc, januslinux,
Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion, Korora, KrassOS, KSLinux,
Kubuntu, LainOS, LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire,
Linux, Linux Lite, Linux Mint, Linux Mint Old, LinuxFromScratch,
Live Raizo, LMDE, Lubuntu, Lunar, mac, MacaroniOS, Mageia, Magix,
MagpieOS, MainsailOS, Mandriva, Manjaro, MassOS, MatuusOS, Maui,
Mauna, Meowix, Mer, Minix, MIRACLE LINUX, MX, Namib, NekOS, Neptune,
NetBSD, Netrunner, Nitrux, NixOS, nixos_colorful, Nobara, NomadBSD,
Nurunner, NuTyX, Obarun, OBRevenge, OmniOS, Open Source Media
Center, OpenBSD, openEuler, OpenIndiana, openKylin, openmamba,
OpenMandriva, OpenStage, openSUSE, openSUSE Leap, openSUSE
Tumbleweed, openSUSE Tumbleweed\-Slowroll, OPNsense, Oracle, orchid,
OS Elbrus, PacBSD, Panwah, Parabola, parch, Pardus, Parrot, Parsix,
PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, Peropesis,
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, Rhino
Linux, rocky, Rosa, Sabayon, sabotage, Sailfish, SalentOS, Salient
OS, Salix, Sasanqua, Scientific, secureblue, 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, Tatra, 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,
unicodearch, Univalent, Univention, Uos, UrukOS, uwuntu, Vanilla,
Venom, VNux, Void, VzLinux, wii\-linux\-ngx, Windows, Windows 10,
Windows 11, Windows95, Wrt, Xenia, Xenia2, XFerience, Xray_OS,
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.
NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu,
void have 'old' logo variants, use {distro}_old to use them.
.TP
NOTE: alpine, android, aoscosretro, arch, arcolinux, artix,
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.
NOTE: alpine, android, arch, arcolinux, artix, CalinixOS, centos,
cleanjaro, crux, debian, dragonfly, elementary, endeavouros, fedora,
freebsd, garuda, gentoo, guix, haiku, hyperbola, kali, Linux,
linuxlite, linuxmint, mac, mageia, MainsailOS, manjaro, mx, netbsd,
nixos, openbsd, opensuse, orchid, parabola, popos, postmarketos,
pureos, Raspbian, rocky, slackware, sunos, ubuntu, venom, void have
\&'small' logo variants, use {distro}_small to use them.
.IP
NOTE: Fedora has immutable spins with unique logos (except Onyx).
.TP
NOTE: Change this to Silverblue, Kinoite, Sericea, or CoreOS to use
the spins.
.TP
\fB\-\-ascii_bold\fR on/off
Whether or not to bold the ascii logo.
Executable
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
cd /ws/Others/hyfetch
python3 -m hyfetch --print-font-logo
+10 -2
View File
@@ -1,4 +1,12 @@
from hyfetch import main
from __future__ import annotations
import os
from .py import run_py
from .rs import run_rust
if __name__ == '__main__':
main.run()
if os.environ.get('HYFETCH_PY', False):
run_py()
else:
run_rust()
+3
View File
@@ -0,0 +1,3 @@
from __future__ import annotations
VERSION = '2.0.5'
+48 -8
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]
@@ -113,9 +135,17 @@ class RGB:
:return: RGB object
"""
hex = hex.lstrip("#")
r = int(hex[0:2], 16)
g = int(hex[2:4], 16)
b = int(hex[4:6], 16)
if len(hex) == 6:
r = int(hex[0:2], 16)
g = int(hex[2:4], 16)
b = int(hex[4:6], 16)
elif len(hex) == 3:
r = int(hex[0] * 2, 16)
g = int(hex[1] * 2, 16)
b = int(hex[2] * 2, 16)
else:
raise ValueError(f"Error: invalid hex length")
return cls(r, g, b)
def to_ansi_rgb(self, foreground: bool = True) -> str:
@@ -217,3 +247,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)])
+9 -4
View File
@@ -1,12 +1,15 @@
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.6'
SRC = Path(__file__).parent
TEST_ASCII = r"""
@@ -25,6 +28,9 @@ _/\_\_ _/_/\_
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
@@ -34,6 +40,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'
@@ -44,6 +51,4 @@ 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)
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'
GLOBAL_CFG = GlobalConfig(color_mode='8bit', override_distro=None, debug=False, is_light=False, use_overlay=True)
+123
View File
@@ -0,0 +1,123 @@
{
"Alma": "",
"Alpine": "",
"AOSC OS": "",
"Apple": "",
"macOS": "",
"iOS": "",
"Archcraft": "",
"ArchLabs": "",
"Arch": "",
"Arco": "",
"Arduino": "",
"Artix": "",
"Awesome WM": "",
"Big": "",
"bspwm": "",
"Budgie": "",
"CentOS": "",
"Cinnamon": "",
"Codeberg": "",
"CoreOS": "",
"Crystal": "",
"Debian": "",
"Deepin": "",
"Devuan": "",
"Docker": "",
"dwm": "",
"elementary OS": "",
"Endeavour OS": "",
"Enlightenment": "",
"F-droid": "",
"Fedora": "",
"Fedora (inverse)": "",
"Ferris": "",
"Flathub": "",
"Fluxbox": "",
"Forgejo": "",
"FOSDEM": "",
"FreeBSD": "",
"FreeCAD": "",
"freedesktop.org": "",
"Garuda": "",
"Gentoo": "",
"GIMP": "",
"Gitea": "",
"GNOME": "",
"GNU Guix": "",
"GTK": "",
"Hyperbola -libre": "",
"Hyprland": "",
"i3": "",
"illumos": "",
"Inkscape": "",
"JWM": "",
"Kali": "",
"KDE": "",
"KDE Neon": "",
"KDE Plasma": "",
"Kdenlive": "",
"KiCad": "",
"Krita": "",
"Kubuntu": "",
"Kubuntu (inverse)": "",
"Mint": "",
"Mint (inverse)": "",
"Loc-OS": "",
"LXDE": "",
"LXLE": "",
"LXQt": "",
"Mageia": "",
"Mandriva": "",
"Manjaro": "",
"MATE": "",
"mpv": "",
"MX": "",
"Neovim": "",
"NixOS": "",
"Octoprint": "",
"OpenBSD": "",
"OpenSCAD": "",
"OpenSUSE": "",
"OSH": "",
"OSHWA": "",
"OSI": "",
"Parabola -libre": "",
"Parrot OS": "",
"Pop!_OS": "",
"PostmarketOS": "",
"Prusa Slicer": "",
"Puppy": "",
"Qt": "",
"Qtile": "",
"QubesOS": "",
"Raspberry pi": "",
"Red Hat": "",
"RepRap": "",
"RISC-V": "",
"Rocky": "",
"Sabayon": "",
"Slackware": "",
"Slackware (inverse)": "",
"Snappy": "",
"Solus": "",
"Sway": "",
"Tails": "",
"Thunderbird": "",
"Tor Browser": "",
"Trisquel": "",
"Tux": "",
"Ubuntu": "",
"Ubuntu (inverse)": "",
"Vanilla OS": "",
"Void": "",
"VS Codium": "",
"Wayland": "",
"Wikimedia": "",
"Xero": "",
"XFCE": "",
"Xmonad": "",
"Xorg": "",
"Zorin OS": "",
"Windows": "\uE62A"
}
+235
View File
@@ -0,0 +1,235 @@
{
"rainbow": ["#E50000", "#FF8D00", "#FFEE00", "#028121", "#004CFF", "#770088"],
"transgender": ["#55CDFD", "#F6AAB7", "#FFFFFF", "#F6AAB7", "#55CDFD"],
"nonbinary": ["#FCF431", "#FCFCFC", "#9D59D2", "#282828"],
"xenogender": {
"colors": ["#FF6692", "#FF9A98", "#FFB883", "#FBFFA8", "#85BCFF", "#9D85FF", "#A510FF"],
"comment": "xenogender sourced from https://commons.wikimedia.org/wiki/File:Xenogender_pride_flag.svg"
},
"agender": ["#000000", "#BABABA", "#FFFFFF", "#BAF484", "#FFFFFF", "#BABABA", "#000000"],
"queer": ["#B57FDD", "#FFFFFF", "#49821E"],
"genderfluid": ["#FE76A2", "#FFFFFF", "#BF12D7", "#000000", "#303CBE"],
"bisexual": ["#D60270", "#9B4F96", "#0038A8"],
"pansexual": ["#FF1C8D", "#FFD700", "#1AB3FF"],
"polysexual": ["#F714BA", "#01D66A", "#1594F6"],
"omnisexual": {
"colors": ["#FE9ACE", "#FF53BF", "#200044", "#6760FE", "#8EA6FF"],
"comment": "omnisexual sorced from https://www.flagcolorcodes.com/omnisexual"
},
"omniromantic": ["#FEC8E4", "#FDA1DB", "#89739A", "#ABA7FE", "#BFCEFF"],
"gay-men": {
"colors": ["#078D70", "#98E8C1", "#FFFFFF", "#7BADE2", "#3D1A78"],
"comment": "gay men sourced from https://www.flagcolorcodes.com/gay-men"
},
"lesbian": ["#D62800", "#FF9B56", "#FFFFFF", "#D462A6", "#A40062"],
"abrosexual": {
"colors": ["#46D294", "#A3E9CA", "#FFFFFF", "#F78BB3", "#EE1766"],
"comment": "abrosexual used colorpicker to source from https://fyeahaltpride.tumblr.com/post/151704251345/could-you-guys-possibly-make-an-abrosexual-pride"
},
"asexual": ["#000000", "#A4A4A4", "#FFFFFF", "#810081"],
"aromantic": ["#3BA740", "#A8D47A", "#FFFFFF", "#ABABAB", "#000000"],
"fictosexual": {
"colors": ["#000000", "#C4C4C4", "#A349A5", "#C4C4C4", "#000000"],
"comment": "https://orientation.fandom.com/wiki/Fictosexual"
},
"aroace1": {
"colors": ["#E28C00", "#ECCD00", "#FFFFFF", "#62AEDC", "#203856"],
"comment": "aroace1 sourced from https://flag.library.lgbt/flags/aroace/"
},
"aroace2": ["#000000", "#810081", "#A4A4A4", "#FFFFFF", "#A8D47A", "#3BA740"],
"aroace3": ["#3BA740", "#A8D47A", "#FFFFFF", "#ABABAB", "#000000", "#A4A4A4", "#FFFFFF", "#810081"],
"autosexual": ["#99D9EA", "#7F7F7F"],
"intergender": {
"colors": ["#900DC2", "#900DC2", "#FFE54F", "#900DC2", "#900DC2"],
"comment": "todo: use weighted spacing"
},
"greygender": ["#B3B3B3", "#B3B3B3", "#FFFFFF", "#062383", "#062383", "#FFFFFF", "#535353", "#535353"],
"akiosexual": ["#F9485E", "#FEA06A", "#FEF44C", "#FFFFFF", "#000000"],
"bigender": {
"colors": ["#C479A2", "#EDA5CD", "#D6C7E8", "#FFFFFF", "#D6C7E8", "#9AC7E8", "#6D82D1"],
"comment": "bigender sourced from https://www.flagcolorcodes.com/bigender"
},
"demigender": {
"colors": ["#7F7F7F", "#C4C4C4", "#FBFF75", "#FFFFFF", "#FBFF75", "#C4C4C4", "#7F7F7F"],
"comment": "demigender yellow sourced from https://lgbtqia.fandom.com/f/p/4400000000000041031 other colors sourced from demiboy and demigirl flags"
},
"demiboy": {
"colors": ["#7F7F7F", "#C4C4C4", "#9DD7EA", "#FFFFFF", "#9DD7EA", "#C4C4C4", "#7F7F7F"],
"comment": "demiboy sourced from https://www.flagcolorcodes.com/demiboy"
},
"demigirl": {
"colors": ["#7F7F7F", "#C4C4C4", "#FDADC8", "#FFFFFF", "#FDADC8", "#C4C4C4", "#7F7F7F"],
"comment": "demigirl sourced from https://www.flagcolorcodes.com/demigirl"
},
"transmasculine": ["#FF8ABD", "#CDF5FE", "#9AEBFF", "#74DFFF", "#9AEBFF", "#CDF5FE", "#FF8ABD"],
"transfeminine": {
"colors": ["#73DEFF", "#FFE2EE", "#FFB5D6", "#FF8DC0", "#FFB5D6", "#FFE2EE", "#73DEFF"],
"comment": "transfeminine used colorpicker to source from https://www.deviantart.com/pride-flags/art/Trans-Woman-Transfeminine-1-543925985 linked from https://gender.fandom.com/wiki/Transfeminine"
},
"genderfaun": {
"colors": ["#FCD689", "#FFF09B", "#FAF9CD", "#FFFFFF", "#8EDED9", "#8CACDE", "#9782EC"],
"comment": "genderfaun sourced from https://www.flagcolorcodes.com/genderfaun"
},
"demifaun": ["#7F7F7F", "#7F7F7F", "#C6C6C6", "#C6C6C6", "#FCC688", "#FFF19C", "#FFFFFF", "#8DE0D5", "#9682EC", "#C6C6C6", "#C6C6C6", "#7F7F7F", "#7F7F7F"],
"genderfae": {
"colors": ["#97C3A5", "#C3DEAE", "#F9FACD", "#FFFFFF", "#FCA2C4", "#DB8AE4", "#A97EDD"],
"comment": "genderfae sourced from https://www.flagcolorcodes.com/genderfae"
},
"demifae": {
"colors": ["#7F7F7F", "#7F7F7F", "#C5C5C5", "#C5C5C5", "#97C3A4", "#C4DEAE", "#FFFFFF", "#FCA2C5", "#AB7EDF", "#C5C5C5", "#C5C5C5", "#7F7F7F", "#7F7F7F"],
"comment": "demifae used colorpicker to source form https://www.deviantart.com/pride-flags/art/Demifae-870194777"
},
"neutrois": ["#FFFFFF", "#1F9F00", "#000000"],
"biromantic1": ["#8869A5", "#D8A7D8", "#FFFFFF", "#FDB18D", "#151638"],
"biromantic2": ["#740194", "#AEB1AA", "#FFFFFF", "#AEB1AA", "#740194"],
"autoromantic": {
"colors": ["#99D9EA", "#99D9EA", "#3DA542", "#7F7F7F", "#7F7F7F"],
"comment": "symbol interpreted"
},
"boyflux2": {
"colors": ["#E48AE4", "#9A81B4", "#55BFAB", "#FFFFFF", "#A8A8A8", "#81D5EF", "#69ABE5", "#5276D4"],
"weights": [1, 1, 1, 1, 1, 5, 5, 5]
},
"girlflux": {
"colors": ["#F9E6D7", "#F2526C", "#BF0311", "#E9C587", "#BF0311", "#F2526C", "#F9E6D7"],
"comment": "sourced from https://commons.wikimedia.org/wiki/File:Girlflux_Pride_Flag.jpg"
},
"genderflux": {
"colors": ["#F47694", "#F2A2B9", "#CECECE", "#7CE0F7", "#3ECDF9", "#FFF48D"],
"comment": "sourced from https://www.deviantart.com/pride-flags/art/Genderflux-1-543925589"
},
"nullflux": {
"colors": ["#0B0C0E", "#A28DB9", "#E1D4EF", "#F0E6DD", "#665858"],
"comment": "https://lgbtqia.wiki/wiki/Gendernull"
},
"hypergender": ["#EFEFEF", "#FFFFFF", "#FBFF75", "#000000", "#FBFF75", "#FFFFFF", "#EFEFEF"],
"hyperboy": ["#EFEFEF", "#FFFFFF", "#74D7FE", "#000000", "#74D7FE", "#FFFFFF", "#EFEFEF"],
"hypergirl": ["#EFEFEF", "#FFFFFF", "#FC76D3", "#000000", "#FC76D3", "#FFFFFF", "#EFEFEF"],
"hyperandrogyne": ["#EFEFEF", "#FFFFFF", "#BB83FF", "#000000", "#BB83FF", "#FFFFFF", "#EFEFEF"],
"hyperneutrois": ["#EFEFEF", "#FFFFFF", "#BAFA74", "#000000", "#BAFA74", "#FFFFFF", "#EFEFEF"],
"finsexual": ["#B18EDF", "#D7B1E2", "#F7CDE9", "#F39FCE", "#EA7BB3"],
"unlabeled1": ["#EAF8E4", "#FDFDFB", "#E1EFF7", "#F4E2C4"],
"unlabeled2": ["#250548", "#FFFFFF", "#F7DCDA", "#EC9BEE", "#9541FA", "#7D2557"],
"pangender": ["#FFF798", "#FEDDCD", "#FFEBFB", "#FFFFFF", "#FFEBFB", "#FEDDCD", "#FFF798"],
"pangender.contrast": ["#FFE87F", "#FCBAA6", "#FBC9F3", "#FFFFFF", "#FBC9F3", "#FCBAA6", "#FFE87F"],
"gendernonconforming1": {
"colors": ["#50284D", "#96467B", "#5C96F7", "#FFE6F7", "#5C96F7", "#96467B", "#50284D"],
"weights": [4, 1, 1, 1, 1, 1, 4]
},
"gendernonconforming2": ["#50284D", "#96467B", "#5C96F7", "#FFE6F7", "#5C96F7", "#96467B", "#50284D"],
"femboy": ["#D260A5", "#E4AFCD", "#FEFEFE", "#57CEF8", "#FEFEFE", "#E4AFCD", "#D260A5"],
"tomboy": ["#2F3FB9", "#613A03", "#FEFEFE", "#F1A9B7", "#FEFEFE", "#613A03", "#2F3FB9"],
"gynesexual": ["#F4A9B7", "#903F2B", "#5B953B"],
"androsexual": ["#01CCFF", "#603524", "#B799DE"],
"gendervoid": {
"colors": ["#081149", "#4B484B", "#000000", "#4B484B", "#081149"],
"comment": "gendervoid and related flags sourced from: https://gender.fandom.com/wiki/Gendervoid"
},
"voidgirl": ["#180827", "#7A5A8B", "#E09BED", "#7A5A8B", "#180827"],
"voidboy": ["#0B130C", "#547655", "#66B969", "#547655", "#0B130C"],
"nonhuman-unity": {
"colors": ["#177B49", "#FFFFFF", "#593C90"],
"comment": "used https://twitter.com/foxbrained/status/1667621855518236674/photo/1 as source and colorpicked"
},
"plural": {
"colors": ["#2D0625", "#543475", "#7675C3", "#89C7B0", "#F3EDBD"],
"comment": "used https://pluralpedia.org/w/Plurality#/media/File:Plural-Flag-1.jpg as source and colorpicked"
},
"fraysexual": {
"colors": ["#226CB5", "#94E7DD", "#FFFFFF", "#636363"],
"comment": "sampled from https://es.m.wikipedia.org/wiki/Archivo:Fraysexual_flag.jpg"
},
"bear": {
"colors": ["#623804", "#D56300", "#FEDD63", "#FEE6B8", "#FFFFFF", "#555555"],
"comment": "sourced from https://commons.wikimedia.org/wiki/File:Bear_Brotherhood_flag.svg"
},
"butch": {
"colors": ["#D72800", "#F17623", "#FF9C56", "#FFFDF6", "#FFCE89", "#FEAF02", "#A37000"],
"comment": "colorpicked from https://commons.wikimedia.org/wiki/File:Butch_Flag.png"
},
"femme" : {
"colors": ["#FF1A87", "#FF6AB1", "#FFFFFF", "#9A0731", "51091D"],
"comment": "colorpicked from https://lgbtqia.wiki/wiki/Femme"
},
"leather": {
"colors": ["#000000", "#252580", "#000000", "#252580", "#FFFFFF", "#252580", "#000000", "#252580", "#000000"],
"comment": "colorpicked from https://commons.wikimedia.org/wiki/File:Leather,_Latex,_and_BDSM_pride_-_Light.svg"
},
"otter": {
"colors": ["#263881", "#5C9DC9", "#FFFFFF", "#3A291D", "#5C9DC9", "#263881"],
"comment": "colorpicked from https://commons.wikimedia.org/wiki/File:Official_Otter_Pride_Flag_by_Bearbackgear.jpg"
},
"twink": {
"colors": ["#FFB2FF", "#FFFFFF", "#FFFF81"],
"comment": "colorpicked from https://commons.wikimedia.org/wiki/File:Twink_Pride_Flag_(proposed).svg"
},
"adipophilia": {
"colors": ["#000000", "#E16180", "#FFF9BE", "#603E41", "#000000"],
"comment": "https://en.wikipedia.org/wiki/File:FatFetishFlag.png"
},
"kenochoric": ["#000000", "#2E1569", "#824DB7", "#C7A1D6"],
"veldian": ["#D182A8", "#FAF6E0", "#69ACBE", "#5D448F", "#3A113E"],
"solian": ["#FFF8ED", "#FFE7A8", "#F1B870", "#A56058", "#46281E"],
"lunian": ["#2F0E62", "#6F41B1", "#889FDF", "#7DDFD5", "#D2F2E2"],
"polyam": {
"colors": ["#FFFFFF", "#FCBF00", "#009FE3", "#E50051", "#340C46"],
"comment": "polyamorous flag colors pulled from https://polyamproud.com/flag"
},
"sapphic": ["#FD8BA8", "#FBF2FF", "#C76BC5", "#FDD768", "#C76BC5", "#FBF2FF", "#FD8BA8"],
"androgyne": ["#FE007F", "#9832FF", "#00B8E7"],
"interprogress": ["#FFD800", "#7902AA", "#FFFFFF", "#FFAFC8", "#74D7EE", "#613915", "#000000", "#E50000", "#FF8D00", "#FFEE00", "#028121", "#004CFF", "#770088"],
"progress": ["#FFFFFF", "#FFAFC8", "#74D7EE", "#613915", "#000000", "#E50000", "#FF8D00", "#FFEE00", "#028121", "#004CFF", "#770088"],
"intersex": ["#FFD800", "#FFD800", "#7902AA", "#FFD800", "#FFD800"],
"old-polyam": ["#0000FF", "#FF0000", "#FFFF00", "#FF0000", "#000000"],
"equal-rights": ["#0000FF", "#0000FF", "#FFFF00", "#0000FF", "#0000FF", "#FFFF00", "#0000FF", "#0000FF"],
"drag": ["#CC67FF", "#FFFFFF", "#FFA3E3", "#FFFFFF", "#3366FF"],
"pronounfluid": ["#FFB3F9", "#FFFFFF", "#D1FDCB", "#C7B0FF", "#000000", "#B8CCFF"],
"pronounflux": ["#FDB3F8", "#B6CCFA", "#18DDD3", "#64FF89", "#FF7690", "#FFFFFF"],
"exipronoun": ["#1C3D34", "#FFFFFF", "#321848", "#000000"],
"neopronoun": ["#BCEC64", "#FFFFFF", "#38077A"],
"neofluid": ["#FFECA0", "#FFFFFF", "#FFECA0", "#38087A", "#BCEC64"],
"genderqueer": ["#B57EDC", "#B57EDC", "#FFFFFF", "#FFFFFF", "#4A8123", "#4A8123"],
"cisgender": ["#D70270", "#0038A7"],
"baker": {
"colors": ["#F23D9E", "#F80A24", "#F78022", "#F9E81F", "#1E972E", "#1B86BC", "#243897", "#6F0A82"],
"comment": "colors from Gilbert Baker's original 1978 flag design used https://gilbertbaker.com/rainbow-flag-color-meanings/ as source and colorpicked"
},
"caninekin": {
"colors": ["#2D2822", "#543D25", "#9C754D", "#E8DAC2", "#CFAD8C", "#B77B55", "#954E31"],
"comment": "this is 4 all the dogs, from zombpawcoins on tumblr!"
},
"libragender": {
"colors": ["#000000", "#808080", "#92D8E9", "#FFF544", "#FFB0CA", "#808080", "#000000"],
"comment": "Sourced from https://lgbtqia.wiki/wiki/Libragender"
},
"librafeminine": {
"colors": ["#000000", "#A3A3A3", "#FFFFFF", "#C6568F", "#FFFFFF", "#A3A3A3", "#000000"],
"comment": "Sourced from https://lgbtqia.wiki/wiki/Librafeminine"
},
"libramasculine": {
"colors": ["#000000", "#A3A3A3", "#FFFFFF", "#56C5C5", "#FFFFFF", "#A3A3A3", "#000000"],
"comment": "Sourced from https://lgbtqia.wiki/wiki/Libramasculine"
},
"libraandrogyne": {
"colors": ["#000000", "#A3A3A3", "#FFFFFF", "#9186B1", "#FFFFFF", "#A3A3A3", "#000000"],
"comment": "Sourced from https://lgbtqia.wiki/wiki/Librandrogyne"
},
"libranonbinary": {
"colors": ["#000000", "#A3A3A3", "#FFFFFF", "#FFF987", "#FFFFFF", "#A3A3A3", "#000000"],
"comment": "Sourced from https://lgbtqia.wiki/wiki/Libranonbinary"
},
"fluidflux1": {
"colors": ["#FF115F", "#A34AA3", "#00A4E7", "#FFDF00", "#000000", "#FFED71", "#85DAFF", "#DBADDA", "#FE8DB1"],
"comment": "Sourced from https://gender.fandom.com/wiki/Fluidflux?file=FC90B24D-CA36-4FE2-A752-C9ABFC65E332.jpeg"
},
"fluidflux2": ["#C6D1D2", "#F47B9D", "#F09F9B", "#E3F09E", "#75EEEA", "#52D2ED", "#C6D1D2"],
"transbian": ["#03A3E6", "#F8B4CD","#FAFBF9", "#FA9C57", "#A80864"],
"autism":["#C94A49", "#DE7554", "#DBB667", "#6FA35D", "#2E7574", "#232828"],
"cenelian":["#FFE7B6", "#93554A", "#52203A", "#7E4A93", "#99AFD6"],
"transneutral":["#74DFFF", "#FFFDB3", "#FFFC75", "#FFF200", "#FFFC75", "#FFFDB3", "#FE8CBF"],
"beiyang": ["#DF1B12", "#FFC600", "#01639D", "#FFFFFF", "#000000"],
"burger": ["#F3A26A", "#498701", "#FD1C13", "#7D3829", "#F3A26A"],
"throatlozenges": ["#2759DA", "#03940D", "#F5F100", "#F59B00", "#B71212"],
"band": ["#2670C0", "#F5BD00", "#DC0045", "#E0608E"]
}
+23
View File
@@ -0,0 +1,23 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
adelie = AsciiArt(match=r'''"Adélie"* | "Adelie"*''', color='4 7 6', ascii=r"""
${c1} ${c3} ,-^-___
${c3} /\\\///
${c2}refined.${c1} /\\\\//
${c2}reliable.${c1} /\\\///
${c2}ready.${c1} /\\/////\
__///\\\\/////\
${c3} _//////\\\\\\\////
${c1} ///////${c3}\\\\\\\\\\//
//////${c1}\\\\\/
/////\\\\\/
/////${c3}\\\\/
/\\///\\\/
/\\\/${c1}\\/
/\\\\//
//////
/// ${c3}\\\\\
""")
+29
View File
@@ -0,0 +1,29 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
aeros = AsciiArt(match=r'''"aerOS"*''', color='fg 0 0 0', ascii=r"""
${c1}
ooo OOO OOO ooo
oOO OOo
oOO OOo
oOO OOo
oOO OOo
oOO OOo
oOO OOo
OOo
OOo
OOo
OOo
OOo
OOo
oOO OOo
oOO OOo
oOO OOo
oOO OOo
oO OOo
oOO OOo
oOO OOo
ooo OOO OOO ooo
""")
+22
View File
@@ -0,0 +1,22 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
afterglow = AsciiArt(match=r'''"Afterglow"*''', color='5 1 3 4', ascii=r"""
${c2} .
${c1}. ${c2}.{!
${c1}.L! ${c2}J@||*
${c1}gJJJJL` ${c2}g@FFS"
${c1},@FFFJF`${c2}_g@@LLP`
${c1}_@FFFFF`${c2}_@@@@@P` ${c4}.
${c1}J@@@LLF ${c2}_@@@@@P` ${c4}.J!
${c1}g@@@@@" ${c2}_@@@@@P`${c3}. ${c4}.L|||*
${c1}g@@@@M" ${c2}"VP`${c3}.L! ${c4}<@JJJJ`
${c1}"@N" ${c3}:||||! ${c4}JFFFFS"
${c3}.{JJ||F`${c4}_gFFFF@'
${c3}.@FJJJF`${c4},@LFFFF`
${c3}_@FFFFF ${c4}VLLLP`
${c3}J@@LL@" ${c4}`"
${c3}V@@"
""")
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+20 -22
View File
@@ -1,26 +1,24 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
aosc_os = AsciiArt(match=r'''"AOSC OS"*''', color='4 7 1', ascii=r"""
${c2} .:+syhhhhys+:.
.ohNMMMMMMMMMMMMMMNho.
`+mMMMMMMMMMMmdmNMMMMMMMMm+`
+NMMMMMMMMMMMM/ `./smMMMMMN+
.mMMMMMMMMMMMMMMo -yMMMMMm.
:NMMMMMMMMMMMMMMMs .hMMMMN:
.NMMMMhmMMMMMMMMMMm+/- oMMMMN.
dMMMMs ./ymMMMMMMMMMMNy. sMMMMd
-MMMMN` oMMMMMMMMMMMN: `NMMMM-
/MMMMh NMMMMMMMMMMMMm hMMMM/
/MMMMh NMMMMMMMMMMMMm hMMMM/
-MMMMN` :MMMMMMMMMMMMy. `NMMMM-
dMMMMs .yNMMMMMMMMMMMNy/. sMMMMd
.NMMMMo -/+sMMMMMMMMMMMmMMMMN.
:NMMMMh. .MMMMMMMMMMMMMMMN:
.mMMMMMy- NMMMMMMMMMMMMMm.
+NMMMMMms/.` mMMMMMMMMMMMN+
`+mMMMMMMMMNmddMMMMMMMMMMm+`
.ohNMMMMMMMMMMMMMMNho.
.:+syhhhhys+:.
""")
aosc_os = AsciiArt(match=r'''"AOSC OS"*''', color='4 0 1 3', ascii=r'''
${c2} __
${c2}gpBBBBBBBBBP
${c2}_gBBBBBBBBBRP
${c2}4BBBBBBBBRP ${c4},_____
${c2}`"" ${c4}_g@@@@@@@@@@@@@%g>
${c4}__@@@@@@@@@@@@@@@@P" ${c1}___
${c4}_g@@@@@@@@@@@@@@@N"` ${c1}_gN@@@@@N^
${c4}_w@@@@@@@@@@@@@@@@P" ${c1}_g@@@@@@@P"
${c4}_g@@@@@@@@@@@@@@@N"` ${c1}VMNN@NNNM^`
${c4}^MMM@@@@@@@@@@@MP" ${c3},ggppww__
${c4}`""""" ${c3}_wNNNNNNNNNNNNNNNNNNN
${c3}_gBNNNNNNNNNNNNNNNNNP"
${c3}_wNNNNNNNNNNNNNNNNNNMP`
${c3}_gBNNNNNNNNNNNNNNNNNP"
${c3}_wNNNNNNNNNNNNNNNNNNNM^
${c3}""Y^^MNNNNNNNNNNNNP`
${c3}`"""""""
''')
-24
View File
@@ -1,24 +0,0 @@
from . import AsciiArt
aosc_os_retro = AsciiArt(match=r'''"AOSC OS/Retro"*''', color='4 7 1 3', ascii=r"""
${c2} .........
...................
.....................${c1}################${c2}
.............. ....${c1}################${c2}
.............. ...${c1}################${c2}
............. ..${c1}****************${c2}
............ . .${c1}****************${c2}
........... ... ${c1}................${c2}
.......... ..... ${c1}...............${c2}
......... ....... ...
.${c3}...... ${c2}.
${c3}..... .....${c2}.... ${c4}...........
${c3}.... ......${c2}. ${c4}...........
${c3}... ....... ${c4}...........
${c3}................ ${c4}***********
${c3}................ ${c4}###########
${c3}****************
${c3}################
""")
-15
View File
@@ -1,15 +0,0 @@
from . import AsciiArt
aoscosretro_small = AsciiArt(match=r'''"aoscosretro_small"''', color='4 7 1 3', ascii=r"""
${c2} _____ ${c1}_____${c2}
-' '-${c1}| |${c2}
/ ___ ${c1}| |${c2}
| / _ \${c1}|_____|${c2}
' / /_\ \
\ / _____ \${c4}___
${c3}|${c2}/_/ ${c3}| ${c4}| |
${c3}| | ${c4}|___|
${c3}|_____|
""")
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+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} ⢰⡆
⢠⣿⣿⡄
⢀⣾⣿⣿⣿⡀
⣼⣿⣿⣿⣿⣷⡀
⣼⣿⣿⣿⣿⣿⣿⣷
⢼⣿⣿⣿⣿⣿⣿⣿⣿⣧
⣰⣤⣈⠻⢿⣿⣿⣿⣿⣿⣿⣧
⣰⣿⣿⣿⣿⣮⣿⣿⣿⣿⣿⣿⣿⣧
⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
⣼⣿⣿⣿⣿⣿⡿⣿⣿⡟ ⠸⣿⣿⡿⣿⣿⣿⣿⣿⣷⡀
⣼⣿⣿⣿⣿⣿⡏ ⠈⣿⣿⣿⣿⣿⣷⡀
⢀⣼⣿⣿⣿⣿⣿⣿⡗ ⢀⣠⣤⣀ ⠸⣿⣿⣿⣿⣿⣿⣷⡀
⢀⣾⣿⣿⣿⣿⣿⡏⠁ ⢠⣿⣿⣿⣿⡇ ⢙⣿⣿⣻⠿⣿⣷⡀
⢀⣾⣿⣿⣿⣿⣿⣿⣷⣤⡀ ⠻⣿⣿⡿⠃ ⢀⣼⣿⣿⣿⣿⣦⣌⠙
⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏ ⢿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀
⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁ ⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄
⣠⣿⣿⣿⣿⠿⠛⠋⠁ ⠉⠙⠻⢿⣿⣿⣿⣿⣆
⡰⠟⠛⠉⠁ ⠉⠙⠛⠿⢆
""")
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+30
View File
@@ -0,0 +1,30 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
arkane = AsciiArt(match=r'''"Arkane"*''', color='7 130 237', ascii=r"""
${c3} .:..
..:::......
${c2}.${c3} .${c2}.${c3}.....
${c2}+=${c3}...${c2}==${c3}....
......:.${c1}:-${c2}:${c3}..${c1}+*${c2}=${c3}....
${c2}:----::${c3}......
${c2}.=***##*+=: ${c3}..
${c2}=${c1}***######*${c2}=
${c2}.${c1}-*######+
${c2}:+${c1}###%%%###${c3}:
${c2}-+*${c1}########+${c3}.
${c2}=++*${c1}#######${c3}-
${c2}-+=+**${c1}*####${c3}=
${c3}.${c2}-=++==***${c1}##*${c1}-
${c2}-++++++==++++=
.-+++**+++=+===${c3}.
${c2}:---===++++=-=--${c3}.
${c2}-===============${c3}-==--:
${c2}.-==+++***++*${c1}*#########${c3}=:::.
${c2}.-=++++*++++**${c1}#######%%###${c3}=
${c2}.:==++++++**${c1}#############${c3}:
${c2}.${c3}-+*++*+++==${c1}###${c3}+
-${c1}*+${c3}:
""")
+23
View File
@@ -0,0 +1,23 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
arselinux = AsciiArt(match=r'''"ArseLinux"*''', color='4 7', ascii=r"""
${c1}
⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⣴⣶⠀⠀⠀⠀⠀
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣄⠀⠀⠀⠀⣼⠟⠁⠀⠀⢀⣀⠀
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⢀⣤⡀⠀⠀⠀⠉⢻⣷⡄⠀⠀⠁⠀⢀⣤⣾⡿⠟⠀
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣷⣿⠏⠀⠀⠀⠀⠀⠀⠹⣿⡄⠀⠀⠀⠙⠉⠁⠀⠀⠀
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⡄⠀⠀⠀⠀⠀⠀⠀⢹⣿⠀⠀⠀⠀⠠⣶⣶⣶⡶
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠂⠀⠀⠀⠀⠀⢀⣾⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠇⠀⠀⠀⠀⠀⣠⣾⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⣇⣀⣀⣀⣠⣴⣾⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢸⣿⠀⠀⠀⠀⠀⣤⣤⣴⣶⣾⠿⠟⣿⡏⠙⠛⠛⠛⠋⠉⢀⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣿⡄⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⢸⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⠇⠀⠀⠀⠀⠀⠀⠘⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
""")
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
-24
View File
@@ -1,24 +0,0 @@
from . import AsciiArt
aster = AsciiArt(match=r'''"Aster"*''', color='6 6', ascii=r"""
${c1} ...''...
${c1} .;oOXWMWNXXXNMMN0d:.
${c1} .oXMWOo;.. ..:oO;
${c1} ;KMWx, co,
${c1} 'KMNl dMMW.
${c1} oMMx xMMMMk
${c1} xMM: dMMMMMM;
${c1} cMMl dMMMMMMMW
${c1} NMK xMMMx::dXMx
${c1} ,MMl xMMN' .o.
${c1} cMM; dMMW'
${c1} ;MMc oMMW,
${c1} WMK dMMW, ccccccc.
${c1} lMMl oMMM; ooooooo.
${c1} OMMc ...
${c1} xMMx
${c1} ;XMN:
${c1} ,.
""")
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+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}
""")
+24
View File
@@ -0,0 +1,24 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
azos = AsciiArt(match=r'''"azos"*''', color='6 1', ascii=r"""
${c1} ////. ${c2} (((((
${c1} //////// ${c2} @((((((((
${c1} //////// ${c2} @((((((((
${c1} //////// /////// ${c2} ((((((( @((((((((
${c1} //////// ///////// ${c2} ((((((((( @((((((((
${c1} //////// ///////// ${c2} ((((((((( @((((((((
${c1} //////// ///////// ////// ${c2} (((((( ((((((((( @((((((((
${c1} //////// ///////// //////// ${c2} (((((((( ((((((((( @((((((((
${c1} //////// ///////// //////// ${c2} (((((((( ((((((((( @((((((((
${c1} //////// ///////// //////// ${c2} ((((((( ((((((((( @((((((((
${c1} //////// ///////// /// ${c2} ( ((((((((( @((((((((
${c1} //////// ///////// ${c2} ((((((((( @((((((((
${c1} //////// ///////// ${c2} &(((((((( @((((((((
${c1} //////// ////// ${c2} @(((( @((((((((
${c1} //////// ${c2} @((((((((
${c1} //////// ${c2} @((((((((
${c1} ///// ${c2} (((((
""")
+26
View File
@@ -0,0 +1,26 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
bazzite = AsciiArt(match=r'''"Bazzite"*''', color='5 5', ascii=r"""
${c1} %%%%%%====%%%%%%%%%%
%%%%%%%% %%%%%%%%%%%%%%
%%%%%%%%% %%%%%%%%%%%%%%%%
%%%%%%%%% %%%%%%%%%%%%%%%###
%%%%%%%%% %%%%%%%%%%%%%######
== =======######
== =========#####
%%%%%%%%% %%%%%%%####======#####
%%%%%%%%% %%%%%#######=====#####
%%%%%%%%% %%%#########=====#####
%%%%%%%%% %%##########=====#####
%%%%%%%%%====###########=====######
%%%%%%%%====#########======######
%%%%%%%=====#####========######
%%%%###===============#######
%#######==========#########
#######################
###################
###########
""")
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+29
View File
@@ -0,0 +1,29 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
biglinux_large = AsciiArt(match=r'''"BigLinux_large"*''', color='2 3 4 7', ascii=r"""
${c4}
${c3}.cd0KXXX${c4}0${c3}x;
${c3}.oXM${c4}M${c3}MMMMMMMMMWo
${c2}... ${c3}dWMMMM${c4}M${c3}MMMMMMMMMMN,
${c2}c0WMMMW0: ${c3}.XMMMM${c4}M${c3}MMMKdc;,;cxNMM:
${c1}x, ${c2}.XMMMMMMMMM: ${c3}'W${c3}MMMMMMWo. ;KW.
${c1}dM. ${c2}.WMMMMMMMM0 ${c3}N${c3}MMMM${c4}M${c3}Mk. dd
${c1}.MM. ${c2}.lOKXKOl. ${c3}oMMMMMMd .l${c4}x${c3}kd: .
${c1}kMM: .'.. ${c2}:xOOxc. ${c3}O${c4}M${c3}MMMM0 lXMMMMM${c4}M${c3}N;
${c1}WMM0 lKMMMMMW0o. ${c2}KMMMMMMN. ${c3}xMM${c4}M${c3}M, .dWMMMMMMMMMM;
${c1}.MMMMx .oWMMMMMMOl0MMX; ${c2}NMMMMMMM; ${c3}.NMMMM. .dWMMMM${c4}M${c3}MMMMMMMN
${c1}.MMMMMNOKMMMMMMMk. 'MMMMx ${c2};MMMMMMMO ${c3}.KMMMl .oWMMMMMWk:,lWMMMM.
${c1}xMMMMMMMMMMMMk. .MMMMMc ${c2}'XMMMMMMx ${c3}:0MMNMMMM${c4}M${c3}MWx. .WM${c4}M${c3}M.
${c1}0MMMMMMMMWx. :MMMMMK ${c2}cKMMMMMX: ${c3},ok0K0x:. oMMN
${c1}oNMMMM0c. .NMMMMMO ${c2}.lOWMMMX: ${c3}.M${c4}M${c3}o
${c1}c. .'. .KMMMMMM: ${c2}.';clc. ${c3}MN
${c1}:N; cWMMMMMMO ${c3}.W;
${c1}0M0: 'dNMMMMMMM0 ${c3}',
${c1}0MMMX0O0XMMMMMMMMMMo
${c1}oWMMMMMMMMMMMMMMk.
${c1}.oXMMMMMMMMW0c.
${c1}.;ccc:,.
""")
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+28
View File
@@ -0,0 +1,28 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
blackmesa = AsciiArt(match=r'''"BlackMesa"''', color='1', ascii=r"""
${c1}
.-;+$XHHHHHHX$+;-.
,;X@@X%/;=----=:/%X@@X/,
=$@@%=. .=+H@X:
-XMX: =XMX=
/@@: =H@+
%@X, .$@$
+@X. $@%
-@@, .@@=
%@% +@$
H@: :@H
H@: :HHHHHHHHHHHHHHHHHHX, =@H
%@% ;@M@@@@@@@@@@@@@@@@@H- +@$
=@@, :@@@@@@@@@@@@@@@@@@@@@= .@@:
+@X :@@@@@@@@@@@@@@@M@@@@@@:%@%
$@$, ;@@@@@@@@@@@@@@@@@M@@@@@@$.
+@@HHHHHHH@@@@@@@@@@@@@@@@@@@@@@@+
=X@@@@@@@@@@@@@@@@@@@@@@@@@@@@X=
:$@@@@@@@@@@@@@@@@@@@M@@@@$:
,;$@@@@@@@@@@@@@@@@@@X/-
.-;+$XXHHHHHX$+;-.
""")
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt
+1
View File
@@ -1,3 +1,4 @@
# This file is automatically generated. Please do not modify.
from . import AsciiArt

Some files were not shown because too many files have changed in this diff Show More