Compare commits
10 Commits
Author | SHA1 | Date |
---|---|---|
Lucien Cartier-Tilet | 7d77b2d401 | |
Lucien Cartier-Tilet | d0478ba7c8 | |
Lucien Cartier-Tilet | 4b327cab48 | |
Lucien Cartier-Tilet | 4fd33bfe66 | |
Lucien Cartier-Tilet | 259afcf567 | |
Lucien Cartier-Tilet | 903b6f61da | |
Lucien Cartier-Tilet | 76764a88ce | |
Lucien Cartier-Tilet | 4cf1ae41b7 | |
Lucien Cartier-Tilet | 96db20aebc | |
Lucien Cartier-Tilet | 45b153e5ce |
|
@ -1,3 +1 @@
|
||||||
/target
|
/target
|
||||||
/pkg/
|
|
||||||
/src/pumopm-git/
|
|
||||||
|
|
|
@ -393,7 +393,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pumopm"
|
name = "pumopm"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"battery",
|
"battery",
|
||||||
"clap",
|
"clap",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "pumopm"
|
name = "pumopm"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
authors = ["Lucien Cartier-Tilet <lucien@phundrak.com>"]
|
authors = ["Lucien Cartier-Tilet <lucien@phundrak.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Simple power manager for systemd-based Linux"
|
description = "Simple power manager for systemd-based Linux"
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
*
|
||||||
|
.gitignore
|
||||||
|
!PKGBUILD
|
|
@ -1,6 +1,6 @@
|
||||||
# Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
|
# Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
|
||||||
pkgname=pumopm-git
|
pkgname=pumopm-git
|
||||||
pkgver=.r0.4e2acb9
|
pkgver=0.1.1.r1.g4fd33bf
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="A tiny power manager written in Rust"
|
pkgdesc="A tiny power manager written in Rust"
|
||||||
arch=('i686' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64')
|
arch=('i686' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64')
|
||||||
|
@ -8,15 +8,16 @@ url="https://labs.phundrak.com/phundrak/pumopm"
|
||||||
license=('GPL3')
|
license=('GPL3')
|
||||||
depends=()
|
depends=()
|
||||||
makedepends=('rustup' 'git')
|
makedepends=('rustup' 'git')
|
||||||
options=()
|
options=('strip' 'zipman')
|
||||||
source=("$pkgname::git+https://github.com/phundrak/pumopm")
|
source=("$pkgname::git+https://labs.phundrak.com/phundrak/pumopm.git")
|
||||||
md5sums=('SKIP')
|
md5sums=('SKIP')
|
||||||
|
# If Phundrak’s Gitea takes too long to answer, or if it is down, use the
|
||||||
|
# Github mirror
|
||||||
|
# source=("$pkgname}::git+https://github.com/Phundrak/pumopm.git")
|
||||||
|
|
||||||
pkgver() {
|
pkgver() {
|
||||||
cd "$pkgname"
|
cd "$pkgname"
|
||||||
local tag=$(git tag --sort=-v:refname | grep '^[0-9]' | head -1)
|
git describe --tags --long | sed 's/\([^-]*-g\)/r\1/;s/-/./g'
|
||||||
local commits_since=$(git rev-list $tag..HEAD --count)
|
|
||||||
echo "$tag.r$commits_since.$(git log --pretty=format:'%h' -n 1)"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
|
@ -32,9 +33,10 @@ build() {
|
||||||
|
|
||||||
package() {
|
package() {
|
||||||
cd "$pkgname"
|
cd "$pkgname"
|
||||||
|
|
||||||
install -Dm755 "target/release/pumopm" "$pkgdir/usr/bin/pumopm"
|
install -Dm755 "target/release/pumopm" "$pkgdir/usr/bin/pumopm"
|
||||||
install -Dm644 "LICENSE" "$pkgdir/usr/share/licenses/${pkgname}/LICENSE"
|
install -Dm644 "LICENSE" "$pkgdir/usr/share/licenses/${pkgname}/LICENSE"
|
||||||
|
install -Dm644 "pumopm.1" "$pkgdir/usr/share/man/man1/pumopm.1"
|
||||||
|
install -Dm644 "pumopm.service" "$pkgdir/usr/lib/systemd/system/pumopm.service"
|
||||||
}
|
}
|
||||||
|
|
||||||
# vim:set ts=2 sw=2 et:
|
# vim:set ts=2 sw=2 et:
|
|
@ -0,0 +1,49 @@
|
||||||
|
\" -*- mode: nroff; -*-
|
||||||
|
.TH PUMOPM 1 pumopm
|
||||||
|
.SH NAME
|
||||||
|
pumopm \- simple, small, no bloat power manager
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B pumopm
|
||||||
|
.RB [-h\ --help]
|
||||||
|
.RB [-V\ --version]
|
||||||
|
.RB [-l\ --low\ 5-95]
|
||||||
|
.RB [-L\ --very-low\ 5-95]
|
||||||
|
.RB [-c\ --critical\ 5-95]
|
||||||
|
.RB [-r\ --refresh-rate\ <seconds>]
|
||||||
|
.RB [-v\ --verbose]
|
||||||
|
.SH DESCRIPTIOR
|
||||||
|
pumopm is a simple, small, no bloat power manager written by Phundrak in
|
||||||
|
an attempt to create a power manager that is small, simple, and does
|
||||||
|
exactly what he wants to do: warn about low, very low, and critical
|
||||||
|
battery levels before suspending the computer.
|
||||||
|
.SH FLAGS
|
||||||
|
.TP
|
||||||
|
.B \-h \-\-help
|
||||||
|
Prints help information
|
||||||
|
.TP
|
||||||
|
.B \-v \-\-verbose
|
||||||
|
Prints verbose information
|
||||||
|
.TP
|
||||||
|
.B \-V \-\-version
|
||||||
|
Prints version information
|
||||||
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
.B \-l \-\-low <value>
|
||||||
|
Level at which the battery is considered to be low. Value between 5 and
|
||||||
|
95. Default 25
|
||||||
|
.TP
|
||||||
|
.B \-L \-\-very-low <value>
|
||||||
|
level at which the battery is considered to be very low. Value between 5
|
||||||
|
and 95. Default 15
|
||||||
|
.TP
|
||||||
|
.B \-c \-\-critical <value>
|
||||||
|
level at which the battery is considered to be critical. Value between 5
|
||||||
|
and 95. Default 10
|
||||||
|
.TP
|
||||||
|
.B \-r \-\-refresh-rate <value>
|
||||||
|
refresh rate of the battery’s reads in seconds. Default 5
|
||||||
|
.SH BUGS
|
||||||
|
Although I try to hunt for bugs, but if you ever find one, please do not
|
||||||
|
hesitate reporting it at lucien@phundrak.com or on
|
||||||
|
https://labs.phundrak.com/phundrak/pumopm or
|
||||||
|
https://github.com/Phundrak/pumopm/
|
|
@ -0,0 +1,17 @@
|
||||||
|
[Unit]
|
||||||
|
Description=A small, simple, no bloat power manager.
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
ExecStart=/usr/bin/pumopm
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
# Disalow writing to /usr, /bin, /usr/bin... It shouldn’t, but just in case
|
||||||
|
ProtectSystem=yes
|
||||||
|
# I swear I’m not paranoid about my own program
|
||||||
|
NoNewPrivileges=yes
|
||||||
|
ProtectKernelTunables=yes
|
||||||
|
ProtectControlGroups=yes
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
|
@ -37,10 +37,13 @@ macro_rules! trigger_warning {
|
||||||
}
|
}
|
||||||
$trigger = true;
|
$trigger = true;
|
||||||
let level = ($battery.state_of_charge().value * 100_f32) as u8;
|
let level = ($battery.state_of_charge().value * 100_f32) as u8;
|
||||||
let message = format!($message, $self.remaining_time($self.battery.time_to_full()), level);
|
let message = format!(
|
||||||
match $verbosity {
|
$message,
|
||||||
VerbosityLevel::None => {}
|
$self.remaining_time($self.battery.time_to_full()),
|
||||||
_ => println!("{}", message),
|
level
|
||||||
|
);
|
||||||
|
if $verbosity >= VerbosityLevel::Some {
|
||||||
|
println!("{}", message);
|
||||||
}
|
}
|
||||||
Notification::new()
|
Notification::new()
|
||||||
.summary("Low battery")
|
.summary("Low battery")
|
||||||
|
@ -61,8 +64,8 @@ impl BatteryState {
|
||||||
refresh_rate: u64,
|
refresh_rate: u64,
|
||||||
verbosity: VerbosityLevel,
|
verbosity: VerbosityLevel,
|
||||||
) -> battery::Result<Self> {
|
) -> battery::Result<Self> {
|
||||||
let manager = battery::Manager::new().unwrap();
|
let manager = battery::Manager::new()?;
|
||||||
let battery = match manager.batteries().unwrap().next() {
|
let battery = match manager.batteries()?.next() {
|
||||||
Some(Ok(battery)) => battery,
|
Some(Ok(battery)) => battery,
|
||||||
Some(Err(e)) => {
|
Some(Err(e)) => {
|
||||||
eprintln!("An error occured: {}", e);
|
eprintln!("An error occured: {}", e);
|
||||||
|
@ -84,18 +87,17 @@ impl BatteryState {
|
||||||
critical_level = u8::max(very_low_level - 1_u8, 5_u8)
|
critical_level = u8::max(very_low_level - 1_u8, 5_u8)
|
||||||
};
|
};
|
||||||
|
|
||||||
match verbosity {
|
if verbosity == VerbosityLevel::Some {
|
||||||
VerbosityLevel::None => {}
|
println!("Some verbose info");
|
||||||
_ => {
|
}
|
||||||
println!("Low battery: {}%", low_level);
|
if verbosity >= VerbosityLevel::Some {
|
||||||
println!("Very low battery: {}%", very_low_level);
|
println!("Low battery: {}%", low_level);
|
||||||
println!("Critical battery: {}%", critical_level);
|
println!("Very low battery: {}%", very_low_level);
|
||||||
println!("Refresh rate: {}s", refresh_rate);
|
println!("Critical battery: {}%", critical_level);
|
||||||
match verbosity {
|
println!("Refresh rate: {}s", refresh_rate);
|
||||||
VerbosityLevel::Some => println!("Some verbose info"),
|
}
|
||||||
_ => println!("Lots of verbose info"),
|
if verbosity >= VerbosityLevel::Lots {
|
||||||
}
|
println!("Lots of verbose info")
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
|
@ -126,18 +128,14 @@ impl BatteryState {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn remaining_time(&self, time: Option<battery::units::Time>) -> String {
|
pub fn remaining_time(&self, time: Option<battery::units::Time>) -> String {
|
||||||
match time {
|
if let Some(e) = time {
|
||||||
Some(e) => {
|
let time = e.value as u64;
|
||||||
let time = e.value as u64;
|
let hours = time / 3600;
|
||||||
let hours = time / 3600;
|
let minutes = (time % 3600) / 60;
|
||||||
let minutes = (time % 3600) / 60;
|
let seconds = time % 60;
|
||||||
let seconds = time % 60;
|
format!("{:01}:{:02}:{:02}", hours, minutes, seconds)
|
||||||
format!("{:01}:{:02}:{:02}", hours, minutes, seconds)
|
} else {
|
||||||
}
|
"unknown remaining time".to_owned()
|
||||||
None => {
|
|
||||||
eprintln!("Couldn’t read remaining time");
|
|
||||||
String::from("unknown remaining time")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +214,7 @@ impl BatteryState {
|
||||||
_ => eprintln!("Error: unknown battery state"),
|
_ => eprintln!("Error: unknown battery state"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if self.verbosity == VerbosityLevel::Lots {
|
if self.verbosity >= VerbosityLevel::Lots {
|
||||||
eprintln!("====\nDebug self:\n{:?}\n====", self);
|
eprintln!("====\nDebug self:\n{:?}\n====", self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ use clap::Clap;
|
||||||
|
|
||||||
#[derive(Clap)]
|
#[derive(Clap)]
|
||||||
#[clap(
|
#[clap(
|
||||||
version = "0.1.0",
|
version = "0.1.1",
|
||||||
author = "Lucien Cartier-Tilet <lucien@phundrak.com>"
|
author = "Lucien Cartier-Tilet <lucien@phundrak.com>"
|
||||||
)]
|
)]
|
||||||
struct Opts {
|
struct Opts {
|
||||||
|
|
Loading…
Reference in New Issue