Compare commits
114 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| df11c756dd | |||
| 5f066e4ebf | |||
| ca3c887b61 | |||
| fac90ec5d3 | |||
| 4cb65c468c | |||
| 0693d6e316 | |||
| 2a312d0a7b | |||
| 8f628bb37b | |||
| 503251cbce | |||
| a37ee211f2 | |||
| 0ac2ffbba5 | |||
| dd950092a6 | |||
| bd8066407e | |||
| 6be684c26f | |||
| dba600cc89 | |||
| cdbf8a6b24 | |||
| a437957702 | |||
| bf5276bcc4 | |||
| 11f4242598 | |||
| dfe77dea5f | |||
| c47d80ae1d | |||
| 83ba569fde | |||
| 73fc473ae3 | |||
| 625f48168b | |||
| 9914ff2a55 | |||
| f20e80375a | |||
| b8ec68a943 | |||
| 1f7f76e078 | |||
| e288da8de2 | |||
| a72a49da13 | |||
| 24e1ed4617 | |||
| 01f65d91b5 | |||
| 953a09b686 | |||
| fe31b5bf34 | |||
| bf0c20b188 | |||
| c9ed3e1789 | |||
| 6d1359d8e9 | |||
| 219a7c48cc | |||
| 3b1e1385cc | |||
| c6453e2137 | |||
| 200c1a6d53 | |||
| 4225a0c453 | |||
| 4fe0890f21 | |||
| 857037fa37 | |||
| b7b2322346 | |||
| ac27543cd8 | |||
| c40cb09409 | |||
| 365abe2c80 | |||
| 2007c7c01e | |||
| 9747856f15 | |||
| 8104cd822a | |||
| 2d1abc8e30 | |||
| afb7092667 | |||
| 4a16cfec9b | |||
| 9acc0c0719 | |||
| 1315d0b2a7 | |||
| 331deaf293 | |||
| 3a1ac3e25a | |||
| a6a17d102c | |||
| 9605e4036f | |||
| 088e0d484b | |||
| 9b7756c5ae | |||
| 5c22c75f72 | |||
| bac650c84a | |||
| cbe8906073 | |||
| faa1cca154 | |||
| 8ef39ffcbf | |||
| 6778fd42a5 | |||
| 4e5f51b2a2 | |||
| 1d49e6109c | |||
| 9777652dac | |||
| 659811a66e | |||
| 617227da75 | |||
| 8ffb8063ca | |||
| 9018dbb461 | |||
| 1d29563e81 | |||
| 0d06df3024 | |||
| 964f718766 | |||
| 673e20ff2b | |||
| b4a0131359 | |||
| 93ea451c34 | |||
| a813400807 | |||
| e970c8f672 | |||
| 573eb09f74 | |||
| 6192b47758 | |||
| 6771e8e7c1 | |||
| e8c9e30920 | |||
| 3b8cf64a5e | |||
| 7d1ec7109f | |||
| 5891522233 | |||
| d00a3c086d | |||
| 538646160d | |||
| 182f2aad15 | |||
| 8c5905c858 | |||
| 365ed5a91f | |||
| 859dd3eb83 | |||
| 5343182ea1 | |||
| 93639996bb | |||
| 5f39250003 | |||
| 08ecada71a | |||
| 4d6743b886 | |||
| dcff08340e | |||
| 44a4555bce | |||
| f855d0e244 | |||
| 04d5965d49 | |||
| 197e11ee5f | |||
| 58e60aea8e | |||
| d3ea2eeee2 | |||
| 2b4a35f12b | |||
| 469dd762f2 | |||
| d8bdffa1f1 | |||
| a3e93a03fc | |||
| 0329c2825f | |||
| 48acfaaebe |
@@ -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.
|
||||
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -1,10 +1,18 @@
|
||||
## Description
|
||||
|
||||
Only fill in the fields below if relevant.
|
||||
<!-- Thank you so much for contributing! ❤️ -->
|
||||
|
||||
### Description
|
||||
Describe the goals that the pull request accomplishes.
|
||||
|
||||
## Features
|
||||
### Relevant Links
|
||||
If there are related issues, please link them here.
|
||||
|
||||
## Issues
|
||||
Please also include links relevant to the changes.
|
||||
|
||||
## TODO
|
||||
e.g. For new distros, include a link to the distro's official website, download link, or development repository.
|
||||
|
||||
### Screenshots
|
||||
If applicable, please include screenshots before and after your changes.
|
||||
|
||||
### Additional context
|
||||
Add any other context about the problem or changes here.
|
||||
|
||||
+5
-1
@@ -115,4 +115,8 @@ dmypy.json
|
||||
|
||||
# Custom
|
||||
.idea
|
||||
._*
|
||||
._*
|
||||
webhook-log
|
||||
start_moderation.sh
|
||||
gh_moderator.toml
|
||||
moderator-data
|
||||
|
||||
@@ -28,9 +28,12 @@ pip install hyfetch
|
||||
|
||||
Currently, these distributions have existing packages for HyFetch:
|
||||
|
||||
* Arch Linux: `paru -S hyfetch` or `yay -S hyfetch` (Thanks to [@Aleksana](https://github.com/Aleksanaa))
|
||||
* Arch Linux: `sudo pacman -S hyfetch` (Thanks to [@Aleksana](https://github.com/Aleksanaa) and [@Antiz96](https://github.com/Antiz96))
|
||||
* Nix: `nix-env -i hyfetch` (Thanks to [@YisuiDenghua](https://github.com/YisuiDenghua))
|
||||
* Guix: `guix install hyfetch` (Thanks to [@WammKD](https://github.com/WammKD))
|
||||
* Slackware `sbopkg -b hyfetch` Slackware [Slackbuild](https://slackbuilds.org/repository/15.0/desktop/hyfetch/?search=hyfetch) (Thanks to [@bittin](https://github.com/bittin) and Urchlay)
|
||||
* Nix Profile `nix profile install nixpkgs#hyfetch`
|
||||
|
||||
|
||||
### Method 3: Install the latest developmental version using git
|
||||
|
||||
@@ -87,7 +90,6 @@ Updates to `neowofetch` begins with the emoji 🖼️
|
||||
|
||||
* [ ] (Important!) Refactor flag storage & coloring to support non-stride patterns
|
||||
* [ ] Config menu: Allow left-right arrow keys for pagination
|
||||
* [ ] Neofetch argument pass through
|
||||
|
||||
### Nightly
|
||||
|
||||
@@ -99,39 +101,76 @@ pip install git+https://github.com/hykilpikonna/hyfetch.git@master
|
||||
|
||||
<!-- CHANGELOG STARTS HERE --->
|
||||
|
||||
### 1.4.9
|
||||
|
||||
* 🌈 Add pride month easter-egg animation! ⭐️
|
||||
* 🌈 Autocompletion for bash, zsh, tcsh ([#96](https://github.com/hykilpikonna/hyfetch/pull/96))
|
||||
* 🌈 Add nix profile installation method ([#114](https://github.com/hykilpikonna/hyfetch/pull/114))
|
||||
* 🌈 Add experimental color overlay function for more accurate lightness adjusting (using `--c-overlay`)
|
||||
* 🌈 Allow neofetch argument passthrough (using `--args='...'`)
|
||||
* 🌈 Show recommended terminal size ([#129](https://github.com/hykilpikonna/hyfetch/pull/129))
|
||||
* 🌈 Update issue & pull request templates
|
||||
* 🖼 Hostname - Fix FQDN substitution
|
||||
* 🖼 Version - Fix Windows version detection ([dylanaraps#2309](https://github.com/dylanaraps/neofetch/pull/2309))
|
||||
* 🖼 Packages - Fix winget stuck on agreement ([#82](https://github.com/hykilpikonna/hyfetch/pull/82))
|
||||
* 🖼 Distro - Fix Windows text encoding ([#115](https://github.com/hykilpikonna/hyfetch/pull/115))
|
||||
* 🖼 Distro - Add Astra Linux ([dylanaraps#2313](https://github.com/dylanaraps/neofetch/pull/2313))
|
||||
* 🖼 Distro - Add FemboyOS ([#121](https://github.com/hykilpikonna/hyfetch/pull/121))
|
||||
* 🖼 Distro - Add Nobara Linux ([dylanaraps#2326](https://github.com/dylanaraps/neofetch/pull/2326))
|
||||
* 🖼 Font - Fix Konsole ppid detection ([#116](https://github.com/hykilpikonna/hyfetch/pull/116))
|
||||
* 🖼 Font - Fix Konsole terminal font detection ([#127](https://github.com/hykilpikonna/hyfetch/pull/127))
|
||||
* 🖼 Image - Optimize sixel image display ([dylanaraps#2316](https://github.com/dylanaraps/neofetch/pull/2316))
|
||||
|
||||
### 1.4.8
|
||||
|
||||
* 🌈 Improved Windows git bash detection ([#99](https://github.com/hykilpikonna/hyfetch/pull/99))
|
||||
* 🌈 Improved color formatting codes ([#101](https://github.com/hykilpikonna/hyfetch/pull/101))
|
||||
* 🌈 Allow specifying distro in config ([#102](https://github.com/hykilpikonna/hyfetch/pull/102))
|
||||
* 🌈 Allow specifying custom ascii files ([#104](https://github.com/hykilpikonna/hyfetch/pull/104))
|
||||
* 🌈 Add omniromantic and pangender flags ([#106](https://github.com/hykilpikonna/hyfetch/pull/106))
|
||||
* 🌈 Now officially packaged for ArchLinux Community & Slackware! ([#112](https://github.com/hykilpikonna/hyfetch/pull/112) | [#109](https://github.com/hykilpikonna/hyfetch/pull/109))
|
||||
* 🖼 Host - Update Apple device model detection. ([#111](https://github.com/hykilpikonna/hyfetch/pull/111))
|
||||
* 🖼 Distro - Add Salient OS. ([dylanaraps#2301](https://github.com/dylanaraps/neofetch/pull/2301))
|
||||
* 🖼 Distro - Add PikaOS. ([#105](https://github.com/hykilpikonna/hyfetch/pull/105))
|
||||
* 🖼 Distro - Add Archcraft minimal variant. ([#108](https://github.com/hykilpikonna/hyfetch/pull/108))
|
||||
* 🖼 Distro - Update Vanilla logo. ([#98](https://github.com/hykilpikonna/hyfetch/pull/98))
|
||||
* 🖼 Distro - ChromeOS version improvements. ([dylanaraps#2305](https://github.com/dylanaraps/neofetch/pull/2305))
|
||||
* 🖼 CPU - Improved multi-cpu ARM chip detection. ([#97](https://github.com/hykilpikonna/hyfetch/pull/97))
|
||||
* 🖼 Packages - Support pipx package manager. ([#107](https://github.com/hykilpikonna/hyfetch/pull/107))
|
||||
|
||||
### 1.4.7
|
||||
|
||||
* 🌈 Better Windows compatibility (#45, #84, #87, #89)
|
||||
* 🌈 Add gendervoid flags (#81)
|
||||
* 🌈 Fix ASCII extractor escape sequence generation (#90, #91)
|
||||
* 🌈 Better Windows compatibility ([#45](https://github.com/hykilpikonna/hyfetch/pull/45), [#84](https://github.com/hykilpikonna/hyfetch/pull/84), [#87](https://github.com/hykilpikonna/hyfetch/pull/87), [#89](https://github.com/hykilpikonna/hyfetch/pull/89))
|
||||
* 🌈 Add gendervoid flags ([#81](https://github.com/hykilpikonna/hyfetch/pull/81))
|
||||
* 🌈 Fix ASCII extractor escape sequence generation ([#90](https://github.com/hykilpikonna/hyfetch/pull/90), [#91](https://github.com/hykilpikonna/hyfetch/pull/91))
|
||||
* 🖼 Distro - Add CuteOS ([dylanaraps#2291](https://github.com/dylanaraps/neofetch/pull/2291))
|
||||
* 🖼 Distro - Add Floflis ([dylanaraps#2289](https://github.com/dylanaraps/neofetch/pull/2289))
|
||||
* 🖼 Distro - Add ArseLinux ([dylanaraps#2295](https://github.com/dylanaraps/neofetch/pull/2295))
|
||||
* 🖼 Distro - Better Solaris support ([dylanaraps#2293](https://github.com/dylanaraps/neofetch/pull/2293))
|
||||
* 🖼 Packages - Fix scoop package manager for Windows (#93)
|
||||
* 🖼 Packages - Add Evox package manager for Stock Linux (#95)
|
||||
* 🖼 WM - Fix false positive wm process name detection (#88, #94)
|
||||
* 🖼 Packages - Fix scoop package manager for Windows ([#93](https://github.com/hykilpikonna/hyfetch/pull/93))
|
||||
* 🖼 Packages - Add Evox package manager for Stock Linux ([#95](https://github.com/hykilpikonna/hyfetch/pull/95))
|
||||
* 🖼 WM - Fix false positive wm process name detection ([#88](https://github.com/hykilpikonna/hyfetch/pull/88), [#94](https://github.com/hykilpikonna/hyfetch/pull/94))
|
||||
* 🖼 Misc - Added BIOS and bluetooth detection
|
||||
|
||||
### 1.4.6
|
||||
|
||||
* 🌈 Add compatibility for FastFetch version `>1.8.0` (#62)
|
||||
* 🖼 Distro - Add Aperture Science ascii art (#61)
|
||||
* 🌈 Add compatibility for FastFetch version `>1.8.0` ([#62](https://github.com/hykilpikonna/hyfetch/pull/62))
|
||||
* 🖼 Distro - Add Aperture Science ascii art ([#61](https://github.com/hykilpikonna/hyfetch/pull/61))
|
||||
* 🖼 Distro - Add RhaymOS ([dylanaraps#2274](https://github.com/dylanaraps/neofetch/pull/2274))
|
||||
* 🖼 Editor - Add editor information detection ([dylanaraps#2271](https://github.com/dylanaraps/neofetch/pull/2271))
|
||||
* 🖼 Packages - Fix empty cargo directory (#58)
|
||||
* 🖼 Packages - Fix empty cargo directory ([#58](https://github.com/hykilpikonna/hyfetch/pull/58))
|
||||
* 🖼 Terminal - Display gnome-console instead of kgx ([dylanaraps#2277](https://github.com/dylanaraps/neofetch/pull/2277))
|
||||
* 🖼 Terminal - Fix terminal detection with new get_process_name function
|
||||
* 🖼 CPU - Detect ISA string on RISC-V CPUs (#60)
|
||||
* 🖼 Song - Fix CMUS player song detection on macOS (#55)
|
||||
* 🖼 Network - Fix macOS network detection (#56)
|
||||
* 🖼 Misc - Change LICENSE year to 2023 (#59)
|
||||
* 🖼 CPU - Detect ISA string on RISC-V CPUs ([#60](https://github.com/hykilpikonna/hyfetch/pull/60))
|
||||
* 🖼 Song - Fix CMUS player song detection on macOS ([#55](https://github.com/hykilpikonna/hyfetch/pull/55))
|
||||
* 🖼 Network - Fix macOS network detection ([#56](https://github.com/hykilpikonna/hyfetch/pull/56))
|
||||
* 🖼 Misc - Change LICENSE year to 2023 ([#59](https://github.com/hykilpikonna/hyfetch/pull/59))
|
||||
|
||||
### 1.4.5
|
||||
|
||||
* 🌈 **Support using FastFetch as a HyFetch backend** (`hyfetch -b fastfetch`)
|
||||
* 🌈 Add config file argument (#48)
|
||||
* 🌈 Fix problems caused by color detection on Windows (#16)
|
||||
* 🌈 Add config file argument ([#48](https://github.com/hykilpikonna/hyfetch/pull/48))
|
||||
* 🌈 Fix problems caused by color detection on Windows ([#16](https://github.com/hykilpikonna/hyfetch/pull/16))
|
||||
* 🌈 Support pure-python distro detection for FastFetch
|
||||
* 🖼️ Distro - Add Aster Linux ([dylanaraps#2251](https://github.com/dylanaraps/neofetch/pull/2251))
|
||||
* 🖼️ Distro - Add Hybrid Linux ([dylanaraps#2239](https://github.com/dylanaraps/neofetch/pull/2239))
|
||||
@@ -139,21 +178,21 @@ pip install git+https://github.com/hykilpikonna/hyfetch.git@master
|
||||
* 🖼️ Distro - Add Project Sasanqua ([dylanaraps#2264](https://github.com/dylanaraps/neofetch/pull/2264))
|
||||
* 🖼️ Distro - Add Kali small variant ([dylanaraps#2242](https://github.com/dylanaraps/neofetch/pull/2242))
|
||||
* 🖼️ Distro - Fix CachyOS matching ([dylanaraps#2026](https://github.com/dylanaraps/neofetch/pull/2026))
|
||||
* 🖼 WM - Fix wm detection with `fuser` (#39)
|
||||
* 🖼️ Memory - Make memory unit decimal calculation more accurate (#52)
|
||||
* 🖼 Packages - Fix squirrel (Stock Linux) package count detection (#39)
|
||||
* 🖼 Packages - Support cargo bin environment variable (#49)
|
||||
* 🖼 WM - Fix wm detection with `fuser` ([#39](https://github.com/hykilpikonna/hyfetch/pull/39))
|
||||
* 🖼️ Memory - Make memory unit decimal calculation more accurate ([#52](https://github.com/hykilpikonna/hyfetch/pull/52))
|
||||
* 🖼 Packages - Fix squirrel (Stock Linux) package count detection ([#39](https://github.com/hykilpikonna/hyfetch/pull/39))
|
||||
* 🖼 Packages - Support cargo bin environment variable ([#49](https://github.com/hykilpikonna/hyfetch/pull/49))
|
||||
* 🖼 Packages - Add tea.xyz package manager (issue [dylanaraps#2235](https://github.com/dylanaraps/neofetch/pull/2235))
|
||||
|
||||
### 1.4.4
|
||||
|
||||
* 🌈 Fix Python 3.11 compatibility (#35)
|
||||
* 🌈 Fix Python 3.11 compatibility ([#35](https://github.com/hykilpikonna/hyfetch/pull/35))
|
||||
* 🌈 Fix many overflow problems when screen is too small
|
||||
* 🖼️ Distro - Add Enso ([dylanaraps#2233](https://github.com/dylanaraps/neofetch/pull/2233))
|
||||
* 🖼️ Memory - Optimize and fix memory unit conversion ([dylanaraps#2225](https://github.com/dylanaraps/neofetch/pull/2225))
|
||||
* 🖼️ DE - Add dwl window manager ([dylanaraps#2234](https://github.com/dylanaraps/neofetch/pull/2234))
|
||||
* 🖼️ DE - Fix XDG session detection for X11 ([dylanaraps#2232](https://github.com/dylanaraps/neofetch/pull/2232))
|
||||
* 🖼️ CPU - Fix model detection for loongson (#34)
|
||||
* 🖼️ CPU - Fix model detection for loongson ([#34](https://github.com/hykilpikonna/hyfetch/pull/34))
|
||||
|
||||
### 1.4.3
|
||||
|
||||
@@ -161,33 +200,33 @@ pip install git+https://github.com/hykilpikonna/hyfetch.git@master
|
||||
* 🌈 **Optimize experience on light-themed terminals**
|
||||
* 🌈 Fix bugs with lightness and light-mode config not applying
|
||||
* 🌈 Fix color alignment for distros with first color ≠ `${c1}` (e.g. Ubuntu Budgie)
|
||||
* 🌈 Add unlabeled flags (#25)
|
||||
* 🌈 Add gender nonconforming & femboy & tomboy flags (#32)
|
||||
* 🌈 Add unlabeled flags ([#25](https://github.com/hykilpikonna/hyfetch/pull/25))
|
||||
* 🌈 Add gender nonconforming & femboy & tomboy flags ([#32](https://github.com/hykilpikonna/hyfetch/pull/32))
|
||||
* 🌈 Fix jailbreak iOS shell `killed: 9` issue caused by ld signature check.
|
||||
* 🖼️ Distro - Add garuda_small ([dylanaraps#2215](https://github.com/dylanaraps/neofetch/pull/2215))
|
||||
* 🖼️ Distro - Add Cobalt Linux ([dylanaraps#2213](https://github.com/dylanaraps/neofetch/pull/2213))
|
||||
* 🖼️ Distro - Add VanillaOS ([dylanaraps#2222](https://github.com/dylanaraps/neofetch/pull/2222))
|
||||
* 🖼️ Distro - Surround macOS build number in parentheses (#28)
|
||||
* 🖼️ Misc - Auto select stdout mode based on tty detection (#31)
|
||||
* 🖼️ Bug Fix - Fix cols coloring reset for bash 3.2 (#24)
|
||||
* 🖼️ Distro - Surround macOS build number in parentheses ([#28](https://github.com/hykilpikonna/hyfetch/pull/28))
|
||||
* 🖼️ Misc - Auto select stdout mode based on tty detection ([#31](https://github.com/hykilpikonna/hyfetch/pull/31))
|
||||
* 🖼️ Bug Fix - Fix cols coloring reset for bash 3.2 ([#24](https://github.com/hykilpikonna/hyfetch/pull/24))
|
||||
|
||||
### 1.4.2
|
||||
|
||||
* 🌈 Detailed runnning/contributing instructions in README.md (#21)
|
||||
* 🖼️ Distro - Add Stock Linux (#23)
|
||||
* 🌈 Detailed runnning/contributing instructions in README.md ([#21](https://github.com/hykilpikonna/hyfetch/pull/21))
|
||||
* 🖼️ Distro - Add Stock Linux ([#23](https://github.com/hykilpikonna/hyfetch/pull/23))
|
||||
* 🖼️ Distro - Add DietPi ([dylanaraps#1706](https://github.com/dylanaraps/neofetch/pull/1706))
|
||||
* 🖼️ Distro - Add OmniOS illumos ([dylanaraps#2196](https://github.com/dylanaraps/neofetch/pull/2196))
|
||||
* 🖼️ Distro - Add Droidian ([dylanaraps#2201](https://github.com/dylanaraps/neofetch/pull/2201))
|
||||
* 🖼️ Distro - Add HamoniKR ([dylanaraps#2210](https://github.com/dylanaraps/neofetch/pull/2210))
|
||||
* 🖼️ Song - Add support for TIDAL HiFi (#22)
|
||||
* 🖼️ Song - Add support for TIDAL HiFi ([#22](https://github.com/hykilpikonna/hyfetch/pull/22))
|
||||
* 🖼️ CPU - Detect multiple CPU models for ARM
|
||||
* 🖼️ Misc - Better defaults: Show RAM in GiB, RAM percentage, CPU speed rounding, refresh rate
|
||||
* 🖼️ Bug Fix - Fix bash 5.2 column cut off issue (#24)
|
||||
* 🖼️ Bug Fix - Fix bash 5.2 column cut off issue ([#24](https://github.com/hykilpikonna/hyfetch/pull/24))
|
||||
|
||||
### 1.4.1
|
||||
|
||||
* 🌈 Paginate flags (#14)
|
||||
* 🌈 Add release workflow (#15)
|
||||
* 🌈 Paginate flags ([#14](https://github.com/hykilpikonna/hyfetch/pull/14))
|
||||
* 🌈 Add release workflow ([#15](https://github.com/hykilpikonna/hyfetch/pull/15))
|
||||
* 🌈 Create automatic release script
|
||||
* 🌈 Config page - Give warning when terminal size is too small
|
||||
* 🌈 Config page - Optimize color arrangement selection on small screens
|
||||
@@ -208,7 +247,7 @@ pip install git+https://github.com/hykilpikonna/hyfetch.git@master
|
||||
|
||||
### 1.4.0
|
||||
|
||||
* 🌈 Add finsexual flag (#12)
|
||||
* 🌈 Add finsexual flag ([#12](https://github.com/hykilpikonna/hyfetch/pull/12))
|
||||
* 🚀 Addressed a total of 128 currently open pull requests from neofetch
|
||||
|
||||
<details>
|
||||
@@ -424,11 +463,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
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
VERSION = '1.4.9'
|
||||
+37
-5
@@ -6,11 +6,33 @@ from dataclasses import dataclass, astuple
|
||||
from .constants import GLOBAL_CFG
|
||||
from .types import *
|
||||
|
||||
MINECRAFT_COLORS = ["&0/\033[0;30m", "&1/\033[0;34m", "&2/\033[0;32m", "&3/\033[0;36m", "&4/\033[0;31m",
|
||||
"&5/\033[0;35m", "&6/\033[0;33m", "&7/\033[0;37m", "&8/\033[1;30m", "&9/\033[1;34m",
|
||||
"&a/\033[1;32m", "&b/\033[1;36m", "&c/\033[1;31m", "&d/\033[1;35m", "&e/\033[1;33m",
|
||||
"&f/\033[1;37m",
|
||||
"&r/\033[0m", "&l/\033[1m", "&o/\033[3m", "&n/\033[4m", "&-/\n"]
|
||||
MINECRAFT_COLORS = [
|
||||
|
||||
# Minecraft formatting codes
|
||||
# ==========================
|
||||
"&0/\033[38;5;0m", "&1/\033[38;5;4m", "&2/\033[38;5;2m", "&3/\033[38;5;6m",
|
||||
"&4/\033[38;5;1m", "&5/\033[38;5;5m", "&6/\033[38;5;3m", "&7/\033[38;5;7m",
|
||||
"&8/\033[38;5;8m", "&9/\033[38;5;12m", "&a/\033[38;5;10m", "&b/\033[38;5;14m",
|
||||
"&c/\033[38;5;9m", "&d/\033[38;5;13m", "&e/\033[38;5;11m", "&f/\033[38;5;15m",
|
||||
"&l/\033[1m", # Enable bold text
|
||||
"&o/\033[3m", # Enable italic text
|
||||
"&n/\033[4m", # Enable underlined text
|
||||
"&k/\033[8m", # Enable hidden text
|
||||
"&m/\033[9m", # Enable strikethrough text
|
||||
"&r/\033[0m", # Reset everything
|
||||
|
||||
# Extended codes (not officially in Minecraft)
|
||||
# ============================================
|
||||
"&-/\n", # Line break
|
||||
"&~/\033[39m", # Reset text color
|
||||
"&*/\033[49m", # Reset background color
|
||||
"&L/\033[22m", # Disable bold text
|
||||
"&O/\033[23m", # Disable italic text
|
||||
"&N/\033[24m", # Disable underlined text
|
||||
"&K/\033[28m", # Disable hidden text
|
||||
"&M/\033[29m", # Disable strikethrough text
|
||||
|
||||
]
|
||||
MINECRAFT_COLORS = [(r[:2], r[3:]) for r in MINECRAFT_COLORS]
|
||||
|
||||
|
||||
@@ -217,3 +239,13 @@ class RGB:
|
||||
|
||||
def is_light(self):
|
||||
return self.hsl().l > 0.5
|
||||
|
||||
def overlay(self, color: 'RGB', alpha: float) -> 'RGB':
|
||||
"""
|
||||
Overlay a color on top of this color
|
||||
|
||||
:param color: Overlay color
|
||||
:param alpha: Overlay alpha
|
||||
:return: New color (original isn't modified)
|
||||
"""
|
||||
return RGB(*[round((1 - alpha) * v1 + alpha * v2) for v1, v2 in zip(self, color)])
|
||||
|
||||
@@ -5,9 +5,9 @@ from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
from .types import LightDark
|
||||
from .__version__ import VERSION
|
||||
|
||||
CONFIG_PATH = Path.home() / '.config/hyfetch.json'
|
||||
VERSION = '1.4.7'
|
||||
|
||||
|
||||
TEST_ASCII = r"""
|
||||
@@ -35,6 +35,7 @@ class GlobalConfig:
|
||||
override_distro: str | None
|
||||
debug: bool
|
||||
is_light: bool
|
||||
use_overlay: bool
|
||||
|
||||
def light_dark(self) -> LightDark:
|
||||
return 'light' if self.is_light else 'dark'
|
||||
@@ -45,6 +46,6 @@ class GlobalConfig:
|
||||
return 0.65 if term.lower() == 'dark' else 0.4
|
||||
|
||||
|
||||
GLOBAL_CFG = GlobalConfig(color_mode='8bit', override_distro=None, debug=False, is_light=False)
|
||||
GLOBAL_CFG = GlobalConfig(color_mode='8bit', override_distro=None, debug=False, is_light=False, use_overlay=False)
|
||||
|
||||
MINGIT_URL = 'https://github.com/git-for-windows/git/releases/download/v2.37.2.windows.2/MinGit-2.37.2.2-busybox-32-bit.zip'
|
||||
|
||||
@@ -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:
|
||||
:=-:` `-=+:
|
||||
""")
|
||||
|
||||
@@ -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} ⢰⡆
|
||||
⢠⣿⣿⡄
|
||||
⢀⣾⣿⣿⣿⡀
|
||||
⣼⣿⣿⣿⣿⣷⡀
|
||||
⣼⣿⣿⣿⣿⣿⣿⣷
|
||||
⢼⣿⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣰⣤⣈⠻⢿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣰⣿⣿⣿⣿⣮⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣼⣿⣿⣿⣿⣿⡿⣿⣿⡟ ⠸⣿⣿⡿⣿⣿⣿⣿⣿⣷⡀
|
||||
⣼⣿⣿⣿⣿⣿⡏ ⠈⣿⣿⣿⣿⣿⣷⡀
|
||||
⢀⣼⣿⣿⣿⣿⣿⣿⡗ ⢀⣠⣤⣀ ⠸⣿⣿⣿⣿⣿⣿⣷⡀
|
||||
⢀⣾⣿⣿⣿⣿⣿⡏⠁ ⢠⣿⣿⣿⣿⡇ ⢙⣿⣿⣻⠿⣿⣷⡀
|
||||
⢀⣾⣿⣿⣿⣿⣿⣿⣷⣤⡀ ⠻⣿⣿⡿⠃ ⢀⣼⣿⣿⣿⣿⣦⣌⠙
|
||||
⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏ ⢿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀
|
||||
⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁ ⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄
|
||||
⣠⣿⣿⣿⣿⠿⠛⠋⠁ ⠉⠙⠻⢿⣿⣿⣿⣿⣆
|
||||
⡰⠟⠛⠉⠁ ⠉⠙⠛⠿⢆
|
||||
""")
|
||||
|
||||
@@ -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
|
||||
""")
|
||||
|
||||
@@ -104,6 +104,14 @@ def detect(name: str) -> AsciiArt | None:
|
||||
from .apricity import apricity
|
||||
return apricity
|
||||
|
||||
if name.startswith('archcraft_ascii'):
|
||||
from .archcraft_ascii import archcraft_ascii
|
||||
return archcraft_ascii
|
||||
|
||||
if name.startswith('archcraft_minimal'):
|
||||
from .archcraft_minimal import archcraft_minimal
|
||||
return archcraft_minimal
|
||||
|
||||
if name.startswith('archcraft'):
|
||||
from .archcraft import archcraft
|
||||
return archcraft
|
||||
@@ -460,6 +468,10 @@ def detect(name: str) -> AsciiArt | None:
|
||||
from .feren import feren
|
||||
return feren
|
||||
|
||||
if name.startswith('femboyos'):
|
||||
from .femboyos import femboyos
|
||||
return femboyos
|
||||
|
||||
if name.startswith('finnix'):
|
||||
from .finnix import finnix
|
||||
return finnix
|
||||
@@ -792,6 +804,10 @@ def detect(name: str) -> AsciiArt | None:
|
||||
from .nixos import nixos
|
||||
return nixos
|
||||
|
||||
if name.startswith('nobara'):
|
||||
from .nobara import nobara
|
||||
return nobara
|
||||
|
||||
if name.startswith('nomadbsd'):
|
||||
from .nomadbsd import nomadbsd
|
||||
return nomadbsd
|
||||
@@ -920,6 +936,10 @@ def detect(name: str) -> AsciiArt | None:
|
||||
from .pisi import pisi
|
||||
return pisi
|
||||
|
||||
if name.startswith('pikaos'):
|
||||
from .pikaos import pikaos
|
||||
return pikaos
|
||||
|
||||
if name.startswith('pnm linux') or name.startswith('whpnm linux'):
|
||||
from .pnm_linux import pnm_linux
|
||||
return pnm_linux
|
||||
@@ -1044,6 +1064,10 @@ def detect(name: str) -> AsciiArt | None:
|
||||
from .rosa import rosa
|
||||
return rosa
|
||||
|
||||
if name.startswith('astra linux'):
|
||||
from .astra_linux import astra_linux
|
||||
return astra_linux
|
||||
|
||||
if name.startswith('sabotage'):
|
||||
from .sabotage import sabotage
|
||||
return sabotage
|
||||
@@ -1068,6 +1092,10 @@ def detect(name: str) -> AsciiArt | None:
|
||||
from .sasanqua import sasanqua
|
||||
return sasanqua
|
||||
|
||||
if name.startswith('salient os') or name.startswith('salientos') or name.startswith('salientos'):
|
||||
from .salient_os import salient_os
|
||||
return salient_os
|
||||
|
||||
if name.startswith('scientific'):
|
||||
from .scientific import scientific
|
||||
return scientific
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# This file is automatically generated. Please do not modify.
|
||||
|
||||
from . import AsciiArt
|
||||
|
||||
femboyos = AsciiArt(match=r'''"FemboyOS"*''', color='4', ascii=r"""
|
||||
${c1}MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMWKkxkKWMMMMMMMMMMMMMMMMMMMMWKkxkKWMM
|
||||
MMMMXo. .;xKWMMMMMMMMMMMMMMMMMMXo. .oXMM
|
||||
MMWXx,..'..oXMMMMMMMMMMMMMMMMWKx, .lXMM
|
||||
MMNo. .cOc.,xKWMMMMMMMMMMMMWXx;.....cXMM
|
||||
MMXl..;kKl. .oXMMMMMMMMMMWKx;..,ok:.'o0W
|
||||
WKx,.cKWNk;..lXMMMMMMMMWKx;..,o0NXl. .oN
|
||||
No. .lXMMWKc.,dKWMMMMMMNo..;d0NWMNx,..lX
|
||||
Nk:,:kNMMMNk:,ckNMMMMMMNxcxXWMMMMMN0ockN
|
||||
MWNNNWMMMMMWNNNWMMMMMMMMWWWMMMMMMMMMWWWM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMNXKXNWMMMMMMMMMMMWNKOKWMMMMMMMMMM
|
||||
MMMMMMWKdccxXMMMMMMMMMMW0o'.oXMMMMMMMMMM
|
||||
MMMMMMMNO:.'o0NKkkkkkOXXo. .lXMMMMMMMMMM
|
||||
MMMMMMMMNx,..;o;. .:o,..;kNMMMMMMMMMM
|
||||
MMMMMMMMMNO: ... .cKWMMMMMMMMMMM
|
||||
MMMMMMMMMMNx,. .;dk:. .;kNMMMMMMMMMMMM
|
||||
MMMMMMMMMMMN0ocxXWNkl:,:xXWMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMWNWMMMWWNNNWMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
""")
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# This file is automatically generated. Please do not modify.
|
||||
|
||||
from . import AsciiArt
|
||||
|
||||
nobara = AsciiArt(match=r'''"Nobara"*''', color='"#999999" "#d80a0a" "#e5b90b"', ascii=r"""
|
||||
${c1} ⢀⣤⣴⣶⣶⣶⣦⣤⡀⠀⣀⣠⣤⣴⣶⣶⣶⣶⣶⣶⣶⣶⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠉⠁⠀⠀⠉⠉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀${c3}⢀⣀⣀⡀${c1}⠀⠀⠀⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀${c3}⢠⣾⣿⣿⣿⣿⣷⡄${c1}⠀⠀⠀⠻⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀${c3}⣿⣿⣿⣿⣿⣿⣿⡇${c1}⠀⠀⠀⠀⠀⣀⣀⣬⣽⣿⣿⣿⣿⣿⣿⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀${c3}⠈⠻⢿⣿⣿⡿⠟⠁${c1}⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠉⠉⠛⠛⢿⣿⣿⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀
|
||||
${c2} ⠘⢿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀
|
||||
${c2} ⠈⠙⠛⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠛⠛⠉⠁
|
||||
""")
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# This file is automatically generated. Please do not modify.
|
||||
|
||||
from . import AsciiArt
|
||||
|
||||
pikaos = AsciiArt(match=r'''"PikaOS"*''', color='11', ascii=r"""
|
||||
${c1} /🐦🐦🐦$ /🐦/🐦 /🐦🐦🐦 /🐦🐦🐦
|
||||
| 🐦__ $|__| 🐦 /🐦__ 🐦/🐦__ 🐦
|
||||
| 🐦 \ 🐦/$| 🐦 /🐦 /🐦🐦🐦| 🐦 \ $| 🐦 \__/
|
||||
| 🐦🐦🐦$| $| 🐦 /🐦/|____ $| 🐦 | $| 🐦🐦🐦
|
||||
| 🐦____/| $| 🐦🐦🐦/ /🐦🐦🐦| 🐦 | 🐦\____ 🐦
|
||||
| 🐦 | $| 🐦_ 🐦 /🐦__ $| 🐦 | 🐦/🐦 \ 🐦
|
||||
| 🐦 | $| 🐦 \ $| 🐦🐦🐦| 🐦🐦🐦| 🐦🐦🐦/
|
||||
|__/ |__|__/ \__/\_______/\______/ \______/ .
|
||||
""")
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# This file is automatically generated. Please do not modify.
|
||||
|
||||
from . import AsciiArt
|
||||
|
||||
salient_os = AsciiArt(match=r'''"Salient OS"* | "SalientOS"* | "salientos"*''', color='6 6 7 1', ascii=r"""
|
||||
${c1} 00xxxx0
|
||||
00xxxxxx0
|
||||
0xxxxxxxxx 000000
|
||||
0xxxxxxxxxx xxxxxxxxxx0
|
||||
0xxxxxxxxxxx0 xxxxxxxxxxxxx0
|
||||
0xxxxxxxxxxxx0 0xxxxxxxxxxxxxx0
|
||||
0xxxxxxxxxxxxx0 0xxxxxxxxxxxxxxx0
|
||||
0xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx0
|
||||
xxxxxxxxxxxxxxxx0 0xxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxx 0xxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxx0 xxxxxxxxxxxxxx
|
||||
0xxxxxxxxxxxxxxxxxx0 0xxxxxxxxxxxx0
|
||||
0xxxxxxxxxxxxxxxxxx xxxxxxxxxxx0
|
||||
0xxxxxxxxxxxxxxxxx xxxxxxxxxx0
|
||||
0xxxxxxxxxxxxxxxx xxxxxxxxx0
|
||||
0xxxxxxxxxxxx0 0xxxxxxx0
|
||||
0xxxxxxx0 xxxxxx0
|
||||
0xxx00
|
||||
x00
|
||||
""")
|
||||
|
||||
+19
-17
@@ -4,22 +4,24 @@ from . import AsciiArt
|
||||
|
||||
vanilla = AsciiArt(match=r'''"Vanilla"*''', color='11 15', ascii=r"""
|
||||
${c1}
|
||||
.----:
|
||||
.-------.
|
||||
:---::----:
|
||||
.----::-----.
|
||||
......... :----::-----: ..:::-::::..
|
||||
.-----------------::------------------:
|
||||
----::-----------::----------::::---:
|
||||
-----:::--------::-------:::-------
|
||||
:------::::--::...:::::---------:
|
||||
.---------::.. ..:---------.
|
||||
.::-----::.. .::----::.
|
||||
.:------:.......:-------:
|
||||
.--------::::::::-:::-------.
|
||||
.-------::-----.:-----::------.
|
||||
-----::------: :------::-----
|
||||
:--::--------: .-------::---:
|
||||
:----------:: .:----------
|
||||
|
||||
.OO.
|
||||
.OOOO.
|
||||
.OO${c2}II${c1}OO.
|
||||
IOOO${c2}II${c1}OOOI
|
||||
.OOOO${c2}II${c1}OOOO.
|
||||
............IOOOO${c2}II${c1}OOOOI............
|
||||
OOOOOOOOOOOOOOOOOO${c2}II${c1}OOOOOOOOOOOOOOOOOO
|
||||
OOOO${c2}II${c1}OOOOOOOOOOO${c2}II${c1}OOOOOOOOOOO${c2}II${c1}OOOO
|
||||
OOOOO${c2}III${c1}OOOOOOOO${c2}II${c1}OOOOOOOO${c2}III${c1}OOOOO
|
||||
OOOOOOO${c2}IIII${c1}OO${c2}I....I${c1}OO${c2}IIII${c1}OOOOOOO
|
||||
OOOOOOOOOO${c2}II.. ..II${c1}OOOOOOOOOO
|
||||
OOOOOOO${c2}II. .II${c1}OOOOOOO
|
||||
OOOOOO${c2}II:......:II${c1}OOOOOO
|
||||
OOOOOOOOO${c2}IIIIIIII${c1}OOOOOOOOO
|
||||
OOOOOO${c2}II${c1}OOOOOOOOOOOO${c2}II${c1}OOOOOO
|
||||
OOOO${c2}II${c1}OOOOOOOI IOOOOOO${c2}II${c1}OOOO
|
||||
IOO${c2}II${c1}OOOOOOOO: :OOOOOOOO${c2}II${c1}OOI
|
||||
IOOOOOOOOOOII IIOOOOOOOOOOI
|
||||
""")
|
||||
|
||||
+65
-78
@@ -2,14 +2,14 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import datetime
|
||||
import json
|
||||
import random
|
||||
import traceback
|
||||
from itertools import permutations
|
||||
from math import ceil
|
||||
from typing import Iterable
|
||||
|
||||
from . import termenv, neofetch_util
|
||||
from . import termenv, neofetch_util, pride_month
|
||||
from .color_scale import Scale
|
||||
from .color_util import clear_screen
|
||||
from .constants import *
|
||||
@@ -34,50 +34,6 @@ def check_config(path) -> Config:
|
||||
return create_config()
|
||||
|
||||
|
||||
def literal_input(prompt: str, options: Iterable[str], default: str, show_ops: bool = True) -> str:
|
||||
"""
|
||||
Ask the user to provide an input among a list of options
|
||||
|
||||
:param prompt: Input prompt
|
||||
:param options: Options
|
||||
:param default: Default option
|
||||
:param show_ops: Show options
|
||||
:return: Selection
|
||||
"""
|
||||
options = list(options)
|
||||
lows = [o.lower() for o in options]
|
||||
|
||||
if show_ops:
|
||||
op_text = '|'.join([f'&l&n{o}&r' if o == default else o for o in options])
|
||||
printc(f'{prompt} ({op_text})')
|
||||
else:
|
||||
printc(f'{prompt} (default: {default})')
|
||||
|
||||
def find_selection(sel: str):
|
||||
if not sel:
|
||||
return None
|
||||
|
||||
# Find exact match
|
||||
if sel in lows:
|
||||
return options[lows.index(sel)]
|
||||
|
||||
# Find starting abbreviation
|
||||
for i, op in enumerate(lows):
|
||||
if op.startswith(sel):
|
||||
return options[i]
|
||||
|
||||
return None
|
||||
|
||||
selection = input('> ').lower() or default
|
||||
while not find_selection(selection):
|
||||
print(f'Invalid selection! {selection} is not one of {"|".join(options)}')
|
||||
selection = input('> ').lower() or default
|
||||
|
||||
print()
|
||||
|
||||
return find_selection(selection)
|
||||
|
||||
|
||||
def create_config() -> Config:
|
||||
"""
|
||||
Create config interactively
|
||||
@@ -90,7 +46,7 @@ def create_config() -> Config:
|
||||
|
||||
asc = get_distro_ascii()
|
||||
asc_width, asc_lines = ascii_size(asc)
|
||||
logo = color("&b&lhyfetch&r" if det_bg is None or det_bg.is_light() else "&b&lhy&f&lfetch&r")
|
||||
logo = color("&l&bhyfetch&~&L" if det_bg is None or det_bg.is_light() else "&l&bhy&ffetch&~&L")
|
||||
title = f'Welcome to {logo} Let\'s set up some colors first.'
|
||||
clear_screen(title)
|
||||
|
||||
@@ -100,7 +56,7 @@ def create_config() -> Config:
|
||||
nonlocal title, option_counter
|
||||
if not k.endswith(":"):
|
||||
k += ':'
|
||||
title += f"\n&e{option_counter}. {k.ljust(30)} &r{v}"
|
||||
title += f"\n&e{option_counter}. {k.ljust(30)} &~{v}"
|
||||
option_counter += 1
|
||||
|
||||
def print_title_prompt(prompt: str):
|
||||
@@ -110,10 +66,12 @@ def create_config() -> Config:
|
||||
# 0. Check term size
|
||||
try:
|
||||
term_len, term_lines = os.get_terminal_size().columns, os.get_terminal_size().lines
|
||||
if term_len < 2 * asc_width + 4 or term_lines < 30:
|
||||
term_len_min = 2 * asc_width + 4
|
||||
term_lines_min = 30
|
||||
if term_len < term_len_min or term_lines < term_lines_min:
|
||||
printc(f'&cWarning: Your terminal is too small ({term_len} * {term_lines}). \n'
|
||||
f'Please resize it for better experience.')
|
||||
input('Press any key to ignore...')
|
||||
f'Please resize it to at least ({term_len_min} * {term_lines_min}) for better experience.')
|
||||
input('Press enter to ignore...')
|
||||
except:
|
||||
# print('Warning: We cannot detect your terminal size.')
|
||||
pass
|
||||
@@ -153,7 +111,7 @@ def create_config() -> Config:
|
||||
return det_bg.is_light(), 'Detected background color'
|
||||
|
||||
clear_screen(title)
|
||||
inp = literal_input(f'2. Is your terminal in &blight mode&r or &4dark mode&r?',
|
||||
inp = literal_input(f'2. Is your terminal in &blight mode&~ or &4dark mode&~?',
|
||||
['light', 'dark'], 'dark')
|
||||
return inp == 'light', 'Selected background color'
|
||||
|
||||
@@ -341,6 +299,36 @@ def create_config() -> Config:
|
||||
return c
|
||||
|
||||
|
||||
def create_parser() -> argparse.ArgumentParser:
|
||||
# Create CLI
|
||||
hyfetch = color('&l&bhyfetch&~&L')
|
||||
parser = argparse.ArgumentParser(description=color(f'{hyfetch} - neofetch with flags <3'), prog="hyfetch")
|
||||
|
||||
parser.add_argument('-c', '--config', action='store_true', help=color(f'Configure hyfetch'))
|
||||
parser.add_argument('-C', '--config-file', dest='config_file', default=CONFIG_PATH, help=f'Use another config file')
|
||||
parser.add_argument('-p', '--preset', help=f'Use preset', choices=list(PRESETS.keys()))
|
||||
parser.add_argument('-m', '--mode', help=f'Color mode', choices=['8bit', 'rgb'])
|
||||
parser.add_argument('-b', '--backend', help=f'Choose a *fetch backend', choices=['neofetch', 'fastfetch', 'fastfetch-old'])
|
||||
parser.add_argument('--args', help=f'Additional arguments pass-through to backend')
|
||||
parser.add_argument('--c-scale', dest='scale', help=f'Lighten colors by a multiplier', type=float)
|
||||
parser.add_argument('--c-set-l', dest='light', help=f'Set lightness value of the colors', type=float)
|
||||
parser.add_argument('--c-overlay', action='store_true', dest='overlay', help=f'Use experimental overlay color adjusting instead of HSL lightness')
|
||||
parser.add_argument('-V', '--version', dest='version', action='store_true', help=f'Check version')
|
||||
parser.add_argument('--june', action='store_true', help=f'Show pride month easter egg')
|
||||
parser.add_argument('--debug', action='store_true', help=f'Debug mode')
|
||||
|
||||
parser.add_argument('--distro', '--test-distro', dest='distro', help=f'Test for a specific distro')
|
||||
parser.add_argument('--ascii-file', help='Use a specific file for the ascii art')
|
||||
|
||||
# Hidden debug arguments
|
||||
# --test-print: Print the ascii distro and exit
|
||||
parser.add_argument('--test-print', action='store_true', help=argparse.SUPPRESS)
|
||||
# --ask-exit: Ask for input before exiting
|
||||
parser.add_argument('--ask-exit', action='store_true', help=argparse.SUPPRESS)
|
||||
|
||||
return parser
|
||||
|
||||
|
||||
def run():
|
||||
# Optional: Import readline
|
||||
try:
|
||||
@@ -353,29 +341,13 @@ def run():
|
||||
import colorama
|
||||
colorama.just_fix_windows_console()
|
||||
|
||||
# Create CLI
|
||||
hyfetch = color('&b&lhyfetch&r')
|
||||
parser = argparse.ArgumentParser(description=color(f'{hyfetch} - neofetch with flags <3'))
|
||||
|
||||
parser.add_argument('-c', '--config', action='store_true', help=color(f'Configure {hyfetch}'))
|
||||
parser.add_argument('-C', '--config-file', dest='config_file', default=CONFIG_PATH, help=f'Use another config file')
|
||||
parser.add_argument('-p', '--preset', help=f'Use preset', choices=PRESETS.keys())
|
||||
parser.add_argument('-m', '--mode', help=f'Color mode', choices=['8bit', 'rgb'])
|
||||
parser.add_argument('-b', '--backend', help=f'Choose a *fetch backend', choices=['neofetch', 'fastfetch', 'fastfetch-old'])
|
||||
parser.add_argument('--c-scale', dest='scale', help=f'Lighten colors by a multiplier', type=float)
|
||||
parser.add_argument('--c-set-l', dest='light', help=f'Set lightness value of the colors', type=float)
|
||||
parser.add_argument('-V', '--version', dest='version', action='store_true', help=f'Check version')
|
||||
parser.add_argument('--debug', action='store_true', help=f'Debug mode')
|
||||
parser.add_argument('--distro', '--test-distro', dest='distro', help=f'Test for a specific distro')
|
||||
|
||||
# Hidden debug arguments
|
||||
# --test-print: Print the ascii distro and exit
|
||||
parser.add_argument('--test-print', action='store_true', help=argparse.SUPPRESS)
|
||||
# --ask-exit: Ask for input before exiting
|
||||
parser.add_argument('--ask-exit', action='store_true', help=argparse.SUPPRESS)
|
||||
|
||||
parser = create_parser()
|
||||
args = parser.parse_args()
|
||||
|
||||
# Use a custom distro
|
||||
GLOBAL_CFG.override_distro = args.distro
|
||||
GLOBAL_CFG.use_overlay = args.overlay
|
||||
|
||||
if args.version:
|
||||
print(f'Version is {VERSION}')
|
||||
return
|
||||
@@ -384,10 +356,6 @@ def run():
|
||||
ensure_git_bash()
|
||||
check_windows_cmd()
|
||||
|
||||
# Use a custom distro
|
||||
if args.distro:
|
||||
GLOBAL_CFG.override_distro = args.distro
|
||||
|
||||
if args.debug:
|
||||
GLOBAL_CFG.debug = True
|
||||
|
||||
@@ -406,6 +374,23 @@ def run():
|
||||
# Load config or create config
|
||||
config = create_config() if args.config else check_config(args.config_file)
|
||||
|
||||
# Check if it's June (pride month)
|
||||
now = datetime.datetime.now()
|
||||
if now.month == 6 and now.year not in config.pride_month_shown and os.isatty(sys.stdout.fileno()):
|
||||
args.june = True
|
||||
|
||||
if args.june:
|
||||
pride_month.start_animation()
|
||||
print()
|
||||
print("Happy pride month!")
|
||||
print("(You can always view the animation again with `hyfetch --june`)")
|
||||
print()
|
||||
config.pride_month_shown.append(now.year)
|
||||
config.save()
|
||||
|
||||
# Use a custom distro
|
||||
GLOBAL_CFG.override_distro = args.distro or config.distro
|
||||
|
||||
# Param overwrite config
|
||||
if args.preset:
|
||||
config.preset = args.preset
|
||||
@@ -431,7 +416,9 @@ def run():
|
||||
|
||||
# Run
|
||||
try:
|
||||
neofetch_util.run(preset, config.color_align, config.backend)
|
||||
asc = get_distro_ascii() if not args.ascii_file else Path(args.ascii_file).read_text("utf-8")
|
||||
asc = config.color_align.recolor_ascii(asc, preset)
|
||||
neofetch_util.run(asc, config.backend, args.args or '')
|
||||
except Exception as e:
|
||||
print(f'Error: {e}')
|
||||
traceback.print_exc()
|
||||
|
||||
@@ -16,6 +16,8 @@ class Config:
|
||||
lightness: float | None = None
|
||||
color_align: ColorAlignment = field(default_factory=lambda: ColorAlignment('horizontal'))
|
||||
backend: BackendLiteral = "neofetch"
|
||||
distro: str | None = None
|
||||
pride_month_shown: list[int] = field(default_factory=list)
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, d: dict):
|
||||
|
||||
+74
-31
@@ -12,6 +12,7 @@ from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from subprocess import check_output
|
||||
from tempfile import TemporaryDirectory
|
||||
from typing import Iterable
|
||||
|
||||
import pkg_resources
|
||||
|
||||
@@ -25,6 +26,50 @@ from .types import BackendLiteral, ColorAlignMode
|
||||
RE_NEOFETCH_COLOR = re.compile('\\${c[0-9]}')
|
||||
|
||||
|
||||
def literal_input(prompt: str, options: Iterable[str], default: str, show_ops: bool = True) -> str:
|
||||
"""
|
||||
Ask the user to provide an input among a list of options
|
||||
|
||||
:param prompt: Input prompt
|
||||
:param options: Options
|
||||
:param default: Default option
|
||||
:param show_ops: Show options
|
||||
:return: Selection
|
||||
"""
|
||||
options = list(options)
|
||||
lows = [o.lower() for o in options]
|
||||
|
||||
if show_ops:
|
||||
op_text = '|'.join([f'&l&n{o}&L&N' if o == default else o for o in options])
|
||||
printc(f'{prompt} ({op_text})')
|
||||
else:
|
||||
printc(f'{prompt} (default: {default})')
|
||||
|
||||
def find_selection(sel: str):
|
||||
if not sel:
|
||||
return None
|
||||
|
||||
# Find exact match
|
||||
if sel in lows:
|
||||
return options[lows.index(sel)]
|
||||
|
||||
# Find starting abbreviation
|
||||
for i, op in enumerate(lows):
|
||||
if op.startswith(sel):
|
||||
return options[i]
|
||||
|
||||
return None
|
||||
|
||||
selection = input('> ').lower() or default
|
||||
while not find_selection(selection):
|
||||
print(f'Invalid selection! {selection} is not one of {"|".join(options)}')
|
||||
selection = input('> ').lower() or default
|
||||
|
||||
print()
|
||||
|
||||
return find_selection(selection)
|
||||
|
||||
|
||||
def term_size() -> tuple[int, int]:
|
||||
"""
|
||||
Get terminal size
|
||||
@@ -106,7 +151,7 @@ class ColorAlignment:
|
||||
# Add new colors
|
||||
if self.mode == 'horizontal':
|
||||
colors = preset.with_length(len(lines))
|
||||
asc = '\n'.join([l.replace(f'${{c{back}}}', colors[i].to_ansi()) + color('&r') for i, l in enumerate(lines)])
|
||||
asc = '\n'.join([l.replace(f'${{c{back}}}', colors[i].to_ansi()) + color('&~&*') for i, l in enumerate(lines)])
|
||||
else:
|
||||
raise NotImplementedError()
|
||||
|
||||
@@ -121,9 +166,9 @@ class ColorAlignment:
|
||||
# Add new colors
|
||||
if self.mode == 'horizontal':
|
||||
colors = preset.with_length(len(lines))
|
||||
asc = '\n'.join([colors[i].to_ansi() + l + color('&r') for i, l in enumerate(lines)])
|
||||
asc = '\n'.join([colors[i].to_ansi() + l + color('&~&*') for i, l in enumerate(lines)])
|
||||
else:
|
||||
asc = '\n'.join(preset.color_text(line) + color('&r') for line in lines)
|
||||
asc = '\n'.join(preset.color_text(line) + color('&~&*') for line in lines)
|
||||
|
||||
else:
|
||||
preset = preset.unique_colors()
|
||||
@@ -185,7 +230,7 @@ def ensure_git_bash() -> Path:
|
||||
return def_path
|
||||
|
||||
# Detect third-party git.exe in path
|
||||
git_exe = shutil.which("git.exe") or shutil.which("git")
|
||||
git_exe = shutil.which("bash") or shutil.which("git.exe") or shutil.which("git")
|
||||
if git_exe is not None:
|
||||
pth = Path(git_exe).parent
|
||||
if (pth / r'bash.exe').is_file():
|
||||
@@ -207,14 +252,17 @@ def ensure_git_bash() -> Path:
|
||||
|
||||
# No installation found, download a portable installation
|
||||
print('Git installation not found. Git is required to use HyFetch/neofetch on Windows')
|
||||
print('Downloading a minimal portable package for Git...')
|
||||
from urllib.request import urlretrieve
|
||||
urlretrieve(MINGIT_URL, pkg_path)
|
||||
print('Download finished! Extracting...')
|
||||
with zipfile.ZipFile(pkg_path, 'r') as zip_ref:
|
||||
zip_ref.extractall(path)
|
||||
print('Done!')
|
||||
return path / r'bin\bash.exe'
|
||||
if literal_input('Would you like to install a minimal package for Git? (if no is selected colors almost certianly won\'t work)', ['yes', 'no'], 'yes', False) == 'yes':
|
||||
print('Downloading a minimal portable package for Git...')
|
||||
from urllib.request import urlretrieve
|
||||
urlretrieve(MINGIT_URL, pkg_path)
|
||||
print('Download finished! Extracting...')
|
||||
with zipfile.ZipFile(pkg_path, 'r') as zip_ref:
|
||||
zip_ref.extractall(path)
|
||||
print('Done!')
|
||||
return path / r'bin\bash.exe'
|
||||
else:
|
||||
sys.exit()
|
||||
|
||||
|
||||
def check_windows_cmd():
|
||||
@@ -290,25 +338,22 @@ def get_distro_name():
|
||||
return run_neofetch_cmd('ascii_distro_name', True)
|
||||
|
||||
|
||||
def run(preset: ColorProfile, alignment: ColorAlignment, backend: BackendLiteral):
|
||||
def run(asc: str, backend: BackendLiteral, args: str = ''):
|
||||
if backend == "neofetch":
|
||||
return run_neofetch(preset, alignment)
|
||||
return run_neofetch(asc, args)
|
||||
if backend == "fastfetch":
|
||||
return run_fastfetch(preset, alignment)
|
||||
return run_fastfetch(asc, args)
|
||||
if backend == "fastfetch-old":
|
||||
return run_fastfetch(preset, alignment, legacy=True)
|
||||
return run_fastfetch(asc, args, legacy=True)
|
||||
|
||||
|
||||
def run_neofetch(preset: ColorProfile, alignment: ColorAlignment):
|
||||
def run_neofetch(asc: str, args: str = ''):
|
||||
"""
|
||||
Run neofetch with colors
|
||||
|
||||
:param preset: Color palette
|
||||
:param alignment: Color alignment settings
|
||||
:param asc: Ascii art
|
||||
:param args: Additional arguments to pass to neofetch
|
||||
"""
|
||||
asc = get_distro_ascii()
|
||||
asc = alignment.recolor_ascii(asc, preset)
|
||||
|
||||
# Escape backslashes here because backslashes are escaped in neofetch for printf
|
||||
asc = asc.replace('\\', '\\\\')
|
||||
|
||||
@@ -319,20 +364,19 @@ def run_neofetch(preset: ColorProfile, alignment: ColorAlignment):
|
||||
path.write_text(asc)
|
||||
|
||||
# Call neofetch with the temp file
|
||||
run_neofetch_cmd(f'--ascii --source {path.absolute()} --ascii-colors')
|
||||
if args:
|
||||
args = ' ' + args
|
||||
run_neofetch_cmd(f'--ascii --source {path.absolute()} --ascii-colors' + args)
|
||||
|
||||
|
||||
def run_fastfetch(preset: ColorProfile, alignment: ColorAlignment, legacy: bool = False):
|
||||
def run_fastfetch(asc: str, args: str = '', legacy: bool = False):
|
||||
"""
|
||||
Run neofetch with colors
|
||||
|
||||
:param preset: Color palette
|
||||
:param alignment: Color alignment settings
|
||||
:param asc: Ascii art
|
||||
:param args: Additional arguments to pass to fastfetch
|
||||
:param legacy: Set true when using fastfetch < 1.8.0
|
||||
"""
|
||||
asc = get_distro_ascii()
|
||||
asc = alignment.recolor_ascii(asc, preset)
|
||||
|
||||
# Write temp file
|
||||
with TemporaryDirectory() as tmp_dir:
|
||||
tmp_dir = Path(tmp_dir)
|
||||
@@ -340,7 +384,7 @@ def run_fastfetch(preset: ColorProfile, alignment: ColorAlignment, legacy: bool
|
||||
path.write_text(asc)
|
||||
|
||||
# Call fastfetch with the temp file
|
||||
proc = subprocess.run(['fastfetch', '--raw' if legacy else '--file-raw', path.absolute()])
|
||||
proc = subprocess.run(['fastfetch', '--raw' if legacy else '--file-raw', path.absolute(), *shlex.split(args)])
|
||||
if proc.returncode == 144:
|
||||
printc("&6Error code 144 detected: Please upgrade fastfetch to >=1.8.0 or use the 'fastfetch-old' backend")
|
||||
|
||||
@@ -366,7 +410,6 @@ def get_fore_back(distro: str | None = None) -> tuple[int, int] | None:
|
||||
# Foreground-background recommendation
|
||||
fore_back = {
|
||||
'fedora': (2, 1),
|
||||
'ubuntu': (2, 1),
|
||||
'kubuntu': (2, 1),
|
||||
'lubuntu': (2, 1),
|
||||
'xubuntu': (2, 1),
|
||||
|
||||
+46
-35
@@ -83,12 +83,12 @@ class ColorProfile:
|
||||
for i, t in enumerate(txt):
|
||||
if space_only and t != ' ':
|
||||
if i > 0 and txt[i - 1] == ' ':
|
||||
result += '\033[0m'
|
||||
result += '\033[39;49m'
|
||||
result += t
|
||||
else:
|
||||
result += colors[i].to_ansi(foreground=foreground) + t
|
||||
|
||||
result += '\033[0m'
|
||||
result += '\033[39;49m'
|
||||
return result
|
||||
|
||||
def lighten(self, multiplier: float) -> ColorProfile:
|
||||
@@ -119,11 +119,35 @@ class ColorProfile:
|
||||
:param term: Terminal color (can be "dark" or "light")
|
||||
:return: New color profile (original isn't modified)
|
||||
"""
|
||||
if GLOBAL_CFG.use_overlay:
|
||||
return self.overlay_dl(light, term)
|
||||
|
||||
term = term or GLOBAL_CFG.light_dark()
|
||||
assert term.lower() in ['light', 'dark']
|
||||
at_least, at_most = (True, None) if term.lower() == 'dark' else (None, True)
|
||||
return self.set_light_raw(light, at_least, at_most)
|
||||
|
||||
def overlay_raw(self, color: RGB, alpha: float) -> 'ColorProfile':
|
||||
"""
|
||||
Overlay a color on top of the color profile
|
||||
|
||||
:param color: Color to overlay
|
||||
:param alpha: Alpha value (0-1)
|
||||
:return: New color profile (original isn't modified)
|
||||
"""
|
||||
return ColorProfile([c.overlay(color, alpha) for c in self.colors])
|
||||
|
||||
def overlay_dl(self, light: float, term: LightDark | None = None):
|
||||
"""
|
||||
Same as set_light_dl except that this function uses RGB overlaying instead of HSL lightness change
|
||||
"""
|
||||
term = term or GLOBAL_CFG.light_dark()
|
||||
assert term.lower() in ['light', 'dark']
|
||||
|
||||
# If it's light bg, overlay black, else overlay white
|
||||
overlay_color = RGB.from_hex('#000000' if term.lower() == 'light' else '#FFFFFF')
|
||||
return self.overlay_raw(overlay_color, abs(light - 0.5) * 2)
|
||||
|
||||
def set_light_dl_def(self, term: LightDark | None = None):
|
||||
"""
|
||||
Set default lightness with respect to dark/light terminals
|
||||
@@ -216,6 +240,14 @@ PRESETS: dict[str, ColorProfile] = {
|
||||
'#8EA6FF',
|
||||
]),
|
||||
|
||||
'omniromantic': ColorProfile([
|
||||
'#FEC8E4',
|
||||
'#FDA1DB',
|
||||
'#89739A',
|
||||
'#ABA7FE',
|
||||
'#BFCEFF',
|
||||
]),
|
||||
|
||||
# gay men sourced from https://www.flagcolorcodes.com/gay-men
|
||||
'gay-men': ColorProfile([
|
||||
'#078D70',
|
||||
@@ -470,53 +502,22 @@ PRESETS: dict[str, ColorProfile] = {
|
||||
'autoromantic': ColorProfile([ # symbol interpreted
|
||||
'#99D9EA',
|
||||
'#99D9EA',
|
||||
'#99D9EA',
|
||||
'#99D9EA',
|
||||
'#99D9EA',
|
||||
'#000000',
|
||||
'#3DA542',
|
||||
'#3DA542',
|
||||
'#000000',
|
||||
'#7F7F7F',
|
||||
'#7F7F7F',
|
||||
'#7F7F7F',
|
||||
'#7F7F7F',
|
||||
'#7F7F7F',
|
||||
]),
|
||||
|
||||
# i didn't expect this one to work. cool!
|
||||
'boyflux2': ColorProfile([
|
||||
'boyflux2': ColorProfile(ColorProfile([
|
||||
'#E48AE4',
|
||||
'#9A81B4',
|
||||
'#55BFAB',
|
||||
'#FFFFFF',
|
||||
'#A8A8A8',
|
||||
'#81D5EF',
|
||||
'#81D5EF',
|
||||
'#81D5EF',
|
||||
'#81D5EF',
|
||||
'#81D5EF',
|
||||
'#69ABE5',
|
||||
'#69ABE5',
|
||||
'#69ABE5',
|
||||
'#69ABE5',
|
||||
'#69ABE5',
|
||||
'#69ABE5',
|
||||
'#69ABE5',
|
||||
'#69ABE5',
|
||||
'#69ABE5',
|
||||
'#69ABE5',
|
||||
'#5276D4',
|
||||
'#5276D4',
|
||||
'#5276D4',
|
||||
'#5276D4',
|
||||
'#5276D4',
|
||||
'#5276D4',
|
||||
'#5276D4',
|
||||
'#5276D4',
|
||||
'#5276D4',
|
||||
'#5276D4',
|
||||
]),
|
||||
]).with_weights([1, 1, 1, 1, 1, 5, 5, 5])),
|
||||
|
||||
"finsexual": ColorProfile([
|
||||
"#B18EDF",
|
||||
@@ -542,6 +543,16 @@ PRESETS: dict[str, ColorProfile] = {
|
||||
'#7D2557'
|
||||
]),
|
||||
|
||||
'pangender': ColorProfile([
|
||||
'#FFF798',
|
||||
'#FEDDCD',
|
||||
'#FFEBFB',
|
||||
'#FFFFFF',
|
||||
'#FFEBFB',
|
||||
'#FEDDCD',
|
||||
'#FFF798',
|
||||
]),
|
||||
|
||||
'gendernonconforming1': ColorProfile(
|
||||
ColorProfile([
|
||||
'#50284d',
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
import math
|
||||
from time import sleep
|
||||
|
||||
from hyfetch import presets
|
||||
from hyfetch.color_util import RGB, color, printc
|
||||
from hyfetch.constants import IS_WINDOWS
|
||||
from hyfetch.neofetch_util import term_size
|
||||
from hyfetch.presets import PRESETS
|
||||
|
||||
|
||||
def key_pressed():
|
||||
if IS_WINDOWS:
|
||||
import msvcrt
|
||||
return msvcrt.kbhit() # Non-blocking check for key press
|
||||
else:
|
||||
import select
|
||||
import sys
|
||||
return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], [])
|
||||
|
||||
|
||||
def start_animation():
|
||||
text = r"""
|
||||
.======================================================.
|
||||
| . . .__ . . . , . | |
|
||||
| |__| _.._ ._ . [__)._.* _| _ |\/| _ ._ -+-|_ | |
|
||||
| | |(_][_)[_)\_| | [ |(_](/, | |(_)[ ) | [ ) * |
|
||||
| | | ._| |
|
||||
'======================================================'""".strip("\n")
|
||||
text_lines = text.split("\n")
|
||||
text_height = len(text_lines)
|
||||
text_width = len(text_lines[0])
|
||||
|
||||
notice = "Press enter to continue"
|
||||
|
||||
speed = 2
|
||||
frame_delay = 1 / 25
|
||||
|
||||
colors: list[RGB] = []
|
||||
frame = 0
|
||||
|
||||
w, h = term_size()
|
||||
blocks = 9
|
||||
block_width = w // blocks
|
||||
|
||||
text_start_y = h // 2 - text_height // 2
|
||||
text_end_y = text_start_y + text_height
|
||||
text_start_x = w // 2 - text_width // 2
|
||||
text_end_x = text_start_x + text_width
|
||||
|
||||
notice_start_x = w - len(notice) - 1
|
||||
notice_end_x = w - 1
|
||||
notice_y = h - 1
|
||||
|
||||
# Add everything in PRESETS to colors
|
||||
colors = [c for preset in PRESETS.values() for c in preset.colors]
|
||||
|
||||
black = RGB(0, 0, 0)
|
||||
fg = RGB.from_hex("#FFE09B")
|
||||
|
||||
def draw_frame():
|
||||
buf = ""
|
||||
|
||||
# Loop over the height
|
||||
for y in range(h):
|
||||
# Print the starting color
|
||||
buf += colors[((frame + y) // block_width) % len(colors)].to_ansi_rgb(foreground=False)
|
||||
buf += fg.to_ansi_rgb(foreground=True)
|
||||
|
||||
# Loop over the width
|
||||
x = 0
|
||||
while x < w:
|
||||
idx = frame + x + y + int(math.sin(y + 0.5 * frame) * 2)
|
||||
y_text = text_start_y <= y < text_end_y
|
||||
|
||||
border = 1 + int(not (y == text_start_y or y == text_end_y - 1))
|
||||
|
||||
# If it's a switching point
|
||||
if idx % block_width == 0 or x == text_start_x - border or x == text_end_x + border \
|
||||
or x == notice_start_x - 1 or x == notice_end_x + 1:
|
||||
# Print the color at the current frame
|
||||
c = colors[(idx // block_width) % len(colors)]
|
||||
if (y_text and text_start_x - border <= x < text_end_x + border) \
|
||||
or (y == notice_y and notice_start_x - 1 <= x < notice_end_x + 1):
|
||||
# buf += c.set_light(0.3).to_ansi_rgb(foreground=False)
|
||||
buf += c.overlay(black, 0.5).to_ansi_rgb(foreground=False)
|
||||
else:
|
||||
buf += c.to_ansi_rgb(foreground=False)
|
||||
|
||||
# If text should be printed, print text
|
||||
if y_text and text_start_x <= x < text_end_x:
|
||||
# Add white background
|
||||
buf += text_lines[y - text_start_y][x - text_start_x]
|
||||
elif y == notice_y and notice_start_x <= x < notice_end_x:
|
||||
buf += notice[x - notice_start_x]
|
||||
else:
|
||||
buf += ' '
|
||||
|
||||
x += 1
|
||||
|
||||
# New line if it isn't the last line
|
||||
if y != h - 1:
|
||||
buf += color('&r\n')
|
||||
|
||||
print(buf, end='', flush=True)
|
||||
|
||||
try:
|
||||
while 1:
|
||||
# Clear the screen
|
||||
print("\033[2J\033[H", end="")
|
||||
draw_frame()
|
||||
frame += speed
|
||||
sleep(frame_delay)
|
||||
|
||||
if key_pressed():
|
||||
break
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
|
||||
# Clear the screen
|
||||
printc("&r")
|
||||
print("\033[2J\033[H", end="", flush=True)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
start_animation()
|
||||
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
# AUTOMATICALLY GENERATED by `shtab`
|
||||
|
||||
|
||||
|
||||
_shtab_hyfetch_option_strings=('-h' '--help' '-c' '--config' '-C' '--config-file' '-p' '--preset' '-m' '--mode' '-b' '--backend' '--c-scale' '--c-set-l' '-V' '--version' '--debug' '--distro' '--test-distro' '--ascii-file')
|
||||
|
||||
|
||||
|
||||
_shtab_hyfetch__p_choices=('rainbow' 'transgender' 'nonbinary' 'agender' 'queer' 'genderfluid' 'bisexual' 'pansexual' 'polysexual' 'omnisexual' 'omniromantic' 'gay-men' 'lesbian' 'abrosexual' 'asexual' 'aromantic' 'aroace1' 'aroace2' 'aroace3' 'autosexual' 'intergender' 'greygender' 'akiosexual' 'bigender' 'demigender' 'demiboy' 'demigirl' 'transmasculine' 'transfeminine' 'genderfaun' 'demifaun' 'genderfae' 'demifae' 'neutrois' 'biromantic1' 'biromantic2' 'autoromantic' 'boyflux2' 'finsexual' 'unlabeled1' 'unlabeled2' 'pangender' 'gendernonconforming1' 'gendernonconforming2' 'femboy' 'tomboy' 'gendervoid' 'voidgirl' 'voidboy' 'beiyang' 'burger')
|
||||
_shtab_hyfetch___preset_choices=('rainbow' 'transgender' 'nonbinary' 'agender' 'queer' 'genderfluid' 'bisexual' 'pansexual' 'polysexual' 'omnisexual' 'omniromantic' 'gay-men' 'lesbian' 'abrosexual' 'asexual' 'aromantic' 'aroace1' 'aroace2' 'aroace3' 'autosexual' 'intergender' 'greygender' 'akiosexual' 'bigender' 'demigender' 'demiboy' 'demigirl' 'transmasculine' 'transfeminine' 'genderfaun' 'demifaun' 'genderfae' 'demifae' 'neutrois' 'biromantic1' 'biromantic2' 'autoromantic' 'boyflux2' 'finsexual' 'unlabeled1' 'unlabeled2' 'pangender' 'gendernonconforming1' 'gendernonconforming2' 'femboy' 'tomboy' 'gendervoid' 'voidgirl' 'voidboy' 'beiyang' 'burger')
|
||||
_shtab_hyfetch__m_choices=('8bit' 'rgb')
|
||||
_shtab_hyfetch___mode_choices=('8bit' 'rgb')
|
||||
_shtab_hyfetch__b_choices=('neofetch' 'fastfetch' 'fastfetch-old')
|
||||
_shtab_hyfetch___backend_choices=('neofetch' 'fastfetch' 'fastfetch-old')
|
||||
|
||||
_shtab_hyfetch__h_nargs=0
|
||||
_shtab_hyfetch___help_nargs=0
|
||||
_shtab_hyfetch__c_nargs=0
|
||||
_shtab_hyfetch___config_nargs=0
|
||||
_shtab_hyfetch__V_nargs=0
|
||||
_shtab_hyfetch___version_nargs=0
|
||||
_shtab_hyfetch___debug_nargs=0
|
||||
_shtab_hyfetch___test_print_nargs=0
|
||||
_shtab_hyfetch___ask_exit_nargs=0
|
||||
|
||||
|
||||
# $1=COMP_WORDS[1]
|
||||
_shtab_compgen_files() {
|
||||
compgen -f -- $1 # files
|
||||
}
|
||||
|
||||
# $1=COMP_WORDS[1]
|
||||
_shtab_compgen_dirs() {
|
||||
compgen -d -- $1 # recurse into subdirs
|
||||
}
|
||||
|
||||
# $1=COMP_WORDS[1]
|
||||
_shtab_replace_nonword() {
|
||||
echo "${1//[^[:word:]]/_}"
|
||||
}
|
||||
|
||||
# set default values (called for the initial parser & any subparsers)
|
||||
_set_parser_defaults() {
|
||||
local subparsers_var="${prefix}_subparsers[@]"
|
||||
sub_parsers=${!subparsers_var}
|
||||
|
||||
local current_option_strings_var="${prefix}_option_strings[@]"
|
||||
current_option_strings=${!current_option_strings_var}
|
||||
|
||||
completed_positional_actions=0
|
||||
|
||||
_set_new_action "pos_${completed_positional_actions}" true
|
||||
}
|
||||
|
||||
# $1=action identifier
|
||||
# $2=positional action (bool)
|
||||
# set all identifiers for an action's parameters
|
||||
_set_new_action() {
|
||||
current_action="${prefix}_$(_shtab_replace_nonword $1)"
|
||||
|
||||
local current_action_compgen_var=${current_action}_COMPGEN
|
||||
current_action_compgen="${!current_action_compgen_var}"
|
||||
|
||||
local current_action_choices_var="${current_action}_choices[@]"
|
||||
current_action_choices="${!current_action_choices_var}"
|
||||
|
||||
local current_action_nargs_var="${current_action}_nargs"
|
||||
if [ -n "${!current_action_nargs_var}" ]; then
|
||||
current_action_nargs="${!current_action_nargs_var}"
|
||||
else
|
||||
current_action_nargs=1
|
||||
fi
|
||||
|
||||
current_action_args_start_index=$(( $word_index + 1 ))
|
||||
|
||||
current_action_is_positional=$2
|
||||
}
|
||||
|
||||
# Notes:
|
||||
# `COMPREPLY`: what will be rendered after completion is triggered
|
||||
# `completing_word`: currently typed word to generate completions for
|
||||
# `${!var}`: evaluates the content of `var` and expand its content as a variable
|
||||
# hello="world"
|
||||
# x="hello"
|
||||
# ${!x} -> ${hello} -> "world"
|
||||
_shtab_hyfetch() {
|
||||
local completing_word="${COMP_WORDS[COMP_CWORD]}"
|
||||
COMPREPLY=()
|
||||
|
||||
prefix=_shtab_hyfetch
|
||||
word_index=0
|
||||
_set_parser_defaults
|
||||
word_index=1
|
||||
|
||||
# determine what arguments are appropriate for the current state
|
||||
# of the arg parser
|
||||
while [ $word_index -ne $COMP_CWORD ]; do
|
||||
local this_word="${COMP_WORDS[$word_index]}"
|
||||
|
||||
if [[ -n $sub_parsers && " ${sub_parsers[@]} " =~ " ${this_word} " ]]; then
|
||||
# valid subcommand: add it to the prefix & reset the current action
|
||||
prefix="${prefix}_$(_shtab_replace_nonword $this_word)"
|
||||
_set_parser_defaults
|
||||
fi
|
||||
|
||||
if [[ " ${current_option_strings[@]} " =~ " ${this_word} " ]]; then
|
||||
# a new action should be acquired (due to recognised option string or
|
||||
# no more input expected from current action);
|
||||
# the next positional action can fill in here
|
||||
_set_new_action $this_word false
|
||||
fi
|
||||
|
||||
if [[ "$current_action_nargs" != "*" ]] && \
|
||||
[[ "$current_action_nargs" != "+" ]] && \
|
||||
[[ "$current_action_nargs" != *"..." ]] && \
|
||||
(( $word_index + 1 - $current_action_args_start_index >= \
|
||||
$current_action_nargs )); then
|
||||
$current_action_is_positional && let "completed_positional_actions += 1"
|
||||
_set_new_action "pos_${completed_positional_actions}" true
|
||||
fi
|
||||
|
||||
let "word_index+=1"
|
||||
done
|
||||
|
||||
# Generate the completions
|
||||
|
||||
if [[ "${completing_word}" == -* ]]; then
|
||||
# optional argument started: use option strings
|
||||
COMPREPLY=( $(compgen -W "${current_option_strings[*]}" -- "${completing_word}") )
|
||||
else
|
||||
# use choices & compgen
|
||||
local IFS=$'\n' # items may contain spaces, so delimit using newline
|
||||
COMPREPLY=( $([ -n "${current_action_compgen}" ] \
|
||||
&& "${current_action_compgen}" "${completing_word}") )
|
||||
unset IFS
|
||||
COMPREPLY+=( $(compgen -W "${current_action_choices[*]}" -- "${completing_word}") )
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -o filenames -F _shtab_hyfetch hyfetch
|
||||
@@ -0,0 +1,14 @@
|
||||
# AUTOMATICALLY GENERATED by `shtab`
|
||||
|
||||
|
||||
|
||||
complete hyfetch \
|
||||
'c/--/(mode test-distro preset config c-scale c-set-l config-file ascii-file version debug distro help backend)/' \
|
||||
'c/-/(m h V C p b c -)/' \
|
||||
'n/-p/(rainbow transgender nonbinary agender queer genderfluid bisexual pansexual polysexual omnisexual omniromantic gay-men lesbian abrosexual asexual aromantic aroace1 aroace2 aroace3 autosexual intergender greygender akiosexual bigender demigender demiboy demigirl transmasculine transfeminine genderfaun demifaun genderfae demifae neutrois biromantic1 biromantic2 autoromantic boyflux2 finsexual unlabeled1 unlabeled2 pangender gendernonconforming1 gendernonconforming2 femboy tomboy gendervoid voidgirl voidboy beiyang burger)/' \
|
||||
'n/--preset/(rainbow transgender nonbinary agender queer genderfluid bisexual pansexual polysexual omnisexual omniromantic gay-men lesbian abrosexual asexual aromantic aroace1 aroace2 aroace3 autosexual intergender greygender akiosexual bigender demigender demiboy demigirl transmasculine transfeminine genderfaun demifaun genderfae demifae neutrois biromantic1 biromantic2 autoromantic boyflux2 finsexual unlabeled1 unlabeled2 pangender gendernonconforming1 gendernonconforming2 femboy tomboy gendervoid voidgirl voidboy beiyang burger)/' \
|
||||
'n/-m/(8bit rgb)/' \
|
||||
'n/--mode/(8bit rgb)/' \
|
||||
'n/-b/(neofetch fastfetch fastfetch-old)/' \
|
||||
'n/--backend/(neofetch fastfetch fastfetch-old)/' \
|
||||
'p/*/()/'
|
||||
@@ -0,0 +1,51 @@
|
||||
#compdef hyfetch
|
||||
|
||||
# AUTOMATICALLY GENERATED by `shtab`
|
||||
|
||||
|
||||
_shtab_hyfetch_commands() {
|
||||
local _commands=(
|
||||
|
||||
)
|
||||
_describe 'hyfetch commands' _commands
|
||||
}
|
||||
|
||||
_shtab_hyfetch_options=(
|
||||
"(- : *)"{-h,--help}"[show this help message and exit]"
|
||||
{-c,--config}"[Configure hyfetch]"
|
||||
{-C,--config-file}"[Use another config file]:config_file:"
|
||||
{-p,--preset}"[Use preset]:preset:(rainbow transgender nonbinary agender queer genderfluid bisexual pansexual polysexual omnisexual omniromantic gay-men lesbian abrosexual asexual aromantic aroace1 aroace2 aroace3 autosexual intergender greygender akiosexual bigender demigender demiboy demigirl transmasculine transfeminine genderfaun demifaun genderfae demifae neutrois biromantic1 biromantic2 autoromantic boyflux2 finsexual unlabeled1 unlabeled2 pangender gendernonconforming1 gendernonconforming2 femboy tomboy gendervoid voidgirl voidboy beiyang burger)"
|
||||
{-m,--mode}"[Color mode]:mode:(8bit rgb)"
|
||||
{-b,--backend}"[Choose a \*fetch backend]:backend:(neofetch fastfetch fastfetch-old)"
|
||||
"--c-scale[Lighten colors by a multiplier]:scale:"
|
||||
"--c-set-l[Set lightness value of the colors]:light:"
|
||||
{-V,--version}"[Check version]"
|
||||
"--debug[Debug mode]"
|
||||
{--distro,--test-distro}"[Test for a specific distro]:distro:"
|
||||
"--ascii-file[Use a specific file for the ascii art]:ascii_file:"
|
||||
)
|
||||
|
||||
|
||||
_shtab_hyfetch() {
|
||||
local context state line curcontext="$curcontext" one_or_more='(-)*' remainder='(*)'
|
||||
|
||||
if ((${_shtab_hyfetch_options[(I)${(q)one_or_more}*]} + ${_shtab_hyfetch_options[(I)${(q)remainder}*]} == 0)); then # noqa: E501
|
||||
_shtab_hyfetch_options+=(': :_shtab_hyfetch_commands' '*::: :->hyfetch')
|
||||
fi
|
||||
_arguments -C $_shtab_hyfetch_options
|
||||
|
||||
case $state in
|
||||
hyfetch)
|
||||
words=($line[1] "${words[@]}")
|
||||
(( CURRENT += 1 ))
|
||||
curcontext="${curcontext%:*:*}:_shtab_hyfetch-$line[1]:"
|
||||
case $line[1] in
|
||||
|
||||
esac
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
|
||||
typeset -A opt_args
|
||||
_shtab_hyfetch "$@"
|
||||
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Usage: ./install-autocomplete.sh [Uninstall]
|
||||
if [[ "$1" == "uninstall" ]]; then
|
||||
uninstall=true
|
||||
echo -n "Uninstalling "
|
||||
else
|
||||
echo -n "Installing "
|
||||
fi
|
||||
echo "autocomplete scripts for HyFetch..."
|
||||
|
||||
# Stop on error
|
||||
set -e
|
||||
|
||||
# Obtain path of the current bash script
|
||||
script_path="$(dirname "$(realpath "$0")")"
|
||||
|
||||
# Installing for a specific shell in a specific directory if it exists
|
||||
install-for()
|
||||
{
|
||||
shell=$1
|
||||
dir=$2
|
||||
|
||||
case $shell in
|
||||
bash)
|
||||
filename="hyfetch"
|
||||
;;
|
||||
zsh)
|
||||
filename="_hyfetch"
|
||||
;;
|
||||
csh)
|
||||
filename="hyfetch.completion.csh"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown shell: $shell"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ -d "$dir" ]]; then
|
||||
if [[ "$uninstall" ]]; then
|
||||
rm -f "$dir/$filename"
|
||||
echo "⭐ Uninstalled for $shell in $dir"
|
||||
else
|
||||
cp "$script_path/autocomplete.$shell" "$dir/$filename"
|
||||
echo "⭐ Installed for $shell in $dir"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Copy files
|
||||
install-for bash /etc/bash_completion.d
|
||||
install-for bash /usr/share/bash-completion/completions
|
||||
|
||||
install-for zsh /usr/share/zsh/functions/Completion/Unix
|
||||
install-for zsh /usr/share/zsh/site-functions
|
||||
install-for zsh /usr/share/zsh-completions
|
||||
install-for zsh /usr/local/share/zsh/site-functions
|
||||
|
||||
install-for csh /etc/profile.d
|
||||
|
||||
echo "Done!"
|
||||
@@ -28,7 +28,7 @@
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
version=7.3.7
|
||||
version=7.3.9
|
||||
|
||||
# Fallback to a value of '5' for shells which support bash
|
||||
# but do not set the 'BASH_' shell variables (osh).
|
||||
@@ -38,7 +38,7 @@ shopt -s eval_unsafe_arith &>/dev/null
|
||||
sys_locale=${LANG:-C}
|
||||
XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-${HOME}/.config}
|
||||
PATH=$PATH:/usr/xpg4/bin:/usr/sbin:/sbin:/usr/etc:/usr/libexec
|
||||
reset='\e[0m'
|
||||
reset='\e[39;22m'
|
||||
shopt -s nocasematch extglob
|
||||
|
||||
# Speed up script by not using unicode.
|
||||
@@ -834,34 +834,35 @@ image_source="auto"
|
||||
# Flag: --ascii_distro
|
||||
#
|
||||
# NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy, Android, Antergos, antiX, AOSC OS,
|
||||
# AOSC OS/Retro, Aperio GNU/Linux, Aperture, Apricity, Arch, ArchBox, Archcraft, ARCHlabs,
|
||||
# ArchMerge, ArchStrike, ArcoLinux, ArseLinux, Artix, Arya, Asahi, Aster, AsteroidOS, astOS,
|
||||
# Bedrock, BigLinux, Bitrig, BlackArch, blackPanther, BLAG, BlankOn, BlueLight, Bodhi, bonsai, BSD,
|
||||
# BunsenLabs, CachyOS, Calculate, CalinixOS, Carbs, CBL-Mariner, CelOS, Center, CentOS, Chakra,
|
||||
# ChaletOS, Chapeau, ChonkySealOS, Chrom, Cleanjaro, Clear Linux OS, ClearOS, Clover, Cobalt,
|
||||
# Condres, Container Linux by CoreOS, CRUX, Crystal Linux, Cucumber, CutefishOS, CuteOS, CyberOS,
|
||||
# dahlia, DarkOs, Darwin, Debian, Deepin, DesaOS, Devuan, DietPi, DracOS, DragonFly, Drauger,
|
||||
# Droidian, Elementary, Elive, EncryptOS, EndeavourOS, Endless, Enso, EuroLinux, Exherbo, Exodia
|
||||
# Predator OS, Fedora, Feren, Finnix, Floflis, FreeBSD, FreeMiNT, Frugalware, Funtoo, GalliumOS,
|
||||
# Garuda, Gentoo, GhostBSD, glaucus, gNewSense, GNOME, GNU, GoboLinux, GrapheneOS, Grombyang, Guix,
|
||||
# Haiku, HamoniKR, HarDClanZ, Hash, Huayra, Hybrid, HydroOS, Hyperbola, iglunix, instantOS, IRIX,
|
||||
# Itc, januslinux, Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion, Korora, KrassOS, KSLinux, Kubuntu,
|
||||
# LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux, Linux Lite, Linux Mint, Linux Mint Old,
|
||||
# Live Raizo, LMDE, Lubuntu, Lunar, mac, Mageia, MagpieOS, Mandriva, Manjaro, MassOS, MatuusOS,
|
||||
# Maui, Mer, Minix, MIRACLE LINUX, MX, Namib, NekOS, Neptune, NetBSD, Netrunner, Nitrux, NixOS,
|
||||
# NomadBSD, Nurunner, NuTyX, Obarun, OBRevenge, OmniOS, Open Source Media Center, OpenBSD,
|
||||
# openEuler, OpenIndiana, openmamba, OpenMandriva, OpenStage, openSUSE, openSUSE Leap, openSUSE
|
||||
# Tumbleweed, OpenWrt, OPNsense, Oracle, orchid, OS Elbrus, PacBSD, Parabola, parch, Pardus, Parrot,
|
||||
# Parsix, PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, Pisi, PNM Linux, Pop!_OS, Porteus,
|
||||
# PostMarketOS, Profelis SambaBOX, Proxmox, PuffOS, Puppy, PureOS, Q4OS, Qubes, Qubyt, Quibian,
|
||||
# Radix, Raspbian, ravynOS, Reborn OS, Red Star, Redcore, Redhat, Refracted Devuan, Regata,
|
||||
# Regolith, RhaymOS, rocky, Rosa, Sabayon, sabotage, Sailfish, SalentOS, Sasanqua, Scientific, semc,
|
||||
# Septor, Serene, SharkLinux, ShastraOS, Siduction, SkiffOS, Slackware, SliTaz, SmartOS, Soda,
|
||||
# Solus, Source Mage, Sparky, Star, SteamOS, Stock Linux, Sulin, SunOS, SwagArch, t2, Tails, TeArch,
|
||||
# TorizonCore, Trisquel, Twister, Ubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE,
|
||||
# Ubuntu Studio, Ubuntu Sway, Ubuntu Touch, Ubuntu-GNOME, ubuntu_old02, Ultramarine Linux,
|
||||
# Univalent, Univention, Uos, UrukOS, uwuntu, Vanilla, Venom, VNux, Void, VzLinux, wii-linux-ngx,
|
||||
# Windows, Windows 10, Windows 11, XFerience, Xubuntu, yiffOS, Zorin have ascii logos.
|
||||
# AOSC OS/Retro, Aperio GNU/Linux, Aperture, Apricity, Arch, ArchBox, Archcraft, archcraft_ascii,
|
||||
# archcraft_minimal, ARCHlabs, ArchMerge, ArchStrike, ArcoLinux, ArseLinux, Artix, Arya, Asahi,
|
||||
# Aster, AsteroidOS, astOS, Astra Linux, Bedrock, BigLinux, Bitrig, BlackArch, blackPanther, BLAG,
|
||||
# BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, CachyOS, Calculate, CalinixOS, Carbs, CBL-
|
||||
# Mariner, CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, ChonkySealOS, Chrom, Cleanjaro, Clear
|
||||
# Linux OS, ClearOS, Clover, Cobalt, Condres, Container Linux by CoreOS, CRUX, Crystal Linux,
|
||||
# Cucumber, CutefishOS, CuteOS, CyberOS, dahlia, DarkOs, Darwin, Debian, Deepin, DesaOS, Devuan,
|
||||
# DietPi, DracOS, DragonFly, Drauger, Droidian, Elementary, Elive, EncryptOS, EndeavourOS, Endless,
|
||||
# Enso, EuroLinux, Exherbo, Exodia Predator OS, Fedora, FemboyOS, Feren, Finnix, Floflis, FreeBSD,
|
||||
# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus, gNewSense, GNOME, GNU,
|
||||
# GoboLinux, GrapheneOS, Grombyang, Guix, Haiku, HamoniKR, HarDClanZ, Hash, Huayra, Hybrid, HydroOS,
|
||||
# Hyperbola, iglunix, instantOS, IRIX, Itc, januslinux, Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion,
|
||||
# Korora, KrassOS, KSLinux, Kubuntu, LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux, Linux
|
||||
# Lite, Linux Mint, Linux Mint Old, Live Raizo, LMDE, Lubuntu, Lunar, mac, Mageia, MagpieOS,
|
||||
# Mandriva, Manjaro, MassOS, MatuusOS, Maui, Mer, Minix, MIRACLE LINUX, MX, Namib, NekOS, Neptune,
|
||||
# NetBSD, Netrunner, Nitrux, NixOS, Nobara, NomadBSD, Nurunner, NuTyX, Obarun, OBRevenge, OmniOS,
|
||||
# Open Source Media Center, OpenBSD, openEuler, OpenIndiana, 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, PikaOS, Pisi, PNM Linux, Pop!_OS, Porteus, PostMarketOS, Profelis SambaBOX, Proxmox,
|
||||
# PuffOS, Puppy, PureOS, Q4OS, Qubes, Qubyt, Quibian, Radix, Raspbian, ravynOS, Reborn OS, Red Star,
|
||||
# Redcore, Redhat, Refracted Devuan, Regata, Regolith, RhaymOS, rocky, Rosa, Sabayon, sabotage,
|
||||
# Sailfish, SalentOS, Salient OS, 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,
|
||||
# Xubuntu, yiffOS, Zorin have ascii logos.
|
||||
|
||||
# NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu have 'old' logo variants, use
|
||||
# {distro}_old to use them.
|
||||
@@ -1099,6 +1100,19 @@ get_distro() {
|
||||
on|tiny) distro="LindowsOS" ;;
|
||||
*) distro="$(awk '/Version/ {print $2,$3}' /etc/lindowsos-version)"
|
||||
esac
|
||||
|
||||
elif [[ -f /etc/astra_version ]]; then
|
||||
distro="Astra Linux"
|
||||
distro_version="$(sed -nr 's/^[^0-9]*(([0-9]+\.)*[0-9]+).*/\1/p' < /etc/astra_version)"
|
||||
if [[ $distro_version == "2.12"* ]]; then
|
||||
distro_codename="ALCE"
|
||||
else
|
||||
distro_codename="ALSE"
|
||||
fi
|
||||
case $distro_shorthand in
|
||||
on|tiny) ;;
|
||||
*) distro="${distro} ${distro_version} ${distro_codename}"
|
||||
esac
|
||||
|
||||
elif type -p pveversion >/dev/null; then
|
||||
case $distro_shorthand in
|
||||
@@ -1187,6 +1201,12 @@ get_distro() {
|
||||
elif [[ -f /etc/vzlinux-release ]]; then
|
||||
distro='VzLinux'
|
||||
|
||||
# Chrome OS doesn't conform to the /etc/*-release standard.
|
||||
# While the file is a series of variables they can't be sourced
|
||||
# by the shell since the values aren't quoted.
|
||||
elif grep -q CHROMEOS /etc/lsb-release; then
|
||||
distro='Chrome OS'
|
||||
|
||||
elif type -p guix >/dev/null; then
|
||||
case $distro_shorthand in
|
||||
on|tiny) distro="Guix System" ;;
|
||||
@@ -1238,14 +1258,40 @@ get_distro() {
|
||||
fi
|
||||
fi
|
||||
|
||||
# Gets the windows tag caption (ie `Microsoft Windows 11 Pro Insider Preview`)
|
||||
#
|
||||
# Then removes the `Microsoft` and `Windows` part and gets the current
|
||||
# version of Windows (old code reported Windows 10 even if host runs Windows 11).
|
||||
#
|
||||
# Finally, we decline it in three versions :
|
||||
#
|
||||
# - The `on` version (ie `[Windows 11.0.25330]`)
|
||||
# - The `tiny` version (ie `Windows 11`)
|
||||
# - The `any` version (ie `on Windows 11 Pro Insider Preview`)
|
||||
if [[ $(< /proc/version) == *Microsoft* || $kernel_version == *Microsoft* ]]; then
|
||||
windows_version=$(wmic.exe os get Version)
|
||||
windows_version=$(trim "${windows_version/Version}")
|
||||
|
||||
windows_version_verbose=$(reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -v ProductName | grep REG_)
|
||||
windows_version_verbose=$(trim "${windows_version_verbose/ProductName}")
|
||||
windows_version_verbose=$(trim "${windows_version_verbose/REG_SZ}")buildnumber=$(reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -v CurrentBuildNumber | grep REG_)
|
||||
windows_version_verbose=$(trim "${windows_version_verbose/Windows}")
|
||||
windows_buildnumber=$(reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -v CurrentBuildNumber | grep REG_)
|
||||
windows_buildnumber=${buildnumber/CurrentBuildNumber}
|
||||
windows_buildnumber=${buildnumber/REG_SZ}
|
||||
if [[ "$windows_version_verbose" == *"10"* ]] && (( windows_buildnumber >= 22000 )); then
|
||||
windows_version_verbose=${windows_version_verbose/10/11}
|
||||
fi
|
||||
|
||||
windows_version_current=${windows_version_verbose//[^[:digit:]]/}
|
||||
|
||||
windows_version_number_long=$(wmic.exe os get Version)
|
||||
windows_version_number_long=$(trim "${windows_version_number_long/Version}")
|
||||
windows_version_number_long=$(trim "${windows_version_number_long}")
|
||||
windows_version_number_long="${windows_version_current}${windows_version_number_long:2}"
|
||||
|
||||
case $distro_shorthand in
|
||||
on) distro+=" [Windows $windows_version]" ;;
|
||||
tiny) distro="Windows ${windows_version::2}" ;;
|
||||
*) distro+=" on Windows $windows_version" ;;
|
||||
on) distro+=" [Windows $windows_version_number_long]" ;;
|
||||
tiny) distro=" Windows $windows_version_current" ;;
|
||||
*) distro+=" on Windows $windows_version_verbose" ;;
|
||||
esac
|
||||
|
||||
# Chrome OS doesn't conform to the /etc/*-release standard.
|
||||
@@ -1255,11 +1301,14 @@ get_distro() {
|
||||
distro='Chrome OS'
|
||||
|
||||
elif [[ $(< /proc/version) == *chrome-bot* || -f /dev/cros_ec ]]; then
|
||||
# gets chrome os version from /etc/lsb-release.
|
||||
# totally not written by chatgpt :trolley:
|
||||
cros_version=$(grep -oE 'CHROMEOS_RELEASE_CHROME_MILESTONE=([0-9]+)' /etc/lsb-release | cut -d= -f2)
|
||||
[[ $distro != *Chrome* ]] &&
|
||||
case $distro_shorthand in
|
||||
on) distro="Chrome OS $distro" ;;
|
||||
on) distro="Chrome OS $cros_version" ;;
|
||||
tiny) distro="Chrome OS" ;;
|
||||
*) distro="Chrome OS $distro" ;;
|
||||
*) distro="Chrome OS $cros_version $distro" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
@@ -1339,9 +1388,17 @@ get_distro() {
|
||||
;;
|
||||
|
||||
Windows)
|
||||
distro=$(wmic os get Caption)
|
||||
distro=${distro/Caption}
|
||||
distro=${distro/Microsoft }
|
||||
distro=$(reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -v ProductName | grep REG_)
|
||||
distro=${distro/ProductName}
|
||||
distro=${distro/REG_SZ}
|
||||
buildnumber=$(reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -v CurrentBuildNumber | grep REG_)
|
||||
buildnumber=${buildnumber/CurrentBuildNumber}
|
||||
buildnumber=${buildnumber/REG_SZ}
|
||||
|
||||
# If the value of "ProductName" obtained is Windows 10 and the value of "CurrentBuildNumber" is greater than 22000, then the actual operating system version is Windows 11.
|
||||
if [[ "$distro" == *"Windows 10"* ]] && (( buildnumber >= 22000 )); then
|
||||
distro=${distro/Windows 10/Windows 11}
|
||||
fi
|
||||
;;
|
||||
|
||||
Solaris|illumos)
|
||||
@@ -1552,6 +1609,7 @@ get_model() {
|
||||
"iPhone OS")
|
||||
case $kernel_machine in
|
||||
iPad1,1): "iPad" ;;
|
||||
iPad1,2): "iPad 3G" ;;
|
||||
iPad2,[1-4]): "iPad 2" ;;
|
||||
iPad3,[1-3]): "iPad 3" ;;
|
||||
iPad3,[4-6]): "iPad 4" ;;
|
||||
@@ -1560,20 +1618,25 @@ get_model() {
|
||||
iPad7,1[1-2]): "iPad 7" ;;
|
||||
iPad11,[6-7]): "iPad 8" ;;
|
||||
iPad12,[1-2]): "iPad 9" ;;
|
||||
iPad13,1[8-9]): "iPad 10" ;;
|
||||
iPad4,[1-3]): "iPad Air" ;;
|
||||
iPad5,[3-4]): "iPad Air 2" ;;
|
||||
iPad11,[3-4]): "iPad Air 3" ;;
|
||||
iPad13,[1-2]): "iPad Air 4";;
|
||||
iPad6,[7-8]): "iPad Pro (12.9 Inch)" ;;
|
||||
iPad6,[3-4]): "iPad Pro (9.7 Inch)" ;;
|
||||
iPad7,[1-2]): "iPad Pro 2 (12.9 Inch)" ;;
|
||||
iPad7,[3-4]): "iPad Pro (10.5 Inch)" ;;
|
||||
iPad8,[1-4]): "iPad Pro (11 Inch)" ;;
|
||||
iPad8,[5-8]): "iPad Pro 3 (12.9 Inch)" ;;
|
||||
iPad8,9 | iPad8,10): "iPad Pro 4 (11 Inch)" ;;
|
||||
iPad8,1[1-2]): "iPad Pro 4 (12.9 Inch)" ;;
|
||||
iPad13,[4-7]): "iPad Pro 5 (11 Inch)" ;;
|
||||
iPad13,8 | iPad13,11): "iPad Pro 5 (12.9 Inch)" ;;
|
||||
iPad13,[1-2]): "iPad Air 4" ;;
|
||||
iPad13,1[6-7]): "iPad Air 5" ;;
|
||||
iPad6,[7-8]): "iPad Pro 12.9-inch" ;;
|
||||
iPad6,[3-4]): "iPad Pro 9.7-inch" ;;
|
||||
iPad7,[1-2]): "iPad Pro 12.9-inch (2nd generation)" ;;
|
||||
iPad7,[3-4]): "iPad Pro 10.5-inch" ;;
|
||||
iPad8,[1-4]): "iPad Pro 11-inch" ;;
|
||||
iPad8,[5-8]): "iPad Pro 12.9-inch (3rd generation)" ;;
|
||||
iPad8,9 | iPad8,10): "iPad Pro 11-inch (2nd generation)" ;;
|
||||
iPad8,1[1-2]): "iPad Pro 12.9-inch (4th generation)" ;;
|
||||
iPad13,[4-7]): "iPad Pro 11-inch (3rd generation)" ;;
|
||||
iPad13,[8-9]): "iPad Pro 12.9-inch (5th generation)" ;;
|
||||
iPad13,1[0-1]): "iPad Pro 12.9-inch (5th generation)" ;;
|
||||
iPad14,[3-4]): "iPad Pro 11-inch (4th generation)" ;;
|
||||
iPad14,[5-6]): "iPad Pro 12.9-inch (6th generation)" ;;
|
||||
iPad2,[5-7]): "iPad mini" ;;
|
||||
iPad4,[4-6]): "iPad mini 2" ;;
|
||||
iPad4,[7-9]): "iPad mini 3" ;;
|
||||
@@ -1614,13 +1677,18 @@ get_model() {
|
||||
iPhone14,3): "iPhone 13 Pro Max" ;;
|
||||
iPhone14,4): "iPhone 13 Mini" ;;
|
||||
iPhone14,5): "iPhone 13" ;;
|
||||
iPhone14,6): "iPhone SE 2022" ;;
|
||||
iPhone14,7): "iPhone 14" ;;
|
||||
iPhone14,8): "iPhone 14 Plus" ;;
|
||||
iPhone15,2): "iPhone 14 Pro" ;;
|
||||
iPhone15,3): "iPhone 14 Pro Max" ;;
|
||||
|
||||
iPod1,1): "iPod touch" ;;
|
||||
ipod2,1): "iPod touch 2G" ;;
|
||||
ipod3,1): "iPod touch 3G" ;;
|
||||
ipod4,1): "iPod touch 4G" ;;
|
||||
ipod5,1): "iPod touch 5G" ;;
|
||||
ipod7,1): "iPod touch 6G" ;;
|
||||
iPod2,1): "iPod touch 2G" ;;
|
||||
iPod3,1): "iPod touch 3G" ;;
|
||||
iPod4,1): "iPod touch 4G" ;;
|
||||
iPod5,1): "iPod touch 5G" ;;
|
||||
iPod7,1): "iPod touch 6G" ;;
|
||||
iPod9,1): "iPod touch 7G" ;;
|
||||
esac
|
||||
|
||||
@@ -1697,7 +1765,7 @@ get_title() {
|
||||
;;
|
||||
*)
|
||||
hostname=${HOSTNAME:-$(hostname)}
|
||||
hostname=${hostname%.*}
|
||||
hostname=${hostname%%.*}
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -1871,6 +1939,10 @@ get_packages() {
|
||||
}
|
||||
}
|
||||
|
||||
# OS-independent package managers.
|
||||
has pipx && tot pipx list --short
|
||||
|
||||
# OS-specific package managers.
|
||||
case $os in
|
||||
Linux|BSD|"iPhone OS"|Solaris|illumos)
|
||||
# Package Manager Programs.
|
||||
@@ -2032,7 +2104,7 @@ get_packages() {
|
||||
has choco && dir "$ProgramData"/chocolatey/lib/*
|
||||
|
||||
# Count winget
|
||||
has winget && tot winget list
|
||||
has winget && tot winget list --accept-source-agreements
|
||||
;;
|
||||
|
||||
Haiku)
|
||||
@@ -2199,6 +2271,10 @@ get_de() {
|
||||
if [[ $DESKTOP_SESSION == *regolith ]]; then
|
||||
de=Regolith
|
||||
|
||||
# Added support Fly for Astra Linux
|
||||
elif [[ $DESKTOP_SESSION == fly ]]; then
|
||||
de=Fly
|
||||
|
||||
elif [[ $XDG_CURRENT_DESKTOP ]]; then
|
||||
de=${XDG_CURRENT_DESKTOP/X\-}
|
||||
de=${de/Budgie:GNOME/Budgie}
|
||||
@@ -2592,6 +2668,16 @@ get_wm_theme() {
|
||||
wm_theme=$(leftwm-theme status | grep "Your current theme" | sed -e 's/Your current theme is //g' -e 's/\,.*$//g')
|
||||
fi
|
||||
;;
|
||||
|
||||
fly-wm)
|
||||
fly_config_file
|
||||
if grep -q 'DecorTheme' "${fly_config_file}" 2>/dev/null; then
|
||||
wm_theme=$(awk -F'=' '/^DecorTheme/{print $2}' "${fly_config_file}")
|
||||
fi
|
||||
if [ -z "$wm_theme" ] || [ "$wm_theme" = "Not Found" ]; then
|
||||
wm_theme=Default
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
wm_theme=$(trim_quotes "$wm_theme")
|
||||
@@ -2635,7 +2721,7 @@ get_cpu() {
|
||||
cpu="$(awk -F':' '/Hardware/ {print $2; exit}' "$cpu_file")"
|
||||
else
|
||||
# ARM linux displays binary model code in cpuinfo, which needs to be decoded with lscpu
|
||||
if ! [[ -x "$(command -v python)" ]]; then
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
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)
|
||||
@@ -2647,7 +2733,8 @@ from subprocess import check_output
|
||||
def find(lines, label):
|
||||
for ln in lines:
|
||||
if ln.strip().startswith(label):
|
||||
return ln.split(label)[-1].strip()
|
||||
t = ln.split(label)[-1].strip()
|
||||
return None if t == '-' else t
|
||||
|
||||
return None
|
||||
|
||||
@@ -2662,8 +2749,13 @@ if __name__ == '__main__':
|
||||
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")
|
||||
|
||||
cores = find(lines, 'Core(s) per socket:') or find(lines, 'Core(s) per cluster:')
|
||||
if cores is None:
|
||||
continue
|
||||
|
||||
cores = int(cores)
|
||||
cores *= int(find(lines, 'Socket(s):') or find(lines, 'Cluster(s):') or "1")
|
||||
if cores == -1:
|
||||
continue
|
||||
|
||||
@@ -2674,7 +2766,7 @@ if __name__ == '__main__':
|
||||
|
||||
print('\n'.join(cpus))
|
||||
END
|
||||
tmp_cpus=$(python -c "$py_script")
|
||||
tmp_cpus=$(python3 -c "$py_script")
|
||||
while IFS= read -r line; do
|
||||
prin "${subtitle:+${subtitle}}" "$line"
|
||||
done <<< "$tmp_cpus"
|
||||
@@ -2803,12 +2895,22 @@ END
|
||||
"iPhone10,"[1-6]): "Apple A11 Bionic (6) @ 2.39GHz" ;;
|
||||
"iPhone11,"[2468] | "iPad11,"[1-4] | "iPad11,"[6-7]): "Apple A12 Bionic (6) @ 2.49GHz" ;;
|
||||
"iPhone12,"[1358]): "Apple A13 Bionic (6) @ 2.65GHz" ;;
|
||||
"iPhone13,"[1-4] | "iPad13,"[1-2]): "Apple A14 Bionic (6) @ 3.00Ghz" ;;
|
||||
"iPhone13,"[1-4] | "iPad13,"[1-2]): "Apple A14 Bionic (6) @ 3.00GHz" ;;
|
||||
"iPhone14,"[2-8]): "Apple A15 Bionic (6) @ 3.23GHz" ;;
|
||||
"iPhone15,"[2-3]): "Apple A16 Bionic (6) @ 3.46GHz" ;;
|
||||
"iPad12,"[1-2]): "Apple A13 Bionic (6) @ 2.65GHz" ;;
|
||||
"iPad13,"[4-9]): "Apple M1 (8) @ 3.19GHz" ;;
|
||||
"iPad13,1"[0-1]): "Apple M1 (8) @ 3.19GHz" ;;
|
||||
"iPad13,1"[6-7]): "Apple M1 (8) @ 3.19GHz" ;;
|
||||
"iPad13,1"[8-9]): "Apple A14 Bionic (6) @ 3.00GHz" ;;
|
||||
"iPad14,"[1-2]): "Apple A15 Bionic (6) @ 3.23GHz" ;;
|
||||
"iPad14,"[3-6]): "Apple M2 (8) @ 3.49GHz" ;;
|
||||
|
||||
"iPod2,1"): "Samsung S5L8720 (1) @ 533MHz" ;;
|
||||
"iPod3,1"): "Samsung S5L8922 (1) @ 600MHz" ;;
|
||||
"iPod7,1"): "Apple A8 (2) @ 1.1GHz" ;;
|
||||
"iPad1,1"): "Apple A4 (1) @ 1GHz" ;;
|
||||
"iPod9,1"): "Apple A10 Fusion (4) @ 1.64GHz" ;;
|
||||
"iPad1,"[1-2]): "Apple A4 (1) @ 1GHz" ;;
|
||||
"iPad2,"[1-7]): "Apple A5 (2) @ 1GHz" ;;
|
||||
"iPad3,"[1-3]): "Apple A5X (2) @ 1GHz" ;;
|
||||
"iPad3,"[4-6]): "Apple A6X (2) @ 1.4GHz" ;;
|
||||
@@ -3125,7 +3227,7 @@ get_gpu() {
|
||||
"iPhone OS")
|
||||
case $kernel_machine in
|
||||
"iPhone1,"[1-2]): "PowerVR MBX Lite 3D" ;;
|
||||
"iPhone2,1" | "iPhone3,"[1-3] | "iPod3,1" | "iPod4,1" | "iPad1,1"):
|
||||
"iPhone2,1" | "iPhone3,"[1-3] | "iPod3,1" | "iPod4,1" | "iPad1,"[1-2]):
|
||||
"PowerVR SGX535"
|
||||
;;
|
||||
"iPhone4,1" | "iPad2,"[1-7] | "iPod5,1"): "PowerVR SGX543MP2" ;;
|
||||
@@ -3135,14 +3237,19 @@ get_gpu() {
|
||||
"iPhone8,"[1-4] | "iPad6,1"[12]): "PowerVR GT7600" ;;
|
||||
"iPhone9,"[1-4] | "iPad7,"[5-6]): "PowerVR GT7600 Plus" ;;
|
||||
"iPhone10,"[1-6]): "Apple Designed GPU (A11)" ;;
|
||||
"iPhone11,"[2468] | "iPad11,"[67]): "Apple Designed GPU (A12)" ;;
|
||||
"iPhone12,"[1358]): "Apple Designed GPU (A13)" ;;
|
||||
"iPhone11,"[2468] | "iPad11,"[123467]): "Apple Designed GPU (A12)" ;;
|
||||
"iPhone12,"[1358] | "iPad12,"[12]): "Apple Designed GPU (A13)" ;;
|
||||
"iPhone13,"[1234] | "iPad13,"[12]): "Apple Designed GPU (A14)" ;;
|
||||
|
||||
"iPad3,"[1-3]): "PowerVR SGX534MP4" ;;
|
||||
"iPad3,"[4-6]): "PowerVR SGX554MP4" ;;
|
||||
"iPad5,"[3-4]): "PowerVR GXA6850" ;;
|
||||
"iPad6,"[3-8]): "PowerVR 7XT" ;;
|
||||
"iPad8,"[1-8]): "Apple Designed GPU (A12X)" ;;
|
||||
"iPad8,9" | "iPad8,1"[0-2]): "Apple Designed GPU (A12Z)" ;;
|
||||
"iPad13,"[4-9] | "iPad13,1"[0-1]): "Apple Designed GPU (M1)" ;;
|
||||
"iPad14,"[1-2]): "Apple Designed GPU (A15)" ;;
|
||||
"iPad14,"[3-6]): "Apple Designed GPU (M2)" ;;
|
||||
|
||||
"iPod1,1" | "iPod2,1")
|
||||
: "PowerVR MBX Lite"
|
||||
@@ -3834,6 +3941,28 @@ get_style() {
|
||||
shopt -u nullglob
|
||||
;;
|
||||
|
||||
"Fly")
|
||||
fly_config_file
|
||||
if [[ $fly == "ColorScheme" ]]; then
|
||||
fly_theme="$(
|
||||
basename "$(
|
||||
awk -F '=' '/^'"${fly}"'/{print $2}' "${HOME}/.fly/paletterc"
|
||||
)"
|
||||
)"
|
||||
if [[ $wm_theme == "Default" && $fly_theme != *"FlyDefault"* ]]; then
|
||||
fly_theme=$(awk -F '=' '/^'"${fly}"'/{print $2}'\
|
||||
"${HOME}/.config/fly-admin-themerc")
|
||||
fi
|
||||
elif [[ $fly == "IconTheme" ]]; then
|
||||
fly_theme=$(awk -F '=' '/^'"${fly}"'/{print $2}' "${fly_config_file}")
|
||||
elif [[ $fly == "DefaultFont" ]]; then
|
||||
fly_theme=$(awk -F'=' '/^'"${fly}"'/\
|
||||
{gsub(/"/, "", $2); \
|
||||
sub(/-.*/, "", $2); \
|
||||
print $2}' "${fly_config_file}")
|
||||
fi
|
||||
fly_theme+=" [$de], "
|
||||
;;
|
||||
esac
|
||||
|
||||
# Check for general GTK2 Theme.
|
||||
@@ -3963,6 +4092,7 @@ get_style() {
|
||||
}
|
||||
theme=''
|
||||
local cur_theme=''
|
||||
append_theme "$fly_theme" 'Fly'
|
||||
append_theme "$qt_theme" 'Qt'
|
||||
append_theme "$gtk2_theme" 'GTK2'
|
||||
append_theme "$gtk3_theme" 'GTK3'
|
||||
@@ -3990,7 +4120,7 @@ get_theme() {
|
||||
kde="widgetStyle"
|
||||
lxqt="style"
|
||||
qt5ct="style=" # There is a property called 'stylesheets'.
|
||||
|
||||
fly="ColorScheme"
|
||||
|
||||
get_style
|
||||
}
|
||||
@@ -4003,7 +4133,7 @@ get_icons() {
|
||||
kde="Theme"
|
||||
lxqt="icon_theme"
|
||||
qt5ct="icon_theme"
|
||||
|
||||
fly="IconTheme"
|
||||
|
||||
get_style
|
||||
icons="$theme"
|
||||
@@ -4017,6 +4147,7 @@ get_font() {
|
||||
kde="font"
|
||||
lxqt="font"
|
||||
qt5ct="general"
|
||||
fly="DefaultFont"
|
||||
|
||||
get_style
|
||||
font="$theme"
|
||||
@@ -4236,6 +4367,17 @@ END
|
||||
# Get Process ID of current konsole window / tab
|
||||
child="$(get_ppid "$$")"
|
||||
|
||||
# Loop while the process name is not "konsole"
|
||||
while [[ "$(ps -p "$(get_ppid "$child")" -o comm=)" != "konsole" ]]; do
|
||||
# Get the parent process ID
|
||||
child="$(get_ppid "$child")"
|
||||
|
||||
# Exit the loop if the parent process ID is 1 (i.e., init)
|
||||
if [[ "$child" == "1" ]]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
QT_BINDIR="$(qtpaths --binaries-dir)" && PATH+=":$QT_BINDIR"
|
||||
|
||||
IFS=$'\n' read -d "" -ra konsole_instances \
|
||||
@@ -4262,7 +4404,7 @@ END
|
||||
profile_filename="${profile_filename/$'\n'*}"
|
||||
|
||||
[[ $profile_filename ]] && \
|
||||
term_font="$(awk -F '=|,' '/Font=/ {print $2,$3}' "$profile_filename")"
|
||||
term_font="$(awk -F '=|,' '/^Font=/ {print $2,$3}' "$profile_filename")"
|
||||
;;
|
||||
|
||||
"lxterminal"*)
|
||||
@@ -4799,16 +4941,20 @@ get_cols() {
|
||||
esac
|
||||
done
|
||||
|
||||
# Workaround for bright background colors in the Linux framebuffer console.
|
||||
(( block_range[1] < 16 )) && [[ "$TERM" == "linux" ]] &&
|
||||
printf -v blocks2 '\e[5m%b\e[25m' "$blocks2"
|
||||
|
||||
# Convert height into spaces.
|
||||
printf -v block_spaces "%${block_height}s"
|
||||
|
||||
# Convert the spaces into rows of blocks.
|
||||
if [[ $BASH_VERSION == 3* ]]; then
|
||||
[[ "$blocks" ]] && cols+="${block_spaces// /${blocks}[mnl}"
|
||||
[[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}[mnl}"
|
||||
[[ "$blocks" ]] && cols+="${block_spaces// /${blocks}[39;49mnl}"
|
||||
[[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}[39;49mnl}"
|
||||
else
|
||||
[[ "$blocks" ]] && cols+="${block_spaces// /${blocks}\[mnl}"
|
||||
[[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}\[mnl}"
|
||||
[[ "$blocks" ]] && cols+="${block_spaces// /${blocks}\[39;49mnl}"
|
||||
[[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}\[39;49mnl}"
|
||||
fi
|
||||
|
||||
# Determine the horizontal offset of the blocks.
|
||||
@@ -5356,7 +5502,7 @@ display_image() {
|
||||
;;
|
||||
|
||||
"sixel")
|
||||
img2sixel \
|
||||
img2sixel -I \
|
||||
-w "$width" \
|
||||
-h "$height" \
|
||||
"$image"
|
||||
@@ -5523,12 +5669,8 @@ trim_quotes() {
|
||||
}
|
||||
|
||||
strip_sequences() {
|
||||
strip="${1//$'\e['3[0-9]m}"
|
||||
strip="${strip//$'\e['[0-9]m}"
|
||||
strip="${strip//\\e\[[0-9]m}"
|
||||
strip="${strip//$'\e['38\;5\;[0-9]m}"
|
||||
strip="${strip//$'\e['38\;5\;[0-9][0-9]m}"
|
||||
strip="${strip//$'\e['38\;5\;[0-9][0-9][0-9]m}"
|
||||
strip="${1//$'\e'\[*([0-9])*(;*([0-9]))m}"
|
||||
strip="${strip//\\e\[*([0-9])*(;*([0-9]))m}"
|
||||
|
||||
printf '%s\n' "$strip"
|
||||
}
|
||||
@@ -5587,8 +5729,8 @@ set_text_colors() {
|
||||
|
||||
color() {
|
||||
case $1 in
|
||||
[0-6]) printf '%b\e[3%sm' "$reset" "$1" ;;
|
||||
7 | "fg") printf '\e[37m%b' "$reset" ;;
|
||||
[0-7]) printf '%b\e[3%sm' "$reset" "$1" ;;
|
||||
"fg") printf '%b' "$reset" ;;
|
||||
"#"*)
|
||||
local rgb="${1//#}"
|
||||
rgb="$((0x$rgb))"
|
||||
@@ -5739,6 +5881,11 @@ tde_config_dir() {
|
||||
tde_config_dir="${tde_config_dir/$'/:'*}"
|
||||
}
|
||||
|
||||
fly_config_file() {
|
||||
# Return main path the fly config file
|
||||
fly_config_file=${HOME}/.fly/theme/current.themerc
|
||||
}
|
||||
|
||||
term_padding() {
|
||||
# Get terminal padding to properly align cursor.
|
||||
[[ -z "$term" ]] && get_term
|
||||
@@ -6031,47 +6178,48 @@ ASCII:
|
||||
|
||||
NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy,
|
||||
Android, Antergos, antiX, AOSC OS, AOSC OS/Retro, Aperio GNU/Linux,
|
||||
Aperture, Apricity, Arch, ArchBox, Archcraft, ARCHlabs, ArchMerge,
|
||||
ArchStrike, ArcoLinux, ArseLinux, Artix, Arya, Asahi, Aster,
|
||||
AsteroidOS, astOS, Bedrock, BigLinux, Bitrig, BlackArch,
|
||||
blackPanther, BLAG, BlankOn, BlueLight, Bodhi, bonsai, BSD,
|
||||
BunsenLabs, CachyOS, Calculate, CalinixOS, Carbs, CBL-Mariner,
|
||||
CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, ChonkySealOS,
|
||||
Chrom, Cleanjaro, Clear Linux OS, ClearOS, Clover, Cobalt, Condres,
|
||||
Container Linux by CoreOS, CRUX, Crystal Linux, Cucumber,
|
||||
CutefishOS, CuteOS, CyberOS, dahlia, DarkOs, Darwin, Debian, Deepin,
|
||||
DesaOS, Devuan, DietPi, DracOS, DragonFly, Drauger, Droidian,
|
||||
Elementary, Elive, EncryptOS, EndeavourOS, Endless, Enso, EuroLinux,
|
||||
Exherbo, Exodia Predator OS, Fedora, Feren, Finnix, Floflis,
|
||||
FreeBSD, FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo,
|
||||
GhostBSD, glaucus, gNewSense, GNOME, GNU, GoboLinux, GrapheneOS,
|
||||
Grombyang, Guix, Haiku, HamoniKR, HarDClanZ, Hash, Huayra, Hybrid,
|
||||
HydroOS, Hyperbola, iglunix, instantOS, IRIX, Itc, januslinux,
|
||||
Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion, Korora, KrassOS, KSLinux,
|
||||
Kubuntu, LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux,
|
||||
Linux Lite, Linux Mint, Linux Mint Old, Live Raizo, LMDE, Lubuntu,
|
||||
Lunar, mac, Mageia, MagpieOS, Mandriva, Manjaro, MassOS, MatuusOS,
|
||||
Maui, Mer, Minix, MIRACLE LINUX, MX, Namib, NekOS, Neptune, NetBSD,
|
||||
Netrunner, Nitrux, NixOS, NomadBSD, Nurunner, NuTyX, Obarun,
|
||||
Aperture, Apricity, Arch, ArchBox, Archcraft, archcraft_ascii,
|
||||
archcraft_minimal, ARCHlabs, ArchMerge, ArchStrike, ArcoLinux,
|
||||
ArseLinux, Artix, Arya, Asahi, Aster, AsteroidOS, astOS, Astra
|
||||
Linux, Bedrock, BigLinux, Bitrig, BlackArch, blackPanther, BLAG,
|
||||
BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, CachyOS,
|
||||
Calculate, CalinixOS, Carbs, CBL-Mariner, CelOS, Center, CentOS,
|
||||
Chakra, ChaletOS, Chapeau, ChonkySealOS, Chrom, Cleanjaro, Clear
|
||||
Linux OS, ClearOS, Clover, Cobalt, Condres, Container Linux by
|
||||
CoreOS, CRUX, Crystal Linux, Cucumber, CutefishOS, CuteOS, CyberOS,
|
||||
dahlia, DarkOs, Darwin, Debian, Deepin, DesaOS, Devuan, DietPi,
|
||||
DracOS, DragonFly, Drauger, Droidian, Elementary, Elive, EncryptOS,
|
||||
EndeavourOS, Endless, Enso, EuroLinux, Exherbo, Exodia Predator OS,
|
||||
Fedora, FemboyOS, Feren, Finnix, Floflis, FreeBSD, FreeMiNT,
|
||||
Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus,
|
||||
gNewSense, GNOME, GNU, GoboLinux, GrapheneOS, Grombyang, Guix,
|
||||
Haiku, HamoniKR, HarDClanZ, Hash, Huayra, Hybrid, HydroOS,
|
||||
Hyperbola, iglunix, instantOS, IRIX, Itc, januslinux, Kaisen, Kali,
|
||||
KaOS, KDE, Kibojoe, Kogaion, Korora, KrassOS, KSLinux, Kubuntu,
|
||||
LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux, Linux
|
||||
Lite, Linux Mint, Linux Mint Old, Live Raizo, LMDE, Lubuntu, Lunar,
|
||||
mac, Mageia, MagpieOS, Mandriva, Manjaro, MassOS, MatuusOS, Maui,
|
||||
Mer, Minix, MIRACLE LINUX, MX, Namib, NekOS, Neptune, NetBSD,
|
||||
Netrunner, Nitrux, NixOS, Nobara, NomadBSD, Nurunner, NuTyX, Obarun,
|
||||
OBRevenge, OmniOS, Open Source Media Center, OpenBSD, openEuler,
|
||||
OpenIndiana, 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,
|
||||
PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, PikaOS, Pisi, PNM
|
||||
Linux, Pop!_OS, Porteus, PostMarketOS, Profelis SambaBOX, Proxmox,
|
||||
PuffOS, Puppy, PureOS, Q4OS, Qubes, Qubyt, Quibian, Radix, Raspbian,
|
||||
ravynOS, Reborn OS, Red Star, Redcore, Redhat, Refracted Devuan,
|
||||
Regata, Regolith, RhaymOS, rocky, Rosa, Sabayon, sabotage, Sailfish,
|
||||
SalentOS, 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, Xubuntu, yiffOS, Zorin have ascii
|
||||
logos.
|
||||
SalentOS, Salient OS, 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,
|
||||
Xubuntu, yiffOS, Zorin have ascii logos.
|
||||
|
||||
NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu
|
||||
have 'old' logo variants, use {distro}_old to use them.
|
||||
@@ -6994,6 +7142,58 @@ dhhyys+/-`
|
||||
EOF
|
||||
;;
|
||||
|
||||
"archcraft_ascii"*)
|
||||
set_colors 6 1 2 3 4 5
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
${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:
|
||||
:=-:` `-=+:
|
||||
EOF
|
||||
;;
|
||||
|
||||
"archcraft_minimal"*)
|
||||
set_colors 6 1 2 3 4 5
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
${c1} ⢰⡆
|
||||
⢠⣿⣿⡄
|
||||
⢀⣾⣿⣿⣿⡀
|
||||
⣼⣿⣿⣿⣿⣷⡀
|
||||
⣼⣿⣿⣿⣿⣿⣿⣷
|
||||
⢼⣿⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣰⣤⣈⠻⢿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣰⣿⣿⣿⣿⣮⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
|
||||
⣼⣿⣿⣿⣿⣿⡿⣿⣿⡟ ⠸⣿⣿⡿⣿⣿⣿⣿⣿⣷⡀
|
||||
⣼⣿⣿⣿⣿⣿⡏ ⠈⣿⣿⣿⣿⣿⣷⡀
|
||||
⢀⣼⣿⣿⣿⣿⣿⣿⡗ ⢀⣠⣤⣀ ⠸⣿⣿⣿⣿⣿⣿⣷⡀
|
||||
⢀⣾⣿⣿⣿⣿⣿⡏⠁ ⢠⣿⣿⣿⣿⡇ ⢙⣿⣿⣻⠿⣿⣷⡀
|
||||
⢀⣾⣿⣿⣿⣿⣿⣿⣷⣤⡀ ⠻⣿⣿⡿⠃ ⢀⣼⣿⣿⣿⣿⣦⣌⠙
|
||||
⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏ ⢿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀
|
||||
⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁ ⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄
|
||||
⣠⣿⣿⣿⣿⠿⠛⠋⠁ ⠉⠙⠻⢿⣿⣿⣿⣿⣆
|
||||
⡰⠟⠛⠉⠁ ⠉⠙⠛⠿⢆
|
||||
EOF
|
||||
;;
|
||||
|
||||
"Archcraft"*)
|
||||
set_colors 6 1 2 3 4 5
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
@@ -9044,6 +9244,32 @@ ${c1} `----------`
|
||||
EOF
|
||||
;;
|
||||
|
||||
"FemboyOS"*)
|
||||
set_colors 4
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
${c1}MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMWKkxkKWMMMMMMMMMMMMMMMMMMMMWKkxkKWMM
|
||||
MMMMXo. .;xKWMMMMMMMMMMMMMMMMMMXo. .oXMM
|
||||
MMWXx,..'..oXMMMMMMMMMMMMMMMMWKx, .lXMM
|
||||
MMNo. .cOc.,xKWMMMMMMMMMMMMWXx;.....cXMM
|
||||
MMXl..;kKl. .oXMMMMMMMMMMWKx;..,ok:.'o0W
|
||||
WKx,.cKWNk;..lXMMMMMMMMWKx;..,o0NXl. .oN
|
||||
No. .lXMMWKc.,dKWMMMMMMNo..;d0NWMNx,..lX
|
||||
Nk:,:kNMMMNk:,ckNMMMMMMNxcxXWMMMMMN0ockN
|
||||
MWNNNWMMMMMWNNNWMMMMMMMMWWWMMMMMMMMMWWWM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMNXKXNWMMMMMMMMMMMWNKOKWMMMMMMMMMM
|
||||
MMMMMMWKdccxXMMMMMMMMMMW0o'.oXMMMMMMMMMM
|
||||
MMMMMMMNO:.'o0NKkkkkkOXXo. .lXMMMMMMMMMM
|
||||
MMMMMMMMNx,..;o;. .:o,..;kNMMMMMMMMMM
|
||||
MMMMMMMMMNO: ... .cKWMMMMMMMMMMM
|
||||
MMMMMMMMMMNx,. .;dk:. .;kNMMMMMMMMMMMM
|
||||
MMMMMMMMMMMN0ocxXWNkl:,:xXWMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMWNWMMMWWNNNWMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
EOF
|
||||
;;
|
||||
|
||||
"Finnix"*)
|
||||
set_colors 4 7 7
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
@@ -10837,6 +11063,30 @@ ${c1} ▝▀▀▀ ▀▀▀▀▘ ${c2}▀▀▀▘
|
||||
EOF
|
||||
;;
|
||||
|
||||
"Nobara"*)
|
||||
set_colors "#999999" "#d80a0a" "#e5b90b"
|
||||
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
${c1} ⢀⣤⣴⣶⣶⣶⣦⣤⡀⠀⣀⣠⣤⣴⣶⣶⣶⣶⣶⣶⣶⣶⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠉⠁⠀⠀⠉⠉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀${c3}⢀⣀⣀⡀${c1}⠀⠀⠀⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀${c3}⢠⣾⣿⣿⣿⣿⣷⡄${c1}⠀⠀⠀⠻⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀${c3}⣿⣿⣿⣿⣿⣿⣿⡇${c1}⠀⠀⠀⠀⠀⣀⣀⣬⣽⣿⣿⣿⣿⣿⣿⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀${c3}⠈⠻⢿⣿⣿⡿⠟⠁${c1}⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
|
||||
${c2} ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠉⠉⠛⠛⢿⣿⣿⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀
|
||||
${c2} ⠘⢿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀
|
||||
${c2} ⠈⠙⠛⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠛⠛⠉⠁
|
||||
EOF
|
||||
;;
|
||||
|
||||
"NomadBSD"*)
|
||||
set_colors 4
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
@@ -11593,6 +11843,20 @@ ${c2} !0m `6Kv
|
||||
EOF
|
||||
;;
|
||||
|
||||
"PikaOS"*)
|
||||
set_colors 11
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
${c1} /🐦🐦🐦$ /🐦/🐦 /🐦🐦🐦 /🐦🐦🐦
|
||||
| 🐦__ $|__| 🐦 /🐦__ 🐦/🐦__ 🐦
|
||||
| 🐦 \ 🐦/$| 🐦 /🐦 /🐦🐦🐦| 🐦 \ $| 🐦 \__/
|
||||
| 🐦🐦🐦$| $| 🐦 /🐦/|____ $| 🐦 | $| 🐦🐦🐦
|
||||
| 🐦____/| $| 🐦🐦🐦/ /🐦🐦🐦| 🐦 | 🐦\____ 🐦
|
||||
| 🐦 | $| 🐦_ 🐦 /🐦__ $| 🐦 | 🐦/🐦 \ 🐦
|
||||
| 🐦 | $| 🐦 \ $| 🐦🐦🐦| 🐦🐦🐦| 🐦🐦🐦/
|
||||
|__/ |__|__/ \__/\_______/\______/ \______/ .
|
||||
EOF
|
||||
;;
|
||||
|
||||
"PNM Linux"* | "WHPNM Linux"*)
|
||||
set_colors 33 9 15 202
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
@@ -12299,6 +12563,38 @@ RO ROSA ROS ROSAROSAR ROSARO RO
|
||||
EOF
|
||||
;;
|
||||
|
||||
"Astra Linux"*)
|
||||
if [[ $ascii_distro == *"ALCE"* ]]; then
|
||||
set_colors 160 231
|
||||
else
|
||||
set_colors 32 231
|
||||
fi
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
${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
|
||||
EOF
|
||||
;;
|
||||
|
||||
"sabotage"*)
|
||||
set_colors 4 7 1
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
@@ -12436,6 +12732,32 @@ ${c1}
|
||||
EOF
|
||||
;;
|
||||
|
||||
"Salient OS"* | "SalientOS"* | "salientos"*)
|
||||
set_colors 6 6 7 1
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
${c1} 00xxxx0
|
||||
00xxxxxx0
|
||||
0xxxxxxxxx 000000
|
||||
0xxxxxxxxxx xxxxxxxxxx0
|
||||
0xxxxxxxxxxx0 xxxxxxxxxxxxx0
|
||||
0xxxxxxxxxxxx0 0xxxxxxxxxxxxxx0
|
||||
0xxxxxxxxxxxxx0 0xxxxxxxxxxxxxxx0
|
||||
0xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx0
|
||||
xxxxxxxxxxxxxxxx0 0xxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxx 0xxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxx0 xxxxxxxxxxxxxx
|
||||
0xxxxxxxxxxxxxxxxxx0 0xxxxxxxxxxxx0
|
||||
0xxxxxxxxxxxxxxxxxx xxxxxxxxxxx0
|
||||
0xxxxxxxxxxxxxxxxx xxxxxxxxxx0
|
||||
0xxxxxxxxxxxxxxxx xxxxxxxxx0
|
||||
0xxxxxxxxxxxx0 0xxxxxxx0
|
||||
0xxxxxxx0 xxxxxx0
|
||||
0xxx00
|
||||
x00
|
||||
EOF
|
||||
;;
|
||||
|
||||
"Scientific"*)
|
||||
set_colors 4 7 1
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
@@ -13737,23 +14059,25 @@ EOF
|
||||
set_colors 11 15
|
||||
read -rd '' ascii_data <<'EOF'
|
||||
${c1}
|
||||
.----:
|
||||
.-------.
|
||||
:---::----:
|
||||
.----::-----.
|
||||
......... :----::-----: ..:::-::::..
|
||||
.-----------------::------------------:
|
||||
----::-----------::----------::::---:
|
||||
-----:::--------::-------:::-------
|
||||
:------::::--::...:::::---------:
|
||||
.---------::.. ..:---------.
|
||||
.::-----::.. .::----::.
|
||||
.:------:.......:-------:
|
||||
.--------::::::::-:::-------.
|
||||
.-------::-----.:-----::------.
|
||||
-----::------: :------::-----
|
||||
:--::--------: .-------::---:
|
||||
:----------:: .:----------
|
||||
|
||||
.OO.
|
||||
.OOOO.
|
||||
.OO${c2}II${c1}OO.
|
||||
IOOO${c2}II${c1}OOOI
|
||||
.OOOO${c2}II${c1}OOOO.
|
||||
............IOOOO${c2}II${c1}OOOOI............
|
||||
OOOOOOOOOOOOOOOOOO${c2}II${c1}OOOOOOOOOOOOOOOOOO
|
||||
OOOO${c2}II${c1}OOOOOOOOOOO${c2}II${c1}OOOOOOOOOOO${c2}II${c1}OOOO
|
||||
OOOOO${c2}III${c1}OOOOOOOO${c2}II${c1}OOOOOOOO${c2}III${c1}OOOOO
|
||||
OOOOOOO${c2}IIII${c1}OO${c2}I....I${c1}OO${c2}IIII${c1}OOOOOOO
|
||||
OOOOOOOOOO${c2}II.. ..II${c1}OOOOOOOOOO
|
||||
OOOOOOO${c2}II. .II${c1}OOOOOOO
|
||||
OOOOOO${c2}II:......:II${c1}OOOOOO
|
||||
OOOOOOOOO${c2}IIIIIIII${c1}OOOOOOOOO
|
||||
OOOOOO${c2}II${c1}OOOOOOOOOOOO${c2}II${c1}OOOOOO
|
||||
OOOO${c2}II${c1}OOOOOOOI IOOOOOO${c2}II${c1}OOOO
|
||||
IOO${c2}II${c1}OOOOOOOO: :OOOOOOOO${c2}II${c1}OOI
|
||||
IOOOOOOOOOOII IIOOOOOOOOOOI
|
||||
|
||||
EOF
|
||||
;;
|
||||
|
||||
+38
-37
@@ -1,7 +1,7 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH NEOFETCH "1" "February 2023" "Neofetch 7.3.7" "User Commands"
|
||||
.TH NEOFETCH "1" "June 2023" "Neofetch 7.3.9" "User Commands"
|
||||
.SH NAME
|
||||
Neofetch \- manual page for Neofetch 7.3.7
|
||||
Neofetch \- manual page for Neofetch 7.3.9
|
||||
.SH SYNOPSIS
|
||||
.B neofetch
|
||||
\fI\,func_name --option "value" --option "value"\/\fR
|
||||
@@ -312,47 +312,48 @@ Which Distro's ascii art to print
|
||||
.TP
|
||||
NOTE: AIX, AlmaLinux, Alpine, Alter, Amazon, AmogOS, Anarchy,
|
||||
Android, Antergos, antiX, AOSC OS, AOSC OS/Retro, Aperio GNU/Linux,
|
||||
Aperture, Apricity, Arch, ArchBox, Archcraft, ARCHlabs, ArchMerge,
|
||||
ArchStrike, ArcoLinux, ArseLinux, Artix, Arya, Asahi, Aster,
|
||||
AsteroidOS, astOS, Bedrock, BigLinux, Bitrig, BlackArch,
|
||||
blackPanther, BLAG, BlankOn, BlueLight, Bodhi, bonsai, BSD,
|
||||
BunsenLabs, CachyOS, Calculate, CalinixOS, Carbs, CBL\-Mariner,
|
||||
CelOS, Center, CentOS, Chakra, ChaletOS, Chapeau, ChonkySealOS,
|
||||
Chrom, Cleanjaro, Clear Linux OS, ClearOS, Clover, Cobalt, Condres,
|
||||
Container Linux by CoreOS, CRUX, Crystal Linux, Cucumber,
|
||||
CutefishOS, CuteOS, CyberOS, dahlia, DarkOs, Darwin, Debian, Deepin,
|
||||
DesaOS, Devuan, DietPi, DracOS, DragonFly, Drauger, Droidian,
|
||||
Elementary, Elive, EncryptOS, EndeavourOS, Endless, Enso, EuroLinux,
|
||||
Exherbo, Exodia Predator OS, Fedora, Feren, Finnix, Floflis,
|
||||
FreeBSD, FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo,
|
||||
GhostBSD, glaucus, gNewSense, GNOME, GNU, GoboLinux, GrapheneOS,
|
||||
Grombyang, Guix, Haiku, HamoniKR, HarDClanZ, Hash, Huayra, Hybrid,
|
||||
HydroOS, Hyperbola, iglunix, instantOS, IRIX, Itc, januslinux,
|
||||
Kaisen, Kali, KaOS, KDE, Kibojoe, Kogaion, Korora, KrassOS, KSLinux,
|
||||
Kubuntu, LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux,
|
||||
Linux Lite, Linux Mint, Linux Mint Old, Live Raizo, LMDE, Lubuntu,
|
||||
Lunar, mac, Mageia, MagpieOS, Mandriva, Manjaro, MassOS, MatuusOS,
|
||||
Maui, Mer, Minix, MIRACLE LINUX, MX, Namib, NekOS, Neptune, NetBSD,
|
||||
Netrunner, Nitrux, NixOS, NomadBSD, Nurunner, NuTyX, Obarun,
|
||||
Aperture, Apricity, Arch, ArchBox, Archcraft, archcraft_ascii,
|
||||
archcraft_minimal, ARCHlabs, ArchMerge, ArchStrike, ArcoLinux,
|
||||
ArseLinux, Artix, Arya, Asahi, Aster, AsteroidOS, astOS, Astra
|
||||
Linux, Bedrock, BigLinux, Bitrig, BlackArch, blackPanther, BLAG,
|
||||
BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, CachyOS,
|
||||
Calculate, CalinixOS, Carbs, CBL\-Mariner, CelOS, Center, CentOS,
|
||||
Chakra, ChaletOS, Chapeau, ChonkySealOS, Chrom, Cleanjaro, Clear
|
||||
Linux OS, ClearOS, Clover, Cobalt, Condres, Container Linux by
|
||||
CoreOS, CRUX, Crystal Linux, Cucumber, CutefishOS, CuteOS, CyberOS,
|
||||
dahlia, DarkOs, Darwin, Debian, Deepin, DesaOS, Devuan, DietPi,
|
||||
DracOS, DragonFly, Drauger, Droidian, Elementary, Elive, EncryptOS,
|
||||
EndeavourOS, Endless, Enso, EuroLinux, Exherbo, Exodia Predator OS,
|
||||
Fedora, FemboyOS, Feren, Finnix, Floflis, FreeBSD, FreeMiNT,
|
||||
Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus,
|
||||
gNewSense, GNOME, GNU, GoboLinux, GrapheneOS, Grombyang, Guix,
|
||||
Haiku, HamoniKR, HarDClanZ, Hash, Huayra, Hybrid, HydroOS,
|
||||
Hyperbola, iglunix, instantOS, IRIX, Itc, januslinux, Kaisen, Kali,
|
||||
KaOS, KDE, Kibojoe, Kogaion, Korora, KrassOS, KSLinux, Kubuntu,
|
||||
LangitKetujuh, LaxerOS, LEDE, LibreELEC, Linspire, Linux, Linux
|
||||
Lite, Linux Mint, Linux Mint Old, Live Raizo, LMDE, Lubuntu, Lunar,
|
||||
mac, Mageia, MagpieOS, Mandriva, Manjaro, MassOS, MatuusOS, Maui,
|
||||
Mer, Minix, MIRACLE LINUX, MX, Namib, NekOS, Neptune, NetBSD,
|
||||
Netrunner, Nitrux, NixOS, Nobara, NomadBSD, Nurunner, NuTyX, Obarun,
|
||||
OBRevenge, OmniOS, Open Source Media Center, OpenBSD, openEuler,
|
||||
OpenIndiana, 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,
|
||||
PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, PikaOS, Pisi, PNM
|
||||
Linux, Pop!_OS, Porteus, PostMarketOS, Profelis SambaBOX, Proxmox,
|
||||
PuffOS, Puppy, PureOS, Q4OS, Qubes, Qubyt, Quibian, Radix, Raspbian,
|
||||
ravynOS, Reborn OS, Red Star, Redcore, Redhat, Refracted Devuan,
|
||||
Regata, Regolith, RhaymOS, rocky, Rosa, Sabayon, sabotage, Sailfish,
|
||||
SalentOS, 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, Xubuntu, yiffOS, Zorin have ascii
|
||||
logos.
|
||||
SalentOS, Salient OS, 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,
|
||||
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.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "neowofetch",
|
||||
"version": "1.4.7",
|
||||
"version": "1.4.9",
|
||||
"description": "Updated neofetch",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
import pathlib
|
||||
|
||||
from setuptools import setup, find_packages
|
||||
from setuptools import setup, find_namespace_packages
|
||||
|
||||
import hyfetch.constants
|
||||
from hyfetch.__version__ import VERSION
|
||||
|
||||
# The directory containing this file
|
||||
HERE = pathlib.Path(__file__).parent
|
||||
@@ -14,7 +14,7 @@ README = (HERE / "README.md").read_text('utf-8')
|
||||
# This call to setup() does all the work
|
||||
setup(
|
||||
name="HyFetch",
|
||||
version=hyfetch.constants.VERSION,
|
||||
version=VERSION,
|
||||
description="neofetch with flags <3",
|
||||
long_description=README,
|
||||
long_description_content_type="text/markdown",
|
||||
@@ -31,7 +31,7 @@ setup(
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
],
|
||||
packages=find_packages(),
|
||||
packages=find_namespace_packages(),
|
||||
package_data={'hyfetch': ['hyfetch/*']},
|
||||
include_package_data=True,
|
||||
install_requires=[
|
||||
@@ -40,7 +40,7 @@ setup(
|
||||
|
||||
# Windows dependencies
|
||||
'psutil ; platform_system=="Windows"',
|
||||
'colorama ; platform_system=="Windows"',
|
||||
'colorama>=0.4.6 ; platform_system=="Windows"',
|
||||
],
|
||||
entry_points={
|
||||
"console_scripts": [
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import shlex
|
||||
from subprocess import check_output
|
||||
@@ -52,7 +53,7 @@ if __name__ == '__main__':
|
||||
|
||||
# Fetch commit information
|
||||
commits = http.get(f'https://api.github.com/repos/{upstream}/pulls/{pr}/commits').json()
|
||||
author = commits[0]['commit']['author']
|
||||
author = json.loads(os.environ.get("override_author")) or commits[-1]['commit']['author']
|
||||
|
||||
# Create commit message
|
||||
title = info["title"].replace('"', '\\"')
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
Symbolic11
|
||||
GentlemanMC
|
||||
dr03m
|
||||
|
@@ -25,12 +25,12 @@ def test_rgb_8bit_conversion():
|
||||
for r in range(0, 255, 16):
|
||||
for g in range(0, 255, 16):
|
||||
print(RGB(r, g, 0).to_ansi_rgb(False), end=' ')
|
||||
printc('&r')
|
||||
printc('&*')
|
||||
print()
|
||||
for r in range(0, 255, 16):
|
||||
for g in range(0, 255, 16):
|
||||
print(RGB(r, g, 0).to_ansi_8bit(False), end=' ')
|
||||
printc('&r')
|
||||
printc('&*')
|
||||
print()
|
||||
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ def pre_check():
|
||||
assert os.path.islink('./hyfetch/scripts/neowofetch'), 'neowofetch is not a symbolic link'
|
||||
# subprocess.check_call(shlex.split('git diff-index --quiet HEAD --')) # 'Please commit all changes before release'
|
||||
|
||||
print('Running shellcheck... (This may take a while)')
|
||||
subprocess.check_call(shlex.split('shellcheck neofetch'))
|
||||
|
||||
|
||||
@@ -46,8 +47,8 @@ def edit_versions(version: str):
|
||||
path.write_text(json.dumps(content, ensure_ascii=False, indent=2))
|
||||
|
||||
# 2. hyfetch/constants.py
|
||||
print('Editing hyfetch/constants.py...')
|
||||
path = Path('hyfetch/constants.py')
|
||||
print('Editing hyfetch/__version__.py...')
|
||||
path = Path('hyfetch/__version__.py')
|
||||
content = [f"VERSION = '{version}'" if l.startswith('VERSION = ') else l for l in path.read_text().split('\n')]
|
||||
path.write_text('\n'.join(content))
|
||||
|
||||
@@ -63,7 +64,7 @@ def edit_versions(version: str):
|
||||
# 4. neofetch script
|
||||
print('Editing neofetch...')
|
||||
path = Path('neofetch')
|
||||
lines = path.read_text().split('\n')
|
||||
lines = path.read_text().replace("\t", " ").split('\n')
|
||||
version_i = next(i for i, l in enumerate(lines) if l.startswith('version='))
|
||||
nf = pv.parse(lines[version_i].replace('version=', ''))
|
||||
new = pv.parse(version)
|
||||
@@ -102,6 +103,7 @@ def post_check():
|
||||
"""
|
||||
Check after changes are made
|
||||
"""
|
||||
print('Running shellcheck... (This may take a while)')
|
||||
subprocess.check_call(shlex.split('shellcheck neofetch'))
|
||||
|
||||
|
||||
@@ -112,7 +114,7 @@ def create_release(v: str):
|
||||
print('Committing changes...')
|
||||
|
||||
# 1. Add files
|
||||
subprocess.check_call(['git', 'add', 'hyfetch/constants.py', 'neofetch', 'neofetch.1', 'package.json', 'README.md',
|
||||
subprocess.check_call(['git', 'add', 'hyfetch/__version__.py', 'neofetch', 'neofetch.1', 'package.json', 'README.md',
|
||||
'hyfetch/distros/*'])
|
||||
|
||||
# 2. Commit
|
||||
@@ -128,8 +130,7 @@ def create_release(v: str):
|
||||
# 4. Push
|
||||
print('Pushing commits...')
|
||||
subprocess.check_call(['git', 'push'])
|
||||
subprocess.check_call(['git', 'push', 'origin', v])
|
||||
subprocess.check_call(['git', 'push', 'origin', f'neofetch-{NEOFETCH_NEW_VERSION}'])
|
||||
subprocess.check_call(['git', 'push', 'origin', v, f'neofetch-{NEOFETCH_NEW_VERSION}'])
|
||||
|
||||
|
||||
def deploy():
|
||||
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Echo all commands
|
||||
set -x
|
||||
|
||||
shtab --shell=bash -u hyfetch.main.create_parser > hyfetch/scripts/autocomplete.bash
|
||||
shtab --shell=zsh -u hyfetch.main.create_parser > hyfetch/scripts/autocomplete.zsh
|
||||
shtab --shell=tcsh -u hyfetch.main.create_parser > hyfetch/scripts/autocomplete.csh
|
||||
@@ -0,0 +1,10 @@
|
||||
# Secret of Github Webhook to verify the request is from Github
|
||||
webhook_secret = "secret"
|
||||
|
||||
# Github token and repo to regulate
|
||||
gh_token = "token"
|
||||
gh_repo = "owner/repo"
|
||||
|
||||
# AI harm classifier token
|
||||
harm_classifier_url = "https://example.com/classify"
|
||||
harm_classifier_token = "token"
|
||||
@@ -0,0 +1,155 @@
|
||||
# Start the server with:
|
||||
#
|
||||
# uvicorn tools.gh_moderator:app --reload --port 59523
|
||||
#
|
||||
# pip install openai pygithub fastapi uvicorn hypy_utils
|
||||
|
||||
import hashlib
|
||||
import hmac
|
||||
import json
|
||||
import unicodedata
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
import openai
|
||||
import tomllib as toml
|
||||
from fastapi import FastAPI, Request, Response
|
||||
from github import Github
|
||||
from hypy_utils import write, json_stringify
|
||||
from hypy_utils.logging_utils import setup_logger
|
||||
from openai.openai_object import OpenAIObject
|
||||
|
||||
from hyfetch.color_util import printc
|
||||
|
||||
log = setup_logger()
|
||||
|
||||
|
||||
def read_config():
|
||||
with open(Path.home() / ".config/gh_moderator.toml", "rb") as f:
|
||||
return toml.load(f)
|
||||
|
||||
|
||||
app = FastAPI()
|
||||
config = read_config()
|
||||
webhook_secret = bytes(config["webhook_secret"], "utf-8")
|
||||
|
||||
gh = Github(per_page=100, login_or_token=config["gh_token"])
|
||||
me = gh.get_user()
|
||||
repo = gh.get_repo(config["gh_repo"])
|
||||
printc(f"&a[+] Logged in as {me.login}")
|
||||
|
||||
harm_classifier_url, harm_classifier_token = config["harm_classifier_url"], config["harm_classifier_token"]
|
||||
|
||||
script_path = Path(__file__).parent
|
||||
supported_events = ["issue_comment", "issues", "pull_request", "pull_request_review_comment"]
|
||||
ai_notice = f"If you think this is a false-positive, please contact the owner of this repo."
|
||||
|
||||
openai.organization = config['OpenAI']['org']
|
||||
openai.api_key = config['OpenAI']['key']
|
||||
openai_model = config['OpenAI']['model']
|
||||
|
||||
|
||||
def get_content(event: str, obj: dict) -> str:
|
||||
# Get the content of the event
|
||||
match event:
|
||||
case "issue_comment" | "pull_request_review_comment":
|
||||
return obj["comment"]["body"]
|
||||
case "issues":
|
||||
return obj["issue"]["title"] + "\n\n" + obj["issue"]["body"]
|
||||
case "pull_request":
|
||||
return obj["pull_request"]["title"] + "\n\n" + obj["pull_request"]["body"]
|
||||
|
||||
|
||||
def redact(event: str, obj: dict, id: str, reason: str):
|
||||
"""
|
||||
Redact the event
|
||||
"""
|
||||
printc(f"&c[!] Redacting {event} {id} for {reason}.")
|
||||
tail = f"\n\n> Reason: {reason}\n> {ai_notice}"
|
||||
redact_notice = f"[Redacted by [AI Content Moderator]({me.html_url})]{tail}"
|
||||
|
||||
match event:
|
||||
case "issue_comment":
|
||||
# Redact the comment
|
||||
comment = repo.get_issue(obj["issue"]["number"]).get_comment(obj["comment"]["id"])
|
||||
comment.edit(body=redact_notice)
|
||||
|
||||
case "pull_request_review_comment":
|
||||
# Redact the comment
|
||||
comment = repo.get_pull(obj["pull_request"]["number"]).get_review_comment(obj["comment"]["id"])
|
||||
comment.edit(body=redact_notice)
|
||||
|
||||
case "issues" | "pull_request":
|
||||
# Close the issue
|
||||
iss = repo.get_issue(obj["issue"]["number"])
|
||||
iss.edit(title="[Redacted]", body=redact_notice, state="closed")
|
||||
iss.create_comment(f"Issue closed for potentially offensive content.{tail}")
|
||||
iss.lock("spam")
|
||||
|
||||
|
||||
async def process_event(event: str, obj: dict, id: str):
|
||||
# Preliminary checks
|
||||
if event not in supported_events:
|
||||
printc(f"&7[-] Unknown event: {event}")
|
||||
return
|
||||
|
||||
if obj['repository']['full_name'] != repo.full_name:
|
||||
printc(f"&7[-] Unknown repository: {obj['repository']['full_name']}")
|
||||
return
|
||||
|
||||
blacklist_users = {v for v in (script_path / "blacklist_users.csv").read_text().split("\n") if v}
|
||||
actor = obj["sender"]["login"]
|
||||
if actor == me.login:
|
||||
printc(f"&7[-] Ignoring event by myself: {id} {event} by {actor}")
|
||||
return
|
||||
printc(f"&e[+] Received event: {id} {event} by {actor}")
|
||||
|
||||
if actor in blacklist_users:
|
||||
redact(event, obj, id, "User is blacklisted")
|
||||
return
|
||||
|
||||
# Normalize content
|
||||
content = unicodedata.normalize("NFKC", get_content(event, obj))
|
||||
|
||||
# Ask OpenAI to predict if it's offensive
|
||||
res: OpenAIObject = openai.Moderation.create(content, openai_model).results[0]
|
||||
write(f"moderator-data/openai/{id}.json", json_stringify(res))
|
||||
if res.flagged:
|
||||
printc(f"\n&c[!] AI classified {event} {id} by {actor} as offensive !!!\n> Content: {content}\n\n")
|
||||
reason = " | ".join(f"{k} {res.category_scores.get(k) * 100:.0f}%" for k, v in res.categories.items() if v)
|
||||
redact(event, obj, id, f"Flagged by OpenAI : {reason}")
|
||||
return
|
||||
|
||||
printc(f"&a[~] AI classified {event} {id} by {actor} as safe.")
|
||||
|
||||
|
||||
@app.post("/")
|
||||
async def handle_webhook(request: Request, response: Response):
|
||||
# Read headers
|
||||
event = request.headers.get("X-GitHub-Event")
|
||||
signature = request.headers.get("X-Hub-Signature")
|
||||
|
||||
# Verify the signature
|
||||
body = await request.body()
|
||||
if not verify_signature(signature, body):
|
||||
response.status_code = 401
|
||||
return {"message": "Invalid signature"}
|
||||
|
||||
# Parse the event body
|
||||
obj = json.loads(body.decode())
|
||||
|
||||
# Log the request
|
||||
id = datetime.now().isoformat()
|
||||
write(f"moderator-data/webhook/{id}-{event}.json", json_stringify(obj, indent=4))
|
||||
|
||||
await process_event(event, obj, id)
|
||||
|
||||
return {"message": "OK"}
|
||||
|
||||
|
||||
# Helper function to verify the signature
|
||||
def verify_signature(signature: str, payload: bytes) -> bool:
|
||||
hash_type, signature = signature.split("=")
|
||||
digest = hmac.new(webhook_secret, msg=payload, digestmod=getattr(hashlib, hash_type)).hexdigest()
|
||||
return hmac.compare_digest(digest, signature)
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
import os
|
||||
import time
|
||||
|
||||
from github import Github
|
||||
|
||||
if __name__ == '__main__':
|
||||
gh = Github(per_page=100, login_or_token=os.environ.get('GH_TOKEN'))
|
||||
|
||||
repo = gh.get_repo("hykilpikonna/hyfetch")
|
||||
|
||||
while True:
|
||||
iss = repo.get_issues(state='open')
|
||||
|
||||
for i in iss:
|
||||
if i.user.login in ['Symbolic11']:
|
||||
i.edit(title="[Redacted]", body="[Redacted by Content Moderation Bot]", state="closed")
|
||||
i.create_comment("Issue closed by bot for offensive content.")
|
||||
|
||||
print(f"Closed {i.number}")
|
||||
|
||||
time.sleep(2)
|
||||
@@ -15,7 +15,7 @@ from hypy_utils import write
|
||||
from hyfetch.distros import AsciiArt
|
||||
|
||||
RE_SPLIT = regex.compile('EOF[ \n]*?;;')
|
||||
RE_COLORS = regex.compile("""(?<=set_colors )[a-z\\d ]+(?=\n)""")
|
||||
RE_COLORS = regex.compile("""(?<=set_colors )[\"#a-z\\d ]+(?=\n)""")
|
||||
|
||||
|
||||
def substr(s: str, start: str, end: str | None = None):
|
||||
|
||||
@@ -3,20 +3,19 @@
|
||||
This script turns readme shorthand pull request references (i.e. dylanaraps/neofetch#1946) into full
|
||||
GitHub pull request links.
|
||||
"""
|
||||
import re
|
||||
import regex as re
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
RE_SHORTHAND = re.compile(r"""[a-z0-9]+?/[a-z0-9]+?#[0-9]+""")
|
||||
RE_SHORTHAND = re.compile(r"(\w+?)/(\w+?)#(\d+)")
|
||||
MY_RE = re.compile(r"(?<=[^\w\[])#(\d+)")
|
||||
|
||||
|
||||
def reformat_readme():
|
||||
readme = Path('README.md').read_text()
|
||||
|
||||
for shorthand in RE_SHORTHAND.findall(readme):
|
||||
user, pull = shorthand.split('/')
|
||||
repo, pull = pull.split('#')
|
||||
readme = readme.replace(shorthand, f'[{user}#{pull}](https://github.com/{user}/{repo}/pull/{pull})')
|
||||
readme = re.sub(RE_SHORTHAND, r'[\1#\3](https://github.com/\1/\2/pull/\3)', readme)
|
||||
readme = re.sub(MY_RE, r'[#\1](https://github.com/hykilpikonna/hyfetch/pull/\1)', readme)
|
||||
|
||||
Path('README.md').write_text(readme)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user