mirror of
https://github.com/NotAShelf/microfetch.git
synced 2024-11-22 23:40:42 +00:00
Compare commits
7 commits
2ecf9303fa
...
17152f9d14
Author | SHA1 | Date | |
---|---|---|---|
17152f9d14 | |||
52d9a479cf | |||
1ced9b4527 | |||
7de3f27642 | |||
5c335d179e | |||
7bed1f583b | |||
0fb8fbaae6 |
11 changed files with 98 additions and 32 deletions
5
.envrc
Normal file
5
.envrc
Normal file
|
@ -0,0 +1,5 @@
|
|||
watch_file flake.nix
|
||||
watch_file flake.lock
|
||||
watch_dir nix
|
||||
|
||||
use flake
|
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -105,7 +105,7 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
|||
|
||||
[[package]]
|
||||
name = "microfetch"
|
||||
version = "0.3.2"
|
||||
version = "0.3.3"
|
||||
dependencies = [
|
||||
"color-eyre",
|
||||
"nix",
|
||||
|
|
11
Cargo.toml
11
Cargo.toml
|
@ -1,15 +1,24 @@
|
|||
[package]
|
||||
name = "microfetch"
|
||||
version = "0.3.2"
|
||||
version = "0.3.3"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
nix = {version = "0.29", features = ["fs", "hostname"]}
|
||||
color-eyre = { version = "0.6", default-features = false }
|
||||
|
||||
[profile.dev]
|
||||
opt-level = 3
|
||||
|
||||
[profile.release]
|
||||
strip = true
|
||||
opt-level = "z"
|
||||
lto = true
|
||||
codegen-units = 1
|
||||
panic = "abort"
|
||||
|
||||
[profile.profiler]
|
||||
inherits = "release"
|
||||
debug = true
|
||||
split-debuginfo = "unpacked"
|
||||
strip = "none"
|
||||
|
|
51
README.md
51
README.md
|
@ -1,11 +1,25 @@
|
|||
# Microfetch
|
||||
<div align="center">
|
||||
<img src="https://deps.rs/repo/github/notashelf/microfetch/status.svg" alt="https://deps.rs/repo/github/notashelf/microfetch">
|
||||
<!-- <img src="https://img.shields.io/github/v/release/notashelf/microfetch?display_name=tag&color=DEA584"> -->
|
||||
<img src="https://img.shields.io/github/stars/notashelf/microfetch?label=stars&color=DEA584">
|
||||
</div>
|
||||
|
||||
A stupidly simple fetch tool, written in Rust. Runs in a fraction of a second,
|
||||
displays most nonsense people on r/unixporn care about. Aims to replace
|
||||
fastfetch on my system, but probably not on yours. Though you are more than
|
||||
welcome to use it on your system: it's fast.
|
||||
<h1 align="center">Microfetch</h1>
|
||||
|
||||
![Demo](.github/assets/demo.png)
|
||||
Stupidly simple, laughably fast fetch tool. Written in Rust for speed and ease
|
||||
of maintainability. Runs in a _fraction of a millisecond_ and displays _most_ of
|
||||
the nonsense you'd see posted on r/unixporn or other internet communities. Aims
|
||||
to replace [fastfetch](https://github.com/fastfetch-cli/fastfetch) on my
|
||||
personal system, but [probably not yours](#customizing). Though, you are more
|
||||
than welcome to use it on your system: it's pretty [fast...](#benchmarks)
|
||||
|
||||
<p align="center">
|
||||
<img
|
||||
alt="latest demo"
|
||||
src="./.github/assets/demo.png"
|
||||
width="850px"
|
||||
>
|
||||
</p>
|
||||
|
||||
## Features
|
||||
|
||||
|
@ -20,7 +34,7 @@ welcome to use it on your system: it's fast.
|
|||
- Name
|
||||
- Version
|
||||
- Architecture
|
||||
- Current shell (from $SHELL)
|
||||
- Current shell (from $SHELL, trimmed if store path)
|
||||
- WM/Compositor and display backend
|
||||
- Memory Usage/Total Memory
|
||||
- Storage Usage/Total Storage (for `/` only)
|
||||
|
@ -33,12 +47,17 @@ Microfetch's performance is mostly hardware-dependant, however, the overall
|
|||
trend seems to be < 2ms on any modern (2015 and after) CPU. Below are the
|
||||
benchmarks with Hyperfine on my desktop system.
|
||||
|
||||
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|
||||
| :-------------------------- | --------: | -------: | -------: | -------: |
|
||||
| `target/release/microfetch` | 1.3 ± 0.1 | 1.2 | 3.7 | 1.00 |
|
||||
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|
||||
| :----------- | ----------: | -------: | -------: | -------------: |
|
||||
| `microfetch` | 1.3 ± 0.0 | 1.3 | 1.4 | 1.00 |
|
||||
| `pfetch` | 254.2 ± 4.8 | 246.7 | 264.9 | 191.97 ± 7.10 |
|
||||
| `neofetch` | 735.4 ± 9.5 | 721.1 | 752.8 | 555.48 ± 19.08 |
|
||||
| `fastfetch` | 31.9 ± 0.8 | 30.8 | 33.8 | 24.08 ± 0.98 |
|
||||
|
||||
On an average configuration, this is roughly 25 times faster than fastfetch and
|
||||
around 80 times faster than neofetch. Results, as stated above, may vary.
|
||||
_As far as I'm concerned, Microfetch is faster than almost every fetch tool
|
||||
there is. The only downside of using Rust is introducing more "bloated"
|
||||
dependency trees and increasing build times. The latter is easily mitigated with
|
||||
Nix's binary cache, though._
|
||||
|
||||
## Customizing
|
||||
|
||||
|
@ -64,6 +83,14 @@ general rule of thumb consider talking to me before creating a feature PR.
|
|||
Contributions that help improve performance in specific areas of Microfetch are
|
||||
welcome. Though, prepare to be bombarded with questions.
|
||||
|
||||
## Hacking
|
||||
|
||||
A Nix flake is provided. `nix develop` to get started. Direnv users may simply
|
||||
run `direnv allow` to get started.
|
||||
|
||||
Non-nix users will need `cargo` and `gcc` installed on their system, see
|
||||
`Cargo.toml` for available release profiles.
|
||||
|
||||
## License
|
||||
|
||||
Microfetch is licensed under [GPL3](LICENSE). See the license file for details.
|
||||
|
|
|
@ -13,5 +13,9 @@
|
|||
packages = forEachSystem (system: {
|
||||
default = pkgsForEach.${system}.callPackage ./nix/package.nix {};
|
||||
});
|
||||
|
||||
devShells = forEachSystem (system: {
|
||||
default = pkgsForEach.${system}.callPackage ./nix/shell.nix {};
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
{
|
||||
lib,
|
||||
rustPlatform,
|
||||
stdenvAdapters,
|
||||
llvm,
|
||||
}: let
|
||||
toml = (lib.importTOML ../Cargo.toml).package;
|
||||
pname = toml.name;
|
||||
inherit (toml) version;
|
||||
in
|
||||
rustPlatform.buildRustPackage {
|
||||
rustPlatform.buildRustPackage.override {stdenv = stdenvAdapters.useMoldLinker llvm.stdenv;} {
|
||||
RUSTFLAGS = "-C link-arg=-fuse-ld=mold";
|
||||
|
||||
inherit pname version;
|
||||
|
||||
src = builtins.path {
|
||||
name = "${pname}-${version}";
|
||||
path = ../.;
|
||||
path = lib.sources.cleanSource ../.;
|
||||
};
|
||||
|
||||
cargoLock.lockFile = ../Cargo.lock;
|
||||
|
|
25
nix/shell.nix
Normal file
25
nix/shell.nix
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
mkShell,
|
||||
rust-analyzer-unwrapped,
|
||||
rustfmt,
|
||||
clippy,
|
||||
cargo,
|
||||
rustc,
|
||||
gcc,
|
||||
rustPlatform,
|
||||
}:
|
||||
mkShell {
|
||||
strictDeps = true;
|
||||
|
||||
nativeBuildInputs = [
|
||||
cargo
|
||||
rustc
|
||||
gcc
|
||||
|
||||
rust-analyzer-unwrapped
|
||||
rustfmt
|
||||
clippy
|
||||
];
|
||||
|
||||
env.RUST_SRC_PATH = "${rustPlatform.rustLibSrc}";
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
use color_eyre::Result;
|
||||
use std::{env, io};
|
||||
|
||||
pub fn get_desktop_info() -> Result<String, io::Error> {
|
||||
|
|
|
@ -9,6 +9,7 @@ use crate::desktop::get_desktop_info;
|
|||
use crate::release::{get_os_pretty_name, get_system_info};
|
||||
use crate::system::{get_memory_usage, get_root_disk_usage, get_shell, get_username_and_hostname};
|
||||
use crate::uptime::get_current;
|
||||
|
||||
use color_eyre::Report;
|
||||
use nix::sys::sysinfo::sysinfo;
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use color_eyre::Result;
|
||||
use nix::sys::statvfs::statvfs;
|
||||
use nix::sys::sysinfo::SysInfo;
|
||||
|
||||
|
|
|
@ -1,21 +1,10 @@
|
|||
use std::fs::File;
|
||||
use std::io::{self, BufRead, BufReader};
|
||||
use std::path::Path;
|
||||
use color_eyre::Result;
|
||||
use nix::sys::sysinfo::sysinfo;
|
||||
use std::io;
|
||||
|
||||
pub fn get_current() -> Result<String, io::Error> {
|
||||
let path = Path::new("/proc/uptime");
|
||||
let file = File::open(path)?;
|
||||
let mut reader = BufReader::new(file);
|
||||
|
||||
let mut line = String::new();
|
||||
reader.read_line(&mut line)?;
|
||||
|
||||
let uptime_seconds: f64 = line
|
||||
.split_whitespace()
|
||||
.next()
|
||||
.ok_or_else(|| io::Error::new(io::ErrorKind::Other, "Failed to parse uptime"))?
|
||||
.parse()
|
||||
.map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
|
||||
let info = sysinfo().map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
|
||||
let uptime_seconds = info.uptime().as_secs_f64();
|
||||
|
||||
let total_minutes = (uptime_seconds / 60.0).round() as u64;
|
||||
let days = total_minutes / (60 * 24);
|
||||
|
|
Loading…
Reference in a new issue