mirror of
				https://github.com/NotAShelf/microfetch.git
				synced 2025-10-31 14:22:38 +00:00 
			
		
		
		
	Compare commits
	
		
			6 commits
		
	
	
		
			
				fc62d72cab
			
			...
			
				2ecf9303fa
			
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2ecf9303fa | |||
| 7d693ea26f | |||
| 72d3130aa0 | |||
| 482ffe96cd | |||
| cf0a52150c | |||
| e3112dba1d | 
					 6 changed files with 50 additions and 31 deletions
				
			
		
							
								
								
									
										2
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							|  | @ -105,7 +105,7 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" | |||
| 
 | ||||
| [[package]] | ||||
| name = "microfetch" | ||||
| version = "0.3.0" | ||||
| version = "0.3.2" | ||||
| dependencies = [ | ||||
|  "color-eyre", | ||||
|  "nix", | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| [package] | ||||
| name = "microfetch" | ||||
| version = "0.3.0" | ||||
| version = "0.3.2" | ||||
| edition = "2021" | ||||
| 
 | ||||
| [dependencies] | ||||
|  |  | |||
							
								
								
									
										36
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										36
									
								
								README.md
									
										
									
									
									
								
							|  | @ -12,7 +12,7 @@ welcome to use it on your system: it's fast. | |||
| - Fast | ||||
| - Really fast | ||||
| - Minimal dependencies | ||||
| - Actually very fast | ||||
| - Actually really fast | ||||
| - Cool NixOS logo (other, inferior, distros are not supported) | ||||
| - Reliable detection of following info: | ||||
|   - Hostname/Username | ||||
|  | @ -25,11 +25,45 @@ welcome to use it on your system: it's fast. | |||
|   - Memory Usage/Total Memory | ||||
|   - Storage Usage/Total Storage (for `/` only) | ||||
|   - Shell Colors | ||||
| - Did I mention fast? | ||||
| 
 | ||||
| ## Benchmarks | ||||
| 
 | ||||
| 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 | | ||||
| 
 | ||||
| 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 | ||||
| 
 | ||||
| You can't. | ||||
| 
 | ||||
| ### Why? | ||||
| 
 | ||||
| Customization, of any kind, is expensive: I could try reading environment | ||||
| variables, parse command-line arguments or read a configuration file but all of | ||||
| those increment execution time and resource consumption by a lot. | ||||
| 
 | ||||
| ### Really? | ||||
| 
 | ||||
| To be fair, you _can_ customize Microfetch by... Well, patching it. It's not the | ||||
| best way per se, but it will be the only way that does not compromise on speed. | ||||
| 
 | ||||
| ## Contributing | ||||
| 
 | ||||
| I will, mostly, reject feature additions. This is not to say you should avoid | ||||
| them altogether, as you might have a really good idea worth discussing but as a | ||||
| 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. | ||||
| 
 | ||||
| ## License | ||||
| 
 | ||||
| Microfetch is licensed under [GPL3](LICENSE). See the license file for details. | ||||
|  |  | |||
|  | @ -1,26 +1,19 @@ | |||
| use std::{env, io}; | ||||
| 
 | ||||
| pub fn get_desktop_info() -> Result<String, io::Error> { | ||||
|     let desktop_env = env::var("XDG_CURRENT_DESKTOP").unwrap_or_default(); | ||||
|     let display_backend = env::var("XDG_SESSION_TYPE").unwrap_or_default(); | ||||
|     let desktop_env = env::var("XDG_CURRENT_DESKTOP"); | ||||
|     let display_backend = env::var("XDG_SESSION_TYPE"); | ||||
| 
 | ||||
|     // Trim "none+" from the start of desktop_env if present
 | ||||
|     // XXX: This is a workaround for NixOS modules that set XDG_CURRENT_DESKTOP to "none+foo"
 | ||||
|     // instead of just "foo"
 | ||||
|     let desktop_env = desktop_env.trim_start_matches("none+"); | ||||
| 
 | ||||
|     // Use "Unknown" if desktop_env or display_backend is empty
 | ||||
|     let desktop_env = if desktop_env.is_empty() { | ||||
|         "Unknown" | ||||
|     } else { | ||||
|         desktop_env | ||||
|     let desktop_env = match desktop_env { | ||||
|         Err(_) => String::from("Unknown"), | ||||
|         Ok(s) => s.trim_start_matches("none+").to_owned(), | ||||
|     }; | ||||
| 
 | ||||
|     let display_backend = if display_backend.is_empty() { | ||||
|         "Unknown" | ||||
|     } else { | ||||
|         &display_backend | ||||
|     }; | ||||
|     let display_backend = display_backend.unwrap_or_else(|_| String::from("Unknown")); | ||||
| 
 | ||||
|     Ok(format!("{desktop_env} ({display_backend})")) | ||||
| } | ||||
|  |  | |||
|  | @ -15,13 +15,10 @@ pub fn get_username_and_hostname() -> Result<String, io::Error> { | |||
| } | ||||
| 
 | ||||
| pub fn get_shell() -> Result<String, io::Error> { | ||||
|     // In some setups, $SHELL is set to the store path
 | ||||
|     // of the actual shell program. While we can consider
 | ||||
|     // trimming by name, I will leave it to the user to handle
 | ||||
|     // what their SHELL variable is really set to.
 | ||||
|     let shell = env::var("SHELL").unwrap_or_else(|_| "unknown_shell".to_string()); | ||||
|     let shell_path = env::var("SHELL").unwrap_or_else(|_| "unknown_shell".to_string()); | ||||
|     let shell_name = shell_path.rsplit('/').next().unwrap_or("unknown_shell"); | ||||
| 
 | ||||
|     Ok(shell) | ||||
|     Ok(shell_name.to_string()) | ||||
| } | ||||
| 
 | ||||
| pub fn get_root_disk_usage() -> Result<String, io::Error> { | ||||
|  |  | |||
|  | @ -1,16 +1,14 @@ | |||
| use std::fs::File; | ||||
| use std::io::{self, BufRead}; | ||||
| use std::io::{self, BufRead, BufReader}; | ||||
| use std::path::Path; | ||||
| 
 | ||||
| pub fn get_current() -> Result<String, io::Error> { | ||||
|     let path = Path::new("/proc/uptime"); | ||||
|     let file = File::open(path)?; | ||||
|     let reader = io::BufReader::new(file); | ||||
|     let mut reader = BufReader::new(file); | ||||
| 
 | ||||
|     let line = reader | ||||
|         .lines() | ||||
|         .next() | ||||
|         .ok_or_else(|| io::Error::new(io::ErrorKind::Other, "Failed to read uptime"))??; | ||||
|     let mut line = String::new(); | ||||
|     reader.read_line(&mut line)?; | ||||
| 
 | ||||
|     let uptime_seconds: f64 = line | ||||
|         .split_whitespace() | ||||
|  | @ -19,7 +17,6 @@ pub fn get_current() -> Result<String, io::Error> { | |||
|         .parse() | ||||
|         .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?; | ||||
| 
 | ||||
|     // calculate days, hours, and minutes
 | ||||
|     let total_minutes = (uptime_seconds / 60.0).round() as u64; | ||||
|     let days = total_minutes / (60 * 24); | ||||
|     let hours = (total_minutes % (60 * 24)) / 60; | ||||
|  | @ -29,11 +26,9 @@ pub fn get_current() -> Result<String, io::Error> { | |||
|     if days > 0 { | ||||
|         parts.push(format!("{days} days")); | ||||
|     } | ||||
| 
 | ||||
|     if hours > 0 || days > 0 { | ||||
|         parts.push(format!("{hours} hours")); | ||||
|     } | ||||
| 
 | ||||
|     if minutes > 0 || hours > 0 || days > 0 { | ||||
|         parts.push(format!("{minutes} minutes")); | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue