mirror of
				https://forge.katzen.cafe/schrottkatze/nix-configs.git
				synced 2025-11-04 11:27:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Nu
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Nu
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env nu
 | 
						|
 | 
						|
const ICONS = [
 | 
						|
  [ normal charging];
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
  [   ]
 | 
						|
];
 | 
						|
 | 
						|
const DELAY = 2sec;
 | 
						|
 | 
						|
def "main auto" [] {
 | 
						|
  loop {
 | 
						|
    let paths = ls "/sys/class/power_supply"
 | 
						|
      | each {|it| $it.name | path basename}
 | 
						|
      | filter {|it| $it starts-with "BAT"};
 | 
						|
    
 | 
						|
    if ($paths | is-not-empty) {
 | 
						|
      let result = $paths
 | 
						|
        | each {|it| get_and_format $it}
 | 
						|
        | str join " | "
 | 
						|
        | prepend "| "
 | 
						|
        | str join;
 | 
						|
 | 
						|
      print $result
 | 
						|
    } else {
 | 
						|
      print ""
 | 
						|
    }
 | 
						|
    sleep $DELAY;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
def main [ path: string ] {
 | 
						|
  loop {
 | 
						|
    print (get_and_format $path)
 | 
						|
    sleep $DELAY;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
def get_and_format [ path: string ] {
 | 
						|
    let fract = get_bat_charge_fraction $path;
 | 
						|
    let is_charging = get_bat_charging_status $path;
 | 
						|
    let percent = ($fract * 100) | math round;
 | 
						|
  
 | 
						|
    return $"<span foreground=\"#d65d0e\">(get_bat_icon $fract $is_charging)</span> ($percent)<span foreground=\"#7c6f64\">%</span>";
 | 
						|
}
 | 
						|
 | 
						|
def get_bat_charge_fraction [
 | 
						|
  path: string
 | 
						|
] {
 | 
						|
  let energy_full = open $"/sys/class/power_supply/($path)/energy_full" | into float;
 | 
						|
  let energy_now = open $"/sys/class/power_supply/($path)/energy_now" | into float;
 | 
						|
 | 
						|
  $energy_now / $energy_full
 | 
						|
}
 | 
						|
 | 
						|
def get_bat_charging_status [
 | 
						|
  path: string
 | 
						|
] {
 | 
						|
  let status = open $"/sys/class/power_supply/($path)/status";
 | 
						|
 | 
						|
  $status like Charging
 | 
						|
}
 | 
						|
 | 
						|
def get_bat_icon [
 | 
						|
  frac: float 
 | 
						|
  is_charging = false
 | 
						|
] {
 | 
						|
  $ICONS | get (($frac * 10) | math round) | get (if ($is_charging) { "charging" } else { "normal" })
 | 
						|
}
 |