diff --git a/.envrc b/.envrc
deleted file mode 100644
index 9e15f92..0000000
--- a/.envrc
+++ /dev/null
@@ -1,5 +0,0 @@
-watch_file flake.nix
-watch_file flake.lock
-watch_dir nix
-
-use flake
diff --git a/Cargo.lock b/Cargo.lock
index 6251ee2..1a1878b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -105,7 +105,7 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "microfetch"
-version = "0.3.3"
+version = "0.3.2"
dependencies = [
"color-eyre",
"nix",
diff --git a/Cargo.toml b/Cargo.toml
index 9682a7d..3f9779b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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"
diff --git a/README.md b/README.md
index decae73..55f928c 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,11 @@
-
-

-
-

-
+# Microfetch
-Microfetch
+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)
-
-
-
-
+
## 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.
diff --git a/flake.nix b/flake.nix
index b5035c3..4ee4f5f 100644
--- a/flake.nix
+++ b/flake.nix
@@ -13,9 +13,5 @@
packages = forEachSystem (system: {
default = pkgsForEach.${system}.callPackage ./nix/package.nix {};
});
-
- devShells = forEachSystem (system: {
- default = pkgsForEach.${system}.callPackage ./nix/shell.nix {};
- });
};
}
diff --git a/nix/package.nix b/nix/package.nix
index 1a7dde3..f2c6e4f 100644
--- a/nix/package.nix
+++ b/nix/package.nix
@@ -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;
diff --git a/nix/shell.nix b/nix/shell.nix
deleted file mode 100644
index 5efe65c..0000000
--- a/nix/shell.nix
+++ /dev/null
@@ -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}";
-}
diff --git a/src/desktop.rs b/src/desktop.rs
index 9d72325..0b93ea5 100644
--- a/src/desktop.rs
+++ b/src/desktop.rs
@@ -1,4 +1,3 @@
-use color_eyre::Result;
use std::{env, io};
pub fn get_desktop_info() -> Result {
diff --git a/src/main.rs b/src/main.rs
index 30fa78a..713bf70 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -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;
diff --git a/src/system.rs b/src/system.rs
index 551a833..bc770b7 100644
--- a/src/system.rs
+++ b/src/system.rs
@@ -1,4 +1,3 @@
-use color_eyre::Result;
use nix::sys::statvfs::statvfs;
use nix::sys::sysinfo::SysInfo;
diff --git a/src/uptime.rs b/src/uptime.rs
index 6c44640..b89cb42 100644
--- a/src/uptime.rs
+++ b/src/uptime.rs
@@ -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 {
- 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);