Hyprland-dotfiles/.install/restore.py
Stephan Raabe 7cbb584d37 Updates
2024-04-21 12:52:34 +02:00

150 lines
5.1 KiB
Python

# __ __ _ _ ___ __ _
# | \/ | | | || \ \ / / _ __ ___ ___| |_ ___ _ __ ___
# | |\/| | | | || |\ \ /\ / / | '__/ _ \/ __| __/ _ \| '__/ _ \
# | | | | |__|__ _\ V V / | | | __/\__ \ || (_) | | | __/
# |_| |_|_____| |_| \_/\_/ |_| \___||___/\__\___/|_| \___|
#
import sys
import subprocess
import os
import json
import pathlib
import shutil
# Get script path
pathname = os.path.dirname(sys.argv[0])
class ML4WRestore:
waybar_themes = [
"ml4w-minimal",
"ml4w",
"ml4w-blur",
"ml4w-blur-bottom",
"ml4w-bottom"
]
defaults = {
"waybar_timeformat": "%H:%M",
"waybar_dateformat": "%a",
"waybar_custom_timedateformat": "",
"waybar_workspaces": 5,
"rofi_bordersize": 3,
"waybar_network": True,
"waybar_chatgpt": True,
"waybar_systray": True,
"waybar_screenlock": True,
"waybar_window": True
}
path_name = pathname # Path of Application
homeFolder = os.path.expanduser('~') # Path to home folder
dotfiles = homeFolder + "/dotfiles/"
settings = {}
def __init__(self):
# Load settings.json
settings_file = open(self.dotfiles + ".settings/settings.json")
settings_arr = json.load(settings_file)
for row in settings_arr:
self.settings[row["key"]] = row["value"]
self.loadSwitchAll("waybar_network","network")
self.loadSwitchAll("waybar_systray","tray")
self.loadSwitchAll("waybar_window","hyprland/window")
self.loadSwitchAll("waybar_screenlock","idle_inhibitor")
self.loadSwitch("waybar_chatgpt","custom/chatgpt")
# Waybar Workspaces
if "waybar_workspaces" in self.settings:
value = int(self.settings["waybar_workspaces"])
text = ' "*": ' + str(value)
self.replaceInFileNext("waybar/modules.json", "// START WORKSPACES", text)
print (":: waybar_workspaces restored")
# Rofi BorderSize
if "rofi_bordersize" in self.settings:
value = int(self.settings["rofi_bordersize"])
text = "* { border-width: " + str(value) + "px; }"
self.overwriteFile(".settings/rofi-border.rasi",text)
print (":: rofi_bordersize restored")
# Time/DateFormat
if "waybar_timeformat" in self.settings:
timeformat = self.settings["waybar_timeformat"]
else:
timeformat = self.defaults["waybar_timeformat"]
if "waybar_dateformat" in self.settings:
dateformat = self.settings["waybar_dateformat"]
else:
dateformat = self.defaults["waybar_dateformat"]
if "waybar_custom_timedateformat" in self.settings:
custom_format = self.settings["waybar_custom_timedateformat"]
else:
custom_format = self.defaults["waybar_custom_timedateformat"]
if custom_format != "":
timedate = ' "format": "{:' + custom_format + '}",'
self.replaceInFileNext("waybar/modules.json", "TIMEDATEFORMAT", timedate)
else:
timedate = ' "format": "{:' + timeformat + ' - ' + dateformat + '}",'
self.replaceInFileNext("waybar/modules.json", "TIMEDATEFORMAT", timedate)
print (":: timedate format restored")
def loadSwitch(self,k,m):
if k in self.settings:
if not self.settings[k]:
self.replaceInFile("waybar/modules.json",'"' + m + '"',' //"' + m + '",')
print (":: " + k + " restored")
def loadSwitchAll(self,k,m):
if k in self.settings:
if not self.settings[k]:
for t in self.waybar_themes:
self.replaceInFile("waybar/themes/" + t + "/config",'"' + m + '"',' //"' + m + '",')
print (":: " + k + " restored")
# Overwrite Text in File
def overwriteFile(self, f, text):
file=open(self.dotfiles + f,"w+")
file.write(text)
file.close()
# Replace Text in File
def replaceInFile(self, f, search, replace):
file = open(self.dotfiles + f, 'r')
lines = file.readlines()
count = 0
found = 0
# Strips the newline character
for l in lines:
count += 1
if search in l:
found = count
if found > 0:
lines[found - 1] = replace + "\n"
with open(self.dotfiles + f, 'w') as file:
file.writelines(lines)
# Replace Text in File
def replaceInFileNext(self, f, search, replace):
file = open(self.dotfiles + f, 'r')
lines = file.readlines()
count = 0
found = 0
# Strips the newline character
for l in lines:
count += 1
if search in l:
found = count
if found > 0:
lines[found] = replace + "\n"
with open(self.dotfiles + f, 'w') as file:
file.writelines(lines)
ml4wrestore = ML4WRestore()