dotfiles

Alpine Linux dotfiles

git clone git://git.lin.moe/dotfiles.git

 1#!/usr/bin/env python3
 2import argparse
 3import subprocess
 4from pathlib import Path
 5
 6def backlight_dev() -> Path|None:
 7    syspath=Path("/sys/class/backlight")
 8    try:
 9        devpath = syspath.iterdir().__next__()
10    except:
11        return None
12    return devpath
13
14def current_brightness() -> int:
15    devpath = backlight_dev()
16    if devpath is not None:
17        devpath = devpath.joinpath("brightness")
18        with devpath.open("r") as f :
19            return int(f.read())
20    else:
21        (_, _, _, value, max_value) = subprocess.run(["ddcutil", "getvcp", "10", "--brief"], capture_output=True).stdout.decode().split()
22        return int(value)
23        
24
25def max_brightness() -> int:
26    devpath = backlight_dev()
27    if devpath is not None:
28        devpath = devpath.joinpath("max_brightness")
29        with devpath.open("r") as f :
30            return int(f.read())
31    else:
32        (_, _, _, value, max_value) = subprocess.run(["ddcutil", "getvcp", "10", "--brief"], capture_output=True).stdout.decode().split()
33        return int(max_value)
34
35def set_brightness(n: int):
36    devpath = backlight_dev()
37    if devpath is not None:
38        devpath = devpath.joinpath("brightness")
39        with devpath.open("w") as f :
40            f.write(str(n))
41    else:
42        subprocess.run(["ddcutil", "setvcp", "10", str(n)])
43
44def brightness_ratio() -> float:
45    return round(current_brightness()/max_brightness(), 2)
46
47def increase_brightness(n: int):
48    set_brightness(current_brightness() + n)
49
50def increase_brightness_ratio(p :float):
51    set_brightness(int(max_brightness() * (brightness_ratio() + p)))
52
53def set_brightness_ratio(p :float):
54    set_brightness(int(max_brightness() * p))
55
56def main():
57    parser = argparse.ArgumentParser(
58                    prog='light')
59    parser.add_argument("-A", "--increase", type=int, default=0)
60    parser.add_argument("-U", "--decrease", type=int, default=0)
61    parser.add_argument("-S", "--set", type=int, default=-1)
62
63    args = parser.parse_args()
64
65    if args.increase != 0:
66        increase_brightness_ratio(args.increase/100)
67    elif args.decrease != 0:
68        increase_brightness_ratio(-args.decrease/100)
69    elif args.set != -1:
70        set_brightness_ratio(args.set/100)
71    else:
72        print(f"{int(100 * brightness_ratio())}%")
73        # print(f"{current_brightness()}/{max_brightness()}")
74
75if __name__ == '__main__':
76    main()