mirror of
				https://github.com/NotAShelf/microfetch.git
				synced 2025-10-31 22:32:37 +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]] | [[package]] | ||||||
| name = "microfetch" | name = "microfetch" | ||||||
| version = "0.3.2" | version = "0.3.3" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "color-eyre", |  "color-eyre", | ||||||
|  "nix", |  "nix", | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								Cargo.toml
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								Cargo.toml
									
										
									
									
									
								
							|  | @ -1,15 +1,24 @@ | ||||||
| [package] | [package] | ||||||
| name = "microfetch" | name = "microfetch" | ||||||
| version = "0.3.2" | version = "0.3.3" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| 
 | 
 | ||||||
| [dependencies] | [dependencies] | ||||||
| nix = {version = "0.29", features = ["fs", "hostname"]} | nix = {version = "0.29", features = ["fs", "hostname"]} | ||||||
| color-eyre = { version = "0.6", default-features = false } | color-eyre = { version = "0.6", default-features = false } | ||||||
| 
 | 
 | ||||||
|  | [profile.dev] | ||||||
|  | opt-level = 3 | ||||||
|  | 
 | ||||||
| [profile.release] | [profile.release] | ||||||
| strip = true | strip = true | ||||||
| opt-level = "z" | opt-level = "z" | ||||||
| lto = true | lto = true | ||||||
| codegen-units = 1 | codegen-units = 1 | ||||||
| panic = "abort" | panic = "abort" | ||||||
|  | 
 | ||||||
|  | [profile.profiler] | ||||||
|  | inherits = "release" | ||||||
|  | debug = true | ||||||
|  | split-debuginfo = "unpacked" | ||||||
|  | strip = "none" | ||||||
|  |  | ||||||
							
								
								
									
										49
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										49
									
								
								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, | <h1 align="center">Microfetch</h1> | ||||||
| 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> | ||||||
| 
 | 
 | ||||||
| ## Features | ## Features | ||||||
| 
 | 
 | ||||||
|  | @ -20,7 +34,7 @@ welcome to use it on your system: it's fast. | ||||||
|     - Name |     - Name | ||||||
|     - Version |     - Version | ||||||
|     - Architecture |     - Architecture | ||||||
|   - Current shell (from $SHELL) |   - Current shell (from $SHELL, trimmed if store path) | ||||||
|   - WM/Compositor and display backend |   - WM/Compositor and display backend | ||||||
|   - Memory Usage/Total Memory |   - Memory Usage/Total Memory | ||||||
|   - Storage Usage/Total Storage (for `/` only) |   - Storage Usage/Total Storage (for `/` only) | ||||||
|  | @ -34,11 +48,16 @@ trend seems to be < 2ms on any modern (2015 and after) CPU. Below are the | ||||||
| benchmarks with Hyperfine on my desktop system. | benchmarks with Hyperfine on my desktop system. | ||||||
| 
 | 
 | ||||||
| | Command      |   Mean [ms] | Min [ms] | Max [ms] |       Relative | | | Command      |   Mean [ms] | Min [ms] | Max [ms] |       Relative | | ||||||
| | :-------------------------- | --------: | -------: | -------: | -------: | | | :----------- | ----------: | -------: | -------: | -------------: | | ||||||
| | `target/release/microfetch` | 1.3 ± 0.1 |      1.2 |      3.7 |     1.00 | | | `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 | _As far as I'm concerned, Microfetch is faster than almost every fetch tool | ||||||
| around 80 times faster than neofetch. Results, as stated above, may vary. | 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 | ## 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 | Contributions that help improve performance in specific areas of Microfetch are | ||||||
| welcome. Though, prepare to be bombarded with questions. | 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 | ## License | ||||||
| 
 | 
 | ||||||
| Microfetch is licensed under [GPL3](LICENSE). See the license file for details. | Microfetch is licensed under [GPL3](LICENSE). See the license file for details. | ||||||
|  |  | ||||||
|  | @ -13,5 +13,9 @@ | ||||||
|     packages = forEachSystem (system: { |     packages = forEachSystem (system: { | ||||||
|       default = pkgsForEach.${system}.callPackage ./nix/package.nix {}; |       default = pkgsForEach.${system}.callPackage ./nix/package.nix {}; | ||||||
|     }); |     }); | ||||||
|  | 
 | ||||||
|  |     devShells = forEachSystem (system: { | ||||||
|  |       default = pkgsForEach.${system}.callPackage ./nix/shell.nix {}; | ||||||
|  |     }); | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,17 +1,21 @@ | ||||||
| { | { | ||||||
|   lib, |   lib, | ||||||
|   rustPlatform, |   rustPlatform, | ||||||
|  |   stdenvAdapters, | ||||||
|  |   llvm, | ||||||
| }: let | }: let | ||||||
|   toml = (lib.importTOML ../Cargo.toml).package; |   toml = (lib.importTOML ../Cargo.toml).package; | ||||||
|   pname = toml.name; |   pname = toml.name; | ||||||
|   inherit (toml) version; |   inherit (toml) version; | ||||||
| in | in | ||||||
|   rustPlatform.buildRustPackage { |   rustPlatform.buildRustPackage.override {stdenv = stdenvAdapters.useMoldLinker llvm.stdenv;} { | ||||||
|  |     RUSTFLAGS = "-C link-arg=-fuse-ld=mold"; | ||||||
|  | 
 | ||||||
|     inherit pname version; |     inherit pname version; | ||||||
| 
 | 
 | ||||||
|     src = builtins.path { |     src = builtins.path { | ||||||
|       name = "${pname}-${version}"; |       name = "${pname}-${version}"; | ||||||
|       path = ../.; |       path = lib.sources.cleanSource ../.; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     cargoLock.lockFile = ../Cargo.lock; |     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}; | use std::{env, io}; | ||||||
| 
 | 
 | ||||||
| pub fn get_desktop_info() -> Result<String, io::Error> { | 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::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::system::{get_memory_usage, get_root_disk_usage, get_shell, get_username_and_hostname}; | ||||||
| use crate::uptime::get_current; | use crate::uptime::get_current; | ||||||
|  | 
 | ||||||
| use color_eyre::Report; | use color_eyre::Report; | ||||||
| use nix::sys::sysinfo::sysinfo; | use nix::sys::sysinfo::sysinfo; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
|  | use color_eyre::Result; | ||||||
| use nix::sys::statvfs::statvfs; | use nix::sys::statvfs::statvfs; | ||||||
| use nix::sys::sysinfo::SysInfo; | use nix::sys::sysinfo::SysInfo; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,21 +1,10 @@ | ||||||
| use std::fs::File; | use color_eyre::Result; | ||||||
| use std::io::{self, BufRead, BufReader}; | use nix::sys::sysinfo::sysinfo; | ||||||
| use std::path::Path; | use std::io; | ||||||
| 
 | 
 | ||||||
| pub fn get_current() -> Result<String, io::Error> { | pub fn get_current() -> Result<String, io::Error> { | ||||||
|     let path = Path::new("/proc/uptime"); |     let info = sysinfo().map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; | ||||||
|     let file = File::open(path)?; |     let uptime_seconds = info.uptime().as_secs_f64(); | ||||||
|     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 total_minutes = (uptime_seconds / 60.0).round() as u64; | ||||||
|     let days = total_minutes / (60 * 24); |     let days = total_minutes / (60 * 24); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue