diff --git a/swww.sh b/swww.sh new file mode 100644 index 0000000..605a083 --- /dev/null +++ b/swww.sh @@ -0,0 +1,95 @@ +{ + #!/usr/bin/env bash + + # ─< Check if the given command exists silently >───────────────────────────────────────── + command_exists() { + command -v "$@" >/dev/null 2>&1 + } + + # WHY: + # This import will give you the following variables: + # _sudo="sudo -E" <- only if non root user + # distro = + # arch = bool + # fedora = bool + # opensuse = bool.... + # You can then use it for, `if arch; then` + # Also this gives you the _install command, which installs a package pased on the packagemanager/distro used. + # CAUTION: + # This only wokrs for generic package names, like neovim, or vim, or tmux etc.. + # not every package packagemanager has the same packagenames for their packages.. + getImports() { + i="https://git.k4li.de/scripts/imports/raw/branch/main/distros.sh" + import="$(mktemp)" + if command_exists curl; then + curl -fsSL i -o import + else + echo "curl is required, but missing.." + exit 1 + fi + + source "import" + sleep 0.3 + rm "import" + echo_warning "cleaned import" + } + + checkBuildDependencies() { + echo_info "Installing build dependencies.." + for i in git xdg-output lz4 wayland-dev; do + run _install "$i" + done + + if ! command_exists cargo; then + curl --proto '=https' --tlsv1.2 -sSf "https://sh.rustup.rs" | sh + else + return 0 + fi + } + + cloneAndBuildSwww() { + local cloneDir="$(mktemp -d)" + echo_info "cloning swww into $cloneDir/swww" + run git clone --depth=1 https://github.com/LGFae/swww.git $cloneDir/swww + + cd $cloneDir/swww || echo_error "error.." + + if run cargo build --release; then + echo_info "Installing swww and swww-daemon to /bin" + run $_sudo cp target/release/swww{,-daemon} /bin/ + fi + } + + main() { + case "$distro" in + arch) + echo_info "Arch detected.. installing directly" + run _install swww + ;; + debian | ubuntu) + checkBuildDependencies + cloneAndBuildSwww + ;; + *) + echo "$distro is not supported by this script!" + exit 1 + ;; + esac + } + + if getImports; then + case "arch" in + --silent | -s) + echo_info "Executing main silently.." + silent=true + ;; + *) silent=false ;; + esac + fi + + if ! command_exists swww; then + main + else + echo_warning "swww is already installed!" + fi +}