diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a18fefb3..9b9f949d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -597,7 +597,7 @@ jobs: %{_builddir}/dms-cli completion zsh > %{buildroot}%{_datadir}/zsh/site-functions/_dms || : %{_builddir}/dms-cli completion fish > %{buildroot}%{_datadir}/fish/vendor_completions.d/dms.fish || : - install -Dm644 %{_builddir}/dms-qml/assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service + install -Dm644 assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service install -dm755 %{buildroot}%{_datadir}/quickshell/dms cp -r %{_builddir}/dms-qml/* %{buildroot}%{_datadir}/quickshell/dms/ diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..be1ca27a --- /dev/null +++ b/Makefile @@ -0,0 +1,156 @@ +# Root Makefile for DankMaterialShell (DMS) +# Orchestrates building, installation, and systemd management + +# Build configuration +BINARY_NAME=dms +CORE_DIR=core +BUILD_DIR=$(CORE_DIR)/bin +PREFIX ?= /usr/local +INSTALL_DIR=$(PREFIX)/bin +DATA_DIR=$(PREFIX)/share +ICON_DIR=$(DATA_DIR)/icons/hicolor/scalable/apps + +USER_HOME := $(if $(SUDO_USER),$(shell getent passwd $(SUDO_USER) | cut -d: -f6),$(HOME)) +SYSTEMD_USER_DIR=$(USER_HOME)/.config/systemd/user + +SHELL_DIR=quickshell +SHELL_INSTALL_DIR=$(DATA_DIR)/quickshell/dms +ASSETS_DIR=assets +APPLICATIONS_DIR=$(DATA_DIR)/applications + +.PHONY: all build clean install install-bin install-shell install-completions install-systemd install-icon install-desktop uninstall uninstall-bin uninstall-shell uninstall-completions uninstall-systemd uninstall-icon uninstall-desktop help + +all: build + +build: + @echo "Building $(BINARY_NAME)..." + @$(MAKE) -C $(CORE_DIR) build + @echo "Build complete" + +clean: + @echo "Cleaning build artifacts..." + @$(MAKE) -C $(CORE_DIR) clean + @echo "Clean complete" + +# Installation targets +install-bin: + @echo "Installing $(BINARY_NAME) to $(INSTALL_DIR)..." + @install -D -m 755 $(BUILD_DIR)/$(BINARY_NAME) $(INSTALL_DIR)/$(BINARY_NAME) + @echo "Binary installed" + +install-shell: + @echo "Installing shell files to $(SHELL_INSTALL_DIR)..." + @mkdir -p $(SHELL_INSTALL_DIR) + @cp -r $(SHELL_DIR)/* $(SHELL_INSTALL_DIR)/ + @rm -rf $(SHELL_INSTALL_DIR)/.git* $(SHELL_INSTALL_DIR)/.github + @echo "Shell files installed" + +install-completions: + @echo "Installing shell completions..." + @mkdir -p $(DATA_DIR)/bash-completion/completions + @mkdir -p $(DATA_DIR)/zsh/site-functions + @mkdir -p $(DATA_DIR)/fish/vendor_completions.d + @$(BUILD_DIR)/$(BINARY_NAME) completion bash > $(DATA_DIR)/bash-completion/completions/dms 2>/dev/null || true + @$(BUILD_DIR)/$(BINARY_NAME) completion zsh > $(DATA_DIR)/zsh/site-functions/_dms 2>/dev/null || true + @$(BUILD_DIR)/$(BINARY_NAME) completion fish > $(DATA_DIR)/fish/vendor_completions.d/dms.fish 2>/dev/null || true + @echo "Shell completions installed" + +install-systemd: + @echo "Installing systemd user service..." + @mkdir -p $(SYSTEMD_USER_DIR) + @if [ -n "$(SUDO_USER)" ]; then chown -R $(SUDO_USER):$(SUDO_USER) $(SYSTEMD_USER_DIR); fi + @sed 's|/usr/bin/dms|$(INSTALL_DIR)/dms|g' $(ASSETS_DIR)/systemd/dms.service > $(SYSTEMD_USER_DIR)/dms.service + @chmod 644 $(SYSTEMD_USER_DIR)/dms.service + @if [ -n "$(SUDO_USER)" ]; then chown $(SUDO_USER):$(SUDO_USER) $(SYSTEMD_USER_DIR)/dms.service; fi + @echo "Systemd service installed to $(SYSTEMD_USER_DIR)/dms.service" + +install-icon: + @echo "Installing icon..." + @install -D -m 644 $(ASSETS_DIR)/danklogo.svg $(ICON_DIR)/danklogo.svg + @gtk-update-icon-cache -q $(DATA_DIR)/icons/hicolor 2>/dev/null || true + @echo "Icon installed" + +install-desktop: + @echo "Installing desktop entry..." + @install -D -m 644 $(ASSETS_DIR)/dms-open.desktop $(APPLICATIONS_DIR)/dms-open.desktop + @update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true + @echo "Desktop entry installed" + +install: build install-bin install-shell install-completions install-systemd install-icon install-desktop + @echo "" + @echo "Installation complete!" + @echo "" + @echo "To enable and start DMS:" + @echo " systemctl --user enable --now dms" + +# Uninstallation targets +uninstall-bin: + @echo "Removing $(BINARY_NAME) from $(INSTALL_DIR)..." + @rm -f $(INSTALL_DIR)/$(BINARY_NAME) + @echo "Binary removed" + +uninstall-shell: + @echo "Removing shell files from $(SHELL_INSTALL_DIR)..." + @rm -rf $(SHELL_INSTALL_DIR) + @echo "Shell files removed" + +uninstall-completions: + @echo "Removing shell completions..." + @rm -f $(DATA_DIR)/bash-completion/completions/dms + @rm -f $(DATA_DIR)/zsh/site-functions/_dms + @rm -f $(DATA_DIR)/fish/vendor_completions.d/dms.fish + @echo "Shell completions removed" + +uninstall-systemd: + @echo "Removing systemd user service..." + @rm -f $(SYSTEMD_USER_DIR)/dms.service + @echo "Systemd service removed" + @echo "Note: Stop/disable service manually if running: systemctl --user stop dms" + +uninstall-icon: + @echo "Removing icon..." + @rm -f $(ICON_DIR)/danklogo.svg + @gtk-update-icon-cache -q $(DATA_DIR)/icons/hicolor 2>/dev/null || true + @echo "Icon removed" + +uninstall-desktop: + @echo "Removing desktop entry..." + @rm -f $(APPLICATIONS_DIR)/dms-open.desktop + @update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true + @echo "Desktop entry removed" + +uninstall: uninstall-systemd uninstall-desktop uninstall-icon uninstall-completions uninstall-shell uninstall-bin + @echo "" + @echo "Uninstallation complete!" + +# Target assist +help: + @echo "Available targets:" + @echo "" + @echo "Build:" + @echo " all (default) - Build the DMS binary" + @echo " build - Same as 'all'" + @echo " clean - Clean build artifacts" + @echo "" + @echo "Install:" + @echo " install - Build and install everything (requires sudo)" + @echo " install-bin - Install only the binary" + @echo " install-shell - Install only shell files" + @echo " install-completions - Install only shell completions" + @echo " install-systemd - Install only systemd service" + @echo " install-icon - Install only icon" + @echo " install-desktop - Install only desktop entry" + @echo "" + @echo "Uninstall:" + @echo " uninstall - Remove everything (requires sudo)" + @echo " uninstall-bin - Remove only the binary" + @echo " uninstall-shell - Remove only shell files" + @echo " uninstall-completions - Remove only shell completions" + @echo " uninstall-systemd - Remove only systemd service" + @echo " uninstall-icon - Remove only icon" + @echo " uninstall-desktop - Remove only desktop entry" + @echo "" + @echo "Usage:" + @echo " sudo make install - Build and install DMS" + @echo " sudo make uninstall - Remove DMS" + @echo " systemctl --user enable --now dms - Enable and start service" diff --git a/quickshell/assets/systemd/dms.service b/assets/systemd/dms.service similarity index 100% rename from quickshell/assets/systemd/dms.service rename to assets/systemd/dms.service diff --git a/distro/debian/dms-git/debian/rules b/distro/debian/dms-git/debian/rules index c9e61b28..b84212fb 100755 --- a/distro/debian/dms-git/debian/rules +++ b/distro/debian/dms-git/debian/rules @@ -59,7 +59,7 @@ override_dh_auto_install: mkdir -p debian/dms-git/usr/share/quickshell/dms debian/dms-git/usr/lib/systemd/user if [ -d quickshell ]; then \ cp -r quickshell/* debian/dms-git/usr/share/quickshell/dms/; \ - install -Dm644 quickshell/assets/systemd/dms.service debian/dms-git/usr/lib/systemd/user/dms.service; \ + install -Dm644 assets/systemd/dms.service debian/dms-git/usr/lib/systemd/user/dms.service; \ else \ echo "ERROR: quickshell directory not found!" && \ echo "Contents of current directory:" && ls -la && \ diff --git a/distro/debian/dms/debian/rules b/distro/debian/dms/debian/rules index 99aa8e3f..37f0d99c 100755 --- a/distro/debian/dms/debian/rules +++ b/distro/debian/dms/debian/rules @@ -55,7 +55,7 @@ override_dh_auto_install: fi if [ -d DankMaterialShell-$(UPSTREAM_VERSION) ]; then \ cp -r DankMaterialShell-$(UPSTREAM_VERSION)/quickshell/* debian/dms/usr/share/quickshell/dms/; \ - install -Dm644 DankMaterialShell-$(UPSTREAM_VERSION)/quickshell/assets/systemd/dms.service debian/dms/usr/lib/systemd/user/dms.service; \ + install -Dm644 DankMaterialShell-$(UPSTREAM_VERSION)/assets/systemd/dms.service debian/dms/usr/lib/systemd/user/dms.service; \ else \ echo "ERROR: DankMaterialShell-$(UPSTREAM_VERSION) directory not found!" && \ echo "Contents of current directory:" && ls -la && \ diff --git a/distro/fedora/dms.spec b/distro/fedora/dms.spec index 2f3eab98..b13350f9 100644 --- a/distro/fedora/dms.spec +++ b/distro/fedora/dms.spec @@ -97,12 +97,12 @@ gunzip -c %{_builddir}/dgop.gz > %{_builddir}/dgop chmod +x %{_builddir}/dgop %build -# Build DMS CLI from source (core/ subdirectory in monorepo) +# Build DMS CLI from source (core/subdirectory) cd core make dist %install -# Install dms-cli binary (built from source) - use architecture-specific path +# Install dms-cli binary (built from source) case "%{_arch}" in x86_64) DMS_BINARY="dms-linux-amd64" @@ -129,8 +129,8 @@ core/bin/${DMS_BINARY} completion fish > %{buildroot}%{_datadir}/fish/vendor_com # Install dgop binary install -Dm755 %{_builddir}/dgop %{buildroot}%{_bindir}/dgop -# Install systemd user service (from quickshell/ subdirectory) -install -Dm644 quickshell/assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service +# Install systemd user service +install -Dm644 assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service # Install shell files to shared data location (from quickshell/ subdirectory) install -dm755 %{buildroot}%{_datadir}/quickshell/dms @@ -143,9 +143,8 @@ rm -rf %{buildroot}%{_datadir}/quickshell/dms/.github rm -rf %{buildroot}%{_datadir}/quickshell/dms/distro %posttrans -# Clean up old installation path from previous versions (only if empty) +# Clean up old installation path from previous versions if [ -d "%{_sysconfdir}/xdg/quickshell/dms" ]; then - # Remove directories only if empty (preserves any user-added files) rmdir "%{_sysconfdir}/xdg/quickshell/dms" 2>/dev/null || true rmdir "%{_sysconfdir}/xdg/quickshell" 2>/dev/null || true rmdir "%{_sysconfdir}/xdg" 2>/dev/null || true diff --git a/distro/opensuse/dms-git.spec b/distro/opensuse/dms-git.spec index 4002b882..b9675405 100644 --- a/distro/opensuse/dms-git.spec +++ b/distro/opensuse/dms-git.spec @@ -89,7 +89,7 @@ install -d %{buildroot}%{_datadir}/fish/vendor_completions.d ./dms completion zsh > %{buildroot}%{_datadir}/zsh/site-functions/_dms || : ./dms completion fish > %{buildroot}%{_datadir}/fish/vendor_completions.d/dms.fish || : -install -Dm644 quickshell/assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service +install -Dm644 assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service install -dm755 %{buildroot}%{_datadir}/quickshell/dms cp -r quickshell/* %{buildroot}%{_datadir}/quickshell/dms/ diff --git a/distro/opensuse/dms.spec b/distro/opensuse/dms.spec index e6a6babd..b1a29c62 100644 --- a/distro/opensuse/dms.spec +++ b/distro/opensuse/dms.spec @@ -63,7 +63,7 @@ install -d %{buildroot}%{_datadir}/fish/vendor_completions.d ./dms completion zsh > %{buildroot}%{_datadir}/zsh/site-functions/_dms || : ./dms completion fish > %{buildroot}%{_datadir}/fish/vendor_completions.d/dms.fish || : -install -Dm644 quickshell/assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service +install -Dm644 assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service install -dm755 %{buildroot}%{_datadir}/quickshell/dms cp -r quickshell/* %{buildroot}%{_datadir}/quickshell/dms/ diff --git a/distro/ubuntu/dms-git/debian/rules b/distro/ubuntu/dms-git/debian/rules index 5f7735ce..bdc004dd 100755 --- a/distro/ubuntu/dms-git/debian/rules +++ b/distro/ubuntu/dms-git/debian/rules @@ -53,7 +53,7 @@ override_dh_auto_install: rm -rf debian/dms-git/usr/share/quickshell/dms/distro # Install systemd user service - install -Dm644 dms-git-repo/quickshell/assets/systemd/dms.service \ + install -Dm644 dms-git-repo/assets/systemd/dms.service \ debian/dms-git/usr/lib/systemd/user/dms.service override_dh_auto_clean: diff --git a/distro/ubuntu/dms/debian/rules b/distro/ubuntu/dms/debian/rules index 73c3ce04..27253460 100755 --- a/distro/ubuntu/dms/debian/rules +++ b/distro/ubuntu/dms/debian/rules @@ -45,7 +45,7 @@ override_dh_auto_install: rm -rf debian/dms/usr/share/quickshell/dms/distro # Install systemd user service - install -Dm644 DankMaterialShell-$(BASE_VERSION)/quickshell/assets/systemd/dms.service \ + install -Dm644 DankMaterialShell-$(BASE_VERSION)/assets/systemd/dms.service \ debian/dms/usr/lib/systemd/user/dms.service # Generate and install shell completions (if applicable) diff --git a/dms-bin.sh b/dms-bin.sh deleted file mode 100755 index 48cc1ec6..00000000 --- a/dms-bin.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -# Build script wrapper for dms-cli core binaries -# Forwards make commands to core/Makefile - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -CORE_DIR="$SCRIPT_DIR/core" - -# Colors for output -GREEN='\033[0;32m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Check if core directory exists -if [ ! -d "$CORE_DIR" ]; then - echo "Error: core directory not found at $CORE_DIR" - exit 1 -fi - -# If no arguments provided, build and install -if [ $# -eq 0 ]; then - echo -e "${BLUE}Building and installing DMS CLI binary...${NC}" - cd "$CORE_DIR" - make && sudo make install - exit 0 -fi - -# Forward all arguments to make in core directory -echo -e "${GREEN}Building in core directory...${NC}" -cd "$CORE_DIR" -make "$@"