Compare commits

..

No commits in common. "17152f9d142ce0badde14018703bb1590e3df947" and "2ecf9303fa0e5ab5519edead04b55827a3facb27" have entirely different histories.

11 changed files with 32 additions and 98 deletions

5
.envrc
View file

@ -1,5 +0,0 @@
watch_file flake.nix
watch_file flake.lock
watch_dir nix
use flake

2
Cargo.lock generated
View file

@ -105,7 +105,7 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "microfetch"
version = "0.3.3"
version = "0.3.2"
dependencies = [
"color-eyre",
"nix",

View file

@ -1,24 +1,15 @@
[package]
name = "microfetch"
version = "0.3.3"
version = "0.3.2"
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"

View file

@ -1,25 +1,11 @@
<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>
# Microfetch
<h1 align="center">Microfetch</h1>
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.
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>
![Demo](.github/assets/demo.png)
## Features
@ -34,7 +20,7 @@ than welcome to use it on your system: it's pretty [fast...](#benchmarks)
- Name
- Version
- Architecture
- Current shell (from $SHELL, trimmed if store path)
- Current shell (from $SHELL)
- WM/Compositor and display backend
- Memory Usage/Total Memory
- Storage Usage/Total Storage (for `/` only)
@ -47,17 +33,12 @@ 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 |
| :----------- | ----------: | -------: | -------: | -------------: |
| `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 |
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
| :-------------------------- | --------: | -------: | -------: | -------: |
| `target/release/microfetch` | 1.3 ± 0.1 | 1.2 | 3.7 | 1.00 |
_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._
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.
## Customizing
@ -83,14 +64,6 @@ 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.

View file

@ -13,9 +13,5 @@
packages = forEachSystem (system: {
default = pkgsForEach.${system}.callPackage ./nix/package.nix {};
});
devShells = forEachSystem (system: {
default = pkgsForEach.${system}.callPackage ./nix/shell.nix {};
});
};
}

View file

@ -1,21 +1,17 @@
{
lib,
rustPlatform,
stdenvAdapters,
llvm,
}: let
toml = (lib.importTOML ../Cargo.toml).package;
pname = toml.name;
inherit (toml) version;
in
rustPlatform.buildRustPackage.override {stdenv = stdenvAdapters.useMoldLinker llvm.stdenv;} {
RUSTFLAGS = "-C link-arg=-fuse-ld=mold";
rustPlatform.buildRustPackage {
inherit pname version;
src = builtins.path {
name = "${pname}-${version}";
path = lib.sources.cleanSource ../.;
path = ../.;
};
cargoLock.lockFile = ../Cargo.lock;

View file

@ -1,25 +0,0 @@
{
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}";
}

View file

@ -1,4 +1,3 @@
use color_eyre::Result;
use std::{env, io};
pub fn get_desktop_info() -> Result<String, io::Error> {

View file

@ -9,7 +9,6 @@ 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;

View file

@ -1,4 +1,3 @@
use color_eyre::Result;
use nix::sys::statvfs::statvfs;
use nix::sys::sysinfo::SysInfo;

View file

@ -1,10 +1,21 @@
use color_eyre::Result;
use nix::sys::sysinfo::sysinfo;
use std::io;
use std::fs::File;
use std::io::{self, BufRead, BufReader};
use std::path::Path;
pub fn get_current() -> Result<String, io::Error> {
let info = sysinfo().map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
let uptime_seconds = info.uptime().as_secs_f64();
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 total_minutes = (uptime_seconds / 60.0).round() as u64;
let days = total_minutes / (60 * 24);