112 lines
2.3 KiB
Python
Executable File
112 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import subprocess
|
|
from argparse import ArgumentParser
|
|
from pathlib import Path
|
|
|
|
BASE_PKGS = [
|
|
"clang",
|
|
"scripts",
|
|
"stow"
|
|
]
|
|
|
|
TUI_PKGS = [
|
|
*BASE_PKGS,
|
|
"fastfetch",
|
|
"nvim",
|
|
"shell",
|
|
"yazi"
|
|
]
|
|
|
|
GUI_BASE_PKGS = [
|
|
*TUI_PKGS,
|
|
"kitty",
|
|
"ghostty",
|
|
"misc",
|
|
"mpv",
|
|
"wallpaper",
|
|
"kvantum",
|
|
"nwg-look"
|
|
]
|
|
|
|
HYPRLAND_PKGS = [
|
|
*GUI_BASE_PKGS,
|
|
"eww",
|
|
"hypr",
|
|
"mako",
|
|
"rofi",
|
|
"waybar",
|
|
"wlogout"
|
|
]
|
|
|
|
NIRI_PKGS = [
|
|
*GUI_BASE_PKGS,
|
|
"niri",
|
|
"quickshell",
|
|
"rofi",
|
|
"wlogout"
|
|
]
|
|
|
|
PKGS = {
|
|
"base": BASE_PKGS,
|
|
"tui": TUI_PKGS,
|
|
"gui": GUI_BASE_PKGS,
|
|
"hyprland": HYPRLAND_PKGS,
|
|
"niri": NIRI_PKGS
|
|
}
|
|
|
|
|
|
PKGS_PATH = Path(__file__).resolve().parent.resolve() / "config"
|
|
DEST_PATH = Path.home().expanduser()
|
|
|
|
|
|
def _log(level: str, message: str):
|
|
color = "\033[92m" if level == "INFO" else "\033[91m" if level == "ERROR" else "\033[0m"
|
|
reset = "\033[0m"
|
|
print(f"{color}[{level}] {message}{reset}")
|
|
|
|
|
|
def stow(pkg: str):
|
|
subprocess.run(["stow", "-v", "-d", str(PKGS_PATH), "-t", str(DEST_PATH), pkg], check=True)
|
|
|
|
|
|
def switch(session: str):
|
|
subprocess.run([str(Path("~/.local/scripts/config-switch").expanduser()), session], check=True)
|
|
|
|
|
|
def main():
|
|
parser = ArgumentParser(description="Stow configuration packages.")
|
|
parser.add_argument(
|
|
"package",
|
|
choices=PKGS.keys(),
|
|
help="The configuration package to stow."
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
selected_pkgs = PKGS[args.package]
|
|
|
|
for pkg in selected_pkgs:
|
|
try:
|
|
stow(pkg)
|
|
_log("INFO", f"Successfully stowed package '{pkg}'.")
|
|
except subprocess.CalledProcessError as e:
|
|
_log("ERROR", f"Failed to stow package '{pkg}': {e}")
|
|
|
|
if args.package == "hyprland":
|
|
try:
|
|
switch("Hyprland") # "Hyprland" as defined by hyprland
|
|
_log("INFO", "Switched session to hyprland.")
|
|
except subprocess.CalledProcessError as e:
|
|
_log("ERROR", f"Failed to switch session: {e}")
|
|
|
|
elif args.package == "niri":
|
|
try:
|
|
switch("niri") # "niri" as defined by niri
|
|
_log("INFO", "Switched session to niri.")
|
|
except subprocess.CalledProcessError as e:
|
|
_log("ERROR", f"Failed to switch session: {e}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|