Add dwmscripts
parent
9422f648c4
commit
d0d4de8613
|
@ -0,0 +1,59 @@
|
||||||
|
import os
|
||||||
|
from typing import List
|
||||||
|
import subprocess
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
def get_ex_rates() -> float:
|
||||||
|
response = \
|
||||||
|
requests.get("https://www.cbr-xml-daily.ru/daily_json.js").json()
|
||||||
|
out = {}
|
||||||
|
for valute in response["Valute"]:
|
||||||
|
out[valute] = response["Valute"][valute]["Value"]
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
def show_command_out(command: str, return_out: str = True) -> str | None:
|
||||||
|
if not return_out:
|
||||||
|
os.system(command)
|
||||||
|
return
|
||||||
|
return subprocess.check_output(
|
||||||
|
command,
|
||||||
|
shell=True
|
||||||
|
).decode("utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def show_dmenu_out(question: str, answers: List[str] = None) -> str:
|
||||||
|
if not answers:
|
||||||
|
return show_command_out(
|
||||||
|
'cat /dev/null | dmenu -p "{}"'.format(
|
||||||
|
question
|
||||||
|
)
|
||||||
|
)[:-1]
|
||||||
|
return show_command_out(
|
||||||
|
'echo "{}" | dmenu -p "{}"'.format(
|
||||||
|
"".join([f"{x}\n" for x in answers])[:-1],
|
||||||
|
question
|
||||||
|
)
|
||||||
|
)[:-1]
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
sentence = show_dmenu_out(">")
|
||||||
|
try:
|
||||||
|
ex_rates = get_ex_rates()
|
||||||
|
for ex_rate in ex_rates:
|
||||||
|
locals()[ex_rate] = ex_rates[ex_rate]
|
||||||
|
answer = str(eval(sentence))
|
||||||
|
except Exception as exc:
|
||||||
|
answer = str(exc)
|
||||||
|
do_copy = show_dmenu_out(f"{sentence} = {answer}", ["Exit", "Copy"])
|
||||||
|
if do_copy == "Copy":
|
||||||
|
show_command_out(
|
||||||
|
f'echo "{answer}" | xclip -selection clipboard -r',
|
||||||
|
False
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1 @@
|
||||||
|
python /home/naki/dwmscripts/calc.py
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# xclip -o > /tmp/convert.txt; iconv -f WINDOWS-1251 -t UTF-8 /tmp/convert.txt | xclip -selection clipboard
|
||||||
|
# { echo "." & ms-gen 10 9; } | xclip -selection clipboard
|
||||||
|
# /home/plaza/dwmscripts/main 10 10 | xclip -selection clipboard
|
||||||
|
# xclip -o | base64 | xclip -selection clibboard -r
|
||||||
|
# printf "worried\nthinking\nshrug\nangry\nangrysight\ncuddles\nhappy\ncrying\ndancing\nconfused" | dmenu -l 20 -p "Select emoji" |
|
||||||
|
python /home/naki/dwmscripts/emoji.py
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"panic": "(つ﹏⊂)",
|
||||||
|
"thinking": "(;・・)ゞ",
|
||||||
|
"shrug": "¯\\(ツ)/¯",
|
||||||
|
"angry": "ヾ(`д´*)ノ",
|
||||||
|
"angrysight": "(⚞︵⚟)",
|
||||||
|
"happysight": "(≧ω≦)",
|
||||||
|
"cuddles": "(つ´∀`)つ",
|
||||||
|
"happy": "(^▽^)",
|
||||||
|
"cryinghappy": "(*≧▽≦)",
|
||||||
|
"confusedhappy": "(.❛ ᴗ ❛.)",
|
||||||
|
"crying": "( ≧Д≦)",
|
||||||
|
"dancing": "ヽ(o´∀´)ノ♪♬",
|
||||||
|
"confused": "(´・_・´)",
|
||||||
|
"cute": "(⌒ω⌒)",
|
||||||
|
"sleeping": "(∪。∪)。。。zzz",
|
||||||
|
"writing": "__φ(..)"
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
from dwmbar.bar import Bar
|
||||||
|
import dwmbar.modules
|
||||||
|
from dwmbar.other import get_command_out
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,48 @@
|
||||||
|
from dwmbar.modules import BarItem
|
||||||
|
import os
|
||||||
|
from time import sleep, time
|
||||||
|
|
||||||
|
|
||||||
|
class Bar:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
items_count: int = 10,
|
||||||
|
sep: str = ''
|
||||||
|
) -> None:
|
||||||
|
self.sep = sep
|
||||||
|
self.items = [BarItem(False) for _ in range(items_count)]
|
||||||
|
|
||||||
|
def start(self, update_time: float = 0) -> None:
|
||||||
|
"""After call this function program will start infinity loop"""
|
||||||
|
while True:
|
||||||
|
start = time()
|
||||||
|
for i in range(len(self.items)):
|
||||||
|
self[i].update()
|
||||||
|
self.write()
|
||||||
|
finish = time()
|
||||||
|
sleep_time = update_time - (finish - start)
|
||||||
|
sleep(0 if sleep_time < 0 else sleep_time)
|
||||||
|
|
||||||
|
def __getitem__(
|
||||||
|
self,
|
||||||
|
key: int
|
||||||
|
) -> BarItem:
|
||||||
|
return self.items[key]
|
||||||
|
|
||||||
|
def __setitem__(
|
||||||
|
self,
|
||||||
|
key: int,
|
||||||
|
value: BarItem
|
||||||
|
) -> None:
|
||||||
|
self.items[key] = value
|
||||||
|
|
||||||
|
def __len__(self) -> int:
|
||||||
|
return len(self.items)
|
||||||
|
|
||||||
|
def write(self, reversed: bool = True) -> None:
|
||||||
|
out = ' ' + ''.join(
|
||||||
|
[str(self[i]) + ' / ' for i in range(len(self))
|
||||||
|
if self[i]
|
||||||
|
]
|
||||||
|
)[:-3] + ' '
|
||||||
|
os.system(f"xsetroot -name \"{out}\"")
|
|
@ -0,0 +1,125 @@
|
||||||
|
from subprocess import CalledProcessError
|
||||||
|
import psutil
|
||||||
|
from datetime import datetime
|
||||||
|
from dwmbar.other import get_command_out
|
||||||
|
|
||||||
|
|
||||||
|
class BarItem:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
filled: bool = True
|
||||||
|
) -> None:
|
||||||
|
self.filled = bool(filled)
|
||||||
|
self.out = ''
|
||||||
|
|
||||||
|
def update(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return self.out
|
||||||
|
|
||||||
|
def __bool__(self) -> bool:
|
||||||
|
return self.filled
|
||||||
|
|
||||||
|
|
||||||
|
class TimeItem(BarItem):
|
||||||
|
def update(self) -> None:
|
||||||
|
#
|
||||||
|
now = datetime.now()
|
||||||
|
if now.strftime("%p") == "AM":
|
||||||
|
self.out = " "
|
||||||
|
else:
|
||||||
|
self.out = " "
|
||||||
|
self.out += datetime.now().strftime("%I:%M")
|
||||||
|
|
||||||
|
|
||||||
|
class RAMItem(BarItem):
|
||||||
|
def __init__(self) -> None:
|
||||||
|
"""RAM in G"""
|
||||||
|
super().__init__(True)
|
||||||
|
self.divider = 2**30
|
||||||
|
self.total = round(psutil.virtual_memory()[0] / self.divider, 1)
|
||||||
|
|
||||||
|
def update(self) -> None:
|
||||||
|
used = round(psutil.virtual_memory()[3] / self.divider, 1)
|
||||||
|
self.out = f" {used}G"
|
||||||
|
|
||||||
|
|
||||||
|
class LayoutItem(BarItem):
|
||||||
|
def update(self) -> None:
|
||||||
|
self.out = ' ' + get_command_out(
|
||||||
|
"setxkbmap -query | grep layout"
|
||||||
|
).split()[-1].upper()
|
||||||
|
|
||||||
|
|
||||||
|
class CPUUsageItem(BarItem):
|
||||||
|
def update(self) -> None:
|
||||||
|
usage = psutil.cpu_percent()
|
||||||
|
usage = f"{usage}" if usage % 1 else f"{int(usage)}.0"
|
||||||
|
self.out = f" {usage:0>4}%"
|
||||||
|
|
||||||
|
|
||||||
|
class DiskUsageItem(BarItem):
|
||||||
|
def __init__(self, divider: int = 10**9) -> None:
|
||||||
|
super().__init__(True)
|
||||||
|
"""Disk in GB"""
|
||||||
|
self.divider = 10**9
|
||||||
|
self.total = round(psutil.disk_usage('/').total / self.divider, 1)
|
||||||
|
|
||||||
|
def update(self) -> None:
|
||||||
|
used = round(psutil.disk_usage('/').used / self.divider, 1)
|
||||||
|
self.out = F" {used}G/{self.total}G"
|
||||||
|
|
||||||
|
|
||||||
|
class BatteryItem(BarItem):
|
||||||
|
def __init__(self, hide_if_full: bool = False) -> None:
|
||||||
|
super().__init__(True)
|
||||||
|
# self.hide_if_full = hide_if_full
|
||||||
|
|
||||||
|
def update(self) -> None:
|
||||||
|
battery = psutil.sensors_battery()
|
||||||
|
# plugged = battery.power_plugged
|
||||||
|
percent = round(battery.percent)
|
||||||
|
# self.out = f" {'#' if plugged else '*'}{percent}%"
|
||||||
|
self.out = f" {percent}%"
|
||||||
|
# self.filled = False if self.hide_if_full and percent == 100 else True
|
||||||
|
|
||||||
|
|
||||||
|
class VolumeItem(BarItem):
|
||||||
|
def update(self) -> None:
|
||||||
|
volume = get_command_out(
|
||||||
|
"amixer get Master | awk -F'[][]' 'END{ print $4\":\"$2 }'"
|
||||||
|
)
|
||||||
|
self.out = " " + volume[volume.find(":") + 1:-1]
|
||||||
|
|
||||||
|
|
||||||
|
class MusicItem(BarItem):
|
||||||
|
def update(self) -> None:
|
||||||
|
try:
|
||||||
|
status = get_command_out("cmus-remote -Q")
|
||||||
|
except CalledProcessError:
|
||||||
|
self.out = " cmus"
|
||||||
|
return
|
||||||
|
if "file" not in status:
|
||||||
|
self.out = " cmus"
|
||||||
|
return
|
||||||
|
for var in status.split("\n"):
|
||||||
|
args = var.split()
|
||||||
|
if not args:
|
||||||
|
continue
|
||||||
|
match args[0]:
|
||||||
|
case "status":
|
||||||
|
if args[1] == "playing":
|
||||||
|
self.out = ""
|
||||||
|
else:
|
||||||
|
self.out = ""
|
||||||
|
case "file":
|
||||||
|
filename = var[var.rfind("/") + 1:var.rfind(".")]
|
||||||
|
self.out += " " + filename
|
||||||
|
|
||||||
|
|
||||||
|
class InfoItem(BarItem):
|
||||||
|
def __init__(self, text: str) -> None:
|
||||||
|
super().__init__()
|
||||||
|
self.out = text
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
|
def get_command_out(command: str) -> None:
|
||||||
|
return subprocess.check_output(
|
||||||
|
command,
|
||||||
|
shell=True
|
||||||
|
).decode("utf-8")
|
|
@ -0,0 +1,33 @@
|
||||||
|
import subprocess
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
def show_command_out(command: str) -> str:
|
||||||
|
return subprocess.check_output(
|
||||||
|
command,
|
||||||
|
shell=True
|
||||||
|
).decode("utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
path = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
with open(f"{path}/dictionary.json") as file:
|
||||||
|
dictionary = json.load(file)
|
||||||
|
dictionary_list = [x for x in dictionary]
|
||||||
|
|
||||||
|
key = show_command_out(
|
||||||
|
'echo "{}"\
|
||||||
|
| dmenu -l 20 -p \"Select alias\"'.format(''.join([f'{x}\n' for x
|
||||||
|
in dictionary_list])[:-1])
|
||||||
|
).strip()
|
||||||
|
|
||||||
|
try:
|
||||||
|
out = dictionary[key]
|
||||||
|
except KeyError:
|
||||||
|
return
|
||||||
|
os.system(f"echo \"{out}\" | xclip -selection clipboard -r")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1,10 @@
|
||||||
|
worried
|
||||||
|
thinking
|
||||||
|
shrug
|
||||||
|
angry
|
||||||
|
angrysight
|
||||||
|
cuddles
|
||||||
|
happy
|
||||||
|
crying
|
||||||
|
dancing
|
||||||
|
confused
|
|
@ -0,0 +1,18 @@
|
||||||
|
from random import choice
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
SIZE = 64
|
||||||
|
ALPHABET = (
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
"0123456789!@#$%^&*()[]{},."
|
||||||
|
)
|
||||||
|
|
||||||
|
out = ''
|
||||||
|
for _ in range(SIZE):
|
||||||
|
out += choice(ALPHABET)
|
||||||
|
print(out)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1,28 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
states = ["us", "ru"]
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
state = states[1]
|
||||||
|
if os.path.exists("/tmp/layout.json"):
|
||||||
|
with open("/tmp/layout.json") as f:
|
||||||
|
state = json.load(f)["layout"]
|
||||||
|
for i, val in enumerate(states):
|
||||||
|
if val == state:
|
||||||
|
state = states[(i + 1) % len(states)]
|
||||||
|
break
|
||||||
|
with open("/tmp/layout.json", 'w') as f:
|
||||||
|
json.dump({"layout": state}, f, indent=4)
|
||||||
|
os.system(f"setxkbmap {state}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) == 1:
|
||||||
|
main()
|
||||||
|
else:
|
||||||
|
if "-s" in sys.argv:
|
||||||
|
os.system(f"setxkbmap {states[0]}")
|
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
|
@ -0,0 +1,36 @@
|
||||||
|
import psutil
|
||||||
|
from pypresence import Presence
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
client_id = '1149335280072020078'
|
||||||
|
RPC = Presence(client_id, pipe=0)
|
||||||
|
RPC.connect()
|
||||||
|
|
||||||
|
start_time = psutil.boot_time()
|
||||||
|
while True:
|
||||||
|
# waiting = time.time() - start_time
|
||||||
|
# minutes = waiting // 60
|
||||||
|
# hours = minutes // 60
|
||||||
|
# minutes = minutes % 60
|
||||||
|
# waiting_days = int(time.time() - start_time) // 60 // 60 // 24
|
||||||
|
waiting_days = int(time.time() - start_time) // 60 // 60 // 24
|
||||||
|
# state=f"{int(hours):02}:{int(minutes):02}:{int(waiting % 60):02}",
|
||||||
|
RPC.update(
|
||||||
|
# details=details_list[i1],
|
||||||
|
state=f"{waiting_days} days,",
|
||||||
|
large_image="superpuper",
|
||||||
|
large_text="This is a picture, isn't it?",
|
||||||
|
buttons=[{
|
||||||
|
"label": "This is not rickroll",
|
||||||
|
"url": "https://goo.su/eriA6eD"
|
||||||
|
}],
|
||||||
|
start=start_time
|
||||||
|
)
|
||||||
|
RPC.update
|
||||||
|
time.sleep(10)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1,74 @@
|
||||||
|
import os
|
||||||
|
from random import choice
|
||||||
|
# from requests import get
|
||||||
|
|
||||||
|
INDEX_HTML = "/home/naki/server/index.html"
|
||||||
|
SERVER_PATH = "/home/naki/server/a/"
|
||||||
|
LULS_PATH = "/home/naki/server/luls/"
|
||||||
|
|
||||||
|
RANDOM_SIZE = 5
|
||||||
|
RANDOM_ALPHABET = (
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
"0123456789"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def gen_random(size, alphabet) -> str:
|
||||||
|
out = ''
|
||||||
|
for _ in range(size):
|
||||||
|
out += choice(alphabet)
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
images = next(os.walk(SERVER_PATH), (None, None, []))[2]
|
||||||
|
# images = list(map(int, [image[3:-4] for image in images]))
|
||||||
|
images = [image[:-4] for image in images]
|
||||||
|
# out = max(images) + 1 if images else 0
|
||||||
|
name = ''
|
||||||
|
while True:
|
||||||
|
name = gen_random(RANDOM_SIZE, RANDOM_ALPHABET)
|
||||||
|
if name not in images:
|
||||||
|
break
|
||||||
|
os.system(f"/home/naki/dwmscripts/scrotpy.sh '{SERVER_PATH + name + '.png'}'")
|
||||||
|
|
||||||
|
# os.system(
|
||||||
|
# f"flameshot gui --raw > {SERVER_PATH}img{out}.png"
|
||||||
|
# )
|
||||||
|
|
||||||
|
# os.system(
|
||||||
|
# f"flameshot gui --raw > {SERVER_PATH}{name}.png"
|
||||||
|
# )
|
||||||
|
|
||||||
|
ip = "nakidai.ddns.net" # get('https://api.ipify.org').content.decode('utf8')
|
||||||
|
|
||||||
|
os.system(
|
||||||
|
f"echo \"http://{ip}/a/{name}.png\" |"
|
||||||
|
f" xclip -selection clipboard -r"
|
||||||
|
)
|
||||||
|
|
||||||
|
with open(INDEX_HTML, 'w') as f:
|
||||||
|
f.write(f"""
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Nakidai Perumenei</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h6>Latest screenshot:<h6>
|
||||||
|
<tt>
|
||||||
|
https://{ip}/a/{name}.png
|
||||||
|
</tt>
|
||||||
|
<h6>Cool things:<h6>
|
||||||
|
<code>
|
||||||
|
{"<br>".join([f"https://{ip}/luls/{img}<br>"
|
||||||
|
for img in os.listdir(LULS_PATH)])}
|
||||||
|
</code>
|
||||||
|
</body>
|
||||||
|
</html>""")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1,7 @@
|
||||||
|
scrot -o /tmp/scrot.png
|
||||||
|
feh -F /tmp/scrot.png &
|
||||||
|
feh_pid=$!
|
||||||
|
scrot --select '/home/naki/pic/screenshots/%F_%T_$wx$h.png' -e 'xclip -selection clipboard -target image/png -i $f'
|
||||||
|
kill $feh_pid
|
||||||
|
# flameshot gui --raw | xclip -selection clipboard -target image/png
|
||||||
|
# maim -u | feh -F - & sleep 1 && maim -s | xclip -selection clipboard -target image/png && kill $!
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
scrot -s -f -o $1
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
import dwmbar
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
# kernel_ver = dwmbar.get_command_out("uname -r")[:-1]
|
||||||
|
|
||||||
|
bar = dwmbar.Bar()
|
||||||
|
bar[9] = dwmbar.modules.TimeItem()
|
||||||
|
bar[8] = dwmbar.modules.RAMItem()
|
||||||
|
# bar[7] = dwmbar.modules.DiskUsageItem()
|
||||||
|
# bar[6] = dwmbar.modules.CPUUsageItem()
|
||||||
|
bar[5] = dwmbar.modules.BatteryItem(True)
|
||||||
|
|
||||||
|
# bar[1] = dwmbar.modules.InfoItem(kernel_ver)
|
||||||
|
bar[2] = dwmbar.modules.VolumeItem()
|
||||||
|
bar[1] = dwmbar.modules.LayoutItem()
|
||||||
|
bar[0] = dwmbar.modules.MusicItem()
|
||||||
|
bar.start(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1 @@
|
||||||
|
sleep 1 && xset -display :0.0 dpms force off
|
Loading…
Reference in New Issue