219 lines
6.6 KiB
Python
Executable File
219 lines
6.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# Ferit Yiğit BALABAN <f@fybx.dev>, 2022
|
|
#
|
|
#
|
|
# Description:
|
|
#
|
|
# modeset.py is an wallpaper setting, volume and brightness controlling utility
|
|
# aimed to be used by keyboard shortcuts.
|
|
#
|
|
# Dependencies:
|
|
#
|
|
# - brightnessctl
|
|
# - pamixer
|
|
# - playerctl
|
|
# - wal
|
|
# - betterlockscreen
|
|
from datetime import datetime as dt
|
|
from subprocess import run, Popen, PIPE, DEVNULL
|
|
import shlex
|
|
import random
|
|
import sys
|
|
import os
|
|
|
|
|
|
START_NIGHT = "20.00"
|
|
START_DAY = "9.30"
|
|
PATH_SCPT_KEYBRD = "$HOME/scripts/keyboard"
|
|
PATH_SCPT_LOCKER = "$HOME/scripts/wait_unlock.sh"
|
|
PATH_RESC_VOLUME = "$HOME/.config/navi/volume"
|
|
PATH_RESC_KBDLGT = "$HOME/.config/navi/keyboard"
|
|
PATH_RESC_SCRLGT = "$HOME/.config/navi/screen"
|
|
PATH_RESC_LIGHTW = "$HOME/sources/wallpapers/light/"
|
|
PATH_RESC_DARKW = "$HOME/sources/wallpapers/dark/"
|
|
PATH_RESC_WALLPS = "$HOME/.config/navi/wallpapers"
|
|
PATH_RESC_LOCKWP = "$HOME/sources/wallpapers/dark/nbgqfu.jpg"
|
|
PATH_RESC_NAVILG = "$HOME/navi.log"
|
|
VAR_KBDNAME = "asus::kbd_backlight"
|
|
|
|
|
|
def set_brightness(device: int, value: int, save_state=False):
|
|
state_kbdlgt = get_brightness(1)
|
|
state_scrlgt = get_brightness(0)
|
|
if value == -1:
|
|
with open(os.path.expandvars(PATH_RESC_SCRLGT if device == 0 else PATH_RESC_KBDLGT), 'r') as f:
|
|
value = int(f.read())
|
|
f.close()
|
|
command = f"brightnessctl set {value}%" if device == 0 else f"brightnessctl --device {VAR_KBDNAME} set {value}%"
|
|
run_command(command)
|
|
if save_state:
|
|
with open(os.path.expandvars(PATH_RESC_SCRLGT if device == 0 else PATH_RESC_KBDLGT), 'w') as f:
|
|
f.write(str(state_scrlgt if device == 0 else state_kbdlgt))
|
|
f.close()
|
|
|
|
|
|
def connect_keyboard():
|
|
run_command(f"bash {PATH_SCPT_KEYBRD}")
|
|
|
|
|
|
def set_volume(value: int, save_state=False):
|
|
state = get_volume()
|
|
if value == -1:
|
|
with open(os.path.expandvars(PATH_RESC_VOLUME), 'r') as f:
|
|
value = int(f.read())
|
|
f.close()
|
|
value = 100 if value > 100 else 0 if value < 0 else value
|
|
run_command(f'pamixer --set-volume {value}')
|
|
if save_state:
|
|
with open(os.path.expandvars(PATH_RESC_VOLUME), 'w') as f:
|
|
f.write(str(state))
|
|
f.close()
|
|
|
|
|
|
def set_mouse(value: int):
|
|
if value == 1:
|
|
run_command('rivalcfg --color=#F666F5 --light-effect=breath')
|
|
elif value == 0:
|
|
run_command('rivalcfg --color=#000000')
|
|
elif value == 2:
|
|
run_command('rivalcfg -p=1000 -s=1000 -S=500')
|
|
|
|
|
|
def run_command(cmd: str):
|
|
Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE)
|
|
|
|
|
|
def do_query(cmd: str):
|
|
return run(shlex.split(cmd), text=True, capture_output=True).stdout
|
|
|
|
|
|
def change_wallpaper(mode: int, cringe=False):
|
|
wallpaper = PATH_RESC_LIGHTW if mode == 0 else PATH_RESC_DARKW
|
|
wallpaper += "/cringe" if cringe else ""
|
|
run_command(f"wal --iterative -qe -i {wallpaper}")
|
|
|
|
|
|
def lock():
|
|
Popen(["bash", PATH_SCPT_LOCKER])
|
|
Popen(["betterlockscreen", "-l", '--off', '5'], stdout=DEVNULL)
|
|
|
|
|
|
def pause_media():
|
|
run_command("playerctl pause")
|
|
|
|
|
|
def get_brightness(device: int):
|
|
command = "brightnessctl" if device == 0 else f"brightnessctl --device {VAR_KBDNAME}"
|
|
return int(do_query(command).split('(')[1].split(')')[0].replace('%', ''))
|
|
|
|
|
|
def get_volume():
|
|
return int(do_query("pamixer --get-volume"))
|
|
|
|
|
|
def log(message: str):
|
|
with open(PATH_RESC_NAVILG, 'a') as f:
|
|
f.write(f"[{dt.now().strftime('%m/%d/%y-%H.%M.%S')}] {message}\n")
|
|
f.close()
|
|
|
|
|
|
def get_hour():
|
|
if 0 <= dt.now().minute <= 9:
|
|
return f"{dt.now().hour}.0{dt.now().minute}"
|
|
return f"{dt.now().hour}.{dt.now().minute}"
|
|
|
|
|
|
def get_hour_spec(hour_str=None):
|
|
if hour_str is not None:
|
|
return (int(hour_str.split('.')[0]) * 60) + int(hour_str.split('.')[0])
|
|
return (dt.now().hour * 60) + dt.now().minute
|
|
|
|
|
|
def get_mode():
|
|
low = get_hour_spec(START_DAY)
|
|
now = get_hour_spec()
|
|
hgh = get_hour_spec(START_NIGHT)
|
|
return 0 if low <= now < hgh else 1
|
|
|
|
|
|
def expand_vars():
|
|
global PATH_SCPT_KEYBRD
|
|
global PATH_SCPT_LOCKER
|
|
global PATH_RESC_VOLUME
|
|
global PATH_RESC_KBDLGT
|
|
global PATH_RESC_SCRLGT
|
|
global PATH_RESC_LIGHTW
|
|
global PATH_RESC_DARKW
|
|
global PATH_RESC_WALLPS
|
|
global PATH_RESC_NAVILG
|
|
PATH_SCPT_KEYBRD = os.path.expandvars(PATH_SCPT_KEYBRD)
|
|
PATH_SCPT_LOCKER = os.path.expandvars(PATH_SCPT_LOCKER)
|
|
PATH_RESC_VOLUME = os.path.expandvars(PATH_RESC_VOLUME)
|
|
PATH_RESC_KBDLGT = os.path.expandvars(PATH_RESC_KBDLGT)
|
|
PATH_RESC_SCRLGT = os.path.expandvars(PATH_RESC_SCRLGT)
|
|
PATH_RESC_LIGHTW = os.path.expandvars(PATH_RESC_LIGHTW)
|
|
PATH_RESC_DARKW = os.path.expandvars(PATH_RESC_DARKW)
|
|
PATH_RESC_WALLPS = os.path.expandvars(PATH_RESC_WALLPS)
|
|
PATH_RESC_NAVILG = os.path.expandvars(PATH_RESC_NAVILG)
|
|
|
|
|
|
def main():
|
|
sys.argv.remove(sys.argv[0])
|
|
expand_vars()
|
|
mode = 3 if "-dark" in sys.argv else (2 if "-light" in sys.argv else get_mode())
|
|
if len(sys.argv) == 0:
|
|
print("modeset by fyb")
|
|
print(f"local machine time: {get_hour()}")
|
|
print(f"current mode is: {'e' if mode==2 or mode==3 else ''}{mode-2}")
|
|
print(f"current sink volume: {get_volume()}")
|
|
exit(0)
|
|
|
|
mode = (mode - 2) if (mode == 2 or mode == 3) else mode
|
|
if sys.argv[0] == "--login":
|
|
log("modeset started with \"--login\"")
|
|
set_volume(0)
|
|
if mode == 0:
|
|
set_brightness(0, 70)
|
|
set_brightness(1, 0)
|
|
else:
|
|
set_brightness(0, 40)
|
|
set_brightness(1, 100)
|
|
set_mouse(1)
|
|
change_wallpaper(mode)
|
|
elif sys.argv[0] == "--lock":
|
|
log("modeset started with \"--lock\"")
|
|
set_volume(0, save_state=True)
|
|
set_brightness(0, 0, save_state=True)
|
|
if mode == 1:
|
|
set_brightness(1, 0, save_state=True)
|
|
else:
|
|
set_brightness(1, 1, save_state=True)
|
|
pause_media()
|
|
set_mouse(0)
|
|
lock()
|
|
elif sys.argv[0] == "--unlock":
|
|
log("modeset started with \"--unlock\"")
|
|
set_volume(-1)
|
|
set_brightness(0, -1)
|
|
set_brightness(1, -1)
|
|
set_mouse(1)
|
|
elif sys.argv[0] == "--shutdown":
|
|
log("modeset started with \"--shutdown\"")
|
|
set_brightness(0, 50)
|
|
set_brightness(1, 100)
|
|
elif sys.argv[0] == "--wallc":
|
|
log("modeset started with \"--wallc\"")
|
|
change_wallpaper(mode, cringe=True)
|
|
elif sys.argv[0] == "--wallp":
|
|
log("modeset started with \"--wallp\"")
|
|
change_wallpaper(mode)
|
|
elif sys.argv[0] == "-setl":
|
|
log("modeset started with \"-setl\"")
|
|
run_command(f"betterlockscreen -u {PATH_RESC_LOCKWP}")
|
|
exit(0)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|