better stow (vielleicht :/

This commit is contained in:
2025-11-10 19:49:56 +01:00
parent 89a95d9bd7
commit 94118d682b
61 changed files with 139 additions and 19 deletions

109
config-stow Executable file
View File

@@ -0,0 +1,109 @@
#!/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",
]
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(["config-switch", 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("Hypr")
_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")
_log("INFO", "Switched session to niri.")
except subprocess.CalledProcessError as e:
_log("ERROR", f"Failed to switch session: {e}")
if __name__ == "__main__":
main()