Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/HorlogeSkynet/archey4
:computer: Maintained fork of the original Archey (Linux) system tool
https://github.com/HorlogeSkynet/archey4
archey bsd linux monitoring neofetch python3 screenfetch screenshot system-information
Last synced: about 2 months ago
JSON representation
:computer: Maintained fork of the original Archey (Linux) system tool
- Host: GitHub
- URL: https://github.com/HorlogeSkynet/archey4
- Owner: HorlogeSkynet
- License: gpl-3.0
- Created: 2017-04-27T23:53:45.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-04-13T20:22:08.000Z (8 months ago)
- Last Synced: 2024-04-14T06:59:52.773Z (8 months ago)
- Topics: archey, bsd, linux, monitoring, neofetch, python3, screenfetch, screenshot, system-information
- Language: Python
- Homepage: https://git.io/archey4
- Size: 1.14 MB
- Stars: 267
- Watchers: 9
- Forks: 36
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-fetch - archey4 - Simple system information tool written in Python `Python` (Operation System / Cross Platform)
README
# Archey 4
> Archey is a simple system information tool written in Python
## Why (again) a f\*cking new Archey fork ?
The answer is [here](https://samuel.forestier.app/archey4).
> Note : Since the 21st September of 2017, you may notice that this repository no longer has the official status of fork.
> Actually, the maintainer decided to separate it from the original one's "network" with the help of _GitHub_'s staff.
> Nevertheless, **this piece of software is still a fork of [djmelik's Archey project](https://github.com/djmelik/archey.git)**.## Features
* Run as quickly as possible
* Stay as light as possible
* Keep entries ordered despite parallelism
* Extensive local and public IP addresses detection
* General temperature detection
* JSON output
* Screen capture ("best effort")
* Custom entries## Supported platforms
* BSD and derivatives
* Darwin (macOS)
* GNU/Linux distributions
* WSL> Details [here](https://github.com/HorlogeSkynet/archey4/blob/master/archey/distributions.py#L17).
## What does it look like ?
## Which packages do I need to run this project ?
### Required packages
* `python3` (>= 3.6)
* `python3-distro` (`python-distro` on Arch Linux)
* `python3-netifaces` (`python-netifaces` on Arch Linux)> PyPy is supported and may replace CPython.
> Looking for Python 3.4 support ? Please refer to the latest v4.9 release.
> Looking for Python 3.5 support ? Please refer to the latest v4.10 release.### Highly recommended packages
| Environments | Packages | Reasons | Notes |
| :-------------------- | :-------------------------------- | :--------------------------------------------------- | :------------------------------ |
| All | `procps` (maybe `procps-ng`) | Many entries would not work as expected | Would provide `ps` |
| All | `dnsutils` (maybe `bind-tools`) | **WAN\_IP** would be detected faster | Would provide `dig` |
| All | `lm-sensors` (maybe `lm_sensors`) | **Temperature** would be more accurate | N/A |
| macOS (Darwin) | [`iStats`] or [`osx-cpu-temp`] | **Temperature** wouldn't be detected without it | N/A |
| Graphical (desktop) | `pciutils` or `pciconf` | **GPU** wouldn't be detected without it | Would provide `lspci`/`pciconf` |
| Graphical (desktop) | `wmctrl` | **WindowManager** would be more accurate | N/A |
| Virtual w/o `systemd` | `virt-what` | **Model** would contain details about the hypervisor | **root** privileges required |## Installation
### Install from package
First, grab a package for your distribution from the latest release [here](https://github.com/HorlogeSkynet/archey4/releases/latest).
Now, it's time to use your favorite package manager. Some examples :* Arch-based distributions : `pacman -U ./archey4-4.X.Y.Z-R-any.pkg.tar.zst`
* Debian-based distributions : `apt install ./archey4_4.X.Y.Z-R_all.deb`
* RPM-based distributions : `dnf install ./archey4-4.X.Y.Z-R.py??.noarch.rpm`Further information about packaging are available [here](https://github.com/HorlogeSkynet/archey4/wiki/Packaging).
### Install from [PyPI](https://pypi.org/project/archey4/)
```bash
pip3 install archey4
```### Install from [AUR](https://aur.archlinux.org/packages/archey4/)
```bash
yay -S archey4
```### Install from [Homebrew](https://formulae.brew.sh/formula/archey4)
```bash
brew install archey4
```### Install from [FreeBSD ports](https://cgit.freebsd.org/ports/tree/sysutils/archey4)
```bash
pkg install archey4
```### Install from source
#### Step 1 : Fetch sources
```bash
# If you want the latest release :
wget -qO archey4.tar.gz "https://github.com/HorlogeSkynet/archey4/archive/v4.15.0.0.tar.gz"
tar xvzf archey4.tar.gz
cd archey4-*/# If you want the latest revision :
git clone https://github.com/HorlogeSkynet/archey4.git
cd archey4/
```#### Step 2 : Installation
```bash
# If you have PIP installed on your system :
pip3 install .# But if you don't have PIP, no worries :
python3 setup.py install
```#### Step 3 (optional) : Configuration
```bash
# System-wide configuration file (privileges required) :
install -D -m0644 config.json /etc/archey4/config.json# User-specific configuration file :
install -D -m0644 config.json ~/.config/archey4/config.json
```#### Step 4 (optional) : Standalone building
> Some years ago, Archey was a simple and unique Python file.
> Project evolved, and now it's a Python package.
> Some procedures below walk you through several ways of building Archey as a standalone program.```bash
# Using Nuitka (recommended) :
apt install -y patchelf
pip3 install nuitka
python3 -m nuitka \
--onefile \
--include-package=archey.logos \
--output-filename=archey \
--output-dir=dist \
--quiet \
archey/__main__.py# Using PEX (recommended) :
pip3 install pex
pex \
-o dist/archey \
-m archey \
.# Since v4.10 logos are dynamically imported for performance purposes.
# This means that we have to explicitly make Stickytape and PyInstaller include them.
# Please **replace** `debian` identifier below by yours (multiple flags allowed).# Using Stickytape :
pip3 install stickytape
stickytape \
--copy-shebang \
--add-python-path . \
--output-file dist/archey \
--add-python-module archey.logos.debian \
archey/__main__.py
chmod +x dist/archey# Using PyInstaller :
pip3 install pyinstaller
pyinstaller \
--distpath dist \
--specpath dist \
--name archey \
--onefile archey/__main__.py \
--hidden-import archey.logos.debian \
--log-level WARN
```Resulting program may now be installed system-wide (privileges required).
```bash
# Standalone execution.
./dist/archey# System-wide install.
install -D -m0755 dist/archey /usr/local/bin/archey
```## Usage
```bash
archey --help
```or if you only want to try this out (for instance, from source) :
```bash
python3 -m archey --help
```## Configuration (optional)
Since v4.3.0, Archey 4 **may** be "tweaked" a bit with external configuration.
You can place a [`config.json`](config.json) file in these locations :1. `/etc/archey4/config.json` (system preferences)
2. `~/.config/archey4/config.json` (user preferences)
3. `./config.json` (local preferences)**If an option is defined in multiple places, it will be overridden according to the order above (local preferences > user preferences > system preferences).**
Alternatively, you may specify your own configuration file with the `-c` command-line option.
The [example file](config.json) provided in this repository lists exhaustively the parameters you can set.
Below stand further descriptions for each available (default) option :```javascript
{
// If set to `false`, configurations defined afterwards won't be loaded.
// Developers running Archey from the original project may keep in there the original `config.json`,
// while having their own external configuration set elsewhere.
"allow_overriding": true,
// Set to `false` to disable multi-threaded loading of entries.
"parallel_loading": true,
// If set to `true`, any execution warning or error would be hidden.
// Configuration parsing warnings **would** still be shown.
"suppress_warnings": false,
// Use this option to specify a custom color for entries (logo won't be affected).
// Value should be a string suitable for inclusion in the ANSI/ECMA-48 escape code for setting graphical rendition
//
// For instance "5;31;47" would result in red text blinking on white background.
// See for more information.
"entries_color": "",
// Set this option to `false` to force Archey to use its own colors palettes.
// `true` by default to honor os-release(5) `ANSI_COLOR` option.
"honor_ansi_color": true,
// Set this option to an alternative logo style identifier instead of the default one for your distro.
// For example, "retro" would show the retro styled Apple's logo on Darwin platforms.
// You can set it to "none" to completely hide distribution logo.
// Note that the `--logo-style` argument overrides this setting.
"logo_style": "",
// Enable icons for entries.
// A terminal "nerd font" is required to display the icons. Otherwise, these are simply missing and a placeholder will be seen.
// You can also refer to : .
// Make sure that your system locale supports UTF-8.
"entries_icon": false,
// Entries list.
// Add a `disabled` option set to `true` to temporary hide one.
// You may change entry displayed name by adding a `name` option.
// You may change entry displayed icon by adding an `icon` option.
// You may re-order the entries list as you wish.
"entries": [
{ "type": "User" },
{ "type": "Hostname" },
{ "type": "Model" },
{ "type": "Distro" },
{
"type": "Kernel",
// Set to `true` to enable kernel release check against .
// /!\ `DO_NOT_TRACK` environment variable may affect this feature behavior ! /!\
"check_version": false
},
{ "type": "Uptime" },
{
"type": "LoadAverage",
// Number of decimal places to display for the load average.
"decimal_places": 2,
// Some thresholds you can adjust to customize warning/danger colors.
"warning_threshold": 1.0,
"danger_threshold": 2.0
},
{ "type": "Processes" },
{ "type": "WindowManager" },
{ "type": "DesktopEnvironment" },
{ "type": "Shell" },
{
"type": "Terminal",
// Leave this option set to `true` to display a beautiful colors palette.
// Set it to `false` to allow compatibility with non-Unicode locales.
"use_unicode": true
},
{
"type": "Packages",
// Set to `true` to sum up all installed package counts.
"combine_total": false,
// Set to `false` not to join all packages tool counts on the same line.
"one_line": true,
// Set to `true` to include tools with no installed package.
"show_zeros": false
},
{
"type": "Temperature",
// The character to display between the temperature value and the unit (as '°' in 53.2°C).
"char_before_unit": " ",
"sensors_chipsets": [
// Whitelist of chipset identifiers (strings) passed to LM-SENSORS when computing the average temperature.
// Leaving empty (the default) would make Archey process input data from **all** available chipsets.
// Use this option if one of your sensors happens to return irrelevant values, or if you want to process only a subset of them.
//
// You may want to run `sensors -A` to list the available chipsets on your system (e.g. `coretemp-isa-0000`, `acpitz-acpi-0`, ...).
// Then, you will be able to add them once double-quoted in this list, for instance :
//"coretemp-isa-0000",
//"acpitz-acpi-0"
],
"sensors_excluded_subfeatures": [
// Blacklist of chipset "subfeature" (in LM-SENSORS terms) identifiers (strings) to exclude from average computation.
// Leaving empty (the default) would make Archey process input data from **all** available subfeatures providing valid temperatures.
//
// For instance, AMD Ryzen X series CPUs include a thermal bias sensor, appearing as a subfeature named `Tctl`.
// Excluding it can be achieved this way :
//"Tctl"
],
// Display temperature values in Fahrenheit instead of Celsius.
"use_fahrenheit": false
},
{
"type": "CPU",
// Set to `true` to join all CPUs on the same line.
"one_line": false,
// Set to `false` to hide the number of cores.
"show_cores": true,
//
// As explained above, you may rename entries as you wish.
"name": "Processor"
},
{
"type": "GPU",
// Set to `true` to join all GPUs on the same line.
"one_line": false,
// The maximum number of GPUs you want to display.
// `false` --> Unlimited.
"max_count": 2
},
{
"type": "RAM",
// Some threshold values you can adjust affecting warning/danger colors.
"warning_use_percent": 33.3,
"danger_use_percent": 66.7
},
{
"type": "Disk",
// Which filesystems to show:
// `["local"]` shows only local filesystems.
// You can alternatively list specific filesystems as:
// * A list of device paths - e.g. `["/dev/sda1", "/dev/nvme0n1p1"]`
// * A list of mount points - e.g. `["/", "/mnt"]`
// * A combination of the above - e.g. `["/", "/dev/sda2"]`
"show_filesystems": ["local"],
// Set to `false` to write each filesystem on its own line.
"combine_total": true,
// Defines which labels to use for each disk (only works if `combine_total` is false!)
// The options available are:
// * `"mount_points"`: Shows the mount point of the filesystem.
// e.g. `Disk (/): 10.0 GiB/100.0 GiB`
// `Disk (/mnt): 15.0 GiB / 200.0 GiB`
// * `"device_paths"`: Shows the device path of the filesystem.
// e.g. `Disk (/dev/sda1): 10.0 GiB / 100.0 GiB`
// `Disk (/dev/mmcblk0p1): 15.0 GiB / 200.0 GiB`
// * `false` or `null` (no quote marks!): Don't show any device labels.
// e.g. `Disk: 10.0 GiB / 100.0 GiB`
// `Disk: 15.0 GiB / 200.0 GiB`
"disk_labels": null,
// Set to `true` to hide the "Disk" entry name from the output.
// i.e. null --> `Disk (/):`
// false --> `Disk (/):`
// true --> `(/):`
"hide_entry_name": null,
// Some threshold values you can adjust affecting warning/danger colors.
"warning_use_percent": 50,
"danger_use_percent": 75
},
{
"type": "LAN_IP",
// Set to `false` not to join all IP addresses on the same line.
"one_line": true,
// The maximum number of local addresses you want to display.
// `false` --> Unlimited.
"max_count": 2,
// Set to `true` if your local network does not honor RFC1918.
"show_global": false,
// Set to `false` to hide link-local IP addresses (see RFC3927).
"show_link_local": true,
// Set to `false` to only display IPv4 LAN addresses.
"ipv6_support": true
},
{
"type": "WAN_IP",
//
// As explained above, you may temporary hide entries as you wish.
// See below example to hide your public IP addresses before posting your configuration on Internet.
//"disabled": true,
//
// Set to `false` not to join all IP addresses on the same line.
"one_line": true,
//
// Below are settings relative to IPv4/IPv6 public addresses retrieval.
// I hope options are self-explanatory.
// You may set `dns_query` (or `http_url`) to `false` to disable them.
// You may directly set `ipv4` or `ipv6` fields to `false` to completely disable them.
//
// server sources : .
//
// /!\ `DO_NOT_TRACK` environment variable may affect this entry behavior ! /!\
"ipv4": {
"dns_query": "myip.opendns.com",
"dns_resolver": "resolver1.opendns.com",
"dns_timeout": 1,
"http_url": "https://v4.ident.me/",
"http_timeout": 1
},
"ipv6": {
"dns_query": "myip.opendns.com",
"dns_resolver": "resolver1.opendns.com",
"dns_timeout": 1,
"http_url": "https://v6.ident.me/",
"http_timeout": 1
}
},
{
"type": "Custom",
// `command` option is mandatory. `shell` option defaults to `false`.
// Don't forget to set a `name` (and optionally an icon) !
"name": "GPU",
"icon": "\ue735",
// The custom shell command to execute.
// /!\ If you're running AppArmor, don't forget to extend Archey profile through /etc/apparmor.d/local/usr.bin.archey4 !
"shell": true,
"command": "lshw -C display 2> /dev/null | rg product | cut -d ':' -f 2",
// A custom program and its arguments to execute.
"shell": false,
"command": ["echo", "My super GPU model !"],
// Whether or not command exit status code should be checked (defaults to `true`).
"check": true,
// Whether or not STDERR should be silenced instead of logged (defaults to `true`).
"log_stderr": true,
// Set to `false` not to join all output content on the same line.
"one_line": true
}
],
"default_strings": {
// Use this section to override default strings (internationalization).
}
}```
## Test cases
An extensive test suite is available.
Here is a short procedure to run them (you'll only need `python3`) :```bash
git clone https://github.com/HorlogeSkynet/archey4.git
cd archey4/
python3 -m unittest
```Any improvement would be appreciated.
## Notes to users
* For a good ASCII art display, a terminal monospaced font is recommended (see ).
* If you experience any trouble during the installation or usage, please do **[open an issue](https://github.com/HorlogeSkynet/archey4/issues/new)**.
* If you had to tweak this project to make it work on your system, please **[open a pull request](https://github.com/HorlogeSkynet/archey4/pulls)** so as to share your modifications with the rest of the world and participate in this project !
* If your distribution is not (currently) supported, please check [How do I add a distribution to Archey?](https://github.com/HorlogeSkynet/archey4/wiki/How-do-I-add-a-distribution-to-Archey%3F).
## Notes to developers
* Don't forget to check the [Info for contributors](https://github.com/HorlogeSkynet/archey4/wiki/Info-for-contributors) wiki page.
* Any patch sent by [e-mail](mailto:[email protected]) will get properly reviewed.
[`iStats`]: https://github.com/Chris911/iStats
[`osx-cpu-temp`]: https://github.com/lavoiesl/osx-cpu-temp