Compare commits

...

100 Commits

Author SHA1 Message Date
Hykilpikonna 8616ff0504 [U] Release 1.4.3 2022-10-30 13:24:53 -04:00
Hykilpikonna dde9443ec7 [U] Update changelog 2022-10-30 13:23:16 -04:00
Hykilpikonna b6f0a80bb1 [F] Specify /usr/bin/env bash to prevent ld signature check on iOS 2022-10-30 13:21:21 -04:00
Hykilpikonna a758b4ba04 [U] Update changelog 2022-10-30 13:16:30 -04:00
Hykilpikonna 700f651378 [F] Fix cols coloring reset for bash 3.2
Introduce by #24
2022-10-30 13:11:27 -04:00
Hykilpikonna 77614b635f Merge branch 'master' of github.com:hykilpikonna/hyfetch 2022-10-30 12:35:54 -04:00
Hykilpikonna fdd3ef970d [PR] dylanaraps/neofetch#2222 from AwkwardTeenageBoy - VanillaOS neofetch
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2222
Thanks to @AwkwardTeenageBoy

Co-authored-by: Twinkie <105467171+AwkwardTeenageBoy@users.noreply.github.com>
2022-10-30 12:35:36 -04:00
Hykilpikonna e49ed7d080 [PR] #32 from ngkz: Add gender presentation pride flags 2022-10-30 12:25:47 -04:00
Kazutoshi Noguchi a1149ab68b add GNC, femboy and tomboy flags 2022-10-30 18:50:41 +09:00
Twinkie 6390ed10c4 Update neofetch 2022-10-27 12:20:39 -07:00
Twinkie 810b380e47 Update neofetch 2022-10-27 12:17:20 -07:00
Twinkie 1274e977c3 Update neofetch 2022-10-27 12:07:51 -07:00
Twinkie 38fb44cb8e Added Vanilla Logo and Support for Vanilla 2022-10-27 10:15:52 -07:00
Hykilpikonna 90c94044f4 [PR] #31 from yxnan: Check if the output is a tty 2022-10-27 10:39:22 -04:00
yxnan 5bf7fbf2b4 Add options for --stdout 2022-10-27 22:16:10 +08:00
yxnan 23a1b10467 Check if the output is a tty
The color code should not be emitted if the stdout is not a typical terminal, we add the check so there is no need to explictly specify `--stdout`
2022-10-27 00:27:23 +08:00
Hykilpikonna 0dae7ca3f9 [U] Update todo list 2022-10-25 03:27:23 -04:00
Hykilpikonna e23eb980d3 [U] Update screenshot 2022-10-25 03:19:52 -04:00
Azalea (on HyDEV-Daisy) 7171494e95 [F] Fix OSC timeout too short for ssh 2022-10-23 02:51:34 -04:00
Azalea (on HyDEV-Daisy) c00848fd79 [U] Update readme changelog 2022-10-23 02:26:55 -04:00
Azalea (on HyDEV-Daisy) 717ff369c0 [O] Optimize fore_back distro detection 2022-10-23 02:20:51 -04:00
Azalea (on HyDEV-Daisy) ff44ea6185 [+] Add more ubuntu variants with fore_back layout 2022-10-23 02:16:08 -04:00
Azalea (on HyDEV-Daisy) 969a7c668c [O] Dynamic prompt numbering 2022-10-23 02:12:05 -04:00
Azalea (on HyDEV-Daisy) bd5d76167e [F] Fix incorrect coloring when the first color isn't ${c1} 2022-10-23 02:06:45 -04:00
Azalea (on HyDEV-Daisy) f57ad70a20 [O] Clarify prompt 2022-10-23 01:51:42 -04:00
Azalea (on HyDEV-Daisy) a3da5b6c59 [F] Fix lightness logic 2022-10-23 01:51:12 -04:00
Azalea (on HyDEV-Daisy) 3cbb20c899 [F] Refactor lightness logic 2022-10-23 01:37:48 -04:00
Azalea (on HyDEV-Daisy) 0a9ac6a351 [U] Detect background and color mode in main 2022-10-23 01:37:23 -04:00
Azalea (on HyDEV-Daisy) 75ed187e72 [+] termenv: Detect system when detecting ansi mode 2022-10-23 01:36:09 -04:00
Azalea (on HyDEV-Daisy) cd4849f0b8 [F] Fix unhashable type error for RGB 2022-10-23 01:35:54 -04:00
Azalea (on HyDEV-Daisy) 0960024e71 [+] termenv: Translate golang code into python 2022-10-22 19:52:05 -04:00
Azalea (on HyDEV-Daisy) 7411ec87e7 [F] Fix relative import 2022-10-22 18:46:42 -04:00
Azalea (on HyDEV-Daisy) d8f49a2ea2 [+] Detect if a color is light 2022-10-22 18:42:52 -04:00
Azalea (on HyDEV-Daisy) 101d798c0a [O] Refactor HSL and RGB 2022-10-22 18:42:06 -04:00
Azalea (on HyDEV-Daisy) 330de73df3 [M] Rename osc -> termenv 2022-10-22 18:26:00 -04:00
Azalea (on HyDEV-Daisy) 4e11d21401 [+] osc: parse background color 2022-10-22 18:22:51 -04:00
Azalea (on HyDEV-Daisy) cb5635908f [-] osc: remove commented code 2022-10-22 17:53:00 -04:00
Azalea (on HyDEV-Daisy) fbbe3b1c93 [+] Send/read osc responses 2022-10-22 17:52:36 -04:00
Azalea 774598fcb3 [PR] dylanaraps/neofetch#2215 from VitoFe - Add garuda_small, sort _small variants
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2215
Thanks to @VitoFe

Co-authored-by: VitoFe <vito-7@hotmail.it>
2022-10-21 14:42:22 -04:00
Azalea 8abfb0c876 [PR] dylanaraps/neofetch#2213 from EnterTheVoid-x86 - Add Cobalt Linux logo
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2213
Thanks to @EnterTheVoid-x86

Co-authored-by: etvx86 <64978924+EnterTheVoid-x86@users.noreply.github.com>
2022-10-21 14:25:26 -04:00
Hykilpikonna 7a6628d387 [PR] #28 from alyxferrari: Surround macOS build number in parentheses 2022-10-21 13:02:36 +08:00
Azalea (on HyDEV-Daisy) 09185e5a41 [F] Fix light dark detection 2022-10-19 23:48:41 -04:00
Alyx Ferrari 6efd890526 Surround macOS build number in parentheses 2022-10-19 10:25:08 -04:00
VitoFe 05cf31fc14 Add garuda_small, sort _small variants
Added garuda_small
Sorted the _small variants note distro list alphabetically, just like the normal list (for consistency)
2022-10-15 17:55:11 +00:00
Hykilpikonna 220b528c72 [PR] #27 from alyxferrari: arch-linux-readme-fix
Update Arch Linux installation docs
2022-10-14 13:25:37 -04:00
Alyx Ferrari 038d976b39 Update Arch Linux installation docs 2022-10-14 13:23:16 -04:00
Hykilpikonna 60609dfb7e [PR] #26 from alyxferrari: Fix typo
Change 'look' to 'looks' in main.py
2022-10-14 13:21:46 -04:00
Alyx Ferrari 610e06fcd9 Change 'look' to 'looks' in main.py 2022-10-14 13:11:05 -04:00
etvx86 49003c859f add cobalt in help message 2022-10-11 13:44:16 -04:00
etvx86 10bf2fce08 Add Cobalt Linux logo
Hopefully this gets merged -

Cobalt Linux is a distribution I'm currently working on, which will come with window managers and have the goal of customization. It also has a goal of "Arch Linux made easy".
2022-10-11 13:38:11 -04:00
Hykilpikonna 8a091f4d01 [PR] #25 from ben5vik: add unlabeled flag 2022-10-10 10:06:31 -04:00
Ben 10b331052d Update presets.py 2022-10-10 15:45:20 +02:00
Ben 8751faab2e Adding unlabeled 2022-10-10 15:40:14 +02:00
Azalea (on HyDEV-Daisy) 0a1e97cd92 [U] Release 1.4.2 2022-10-04 13:10:37 -04:00
Azalea (on HyDEV-Daisy) 7e59c362be [F] Fix deploy script 2022-10-04 13:10:00 -04:00
Azalea (on HyDEV-Daisy) 3e8c103479 [U] Update changelog 2022-10-04 13:07:52 -04:00
Azalea (on HyDEV-Daisy) 5be5aa1b51 [O] Show memory percentage, speed shorthand, refresh rate by default 2022-10-04 13:03:32 -04:00
Azalea (on HyDEV-Daisy) 08f75415eb [F] Fix neofetch permissions (+x) 2022-10-04 12:44:02 -04:00
Azalea (on HyDEV-Daisy) 02b6e9d72d [PR] dylanaraps/neofetch#1706 from ravenclaw900 - Add DietPi support
Upstream PR: https://github.com/dylanaraps/neofetch/pull/1706
Thanks to @ravenclaw900

Co-Authored-By: ravenclaw900 <50060110+ravenclaw900@users.noreply.github.com>
2022-10-04 12:42:15 -04:00
Azalea (on HyDEV-Daisy) 59b9dc6e1a [PR] dylanaraps/neofetch#2196 from matt-fidd - Added for OmniOS illumos distribution
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2196
Thanks to @matt-fidd

Co-authored-by: matt <matt@fiddaman.net>
2022-10-04 12:31:15 -04:00
Azalea (on HyDEV-Daisy) 0f302eea60 [PR] dylanaraps/neofetch#2201 from FakeShell - add droidian to neofetch
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2201
Thanks to @FakeShell

Co-authored-by: Bardia Moshiri <fakeshell@bardia.tech>
2022-10-04 12:22:52 -04:00
Azalea (on HyDEV-Daisy) 7c7cba2346 Merge branch 'master' of github.com:hykilpikonna/hyfetch 2022-10-04 12:04:37 -04:00
Azalea (on HyDEV-Daisy) f989ec0d20 [PR] dylanaraps/neofetch#2210 from chaeya - Added ascii logo for hamonikr
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2210
Thanks to @chaeya

Co-authored-by: Kevin Kim <hckim@invesume.com>
2022-10-04 12:04:18 -04:00
Hykilpikonna e72fe4d934 [PR] #24 from OldWorldOrdr: Fix bash 5.2 column cut off issue 2022-10-04 11:57:54 -04:00
Kevin Kim 7f48e4cd43 Added ascii logo for hamonikr 2022-10-01 20:24:04 +09:00
OldWorldOrdr bc89c50427 Update neofetch 2022-09-30 06:34:19 -04:00
Hykilpikonna 7c93a0df1c [+] Progress bar test 2022-09-27 14:40:06 -04:00
Hykilpikonna 8b67e539b5 [U] Update changlog 2022-09-26 16:18:34 -04:00
Hykilpikonna 7c16e15cea [U] Update change log 2022-09-26 16:12:34 -04:00
Azalea (on HyDEV-Daisy) 79e0a8360b Merge branch 'master' of github.com:hykilpikonna/hyfetch 2022-09-26 09:16:30 -04:00
Azalea (on HyDEV-Daisy) d2347cefb1 [+] #22 Add tidal-hifi song detection 2022-09-26 09:16:18 -04:00
Hykilpikonna cda96dda4e [PR] #23 from stock-linux: Added Stock Linux logo 2022-09-26 09:11:32 -04:00
Skythrew 3dde4bcdef feat: added Stock Linux logo 2022-09-26 07:31:09 +02:00
Hykilpikonna 0811acab58 [F] Fix multiple CPU model detection for ARM
https://github.com/dylanaraps/neofetch/pull/2139
2022-09-20 13:20:32 -04:00
Hykilpikonna f14324ffce [U] Display memory in GiB by default 2022-09-20 11:50:07 -04:00
Hykilpikonna 1ba7b339c9 [-] Disable network display when network is not detected 2022-09-20 11:44:17 -04:00
Bardia Moshiri 8987b0b15f change droidian from half green to full green logo 2022-09-18 16:07:32 -04:00
Bardia Moshiri 4f12d97e40 add droidian to neofetch 2022-09-18 15:40:34 -04:00
matt c3beb21966 Add 'pkg list' package source 2022-09-15 17:24:08 +00:00
matt 078af21630 Fix solaris fqdn 2022-09-15 17:24:08 +00:00
matt 4e7724ecf8 Add illumos os support 2022-09-15 17:24:08 +00:00
matt 624bd97045 Fix uptime value in Solaris 2022-09-15 17:24:08 +00:00
matt 45ea478414 Added ascii art for OmniOS illumos distribution 2022-09-15 17:24:08 +00:00
Azalea (on HyDEV-Daisy) 9e001c530f Merge branch 'master' of github.com:hykilpikonna/hyfetch 2022-09-10 15:19:08 -04:00
Azalea (on HyDEV-Daisy) d850e4c91e [PR] dylanaraps/neofetch#2139 from saeziae - Fix support for ARM, RISC-V, LoongArch detection
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2139
Thanks to @saeziae

Co-authored-by: Estela Xu <i@estela.cn>
2022-09-10 15:18:49 -04:00
Hykilpikonna 376268f79e [PR] #21 from TheSudoer: Local install method and contributing note 2022-09-10 02:04:14 -04:00
Hykilpikonna b955a61ac5 [U] Update local install method and contributing note 2022-09-10 01:56:29 -04:00
C0UNTM31N c099c9e5f7 Update README.md 2022-09-10 00:17:54 -05:00
C0UNTM31N 7b62c80881 Fixed formatting 2022-09-10 00:15:33 -05:00
C0UNTM31N d6b33ae3e9 Merge branch 'master' of https://github.com/TheSudoer/hyfetch 2022-09-10 00:09:09 -05:00
C0UNTM31N 9da32dab4b Altered the deploy script and added build instructions 2022-09-10 00:05:08 -05:00
Azalea (on HyDEV-Daisy) cf0202fd7c Merge branch 'master' of github.com:hykilpikonna/hyfetch 2022-09-09 19:53:18 -04:00
Azalea (on HyDEV-Daisy) 8a01ce491b [PR] dylanaraps/neofetch#2192 from Skythrew - Stock Linux distro support
Upstream PR: https://github.com/dylanaraps/neofetch/pull/2192
Thanks to @Skythrew

Co-authored-by: Skythrew <76571984+Skythrew@users.noreply.github.com>
2022-09-09 19:53:08 -04:00
saeziae fd2248daec merge riscv and loongarch to others 2022-09-08 22:55:50 +08:00
Hykilpikonna ab23dc3c2b Merge pull request #20 from TheSudoer/master 2022-09-07 10:52:25 -04:00
C0UNTM31N 58a82c2b5e Fix GhostBSD commit being atributed to the wrong person, was previously attributed to dylanaraps as a commit to neofetch. 2022-09-06 13:18:30 -05:00
Azalea (on HyDEV-Daisy) d0fda1ef0d [U] Deploy tool: Push tag 2022-09-06 12:20:37 -04:00
Azalea (on HyDEV-Daisy) 82c37a28d3 [F] fix deploy script path 2022-09-06 12:18:58 -04:00
Skythrew 042ec7a33c Added support for Stock Linux distro (squirrel package manager add) 2022-09-03 12:38:12 +02:00
saeziae 3253d4cbcc add loongarch 2022-07-31 18:55:05 +08:00
13 changed files with 910 additions and 244 deletions
+63 -7
View File
@@ -2,7 +2,7 @@
neofetch with pride flags <3 neofetch with pride flags <3
<img src="https://user-images.githubusercontent.com/22280294/162614541-af2b4660-f1f7-4287-b978-1aa2266ac70f.png" width="60%"> <img alt="screenshot" src="https://user-images.githubusercontent.com/22280294/197708447-ddee6db2-1017-48f2-b507-8ddf85acef0d.png">
### Running Updated Original Neofetch ### Running Updated Original Neofetch
@@ -12,6 +12,7 @@ This repo also serves as an updated version of the original `neofetch` since the
* Method 2: `npx neowofetch` * Method 2: `npx neowofetch`
* Method 3: `bash <(curl -sL neowofetch.hydev.org)` * Method 3: `bash <(curl -sL neowofetch.hydev.org)`
## Installation ## Installation
### Method 1: Install using Python pip (Recommended) ### Method 1: Install using Python pip (Recommended)
@@ -26,9 +27,20 @@ pip install hyfetch
Currently, these distributions have existing packages for HyFetch: Currently, these distributions have existing packages for HyFetch:
* ArchLinux: `yay -S hyfetch` (Thanks to @ Aleksana) * Arch Linux: `paru -S hyfetch` or `yay -S hyfetch` (Thanks to [@Aleksana](https://github.com/Aleksanaa))
* Nix: `nix-env -i hyfetch` (Thanks to @ YisuiDenghua) * Nix: `nix-env -i hyfetch` (Thanks to [@YisuiDenghua](https://github.com/YisuiDenghua))
* Guix: `guix install hyfetch` (Thanks to @ WammKD) * Guix: `guix install hyfetch` (Thanks to [@WammKD](https://github.com/WammKD))
### Method 3: Install the latest developmental version using git
Install Python >= 3.7 first. Then run the following commands:
```sh
git clone https://github.com/hykilpikonna/hyfetch.git
cd hyfetch
pip install .
```
## Usage ## Usage
@@ -36,6 +48,9 @@ When you run `hyfetch` for the first time, it will prompt you to choose a color
If you want to use the updated `neofetch` without LGBTQ flags, check out [this section](https://github.com/hykilpikonna/hyfetch#running-updated-original-neofetch) If you want to use the updated `neofetch` without LGBTQ flags, check out [this section](https://github.com/hykilpikonna/hyfetch#running-updated-original-neofetch)
## Questions and answers
#### Q: How do I change my config? #### Q: How do I change my config?
A: Use `hyfetch -c` A: Use `hyfetch -c`
@@ -48,6 +63,18 @@ Feel free to experiment with it!
![image](https://user-images.githubusercontent.com/22280294/162614553-eb758e4e-1936-472c-8ca7-b601c696c6eb.png) ![image](https://user-images.githubusercontent.com/22280294/162614553-eb758e4e-1936-472c-8ca7-b601c696c6eb.png)
## Contributing
To make changes to our codebase, you first need to create a fork by clicking the "Fork" button on the top right. Then, you can clone your fork of the source code using `git clone https://github.com/{your username}/hyfetch.git`.
After making changes to the source code, you can run `python -m hyfetch` in the root directory of your repo to test out your changes.
If they work correctly, you can commit and push these changes using git command or Github Desktop. Then, you can create a pull request on Github so that it can go into our next release!
You can also install your version locally by running `pip install .` in the repo root.
## Change Log ## Change Log
### About Notation ### About Notation
@@ -57,11 +84,40 @@ Updates to `neowofetch` begins with the emoji 🖼️
### TODO ### TODO
* [ ] Allow left-right arrow keys for pagination * [ ] (Important!) Refactor flag storage & coloring to support non-stride patterns
* [ ] Implement light/dark background detection based on https://github.com/muesli/termenv * [ ] Config menu: Allow left-right arrow keys for pagination
<!-- CHANGELOG STARTS HERE ---> <!-- CHANGELOG STARTS HERE --->
### 1.4.3
* 🌈 **Auto detect terminal background color & rgb support**
* 🌈 **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)
* 🌈 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)
### 1.4.2
* 🌈 Detailed runnning/contributing instructions in README.md (#21)
* 🖼️ Distro - Add Stock Linux (#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)
* 🖼️ 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)
### 1.4.1 ### 1.4.1
* 🌈 Paginate flags (#14) * 🌈 Paginate flags (#14)
@@ -72,7 +128,7 @@ Updates to `neowofetch` begins with the emoji 🖼️
* 🌈 Add experimental Windows support (very unstable at the moment) * 🌈 Add experimental Windows support (very unstable at the moment)
* 🖼️ Distro - Add ravynOS ([dylanaraps#2182](https://github.com/dylanaraps/neofetch/pull/2182)) * 🖼️ Distro - Add ravynOS ([dylanaraps#2182](https://github.com/dylanaraps/neofetch/pull/2182))
* 🖼️ Distro - Add ChonkySealOS ([dylanaraps#2180](https://github.com/dylanaraps/neofetch/pull/2180)) * 🖼️ Distro - Add ChonkySealOS ([dylanaraps#2180](https://github.com/dylanaraps/neofetch/pull/2180))
* 🖼️ Distro - Add GhostBSD ([dylanaraps#2180](https://github.com/dylanaraps/neofetch/pull/2180)) * 🖼️ Distro - Add GhostBSD ([TheSudoer#18](https://github.com/hykilpikonna/hyfetch/pull/18))
* 🖼️ Distro - Add NekOS ([dylanaraps#2186](https://github.com/dylanaraps/neofetch/pull/2186)) * 🖼️ Distro - Add NekOS ([dylanaraps#2186](https://github.com/dylanaraps/neofetch/pull/2186))
* 🖼️ Distro - Add astOS ([dylanaraps#2185](https://github.com/dylanaraps/neofetch/pull/2185)) * 🖼️ Distro - Add astOS ([dylanaraps#2185](https://github.com/dylanaraps/neofetch/pull/2185))
* 🖼️ Distro - Fix ChromeOS identification ([dylanaraps#1949](https://github.com/dylanaraps/neofetch/pull/1949)) * 🖼️ Distro - Fix ChromeOS identification ([dylanaraps#1949](https://github.com/dylanaraps/neofetch/pull/1949))
+32 -11
View File
@@ -1,8 +1,7 @@
from __future__ import annotations from __future__ import annotations
import colorsys import colorsys
from typing import NamedTuple, Callable, Optional from dataclasses import dataclass, astuple
from typing_extensions import Literal from typing_extensions import Literal
from .constants import GLOBAL_CFG from .constants import GLOBAL_CFG
@@ -84,11 +83,28 @@ def redistribute_rgb(r: int, g: int, b: int) -> tuple[int, int, int]:
return int(gray + x * r), int(gray + x * g), int(gray + x * b) return int(gray + x * r), int(gray + x * g), int(gray + x * b)
class RGB(NamedTuple): @dataclass(unsafe_hash=True)
class HSL:
h: float
s: float
l: float
def __iter__(self):
return iter(astuple(self))
def rgb(self) -> RGB:
return RGB(*[round(v * 255.0) for v in colorsys.hls_to_rgb(self.h, self.l, self.s)])
@dataclass(unsafe_hash=True)
class RGB:
r: int r: int
g: int g: int
b: int b: int
def __iter__(self):
return iter(astuple(self))
@classmethod @classmethod
def from_hex(cls, hex: str) -> "RGB": def from_hex(cls, hex: str) -> "RGB":
""" """
@@ -100,9 +116,7 @@ class RGB(NamedTuple):
:param hex: Hex color code :param hex: Hex color code
:return: RGB object :return: RGB object
""" """
while hex.startswith('#'): hex = hex.lstrip("#")
hex = hex[1:]
r = int(hex[0:2], 16) r = int(hex[0:2], 16)
g = int(hex[2:4], 16) g = int(hex[2:4], 16)
b = int(hex[4:6], 16) b = int(hex[4:6], 16)
@@ -177,6 +191,10 @@ class RGB(NamedTuple):
""" """
return RGB(*redistribute_rgb(*[v * multiplier for v in self])) return RGB(*redistribute_rgb(*[v * multiplier for v in self]))
def hsl(self) -> HSL:
h, l, s = colorsys.rgb_to_hls(*[v / 255.0 for v in self])
return HSL(h, s, l)
def set_light(self, light: float, at_least: bool | None = None, at_most: bool | None = None) -> 'RGB': def set_light(self, light: float, at_least: bool | None = None, at_most: bool | None = None) -> 'RGB':
""" """
Set HSL lightness value Set HSL lightness value
@@ -187,16 +205,19 @@ class RGB(NamedTuple):
:return: New color (original isn't modified) :return: New color (original isn't modified)
""" """
# Convert to HSL # Convert to HSL
h, l, s = colorsys.rgb_to_hls(*[v / 255.0 for v in self]) hsl = self.hsl()
# Modify light value # Modify light value
if at_least is None and at_most is None: if at_least is None and at_most is None:
l = light hsl.l = light
else: else:
if at_most: if at_most:
l = min(l, light) hsl.l = min(hsl.l, light)
if at_least: if at_least:
l = max(l, light) hsl.l = max(hsl.l, light)
# Convert back to RGB # Convert back to RGB
return RGB(*[round(v * 255.0) for v in colorsys.hls_to_rgb(h, l, s)]) return hsl.rgb()
def is_light(self):
return self.hsl().l > 0.5
+1 -1
View File
@@ -7,7 +7,7 @@ from pathlib import Path
from typing_extensions import Literal from typing_extensions import Literal
CONFIG_PATH = Path.home() / '.config/hyfetch.json' CONFIG_PATH = Path.home() / '.config/hyfetch.json'
VERSION = '1.4.1' VERSION = '1.4.3'
TEST_ASCII = r""" TEST_ASCII = r"""
+91 -69
View File
@@ -4,13 +4,14 @@ from __future__ import annotations
import argparse import argparse
import json import json
import random import random
import re
from itertools import permutations
import traceback import traceback
from typing import Iterable from itertools import permutations
from math import ceil from math import ceil
from typing import Iterable
from .color_util import printc, color, clear_screen from . import termenv
from .color_scale import Scale
from .color_util import printc, color, clear_screen, AnsiMode
from .constants import * from .constants import *
from .models import Config from .models import Config
from .neofetch_util import * from .neofetch_util import *
@@ -85,11 +86,28 @@ def create_config() -> Config:
:return: Config object (automatically stored) :return: Config object (automatically stored)
""" """
# Detect terminal environment
det_bg = termenv.get_background_color()
det_ansi = termenv.detect_ansi_mode()
asc = get_distro_ascii() asc = get_distro_ascii()
asc_width, asc_lines = ascii_size(asc) asc_width, asc_lines = ascii_size(asc)
title = 'Welcome to &b&lhy&f&lfetch&r! Let\'s set up some colors first.' logo = color("&b&lhyfetch&r" if det_bg is None or det_bg.is_light() else "&b&lhy&f&lfetch&r")
title = f'Welcome to {logo} Let\'s set up some colors first.'
clear_screen(title) clear_screen(title)
option_counter = 1
def update_title(k: str, v: str):
nonlocal title, option_counter
if not k.endswith(":"):
k += ':'
title += f"\n&e{option_counter}. {k.ljust(30)} &r{v}"
option_counter += 1
def print_title_prompt(prompt: str):
printc(f'&a{option_counter}. {prompt}')
############################## ##############################
# 0. Check term size # 0. Check term size
try: try:
@@ -104,11 +122,12 @@ def create_config() -> Config:
############################## ##############################
# 1. Select color system # 1. Select color system
clear_screen(title) def select_color_system():
term_len, term_lines = term_size() if det_ansi == 'rgb':
try: return 'rgb', 'Detected color mode'
# Demonstrate RGB with a gradient. This requires numpy
from .color_scale import Scale clear_screen(title)
term_len, term_lines = term_size()
scale2 = Scale(['#12c2e9', '#c471ed', '#f7797d']) scale2 = Scale(['#12c2e9', '#c471ed', '#f7797d'])
_8bit = [scale2(i / term_len).to_ansi_8bit(False) for i in range(term_len)] _8bit = [scale2(i / term_len).to_ansi_8bit(False) for i in range(term_len)]
@@ -118,28 +137,32 @@ def create_config() -> Config:
printc('&f' + ''.join(c + t for c, t in zip(_rgb, 'RGB Color Testing'.center(term_len)))) printc('&f' + ''.join(c + t for c, t in zip(_rgb, 'RGB Color Testing'.center(term_len))))
print() print()
printc(f'&a1. Which &bcolor system &ado you want to use?') print_title_prompt('Which &bcolor system &ado you want to use?')
printc(f'(If you can\'t see colors under "RGB Color Testing", please choose 8bit)') printc(f'(If you can\'t see colors under "RGB Color Testing", please choose 8bit)')
print() print()
color_system = literal_input('Your choice?', ['8bit', 'rgb'], 'rgb')
except ModuleNotFoundError: return literal_input('Your choice?', ['8bit', 'rgb'], 'rgb'), 'Selected color mode'
# Numpy not found, skip gradient test, use fallback
color_system = literal_input('Which &acolor &bsystem &rdo you want to use?',
['8bit', 'rgb'], 'rgb')
# Override global color mode # Override global color mode
color_system, ttl = select_color_system()
GLOBAL_CFG.color_mode = color_system GLOBAL_CFG.color_mode = color_system
title += f'\n&e1. Selected color mode: &r{color_system}' update_title(ttl, color_system)
############################## ##############################
# 2. Select light/dark mode # 2. Select light/dark mode
clear_screen(title) def select_light_dark():
light_dark = literal_input(f'2. Is your terminal in &gf(#85e7e9)light mode&r or &gf(#c471ed)dark mode&r?', if det_bg is not None:
['light', 'dark'], 'dark') return det_bg.is_light(), 'Detected background color'
is_light = light_dark == 'light'
clear_screen(title)
inp = literal_input(f'2. Is your terminal in &blight mode&r or &4dark mode&r?',
['light', 'dark'], 'dark')
return inp == 'light', 'Selected background color'
is_light, ttl = select_light_dark()
light_dark = 'light' if is_light else 'dark'
GLOBAL_CFG.is_light = is_light GLOBAL_CFG.is_light = is_light
title += f'\n&e2. Light/Dark: &r{light_dark}' update_title(ttl, light_dark)
############################## ##############################
# 3. Choose preset # 3. Choose preset
@@ -168,7 +191,7 @@ def create_config() -> Config:
def print_flag_page(page: list[list[list[str]]], page_num: int): def print_flag_page(page: list[list[list[str]]], page_num: int):
clear_screen(title) clear_screen(title)
printc('&a3. Let\'s choose a flag!') print_title_prompt("Let's choose a flag!")
printc('Available flag presets:') printc('Available flag presets:')
print(f'Page: {page_num + 1} of {num_pages}') print(f'Page: {page_num + 1} of {num_pages}')
print() print()
@@ -198,45 +221,48 @@ def create_config() -> Config:
page -= 1 page -= 1
else: else:
_prs = PRESETS[preset] _prs = PRESETS[preset]
title += f'\n&e3. Selected flag: &r{_prs.color_text(preset)}' update_title('Selected flag', _prs.set_light_dl_def(light_dark).color_text(preset))
break break
############################# #############################
# 4. Dim/lighten colors # 4. Dim/lighten colors
clear_screen(title) def select_lightness():
printc(f'&a4. Let\'s adjust the color brightness!') clear_screen(title)
printc(f'The colors might be a little bit too {"bright" if is_light else "dark"} for {light_dark} mode.') print_title_prompt("Let's adjust the color brightness!")
print() printc(f'The colors might be a little bit too {"bright" if is_light else "dark"} for {light_dark} mode.')
# Print cats
num_cols = term_size()[0] // (TEST_ASCII_WIDTH + 2)
ratios = [col / (num_cols - 1) for col in range(num_cols)]
ratios = [(r * 0.4 + 0.1) if is_light else (r * 0.4 + 0.5) for r in ratios]
lines = [ColorAlignment('horizontal').recolor_ascii(TEST_ASCII.replace(
'{txt}', f'{r * 100:.0f}%'.center(5)), _prs.set_light_dl(r, light_dark)).split('\n') for r in ratios]
[printc(' '.join(line)) for line in zip(*lines)]
while True:
print() print()
printc(f'Which brightness level look the best? (Default: left blank = {GLOBAL_CFG.default_lightness(light_dark):.2f} for {light_dark} mode)')
lightness = input('> ').strip().lower() or None
# Parse lightness # Print cats
if not lightness or lightness in ['unset', 'none']: num_cols = term_size()[0] // (TEST_ASCII_WIDTH + 2)
lightness = None mn, mx = 0.15, 0.85
break ratios = [col / (num_cols - 1) for col in range(num_cols)]
ratios = [(r * (mx - mn) / 2 + mn) if is_light else ((r * (mx - mn) + (mx + mn)) / 2) for r in ratios]
lines = [ColorAlignment('horizontal').recolor_ascii(TEST_ASCII.replace(
'{txt}', f'{r * 100:.0f}%'.center(5)), _prs.set_light_dl(r, light_dark)).split('\n') for r in ratios]
[printc(' '.join(line)) for line in zip(*lines)]
try: def_lightness = GLOBAL_CFG.default_lightness(light_dark)
lightness = int(lightness[:-1]) / 100 if lightness.endswith('%') else float(lightness)
assert 0 <= lightness <= 1
break
except Exception: while True:
printc('&cUnable to parse lightness value, please input it as a decimal or percentage (e.g. 0.5 or 50%)') print()
printc(f'Which brightness level looks the best? (Default: {def_lightness * 100:.0f}% for {light_dark} mode)')
lightness = input('> ').strip().lower() or None
if lightness: # Parse lightness
_prs = _prs.set_light_dl(lightness, light_dark) if not lightness or lightness in ['unset', 'none']:
title += f'\n&e4. Brightness: &r{f"{lightness:.2f}" if lightness else "unset"}' return def_lightness
try:
lightness = int(lightness[:-1]) / 100 if lightness.endswith('%') else float(lightness)
assert 0 <= lightness <= 1
return lightness
except Exception:
printc('&cUnable to parse lightness value, please input it as a decimal or percentage (e.g. 0.5 or 50%)')
lightness = select_lightness()
_prs = _prs.set_light_dl(lightness, light_dark)
update_title('Selected Brightness', f"{lightness:.2f}")
############################# #############################
# 5. Color arrangement # 5. Color arrangement
@@ -261,16 +287,16 @@ def create_config() -> Config:
# Random color schemes # Random color schemes
pis = list(range(len(_prs.unique_colors().colors))) pis = list(range(len(_prs.unique_colors().colors)))
slots = len(set(re.findall('(?<=\\${c)[0-9](?=})', asc))) slots = list(set(re.findall('(?<=\\${c)[0-9](?=})', asc)))
while len(pis) < slots: while len(pis) < len(slots):
pis += pis pis += pis
perm = {p[:slots] for p in permutations(pis)} perm = {p[:len(slots)] for p in permutations(pis)}
random_count = ascii_per_row * ascii_rows - len(arrangements) random_count = ascii_per_row * ascii_rows - len(arrangements)
if random_count > len(perm): if random_count > len(perm):
choices = perm choices = perm
else: else:
choices = random.sample(perm, random_count) choices = random.sample(perm, random_count)
choices = [{i + 1: n for i, n in enumerate(c)} for c in choices] choices = [{slots[i]: n for i, n in enumerate(c)} for c in choices]
arrangements += [(f'random{i}', ColorAlignment('custom', r)) for i, r in enumerate(choices)] arrangements += [(f'random{i}', ColorAlignment('custom', r)) for i, r in enumerate(choices)]
asciis = [[*ca.recolor_ascii(asc, _prs).split('\n'), k.center(asc_width)] for k, ca in arrangements] asciis = [[*ca.recolor_ascii(asc, _prs).split('\n'), k.center(asc_width)] for k, ca in arrangements]
@@ -282,7 +308,7 @@ def create_config() -> Config:
[printc(' '.join(line)) for line in zip(*current)] [printc(' '.join(line)) for line in zip(*current)]
print() print()
printc(f'&a5. Let\'s choose a color arrangement!') print_title_prompt("Let's choose a color arrangement!")
printc(f'You can choose standard horizontal or vertical alignment, or use one of the random color schemes.') printc(f'You can choose standard horizontal or vertical alignment, or use one of the random color schemes.')
print('You can type "roll" to randomize again.') print('You can type "roll" to randomize again.')
print() print()
@@ -302,7 +328,7 @@ def create_config() -> Config:
break break
title += f'\n&e5. Color Alignment: &r{color_alignment}' update_title('Color alignment', color_alignment)
# Create config # Create config
clear_screen(title) clear_screen(title)
@@ -361,12 +387,8 @@ def run():
print(get_distro_ascii()) print(get_distro_ascii())
return return
# Load config # Load config or create config
config = check_config() config = create_config() if args.config else check_config()
# Reset config
if args.config:
config = create_config()
# Param overwrite config # Param overwrite config
if args.preset: if args.preset:
@@ -381,13 +403,13 @@ def run():
# Get preset # Get preset
preset = PRESETS.get(config.preset) preset = PRESETS.get(config.preset)
# Lighten # Lighten (args > config)
if args.scale: if args.scale:
preset = preset.lighten(args.scale) preset = preset.lighten(args.scale)
if args.light: elif args.light:
preset = preset.set_light_raw(args.light) preset = preset.set_light_raw(args.light)
if config.lightness: else:
preset = preset.set_light_dl(config.lightness) preset = preset.set_light_dl(config.lightness or GLOBAL_CFG.default_lightness())
# Run # Run
try: try:
+11 -2
View File
@@ -206,7 +206,7 @@ def run_command(args: str, pipe: bool = False) -> str | None:
Run neofetch command Run neofetch command
""" """
if platform.system() != 'Windows': if platform.system() != 'Windows':
full_cmd = shlex.split(f'{get_command_path()} {args}') full_cmd = shlex.split(f'/usr/bin/env bash {get_command_path()} {args}')
else: else:
cmd = get_command_path().replace("\\", "/").replace("C:/", "/c/") cmd = get_command_path().replace("\\", "/").replace("C:/", "/c/")
@@ -288,8 +288,9 @@ def get_fore_back(distro: str | None = None) -> tuple[int, int] | None:
distro = GLOBAL_CFG.override_distro distro = GLOBAL_CFG.override_distro
if not distro: if not distro:
distro = get_distro_name().lower() distro = get_distro_name().lower()
distro = distro.lower().replace(' ', '-')
for k, v in fore_back.items(): for k, v in fore_back.items():
if distro.startswith(k.lower()): if distro == k.lower():
return v return v
return None return None
@@ -298,5 +299,13 @@ def get_fore_back(distro: str | None = None) -> tuple[int, int] | None:
fore_back = { fore_back = {
'fedora': (2, 1), 'fedora': (2, 1),
'ubuntu': (2, 1), 'ubuntu': (2, 1),
'kubuntu': (2, 1),
'lubuntu': (2, 1),
'xubuntu': (2, 1),
'ubuntu-cinnamon': (2, 1),
'ubuntu-kylin': (2, 1),
'ubuntu-mate': (2, 1),
'ubuntu-studio': (2, 1),
'ubuntu-sway': (2, 1),
} }
+62 -1
View File
@@ -112,7 +112,7 @@ class ColorProfile:
""" """
return ColorProfile([c.set_light(light, at_least, at_most) for c in self.colors]) return ColorProfile([c.set_light(light, at_least, at_most) for c in self.colors])
def set_light_dl(self, light: float, term: LightDark = GLOBAL_CFG.light_dark()): def set_light_dl(self, light: float, term: LightDark | None = None):
""" """
Set HSL lightness value with respect to dark/light terminals Set HSL lightness value with respect to dark/light terminals
@@ -120,6 +120,7 @@ class ColorProfile:
:param term: Terminal color (can be "dark" or "light") :param term: Terminal color (can be "dark" or "light")
:return: New color profile (original isn't modified) :return: New color profile (original isn't modified)
""" """
term = term or GLOBAL_CFG.light_dark()
assert term.lower() in ['light', 'dark'] assert term.lower() in ['light', 'dark']
at_least, at_most = (True, None) if term.lower() == 'dark' else (None, True) at_least, at_most = (True, None) if term.lower() == 'dark' else (None, True)
return self.set_light_raw(light, at_least, at_most) return self.set_light_raw(light, at_least, at_most)
@@ -532,4 +533,64 @@ PRESETS: dict[str, ColorProfile] = {
"#F39FCE", "#F39FCE",
"#EA7BB3", "#EA7BB3",
]), ]),
'unlabeled1': ColorProfile([
'#EAF8E4',
'#FDFDFB',
'#E1EFF7',
'#F4E2C4'
]),
'unlabeled2': ColorProfile([
'#250548',
'#FFFFFF',
'#F7DCDA',
'#EC9BEE',
'#9541FA',
'#7D2557'
]),
'gendernonconforming1': ColorProfile(
ColorProfile([
'#50284d',
'#96467b',
'#5c96f7',
'#ffe6f7',
'#5c96f7',
'#96467b',
'#50284d'
]).with_weights([
4,1,1,1,1,1,4
])
),
'gendernonconforming2': ColorProfile([
'#50284d',
'#96467b',
'#5c96f7',
'#ffe6f7',
'#5c96f7',
'#96467b',
'#50284d'
]),
'femboy': ColorProfile([
"#d260a5",
"#e4afcd",
"#fefefe",
"#57cef8",
"#fefefe",
"#e4afcd",
"#d260a5"
]),
'tomboy': ColorProfile([
"#2f3fb9",
"#613a03",
"#fefefe",
"#f1a9b7",
"#fefefe",
"#613a03",
"#2f3fb9"
]),
} }
+162
View File
@@ -0,0 +1,162 @@
from __future__ import annotations
import os
import platform
import signal
import sys
import termios
import tty
from select import select
from .color_util import RGB, AnsiMode
class OSCException(Exception):
pass
def unix_detect_ansi_mode() -> AnsiMode | None:
"""
Translated from Termenv's ColorProfile():
https://github.com/muesli/termenv/blob/42ca574de3e99a262e1724d2fb8daa1aea68a5b9/termenv_unix.go#L23
:return: Ansi mode
"""
if not sys.stdout.isatty():
return 'ansi'
term = os.environ.get('TERM')
color_term = os.environ.get('COLORTERM')
if color_term == 'truecolor' or color_term == '24bit':
if term.startswith('screen') and os.environ.get('TERM_PROGRAM') != 'tmux':
return '8bit'
return 'rgb'
elif color_term == 'true' or color_term == 'yes':
return '8bit'
if term == 'xterm-kitty':
return 'rgb'
elif term == 'linux':
return 'ansi'
if '256color' in term:
return 'rgb'
if 'color' in term:
return '8bit'
if 'ansi' in term:
return 'ansi'
return None
def windows_detect_ansi_mode() -> AnsiMode | None:
"""
Translated from Termenv's ColorProfile():
https://github.com/muesli/termenv/blob/42ca574de3e99a262e1724d2fb8daa1aea68a5b9/termenv_windows.go#L13
:return: Ansi mode
"""
if not sys.stdout.isatty():
return 'ansi'
if os.environ.get("ConEmuANSI") == "ON":
return 'rgb'
release, _, build = map(int, platform.version().split('.'))
if build < 10586 or release < 10:
# No ANSI support before Windows 10 build 10586.
if os.environ.get('ANSICON'):
conv = os.environ.get('ANSICON_VER')
if int(conv) < 181:
return 'ansi'
return '8bit'
return 'ansi'
if build < 14931:
# No true color support before build 14931.
return '8bit'
return 'rgb'
def detect_ansi_mode() -> AnsiMode | None:
system = platform.system().lower()
if system.startswith("linux") or system.startswith("darwin"):
return unix_detect_ansi_mode()
if system.startswith("windows"):
return windows_detect_ansi_mode()
return None
def unix_read_osc(seq: int) -> str:
# screen/tmux can't support OSC, because they can be connected to multiple
# terminals concurrently.
term = os.environ.get('TERM')
if term.startswith("screen") or term.startswith("tmux"):
raise OSCException("Screen/tmux not supported")
t = sys.stdout
if not t.isatty():
raise OSCException("Not a tty")
fd = sys.stdin.fileno()
# Set raw mode
settings = termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
# first, send OSC query, which is ignored by terminal which do not support it
t.write(f"\x1b]{seq};?\x1b\\")
t.flush()
# stdin response timeout should be higher for ssh sessions
timeout = 0.05 if (os.environ.get('SSH_TTY') or os.environ.get('SSH_SESSION')) is None else 0.5
# Wait for input to appear
if not select([sys.stdin], [], [], timeout)[0]:
raise OSCException("No response received")
# Read until termination, or if it doesn't terminate, read until 1 second passes
def handler(signum, frame):
raise IOError()
signal.signal(signal.SIGALRM, handler)
signal.setitimer(signal.ITIMER_REAL, timeout, 1)
code = ""
try:
for _ in range(28):
code += sys.stdin.read(1)
# Terminate with sequence terminator [\ or bell ^G
if code.endswith('\x1b\\') or code.endswith('\a'):
break
signal.alarm(0)
except IOError:
pass
# Reset terminal back to normal mode (previously set to raw mode)
termios.tcsetattr(fd, termios.TCSADRAIN, settings)
# Validate output
if not code:
raise OSCException("No response received")
start = f"\x1b]{seq};"
if not code.startswith(start):
raise OSCException("Received response is not an OSC response")
# Strip starting code and termination code
code = code.lstrip(start).rstrip("\x1b\\").rstrip('\a')
return code
def get_background_color() -> RGB | None:
try:
osc = unix_read_osc(11).lstrip("rgb:")
return RGB.from_hex(''.join([v[:2] for v in osc.split('/')]))
except Exception:
return None
+366 -113
View File
@@ -28,7 +28,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE. # SOFTWARE.
version=7.3.1 version=7.3.3
# Fallback to a value of '5' for shells which support bash # Fallback to a value of '5' for shells which support bash
# but do not set the 'BASH_' shell variables (osh). # but do not set the 'BASH_' shell variables (osh).
@@ -174,7 +174,7 @@ uptime_shorthand="on"
# Example: # Example:
# on: '1801MiB / 7881MiB (22%)' # on: '1801MiB / 7881MiB (22%)'
# off: '1801MiB / 7881MiB' # off: '1801MiB / 7881MiB'
memory_percent="off" memory_percent="on"
# Change memory output unit. # Change memory output unit.
# #
@@ -186,7 +186,7 @@ memory_percent="off"
# kib '1020928KiB / 7117824KiB' # kib '1020928KiB / 7117824KiB'
# mib '1042MiB / 6951MiB' # mib '1042MiB / 6951MiB'
# gib: ' 0.98GiB / 6.79GiB' # gib: ' 0.98GiB / 6.79GiB'
memory_unit="mib" memory_unit="gib"
# Packages # Packages
@@ -253,7 +253,7 @@ speed_type="bios_limit"
# Example: # Example:
# on: 'i7-6500U (4) @ 3.1GHz' # on: 'i7-6500U (4) @ 3.1GHz'
# off: 'i7-6500U (4) @ 3.100GHz' # off: 'i7-6500U (4) @ 3.100GHz'
speed_shorthand="off" speed_shorthand="on"
# Enable/Disable CPU brand in output. # Enable/Disable CPU brand in output.
# #
@@ -356,7 +356,7 @@ gpu_type="all"
# Example: # Example:
# on: '1920x1080 @ 60Hz' # on: '1920x1080 @ 60Hz'
# off: '1920x1080' # off: '1920x1080'
refresh_rate="off" refresh_rate="on"
# Gtk Theme / Icons / Font # Gtk Theme / Icons / Font
@@ -799,39 +799,39 @@ image_source="auto"
# Flag: --ascii_distro # Flag: --ascii_distro
# #
# NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy, Android, Antergos, antiX, AOSC OS, # NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy, Android, Antergos, antiX, AOSC OS,
# AOSC OS/Retro, Aperio GNU/Linux, Apricity, Arch, ArchBox, Archcraft, ARCHlabs, ArchMerge, # AOSC OS/Retro, Aperio GNU/Linux, Apricity, Arch, ArchBox, Archcraft, ARCHlabs, ArchStrike,
# ArchStrike, ArcoLinux, Artix, Arya, Asahi, AsteroidOS, astOS, Bedrock, BigLinux, Bitrig, # ArcoLinux, Artix, Arya, Asahi, AsteroidOS, astOS, Bedrock, BigLinux, Bitrig, BlackArch,
# BlackArch, blackPanther, BLAG, BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, Cachy OS, # blackPanther, BLAG, BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, Cachy OS, Calculate,
# Calculate, CalinixOS, Carbs, CBL-Mariner, CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, # CalinixOS, Carbs, CBL-Mariner, CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, ChonkySealOS,
# ChonkySealOS, Chrom, Cleanjaro, Clear Linux OS, ClearOS, Clover, Condres, Container Linux by # Chrom, Cleanjaro, Clear Linux OS, ClearOS, Clover, Cobalt, Condres, Container Linux by CoreOS,
# CoreOS, CRUX, Crystal Linux, Cucumber, CutefishOS, CyberOS, dahlia, DarkOs, Darwin, Debian, # CRUX, Crystal Linux, Cucumber, CutefishOS, CyberOS, dahlia, DarkOs, Darwin, Debian, Deepin,
# Deepin, DesaOS, Devuan, DracOS, DragonFly, Drauger, Elementary, Elive, EncryptOS, EndeavourOS, # DesaOS, Devuan, DietPi, DracOS, DragonFly, Drauger, Droidian, Elementary, Elive, EncryptOS,
# Endless, EuroLinux, Exherbo, Exodia Predator OS, Fedora, Feren, Finnix, FreeBSD, FreeMiNT, # EndeavourOS, Endless, EuroLinux, Exherbo, Exodia Predator OS, Fedora, Feren, Finnix, FreeBSD,
# Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus, gNewSense, GNOME, GNU, # FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus, gNewSense, GNOME, GNU,
# GoboLinux, GrapheneOS, Grombyang, Guix, Haiku, HarDClanZ, Hash, Huayra, HydroOS, Hyperbola, # GoboLinux, GrapheneOS, Grombyang, Guix, Haiku, HamoniKR, HarDClanZ, Hash, Huayra, HydroOS,
# iglunix, instantOS, IRIX, Itc, januslinux, Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion, Korora, # Hyperbola, iglunix, instantOS, IRIX, Itc, januslinux, Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion,
# KrassOS, KSLinux, Kubuntu, LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux, Linux Lite, # Korora, KrassOS, KSLinux, Kubuntu, LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux, Linux
# Linux Mint, Linux Mint Old, Live Raizo, LMDE, Lubuntu, Lunar, mac, Mageia, MagpieOS, Mandriva, # Lite, Linux Mint, Linux Mint Old, Live Raizo, LMDE, Lubuntu, Lunar, mac, Mageia, MagpieOS,
# Manjaro, MassOS, MatuusOS, Maui, Mer, Minix, MIRACLE LINUX, MX, Namib, Neptune, NetBSD, Netrunner, # Mandriva, Manjaro, MassOS, MatuusOS, Maui, Mer, Minix, MIRACLE LINUX, MX, Namib, Neptune, NetBSD,
# Nitrux, NixOS, NomadBSD, Nurunner, NuTyX, Obarun, OBRevenge, Open Source Media Center, OpenBSD, # Netrunner, Nitrux, NixOS, NomadBSD, Nurunner, NuTyX, Obarun, OBRevenge, OmniOS, Open Source Media
# openEuler, OpenIndiana, openmamba, OpenMandriva, OpenStage, openSUSE, openSUSE Leap, openSUSE # Center, OpenBSD, openEuler, OpenIndiana, openmamba, OpenMandriva, OpenStage, openSUSE, openSUSE
# Tumbleweed, OpenWrt, OPNsense, Oracle, orchid, OS Elbrus, PacBSD, Parabola, parch, Pardus, Parrot, # Leap, openSUSE Tumbleweed, OpenWrt, OPNsense, Oracle, orchid, OS Elbrus, PacBSD, Parabola, parch,
# Parsix, PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, Pisi, PNM Linux, Pop!_OS, Porteus, # Pardus, Parrot, Parsix, PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, Pisi, PNM Linux,
# PostMarketOS, Profelis SambaBOX, Proxmox, PuffOS, Puppy, PureOS, Q4OS, Qubes, Qubyt, Quibian, # Pop!_OS, Porteus, PostMarketOS, Profelis SambaBOX, Proxmox, PuffOS, Puppy, PureOS, Q4OS, Qubes,
# Radix, Raspbian, ravynOS, Reborn OS, Red Star, Redcore, Redhat, Refracted Devuan, Regata, # Qubyt, Quibian, Radix, Raspbian, ravynOS, Reborn OS, Red Star, Redcore, Redhat, Refracted Devuan,
# Regolith, rocky, Rosa, Sabayon, sabotage, Sailfish, SalentOS, Scientific, semc, Septor, Serene, # Regata, Regolith, rocky, Rosa, Sabayon, sabotage, Sailfish, SalentOS, Scientific, semc, Septor,
# SharkLinux, ShastraOS, Siduction, SkiffOS, Slackware, SliTaz, SmartOS, Soda, Solus, Source Mage, # Serene, SharkLinux, ShastraOS, Siduction, SkiffOS, Slackware, SliTaz, SmartOS, Soda, Solus, Source
# Sparky, Star, SteamOS, Sulin, SunOS, SwagArch, t2, Tails, TeArch, TorizonCore, Trisquel, Twister, # Mage, Sparky, Star, SteamOS, Stock Linux, Sulin, SunOS, SwagArch, t2, Tails, TeArch, TorizonCore,
# Ubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Sway, # Trisquel, Twister, Ubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu
# Ubuntu Touch, Ubuntu-GNOME, ubuntu_old02, Ultramarine Linux, Univalent, Univention, Uos, uwuntu, # Studio, Ubuntu Sway, Ubuntu Touch, Ubuntu-GNOME, ubuntu_old02, Ultramarine Linux, Univalent,
# Venom, VNux, Void, VzLinux, wii-linux-ngx, Windows, Windows 10, Windows 11, XFerience, Xubuntu, # Univention, Uos, uwuntu, Vanilla, Venom, VNux, Void, VzLinux, wii-linux-ngx, Windows, Windows 10,
# yiffOS, Zorin have ascii logos. # Windows 11, XFerience, Xubuntu, yiffOS, Zorin have ascii logos.
# NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu have 'old' logo variants, use # NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu have 'old' logo variants, use
# {distro}_old to use them. # {distro}_old to use them.
# NOTE: alpine, android, aoscosretro, arch, arcolinux, artix, CalinixOS, centos, cleanjaro, crux, # NOTE: alpine, android, aoscosretro, arch, arcolinux, artix, CalinixOS, centos, cleanjaro, crux,
# debian, dragonfly, elementary, fedora, freebsd, gentoo, guix, haiku, hyperbola, linuxlite, # debian, dragonfly, elementary, fedora, freebsd, garuda, gentoo, guix, haiku, hyperbola, linuxlite,
# linuxmint, mac, mageia, manjaro, mx, netbsd, nixos, openbsd, opensuse, orchid, parabola, popos, # linuxmint, mac, mageia, manjaro, mx, netbsd, nixos, openbsd, opensuse, orchid, parabola, popos,
# postmarketos, pureos, Raspbian, rocky, slackware, sunos, ubuntu, void have 'small' logo variants, # postmarketos, pureos, Raspbian, rocky, slackware, sunos, ubuntu, void have 'small' logo variants,
# use {distro}_small to use them. # use {distro}_small to use them.
@@ -940,11 +940,11 @@ background_color=
# Misc Options # Misc Options
# Stdout mode # Stdout mode
# Turn off all colors and disables image backend (ASCII/Image). # If enabled, turn off all colors and disables image backend (ASCII/Image).
# Useful for piping into another command. # Useful for piping into another command.
# Default: 'off' # Default: 'auto'
# Values: 'on', 'off' # Values: 'auto', 'on', 'off'
stdout="off" stdout="auto"
EOF EOF
# DETECT INFORMATION # DETECT INFORMATION
@@ -954,7 +954,10 @@ get_os() {
# just the output of "uname -s". # just the output of "uname -s".
case $kernel_name in case $kernel_name in
Darwin) os=$darwin_name ;; Darwin) os=$darwin_name ;;
SunOS) os=Solaris ;; SunOS) case $(uname -o 2>/dev/null) in
illumos) os=illumos ;;
*) os=Solaris ;;
esac ;;
Haiku) os=Haiku ;; Haiku) os=Haiku ;;
MINIX) os=MINIX ;; MINIX) os=MINIX ;;
AIX) os=AIX ;; AIX) os=AIX ;;
@@ -1272,7 +1275,7 @@ get_distro() {
*) codename=macOS ;; *) codename=macOS ;;
esac esac
distro="$codename $osx_version $osx_build" distro="$codename $osx_version ($osx_build)"
case $distro_shorthand in case $distro_shorthand in
on) distro=${distro/ ${osx_build}} ;; on) distro=${distro/ ${osx_build}} ;;
@@ -1301,7 +1304,7 @@ get_distro() {
distro=${distro/Microsoft } distro=${distro/Microsoft }
;; ;;
Solaris) Solaris|illumos)
case $distro_shorthand in case $distro_shorthand in
on|tiny) distro=$(awk 'NR==1 {print $1,$3}' /etc/release) ;; on|tiny) distro=$(awk 'NR==1 {print $1,$3}' /etc/release) ;;
*) distro=$(awk 'NR==1 {print $1,$2,$3}' /etc/release) ;; *) distro=$(awk 'NR==1 {print $1,$2,$3}' /etc/release) ;;
@@ -1332,7 +1335,7 @@ get_distro() {
# Get OS architecture. # Get OS architecture.
case $os in case $os in
Solaris|AIX|Haiku|IRIX|FreeMiNT|BSD) Solaris|illumos|AIX|Haiku|IRIX|FreeMiNT|BSD)
machine_arch=$(uname -p) machine_arch=$(uname -p)
;; ;;
@@ -1577,7 +1580,7 @@ get_model() {
model=${model/Model} model=${model/Model}
;; ;;
Solaris) Solaris|illumos)
model=$(prtconf -b | awk -F':' '/banner-name/ {printf $2}') model=$(prtconf -b | awk -F':' '/banner-name/ {printf $2}')
;; ;;
@@ -1616,7 +1619,18 @@ get_title() {
user=${USER:-$(id -un || printf %s "${HOME/*\/}")} user=${USER:-$(id -un || printf %s "${HOME/*\/}")}
case $title_fqdn in case $title_fqdn in
on) hostname=$(hostname -f) ;; on)
case $os in
illumos|Solaris)
hostname=$(hostname)
domainname=$(domainname)
[[ -n "$domainname" ]] && hostname+=".$domainname"
;;
*)
hostname=$(hostname -f)
;;
esac
;;
*) *)
hostname=${HOSTNAME:-$(hostname)} hostname=${HOSTNAME:-$(hostname)}
hostname=${hostname%.*} hostname=${hostname%.*}
@@ -1681,9 +1695,11 @@ get_uptime() {
s=$((now - boot)) s=$((now - boot))
;; ;;
Solaris) Solaris|illumos)
s=$(kstat -p unix:0:system_misc:snaptime | awk '{print $2}') boot=$(kstat -p unix:0:system_misc:boot_time | awk '{print $2}')
s=${s/.*} now=$(date +%s)
s=$((now - boot))
;; ;;
AIX|IRIX) AIX|IRIX)
@@ -1783,7 +1799,7 @@ get_packages() {
} }
case $os in case $os in
Linux|BSD|"iPhone OS"|Solaris) Linux|BSD|"iPhone OS"|Solaris|illumos)
# Package Manager Programs. # Package Manager Programs.
has kiss && tot kiss l has kiss && tot kiss l
has cpt-list && tot cpt-list has cpt-list && tot cpt-list
@@ -1807,6 +1823,7 @@ get_packages() {
has pacstall && tot pacstall -L has pacstall && tot pacstall -L
has bulge && tot bulge list has bulge && tot bulge list
has pm && tot pm list packages has pm && tot pm list packages
has squirrel && tot cat /var/squirrel/repos/local/INDEX
# Using the dnf package cache is much faster than rpm. # Using the dnf package cache is much faster than rpm.
if has dnf && type -p sqlite3 >/dev/null && [[ -f /var/cache/dnf/packages.db ]]; then if has dnf && type -p sqlite3 >/dev/null && [[ -f /var/cache/dnf/packages.db ]]; then
@@ -1875,6 +1892,10 @@ get_packages() {
((packages == 0)) && ((packages == 0)) &&
has pkg && tot pkg list has pkg && tot pkg list
;; ;;
illumos-*)
has pkg && tot pkg list
;;
esac esac
# List these last as they accompany regular package managers. # List these last as they accompany regular package managers.
@@ -2495,31 +2516,65 @@ get_cpu() {
[[ -z "$cpu" ]] && cpu="$(awk -F':' '/family/ {printf $2; exit}' "$cpu_file")" [[ -z "$cpu" ]] && cpu="$(awk -F':' '/family/ {printf $2; exit}' "$cpu_file")"
;; ;;
"loongarch64")
cpu="$(awk -F':' '/Model/ {print $2; exit}' "$cpu_file")"
;;
"arm"* | "aarch64") "arm"* | "aarch64")
if [[ $(trim "$ascii_distro") == Android* ]]; then if [[ $(trim "$distro") == Android* ]]; then
# Android roms have modified cpuinfo that shows CPU model as a string # Android roms have modified cpuinfo that shows CPU model as a string
cpu="$(awk -F '\\s*: | @' \ cpu="$(awk -F':' '/Hardware/ {print $2; exit}' "$cpu_file")"
'/model name|Hardware|Processor|^cpu model|chip type|^cpu type/ {
cpu=$2; if ($1 == "Hardware") exit } END { print cpu }' "$cpu_file")"
else else
# ARM linux displays binary model code in cpuinfo, which needs to be decoded with lscpu # ARM linux displays binary model code in cpuinfo, which needs to be decoded with lscpu
cpu="$(lscpu | awk -F': ' '/Vendor ID/ {print $2; exit}') $(lscpu | awk -F': ' '/Model name/ {print $2; exit}')" if ! [[ -x "$(command -v python)" ]]; then
fi cpu="$(lscpu | awk -F': ' '/Vendor ID/ {print $2; exit}' ) $(lscpu | awk -F': ' '/Model name/ {print $2; exit}')"
;; else
# Sometimes there are multiple CPU models (e.g. RK3399 has 4 A53 and 2 A72 cores)
# However, I don't know how to implement this in awk, so I'll use python for now
read -r -d '' py_script << END
from subprocess import check_output
"riscv"*)
# This will fail to detect cpu on qemu def find(lines, label):
cpu="$(awk -F': ' '/uarch/ {print $2; exit}' "$cpu_file")" for ln in lines:
if ln.strip().startswith(label):
return ln.split(label)[-1].strip()
return None
if __name__ == '__main__':
lscpu = check_output('lscpu').decode()
vendor_id = find(lscpu.split('\n'), 'Vendor ID:') or None
cpus = []
for model_desc in lscpu.split('Model name:'):
lines = model_desc.split('\n')
model = lines[0].strip()
cores = int(find(lines, 'Core(s) per socket:') or "-1")
cores *= int(find(lines, 'Socket(s):') or "1")
if cores == -1:
continue
mhz = float(find(lines, 'CPU max MHz:') or find(lines, 'CPU min MHz:') or "0")
speed = f'@ {mhz / 1000:.2f} GHz' if mhz > 0 else ''
cpus.append(f'{vendor_id} {model} ({cores}) {speed}')
print('\n'.join(cpus))
END
tmp_cpus=$(python -c "$py_script")
while IFS= read -r line; do
prin "${subtitle:+${subtitle}}" "$line"
done <<< "$tmp_cpus"
return
fi
fi
;; ;;
esac esac
# If cpu is not detected on a platform-specific bases, fallback to cpuinfo method # If cpu is not detected on a platform-specific bases, fallback to cpuinfo method
[[ -z "$cpu" ]] && cpu="$(awk -F '\\s*: | @' \ [[ -z "$cpu" ]] && cpu="$(awk -F '\\s*: | @' \
'/model name|Hardware|Processor|^cpu model|chip type|^cpu type/ { '/model name|Model|uarch|Hardware|Processor|^cpu model|chip type|^cpu type/ {
cpu=$2; if ($1 == "Hardware") exit } END { print cpu }' "$cpu_file")" cpu=$2; if ($1 == "Hardware") exit } END { print cpu }' "$cpu_file")"
speed_dir="/sys/devices/system/cpu/cpu0/cpufreq" speed_dir="/sys/devices/system/cpu/cpu0/cpufreq"
@@ -2694,7 +2749,7 @@ get_cpu() {
esac esac
;; ;;
"Solaris") "Solaris" | "illumos")
# Get CPU name. # Get CPU name.
cpu="$(psrinfo -pv)" cpu="$(psrinfo -pv)"
cpu="${cpu//*$'\n'}" cpu="${cpu//*$'\n'}"
@@ -3126,10 +3181,10 @@ get_memory() {
esac esac
;; ;;
"Solaris" | "AIX") "Solaris" | "illumos" | "AIX")
hw_pagesize="$(pagesize)" hw_pagesize="$(pagesize)"
case $os in case $os in
"Solaris") "Solaris" | "illumos")
pages_total="$(kstat -p unix:0:system_pages:pagestotal | awk '{print $2}')" pages_total="$(kstat -p unix:0:system_pages:pagestotal | awk '{print $2}')"
pages_free="$(kstat -p unix:0:system_pages:pagesfree | awk '{print $2}')" pages_free="$(kstat -p unix:0:system_pages:pagesfree | awk '{print $2}')"
;; ;;
@@ -3175,8 +3230,8 @@ get_memory() {
case $memory_unit in case $memory_unit in
gib) gib)
mem_used=$(awk '{printf "%.2f", $1 / $2}' <<< "$mem_used 1024") mem_used=$(awk '{printf "%.1f", $1 / $2}' <<< "$mem_used 1024")
mem_total=$(awk '{printf "%.2f", $1 / $2}' <<< "$mem_total 1024") mem_total=$(awk '{printf "%.1f", $1 / $2}' <<< "$mem_total 1024")
mem_label=GiB mem_label=GiB
;; ;;
@@ -3187,7 +3242,7 @@ get_memory() {
;; ;;
esac esac
memory="${mem_used}${mem_label:-MiB} / ${mem_total}${mem_label:-MiB} ${mem_perc:+(${mem_perc}%)}" memory="${mem_used} ${mem_label:-MiB} / ${mem_total} ${mem_label:-MiB} ${mem_perc:+(${mem_perc}%)}"
# Bars. # Bars.
case $memory_display in case $memory_display in
@@ -3233,9 +3288,7 @@ get_network() {
fi fi
fi fi
done < <(sort -rn <<<"$networks" | uniq -c) done < <(sort -rn <<<"$networks" | uniq -c)
if [ -z "$network" ]; then if [ -n "$network" ]; then
network="None"
else
network="${network%; }" network="${network%; }"
fi fi
} }
@@ -3283,6 +3336,7 @@ get_song() {
"strawberry" "strawberry"
"tauonmb" "tauonmb"
"tomahawk" "tomahawk"
"tidal-hifi"
"vlc" "vlc"
"xmms2d" "xmms2d"
"xnoise" "xnoise"
@@ -3335,6 +3389,7 @@ get_song() {
"gogglesmm"*) get_song_dbus "gogglesmm" ;; "gogglesmm"*) get_song_dbus "gogglesmm" ;;
"xnoise"*) get_song_dbus "xnoise" ;; "xnoise"*) get_song_dbus "xnoise" ;;
"tauonmb"*) get_song_dbus "tauon" ;; "tauonmb"*) get_song_dbus "tauon" ;;
"tidal-hifi"*) get_song_dbus "tidal-hifi" ;;
"olivia"*) get_song_dbus "olivia" ;; "olivia"*) get_song_dbus "olivia" ;;
"exaile"*) get_song_dbus "exaile" ;; "exaile"*) get_song_dbus "exaile" ;;
"netease-cloud-music"*) get_song_dbus "netease-cloud-music" ;; "netease-cloud-music"*) get_song_dbus "netease-cloud-music" ;;
@@ -4469,7 +4524,7 @@ get_battery() {
get_local_ip() { get_local_ip() {
case $os in case $os in
"Linux" | "BSD" | "Solaris" | "AIX" | "IRIX") "Linux" | "BSD" | "Solaris" | "illumos" | "AIX" | "IRIX")
if [[ "${local_ip_interface[0]}" == "auto" ]]; then if [[ "${local_ip_interface[0]}" == "auto" ]]; then
local_ip="$(ip route get 1 | awk -F'src' '{print $2; exit}')" local_ip="$(ip route get 1 | awk -F'src' '{print $2; exit}')"
local_ip="${local_ip/uid*}" local_ip="${local_ip/uid*}"
@@ -4601,8 +4656,13 @@ get_cols() {
printf -v block_spaces "%${block_height}s" printf -v block_spaces "%${block_height}s"
# Convert the spaces into rows of blocks. # Convert the spaces into rows of blocks.
[[ "$blocks" ]] && cols+="${block_spaces// /${blocks}nl}" if [[ $BASH_VERSION == 3* ]]; then
[[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}nl}" [[ "$blocks" ]] && cols+="${block_spaces// /${blocks}nl}"
[[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}nl}"
else
[[ "$blocks" ]] && cols+="${block_spaces// /${blocks}\[mnl}"
[[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}\[mnl}"
fi
# Determine the horizontal offset of the blocks. # Determine the horizontal offset of the blocks.
case $col_offset in case $col_offset in
@@ -5821,42 +5881,43 @@ ASCII:
NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy, NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy,
Android, Antergos, antiX, AOSC OS, AOSC OS/Retro, Aperio GNU/Linux, Android, Antergos, antiX, AOSC OS, AOSC OS/Retro, Aperio GNU/Linux,
Apricity, Arch, ArchBox, Archcraft, ARCHlabs, ArchMerge, ArchStrike, Apricity, Arch, ArchBox, Archcraft, ARCHlabs, ArchStrike, ArcoLinux,
ArcoLinux, Artix, Arya, Asahi, AsteroidOS, astOS, Bedrock, BigLinux, Artix, Arya, Asahi, AsteroidOS, astOS, Bedrock, BigLinux, Bitrig,
Bitrig, BlackArch, blackPanther, BLAG, BlankOn, BlueLight, Bodhi, BlackArch, blackPanther, BLAG, BlankOn, BlueLight, Bodhi, bonsai,
bonsai, BSD, BunsenLabs, Cachy OS, Calculate, CalinixOS, Carbs, CBL- BSD, BunsenLabs, Cachy OS, Calculate, CalinixOS, Carbs, CBL-Mariner,
Mariner, CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, ChonkySealOS,
ChonkySealOS, Chrom, Cleanjaro, Clear Linux OS, ClearOS, Clover, Chrom, Cleanjaro, Clear Linux OS, ClearOS, Clover, Cobalt, Condres,
Condres, Container Linux by CoreOS, CRUX, Crystal Linux, Cucumber, Container Linux by CoreOS, CRUX, Crystal Linux, Cucumber,
CutefishOS, CyberOS, dahlia, DarkOs, Darwin, Debian, Deepin, DesaOS, CutefishOS, CyberOS, dahlia, DarkOs, Darwin, Debian, Deepin, DesaOS,
Devuan, DracOS, DragonFly, Drauger, Elementary, Elive, EncryptOS, Devuan, DietPi, DracOS, DragonFly, Drauger, Droidian, Elementary,
EndeavourOS, Endless, EuroLinux, Exherbo, Exodia Predator OS, Elive, EncryptOS, EndeavourOS, Endless, EuroLinux, Exherbo, Exodia
Fedora, Feren, Finnix, FreeBSD, FreeMiNT, Frugalware, Funtoo, Predator OS, Fedora, Feren, Finnix, FreeBSD, FreeMiNT, Frugalware,
GalliumOS, Garuda, Gentoo, GhostBSD, glaucus, gNewSense, GNOME, GNU, Funtoo, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus, gNewSense,
GoboLinux, GrapheneOS, Grombyang, Guix, Haiku, HarDClanZ, Hash, GNOME, GNU, GoboLinux, GrapheneOS, Grombyang, Guix, Haiku, HamoniKR,
Huayra, HydroOS, Hyperbola, iglunix, instantOS, IRIX, Itc, HarDClanZ, Hash, Huayra, HydroOS, Hyperbola, iglunix, instantOS,
januslinux, Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion, Korora, IRIX, Itc, januslinux, Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion,
KrassOS, KSLinux, Kubuntu, LangitKetujuh, LaxerOS, LEDE, LibreELEC, Korora, KrassOS, KSLinux, Kubuntu, LangitKetujuh, LaxerOS, LEDE,
Linspire, Linux, Linux Lite, Linux Mint, Linux Mint Old, Live Raizo, LibreELEC, Linspire, Linux, Linux Lite, Linux Mint, Linux Mint Old,
LMDE, Lubuntu, Lunar, mac, Mageia, MagpieOS, Mandriva, Manjaro, Live Raizo, LMDE, Lubuntu, Lunar, mac, Mageia, MagpieOS, Mandriva,
MassOS, MatuusOS, Maui, Mer, Minix, MIRACLE LINUX, MX, Namib, Manjaro, MassOS, MatuusOS, Maui, Mer, Minix, MIRACLE LINUX, MX,
Neptune, NetBSD, Netrunner, Nitrux, NixOS, NomadBSD, Nurunner, Namib, Neptune, NetBSD, Netrunner, Nitrux, NixOS, NomadBSD,
NuTyX, Obarun, OBRevenge, Open Source Media Center, OpenBSD, Nurunner, NuTyX, Obarun, OBRevenge, OmniOS, Open Source Media
openEuler, OpenIndiana, openmamba, OpenMandriva, OpenStage, Center, OpenBSD, openEuler, OpenIndiana, openmamba, OpenMandriva,
openSUSE, openSUSE Leap, openSUSE Tumbleweed, OpenWrt, OPNsense, OpenStage, openSUSE, openSUSE Leap, openSUSE Tumbleweed, OpenWrt,
Oracle, orchid, OS Elbrus, PacBSD, Parabola, parch, Pardus, Parrot, OPNsense, Oracle, orchid, OS Elbrus, PacBSD, Parabola, parch,
Parsix, PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, Pisi, Pardus, Parrot, Parsix, PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo,
PNM Linux, Pop!_OS, Porteus, PostMarketOS, Profelis SambaBOX, Peppermint, Pisi, PNM Linux, Pop!_OS, Porteus, PostMarketOS,
Proxmox, PuffOS, Puppy, PureOS, Q4OS, Qubes, Qubyt, Quibian, Radix, Profelis SambaBOX, Proxmox, PuffOS, Puppy, PureOS, Q4OS, Qubes,
Raspbian, ravynOS, Reborn OS, Red Star, Redcore, Redhat, Refracted Qubyt, Quibian, Radix, Raspbian, ravynOS, Reborn OS, Red Star,
Devuan, Regata, Regolith, rocky, Rosa, Sabayon, sabotage, Sailfish, Redcore, Redhat, Refracted Devuan, Regata, Regolith, rocky, Rosa,
SalentOS, Scientific, semc, Septor, Serene, SharkLinux, ShastraOS, Sabayon, sabotage, Sailfish, SalentOS, Scientific, semc, Septor,
Siduction, SkiffOS, Slackware, SliTaz, SmartOS, Soda, Solus, Source Serene, SharkLinux, ShastraOS, Siduction, SkiffOS, Slackware,
Mage, Sparky, Star, SteamOS, Sulin, SunOS, SwagArch, t2, Tails, SliTaz, SmartOS, Soda, Solus, Source Mage, Sparky, Star, SteamOS,
TeArch, TorizonCore, Trisquel, Twister, Ubuntu, Ubuntu Budgie, Stock Linux, Sulin, SunOS, SwagArch, t2, Tails, TeArch, TorizonCore,
Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Trisquel, Twister, Ubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu
Sway, Ubuntu Touch, Ubuntu-GNOME, ubuntu_old02, Ultramarine Linux, Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Sway, Ubuntu Touch,
Univalent, Univention, Uos, uwuntu, Venom, VNux, Void, VzLinux, wii- Ubuntu-GNOME, ubuntu_old02, Ultramarine Linux, Univalent,
Univention, Uos, uwuntu, Vanilla, Venom, VNux, Void, VzLinux, wii-
linux-ngx, Windows, Windows 10, Windows 11, XFerience, Xubuntu, linux-ngx, Windows, Windows 10, Windows 11, XFerience, Xubuntu,
yiffOS, Zorin have ascii logos. yiffOS, Zorin have ascii logos.
@@ -5865,7 +5926,7 @@ ASCII:
NOTE: alpine, android, aoscosretro, arch, arcolinux, artix, NOTE: alpine, android, aoscosretro, arch, arcolinux, artix,
CalinixOS, centos, cleanjaro, crux, debian, dragonfly, elementary, CalinixOS, centos, cleanjaro, crux, debian, dragonfly, elementary,
fedora, freebsd, gentoo, guix, haiku, hyperbola, linuxlite, fedora, freebsd, garuda, gentoo, guix, haiku, hyperbola, linuxlite,
linuxmint, mac, mageia, manjaro, mx, netbsd, nixos, openbsd, linuxmint, mac, mageia, manjaro, mx, netbsd, nixos, openbsd,
opensuse, orchid, parabola, popos, postmarketos, pureos, Raspbian, opensuse, orchid, parabola, popos, postmarketos, pureos, Raspbian,
rocky, slackware, sunos, ubuntu, void have 'small' logo variants, rocky, slackware, sunos, ubuntu, void have 'small' logo variants,
@@ -5904,7 +5965,10 @@ OTHER:
--config none Launch the script without a config file --config none Launch the script without a config file
--no_config Don't create the user config file. --no_config Don't create the user config file.
--print_config Print the default config file to stdout. --print_config Print the default config file to stdout.
--stdout Turn off all colors and disables any ASCII/image backend. --stdout=on Turn off all colors and disables any ASCII/image backend.
--stdout=off Enable the colored output and ASCII/image backend
--stdout=auto Let the program decide basing on the output type (default behavior)
--stdout Equivalent to '--stdout=on', for backward compatibility
--help Print this text and exit --help Print this text and exit
--version Show neofetch version --version Show neofetch version
-v Display error messages. -v Display error messages.
@@ -6102,6 +6166,9 @@ get_args() {
;; ;;
"--no_config") no_config="on" ;; "--no_config") no_config="on" ;;
"--stdout") stdout="on" ;; "--stdout") stdout="on" ;;
"--stdout=on") stdout="on" ;;
"--stdout=off") stdout="off" ;;
"--stdout=auto") stdout="auto" ;;
"-v") verbose="on" ;; "-v") verbose="on" ;;
"--print_config") printf '%s\n' "$config"; exit ;; "--print_config") printf '%s\n' "$config"; exit ;;
"-vv") set -x; verbose="on" ;; "-vv") set -x; verbose="on" ;;
@@ -6956,6 +7023,34 @@ ${c1} ``--:::::::-.`
EOF EOF
;; ;;
"Stock Linux"*)
set_colors 4 7
read -rd '' ascii_data << 'EOF'
${c1}
#G5J5G#
&BPYJJJJJJJYPB&
&#G5JJJJJJY5YJJJJJJ5G#&
#G5YJJJJJY5G#& &#G5YJJJJJY5G#
BPYJJJJJJJ5B& &BPYJJJJJJYPB
JJJJJJJJJJY5G#& &BPYJJJJJ
JJJJJJJJJJJJJJY5G# &JJJJJ
PYJJJJJJJJJJJJJJJJYPB& GYJJJ
&BPYJJJJJJJJJJJJJJJJ5PB& &BP
#G5YJJJJJJJJJJJJJJJY5G#
PB& &BP5JJJJJJJJJJJJJJJJYPB&
JJJYG &BPYJJJJJJJJJJJJJJJJYP
JJJJJ& #G5YJJJJJJJJJJJJJJ
JJJJJYPB& &#G5YJJJJJJJJJJ
BPYJJJJJJYPB& &B5JJJJJJJYPB
#G5YJJJJJY5G#& &#G5YJJJJJY5G#
&#G5JJJJJJY5YJJJJJJ5G#&
&BPYJJJJJJJYPB&
#G5J5G#
EOF
;;
"ArchMerge"*) "ArchMerge"*)
set_colors 6 6 7 1 set_colors 6 6 7 1
read -rd '' ascii_data <<'EOF' read -rd '' ascii_data <<'EOF'
@@ -7052,6 +7147,28 @@ ${c1} '
EOF EOF
;; ;;
"Cobalt"*)
set_colors 33 33 59 31 8
read -rd '' ascii_data <<'EOF'
${c1} ///
${c1} ,//////////////
${c1} ///////////////////////////////
${c1} ///////////////${c5}***********${c1}//////
////${c5}***********************${c1}/////
/////${c5}***********************${c1}////
//////${c5},,,,,,,,,,,,,,,,,,,,,,${c1}///
//////${c5},,,,,,,,,,,,,,,,,,,,,,,,,${c1}/////
/////${c5},,,,,,,,,,,,,,,,,,,,,,,,,,,,${c1}/////
${c4} *****${c3},,,,,,,,,,,,,,,,,,,,,,,,,,,,,${c4}*****
******${c3},,,,,,,,,,,,,,,,,,,,,,,,,,,,${c4}*****
*******${c3},,,,,,,,,,,,,,,,,,,,,,,,,${c4}******
*******${c3}......................${c4}*******
******${c3}....${c4}***********************
****************************
*****
EOF
;;
"Arya"*) "Arya"*)
set_colors 2 1 set_colors 2 1
read -rd '' ascii_data <<'EOF' read -rd '' ascii_data <<'EOF'
@@ -8133,6 +8250,27 @@ ${c2} `Y$$
EOF EOF
;; ;;
"Droidian"*)
set_colors 2 10
read -rd '' ascii_data <<'EOF'
${c2} _,met$$$$$gg.
,g$$$$$$$$$$$$$$$$P.
,$$P' `$$$.
',$$P ,ggs. `$$b:
`d$$' ,$P"' ${c1}.${c2} $$$
$$P d$' ${c1},${c2} $$P
$$: $$. ${c1}-${c2} ,d$$'
$$; Y$b._ _,d$P'
Y$$. ${c1}`.${c2}`"Y$$$$P"'
${c2} `$$b ${c1}"-.__
${c2} `Y$$
`Y$$.
`$$b.
`Y$$b.
`"Y$b._
EOF
;;
"Deepin"*) "Deepin"*)
set_colors 2 7 set_colors 2 7
read -rd '' ascii_data <<'EOF' read -rd '' ascii_data <<'EOF'
@@ -8200,6 +8338,31 @@ ${c1} ..,,;;;::;,..
EOF EOF
;; ;;
"DietPi"*)
set_colors 2 0
read -rd '' ascii_data <<'EOF'
${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}@%@@@@@@@@+
#@@@@@@@@@@@@@@@@@@@@@@#
-#@@@@@@@@@@@@@@@@@@#-
-*%@@@@@@@@@@%*-
.+%@@@@%+.
EOF
;;
"DracOS"*) "DracOS"*)
set_colors 1 7 3 set_colors 1 7 3
read -rd '' ascii_data <<'EOF' read -rd '' ascii_data <<'EOF'
@@ -8755,6 +8918,17 @@ o/:-...................................:
EOF EOF
;; ;;
"garuda_small")
set_colors 7 7 3 7 2 4
read -rd '' ascii_data <<'EOF'
${c3} .----.
.' ${c6},${c3} '.
${c4} .' ${c6}'${c3}-----|
'${c5}. -----,
'.____.'
EOF
;;
"Garuda"*) "Garuda"*)
set_colors 7 7 3 7 2 4 set_colors 7 7 3 7 2 4
read -rd '' ascii_data <<'EOF' read -rd '' ascii_data <<'EOF'
@@ -9060,6 +9234,37 @@ ${c3} MMMM${c4} .cOMMMMM|/MMMMM/`
EOF EOF
;; ;;
"HamoniKR"*)
set_colors 4 7 99 1 3 7
read -rd '' ascii_data <<'EOF'
${c1}
cO0Ox.
.ldddddddo.
.lddddddddddo
'lddddddddddddc
,oddddddddddddd;
'ldddddddddddddo.
.oddddddddddddddc.
,dddddddddddddddo.
,ccoooooooocoddooo:
,cooooooooooooooooop ${c3} c000x.
${c1}.cooooooooooooooopcllll${c3} .cddddddo.
${c1}coooooooooooooop' .qlll.${c3} .ddoooooooo;
${c1}cooooooooooc; ${c3}'qlllp. .ddoooooooooo;
${c1}.cooooooc; ${c3}'lllbc...coooooooooooo;
${c1} .cooc' ${c3}.llllcoooooooooooooo.
.coooooooooooooop:
.coooooooooooooop'
.cooooooooooooop.
.cooooooooooooop.
.coooooooooooop.
.cooooooooooop.
.cooooooooop.
.cooooop'
EOF
;;
"Huayra"*) "Huayra"*)
set_colors 4 7 set_colors 4 7
read -rd '' ascii_data <<'EOF' read -rd '' ascii_data <<'EOF'
@@ -10430,6 +10635,22 @@ Q@@@@@ggg@@f@ @@@@@@L
EOF EOF
;; ;;
"OmniOS"*)
set_colors 15 3 8
read -rd '' ascii_data <<'EOF'
${c1}
____ __ __ _ _ _
/ __ \ | \/ || \ | || |
| | | || || \| || |
| |__| || |\/| || , `${c2}_${c1}||${c2}_${c1}| ${c2}____${c1}
\____/ |_| |_||_|\${c2}/ __ \ / ___|
| | | ||(__
${c3}community${c2} | |__| | ___)|
${c3}edition${c2} \____/ |____/
EOF
;;
"openbsd_small") "openbsd_small")
set_colors 3 7 6 1 8 set_colors 3 7 6 1 8
read -rd '' ascii_data <<'EOF' read -rd '' ascii_data <<'EOF'
@@ -13095,6 +13316,32 @@ EOF
;; ;;
"Vanilla"*)
set_colors 11 15
read -rd '' ascii_data <<'EOF'
${c1}
.----:
.-------.
:---::----:
.----::-----.
......... :----::-----: ..:::-::::..
.-----------------::------------------:
----::-----------::----------::::---:
-----:::--------::-------:::-------
:------::::--::...:::::---------:
.---------::.. ..:---------.
.::-----::.. .::----::.
.:------:.......:-------:
.--------::::::::-:::-------.
.-------::-----.:-----::------.
-----::------: :------::-----
:--::--------: .-------::---:
:----------:: .:----------
EOF
;;
"Obarun"*) "Obarun"*)
set_colors 6 6 7 1 set_colors 6 6 7 1
read -rd '' ascii_data <<'EOF' read -rd '' ascii_data <<'EOF'
@@ -13492,6 +13739,12 @@ main() {
get_distro get_distro
get_bold get_bold
get_distro_ascii get_distro_ascii
# check if the output is a interactive terminal
[[ $stdout == auto ]] && {
[[ -t 1 ]] && stdout=off || stdout=on
}
[[ $stdout == on ]] && stdout [[ $stdout == on ]] && stdout
# Minix doesn't support these sequences. # Minix doesn't support these sequences.
+49 -38
View File
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.2. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.2.
.TH NEOFETCH "1" "September 2022" "Neofetch 7.3.1" "User Commands" .TH NEOFETCH "1" "October 2022" "Neofetch 7.3.3" "User Commands"
.SH NAME .SH NAME
Neofetch \- manual page for Neofetch 7.3.1 Neofetch \- manual page for Neofetch 7.3.3
.SH SYNOPSIS .SH SYNOPSIS
.B neofetch .B neofetch
\fI\,func_name --option "value" --option "value"\/\fR \fI\,func_name --option "value" --option "value"\/\fR
@@ -303,41 +303,43 @@ Which Distro's ascii art to print
.TP .TP
NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy, NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy,
Android, Antergos, antiX, AOSC OS, AOSC OS/Retro, Aperio GNU/Linux, Android, Antergos, antiX, AOSC OS, AOSC OS/Retro, Aperio GNU/Linux,
Apricity, Arch, ArchBox, Archcraft, ARCHlabs, ArchMerge, ArchStrike, Apricity, Arch, ArchBox, Archcraft, ARCHlabs, ArchStrike, ArcoLinux,
ArcoLinux, Artix, Arya, Asahi, AsteroidOS, astOS, Bedrock, BigLinux, Artix, Arya, Asahi, AsteroidOS, astOS, Bedrock, BigLinux, Bitrig,
Bitrig, BlackArch, blackPanther, BLAG, BlankOn, BlueLight, Bodhi, BlackArch, blackPanther, BLAG, BlankOn, BlueLight, Bodhi, bonsai,
bonsai, BSD, BunsenLabs, Cachy OS, Calculate, CalinixOS, Carbs, CBLMariner, CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, BSD, BunsenLabs, Cachy OS, Calculate, CalinixOS, Carbs, CBL\-Mariner,
ChonkySealOS, Chrom, Cleanjaro, Clear Linux OS, ClearOS, Clover, CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, ChonkySealOS,
Condres, Container Linux by CoreOS, CRUX, Crystal Linux, Cucumber, 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, CutefishOS, CyberOS, dahlia, DarkOs, Darwin, Debian, Deepin, DesaOS,
Devuan, DracOS, DragonFly, Drauger, Elementary, Elive, EncryptOS, Devuan, DietPi, DracOS, DragonFly, Drauger, Droidian, Elementary,
EndeavourOS, Endless, EuroLinux, Exherbo, Exodia Predator OS, Elive, EncryptOS, EndeavourOS, Endless, EuroLinux, Exherbo, Exodia
Fedora, Feren, Finnix, FreeBSD, FreeMiNT, Frugalware, Funtoo, Predator OS, Fedora, Feren, Finnix, FreeBSD, FreeMiNT, Frugalware,
GalliumOS, Garuda, Gentoo, GhostBSD, glaucus, gNewSense, GNOME, GNU, Funtoo, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus, gNewSense,
GoboLinux, GrapheneOS, Grombyang, Guix, Haiku, HarDClanZ, Hash, GNOME, GNU, GoboLinux, GrapheneOS, Grombyang, Guix, Haiku, HamoniKR,
Huayra, HydroOS, Hyperbola, iglunix, instantOS, IRIX, Itc, HarDClanZ, Hash, Huayra, HydroOS, Hyperbola, iglunix, instantOS,
januslinux, Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion, Korora, IRIX, Itc, januslinux, Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion,
KrassOS, KSLinux, Kubuntu, LangitKetujuh, LaxerOS, LEDE, LibreELEC, Korora, KrassOS, KSLinux, Kubuntu, LangitKetujuh, LaxerOS, LEDE,
Linspire, Linux, Linux Lite, Linux Mint, Linux Mint Old, Live Raizo, LibreELEC, Linspire, Linux, Linux Lite, Linux Mint, Linux Mint Old,
LMDE, Lubuntu, Lunar, mac, Mageia, MagpieOS, Mandriva, Manjaro, Live Raizo, LMDE, Lubuntu, Lunar, mac, Mageia, MagpieOS, Mandriva,
MassOS, MatuusOS, Maui, Mer, Minix, MIRACLE LINUX, MX, Namib, Manjaro, MassOS, MatuusOS, Maui, Mer, Minix, MIRACLE LINUX, MX,
Neptune, NetBSD, Netrunner, Nitrux, NixOS, NomadBSD, Nurunner, Namib, Neptune, NetBSD, Netrunner, Nitrux, NixOS, NomadBSD,
NuTyX, Obarun, OBRevenge, Open Source Media Center, OpenBSD, Nurunner, NuTyX, Obarun, OBRevenge, OmniOS, Open Source Media
openEuler, OpenIndiana, openmamba, OpenMandriva, OpenStage, Center, OpenBSD, openEuler, OpenIndiana, openmamba, OpenMandriva,
openSUSE, openSUSE Leap, openSUSE Tumbleweed, OpenWrt, OPNsense, OpenStage, openSUSE, openSUSE Leap, openSUSE Tumbleweed, OpenWrt,
Oracle, orchid, OS Elbrus, PacBSD, Parabola, parch, Pardus, Parrot, OPNsense, Oracle, orchid, OS Elbrus, PacBSD, Parabola, parch,
Parsix, PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, Pisi, Pardus, Parrot, Parsix, PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo,
PNM Linux, Pop!_OS, Porteus, PostMarketOS, Profelis SambaBOX, Peppermint, Pisi, PNM Linux, Pop!_OS, Porteus, PostMarketOS,
Proxmox, PuffOS, Puppy, PureOS, Q4OS, Qubes, Qubyt, Quibian, Radix, Profelis SambaBOX, Proxmox, PuffOS, Puppy, PureOS, Q4OS, Qubes,
Raspbian, ravynOS, Reborn OS, Red Star, Redcore, Redhat, Refracted Qubyt, Quibian, Radix, Raspbian, ravynOS, Reborn OS, Red Star,
Devuan, Regata, Regolith, rocky, Rosa, Sabayon, sabotage, Sailfish, Redcore, Redhat, Refracted Devuan, Regata, Regolith, rocky, Rosa,
SalentOS, Scientific, semc, Septor, Serene, SharkLinux, ShastraOS, Sabayon, sabotage, Sailfish, SalentOS, Scientific, semc, Septor,
Siduction, SkiffOS, Slackware, SliTaz, SmartOS, Soda, Solus, Source Serene, SharkLinux, ShastraOS, Siduction, SkiffOS, Slackware,
Mage, Sparky, Star, SteamOS, Sulin, SunOS, SwagArch, t2, Tails, SliTaz, SmartOS, Soda, Solus, Source Mage, Sparky, Star, SteamOS,
TeArch, TorizonCore, Trisquel, Twister, Ubuntu, Ubuntu Budgie, Stock Linux, Sulin, SunOS, SwagArch, t2, Tails, TeArch, TorizonCore,
Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Trisquel, Twister, Ubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu
Sway, Ubuntu Touch, Ubuntu\-GNOME, ubuntu_old02, Ultramarine Linux, Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Sway, Ubuntu Touch,
Univalent, Univention, Uos, uwuntu, Venom, VNux, Void, VzLinux, wiilinux\-ngx, Windows, Windows 10, Windows 11, XFerience, Xubuntu, Ubuntu\-GNOME, ubuntu_old02, Ultramarine Linux, Univalent,
Univention, Uos, uwuntu, Vanilla, Venom, VNux, Void, VzLinux, wiilinux\-ngx, Windows, Windows 10, Windows 11, XFerience, Xubuntu,
yiffOS, Zorin have ascii logos. yiffOS, Zorin have ascii logos.
.TP .TP
NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu
@@ -345,7 +347,7 @@ have 'old' logo variants, use {distro}_old to use them.
.TP .TP
NOTE: alpine, android, aoscosretro, arch, arcolinux, artix, NOTE: alpine, android, aoscosretro, arch, arcolinux, artix,
CalinixOS, centos, cleanjaro, crux, debian, dragonfly, elementary, CalinixOS, centos, cleanjaro, crux, debian, dragonfly, elementary,
fedora, freebsd, gentoo, guix, haiku, hyperbola, linuxlite, fedora, freebsd, garuda, gentoo, guix, haiku, hyperbola, linuxlite,
linuxmint, mac, mageia, manjaro, mx, netbsd, nixos, openbsd, linuxmint, mac, mageia, manjaro, mx, netbsd, nixos, openbsd,
opensuse, orchid, parabola, popos, postmarketos, pureos, Raspbian, opensuse, orchid, parabola, popos, postmarketos, pureos, Raspbian,
rocky, slackware, sunos, ubuntu, void have 'small' logo variants, rocky, slackware, sunos, ubuntu, void have 'small' logo variants,
@@ -412,9 +414,18 @@ Don't create the user config file.
\fB\-\-print_config\fR \fB\-\-print_config\fR
Print the default config file to stdout. Print the default config file to stdout.
.TP .TP
\fB\-\-stdout\fR \fB\-\-stdout\fR=\fI\,on\/\fR
Turn off all colors and disables any ASCII/image backend. Turn off all colors and disables any ASCII/image backend.
.TP .TP
\fB\-\-stdout\fR=\fI\,off\/\fR
Enable the colored output and ASCII/image backend
.TP
\fB\-\-stdout\fR=\fI\,auto\/\fR
Let the program decide basing on the output type (default behavior)
.TP
\fB\-\-stdout\fR
Equivalent to '\-\-stdout=on', for backward compatibility
.TP
\fB\-\-help\fR \fB\-\-help\fR
Print this text and exit Print this text and exit
.TP .TP
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "neowofetch", "name": "neowofetch",
"version": "1.4.1", "version": "1.4.3",
"description": "Updated neofetch", "description": "Updated neofetch",
"repository": { "repository": {
"type": "git", "type": "git",
+68
View File
@@ -0,0 +1,68 @@
from __future__ import annotations
import sys
import time
from dataclasses import dataclass
from pathlib import Path
from urllib.request import urlretrieve
from hyfetch.color_util import printc, color
from hyfetch.neofetch_util import term_size
@dataclass
class Theme:
done_char: str
todo_char: str
prefix: str = ''
suffix: str = ''
done_len: int = 1
todo_len: int = 1
CLASSIC_THEME = Theme('', '.', '[', ']')
NEW_THEME = Theme('&a━', '&c━')
EMOJI_THEME = Theme('', '🕑', done_len=2, todo_len=2)
EGG_THEME = Theme('🐣', '🥚', done_len=2, todo_len=2)
FLOWER_THEME = Theme('🌸', '🥀', done_len=2, todo_len=2)
def print_progressbar(total: int, i: int, length: int | None = None, theme: Theme = EMOJI_THEME, unit=''):
if not length:
length = term_size()[0]
i += 1
completed = f'{i * 100 / total:.0f}%'
placeholder = 'PLACEHOLDER_BAR'
template = f'{theme.prefix}{placeholder}{theme.suffix}&r {completed} {i}/{total}{unit}'
length -= len(template) - len(placeholder) + 2
progress = int(i / total * length)
bar = f'{theme.done_char * (progress // theme.todo_len)}{theme.todo_char * ((length - progress) // theme.done_len)}'
print(color(template.replace(placeholder, bar)), end='\r', flush=True)
def download_pbar(url: str, path: Path):
def hook(b: int, bsize: int, tsize: int):
print_progressbar(tsize // 1024 // 1024, b * bsize // 1024 // 1024, unit=' MB')
if path.is_dir():
filename = url.split('/')[-1]
path = path / filename
path.parent.mkdir(exist_ok=True, parents=True)
urlretrieve(url, filename=path, reporthook=hook)
print()
if __name__ == '__main__':
# theme = {'emoji': EMOJI_THEME, 'flower': FLOWER_THEME, 'egg': EGG_THEME, 'classic': CLASSIC_THEME, 'new': NEW_THEME}
#
# for name, t in theme.items():
# print(f'\n{name} theme:')
# for i in range(100):
# print_progressbar(100, i, theme=t)
# time.sleep(0.015)
# print()
download_pbar('https://github.com/git-for-windows/git/releases/download/v2.37.2.windows.2/MinGit-2.37.2.2-busybox-64-bit.zip', Path('Downloads'))
+2 -1
View File
@@ -124,6 +124,7 @@ def create_release(v: str):
# 4. Push # 4. Push
print('Pushing commits...') print('Pushing commits...')
subprocess.check_call(['git', 'push']) subprocess.check_call(['git', 'push'])
subprocess.check_call(['git', 'push', 'origin', v])
def deploy(): def deploy():
@@ -131,7 +132,7 @@ def deploy():
Deploy release to pip and npm Deploy release to pip and npm
""" """
print('Deploying to pypi...') print('Deploying to pypi...')
subprocess.check_call(['bash', './deploy.sh']) subprocess.check_call(['bash', 'tools/deploy.sh'])
print('Done!') print('Done!')
print('Deploying to npm...') print('Deploying to npm...')
+2
View File
@@ -1,6 +1,8 @@
# Pull request that I don't plan on merging, or already merged pull request that the script didn't # Pull request that I don't plan on merging, or already merged pull request that the script didn't
# detect. # detect.
IgnoreList: IgnoreList:
# [2193] Added DietPi os ASCII art
2193: duplicate
# [2154] Added Support for Uwuntu # [2154] Added Support for Uwuntu
2154: merged 2154: merged
# [2156] Update neofetch (for macOS 13) # [2156] Update neofetch (for macOS 13)