BINARY := lazy-update-manager PREFIX ?= $(HOME)/.local APP_DIR := $(CURDIR) # Versioning: try to use git describe, fall back to 'dev' VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo dev) BUILD_TIME := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") .PHONY: build desktop desktop-dist install install-user-service enable-user-service test fmt clean build: @echo "Building $(BINARY) (version: $(VERSION), build time: $(BUILD_TIME))" go build -buildvcs=false -ldflags "-X 'lazy-update-manager/internal/version.Version=$(VERSION)' -X 'lazy-update-manager/internal/version.BuildTime=$(BUILD_TIME)'" -o bin/$(BINARY) ./cmd/lazy-update-manager desktop: npm run start desktop-dist: npm run dist install: build @mkdir -p $(PREFIX)/bin @mkdir -p $(PREFIX)/share/applications @mkdir -p $(HOME)/.config/systemd/user @echo "Installing $(BINARY) to $(PREFIX)/bin" @if [ -f "$(PREFIX)/bin/$(BINARY)" ]; then \ if cmp -s bin/$(BINARY) "$(PREFIX)/bin/$(BINARY)"; then \ echo "Existing binary is identical; skipping overwrite."; \ else \ ts=$$(date +%Y%m%d%H%M%S); \ mv "$(PREFIX)/bin/$(BINARY)" "$(PREFIX)/bin/$(BINARY)-$$ts.bak"; \ echo "Backed up previous binary to $(PREFIX)/bin/$(BINARY)-$$ts.bak"; \ install -Dm755 bin/$(BINARY) $(PREFIX)/bin/$(BINARY); \ fi; \ else \ install -Dm755 bin/$(BINARY) $(PREFIX)/bin/$(BINARY); \ fi; \ { \ echo "[Desktop Entry]"; \ echo "Type=Application"; \ echo "Name=LazyUpdateManager"; \ echo "Comment=Arch and Hyprland update helper"; \ echo "Exec=$(PREFIX)/bin/$(BINARY) gui"; \ echo "Path=$(APP_DIR)"; \ echo "Icon=system-software-update"; \ echo "Terminal=false"; \ echo "Categories=System;Utility;"; \ } > $(PREFIX)/share/applications/lazy-update-manager.desktop; \ install -Dm644 systemd/lazy-update-manager.service $(HOME)/.config/systemd/user/lazy-update-manager.service; \ install -Dm644 systemd/lazy-update-manager.timer $(HOME)/.config/systemd/user/lazy-update-manager.timer; \ if command -v systemctl >/dev/null 2>&1 && systemctl --user daemon-reload >/dev/null 2>&1; then \ systemctl --user enable --now lazy-update-manager.timer; \ echo "Enabled lazy-update-manager.timer for update notifications"; \ else \ echo "Installed user service files, but could not access the user systemd session."; \ echo "Run manually: systemctl --user daemon-reload && systemctl --user enable --now lazy-update-manager.timer"; \ fi; \ echo "Installed $(BINARY) to $(PREFIX)/bin" install-user-service: install @echo "User service installation is included in 'make install'." enable-user-service: install-user-service @echo "Timer activation is included in 'make install'." test: go test ./... fmt: gofmt -w ./cmd ./internal clean: rm -rf bin