commit 811ed1e9c4188152805664610f9301528549b2df Author: Janis Hutz Date: Sat Jun 13 14:14:29 2026 +0200 feat: basic setup with all packages diff --git a/main.py b/main.py new file mode 100644 index 0000000..3ae889a --- /dev/null +++ b/main.py @@ -0,0 +1 @@ +import decman diff --git a/modules/coding/latex.py b/modules/coding/latex.py new file mode 100644 index 0000000..19e3758 --- /dev/null +++ b/modules/coding/latex.py @@ -0,0 +1,23 @@ +import decman +from decman.plugins import pacman + + +class BaseModule(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("latex") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "texlive", + "texlive-langgerman", + "perl-yaml-tiny", + "perl-file-homedir", + "biber", + "texlab", + } + + def on_enable(self, store: decman.Store): + # TODO: clone the git repo + return super().on_enable(store) diff --git a/modules/coding/neovim.py b/modules/coding/neovim.py new file mode 100644 index 0000000..f2d4823 --- /dev/null +++ b/modules/coding/neovim.py @@ -0,0 +1,27 @@ +import decman +from decman.plugins import pacman, aur + + +class NeovimModule(decman.Module): + def __init__(self): + """Neovim Packages""" + super().__init__("neovim") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "neovim", + "lua", + "lua-language-server", + "tree-sitter", + "tree-sitter-cli", + "stylua", + } + + # def directories(self) -> dict[str, decman.Directory]: + # return { "": decman.Directory() } + + @aur.packages + def aurpkgs(self) -> set[str]: + # Consider switching to WiVRN + return {"bs-manager-bin", "alvr-bin"} diff --git a/modules/core/applications/dev_tools.py b/modules/core/applications/dev_tools.py new file mode 100644 index 0000000..163d088 --- /dev/null +++ b/modules/core/applications/dev_tools.py @@ -0,0 +1,28 @@ +import decman +from decman.plugins import pacman + + +class DevTools(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("dev-tools") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "act", + "cronie", + "cloc", + "docker", + "docker-buildx", + "docker-compose", + "filezilla", + "kitty", + "lazygit", + "git-lfs", + "hugo", + "meld", + "minisign", + "serpl", + "terminator", + } diff --git a/modules/core/applications/games.py b/modules/core/applications/games.py new file mode 100644 index 0000000..1bdb764 --- /dev/null +++ b/modules/core/applications/games.py @@ -0,0 +1,26 @@ +import decman +from decman.plugins import pacman, aur + + +class Games(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("games") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "android-udev", + "android-tools", + "lib32-vulkan-radeon", + "vulkan-radeon", + "steam", + "prismlauncher", + "gamemmode", + "gamescope", + } + + @aur.packages + def aurpkgs(self) -> set[str]: + # Consider switching to WiVRN + return {"bs-manager-bin", "alvr-bin"} diff --git a/modules/core/applications/steering_wheel.py b/modules/core/applications/steering_wheel.py new file mode 100644 index 0000000..5b21435 --- /dev/null +++ b/modules/core/applications/steering_wheel.py @@ -0,0 +1,15 @@ +import decman +from decman.plugins import aur + + +class BasePackages(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("steering-wheel") + + @aur.packages + def aurpkgs(self) -> set[str]: + return {"oversteer", "hid-tmff2-dkms-git"} + + def on_enable(self, store: decman.Store): + return super().on_enable(store) diff --git a/modules/core/system/base.py b/modules/core/system/base.py new file mode 100644 index 0000000..9f91404 --- /dev/null +++ b/modules/core/system/base.py @@ -0,0 +1,45 @@ +import decman +from decman.plugins import pacman, aur + + +class BasePackages(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("base") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "base", + "cups", + "efibootmgr", + "grub", + "linux", + "linux-firmware", + "linux-headers", + "networkmanager", + "git", + "sudo", + "systemd-resolvconf", + "trash-cli", + "base-devel", + "cifs", + "reflector", + "paccache", + "plymouth" + } + + @aur.packages + def aurpkgs(self) -> set[str]: + return {"decman"} + + def files(self) -> dict[str, decman.File]: + return { + "/etc/mkinitcpio.conf": decman.File(source_file="./system/mkinitcpio.conf"), + "/etc/pacman.conf": decman.File(source_file="./system/pacman.conf"), + "/etc/default/grub": decman.File(source_file="./system/grub"), + } + + def on_change(self, store): + decman.prg(["mkinitcpio", "-P"]) + decman.prg(["grub-mkconfig", "-o", "/boot/grub/grub.cfg"]) diff --git a/modules/core/system/pipewire.py b/modules/core/system/pipewire.py new file mode 100644 index 0000000..6cc9d33 --- /dev/null +++ b/modules/core/system/pipewire.py @@ -0,0 +1,19 @@ +import decman +from decman.plugins import pacman, aur + + +class BaseModule(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("base") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "pipewire", + "pipewire-alsa", + "pipewire-pulse", + "pipewire-jack", + "wireplumber", + "pavucontrol", + } diff --git a/modules/core/ui/bar.py b/modules/core/ui/bar.py new file mode 100644 index 0000000..b9d9a47 --- /dev/null +++ b/modules/core/ui/bar.py @@ -0,0 +1,22 @@ +# NOTE: Bar will be rewritten in QuickShell likely +import decman +from decman.plugins import pacman, aur + + +class LoginManager(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("base") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + # "quickshell", + "playerctl", + "playerctl", + } + + @aur.packages + def aurpkgs(self) -> set[str]: + # TODO: Rewrite bar in quickshell + return {"aylurs-gtk-shell"} diff --git a/modules/core/ui/file_manager.py b/modules/core/ui/file_manager.py new file mode 100644 index 0000000..595504b --- /dev/null +++ b/modules/core/ui/file_manager.py @@ -0,0 +1,27 @@ +import decman +from decman.plugins import pacman, aur + + +class BaseModule(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("yazi") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "yazi", + "ouch", + "grub", + "linux", + "networkmanager", + "git", + "base-devel", + } + + @aur.packages + def aurpkgs(self) -> set[str]: + return {"xdg-desktop-portal-termfilechooser-hunkyburrito-git"} + + def files(self) -> dict[str, decman.File]: + return super().files() diff --git a/modules/core/ui/fonts.py b/modules/core/ui/fonts.py new file mode 100644 index 0000000..7035225 --- /dev/null +++ b/modules/core/ui/fonts.py @@ -0,0 +1,23 @@ +import decman +from decman.plugins import pacman, aur + + +class BaseModule(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("fonts") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "adobe-source-code-pro-fonts" + "ttf-fantasque-nerd", + "ttf-jetbrains-mono-nerd", + "ttf-iosevka-nerd", + "ttf-nerd-fonts-symbols-common", + "inter-font", + } + + @aur.packages + def aurpkgs(self) -> set[str]: + return {"ttf-comfortaa"} diff --git a/modules/core/ui/hyprland.py b/modules/core/ui/hyprland.py new file mode 100644 index 0000000..6445b2e --- /dev/null +++ b/modules/core/ui/hyprland.py @@ -0,0 +1,33 @@ +import decman +from decman.plugins import pacman, aur + + +class BaseModule(decman.Module): + def __init__(self): + """Base packages that should never be uninstalled""" + super().__init__("base") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "hyprland", + "hyprlock", + "hypridle", + "hyprshutdown", + "grimblast", + "grim", + "xdg-desktop-portal-hyprland", + "hyprpolkitagent", + "hyprpaper", + "wl-clipboard", + "cliphist", + "hyrplauncher", + "hyprpwcenter", + "hyprtoolkit", + } + + def directories(self) -> dict[str, decman.Directory]: + return super().directories() + + def on_change(self, store: decman.Store): + return super().on_change(store) diff --git a/modules/core/ui/login.py b/modules/core/ui/login.py new file mode 100644 index 0000000..d9156d4 --- /dev/null +++ b/modules/core/ui/login.py @@ -0,0 +1,30 @@ +from typing import Literal + +import decman +from decman.plugins import pacman, systemd + + +class LoginManager(decman.Module): + def __init__(self, platform: Literal["desktop", "laptop"]): + """Base packages that should never be uninstalled""" + self._platform: Literal["desktop", "laptop"] = platform + super().__init__("base") + + @pacman.packages + def pkgs(self) -> set[str]: + if self._platform == "desktop": + return { + "greetd", + "greetd-tuigreet", + } + else: + return {"gdm"} + + # TODO: Config files for laptop and desktop + + @systemd.units + def units(self) -> set[str]: + if self._platform == "desktop": + return {"greetd.service"} + else: + return {"gdm.service"} diff --git a/modules/core/utilities.py b/modules/core/utilities.py new file mode 100644 index 0000000..8d16805 --- /dev/null +++ b/modules/core/utilities.py @@ -0,0 +1,55 @@ +import decman +from decman.plugins import pacman, aur + + +class UtilPackages(decman.Module): + def __init__(self): + """Util packages""" + super().__init__("util") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "bashtop", + "bluez", + "bluez-utils", + "blueman", + "dig", + "evince", + "fastfetch", + "fd", + "ffmpeg", + "ffmpegthumbnailer", + "fish", + "fzf", + "gdu", + "gimp", + "gwenview", + "handbrake", + "iptables", + "man-pages", + "man-db", + "mpv", + "nextcloud-client", + "obs-studio", + "okular", + "openconnect", + "qalculate-qt", + "ripgrep", + "simple-scan", + "smartmontools", + "thunderbird", + "tldr", + "unzip", + "wget", + "wine", + "xclip", + "zathura", + "zathura-pdf-poppler", + "zip", + "zoxide", + } + + @aur.packages + def aurpkgs(self) -> set[str]: + return {"librewolf-bin", "brave-bin", "vesktop-bin", "uxplay", "git-credential-manager-bin"} diff --git a/modules/theme.py b/modules/theme.py new file mode 100644 index 0000000..8593107 --- /dev/null +++ b/modules/theme.py @@ -0,0 +1,5 @@ +import decman + + +class SystemTheme(decman.Module): + pass