From 181a9ec134c7d954877f7f320e54b13fd7cf5104 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 26 Oct 2025 19:37:20 -0400 Subject: [PATCH 01/16] Pull in all aur pkgbuilds --- pkgbuilds/1password-beta/.SRCINFO | 22 ++ pkgbuilds/1password-beta/.gitlab-ci.yml | 3 + pkgbuilds/1password-beta/1password.install | 48 +++ pkgbuilds/1password-beta/CODEOWNERS | 2 + pkgbuilds/1password-beta/PKGBUILD | 66 ++++ pkgbuilds/1password-beta/aur.env | 2 + pkgbuilds/1password-cli/.SRCINFO | 27 ++ pkgbuilds/1password-cli/.gitignore | 10 + pkgbuilds/1password-cli/1password-cli.install | 13 + pkgbuilds/1password-cli/PKGBUILD | 37 ++ pkgbuilds/1password-cli/package-update.sh | 21 ++ pkgbuilds/bun-bin/.SRCINFO | 20 + pkgbuilds/bun-bin/LICENSE | 21 ++ pkgbuilds/bun-bin/PKGBUILD | 61 +++ pkgbuilds/claude-code/.SRCINFO | 18 + pkgbuilds/claude-code/.nvchecker.toml | 3 + pkgbuilds/claude-code/PKGBUILD | 28 ++ pkgbuilds/crush-bin/.SRCINFO | 22 ++ pkgbuilds/crush-bin/PKGBUILD | 46 +++ pkgbuilds/cursor-bin/.SRCINFO | 21 ++ pkgbuilds/cursor-bin/.gitignore | 20 + pkgbuilds/cursor-bin/PKGBUILD | 33 ++ pkgbuilds/cursor-bin/rg.sh | 2 + pkgbuilds/dropbox-cli/.SRCINFO | 18 + pkgbuilds/dropbox-cli/.gitignore | 7 + pkgbuilds/dropbox-cli/PKGBUILD | 39 ++ pkgbuilds/dropbox-cli/dropboxd-fallback.patch | 17 + pkgbuilds/dropbox/.SRCINFO | 42 +++ pkgbuilds/dropbox/.nvchecker.toml | 5 + pkgbuilds/dropbox/DropboxGlyph_Blue.svg | 1 + pkgbuilds/dropbox/PKGBUILD | 67 ++++ pkgbuilds/dropbox/dropbox.service | 13 + pkgbuilds/dropbox/dropbox@.service | 15 + pkgbuilds/dropbox/terms.txt | 150 ++++++++ pkgbuilds/elephant-archlinuxpkgs/.SRCINFO | 15 + pkgbuilds/elephant-archlinuxpkgs/PKGBUILD | 27 ++ pkgbuilds/elephant-bluetooth/.SRCINFO | 15 + pkgbuilds/elephant-bluetooth/PKGBUILD | 27 ++ pkgbuilds/elephant-calc/.SRCINFO | 16 + pkgbuilds/elephant-calc/PKGBUILD | 28 ++ pkgbuilds/elephant-clipboard/.SRCINFO | 16 + pkgbuilds/elephant-clipboard/PKGBUILD | 28 ++ .../elephant-desktopapplications/.SRCINFO | 15 + .../elephant-desktopapplications/PKGBUILD | 27 ++ pkgbuilds/elephant-files/.SRCINFO | 16 + pkgbuilds/elephant-files/PKGBUILD | 28 ++ pkgbuilds/elephant-menus/.SRCINFO | 15 + pkgbuilds/elephant-menus/PKGBUILD | 27 ++ pkgbuilds/elephant-providerlist/.SRCINFO | 15 + pkgbuilds/elephant-providerlist/PKGBUILD | 27 ++ pkgbuilds/elephant-runner/.SRCINFO | 15 + pkgbuilds/elephant-runner/PKGBUILD | 27 ++ pkgbuilds/elephant-symbols/.SRCINFO | 15 + pkgbuilds/elephant-symbols/PKGBUILD | 27 ++ pkgbuilds/elephant-todo/.SRCINFO | 15 + pkgbuilds/elephant-todo/PKGBUILD | 27 ++ pkgbuilds/elephant-unicode/.SRCINFO | 15 + pkgbuilds/elephant-unicode/PKGBUILD | 27 ++ pkgbuilds/elephant-websearch/.SRCINFO | 15 + pkgbuilds/elephant-websearch/PKGBUILD | 27 ++ pkgbuilds/elephant/.SRCINFO | 15 + pkgbuilds/elephant/.gitignore | 4 + pkgbuilds/elephant/PKGBUILD | 27 ++ pkgbuilds/gpu-screen-recorder/.SRCINFO | 35 ++ pkgbuilds/gpu-screen-recorder/PKGBUILD | 34 ++ .../gpu-screen-recorder.install | 7 + pkgbuilds/hyprshade/.SRCINFO | 23 ++ pkgbuilds/hyprshade/.gitignore | 4 + pkgbuilds/hyprshade/PKGBUILD | 63 ++++ pkgbuilds/limine-mkinitcpio-hook/.SRCINFO | 27 ++ pkgbuilds/limine-mkinitcpio-hook/.gitignore | 5 + pkgbuilds/limine-mkinitcpio-hook/PKGBUILD | 57 +++ pkgbuilds/limine-snapper-sync/.SRCINFO | 30 ++ pkgbuilds/limine-snapper-sync/.gitignore | 4 + pkgbuilds/limine-snapper-sync/PKGBUILD | 56 +++ pkgbuilds/lmstudio/.SRCINFO | 20 + pkgbuilds/lmstudio/.nvchecker.toml | 3 + pkgbuilds/lmstudio/PKGBUILD | 69 ++++ pkgbuilds/localsend-bin/.SRCINFO | 20 + pkgbuilds/localsend-bin/PKGBUILD | 64 ++++ pkgbuilds/localsend/.SRCINFO | 22 ++ pkgbuilds/localsend/.gitignore | 4 + pkgbuilds/localsend/PKGBUILD | 99 +++++ pkgbuilds/macbook12-spi-driver-dkms/.SRCINFO | 16 + .../macbook12-spi-driver-dkms/.gitignore | 4 + pkgbuilds/macbook12-spi-driver-dkms/PKGBUILD | 37 ++ pkgbuilds/macbook12-spi-driver-dkms/dkms.conf | 17 + pkgbuilds/nautilus-dropbox/.SRCINFO | 21 ++ pkgbuilds/nautilus-dropbox/PKGBUILD | 43 +++ pkgbuilds/omarchy-chromium-bin/.SRCINFO | 33 ++ pkgbuilds/omarchy-chromium-bin/PKGBUILD | 30 ++ pkgbuilds/openai-codex-bin/.SRCINFO | 18 + pkgbuilds/openai-codex-bin/PKGBUILD | 36 ++ pkgbuilds/openai-codex/.SRCINFO | 19 + pkgbuilds/openai-codex/.nvchecker.toml | 5 + pkgbuilds/openai-codex/PKGBUILD | 52 +++ pkgbuilds/opencode/.SRCINFO | 21 ++ pkgbuilds/opencode/PKGBUILD | 16 +- pkgbuilds/pinta/.SRCINFO | 27 ++ pkgbuilds/pinta/.gitignore | 5 + pkgbuilds/pinta/.nvchecker.toml | 4 + pkgbuilds/pinta/PKGBUILD | 45 +++ pkgbuilds/python-terminaltexteffects/.SRCINFO | 19 + .../python-terminaltexteffects/.gitignore | 5 + .../.nvchecker.toml | 5 + pkgbuilds/python-terminaltexteffects/PKGBUILD | 29 ++ pkgbuilds/spotify/.SRCINFO | 39 ++ pkgbuilds/spotify/LICENSE | 349 ++++++++++++++++++ pkgbuilds/spotify/PKGBUILD | 98 +++++ ...20FD3777CCE3A7F0076B55C85668DF69375001.asc | 29 ++ pkgbuilds/spotify/spotify.protocol | 11 + pkgbuilds/spotify/spotify.sh | 13 + pkgbuilds/symfony-cli/.SRCINFO | 16 + pkgbuilds/symfony-cli/.gitignore | 4 + pkgbuilds/symfony-cli/LICENSE | 21 ++ pkgbuilds/symfony-cli/PKGBUILD | 31 ++ pkgbuilds/symfony-cli/README.md | 15 + pkgbuilds/symfony-cli/update.sh | 17 + pkgbuilds/ttf-ia-writer/.SRCINFO | 44 +++ pkgbuilds/ttf-ia-writer/.gitignore | 4 + pkgbuilds/ttf-ia-writer/PKGBUILD | 48 +++ pkgbuilds/typora/.SRCINFO | 21 ++ pkgbuilds/typora/.gitignore | 4 + pkgbuilds/typora/Makefile | 36 ++ pkgbuilds/typora/PKGBUILD | 50 +++ pkgbuilds/typora/typora.sh | 11 + pkgbuilds/tzupdate/.SRCINFO | 13 + pkgbuilds/tzupdate/PKGBUILD | 23 ++ pkgbuilds/ufw-docker/.SRCINFO | 15 + pkgbuilds/ufw-docker/.gitignore | 4 + pkgbuilds/ufw-docker/PKGBUILD | 25 ++ pkgbuilds/ufw-docker/ufw-docker.install | 16 + pkgbuilds/visual-studio-code-bin/.SRCINFO | 47 +++ pkgbuilds/visual-studio-code-bin/.gitignore | 2 + pkgbuilds/visual-studio-code-bin/PKGBUILD | 83 +++++ .../visual-studio-code-bin.install | 21 ++ .../visual-studio-code-bin.sh | 11 + pkgbuilds/walker/.SRCINFO | 24 ++ pkgbuilds/walker/PKGBUILD | 49 +++ pkgbuilds/yay/.SRCINFO | 24 ++ pkgbuilds/yay/.gitignore | 6 + pkgbuilds/yay/PKGBUILD | 37 ++ 142 files changed, 3918 insertions(+), 14 deletions(-) create mode 100644 pkgbuilds/1password-beta/.SRCINFO create mode 100644 pkgbuilds/1password-beta/.gitlab-ci.yml create mode 100755 pkgbuilds/1password-beta/1password.install create mode 100644 pkgbuilds/1password-beta/CODEOWNERS create mode 100644 pkgbuilds/1password-beta/PKGBUILD create mode 100644 pkgbuilds/1password-beta/aur.env create mode 100644 pkgbuilds/1password-cli/.SRCINFO create mode 100644 pkgbuilds/1password-cli/.gitignore create mode 100644 pkgbuilds/1password-cli/1password-cli.install create mode 100644 pkgbuilds/1password-cli/PKGBUILD create mode 100644 pkgbuilds/1password-cli/package-update.sh create mode 100644 pkgbuilds/bun-bin/.SRCINFO create mode 100644 pkgbuilds/bun-bin/LICENSE create mode 100644 pkgbuilds/bun-bin/PKGBUILD create mode 100644 pkgbuilds/claude-code/.SRCINFO create mode 100644 pkgbuilds/claude-code/.nvchecker.toml create mode 100644 pkgbuilds/claude-code/PKGBUILD create mode 100644 pkgbuilds/crush-bin/.SRCINFO create mode 100644 pkgbuilds/crush-bin/PKGBUILD create mode 100644 pkgbuilds/cursor-bin/.SRCINFO create mode 100644 pkgbuilds/cursor-bin/.gitignore create mode 100644 pkgbuilds/cursor-bin/PKGBUILD create mode 100755 pkgbuilds/cursor-bin/rg.sh create mode 100644 pkgbuilds/dropbox-cli/.SRCINFO create mode 100644 pkgbuilds/dropbox-cli/.gitignore create mode 100644 pkgbuilds/dropbox-cli/PKGBUILD create mode 100644 pkgbuilds/dropbox-cli/dropboxd-fallback.patch create mode 100644 pkgbuilds/dropbox/.SRCINFO create mode 100644 pkgbuilds/dropbox/.nvchecker.toml create mode 100644 pkgbuilds/dropbox/DropboxGlyph_Blue.svg create mode 100644 pkgbuilds/dropbox/PKGBUILD create mode 100644 pkgbuilds/dropbox/dropbox.service create mode 100644 pkgbuilds/dropbox/dropbox@.service create mode 100644 pkgbuilds/dropbox/terms.txt create mode 100644 pkgbuilds/elephant-archlinuxpkgs/.SRCINFO create mode 100644 pkgbuilds/elephant-archlinuxpkgs/PKGBUILD create mode 100644 pkgbuilds/elephant-bluetooth/.SRCINFO create mode 100644 pkgbuilds/elephant-bluetooth/PKGBUILD create mode 100644 pkgbuilds/elephant-calc/.SRCINFO create mode 100644 pkgbuilds/elephant-calc/PKGBUILD create mode 100644 pkgbuilds/elephant-clipboard/.SRCINFO create mode 100644 pkgbuilds/elephant-clipboard/PKGBUILD create mode 100644 pkgbuilds/elephant-desktopapplications/.SRCINFO create mode 100644 pkgbuilds/elephant-desktopapplications/PKGBUILD create mode 100644 pkgbuilds/elephant-files/.SRCINFO create mode 100644 pkgbuilds/elephant-files/PKGBUILD create mode 100644 pkgbuilds/elephant-menus/.SRCINFO create mode 100644 pkgbuilds/elephant-menus/PKGBUILD create mode 100644 pkgbuilds/elephant-providerlist/.SRCINFO create mode 100644 pkgbuilds/elephant-providerlist/PKGBUILD create mode 100644 pkgbuilds/elephant-runner/.SRCINFO create mode 100644 pkgbuilds/elephant-runner/PKGBUILD create mode 100644 pkgbuilds/elephant-symbols/.SRCINFO create mode 100644 pkgbuilds/elephant-symbols/PKGBUILD create mode 100644 pkgbuilds/elephant-todo/.SRCINFO create mode 100644 pkgbuilds/elephant-todo/PKGBUILD create mode 100644 pkgbuilds/elephant-unicode/.SRCINFO create mode 100644 pkgbuilds/elephant-unicode/PKGBUILD create mode 100644 pkgbuilds/elephant-websearch/.SRCINFO create mode 100644 pkgbuilds/elephant-websearch/PKGBUILD create mode 100644 pkgbuilds/elephant/.SRCINFO create mode 100644 pkgbuilds/elephant/.gitignore create mode 100644 pkgbuilds/elephant/PKGBUILD create mode 100644 pkgbuilds/gpu-screen-recorder/.SRCINFO create mode 100644 pkgbuilds/gpu-screen-recorder/PKGBUILD create mode 100644 pkgbuilds/gpu-screen-recorder/gpu-screen-recorder.install create mode 100644 pkgbuilds/hyprshade/.SRCINFO create mode 100644 pkgbuilds/hyprshade/.gitignore create mode 100644 pkgbuilds/hyprshade/PKGBUILD create mode 100644 pkgbuilds/limine-mkinitcpio-hook/.SRCINFO create mode 100644 pkgbuilds/limine-mkinitcpio-hook/.gitignore create mode 100644 pkgbuilds/limine-mkinitcpio-hook/PKGBUILD create mode 100644 pkgbuilds/limine-snapper-sync/.SRCINFO create mode 100644 pkgbuilds/limine-snapper-sync/.gitignore create mode 100644 pkgbuilds/limine-snapper-sync/PKGBUILD create mode 100644 pkgbuilds/lmstudio/.SRCINFO create mode 100644 pkgbuilds/lmstudio/.nvchecker.toml create mode 100644 pkgbuilds/lmstudio/PKGBUILD create mode 100644 pkgbuilds/localsend-bin/.SRCINFO create mode 100644 pkgbuilds/localsend-bin/PKGBUILD create mode 100644 pkgbuilds/localsend/.SRCINFO create mode 100644 pkgbuilds/localsend/.gitignore create mode 100644 pkgbuilds/localsend/PKGBUILD create mode 100644 pkgbuilds/macbook12-spi-driver-dkms/.SRCINFO create mode 100644 pkgbuilds/macbook12-spi-driver-dkms/.gitignore create mode 100644 pkgbuilds/macbook12-spi-driver-dkms/PKGBUILD create mode 100644 pkgbuilds/macbook12-spi-driver-dkms/dkms.conf create mode 100644 pkgbuilds/nautilus-dropbox/.SRCINFO create mode 100644 pkgbuilds/nautilus-dropbox/PKGBUILD create mode 100644 pkgbuilds/omarchy-chromium-bin/.SRCINFO create mode 100644 pkgbuilds/omarchy-chromium-bin/PKGBUILD create mode 100644 pkgbuilds/openai-codex-bin/.SRCINFO create mode 100644 pkgbuilds/openai-codex-bin/PKGBUILD create mode 100644 pkgbuilds/openai-codex/.SRCINFO create mode 100644 pkgbuilds/openai-codex/.nvchecker.toml create mode 100644 pkgbuilds/openai-codex/PKGBUILD create mode 100644 pkgbuilds/opencode/.SRCINFO create mode 100644 pkgbuilds/pinta/.SRCINFO create mode 100644 pkgbuilds/pinta/.gitignore create mode 100644 pkgbuilds/pinta/.nvchecker.toml create mode 100644 pkgbuilds/pinta/PKGBUILD create mode 100644 pkgbuilds/python-terminaltexteffects/.SRCINFO create mode 100644 pkgbuilds/python-terminaltexteffects/.gitignore create mode 100644 pkgbuilds/python-terminaltexteffects/.nvchecker.toml create mode 100644 pkgbuilds/python-terminaltexteffects/PKGBUILD create mode 100644 pkgbuilds/spotify/.SRCINFO create mode 100644 pkgbuilds/spotify/LICENSE create mode 100644 pkgbuilds/spotify/PKGBUILD create mode 100644 pkgbuilds/spotify/keys/pgp/B420FD3777CCE3A7F0076B55C85668DF69375001.asc create mode 100644 pkgbuilds/spotify/spotify.protocol create mode 100644 pkgbuilds/spotify/spotify.sh create mode 100644 pkgbuilds/symfony-cli/.SRCINFO create mode 100644 pkgbuilds/symfony-cli/.gitignore create mode 100644 pkgbuilds/symfony-cli/LICENSE create mode 100644 pkgbuilds/symfony-cli/PKGBUILD create mode 100644 pkgbuilds/symfony-cli/README.md create mode 100755 pkgbuilds/symfony-cli/update.sh create mode 100644 pkgbuilds/ttf-ia-writer/.SRCINFO create mode 100644 pkgbuilds/ttf-ia-writer/.gitignore create mode 100644 pkgbuilds/ttf-ia-writer/PKGBUILD create mode 100644 pkgbuilds/typora/.SRCINFO create mode 100644 pkgbuilds/typora/.gitignore create mode 100644 pkgbuilds/typora/Makefile create mode 100644 pkgbuilds/typora/PKGBUILD create mode 100644 pkgbuilds/typora/typora.sh create mode 100644 pkgbuilds/tzupdate/.SRCINFO create mode 100644 pkgbuilds/tzupdate/PKGBUILD create mode 100644 pkgbuilds/ufw-docker/.SRCINFO create mode 100644 pkgbuilds/ufw-docker/.gitignore create mode 100644 pkgbuilds/ufw-docker/PKGBUILD create mode 100644 pkgbuilds/ufw-docker/ufw-docker.install create mode 100644 pkgbuilds/visual-studio-code-bin/.SRCINFO create mode 100644 pkgbuilds/visual-studio-code-bin/.gitignore create mode 100644 pkgbuilds/visual-studio-code-bin/PKGBUILD create mode 100644 pkgbuilds/visual-studio-code-bin/visual-studio-code-bin.install create mode 100644 pkgbuilds/visual-studio-code-bin/visual-studio-code-bin.sh create mode 100644 pkgbuilds/walker/.SRCINFO create mode 100644 pkgbuilds/walker/PKGBUILD create mode 100644 pkgbuilds/yay/.SRCINFO create mode 100644 pkgbuilds/yay/.gitignore create mode 100644 pkgbuilds/yay/PKGBUILD diff --git a/pkgbuilds/1password-beta/.SRCINFO b/pkgbuilds/1password-beta/.SRCINFO new file mode 100644 index 0000000..2c1cc49 --- /dev/null +++ b/pkgbuilds/1password-beta/.SRCINFO @@ -0,0 +1,22 @@ +pkgbase = 1password-beta + pkgdesc = Password manager and secure wallet + pkgver = 8.11.16_30.BETA + pkgrel = 30 + url = https://1password.com + install = 1password.install + arch = x86_64 + license = LicenseRef-1Password-Proprietary + conflicts = 1password + conflicts = 1password-beta-bin + options = !strip + source = https://downloads.1password.com/linux/tar/beta/x86_64/1password-8.11.16-30.BETA.x64.tar.gz + source = https://downloads.1password.com/linux/tar/beta/x86_64/1password-8.11.16-30.BETA.x64.tar.gz.sig + validpgpkeys = 3FEF9748469ADBE15DA7CA80AC2D62742012EA22 + sha256sums = 21f127aa3b879ec353df20e0b0eec1572f17d44e529ac19870a21586670bc0d1 + sha256sums = c04d8bf6b7059eec4279436199324547689a7cc4453e6c57a5637384d6210ba6 + +pkgname = 1password-beta + depends = hicolor-icon-theme + depends = libgtk-3.so=0 + depends = nss + depends = xdg-utils diff --git a/pkgbuilds/1password-beta/.gitlab-ci.yml b/pkgbuilds/1password-beta/.gitlab-ci.yml new file mode 100644 index 0000000..431c615 --- /dev/null +++ b/pkgbuilds/1password-beta/.gitlab-ci.yml @@ -0,0 +1,3 @@ +include: + - project: 'dev/core/1password-archlinux-aur-ci' + file: '/ci.yml' diff --git a/pkgbuilds/1password-beta/1password.install b/pkgbuilds/1password-beta/1password.install new file mode 100755 index 0000000..f04b292 --- /dev/null +++ b/pkgbuilds/1password-beta/1password.install @@ -0,0 +1,48 @@ +# Do not add your user, or any others, to this group. +GROUP_NAME="onepassword" + +app_group_exists() { + if [ $(getent group "${GROUP_NAME}") ]; then + true + else + false + fi +} + +setup_browser_helper() { + # Setup the Core App Integration helper binary with the correct permissions and group + BROWSER_SUPPORT_PATH="/opt/1Password/1Password-BrowserSupport" + + chgrp "${GROUP_NAME}" $BROWSER_SUPPORT_PATH + chmod g+s $BROWSER_SUPPORT_PATH +} + +pre_install() { + if app_group_exists; then + : # Do nothing + else + groupadd "${GROUP_NAME}" + fi +} + +pre_upgrade() { + if app_group_exists; then + : # Do nothing + else + groupadd "${GROUP_NAME}" + fi +} + +post_install() { + setup_browser_helper +} + +post_upgrade() { + setup_browser_helper +} + +post_remove() { + if app_group_exists; then + groupdel "${GROUP_NAME}" + fi +} diff --git a/pkgbuilds/1password-beta/CODEOWNERS b/pkgbuilds/1password-beta/CODEOWNERS new file mode 100644 index 0000000..3d19806 --- /dev/null +++ b/pkgbuilds/1password-beta/CODEOWNERS @@ -0,0 +1,2 @@ +.gitlab-ci.yml @people/ops-team +CODEOWNERS @people/ops-team diff --git a/pkgbuilds/1password-beta/PKGBUILD b/pkgbuilds/1password-beta/PKGBUILD new file mode 100644 index 0000000..9074c24 --- /dev/null +++ b/pkgbuilds/1password-beta/PKGBUILD @@ -0,0 +1,66 @@ +pkgname=1password-beta + +_tarver=8.11.16-30.BETA +_tar="1password-${_tarver}.x64.tar.gz" +pkgver=${_tarver//-/_} +pkgrel=30 +conflicts=('1password' '1password-beta-bin') +pkgdesc="Password manager and secure wallet" +arch=('x86_64') +url='https://1password.com' +license=('LicenseRef-1Password-Proprietary') +options=(!strip) +install="1password.install" +source=(https://downloads.1password.com/linux/tar/beta/${CARCH}/${_tar}{,.sig}) +sha256sums=('21f127aa3b879ec353df20e0b0eec1572f17d44e529ac19870a21586670bc0d1' + 'c04d8bf6b7059eec4279436199324547689a7cc4453e6c57a5637384d6210ba6' +) +validpgpkeys=('3FEF9748469ADBE15DA7CA80AC2D62742012EA22') + +package() { + depends=('hicolor-icon-theme' 'libgtk-3.so=0' 'nss' 'xdg-utils') + + # Go to source directory + cd "1password-${_tarver}.x64" + + # Install icons + resolutions=(32x32 64x64 256x256 512x512) + for resolution in "${resolutions[@]}" + do + install -Dm0644 "resources/icons/hicolor/${resolution}/apps/1password.png" \ + "${pkgdir}/usr/share/icons/hicolor/${resolution}/apps/1password.png" + done + # Install desktop file + install -Dm0644 resources/1password.desktop -t "${pkgdir}"/usr/share/applications/ + + # Fill in policy kit file with a list of (the first 10) human users of the system. + export POLICY_OWNERS + POLICY_OWNERS="$(cut -d: -f1,3 /etc/passwd | grep -E ':[0-9]{4}$' | cut -d: -f1 | head -n 10 | sed 's/^/unix-user:/' | tr '\n' ' ')" + eval "cat < ./com.1password.1Password.policy + + # Install system unlock PolKit policy file + install -Dm0644 com.1password.1Password.policy -t "${pkgdir}"/usr/share/polkit-1/actions/ + + # Install examples + install -Dm0644 resources/custom_allowed_browsers -t "${pkgdir}"/usr/share/doc/1password/examples/ + + # Move package contents to /opt/1Password + cd "${srcdir}" + install -dm0755 "${pkgdir}"/opt + mv "1password-${_tarver}.x64" "${pkgdir}/opt/1Password" + + # Cleanup un-needed files + rm "${pkgdir}"/opt/1Password/com.1password.1Password.policy "${pkgdir}"/opt/1Password/com.1password.1Password.policy.tpl "${pkgdir}"/opt/1Password/install_biometrics_policy.sh + rm -r "${pkgdir}"/opt/1Password/resources/icons/ + rm "${pkgdir}"/opt/1Password/resources/1password.desktop "${pkgdir}"/opt/1Password/resources/custom_allowed_browsers + + # Symlink /usr/bin executable to opt + install -dm0755 "${pkgdir}"/usr/bin + ln -s /opt/1Password/1password "${pkgdir}"/usr/bin/1password + + # chrome-sandbox requires the setuid bit to be specifically set. + # See https://github.com/electron/electron/issues/17972 + chmod 4755 "${pkgdir}"/opt/1Password/chrome-sandbox +} diff --git a/pkgbuilds/1password-beta/aur.env b/pkgbuilds/1password-beta/aur.env new file mode 100644 index 0000000..dfde21d --- /dev/null +++ b/pkgbuilds/1password-beta/aur.env @@ -0,0 +1,2 @@ +SSH_PRIVATE_KEY_B64 = "op://cgl-build-release-archlinux-aur-prod/AUR_SSH_PRIVATE_KEY_B64/credential" +SSH_PASSPHRASE_B64 = "op://cgl-build-release-archlinux-aur-prod/AUR_SSH_PASSPHRASE_B64/credential" diff --git a/pkgbuilds/1password-cli/.SRCINFO b/pkgbuilds/1password-cli/.SRCINFO new file mode 100644 index 0000000..2f87fcb --- /dev/null +++ b/pkgbuilds/1password-cli/.SRCINFO @@ -0,0 +1,27 @@ +pkgbase = 1password-cli + pkgdesc = 1Password command line tool + pkgver = 2.32.0 + pkgrel = 2 + url = https://app-updates.agilebits.com/product_history/CLI2 + install = 1password-cli.install + arch = x86_64 + arch = i686 + arch = arm + arch = armv6h + arch = aarch64 + license = custom + options = !strip + options = !emptydirs + validpgpkeys = 3FEF9748469ADBE15DA7CA80AC2D62742012EA22 + source_x86_64 = https://cache.agilebits.com/dist/1P/op2/pkg/v2.32.0/op_linux_amd64_v2.32.0.zip + sha256sums_x86_64 = 68e3141b11ad38ba5004fb40d71371b710c0bbf94733f0df9180768336f90097 + source_i686 = https://cache.agilebits.com/dist/1P/op2/pkg/v2.32.0/op_linux_386_v2.32.0.zip + sha256sums_i686 = f9a7649d94335e1a5b574822a7040ab9faa58e3c185d85dbf2a88068d5e06829 + source_arm = https://cache.agilebits.com/dist/1P/op2/pkg/v2.32.0/op_linux_arm_v2.32.0.zip + sha256sums_arm = 463227b46246fc764c48ec918c2c1c04ffb354d0eeb00a536c1d9f1549a0347c + source_armv6h = https://cache.agilebits.com/dist/1P/op2/pkg/v2.32.0/op_linux_arm_v2.32.0.zip + sha256sums_armv6h = 463227b46246fc764c48ec918c2c1c04ffb354d0eeb00a536c1d9f1549a0347c + source_aarch64 = https://cache.agilebits.com/dist/1P/op2/pkg/v2.32.0/op_linux_arm64_v2.32.0.zip + sha256sums_aarch64 = 6f3d571aabe7701e21ad4b0f9d30207c3dcabdb2f9c261e3651106dde0ee8946 + +pkgname = 1password-cli diff --git a/pkgbuilds/1password-cli/.gitignore b/pkgbuilds/1password-cli/.gitignore new file mode 100644 index 0000000..a1bfe90 --- /dev/null +++ b/pkgbuilds/1password-cli/.gitignore @@ -0,0 +1,10 @@ +# makepkg directories +pkg/ +src/ + +# built packages +*.tar.xz +*.tar.zst + +# source files +*.zip \ No newline at end of file diff --git a/pkgbuilds/1password-cli/1password-cli.install b/pkgbuilds/1password-cli/1password-cli.install new file mode 100644 index 0000000..ab729e8 --- /dev/null +++ b/pkgbuilds/1password-cli/1password-cli.install @@ -0,0 +1,13 @@ +post_install() { + if [ $(getent group onepassword-cli) ]; then + : # no-op + else + groupadd onepassword-cli + fi + chgrp onepassword-cli /usr/bin/op + chmod g+s /usr/bin/op +} + +post_upgrade() { + post_install +} diff --git a/pkgbuilds/1password-cli/PKGBUILD b/pkgbuilds/1password-cli/PKGBUILD new file mode 100644 index 0000000..b8058c8 --- /dev/null +++ b/pkgbuilds/1password-cli/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: slurpee +# Contributors: Felix Seidel, Claudia Pellegrino, Liu Yuxuan + +pkgname=1password-cli +pkgver=2.32.0 +pkgrel=2 +pkgdesc="1Password command line tool" +arch=('x86_64' 'i686' 'arm' 'armv6h' 'aarch64') +url="https://app-updates.agilebits.com/product_history/CLI2" +license=('custom') +options=('!strip' '!emptydirs') +install=${pkgname}.install +validpgpkeys=('3FEF9748469ADBE15DA7CA80AC2D62742012EA22') + +source_x86_64=("https://cache.agilebits.com/dist/1P/op2/pkg/v${pkgver}/op_linux_amd64_v${pkgver}.zip") +source_i686=("https://cache.agilebits.com/dist/1P/op2/pkg/v${pkgver}/op_linux_386_v${pkgver}.zip") +source_arm=("https://cache.agilebits.com/dist/1P/op2/pkg/v${pkgver}/op_linux_arm_v${pkgver}.zip") +source_armv6h=("${source_arm}") +source_aarch64=("https://cache.agilebits.com/dist/1P/op2/pkg/v${pkgver}/op_linux_arm64_v${pkgver}.zip") + +sha256sums_x86_64=('68e3141b11ad38ba5004fb40d71371b710c0bbf94733f0df9180768336f90097') +sha256sums_i686=('f9a7649d94335e1a5b574822a7040ab9faa58e3c185d85dbf2a88068d5e06829') +sha256sums_arm=('463227b46246fc764c48ec918c2c1c04ffb354d0eeb00a536c1d9f1549a0347c') +sha256sums_armv6h=("${sha256sums_arm}") +sha256sums_aarch64=('6f3d571aabe7701e21ad4b0f9d30207c3dcabdb2f9c261e3651106dde0ee8946') + +check() { + if (( ! SKIPPGPCHECK )); then + gpg --verify ${srcdir}/op.sig ${srcdir}/op + fi +} + +package() { + install -Dm755 op "${pkgdir}"/usr/bin/op +} + +# vim:set ts=2 sw=2 et: diff --git a/pkgbuilds/1password-cli/package-update.sh b/pkgbuilds/1password-cli/package-update.sh new file mode 100644 index 0000000..6daaafd --- /dev/null +++ b/pkgbuilds/1password-cli/package-update.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Usage: +# PKGVER=x.x.x ./package-update.sh + +arch=( 'x86_64' 'i686' 'arm' 'aarch64' ) +_arch=( 'amd64' '386' 'arm' 'arm64' ) + +sed -i "s/pkgver=.*/pkgver=${PKGVER}/" PKGBUILD + +for a in "${!arch[@]}"; do + wget -q https://cache.agilebits.com/dist/1P/op2/pkg/v"${PKGVER}"/op_linux_"${_arch[a]}"_v"${PKGVER}".zip + unzip -q op_linux_"${_arch[a]}"_v"${PKGVER}".zip + if gpgv -q op.sig op > /dev/null 2>&1; then + sha256=$(sha256sum op_linux_"${_arch[a]}"_v"${PKGVER}".zip | awk '{print $1}') + sed -i "s/sha256sums_${arch[a]}=.*/sha256sums_${arch[a]}=\('${sha256}'\)/" PKGBUILD + else + echo "Bad Signature for op_linux_${arch[a]}_v${PKGVER}.zip." + fi + rm op* +done diff --git a/pkgbuilds/bun-bin/.SRCINFO b/pkgbuilds/bun-bin/.SRCINFO new file mode 100644 index 0000000..4d6eca0 --- /dev/null +++ b/pkgbuilds/bun-bin/.SRCINFO @@ -0,0 +1,20 @@ +pkgbase = bun-bin + pkgdesc = All-in-one JavaScript runtime built for speed, with bundler, transpiler, test runner, and package manager. Includes bunx, shell completions and support for baseline CPUs + pkgver = 1.3.1 + pkgrel = 1 + url = https://github.com/oven-sh/bun + arch = x86_64 + arch = aarch64 + license = MIT + provides = bun + conflicts = bun + source_x86_64 = bun-x64-1.0.36.zip::https://github.com/oven-sh/bun/releases/download/bun-v1.0.36/bun-linux-x64.zip + source_x86_64 = LICENSE + sha256sums_x86_64 = 400824c82bfcc0854365bcada11cf53d7384ecb1e2c3da0e2c0a2c6a527d5629 + sha256sums_x86_64 = 9b296bcc20090b5ea079dc1bca15913a32246121169bcf54cbdb7384d6f5b32b + source_aarch64 = bun-aarch64-1.0.36.zip::https://github.com/oven-sh/bun/releases/download/bun-v1.0.36/bun-linux-aarch64.zip + source_aarch64 = LICENSE + sha256sums_aarch64 = 65666a18439e891e5751b666103fe591a8519f11b66ec4bd8654c5515d4fff8a + sha256sums_aarch64 = 9b296bcc20090b5ea079dc1bca15913a32246121169bcf54cbdb7384d6f5b32b + +pkgname = bun-bin diff --git a/pkgbuilds/bun-bin/LICENSE b/pkgbuilds/bun-bin/LICENSE new file mode 100644 index 0000000..c8ff7f3 --- /dev/null +++ b/pkgbuilds/bun-bin/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Jarred Sumner + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pkgbuilds/bun-bin/PKGBUILD b/pkgbuilds/bun-bin/PKGBUILD new file mode 100644 index 0000000..411170f --- /dev/null +++ b/pkgbuilds/bun-bin/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Noel Jacob +# Contributor: thdxr (original PKGBUILD) +# Contributor: 37h4n (aarch64 support added by Ethan Reece ) +# Contributor: sh!zeeg (shizeeque@gmail.com) support for non-avx2 CPUs, shell completions. +pkgname=bun-bin +pkgver=1.3.1 +pkgrel=1 +pkgdesc="All-in-one JavaScript runtime built for speed, with bundler, transpiler, test runner, and package manager. Includes bunx, shell completions and support for baseline CPUs" +arch=('x86_64' 'aarch64') +url="https://github.com/oven-sh/bun" +license=('MIT') +provides=('bun') +conflicts=('bun') +sha256sums_x86_64=('400824c82bfcc0854365bcada11cf53d7384ecb1e2c3da0e2c0a2c6a527d5629' + '9b296bcc20090b5ea079dc1bca15913a32246121169bcf54cbdb7384d6f5b32b' +) +sha256sums_aarch64=('65666a18439e891e5751b666103fe591a8519f11b66ec4bd8654c5515d4fff8a' + '9b296bcc20090b5ea079dc1bca15913a32246121169bcf54cbdb7384d6f5b32b' +) +_baseline='' +_baseline_sha256sums='a0f95a79274c06c252cdaabf1d0e878e15d0d30679bf6752e0326ec141302323' +if [[ $CARCH == 'x86_64' && $(cat /proc/cpuinfo | grep avx2) = '' ]]; then + _baseline='-baseline' + sha256sums_x86_64=${_baseline_sha256sums} +fi +source_x86_64=( + "bun-x64-${pkgver}.zip::https://github.com/oven-sh/bun/releases/download/bun-v${pkgver}/bun-linux-x64${_baseline}.zip" + "LICENSE" +) +source_aarch64=( + "bun-aarch64-${pkgver}.zip::https://github.com/oven-sh/bun/releases/download/bun-v${pkgver}/bun-linux-aarch64.zip" + "LICENSE" +) +build() { + if [ "${CARCH}" == "aarch64" ]; then + cd "bun-linux-aarch64" + else + cd "bun-linux-x64${_baseline}" + fi + install -dm755 "completions" + SHELL=zsh "./bun" completions >"completions/bun.zsh" + SHELL=bash "./bun" completions >"completions/bun.bash" + SHELL=fish "./bun" completions >"completions/bun.fish" +} +package() { + if [ "${CARCH}" == "aarch64" ]; then + cd "bun-linux-aarch64" + install -Dm755 "./bun" "${pkgdir}/usr/bin/bun" + else + cd "bun-linux-x64${_baseline}" + install -Dm755 "./bun" "${pkgdir}/usr/bin/bun" + fi + # simlink as bunx as in the official install.sh + ln -s bun "${pkgdir}/usr/bin/bunx" + + install -Dm644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + + install -Dm644 completions/bun.zsh "${pkgdir}/usr/share/zsh/site-functions/_bun" + install -Dm644 completions/bun.bash "${pkgdir}/usr/share/bash-completion/completions/bun" + install -Dm644 completions/bun.fish "${pkgdir}/usr/share/fish/vendor_completions.d/bun.fish" +} diff --git a/pkgbuilds/claude-code/.SRCINFO b/pkgbuilds/claude-code/.SRCINFO new file mode 100644 index 0000000..236d91c --- /dev/null +++ b/pkgbuilds/claude-code/.SRCINFO @@ -0,0 +1,18 @@ +pkgbase = claude-code + pkgdesc = An agentic coding tool that lives in your terminal + pkgver = 2.0.27 + pkgrel = 1 + url = https://github.com/anthropics/claude-code + arch = any + license = LicenseRef-claude-code + makedepends = npm + depends = nodejs + optdepends = git: allow Claude to use git + optdepends = github-cli: interact with GitHub + optdepends = glab: interact with GitLab + optdepends = ripgrep: enhanced file search + noextract = claude-code-2.0.27.tgz + source = https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-2.0.27.tgz + b2sums = 37bd5fb250475d2095fc06dbd579b23853705f305a697949b533b979f2163717e5d962f31711b16c26785ccfaf778f0fe934cba9c839b5430ce28dfd7a1837cc + +pkgname = claude-code diff --git a/pkgbuilds/claude-code/.nvchecker.toml b/pkgbuilds/claude-code/.nvchecker.toml new file mode 100644 index 0000000..d70195c --- /dev/null +++ b/pkgbuilds/claude-code/.nvchecker.toml @@ -0,0 +1,3 @@ +[claude-code] +source = "npm" +npm = "@anthropic-ai/claude-code" diff --git a/pkgbuilds/claude-code/PKGBUILD b/pkgbuilds/claude-code/PKGBUILD new file mode 100644 index 0000000..c8fdfc3 --- /dev/null +++ b/pkgbuilds/claude-code/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Christopher Cooper +# Maintainer: Jérôme Poulin +pkgname=claude-code +_full_pkgname="@anthropic-ai/${pkgname}" +pkgver=2.0.27 +pkgrel=1 +pkgdesc="An agentic coding tool that lives in your terminal" +arch=('any') +url="https://github.com/anthropics/claude-code" +license=('LicenseRef-claude-code') +depends=('nodejs') +makedepends=('npm') +optdepends=( + 'git: allow Claude to use git' + 'github-cli: interact with GitHub' + 'glab: interact with GitLab' + 'ripgrep: enhanced file search' +) +source=("https://registry.npmjs.org/$_full_pkgname/-/$pkgname-$pkgver.tgz") +b2sums=('37bd5fb250475d2095fc06dbd579b23853705f305a697949b533b979f2163717e5d962f31711b16c26785ccfaf778f0fe934cba9c839b5430ce28dfd7a1837cc') +noextract=("${pkgname}-${pkgver}.tgz") + +package() { + npm install -g --prefix "${pkgdir}/usr" "${srcdir}/${pkgname}-${pkgver}.tgz" + + # Install from location in pkgdir since we have noextract. + install -Dm644 "${pkgdir}/usr/lib/node_modules/@anthropic-ai/claude-code/LICENSE.md" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/pkgbuilds/crush-bin/.SRCINFO b/pkgbuilds/crush-bin/.SRCINFO new file mode 100644 index 0000000..97d4f54 --- /dev/null +++ b/pkgbuilds/crush-bin/.SRCINFO @@ -0,0 +1,22 @@ +pkgbase = crush-bin + pkgdesc = A powerful terminal-based AI assistant for developers, providing intelligent coding assistance directly in your terminal. + pkgver = 0.12.3 + pkgrel = 1 + url = https://charm.sh/crush + license = FSL-1.1-MIT + conflicts = crush + provides = crush + arch = aarch64 + source_aarch64 = https://github.com/charmbracelet/crush/releases/download/v0.12.3/crush_0.12.3_Linux_arm64.tar.gz + sha256sums_aarch64 = 101af55ad450d8e190efec9a0e0b62502fc2735e83de6cf5e0170b05170fd1d7 + arch = armv7h + source_armv7h = https://github.com/charmbracelet/crush/releases/download/v0.12.3/crush_0.12.3_Linux_armv7.tar.gz + sha256sums_armv7h = 82def85b15b7db02f2a863f185bbaebd8c44b4d10e9f2dad6d834f00a143cf39 + arch = i686 + source_i686 = https://github.com/charmbracelet/crush/releases/download/v0.12.3/crush_0.12.3_Linux_i386.tar.gz + sha256sums_i686 = 92ffaf8d976226cc753850200add4b04bdd94ba9f8e8f9496796bd6b4b902014 + arch = x86_64 + source_x86_64 = https://github.com/charmbracelet/crush/releases/download/v0.12.3/crush_0.12.3_Linux_x86_64.tar.gz + sha256sums_x86_64 = d492aa4957ca3a2735665d17bfa42ec42e07cc56fa00c6d46e4c88b319862ae0 + +pkgname = crush-bin diff --git a/pkgbuilds/crush-bin/PKGBUILD b/pkgbuilds/crush-bin/PKGBUILD new file mode 100644 index 0000000..bb580ae --- /dev/null +++ b/pkgbuilds/crush-bin/PKGBUILD @@ -0,0 +1,46 @@ +# This file was generated by GoReleaser. DO NOT EDIT. +# Maintainer: kujtimiihoxha +# Maintainer: caarlos0 + +pkgname='crush-bin' +pkgver=0.12.3 +pkgrel=1 +pkgdesc='A powerful terminal-based AI assistant for developers, providing intelligent coding assistance directly in your terminal.' +url='https://charm.sh/crush' +arch=('aarch64' 'armv7h' 'i686' 'x86_64') +license=('FSL-1.1-MIT') +provides=('crush') +conflicts=('crush') + +source_aarch64=("${pkgname}_${pkgver}_aarch64.tar.gz::https://github.com/charmbracelet/crush/releases/download/v0.12.3/crush_0.12.3_Linux_arm64.tar.gz") +sha256sums_aarch64=('101af55ad450d8e190efec9a0e0b62502fc2735e83de6cf5e0170b05170fd1d7') + +source_armv7h=("${pkgname}_${pkgver}_armv7h.tar.gz::https://github.com/charmbracelet/crush/releases/download/v0.12.3/crush_0.12.3_Linux_armv7.tar.gz") +sha256sums_armv7h=('82def85b15b7db02f2a863f185bbaebd8c44b4d10e9f2dad6d834f00a143cf39') + +source_i686=("${pkgname}_${pkgver}_i686.tar.gz::https://github.com/charmbracelet/crush/releases/download/v0.12.3/crush_0.12.3_Linux_i386.tar.gz") +sha256sums_i686=('92ffaf8d976226cc753850200add4b04bdd94ba9f8e8f9496796bd6b4b902014') + +source_x86_64=("${pkgname}_${pkgver}_x86_64.tar.gz::https://github.com/charmbracelet/crush/releases/download/v0.12.3/crush_0.12.3_Linux_x86_64.tar.gz") +sha256sums_x86_64=('d492aa4957ca3a2735665d17bfa42ec42e07cc56fa00c6d46e4c88b319862ae0') + +package() { + cd "${srcdir}/crush_${pkgver}_Linux_${CARCH}" + # bin + install -Dm755 "./crush" "${pkgdir}/usr/bin/crush" + # license + mkdir -p "${pkgdir}/usr/share/licenses/crush/" + install -Dm644 ./LICENSE* "${pkgdir}/usr/share/licenses/crush/" + # completions + mkdir -p "${pkgdir}/usr/share/bash-completion/completions/" + mkdir -p "${pkgdir}/usr/share/zsh/site-functions/" + mkdir -p "${pkgdir}/usr/share/fish/vendor_completions.d/" + install -Dm644 "./completions/crush.bash" "${pkgdir}/usr/share/bash-completion/completions/crush" + install -Dm644 "./completions/crush.zsh" "${pkgdir}/usr/share/zsh/site-functions/_crush" + install -Dm644 "./completions/crush.fish" "${pkgdir}/usr/share/fish/vendor_completions.d/crush.fish" + # man pages + install -Dm644 "./manpages/crush.1.gz" "${pkgdir}/usr/share/man/man1/crush.1.gz" + # readme + mkdir -pv "${pkgdir}/usr/share/doc/crush/" + install -Dm644 README* "${pkgdir}/usr/share/doc/crush/" +} diff --git a/pkgbuilds/cursor-bin/.SRCINFO b/pkgbuilds/cursor-bin/.SRCINFO new file mode 100644 index 0000000..da08ed3 --- /dev/null +++ b/pkgbuilds/cursor-bin/.SRCINFO @@ -0,0 +1,21 @@ +pkgbase = cursor-bin + pkgdesc = AI-first coding environment + pkgver = 1.7.54 + pkgrel = 1 + url = https://www.cursor.com + arch = x86_64 + license = LicenseRef-Cursor_EULA + depends = xdg-utils + depends = electron34 + depends = gcc-libs + depends = hicolor-icon-theme + depends = libxkbfile + options = !strip + source = https://downloads.cursor.com/production/5c17eb2968a37f66bc6662f48d6356a100b67be8/linux/x64/deb/amd64/deb/cursor_1.7.54_amd64.deb + source = https://gitlab.archlinux.org/archlinux/packaging/packages/code/-/raw/main/code.sh + source = rg.sh + sha512sums = 235249d88fc85ad58f4951a0fbaab13e9aa35a097c4900b5944423f966e837f9ecc2cbcadc88ea3033b6027d738dc3ad9cadcc3390d0d9f7382ea0a24d02b1e9 + sha512sums = 937299c6cb6be2f8d25f7dbc95cf77423875c5f8353b8bd6cd7cc8e5603cbf8405b14dbf8bd615db2e3b36ed680fc8e1909410815f7f8587b7267a699e00ab37 + sha512sums = SKIP + +pkgname = cursor-bin diff --git a/pkgbuilds/cursor-bin/.gitignore b/pkgbuilds/cursor-bin/.gitignore new file mode 100644 index 0000000..5aae9a1 --- /dev/null +++ b/pkgbuilds/cursor-bin/.gitignore @@ -0,0 +1,20 @@ + +cursor-0.37.1.AppImage + +cursor-bin-0.37.1-1-x86_64.pkg.tar.zst + +pkg/cursor-bin/.BUILDINFO + +pkg/cursor-bin/.MTREE + +pkg/cursor-bin/.PKGINFO + +pkg/cursor-bin/opt/cursor-bin/cursor-bin.AppImage + +pkg/cursor-bin/usr/bin/cursor + +pkg/cursor-bin/usr/share/applications/cursor.desktop + +pkg/cursor-bin/usr/share/icons/hicolor/512x512/apps/cursor.png + +src/cursor.png diff --git a/pkgbuilds/cursor-bin/PKGBUILD b/pkgbuilds/cursor-bin/PKGBUILD new file mode 100644 index 0000000..9b83f77 --- /dev/null +++ b/pkgbuilds/cursor-bin/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Gunther Schulz + +pkgname=cursor-bin +pkgver=1.7.54 +pkgrel=1 +pkgdesc='AI-first coding environment' +arch=('x86_64') +url="https://www.cursor.com" +license=('LicenseRef-Cursor_EULA') +_electron=electron34 +depends=('xdg-utils' $_electron + 'gcc-libs' 'hicolor-icon-theme' 'libxkbfile') +options=(!strip) # Don't break ext of VSCode +_commit=5c17eb2968a37f66bc6662f48d6356a100b67be8 # sed'ded at GitHub WF +source=("https://downloads.cursor.com/production/5c17eb2968a37f66bc6662f48d6356a100b67be8/linux/x64/deb/amd64/deb/cursor_1.7.54_amd64.deb" +https://gitlab.archlinux.org/archlinux/packaging/packages/code/-/raw/main/code.sh +rg.sh) +sha512sums=('235249d88fc85ad58f4951a0fbaab13e9aa35a097c4900b5944423f966e837f9ecc2cbcadc88ea3033b6027d738dc3ad9cadcc3390d0d9f7382ea0a24d02b1e9' + '937299c6cb6be2f8d25f7dbc95cf77423875c5f8353b8bd6cd7cc8e5603cbf8405b14dbf8bd615db2e3b36ed680fc8e1909410815f7f8587b7267a699e00ab37' 'SKIP') + +_app=usr/share/cursor/resources/app +package() { + # Exclude electron + tar -xf data.tar.xz -C "$pkgdir" --exclude 'usr/share/cursor/[^r]*' --exclude 'usr/share/cursor/*.pak' + cd "$pkgdir" + mv usr/share/zsh/{vendor-completions,site-functions} + install -Dm755 "${srcdir}/rg.sh" ${_app}/node_modules/@vscode/ripgrep/bin/rg + ln -sf /usr/bin/xdg-open ${_app}/node_modules/open/xdg-open + sed -e "s|code-flags|cursor-flags|" -e "s|/usr/lib/code|/${_app}|" -e "s|/usr/lib/code/code.mjs|--app=/${_app}|" \ + -e "s|name=electron|name=${_electron}|" "${srcdir}"/code.sh | install -Dm755 /dev/stdin "${pkgdir}"/usr/share/cursor/cursor + install -d "$pkgdir"/usr/bin + ln -sf /usr/share/cursor/cursor "$pkgdir"/usr/bin/cursor +} diff --git a/pkgbuilds/cursor-bin/rg.sh b/pkgbuilds/cursor-bin/rg.sh new file mode 100755 index 0000000..1d1f40c --- /dev/null +++ b/pkgbuilds/cursor-bin/rg.sh @@ -0,0 +1,2 @@ +#!/bin/bash +exec /usr/bin/rg "${@/--cursor-ignore/--ignore-file}" diff --git a/pkgbuilds/dropbox-cli/.SRCINFO b/pkgbuilds/dropbox-cli/.SRCINFO new file mode 100644 index 0000000..1fe8351 --- /dev/null +++ b/pkgbuilds/dropbox-cli/.SRCINFO @@ -0,0 +1,18 @@ +pkgbase = dropbox-cli + pkgdesc = Command line interface for Dropbox + pkgver = 2024.04.17 + pkgrel = 2 + url = https://www.dropbox.com + arch = any + license = GPL-3.0-or-later + makedepends = gdk-pixbuf2 + depends = dropbox + depends = python-gobject + optdepends = gtk3: Dropbox update GUI + optdepends = python-gpgme: verify binary signature + source = https://linux.dropbox.com/packages/nautilus-dropbox-2024.04.17.tar.bz2 + source = dropboxd-fallback.patch + sha256sums = a6a098cf16aa4747f40816ac793d59e37e8ae3b7080d0b30611d6c2b8663f2c1 + sha256sums = 711ed63c6dfccfd05c6e9abaa291be9ac3c3909e84f788f568cb44dee2d48229 + +pkgname = dropbox-cli diff --git a/pkgbuilds/dropbox-cli/.gitignore b/pkgbuilds/dropbox-cli/.gitignore new file mode 100644 index 0000000..ed7e89f --- /dev/null +++ b/pkgbuilds/dropbox-cli/.gitignore @@ -0,0 +1,7 @@ +dropbox-cli-*.pkg.tar.zst +dropbox-cli-*.pkg.tar.xz +dropbox-cli-*.py +dropbox-cli-*.log +PKGBUILD-namcap.log +pkg/ +src/ diff --git a/pkgbuilds/dropbox-cli/PKGBUILD b/pkgbuilds/dropbox-cli/PKGBUILD new file mode 100644 index 0000000..7cc84b9 --- /dev/null +++ b/pkgbuilds/dropbox-cli/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Muflone http://www.muflone.com/contacts/english/ +# Contributor: Fredy García +# Contributor: Joel Teichroeb +# Contributor: Matthias Maennich < arch .at. maennich.net > +# Contributor: bruce < b_a_g99 .at. hotmail.com > +# Contributor: carstene1ns + +pkgname=dropbox-cli +pkgver=2024.04.17 +pkgrel=2 +pkgdesc="Command line interface for Dropbox" +arch=("any") +url="https://www.dropbox.com" +license=("GPL-3.0-or-later") +makedepends=("gdk-pixbuf2") +depends=("dropbox" "python-gobject") +optdepends=("gtk3: Dropbox update GUI" + "python-gpgme: verify binary signature") +source=("https://linux.dropbox.com/packages/nautilus-dropbox-${pkgver}.tar.bz2" + "dropboxd-fallback.patch") +sha256sums=('a6a098cf16aa4747f40816ac793d59e37e8ae3b7080d0b30611d6c2b8663f2c1' + '711ed63c6dfccfd05c6e9abaa291be9ac3c3909e84f788f568cb44dee2d48229') + +prepare() { + cd "nautilus-dropbox-${pkgver}" + # Patch to point to /opt/dropbox/dropboxd in case of local user does not exist + patch -Np1 -i "${srcdir}/dropboxd-fallback.patch" +} + +build() { + cd "nautilus-dropbox-${pkgver}" + python3 build_dropbox.py "${pkgver}" "/usr/share/applications" < "dropbox.in" > "${pkgname}" +} + +package() { + cd "nautilus-dropbox-${pkgver}" + install -m 755 -D "${pkgname}" "${pkgdir}/usr/bin/${pkgname}" +} + diff --git a/pkgbuilds/dropbox-cli/dropboxd-fallback.patch b/pkgbuilds/dropbox-cli/dropboxd-fallback.patch new file mode 100644 index 0000000..f64d711 --- /dev/null +++ b/pkgbuilds/dropbox-cli/dropboxd-fallback.patch @@ -0,0 +1,17 @@ +diff --git a/dropbox.in b/dropbox.in +index 36a8604..2748194 100644 +--- a/dropbox.in ++++ b/dropbox.in +@@ -74,6 +74,12 @@ DROPBOX_DIST_PATH = "%s/.dropbox-dist" % PARENT_DIR + DROPBOXD_PATH = os.path.join(DROPBOX_DIST_PATH, "dropboxd") + DESKTOP_FILE = "/usr/share/applications/dropbox.desktop" + ++# DROPBOX_DIST_PATH and DROPBOXD_PATH are reassigned to /opt/dropbox and /opt/dropbox/dropboxd if path does not exist ++DROPBOX_INSTALL_PATH = "/opt/dropbox" ++if not os.path.exists(DROPBOXD_PATH) and os.path.exists(os.path.join(DROPBOX_INSTALL_PATH, "dropboxd")): ++ DROPBOX_DIST_PATH = DROPBOX_INSTALL_PATH ++ DROPBOXD_PATH = os.path.join(DROPBOX_DIST_PATH, "dropboxd") ++ + enc = locale.getpreferredencoding() + + # Available from https://linux.dropbox.com/fedora/rpm-public-key.asc diff --git a/pkgbuilds/dropbox/.SRCINFO b/pkgbuilds/dropbox/.SRCINFO new file mode 100644 index 0000000..32da983 --- /dev/null +++ b/pkgbuilds/dropbox/.SRCINFO @@ -0,0 +1,42 @@ +pkgbase = dropbox + pkgdesc = A free service that lets you bring your photos, docs, and videos anywhere and share them easily. + pkgver = 235.4.5905 + pkgrel = 1 + url = https://www.dropbox.com + arch = i686 + arch = x86_64 + license = custom + makedepends = gendesk + depends = libsm + depends = libxslt + depends = libxmu + depends = libxdamage + depends = libxrender + depends = libxxf86vm + depends = libxcomposite + depends = fontconfig + depends = dbus + optdepends = ufw-extras: ufw rules for dropbox + optdepends = perl-file-mimeinfo: opening dropbox folder on some desktop environments + optdepends = xdg-utils: for "Launch Dropbox Website" and file manager integration + optdepends = libappindicator-gtk3: make tray icons themed under some desktop environments like KDE plasma + options = !strip + source = DropboxGlyph_Blue.svg + source = terms.txt + source = dropbox.service + source = dropbox@.service + validpgpkeys = 1C61A2656FB57B7E4DE0F4C1FC918B335044912E + sha256sums = 9ba76205ec5838db85d822f23cfd7e2112fd2757e8031d8374709f102143c548 + sha256sums = 46364021c9d63e228de58584a09eaf5bd47a5d2080586eae98935357faebfc5f + sha256sums = 6c67a9c8c95c08fafafd2f1d828074b13e3347b05d2e4f4bf4e62746115d7477 + sha256sums = 98581e65a91ae1f19ed42edcdaaa52e102298b5da0d71b50089393d364474d3d + source_i686 = https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86-205.4.5765.tar.gz + source_i686 = https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86-205.4.5765.tar.gz.asc + sha256sums_i686 = b603528915347e734b56162dabf1ce3dfbfef60bc2546f0e9c9388193b2ae3f1 + sha256sums_i686 = SKIP + source_x86_64 = https://edge.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86_64-235.4.5905.tar.gz + source_x86_64 = https://edge.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86_64-235.4.5905.tar.gz.asc + sha256sums_x86_64 = 88efaf3bfb75d3cbc8fea62c6b78a5052f3e826d3b5ef65439995d4f35431a67 + sha256sums_x86_64 = SKIP + +pkgname = dropbox diff --git a/pkgbuilds/dropbox/.nvchecker.toml b/pkgbuilds/dropbox/.nvchecker.toml new file mode 100644 index 0000000..bf33932 --- /dev/null +++ b/pkgbuilds/dropbox/.nvchecker.toml @@ -0,0 +1,5 @@ +[dropbox] +source = "httpheader" +url = "https://www.dropbox.com/download?plat=lnx.x86_64" +header = "Location" +regex = "\\d+\\.4\\.\\d+(?=\\.tar\\.gz)" diff --git a/pkgbuilds/dropbox/DropboxGlyph_Blue.svg b/pkgbuilds/dropbox/DropboxGlyph_Blue.svg new file mode 100644 index 0000000..8c46b7f --- /dev/null +++ b/pkgbuilds/dropbox/DropboxGlyph_Blue.svg @@ -0,0 +1 @@ +DropboxGlyph \ No newline at end of file diff --git a/pkgbuilds/dropbox/PKGBUILD b/pkgbuilds/dropbox/PKGBUILD new file mode 100644 index 0000000..289fa70 --- /dev/null +++ b/pkgbuilds/dropbox/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Massimiliano Torromeo +# Contributor: Chih-Hsuan Yen +# Contributor: Tom < tomgparchaur at gmail dot com > +# Contributor: David Manouchehri + +pkgname=dropbox +pkgver=235.4.5905 +pkgrel=1 +pkgdesc="A free service that lets you bring your photos, docs, and videos anywhere and share them easily." +arch=("i686" "x86_64") +url="https://www.dropbox.com" +license=(custom) +depends=("libsm" "libxslt" "libxmu" "libxdamage" "libxrender" "libxxf86vm" "libxcomposite" "fontconfig" "dbus") +makedepends=("gendesk") +optdepends=( + 'ufw-extras: ufw rules for dropbox' + 'perl-file-mimeinfo: opening dropbox folder on some desktop environments' + 'xdg-utils: for "Launch Dropbox Website" and file manager integration' + 'libappindicator-gtk3: make tray icons themed under some desktop environments like KDE plasma' +) +options=('!strip') + +# https://www.dropbox.com/scl/fo/0eu2dsn07fy5k0gt5fy74/AABbXqKHbY_mobVJhqgfOXYja/Glyph/Dropbox/SVG/DropboxGlyph_Blue.svg +source=("DropboxGlyph_Blue.svg" + "terms.txt" + "dropbox.service" + "dropbox@.service") +source_x86_64=("https://edge.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86_64-$pkgver.tar.gz"{,.asc}) +source_i686=("https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86-205.4.5765.tar.gz"{,.asc}) + +sha256sums=('9ba76205ec5838db85d822f23cfd7e2112fd2757e8031d8374709f102143c548' + '46364021c9d63e228de58584a09eaf5bd47a5d2080586eae98935357faebfc5f' + '6c67a9c8c95c08fafafd2f1d828074b13e3347b05d2e4f4bf4e62746115d7477' + '98581e65a91ae1f19ed42edcdaaa52e102298b5da0d71b50089393d364474d3d') +sha256sums_i686=('b603528915347e734b56162dabf1ce3dfbfef60bc2546f0e9c9388193b2ae3f1' + 'SKIP') +sha256sums_x86_64=('88efaf3bfb75d3cbc8fea62c6b78a5052f3e826d3b5ef65439995d4f35431a67' + 'SKIP') +# The PGP key fingerprint should match the one on https://www.dropbox.com/help/desktop-web/linux-commands +validpgpkeys=( + '1C61A2656FB57B7E4DE0F4C1FC918B335044912E' # Dropbox Automatic Signing Key +) + +prepare() { + gendesk --pkgname="$pkgname" --pkgdesc="$pkgdesc" --categories=Network PKGBUILD +} + +package() { + if [ "$CARCH" = "x86_64" ]; then + _source_arch="x86_64" + else + _source_arch="x86" + fi + + install -d "$pkgdir"/opt + cp -dr --no-preserve=ownership "$srcdir"/.dropbox-dist/dropbox-lnx.$_source_arch-$pkgver "$pkgdir"/opt/dropbox + chmod 755 "$pkgdir"/opt/dropbox/*.so + + install -d "$pkgdir"/usr/bin + ln -s ../../opt/dropbox/dropbox "$pkgdir"/usr/bin/dropbox + + install -Dm644 "$srcdir"/dropbox.desktop -t "$pkgdir"/usr/share/applications + install -Dm644 "$srcdir"/DropboxGlyph_Blue.svg "$pkgdir"/usr/share/pixmaps/dropbox.svg + install -Dm644 "$srcdir"/terms.txt -t "$pkgdir"/usr/share/licenses/$pkgname + install -Dm644 "$srcdir"/dropbox.service -t "$pkgdir"/usr/lib/systemd/user + install -Dm644 "$srcdir"/dropbox@.service -t "$pkgdir"/usr/lib/systemd/system +} diff --git a/pkgbuilds/dropbox/dropbox.service b/pkgbuilds/dropbox/dropbox.service new file mode 100644 index 0000000..ff9f202 --- /dev/null +++ b/pkgbuilds/dropbox/dropbox.service @@ -0,0 +1,13 @@ +[Unit] +Description=Dropbox + +[Service] +Type=simple +ExecStart=/usr/bin/dropbox +ExecReload=/bin/kill -HUP $MAINPID +KillMode=process +Restart=on-failure + +[Install] +WantedBy=default.target + diff --git a/pkgbuilds/dropbox/dropbox@.service b/pkgbuilds/dropbox/dropbox@.service new file mode 100644 index 0000000..9f6a971 --- /dev/null +++ b/pkgbuilds/dropbox/dropbox@.service @@ -0,0 +1,15 @@ +[Unit] +Description=Dropbox +After=local-fs.target network.target + +[Service] +Type=simple +ExecStart=/usr/bin/dropbox +ExecReload=/bin/kill -HUP $MAINPID +KillMode=process +Restart=on-failure +User=%I + +[Install] +WantedBy=multi-user.target + diff --git a/pkgbuilds/dropbox/terms.txt b/pkgbuilds/dropbox/terms.txt new file mode 100644 index 0000000..8d44a25 --- /dev/null +++ b/pkgbuilds/dropbox/terms.txt @@ -0,0 +1,150 @@ +Dropbox Terms of Service + +Posted: October 29, 2021 + +Effective: January 14, 2022 + +You can see your previous Terms here. + +Thanks for using Dropbox! Our mission is to create a more enlightened way of working by providing an intuitive, unified platform to keep your content safe and accessible while helping you and those you work with stay coordinated and in sync. These terms of service (“Terms”) cover your use and access to our services, client software and websites ("Services"). If you reside outside of the United States of America, Canada and Mexico (“North America”) your agreement is with Dropbox International Unlimited Company. If you reside in North America your agreement is with Dropbox, Inc. Our Privacy Policy explains how we collect and use your information while our Acceptable Use Policy outlines your responsibilities when using our Services. By using our Services, you’re agreeing to be bound by these Terms, our Privacy Policy, and Acceptable Use Policy. + +Your Stuff & Your Permissions + +When you use our Services, you provide us with things like your files, content, messages, contacts, and so on (“Your Stuff”). Your Stuff is yours. These Terms don’t give us any rights to Your Stuff except for the limited rights that enable us to offer the Services. + +We need your permission to do things like hosting Your Stuff, backing it up, and sharing it when you ask us to. Our Services also provide you with features like commenting, sharing, searching, image thumbnails, document previews, optical character recognition (OCR), easy sorting and organization, and personalization to help reduce busywork. To provide these and other features, Dropbox accesses, stores, and scans Your Stuff. You give us permission to do those things, and this permission extends to our affiliates and trusted third parties we work with. + +Your Responsibilities + +Your use of our Services must comply with our Acceptable Use Policy. Content in the Services may be protected by others’ intellectual property rights. Please don’t copy, upload, download, or share content unless you have the right to do so. + +Dropbox may review your conduct and content for compliance with these Terms and our Acceptable Use Policy. We aren’t responsible for the content people post and share via the Services. + +Help us keep Your Stuff protected. Safeguard your password to the Services, and keep your account information current. Don’t share your account credentials or give others access to your account. + +You may use our Services only as permitted by applicable law, including export control laws and regulations. Finally, to use our Services, you must be at least 13 if you reside in the United States, and 16 if you reside anywhere else. If the law where you reside requires that you must be older in order for Dropbox to lawfully provide the Services to you without parental consent (including use of your personal data), then you must be that older age. + +Software + +Some of our Services allow you to download client software (“Software”) which may update automatically. So long as you comply with these Terms, we give you a limited, nonexclusive, nontransferable, revocable license to use the Software, solely to access the Services. To the extent any component of the Software may be offered under an open source license, we’ll make that license available to you and the provisions of that license may expressly override some of these Terms. Unless the following restrictions are prohibited by law, you agree not to reverse engineer or decompile the Services, attempt to do so, or assist anyone in doing so. + +Beta Services + +We sometimes release products and features that we’re still testing and evaluating (“Beta Services”). Beta Services are labeled “alpha,” “beta,” “preview,” “early access,” or “evaluation” (or with words or phrases with similar meanings) and may not be as reliable as Dropbox’s other services. Beta Services are made available so that we can collect user feedback, and by using our Beta Services, you agree that we may contact you to collect such feedback. + +Beta Services are confidential until official launch. If you use any Beta Services, you agree not to disclose any information about those Services to anyone else without our permission. + +Additional Features + +From time to time, Dropbox will add additional features to enhance the user experience of our storage service at no additional charge. However, these free features may be withdrawn without further notice. + +Our Stuff + +The Services are protected by copyright, trademark, and other US and foreign laws. These Terms don’t grant you any right, title, or interest in the Services, others’ content in the Services, Dropbox trademarks, logos and other brand features. We welcome feedback, but note that we may use comments or suggestions without any obligation to you. + +Copyright + +We respect the intellectual property of others and ask that you do too. We respond to notices of alleged copyright infringement if they comply with the law, and such notices should be reported using our Copyright Policy. We reserve the right to delete or disable content alleged to be infringing and terminate accounts of repeat infringers. Our designated agent for notice of alleged copyright infringement on the Services is: + +Copyright Agent +Dropbox, Inc. +1800 Owens St +San Francisco, CA 94158 +copyright@dropbox.com + +Paid Accounts + +Billing. You can increase your storage space and add paid features to your account (turning your account into a “Paid Account”). We’ll automatically bill you from the date you convert to a Paid Account and on each periodic renewal until cancellation. If you’re on an annual plan, we’ll send you a notice email reminding you that your plan is about to renew within a reasonable period of time prior to the renewal date. You’re responsible for all applicable taxes, and we’ll charge tax when required to do so. Some countries have mandatory local laws regarding your cancellation rights, and this paragraph doesn’t override these laws. + +Cancellation. You may cancel your Dropbox Paid Account at any time. Refunds are only issued if required by law. For example, users living in the European Union have the right to cancel their Paid Account subscriptions within 14 days of signing up for, upgrading to, or renewing a Paid Account by clicking here. + +Downgrades. Your Paid Account will remain in effect until it's cancelled or terminated under these Terms. If you’re on a Dropbox Family plan, the Family manager may be able to downgrade your account at any time. If you don’t pay for your Paid Account on time, we reserve the right to suspend it or remove Paid Account features. + +Changes. We may change the fees in effect on renewal of your subscription, to reflect factors such as changes to our product offerings, changes to our business, or changes in economic conditions. We’ll give you no less than 30 days’ advance notice of these changes via a message to the email address associated with your account and you’ll have the opportunity to cancel your subscription before the new fee comes into effect. + +Dropbox Business Teams + +Email address. If you sign up for a Dropbox account with an email address provisioned by your organization, your organization may be able to block your use of Dropbox until you transition to an account on a Dropbox Business or Education team (collectively, “Dropbox Business Team”) or you associate your Dropbox account with a personal email address. + +Using Dropbox Business Teams. If you join a Dropbox Business Team, you must use it in compliance with your organization’s terms and policies. Please note that Dropbox Business Team accounts are subject to your organization's control. Your administrators may be able to access, disclose, restrict, or remove information in or from your Dropbox Business Team account. They may also be able to restrict or terminate your access to a Dropbox Business Team account. If you convert an existing Dropbox account into part of a Dropbox Business Team, your administrators may prevent you from later disassociating your account from the Dropbox Business Team. + +Termination + +You’re free to stop using our Services at any time. We reserve the right to suspend or terminate your access to the Services with notice to you if: + +you’re in breach of these Terms, +your use of the Services would cause a real risk of harm or loss to us or other users, or +you don’t have a Paid Account and haven't accessed our Services for 12 consecutive months. +We’ll provide you with reasonable advance notice via the email address associated with your account to remedy the activity that prompted us to contact you and give you the opportunity to export Your Stuff from our Services. If after such notice you fail to take the steps we ask of you, we’ll terminate or suspend your access to the Services. + +We won’t provide notice or an opportunity to export Your Stuff before termination or suspension of access to the Services where: + +you’re in material breach of these Terms, +doing so would cause us legal liability or compromise our ability to provide the Services to our other users, or +we're prohibited from doing so by law. +Discontinuation of Services + +We may decide to discontinue the Services in response to exceptional unforeseen circumstances, events beyond Dropbox’s control (for example a natural disaster, fire, or explosion), or to comply with a legal requirement. If we do so, we’ll give you reasonable prior notice so that you can export Your Stuff from our systems (we will give you no less than 30 days’ notice where possible under the circumstances). If we discontinue the Services in this way before the end of any fixed or minimum term you have paid us for, we’ll refund the portion of the fees you have pre-paid but haven't received Services for. + +Services “AS IS” + +We strive to provide great Services, but there are certain things that we can't guarantee. TO THE FULLEST EXTENT PERMITTED BY LAW, DROPBOX AND ITS AFFILIATES, SUPPLIERS AND DISTRIBUTORS MAKE NO WARRANTIES, EITHER EXPRESS OR IMPLIED, ABOUT THE SERVICES. THE SERVICES ARE PROVIDED "AS IS." WE ALSO DISCLAIM ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. Some places don’t allow the disclaimers in this paragraph, so they may not apply to you. For example, these disclaimers do not override the legal protections, including statutory warranties, granted to consumers by EU law. + +Limitation of Liability + +WE DON’T EXCLUDE OR LIMIT OUR LIABILITY TO YOU WHERE IT WOULD BE ILLEGAL TO DO SO—THIS INCLUDES ANY LIABILITY FOR DROPBOX’S OR ITS AFFILIATES’ FRAUD OR FRAUDULENT MISREPRESENTATION IN PROVIDING THE SERVICES. IN COUNTRIES WHERE THE FOLLOWING TYPES OF EXCLUSIONS AREN’T ALLOWED, WE'RE RESPONSIBLE TO YOU ONLY FOR LOSSES AND DAMAGES THAT ARE A REASONABLY FORESEEABLE RESULT OF OUR FAILURE TO USE REASONABLE CARE AND SKILL OR OUR BREACH OF OUR CONTRACT WITH YOU. THIS PARAGRAPH DOESN’T AFFECT CONSUMER RIGHTS THAT CAN'T BE WAIVED OR LIMITED BY ANY CONTRACT OR AGREEMENT. IF YOU ARE AN EU OR UK CONSUMER, THESE TERMS DO NOT EXCLUDE DROPBOX’S LIABILITY FOR LOSSES AND DAMAGES THAT ARE A RESULT OF OUR FAILURE TO USE REASONABLE CARE AND SKILL IN PROVIDING THE SERVICES OR OF OUR BREACH OF OUR CONTRACT WITH YOU, AS LONG AS THOSE LOSSES AND DAMAGES ARE REASONABLY FORESEEABLE. + +IN COUNTRIES WHERE EXCLUSIONS OR LIMITATIONS OF LIABILITY ARE ALLOWED, DROPBOX, ITS AFFILIATES, SUPPLIERS OR DISTRIBUTORS WON’T BE LIABLE FOR: + +ANY INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE, EXEMPLARY, OR CONSEQUENTIAL DAMAGES, OR +ANY LOSS OF USE, DATA, BUSINESS, OR PROFITS, REGARDLESS OF LEGAL THEORY. +THESE EXCLUSIONS OR LIMITATIONS WILL APPLY REGARDLESS OF WHETHER OR NOT DROPBOX OR ANY OF ITS AFFILIATES HAS BEEN WARNED OF THE POSSIBILITY OF SUCH DAMAGES. + +IF YOU USE THE SERVICES FOR ANY COMMERCIAL, BUSINESS, OR RE-SALE PURPOSE, DROPBOX, ITS AFFILIATES, SUPPLIERS OR DISTRIBUTORS WILL HAVE NO LIABILITY TO YOU FOR ANY LOSS OF PROFIT, LOSS OF BUSINESS, BUSINESS INTERRUPTION, OR LOSS OF BUSINESS OPPORTUNITY. DROPBOX AND ITS AFFILIATES AREN’T RESPONSIBLE FOR THE CONDUCT, WHETHER ONLINE OR OFFLINE, OF ANY USER OF THE SERVICES. + +OTHER THAN FOR THE TYPES OF LIABILITY WE CANNOT LIMIT BY LAW (AS DESCRIBED IN THIS SECTION), WE LIMIT OUR LIABILITY TO YOU TO THE GREATER OF $20 USD OR 100% OF ANY AMOUNT YOU'VE PAID UNDER YOUR CURRENT SERVICE PLAN WITH DROPBOX. THIS PROVISION DOES NOT APPLY TO EU CONSUMERS WHERE PROHIBITED BY APPLICABLE LAW. + +Resolving Disputes + +Let’s Try to Sort Things Out First. We want to address your concerns without needing a formal legal case. Before filing a claim against Dropbox, you agree to try to resolve the dispute informally by sending us a written Notice of Dispute at dispute-notice@dropbox.com that includes your name, a detailed description of the dispute, and the relief you seek. We’ll try to resolve the dispute informally by contacting you via email. If a dispute is not resolved within 60 days after submission, you or Dropbox may bring a formal proceeding. If you reside in the EU, the European Commission provides for an online dispute resolution platform, which you can access here: https://ec.europa.eu/consumers/odr. + +Judicial Forum for Disputes. You and Dropbox agree that any judicial proceeding to resolve claims relating to these Terms or the Services will be brought in the federal or state courts of San Francisco County, California, subject to the mandatory arbitration provisions below. Both you and Dropbox consent to venue and personal jurisdiction in such courts. If you reside in a country (for example, a member state of the European Union) with laws that give consumers the right to bring disputes in their local courts, this paragraph doesn’t affect those requirements. + +IF YOU’RE A U.S. RESIDENT, YOU ALSO AGREE TO THE FOLLOWING MANDATORY ARBITRATION PROVISIONS: + +We Both Agree to Arbitrate. You and Dropbox agree to resolve any claims relating to these Terms or the Services through final and binding individual arbitration by a single arbitrator, except as set forth under the “Exceptions to Agreement to Arbitrate” below. This includes disputes arising out of or relating to the interpretation or application of this “Mandatory Arbitration Provisions” section, including its scope, enforceability, revocability, or validity. The arbitrator may award relief only individually and only to the extent necessary to redress your individual claim(s); the arbitrator may not award relief on behalf of others or the general public. + +Opt out of Agreement to Arbitrate. You can decline this agreement to arbitrate by clicking here and submitting the opt-out form within 30 days of first registering your account or agreeing to these Terms. However, if you agreed to a previous version of these Terms that allowed you to opt out of arbitration, your previous choice to opt out or not opt out remains binding. + +Arbitration Procedures. The American Arbitration Association (AAA) will administer the arbitration under its Consumer Arbitration Rules. The AAA’s rules and filing instructions are available at www.adr.org or by calling 1-800-778-7879. The arbitration will be held in the United States county where you live or work, San Francisco (CA), or any other location we agree to. + +Arbitration Fees and Incentives. The AAA rules will govern payment of all arbitration fees. For individual arbitration of non-frivolous claims less than $75,000 for which you timely provided Dropbox with a Notice of Dispute, Dropbox will reimburse arbitration filing fees at the conclusion of the arbitration and will pay other arbitration fees. For all other claims, the costs and fees of arbitration shall be allocated in accordance with the arbitration provider’s rules, including rules regarding frivolous or improper claims. If you receive an arbitration award that is more favorable than any offer we make to resolve the claim, we will pay you $1,000 in addition to the award. Dropbox will not seek its attorneys' fees and costs in arbitration unless the arbitrator determines that your claim is frivolous or brought for an improper purpose. + +Exceptions to Agreement to Arbitrate. Either you or Dropbox may assert claims, if they qualify, in small claims court in San Francisco (CA) or any United States county where you live or work. Either party may bring a lawsuit solely for injunctive relief to stop unauthorized use or abuse of the Services, or intellectual property infringement (for example, trademark, trade secret, copyright, or patent rights) without first engaging in arbitration or the informal dispute-resolution process described above. If the agreement to arbitrate is found not to apply to you or your claim, you agree to the exclusive jurisdiction of the state and federal courts in San Francisco County, California to resolve your claim. + +NO CLASS OR REPRESENTATIVE ACTIONS. You may only resolve disputes with us on an individual basis, and may not bring a claim as a plaintiff or a class member in a class, consolidated, or representative action. Class arbitrations, class actions, private attorney general actions, and consolidation with other arbitrations aren’t allowed. + +Severability. If any part of this “Mandatory Arbitration Provisions” section is found to be illegal or unenforceable, the remainder will remain in effect, except that if a finding of partial illegality or unenforceability would allow class or representative arbitration, this “Mandatory Arbitration Provisions” section will be unenforceable in its entirety. If you are found to have a non-waivable right to bring a particular claim or to request a particular form of relief that the arbitrator lacks authority to redress or award according to this “Mandatory Arbitration Provisions” section, including public injunctive relief, then only that respective claim or request for relief may be brought in court, and you and we agree that litigation of any such claim or request for relief shall be stayed pending the resolution of any individual claim(s) or request(s) for relief in arbitration. + +Controlling Law + +These Terms will be governed by California law except for its conflicts of laws principles. However, some countries (including those in the European Union) have laws that require agreements to be governed by the local laws of the consumer's country. This paragraph doesn’t override those laws. + +Entire Agreement + +These Terms constitute the entire agreement between you and Dropbox with respect to the subject matter of these Terms, and supersede and replace any other prior or contemporaneous agreements, or terms and conditions applicable to the subject matter of these Terms. Our past, present, and future affiliates and agents can invoke our rights under this agreement in the event they become involved in a dispute with you. Otherwise, these Terms do not give rights to any third parties. + +Waiver, Severability & Assignment + +Dropbox’s failure to enforce a provision is not a waiver of its right to do so later. If a provision is found unenforceable, the remaining provisions of the Terms will remain in full effect and an enforceable term will be substituted reflecting our intent as closely as possible. You may not assign any of your rights under these Terms, and any such attempt will be void. Dropbox may assign its rights to any of its affiliates or subsidiaries, or to any successor in interest of any business associated with the Services. + +Modifications + +We may revise these Terms from time to time to better reflect: + +changes to the law, +new regulatory requirements, or +improvements or enhancements made to our Services. +If an update affects your use of the Services or your legal rights as a user of our Services, we’ll notify you prior to the update's effective date by sending an email to the email address associated with your account or via an in-product notification. These updated terms will be effective no less than 30 days from when we notify you. + +If you don’t agree to the updates we make, please cancel your account and stop using the Services before the updated Terms become effective. Where applicable, we’ll offer you a prorated refund based on the amounts you have prepaid for Services and your account cancellation date. By continuing to use or access the Services after the updates come into effect, you agree to be bound by the revised Terms. diff --git a/pkgbuilds/elephant-archlinuxpkgs/.SRCINFO b/pkgbuilds/elephant-archlinuxpkgs/.SRCINFO new file mode 100644 index 0000000..66609ab --- /dev/null +++ b/pkgbuilds/elephant-archlinuxpkgs/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-archlinuxpkgs + pkgdesc = archlinuxpkgs provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-archlinuxpkgs + conflicts = elephant-archlinuxpkgs + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-archlinuxpkgs diff --git a/pkgbuilds/elephant-archlinuxpkgs/PKGBUILD b/pkgbuilds/elephant-archlinuxpkgs/PKGBUILD new file mode 100644 index 0000000..9e7780b --- /dev/null +++ b/pkgbuilds/elephant-archlinuxpkgs/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-archlinuxpkgs +pkgver=2.7.2 +pkgrel=1 +pkgdesc='archlinuxpkgs provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-archlinuxpkgs') +provides=('elephant-archlinuxpkgs') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/archlinuxpkgs + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/archlinuxpkgs + install -Dm 755 archlinuxpkgs.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-bluetooth/.SRCINFO b/pkgbuilds/elephant-bluetooth/.SRCINFO new file mode 100644 index 0000000..19ab1fe --- /dev/null +++ b/pkgbuilds/elephant-bluetooth/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-bluetooth + pkgdesc = bluetooth provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-bluetooth + conflicts = elephant-bluetooth + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-bluetooth diff --git a/pkgbuilds/elephant-bluetooth/PKGBUILD b/pkgbuilds/elephant-bluetooth/PKGBUILD new file mode 100644 index 0000000..5b34004 --- /dev/null +++ b/pkgbuilds/elephant-bluetooth/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-bluetooth +pkgver=2.7.2 +pkgrel=1 +pkgdesc='bluetooth provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-bluetooth') +provides=('elephant-bluetooth') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/bluetooth + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/bluetooth + install -Dm 755 bluetooth.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-calc/.SRCINFO b/pkgbuilds/elephant-calc/.SRCINFO new file mode 100644 index 0000000..13633e4 --- /dev/null +++ b/pkgbuilds/elephant-calc/.SRCINFO @@ -0,0 +1,16 @@ +pkgbase = elephant-calc + pkgdesc = calc provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + depends = libqalculate + provides = elephant-calc + conflicts = elephant-calc + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-calc diff --git a/pkgbuilds/elephant-calc/PKGBUILD b/pkgbuilds/elephant-calc/PKGBUILD new file mode 100644 index 0000000..5ec5f1a --- /dev/null +++ b/pkgbuilds/elephant-calc/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-calc +pkgver=2.7.2 +pkgrel=1 +pkgdesc='calc provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +depends=('libqalculate') +makedepends=('go') +conflicts=('elephant-calc') +provides=('elephant-calc') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/calc + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/calc + install -Dm 755 calc.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-clipboard/.SRCINFO b/pkgbuilds/elephant-clipboard/.SRCINFO new file mode 100644 index 0000000..06f821d --- /dev/null +++ b/pkgbuilds/elephant-clipboard/.SRCINFO @@ -0,0 +1,16 @@ +pkgbase = elephant-clipboard + pkgdesc = clipboard provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + depends = wl-clipboard + provides = elephant-clipboard + conflicts = elephant-clipboard + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-clipboard diff --git a/pkgbuilds/elephant-clipboard/PKGBUILD b/pkgbuilds/elephant-clipboard/PKGBUILD new file mode 100644 index 0000000..888d268 --- /dev/null +++ b/pkgbuilds/elephant-clipboard/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-clipboard +pkgver=2.7.2 +pkgrel=1 +pkgdesc='clipboard provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +depends=('wl-clipboard') +makedepends=('go') +conflicts=('elephant-clipboard') +provides=('elephant-clipboard') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/clipboard + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/clipboard + install -Dm 755 clipboard.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-desktopapplications/.SRCINFO b/pkgbuilds/elephant-desktopapplications/.SRCINFO new file mode 100644 index 0000000..79ab747 --- /dev/null +++ b/pkgbuilds/elephant-desktopapplications/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-desktopapplications + pkgdesc = desktopapplications provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-desktopapplications + conflicts = elephant-desktopapplications + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-desktopapplications diff --git a/pkgbuilds/elephant-desktopapplications/PKGBUILD b/pkgbuilds/elephant-desktopapplications/PKGBUILD new file mode 100644 index 0000000..e7f8eae --- /dev/null +++ b/pkgbuilds/elephant-desktopapplications/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-desktopapplications +pkgver=2.7.2 +pkgrel=1 +pkgdesc='desktopapplications provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-desktopapplications') +provides=('elephant-desktopapplications') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/desktopapplications + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/desktopapplications + install -Dm 755 desktopapplications.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-files/.SRCINFO b/pkgbuilds/elephant-files/.SRCINFO new file mode 100644 index 0000000..6cf6e16 --- /dev/null +++ b/pkgbuilds/elephant-files/.SRCINFO @@ -0,0 +1,16 @@ +pkgbase = elephant-files + pkgdesc = files provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + depends = fd + provides = elephant-files + conflicts = elephant-files + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-files diff --git a/pkgbuilds/elephant-files/PKGBUILD b/pkgbuilds/elephant-files/PKGBUILD new file mode 100644 index 0000000..6a20dbd --- /dev/null +++ b/pkgbuilds/elephant-files/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-files +pkgver=2.7.2 +pkgrel=1 +pkgdesc='files provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +depends=('fd') +makedepends=('go') +conflicts=('elephant-files') +provides=('elephant-files') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/files + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/files + install -Dm 755 files.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-menus/.SRCINFO b/pkgbuilds/elephant-menus/.SRCINFO new file mode 100644 index 0000000..c4eb271 --- /dev/null +++ b/pkgbuilds/elephant-menus/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-menus + pkgdesc = menus provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-menus + conflicts = elephant-menus + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-menus diff --git a/pkgbuilds/elephant-menus/PKGBUILD b/pkgbuilds/elephant-menus/PKGBUILD new file mode 100644 index 0000000..c3b02d2 --- /dev/null +++ b/pkgbuilds/elephant-menus/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-menus +pkgver=2.7.2 +pkgrel=1 +pkgdesc='menus provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-menus') +provides=('elephant-menus') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/menus + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/menus + install -Dm 755 menus.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-providerlist/.SRCINFO b/pkgbuilds/elephant-providerlist/.SRCINFO new file mode 100644 index 0000000..a502773 --- /dev/null +++ b/pkgbuilds/elephant-providerlist/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-providerlist + pkgdesc = providerlist provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-providerlist + conflicts = elephant-providerlist + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-providerlist diff --git a/pkgbuilds/elephant-providerlist/PKGBUILD b/pkgbuilds/elephant-providerlist/PKGBUILD new file mode 100644 index 0000000..bb02342 --- /dev/null +++ b/pkgbuilds/elephant-providerlist/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-providerlist +pkgver=2.7.2 +pkgrel=1 +pkgdesc='providerlist provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-providerlist') +provides=('elephant-providerlist') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/providerlist + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/providerlist + install -Dm 755 providerlist.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-runner/.SRCINFO b/pkgbuilds/elephant-runner/.SRCINFO new file mode 100644 index 0000000..2f37afd --- /dev/null +++ b/pkgbuilds/elephant-runner/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-runner + pkgdesc = runner provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-runner + conflicts = elephant-runner + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-runner diff --git a/pkgbuilds/elephant-runner/PKGBUILD b/pkgbuilds/elephant-runner/PKGBUILD new file mode 100644 index 0000000..5e77d0d --- /dev/null +++ b/pkgbuilds/elephant-runner/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-runner +pkgver=2.7.2 +pkgrel=1 +pkgdesc='runner provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-runner') +provides=('elephant-runner') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/runner + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/runner + install -Dm 755 runner.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-symbols/.SRCINFO b/pkgbuilds/elephant-symbols/.SRCINFO new file mode 100644 index 0000000..6c283d7 --- /dev/null +++ b/pkgbuilds/elephant-symbols/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-symbols + pkgdesc = symbols provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-symbols + conflicts = elephant-symbols + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-symbols diff --git a/pkgbuilds/elephant-symbols/PKGBUILD b/pkgbuilds/elephant-symbols/PKGBUILD new file mode 100644 index 0000000..949bb79 --- /dev/null +++ b/pkgbuilds/elephant-symbols/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-symbols +pkgver=2.7.2 +pkgrel=1 +pkgdesc='symbols provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-symbols') +provides=('elephant-symbols') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/symbols + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/symbols + install -Dm 755 symbols.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-todo/.SRCINFO b/pkgbuilds/elephant-todo/.SRCINFO new file mode 100644 index 0000000..eda2667 --- /dev/null +++ b/pkgbuilds/elephant-todo/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-todo + pkgdesc = todo provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-todo + conflicts = elephant-todo + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-todo diff --git a/pkgbuilds/elephant-todo/PKGBUILD b/pkgbuilds/elephant-todo/PKGBUILD new file mode 100644 index 0000000..7da1367 --- /dev/null +++ b/pkgbuilds/elephant-todo/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-todo +pkgver=2.7.2 +pkgrel=1 +pkgdesc='todo provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-todo') +provides=('elephant-todo') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/todo + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/todo + install -Dm 755 todo.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-unicode/.SRCINFO b/pkgbuilds/elephant-unicode/.SRCINFO new file mode 100644 index 0000000..41375e3 --- /dev/null +++ b/pkgbuilds/elephant-unicode/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-unicode + pkgdesc = unicode provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-unicode + conflicts = elephant-unicode + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-unicode diff --git a/pkgbuilds/elephant-unicode/PKGBUILD b/pkgbuilds/elephant-unicode/PKGBUILD new file mode 100644 index 0000000..650d7a2 --- /dev/null +++ b/pkgbuilds/elephant-unicode/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-unicode +pkgver=2.7.2 +pkgrel=1 +pkgdesc='unicode provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-unicode') +provides=('elephant-unicode') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/unicode + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/unicode + install -Dm 755 unicode.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant-websearch/.SRCINFO b/pkgbuilds/elephant-websearch/.SRCINFO new file mode 100644 index 0000000..d45892b --- /dev/null +++ b/pkgbuilds/elephant-websearch/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant-websearch + pkgdesc = websearch provider for elephant + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant-websearch + conflicts = elephant-websearch + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant-websearch diff --git a/pkgbuilds/elephant-websearch/PKGBUILD b/pkgbuilds/elephant-websearch/PKGBUILD new file mode 100644 index 0000000..a3c9e91 --- /dev/null +++ b/pkgbuilds/elephant-websearch/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant-websearch +pkgver=2.7.2 +pkgrel=1 +pkgdesc='websearch provider for elephant' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant-websearch') +provides=('elephant-websearch') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd elephant-${pkgver}/internal/providers/websearch + go build -buildvcs=false -buildmode=plugin -trimpath +} + +package() { + cd elephant-${pkgver}/internal/providers/websearch + install -Dm 755 websearch.so -t "${pkgdir}/etc/xdg/elephant/providers" + + cd ../../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/elephant/.SRCINFO b/pkgbuilds/elephant/.SRCINFO new file mode 100644 index 0000000..2366ada --- /dev/null +++ b/pkgbuilds/elephant/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = elephant + pkgdesc = general purpose datasource and executor + pkgver = 2.7.2 + pkgrel = 1 + url = https://github.com/abenz1267/elephant + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = go + provides = elephant + conflicts = elephant + source = https://github.com/abenz1267/elephant/archive/refs/tags/v2.7.2.tar.gz + sha256sums = 54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc + +pkgname = elephant diff --git a/pkgbuilds/elephant/.gitignore b/pkgbuilds/elephant/.gitignore new file mode 100644 index 0000000..0c53a42 --- /dev/null +++ b/pkgbuilds/elephant/.gitignore @@ -0,0 +1,4 @@ +/pkg +/src +*.zip +*.tar.xz diff --git a/pkgbuilds/elephant/PKGBUILD b/pkgbuilds/elephant/PKGBUILD new file mode 100644 index 0000000..1c45b23 --- /dev/null +++ b/pkgbuilds/elephant/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Andrej Benz + +pkgname=elephant +pkgver=2.7.2 +pkgrel=1 +pkgdesc='general purpose datasource and executor' +url='https://github.com/abenz1267/elephant' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('go') +conflicts=('elephant') +provides=('elephant') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('54ed8a3043e26c671c34e9bb312d6b91835571845a4c47a76d083c4f5c9d5edc') + +build() { + cd ${pkgname}-${pkgver}/cmd/elephant + go build -buildvcs=false -x -o elephant -trimpath +} + +package() { + cd ${pkgname}-${pkgver}/cmd/elephant + install -Dm 755 elephant -t "${pkgdir}/usr/bin" + + cd ../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pkgbuilds/gpu-screen-recorder/.SRCINFO b/pkgbuilds/gpu-screen-recorder/.SRCINFO new file mode 100644 index 0000000..e834160 --- /dev/null +++ b/pkgbuilds/gpu-screen-recorder/.SRCINFO @@ -0,0 +1,35 @@ +pkgbase = gpu-screen-recorder + pkgdesc = A shadowplay-like screen recorder for Linux. The fastest screen recorder for Linux + pkgver = r1187.7d4a406 + pkgrel = 1 + url = https://git.dec05eba.com/gpu-screen-recorder + install = gpu-screen-recorder.install + arch = x86_64 + license = GPL-3.0-only + makedepends = meson + makedepends = vulkan-headers + depends = ffmpeg + depends = libglvnd + depends = libxcomposite + depends = libxrandr + depends = libxfixes + depends = libxdamage + depends = libx11 + depends = libpulse + depends = libva + depends = libdrm + depends = libcap + depends = wayland + depends = libpipewire + depends = dbus + optdepends = nvidia-utils: Required to record your screen on NVIDIA + optdepends = libxnvctrl: Required when using the -oc option to overclock the NVIDIA GPU to workaround NVIDIA p2 state bug + optdepends = mesa: Required to record your screen on AMD/Intel + optdepends = libva-mesa-driver: Required to record your screen on AMD + optdepends = libva-intel-driver: Required to record your screen on Intel G45 and HD Graphics family + optdepends = intel-media-driver: Required to record your screen on Intel Broadwell or later iGPUs or Intel Arc + optdepends = linux-firmware-intel: Required to record your screen on Intel Skylake or later iGPUs + source = gpu-screen-recorder-r1187.7d4a406.tar.gz::https://dec05eba.com/snapshot/gpu-screen-recorder.git.r1187.7d4a406.tar.gz + sha512sums = 6dc9f41511e0b692d4c75158a053ae102af6845b821e31606b03cb5709de5cd1578dd5c9fb8f7c9b83326044c6370ef40b609217dcdae5b9487b281a9c70e768 + +pkgname = gpu-screen-recorder diff --git a/pkgbuilds/gpu-screen-recorder/PKGBUILD b/pkgbuilds/gpu-screen-recorder/PKGBUILD new file mode 100644 index 0000000..423f4e0 --- /dev/null +++ b/pkgbuilds/gpu-screen-recorder/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: dec05eba + +pkgname=gpu-screen-recorder +pkgver=r1187.7d4a406 +pkgrel=1 +pkgdesc='A shadowplay-like screen recorder for Linux. The fastest screen recorder for Linux' +arch=('x86_64') +url="https://git.dec05eba.com/gpu-screen-recorder" +license=('GPL-3.0-only') +makedepends=('meson' 'vulkan-headers') +depends=('ffmpeg' 'libglvnd' 'libxcomposite' 'libxrandr' 'libxfixes' 'libxdamage' 'libx11' 'libpulse' 'libva' 'libdrm' 'libcap' 'wayland' 'libpipewire' 'dbus') +optdepends=( + 'nvidia-utils: Required to record your screen on NVIDIA' + 'libxnvctrl: Required when using the -oc option to overclock the NVIDIA GPU to workaround NVIDIA p2 state bug' + 'mesa: Required to record your screen on AMD/Intel' + 'libva-mesa-driver: Required to record your screen on AMD' + 'libva-intel-driver: Required to record your screen on Intel G45 and HD Graphics family' + 'intel-media-driver: Required to record your screen on Intel Broadwell or later iGPUs or Intel Arc' + 'linux-firmware-intel: Required to record your screen on Intel Skylake or later iGPUs' +) +source=("${pkgname}-${pkgver}.tar.gz::https://dec05eba.com/snapshot/gpu-screen-recorder.git.${pkgver}.tar.gz") +sha512sums=('6dc9f41511e0b692d4c75158a053ae102af6845b821e31606b03cb5709de5cd1578dd5c9fb8f7c9b83326044c6370ef40b609217dcdae5b9487b281a9c70e768') +install="${pkgname}.install" # setcap cap_sys_admin (gsr-kms-server) + +build() { + cd "$srcdir" + arch-meson build -Dsystemd=true --buildtype=release -Dstrip=true + meson compile -C build +} + +package() { + cd "$srcdir" + meson install -C build --destdir "$pkgdir" +} diff --git a/pkgbuilds/gpu-screen-recorder/gpu-screen-recorder.install b/pkgbuilds/gpu-screen-recorder/gpu-screen-recorder.install new file mode 100644 index 0000000..ddfe12c --- /dev/null +++ b/pkgbuilds/gpu-screen-recorder/gpu-screen-recorder.install @@ -0,0 +1,7 @@ +post_install() { + setcap cap_sys_admin+ep usr/bin/gsr-kms-server +} + +post_upgrade() { + post_install "$1" +} diff --git a/pkgbuilds/hyprshade/.SRCINFO b/pkgbuilds/hyprshade/.SRCINFO new file mode 100644 index 0000000..d465794 --- /dev/null +++ b/pkgbuilds/hyprshade/.SRCINFO @@ -0,0 +1,23 @@ +pkgbase = hyprshade + pkgdesc = Hyprland shade configuration tool + pkgver = 4.0.0 + pkgrel = 1 + url = https://github.com/loqusion/hyprshade + arch = any + license = MIT + makedepends = git + makedepends = python-build + makedepends = python-hatchling + makedepends = python-installer + depends = hyprland + depends = python-click + depends = python-more-itertools + depends = util-linux + optdepends = systemd: activate shader on schedule + provides = hyprshade + source = https://files.pythonhosted.org/packages/source/h/hyprshade/hyprshade-4.0.0.tar.gz + source = https://raw.githubusercontent.com/loqusion/hyprshade/4.0.0/examples/config.toml + sha256sums = a0acb5569def4e8444081fbb8701e3f8bed5b5a26415b96c0ee2152d362bd5d9 + sha256sums = 411517f06dc484fb8aad729d73d66cb5b91982ac0c5908184ec9343974392f0a + +pkgname = hyprshade diff --git a/pkgbuilds/hyprshade/.gitignore b/pkgbuilds/hyprshade/.gitignore new file mode 100644 index 0000000..218620e --- /dev/null +++ b/pkgbuilds/hyprshade/.gitignore @@ -0,0 +1,4 @@ +* +!/PKGBUILD +!/.SRCINFO +!/.gitignore diff --git a/pkgbuilds/hyprshade/PKGBUILD b/pkgbuilds/hyprshade/PKGBUILD new file mode 100644 index 0000000..f07dd2d --- /dev/null +++ b/pkgbuilds/hyprshade/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: John Bernard +pkgname=hyprshade +pkgver=4.0.0 +pkgrel=1 +pkgdesc="Hyprland shade configuration tool" +arch=('any') +url="https://github.com/loqusion/$pkgname" +license=('MIT') +_py_deps=( + click + more-itertools +) +depends=( + hyprland + "${_py_deps[@]/#/python-}" + util-linux +) +makedepends=(git python-{build,hatchling,installer}) +optdepends=('systemd: activate shader on schedule') +provides=($pkgname) +source=("https://files.pythonhosted.org/packages/source/${pkgname::1}/$pkgname/$pkgname-$pkgver.tar.gz" + "https://raw.githubusercontent.com/loqusion/$pkgname/$pkgver/examples/config.toml") +sha256sums=('a0acb5569def4e8444081fbb8701e3f8bed5b5a26415b96c0ee2152d362bd5d9' + '411517f06dc484fb8aad729d73d66cb5b91982ac0c5908184ec9343974392f0a') + +_get_wheel() { + local wheel= + local file + for file in ./dist/${pkgname}-*.whl; do + if [ -n "$wheel" ]; then + echo "Multiple wheels found: $wheel and $file" >&2 + exit 1 + fi + wheel=$file + done + echo "$wheel" +} + +build() { + cd "$pkgname-$pkgver" + mkdir -p examples + cp ../config.toml examples/ + + /usr/bin/python -m build --wheel --no-isolation + + mkdir -p assets/completions + local wheel=$(_get_wheel) + export PYTHONPATH="$wheel" + _HYPRSHADE_COMPLETE=bash_source /usr/bin/python "$wheel/$pkgname" >assets/completions/$pkgname.bash + _HYPRSHADE_COMPLETE=fish_source /usr/bin/python "$wheel/$pkgname" >assets/completions/$pkgname.fish + _HYPRSHADE_COMPLETE=zsh_source /usr/bin/python "$wheel/$pkgname" >assets/completions/_$pkgname +} + +package() { + cd "$pkgname-$pkgver" + export PYTHONPYCACHEPREFIX="${PWD}/.cache/cpython/" + /usr/bin/python -m installer --destdir="$pkgdir" dist/*.whl + install -Dm0644 -t "$pkgdir/usr/share/licenses/$pkgname/" LICENSE + install -Dm0644 -t "$pkgdir/usr/share/$pkgname/examples/" examples/* + install -Dm0644 -t "$pkgdir/usr/share/bash-completion/completions/" assets/completions/$pkgname.bash + install -Dm0644 -t "$pkgdir/usr/share/fish/vendor_completions.d/" assets/completions/$pkgname.fish + install -Dm0644 -t "$pkgdir/usr/share/zsh/site-functions/" assets/completions/_$pkgname +} diff --git a/pkgbuilds/limine-mkinitcpio-hook/.SRCINFO b/pkgbuilds/limine-mkinitcpio-hook/.SRCINFO new file mode 100644 index 0000000..a3167b8 --- /dev/null +++ b/pkgbuilds/limine-mkinitcpio-hook/.SRCINFO @@ -0,0 +1,27 @@ +pkgbase = limine-mkinitcpio-hook + pkgdesc = Install kernel for the Limine bootloader. + pkgver = 1.24.0 + pkgrel = 3 + url = https://gitlab.com/Zesko/limine-entry-tool + arch = any + license = GPL3 + makedepends = git + makedepends = jdk21-openjdk + makedepends = maven + depends = bash + depends = grep + depends = tar + depends = java-runtime-headless>=17 + depends = limine + depends = mkinitcpio + depends = efibootmgr + optdepends = kernel-modules-hook: Safely keeps kernel on upgrade failure + optdepends = sbctl: Signs UEFI boot files for Secure Boot when enabled + optdepends = journalctl-desktop-notification: Sends desktop notifications when errors occur + provides = limine-entry-tool + conflicts = limine-entry-tool + backup = etc/limine-entry-tool.conf + source = https://gitlab.com/Zesko/limine-entry-tool/-/archive/1.24.0-3/limine-entry-tool-1.24.0-3.tar.gz + sha256sums = 69d60071ca5b98760474c08389c17d9b98cf78ff891d9beaac3ddd046e77f62b + +pkgname = limine-mkinitcpio-hook diff --git a/pkgbuilds/limine-mkinitcpio-hook/.gitignore b/pkgbuilds/limine-mkinitcpio-hook/.gitignore new file mode 100644 index 0000000..26b9a3c --- /dev/null +++ b/pkgbuilds/limine-mkinitcpio-hook/.gitignore @@ -0,0 +1,5 @@ +limine-entry-tool* +limine-mkinitcpio* +pkg +src + diff --git a/pkgbuilds/limine-mkinitcpio-hook/PKGBUILD b/pkgbuilds/limine-mkinitcpio-hook/PKGBUILD new file mode 100644 index 0000000..017efa1 --- /dev/null +++ b/pkgbuilds/limine-mkinitcpio-hook/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Zesko +_pkgname="limine-entry-tool" +pkgname="limine-mkinitcpio-hook" +pkgver=1.24.0 +pkgrel=3 +_extver="-${pkgrel}" +pkgdesc="Install kernel for the Limine bootloader." +arch=("any") +url="https://gitlab.com/Zesko/limine-entry-tool" +source=("$url/-/archive/${pkgver}${_extver}/$_pkgname-${pkgver}${_extver}.tar.gz") +license=("GPL3") +provides=('limine-entry-tool') +_jre_version=17 +_jdk_version=21 +depends=( + 'bash' + 'grep' + 'tar' + 'java-runtime-headless>='${_jre_version} + 'limine' + 'mkinitcpio' + 'efibootmgr') +optdepends=( + 'kernel-modules-hook: Safely keeps kernel on upgrade failure' + 'sbctl: Signs UEFI boot files for Secure Boot when enabled' + 'journalctl-desktop-notification: Sends desktop notifications when errors occur' +) +makedepends=('git' 'jdk21-openjdk' 'maven') +backup=(etc/limine-entry-tool.conf) +conflicts=('limine-entry-tool') +sha256sums=('69d60071ca5b98760474c08389c17d9b98cf78ff891d9beaac3ddd046e77f62b') + +prepare() { + unset JAVA_OPTS JDK_JAVA_OPTIONS JAVA_TOOL_OPTIONS + JAVA_HOME=/usr/lib/jvm/java-${_jdk_version}-openjdk + if ! command -v ${JAVA_HOME}/bin/javac >/dev/null 2>&1; then + echo "Error: ${JAVA_HOME}/bin/javac not found." >&2 + return 1 + fi +} + +build() { + cd "$srcdir/${_pkgname}-${pkgver}${_extver}" + JAVA_HOME=/usr/lib/jvm/java-${_jdk_version}-openjdk mvn clean package +} + +package() { + cd "$srcdir/${_pkgname}-${pkgver}${_extver}" + src_path="install/arch-linux/${pkgname}" + install -dm 755 $src_path/usr/share/java/ + install -dm 755 $src_path/usr/share/limine-entry-tool.d/ + install -dm 755 $src_path/etc/limine-entry-tool.d/ + install -Dm 644 target/limine-entry-tool*.jar $src_path/usr/share/java/ + install -dm 755 $src_path/usr/share/doc/${pkgname}/ + cp -r README.md CHANGELOG.md $src_path/usr/share/doc/${pkgname}/ + cp -r $src_path/usr $src_path/etc "$pkgdir" +} diff --git a/pkgbuilds/limine-snapper-sync/.SRCINFO b/pkgbuilds/limine-snapper-sync/.SRCINFO new file mode 100644 index 0000000..26761ca --- /dev/null +++ b/pkgbuilds/limine-snapper-sync/.SRCINFO @@ -0,0 +1,30 @@ +pkgbase = limine-snapper-sync + pkgdesc = The tool syncs Limine snapshot entries with Snapper snapshots. + pkgver = 1.16.2 + pkgrel = 1 + url = https://gitlab.com/Zesko/limine-snapper-sync + arch = any + license = GPL3 + makedepends = git + makedepends = jdk21-openjdk + makedepends = maven + depends = bash + depends = java-runtime-headless>=17 + depends = limine + depends = snapper + depends = btrfs-progs + depends = inotify-tools + depends = libnotify + optdepends = limine-dracut-support: It automates kernel installation/removal and Limine boot entry management. + optdepends = limine-mkinitcpio-hook: It automates kernel installation/removal and Limine boot entry management. + optdepends = snap-pac: triggers Snapper to create snapshots during system updates. + optdepends = rsync: Alternative method for restoring snapshots. + optdepends = journalctl-desktop-notification: Sends desktop notifications for errors, including detected hardware issues. + optdepends = b3sum: Fast Blake3 hash function to prevent duplication. + optdepends = xxhash: Fast hashing utility for deduplication with shorter hashes. + conflicts = limine-snapper-sync-git + backup = etc/limine-snapper-sync.conf + source = limine-snapper-sync-1.16.2.tar.gz::https://gitlab.com/Zesko/limine-snapper-sync/-/archive/1.16.2/limine-snapper-sync-1.16.2.tar.gz + sha256sums = e3826875784aa2235757d043799735c7e55386cacfa1ec3e18540f653e167dfc + +pkgname = limine-snapper-sync diff --git a/pkgbuilds/limine-snapper-sync/.gitignore b/pkgbuilds/limine-snapper-sync/.gitignore new file mode 100644 index 0000000..ce7b7f4 --- /dev/null +++ b/pkgbuilds/limine-snapper-sync/.gitignore @@ -0,0 +1,4 @@ +src +pkg +limine-snapper-sync* +clean.sh diff --git a/pkgbuilds/limine-snapper-sync/PKGBUILD b/pkgbuilds/limine-snapper-sync/PKGBUILD new file mode 100644 index 0000000..5a8c353 --- /dev/null +++ b/pkgbuilds/limine-snapper-sync/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Zesko +pkgname="limine-snapper-sync" +pkgver=1.16.2 +pkgrel=1 +pkgdesc="The tool syncs Limine snapshot entries with Snapper snapshots." +arch=("any") +url="https://gitlab.com/Zesko/limine-snapper-sync" +source=("$pkgname-$pkgver.tar.gz::$url/-/archive/$pkgver/$pkgname-$pkgver.tar.gz") +license=("GPL3") +_jre_version=17 +_jdk_version=21 +depends=( + 'bash' + 'java-runtime-headless>='${_jre_version} + 'limine' + 'snapper' + 'btrfs-progs' + 'inotify-tools' + 'libnotify') +optdepends=( + 'limine-dracut-support: It automates kernel installation/removal and Limine boot entry management.' + 'limine-mkinitcpio-hook: It automates kernel installation/removal and Limine boot entry management.' + 'snap-pac: triggers Snapper to create snapshots during system updates.' + 'rsync: Alternative method for restoring snapshots.' + 'journalctl-desktop-notification: Sends desktop notifications for errors, including detected hardware issues.' + 'b3sum: Fast Blake3 hash function to prevent duplication.' + 'xxhash: Fast hashing utility for deduplication with shorter hashes.' +) +makedepends=('git' 'jdk21-openjdk' 'maven') +backup=(etc/limine-snapper-sync.conf) +conflicts=('limine-snapper-sync-git') +sha256sums=('e3826875784aa2235757d043799735c7e55386cacfa1ec3e18540f653e167dfc') + +prepare() { + unset JAVA_OPTS JDK_JAVA_OPTIONS JAVA_TOOL_OPTIONS + JAVA_HOME=/usr/lib/jvm/java-${_jdk_version}-openjdk + if ! command -v ${JAVA_HOME}/bin/javac >/dev/null 2>&1; then + echo "Error: ${JAVA_HOME}/bin/javac not found." >&2 + return 1 + fi +} + +build() { + cd "$srcdir/${pkgname}-${pkgver}" + JAVA_HOME=/usr/lib/jvm/java-${_jdk_version}-openjdk mvn clean package +} + +package() { + cd "$srcdir/${pkgname}-${pkgver}" + src_path="install/arch-linux/" + install -dm 755 $src_path/usr/share/java/ + install -Dm 644 target/limine-snapper-sync.jar $src_path/usr/share/java/ + install -dm 755 $src_path/usr/share/doc/limine-snapper-sync/ + cp -r README.md CHANGELOG.md screenshots $src_path/usr/share/doc/limine-snapper-sync/ + cp -r $src_path/usr $src_path/etc "$pkgdir" +} diff --git a/pkgbuilds/lmstudio/.SRCINFO b/pkgbuilds/lmstudio/.SRCINFO new file mode 100644 index 0000000..a45b86b --- /dev/null +++ b/pkgbuilds/lmstudio/.SRCINFO @@ -0,0 +1,20 @@ +pkgbase = lmstudio + pkgdesc = Discover, download, and run local LLMs + pkgver = 0.3.30.2 + pkgrel = 1 + url = https://lmstudio.ai/ + arch = x86_64 + license = LicenseRef-EULA + makedepends = squashfs-tools + makedepends = graphicsmagick + depends = zlib + depends = hicolor-icon-theme + depends = fuse2 + depends = clblast + noextract = lmstudio-0.3.30.2.AppImage + options = !strip + options = !debug + source = lmstudio-0.3.30.2.AppImage::https://installers.lmstudio.ai/linux/x64/0.3.30-2/LM-Studio-0.3.30-2-x64.AppImage + sha256sums = bf69b9fc1a32197462d3d4e8f6b1e9efdfadd909d3e54d17b8be563697d65915 + +pkgname = lmstudio diff --git a/pkgbuilds/lmstudio/.nvchecker.toml b/pkgbuilds/lmstudio/.nvchecker.toml new file mode 100644 index 0000000..04d9d7a --- /dev/null +++ b/pkgbuilds/lmstudio/.nvchecker.toml @@ -0,0 +1,3 @@ +[lmstudio] +source = "cmd" +cmd = "curl -s https://lmstudio.ai | grep -oP 'https://installers\\.lmstudio\\.ai/linux/x64/\\K[0-9.-]+(?=/LM-Studio-[0-9.-]+-x64\\.AppImage)' | tr - . | sort -u" diff --git a/pkgbuilds/lmstudio/PKGBUILD b/pkgbuilds/lmstudio/PKGBUILD new file mode 100644 index 0000000..7eb5543 --- /dev/null +++ b/pkgbuilds/lmstudio/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: envolution +# Contributor: SoleSoul +# shellcheck shell=bash disable=SC2034,SC2154 + +pkgname=lmstudio +_appname=lm-studio +pkgver=0.3.30.2 +_pkgver="${pkgver%.*}-${pkgver##*.}" +pkgrel=1 +pkgdesc="Discover, download, and run local LLMs" +arch=('x86_64') +url="https://lmstudio.ai/" +license=('LicenseRef-EULA') +depends=('zlib' 'hicolor-icon-theme' 'fuse2' 'clblast') +makedepends=('squashfs-tools' 'graphicsmagick') +options=(!strip !debug) +_appimage="${pkgname}-${pkgver}.AppImage" +source=("${_appimage}::https://installers.lmstudio.ai/linux/x64/${_pkgver}/LM-Studio-${_pkgver}-x64.AppImage") +sha256sums=('bf69b9fc1a32197462d3d4e8f6b1e9efdfadd909d3e54d17b8be563697d65915') +noextract=("${_appimage}") + +prepare() { + rm -rf squashfs-root + chmod +x "${_appimage}" + # get the files we need for packaging + offset=$(./"${_appimage}" --appimage-offset) + unset PAGER # unsquashfs is very picky about pager settings + unsquashfs -q -o "$offset" -d squashfs-root "${_appimage}" \ + "${_appname}.desktop" \ + "usr/share/icons/hicolor/0x0/apps/lm-studio.png" \ + "LICENSE.electron.txt" \ + "LICENSES.chromium.html" + # unsquashfs -o "$offset" -l "${_appimage}" | grep -i license +} + +build() { + # Adjust .desktop so it will work outside of AppImage container + sed -i -E "s|Exec=AppRun|Exec=env DESKTOPINTEGRATION=false /usr/bin/${pkgname}|" \ + "squashfs-root/${_appname}.desktop" + sed -i -E "s|Icon=.*|Icon=${pkgname}|" \ + "squashfs-root/${_appname}.desktop" +} + +package() { + # AppImage + install -Dm755 "${srcdir}/${_appimage}" "${pkgdir}/opt/${pkgname}/${_appname}.AppImage" + install -Dm644 "${srcdir}/squashfs-root/LICENSE"* -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm644 /dev/stdin "$pkgdir/usr/share/licenses/$pkgname/EULA" <<< "https://lmstudio.ai/app-terms" + + + # Desktop file + install -Dm644 "${srcdir}/squashfs-root/${_appname}.desktop" \ + "${pkgdir}/usr/share/applications/${pkgname}.desktop" + + #source icon from squashfs + src_icon="$srcdir/squashfs-root/usr/share/icons/hicolor/0x0/apps/lm-studio.png" + sizes=("16x16" "32x32" "48x48" "64x64" "128x128" "256x256") + + # Loop through each size and create resized icons + for size in "${sizes[@]}"; do + install -dm755 "${pkgdir}/usr/share/icons/hicolor/$size/apps" + gm convert "$src_icon" -resize "$size" "$pkgdir/usr/share/icons/hicolor/$size/apps/${pkgname}.png" + done + + # Symlink executable + install -dm755 "${pkgdir}/usr/bin" + ln -s "/opt/${pkgname}/${_appname}.AppImage" "${pkgdir}/usr/bin/${pkgname}" +} +# vim:set ts=2 sw=2 et: diff --git a/pkgbuilds/localsend-bin/.SRCINFO b/pkgbuilds/localsend-bin/.SRCINFO new file mode 100644 index 0000000..e1c0c66 --- /dev/null +++ b/pkgbuilds/localsend-bin/.SRCINFO @@ -0,0 +1,20 @@ +pkgbase = localsend-bin + pkgdesc = An open source cross-platform alternative to AirDrop + pkgver = 1.17.0 + pkgrel = 1 + url = https://github.com/localsend/localsend + arch = x86_64 + arch = aarch64 + license = MIT + depends = fuse2 + depends = xdg-user-dirs + depends = libayatana-appindicator + provides = localsend + conflicts = localsend + options = !debug + source_x86_64 = https://github.com/localsend/localsend/releases/download/v1.17.0/LocalSend-1.17.0-linux-x86-64.deb + sha256sums_x86_64 = b0244b2c3eacb2a81d61b2662534d6036ab37ace10d6782da36b630c222fa04c + source_aarch64 = https://github.com/localsend/localsend/releases/download/v1.17.0/LocalSend-1.17.0-linux-arm-64.deb + sha256sums_aarch64 = c2c792aadabeecf864f4105f8b1f8693941bc752fda582f0d2b3794765fcf803 + +pkgname = localsend-bin diff --git a/pkgbuilds/localsend-bin/PKGBUILD b/pkgbuilds/localsend-bin/PKGBUILD new file mode 100644 index 0000000..cfcdde5 --- /dev/null +++ b/pkgbuilds/localsend-bin/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Nixuge +# Contributor: Noah Vogt +# Contributor: SpieringsAE (aarch64 addition) + +# Note: +# using the .deb instead of the .tar.gz as it already contains the icons as well as the .desktop file. + +pkgname=localsend-bin +pkgver=1.17.0 +pkgrel=1 +pkgdesc='An open source cross-platform alternative to AirDrop' +url=https://github.com/localsend/localsend +arch=('x86_64' 'aarch64') +license=(MIT) +depends=(fuse2 xdg-user-dirs libayatana-appindicator) +conflicts=('localsend') +provides=('localsend') +options=(!debug) +source_x86_64=("${url}/releases/download/v${pkgver}/LocalSend-${pkgver}-linux-x86-64.deb") +source_aarch64=("${url}/releases/download/v${pkgver}/LocalSend-${pkgver}-linux-arm-64.deb") +sha256sums_x86_64=('b0244b2c3eacb2a81d61b2662534d6036ab37ace10d6782da36b630c222fa04c') +sha256sums_aarch64=('c2c792aadabeecf864f4105f8b1f8693941bc752fda582f0d2b3794765fcf803') +_pkgdesktop="localsend_app.desktop" + + +prepare() { + tar -xf data.tar.xz +} + +build() { + sed -i -E \ + "s|Exec=localsend_app|Exec=localsend|" \ + "${srcdir}/usr/share/applications/${_pkgdesktop}" + + # Adjust .desktop to have it point to the correct icon + sed -i -E 's/^Icon=.+/Icon=localsend/' "${srcdir}/usr/share/applications/${_pkgdesktop}" +} + +package() { + # Desktop + install -Dm644 "${srcdir}/usr/share/applications/${_pkgdesktop}" "${pkgdir}/usr/share/applications/${pkgname%-*}.desktop" + + + # Icons + install -dm644 "${pkgdir}/usr/share/icons/" + cp -a "${srcdir}/usr/share/icons" "${pkgdir}/usr/share" + # Dirty - rename icons to localsend + for res in "128x128" "256x256"; do + mv "${pkgdir}/usr/share/icons/hicolor/${res}/apps/localsend_app.png" "${pkgdir}/usr/share/icons/hicolor/${res}/apps/localsend.png" + done + + + # Executable + install -dm755 "${pkgdir}/opt/${pkgname%-*}/" + cp -a "${srcdir}/usr/share/localsend_app/." "${pkgdir}/opt/${pkgname%-*}" + # Same as icons - rename to localsend + mv "${pkgdir}/opt/${pkgname%-*}/localsend_app" "${pkgdir}/opt/${pkgname%-*}/localsend" + + # Symlink executable + install -dm755 "${pkgdir}/usr/bin" + ln -s \ + "/opt/${pkgname%-*}/${pkgname%-*}" \ + "${pkgdir}/usr/bin/${pkgname%-*}" +} diff --git a/pkgbuilds/localsend/.SRCINFO b/pkgbuilds/localsend/.SRCINFO new file mode 100644 index 0000000..f047a03 --- /dev/null +++ b/pkgbuilds/localsend/.SRCINFO @@ -0,0 +1,22 @@ +pkgbase = localsend + pkgdesc = An open source cross-platform alternative to AirDrop + pkgver = 1.17.0 + pkgrel = 2 + url = https://github.com/localsend/localsend + arch = x86_64 + license = MIT + makedepends = clang + makedepends = cmake + makedepends = fvm + makedepends = git + makedepends = lld + makedepends = llvm + makedepends = ninja + makedepends = patchelf + makedepends = rustup + depends = libayatana-appindicator + options = !lto + source = localsend-1.17.0.tar.gz::https://github.com/localsend/localsend/archive/refs/tags/v1.17.0.tar.gz + sha256sums = 921c5843947580ae1b64d0d3a6edeefb9e07e8a917d0830af6a47d42e40de264 + +pkgname = localsend diff --git a/pkgbuilds/localsend/.gitignore b/pkgbuilds/localsend/.gitignore new file mode 100644 index 0000000..018a3de --- /dev/null +++ b/pkgbuilds/localsend/.gitignore @@ -0,0 +1,4 @@ +* +!PKGBUILD +!.SRCINFO +!.gitignore diff --git a/pkgbuilds/localsend/PKGBUILD b/pkgbuilds/localsend/PKGBUILD new file mode 100644 index 0000000..0544140 --- /dev/null +++ b/pkgbuilds/localsend/PKGBUILD @@ -0,0 +1,99 @@ +# Maintainer: +# Contributor: Patrick Northon + +## links +# https://localsend.org/ +# https://github.com/localsend/localsend + +## options +: ${_install_path:=usr/lib} + +_pkgname="localsend" +pkgname="$_pkgname" +pkgver=1.17.0 +pkgrel=2 +pkgdesc="An open source cross-platform alternative to AirDrop" +url="https://github.com/localsend/localsend" +license=('MIT') +arch=('x86_64') + +depends=( + 'libayatana-appindicator' +) +makedepends=( + 'clang' + 'cmake' + 'fvm' # AUR + 'git' + 'lld' + 'llvm' + 'ninja' + 'patchelf' + 'rustup' +) + +options=('!lto') + +_pkgsrc="$_pkgname-$pkgver" +_pkgext="tar.gz" +source=("$_pkgsrc.$_pkgext"::"$url/archive/refs/tags/v$pkgver.$_pkgext") +sha256sums=('921c5843947580ae1b64d0d3a6edeefb9e07e8a917d0830af6a47d42e40de264') + +prepare() { + sed -E 's&^(channel) = .*$&\1 = "stable"&' -i "$_pkgsrc/app/rust-toolchain.toml" +} + +build() ( + export FVM_CACHE_PATH="$SRCDEST/fvm-cache" + + export CXXFLAGS+=' -Wno-error=deprecated-declarations' + + cd "$_pkgsrc/app" + fvm install + + fvm flutter --disable-analytics + #fvm flutter pub upgrade --major-versions + fvm flutter --no-version-check pub get + fvm flutter build linux --no-pub --release +) + +package() { + cd "$_pkgsrc/app/build/linux/x64/release/bundle" + + # files + install -Dm755 "localsend_app" "$pkgdir/$_install_path/$_pkgname/$_pkgname" + cp --reflink=auto -r lib/ "$pkgdir/$_install_path/$_pkgname/" + cp --reflink=auto -r data/ "$pkgdir/$_install_path/$_pkgname/" + + # runpath + patchelf --set-rpath '$ORIGIN/lib' "$pkgdir/$_install_path/$_pkgname/$_pkgname" + for i in "$pkgdir/$_install_path/$_pkgname/lib"/*.so; do + [ -z "$(patchelf --print-rpath "$i")" ] && continue + patchelf --set-rpath '$ORIGIN' "$i" + done + + # symlink + install -dm755 "${pkgdir}/usr/bin" + ln -sfr "$pkgdir/$_install_path/$_pkgname/$_pkgname" "$pkgdir/usr/bin/${_pkgname}" + + # icon + install -Dm644 "$srcdir/$_pkgsrc/app/build/flutter_assets/assets/img/logo-512.png" "$pkgdir/usr/share/pixmaps/$_pkgname.png" + + # launcher + install -Dm644 /dev/stdin "$pkgdir/usr/share/applications/$_pkgname.desktop" << END +[Desktop Entry] +Type=Application +Name=LocalSend +Comment=$pkgdesc +Exec=$_pkgname +Icon=$_pkgname +Terminal=false +Categories=Utility;Network; +END + + # license + install -Dm644 "$srcdir/$_pkgsrc/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname/" + + # permissions + chmod -R u+rwX,go+rX,go-w "$pkgdir/" +} diff --git a/pkgbuilds/macbook12-spi-driver-dkms/.SRCINFO b/pkgbuilds/macbook12-spi-driver-dkms/.SRCINFO new file mode 100644 index 0000000..d1947eb --- /dev/null +++ b/pkgbuilds/macbook12-spi-driver-dkms/.SRCINFO @@ -0,0 +1,16 @@ +pkgbase = macbook12-spi-driver-dkms + pkgdesc = Driver for the keyboard, touchpad and touchbar found in newer MacBook (Pro) models + pkgver = 0+git.315 + pkgrel = 1 + url = https://github.com/marc-git/macbook12-spi-driver + arch = i686 + arch = x86_64 + license = GPL2 + makedepends = git + depends = dkms + source = git+https://github.com/marc-git/macbook12-spi-driver.git#branch=touchbar-driver-hid-driver + source = dkms.conf + sha256sums = SKIP + sha256sums = e42243352d015a78e5d13260361d3052d0b84c4105bcb89191a319f2249cc47b + +pkgname = macbook12-spi-driver-dkms diff --git a/pkgbuilds/macbook12-spi-driver-dkms/.gitignore b/pkgbuilds/macbook12-spi-driver-dkms/.gitignore new file mode 100644 index 0000000..802cfe0 --- /dev/null +++ b/pkgbuilds/macbook12-spi-driver-dkms/.gitignore @@ -0,0 +1,4 @@ +/src/ +/pkg/ +/*.tar.* +/macbook12-spi-driver/ diff --git a/pkgbuilds/macbook12-spi-driver-dkms/PKGBUILD b/pkgbuilds/macbook12-spi-driver-dkms/PKGBUILD new file mode 100644 index 0000000..3254326 --- /dev/null +++ b/pkgbuilds/macbook12-spi-driver-dkms/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Christoph Gysin +# Maintainer: Andrey Melentyev +_pkgbase=macbook12-spi-driver +pkgname=(${_pkgbase}-dkms) +pkgver=0+git.315 +pkgrel=1 +pkgdesc="Driver for the keyboard, touchpad and touchbar found in newer MacBook (Pro) models" +arch=('i686' 'x86_64') +url="https://github.com/marc-git/macbook12-spi-driver" +license=('GPL2') +depends=('dkms') +makedepends=('git') +optdepends=() +source=(git+https://github.com/marc-git/macbook12-spi-driver.git#branch=touchbar-driver-hid-driver + dkms.conf) +sha256sums=('SKIP' + 'e42243352d015a78e5d13260361d3052d0b84c4105bcb89191a319f2249cc47b') + +pkgver() { + cd $_pkgbase + echo "0+git.$(git rev-list HEAD --count)" +} + +package() { + install -dm755 "${pkgdir}"/usr/src/${_pkgbase}-${pkgver} + + # Copy sources (including Makefile) + cp -r ${_pkgbase}/* "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/ + + # Copy dkms.conf over the original one from the repo + install -Dm644 dkms.conf "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/dkms.conf + + # Set name and version + sed -e "s/@_PKGBASE@/${_pkgbase}/" \ + -e "s/@PKGVER@/${pkgver}/" \ + -i "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/dkms.conf +} diff --git a/pkgbuilds/macbook12-spi-driver-dkms/dkms.conf b/pkgbuilds/macbook12-spi-driver-dkms/dkms.conf new file mode 100644 index 0000000..8bdece0 --- /dev/null +++ b/pkgbuilds/macbook12-spi-driver-dkms/dkms.conf @@ -0,0 +1,17 @@ +PACKAGE_NAME="@_PKGBASE@" +PACKAGE_VERSION="@PKGVER@" +AUTOINSTALL="yes" +CLEAN="make clean" + +BUILT_MODULE_NAME[0]="applespi" +BUILT_MODULE_NAME[1]="apple-ibridge" +BUILT_MODULE_NAME[2]="apple-ib-tb" +BUILT_MODULE_NAME[3]="apple-ib-als" +MAKE[0]="make KDIR=/usr/lib/modules/$kernelver/build" +MAKE[1]="make KDIR=/usr/lib/modules/$kernelver/build" +MAKE[2]="make KDIR=/usr/lib/modules/$kernelver/build" +MAKE[3]="make KDIR=/usr/lib/modules/$kernelver/build" +DEST_MODULE_LOCATION[0]="/kernel/drivers/spi" +DEST_MODULE_LOCATION[1]="/kernel/drivers/misc" +DEST_MODULE_LOCATION[2]="/kernel/drivers/misc" +DEST_MODULE_LOCATION[3]="/kernel/drivers/misc" diff --git a/pkgbuilds/nautilus-dropbox/.SRCINFO b/pkgbuilds/nautilus-dropbox/.SRCINFO new file mode 100644 index 0000000..0d3380f --- /dev/null +++ b/pkgbuilds/nautilus-dropbox/.SRCINFO @@ -0,0 +1,21 @@ +pkgbase = nautilus-dropbox + pkgdesc = Dropbox Nautilus Extension + pkgver = 2022.12.05 + pkgrel = 1 + url = https://www.dropbox.com/ + arch = x86_64 + license = custom:CC-BY-ND-3 + license = GPL + makedepends = python + makedepends = python-docutils + makedepends = python-gobject + makedepends = gnome-common + depends = nautilus + depends = libnautilus-extension + options = !libtool + options = !emptydirs + source = https://github.com/dropbox/nautilus-dropbox.git + sha256sums = SKIP + +pkgname = nautilus-dropbox + diff --git a/pkgbuilds/nautilus-dropbox/PKGBUILD b/pkgbuilds/nautilus-dropbox/PKGBUILD new file mode 100644 index 0000000..2abdab6 --- /dev/null +++ b/pkgbuilds/nautilus-dropbox/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Corey Berla +# Contributor: M.Reynolds +# Contributor: Vlad M. +# Contributor: Christophe Gueret +# Contributor: josephgbr +# Contributor: cmorlok +# Contributor: fazibear +# Contributor: neuromante +# Contributor: Gordin <9ordin @t gmail.com> + +pkgname=nautilus-dropbox +pkgdesc="Dropbox Nautilus Extension" +pkgver=2022.12.05 +pkgrel=1 +arch=(x86_64) +url="https://www.dropbox.com/" +license=('custom:CC-BY-ND-3' 'GPL') +depends=(nautilus libnautilus-extension dropbox) +makedepends=(python python-docutils python-gobject gnome-common) +options=('!libtool' '!emptydirs') +_commit=8cc1635a0e0e6edf90beb4b6f9c9ecb2b39e41f3 +source=("git+https://github.com/dropbox/nautilus-dropbox.git#commit=$_commit") +sha256sums=('SKIP') + +build() { + cd nautilus-dropbox + ./autogen.sh + make +} + +package() { + cd nautilus-dropbox + make DESTDIR="$pkgdir" install + + # install the common license + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + + # remove executables and depend on 'dropbox' package + rm "$pkgdir/usr/bin/dropbox" + rm "$pkgdir/usr/share/applications/dropbox.desktop" + rm "$pkgdir/usr/share/man/man1/dropbox.1" +} + diff --git a/pkgbuilds/omarchy-chromium-bin/.SRCINFO b/pkgbuilds/omarchy-chromium-bin/.SRCINFO new file mode 100644 index 0000000..12cab6d --- /dev/null +++ b/pkgbuilds/omarchy-chromium-bin/.SRCINFO @@ -0,0 +1,33 @@ +pkgbase = omarchy-chromium-bin + pkgdesc = A web browser built for speed, simplicity, and security, with patches for Omarchy (binary package) + pkgver = 141.0.7390.122 + pkgrel = 6 + url = https://www.chromium.org/Home + arch = x86_64 + arch = aarch64 + license = BSD-3-Clause + depends = gtk3 + depends = nss + depends = alsa-lib + depends = xdg-utils + depends = libxss + depends = libcups + depends = libgcrypt + depends = ttf-liberation + depends = systemd + depends = dbus + depends = libpulse + depends = pciutils + depends = libva + depends = libffi + depends = desktop-file-utils + depends = hicolor-icon-theme + provides = chromium + conflicts = chromium + conflicts = omarchy-chromium + source_x86_64 = https://github.com/omacom-io/omarchy-chromium/releases/download/v141.0.7390.122-6/omarchy-chromium-141.0.7390.122-6-x86_64.pkg.tar.zst + sha256sums_x86_64 = 5fb55b3957cba45e768bc94e9789818266e64a45ec12178de07e9c29907e138f + source_aarch64 = https://github.com/omacom-io/omarchy-chromium/releases/download/v141.0.7390.122-6/omarchy-chromium-141.0.7390.122-6-aarch64.pkg.tar.zst + sha256sums_aarch64 = 27b059c1a705172cbc296fd11913e6e0f66d8fcc588b2fe07a43d2f0a0c94e3f + +pkgname = omarchy-chromium-bin diff --git a/pkgbuilds/omarchy-chromium-bin/PKGBUILD b/pkgbuilds/omarchy-chromium-bin/PKGBUILD new file mode 100644 index 0000000..ee66d6b --- /dev/null +++ b/pkgbuilds/omarchy-chromium-bin/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Helmut Januschka + +pkgname=omarchy-chromium-bin +pkgver=141.0.7390.122 +pkgrel=6 +pkgdesc="A web browser built for speed, simplicity, and security, with patches for Omarchy (binary package)" +arch=('x86_64' 'aarch64') +url="https://www.chromium.org/Home" +license=('BSD-3-Clause') +depends=('gtk3' 'nss' 'alsa-lib' 'xdg-utils' 'libxss' 'libcups' 'libgcrypt' + 'ttf-liberation' 'systemd' 'dbus' 'libpulse' 'pciutils' 'libva' + 'libffi' 'desktop-file-utils' 'hicolor-icon-theme') +provides=('chromium') +conflicts=('chromium' 'omarchy-chromium') + +# Architecture-specific sources +source_x86_64=("https://github.com/omacom-io/omarchy-chromium/releases/download/v141.0.7390.122-6/omarchy-chromium-141.0.7390.122-6-x86_64.pkg.tar.zst") +source_aarch64=("https://github.com/omacom-io/omarchy-chromium/releases/download/v141.0.7390.122-6/omarchy-chromium-141.0.7390.122-6-aarch64.pkg.tar.zst") +sha256sums_x86_64=('5fb55b3957cba45e768bc94e9789818266e64a45ec12178de07e9c29907e138f') +sha256sums_aarch64=('27b059c1a705172cbc296fd11913e6e0f66d8fcc588b2fe07a43d2f0a0c94e3f') + +package() { + cd "$srcdir" + + # Extract the package (filename varies by architecture) + tar -xf omarchy-chromium-141.0.7390.122-6-${CARCH}.pkg.tar.zst + + # Copy everything to the target directory + cp -r usr "$pkgdir/" +} diff --git a/pkgbuilds/openai-codex-bin/.SRCINFO b/pkgbuilds/openai-codex-bin/.SRCINFO new file mode 100644 index 0000000..523c255 --- /dev/null +++ b/pkgbuilds/openai-codex-bin/.SRCINFO @@ -0,0 +1,18 @@ +pkgbase = openai-codex-bin + pkgdesc = Lightweight coding agent that runs in your terminal (binary release) + pkgver = 0.47.0 + pkgrel = 1 + url = https://github.com/openai/codex + arch = x86_64 + arch = aarch64 + license = Apache + optdepends = git: for working with git repositories + optdepends = ripgrep: accelerated large-repo search + provides = openai-codex + conflicts = openai-codex + source_x86_64 = codex-0.47.0-x86_64.tar.gz::https://github.com/openai/codex/releases/download/rust-v0.47.0/codex-x86_64-unknown-linux-gnu.tar.gz + sha256sums_x86_64 = 89694a9347fc8adb723645bad5cd25a6afe393cb2896f37a8beaa594412463f2 + source_aarch64 = codex-0.47.0-aarch64.tar.gz::https://github.com/openai/codex/releases/download/rust-v0.47.0/codex-aarch64-unknown-linux-gnu.tar.gz + sha256sums_aarch64 = b8e050dc0940d5375ab4b9d9fe08b7cddf0c6608a2c94bfe5e007f664b677b52 + +pkgname = openai-codex-bin diff --git a/pkgbuilds/openai-codex-bin/PKGBUILD b/pkgbuilds/openai-codex-bin/PKGBUILD new file mode 100644 index 0000000..828f698 --- /dev/null +++ b/pkgbuilds/openai-codex-bin/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jack Mahoney +pkgname=openai-codex-bin +pkgver=0.47.0 +pkgrel=1 +pkgdesc="Lightweight coding agent that runs in your terminal (binary release)" +arch=('x86_64' 'aarch64') +url="https://github.com/openai/codex" +license=('Apache') +provides=('openai-codex') +conflicts=('openai-codex') +optdepends=( + 'git: for working with git repositories' + 'ripgrep: accelerated large-repo search' +) + +source_x86_64=( + "codex-${pkgver}-x86_64.tar.gz::https://github.com/openai/codex/releases/download/rust-v${pkgver}/codex-x86_64-unknown-linux-gnu.tar.gz" +) +sha256sums_x86_64=('89694a9347fc8adb723645bad5cd25a6afe393cb2896f37a8beaa594412463f2') +sha256sums_aarch64=('b8e050dc0940d5375ab4b9d9fe08b7cddf0c6608a2c94bfe5e007f664b677b52') + +source_aarch64=( + "codex-${pkgver}-aarch64.tar.gz::https://github.com/openai/codex/releases/download/rust-v${pkgver}/codex-aarch64-unknown-linux-gnu.tar.gz" +) + +package() { + cd "$srcdir" + + if [[ "$CARCH" == "x86_64" ]]; then + install -Dm755 "codex-x86_64-unknown-linux-gnu" "$pkgdir/usr/bin/codex" + fi + + if [[ "$CARCH" == "aarch64" ]]; then + install -Dm755 "codex-aarch64-unknown-linux-gnu" "$pkgdir/usr/bin/codex" + fi +} diff --git a/pkgbuilds/openai-codex/.SRCINFO b/pkgbuilds/openai-codex/.SRCINFO new file mode 100644 index 0000000..e69620e --- /dev/null +++ b/pkgbuilds/openai-codex/.SRCINFO @@ -0,0 +1,19 @@ +pkgbase = openai-codex + pkgdesc = Lightweight coding agent that runs in your terminal + pkgver = 0.50.0 + pkgrel = 1 + url = https://github.com/openai/codex + arch = x86_64 + arch = aarch64 + license = Apache-2.0 + makedepends = cargo + depends = openssl + depends = gcc-libs + depends = glibc + optdepends = git + optdepends = ripgrep: accelerated large-repo search + options = !lto + source = openai-codex-0.50.0.tar.gz::https://github.com/openai/codex/archive/refs/tags/rust-v0.50.0.tar.gz + b2sums = fe729cf385b9584ba64cd65656abd60e172a2679e801ca9a6ebd017f38d0037c61479b14c0222f97302038af6302430f4073ec2e7854a0aabcd28192e560ccce + +pkgname = openai-codex diff --git a/pkgbuilds/openai-codex/.nvchecker.toml b/pkgbuilds/openai-codex/.nvchecker.toml new file mode 100644 index 0000000..5337e3f --- /dev/null +++ b/pkgbuilds/openai-codex/.nvchecker.toml @@ -0,0 +1,5 @@ +[openai-codex] +source = "github" +github = "openai/codex" +prefix = "rust-v" +use_max_release = true diff --git a/pkgbuilds/openai-codex/PKGBUILD b/pkgbuilds/openai-codex/PKGBUILD new file mode 100644 index 0000000..80adc3c --- /dev/null +++ b/pkgbuilds/openai-codex/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Christopher Cooper +pkgname=openai-codex +pkgver=0.50.0 +pkgrel=1 +pkgdesc="Lightweight coding agent that runs in your terminal" +arch=('x86_64' 'aarch64') +url="https://github.com/openai/codex" +license=('Apache-2.0') +depends=( + 'openssl' + 'gcc-libs' + 'glibc' +) +makedepends=( + 'cargo' +) +optdepends=( + 'git' + 'ripgrep: accelerated large-repo search' +) +# LTO seems to cause build failures, details unclear +options=('!lto') +source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/rust-v${pkgver}.tar.gz") +b2sums=('fe729cf385b9584ba64cd65656abd60e172a2679e801ca9a6ebd017f38d0037c61479b14c0222f97302038af6302430f4073ec2e7854a0aabcd28192e560ccce') + +prepare() { + cd "codex-rust-v${pkgver}/codex-rs" + + export RUSTUP_TOOLCHAIN=stable + + # Cargo.lock seems to be outdated, do not use --locked. + cargo fetch --target "$(rustc -vV | sed -n 's/host: //p')" +} + +build() { + cd "codex-rust-v${pkgver}/codex-rs" + + export RUSTUP_TOOLCHAIN=stable + export CARGO_TARGET_DIR=target + + cargo build --release --frozen +} + +# check() omitted - there seems to be some irrelevant test failures + +package() { + cd "codex-rust-v${pkgver}/codex-rs" + + install -Dm755 -t "${pkgdir}/usr/bin" "target/release/codex" + install -Dm755 -t "${pkgdir}/usr/bin" "target/release/codex-exec" + install -Dm755 -t "${pkgdir}/usr/bin" "target/release/codex-linux-sandbox" +} diff --git a/pkgbuilds/opencode/.SRCINFO b/pkgbuilds/opencode/.SRCINFO new file mode 100644 index 0000000..f961b15 --- /dev/null +++ b/pkgbuilds/opencode/.SRCINFO @@ -0,0 +1,21 @@ +pkgbase = opencode + pkgdesc = The AI coding agent built for the terminal. + pkgver = 0.15.18 + pkgrel = 1 + url = https://github.com/sst/opencode + arch = aarch64 + arch = x86_64 + license = MIT + makedepends = git + makedepends = bun-bin + makedepends = go + depends = fzf + depends = ripgrep + provides = opencode + conflicts = opencode-bin + options = !debug + options = !strip + source = opencode-0.15.18.tar.gz::https://github.com/sst/opencode/archive/v0.15.18.tar.gz + sha256sums = SKIP + +pkgname = opencode diff --git a/pkgbuilds/opencode/PKGBUILD b/pkgbuilds/opencode/PKGBUILD index 25241a6..a27b9e7 100644 --- a/pkgbuilds/opencode/PKGBUILD +++ b/pkgbuilds/opencode/PKGBUILD @@ -2,7 +2,7 @@ # Maintainer: adam pkgname='opencode' -pkgver=0.15.8 +pkgver=0.15.18 options=('!debug' '!strip') pkgrel=1 pkgdesc='The AI coding agent built for the terminal.' @@ -14,24 +14,12 @@ conflicts=('opencode-bin') depends=('fzf' 'ripgrep') makedepends=('git' 'bun-bin' 'go') -source=("opencode-${pkgver}.tar.gz::https://github.com/sst/opencode/archive/v0.15.8.tar.gz") +source=("opencode-${pkgver}.tar.gz::https://github.com/sst/opencode/archive/v0.15.18.tar.gz") sha256sums=('SKIP') build() { cd "opencode-${pkgver}" bun install - - # Fix for bun compile not finding platform-specific @parcel/watcher - # The compile step needs this to be explicitly installed - case "${CARCH}" in - x86_64) - bun add @parcel/watcher-linux-x64-glibc --optional - ;; - aarch64) - bun add @parcel/watcher-linux-arm64-glibc --optional - ;; - esac - cd packages/tui CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=${pkgver}" -o tui cmd/opencode/main.go cd ../opencode diff --git a/pkgbuilds/pinta/.SRCINFO b/pkgbuilds/pinta/.SRCINFO new file mode 100644 index 0000000..bf0cf8d --- /dev/null +++ b/pkgbuilds/pinta/.SRCINFO @@ -0,0 +1,27 @@ +pkgbase = pinta + pkgdesc = Drawing/editing program modeled after Paint.NET. It's goal is to provide a simplified alternative to GIMP for casual users + pkgver = 3.0.4 + pkgrel = 1 + url = https://pinta-project.com + arch = any + license = MIT + makedepends = pkgconf + makedepends = autoconf-archive + makedepends = intltool + makedepends = dotnet-sdk + makedepends = dotnet-runtime + makedepends = dotnet-host + makedepends = dotnet-targeting-pack + makedepends = gtk4 + makedepends = perl + depends = dotnet-runtime + depends = dotnet-host + depends = libadwaita + depends = hicolor-icon-theme + depends = webp-pixbuf-loader + provides = pinta + conflicts = pinta-git + source = Pinta-3.0.4.tar.gz::https://github.com/PintaProject/Pinta/archive/refs/tags/3.0.4.tar.gz + sha256sums = 3472ef6b7307ec3942d3cefb299649f0b01e69fc951f6f0b04fbd6c083f770c4 + +pkgname = pinta diff --git a/pkgbuilds/pinta/.gitignore b/pkgbuilds/pinta/.gitignore new file mode 100644 index 0000000..3dbe83f --- /dev/null +++ b/pkgbuilds/pinta/.gitignore @@ -0,0 +1,5 @@ +* +!.gitignore +!.nvchecker.toml +!PKGBUILD +!.SRCINFO diff --git a/pkgbuilds/pinta/.nvchecker.toml b/pkgbuilds/pinta/.nvchecker.toml new file mode 100644 index 0000000..3c0b0a7 --- /dev/null +++ b/pkgbuilds/pinta/.nvchecker.toml @@ -0,0 +1,4 @@ +["pinta"] +source = "github" +github = "PintaProject/Pinta" +use_latest_release = true diff --git a/pkgbuilds/pinta/PKGBUILD b/pkgbuilds/pinta/PKGBUILD new file mode 100644 index 0000000..91fdbec --- /dev/null +++ b/pkgbuilds/pinta/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Rafael Baboni Dominiquini + +pkgname=pinta +pkgver=3.0.4 +pkgrel=1 +pkgdesc="Drawing/editing program modeled after Paint.NET. It's goal is to provide a simplified alternative to GIMP for casual users" +arch=(any) +url="https://pinta-project.com" +license=(MIT) +depends=(dotnet-runtime dotnet-host libadwaita hicolor-icon-theme webp-pixbuf-loader) +makedepends=(pkgconf autoconf-archive intltool dotnet-sdk dotnet-runtime dotnet-host dotnet-targeting-pack gtk4 perl) +provides=($pkgname) +conflicts=($pkgname-git) +source=("Pinta-${pkgver}.tar.gz::https://github.com/PintaProject/Pinta/archive/refs/tags/${pkgver}.tar.gz") +sha256sums=('3472ef6b7307ec3942d3cefb299649f0b01e69fc951f6f0b04fbd6c083f770c4') + +prepare() { + cd "${srcdir}/Pinta-${pkgver}" + + for file in *.md *.txt; do + basename=$(tr '[:lower:]' '[:upper:]' <<< "${file%.*}") + newname="$basename.${file#*.}" + [ ! "$file" == "$newname" ] && mv "$file" "$newname" + done + + sed -i 's/net8.0/net9.0/g' Directory.Build.props + sed -i 's/StartupWMClass=Pinta/StartupWMClass=com.github.PintaProject.Pinta/g' xdg/pinta.desktop.in + + ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var +} + +build() { + cd "${srcdir}/Pinta-${pkgver}" + + make +} + +package() { + cd "${srcdir}/Pinta-${pkgver}" + + make DESTDIR="${pkgdir}" install + + install -Dm644 -t "${pkgdir}/usr/share/doc/${pkgname}/" *.md + install -Dm644 -t "${pkgdir}/usr/share/licenses/${pkgname}/" LICENSE*.txt +} diff --git a/pkgbuilds/python-terminaltexteffects/.SRCINFO b/pkgbuilds/python-terminaltexteffects/.SRCINFO new file mode 100644 index 0000000..04a721e --- /dev/null +++ b/pkgbuilds/python-terminaltexteffects/.SRCINFO @@ -0,0 +1,19 @@ +pkgbase = python-terminaltexteffects + pkgdesc = Visual effects engine applied to text in the terminal. + pkgver = 0.12.0 + pkgrel = 1 + url = https://github.com/ChrisBuilds/terminaltexteffects + arch = any + license = MIT + makedepends = python-build + makedepends = python-installer + makedepends = python-wheel + makedepends = python-setuptools + makedepends = python-poetry-core + depends = python + provides = terminaltexteffects + conflicts = terminaltexteffects + source = python-terminaltexteffects-0.12.0.tar.gz::https://github.com/ChrisBuilds/terminaltexteffects/archive/refs/tags/release-0.12.0.tar.gz + b2sums = 5129a3c28666d4ab1dac500ce47bd06f0a52ab053d6b39f0b6c5c592c6c2958ff20b63a658bd6fda2130f925ebb424415f935ce96565bbfbd233384ff1eb6de4 + +pkgname = python-terminaltexteffects diff --git a/pkgbuilds/python-terminaltexteffects/.gitignore b/pkgbuilds/python-terminaltexteffects/.gitignore new file mode 100644 index 0000000..218cc90 --- /dev/null +++ b/pkgbuilds/python-terminaltexteffects/.gitignore @@ -0,0 +1,5 @@ +* +!PKGBUILD +!.SRCINFO +!.gitignore +!.nvchecker.toml diff --git a/pkgbuilds/python-terminaltexteffects/.nvchecker.toml b/pkgbuilds/python-terminaltexteffects/.nvchecker.toml new file mode 100644 index 0000000..cfad092 --- /dev/null +++ b/pkgbuilds/python-terminaltexteffects/.nvchecker.toml @@ -0,0 +1,5 @@ +[terminaltexteffects] +source = "github" +github = "ChrisBuilds/terminaltexteffects" +use_latest_release = true +prefix = "release-" diff --git a/pkgbuilds/python-terminaltexteffects/PKGBUILD b/pkgbuilds/python-terminaltexteffects/PKGBUILD new file mode 100644 index 0000000..8d73868 --- /dev/null +++ b/pkgbuilds/python-terminaltexteffects/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Daniel Chesters +# Contributor: RiverOnVenus +pkgname=python-terminaltexteffects +_pkgname=terminaltexteffects +pkgver=0.12.0 +pkgrel=1 +pkgdesc='Visual effects engine applied to text in the terminal. ' +url="https://github.com/ChrisBuilds/terminaltexteffects" +arch=('any') +license=('MIT') +depends=('python') +makedepends=('python-build' 'python-installer' 'python-wheel' 'python-setuptools' 'python-poetry-core') +provides=('terminaltexteffects') +conflicts=('terminaltexteffects') +source=("$pkgname-$pkgver.tar.gz::https://github.com/ChrisBuilds/terminaltexteffects/archive/refs/tags/release-$pkgver.tar.gz") + +build() { + cd "$_pkgname-release-$pkgver" || exit + python -m build --wheel --no-isolation +} + +package() { + cd "$_pkgname-release-$pkgver" || exit + python -m installer --destdir="$pkgdir" dist/*.whl + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim: set ts=2 sw=2 et: +b2sums=('5129a3c28666d4ab1dac500ce47bd06f0a52ab053d6b39f0b6c5c592c6c2958ff20b63a658bd6fda2130f925ebb424415f935ce96565bbfbd233384ff1eb6de4') diff --git a/pkgbuilds/spotify/.SRCINFO b/pkgbuilds/spotify/.SRCINFO new file mode 100644 index 0000000..da0ea65 --- /dev/null +++ b/pkgbuilds/spotify/.SRCINFO @@ -0,0 +1,39 @@ +pkgbase = spotify + pkgdesc = A proprietary music streaming service + pkgver = 1.2.74.477 + pkgrel = 2 + epoch = 1 + url = https://www.spotify.com + arch = x86_64 + license = custom + depends = alsa-lib>=1.0.14 + depends = gtk3 + depends = libxss + depends = desktop-file-utils + depends = openssl + depends = nss + depends = at-spi2-atk + depends = libcurl-gnutls + depends = libsm + depends = libayatana-appindicator + optdepends = ffmpeg4.4: Adds support for playback of local files + optdepends = zenity: Adds support for importing local files + optdepends = libnotify: Desktop notifications + options = !strip + source = spotify-1.2.74.477-g3be53afe-x86_64.deb::http://repository.spotify.com/pool/non-free/s/spotify-client/spotify-client_1.2.74.477.g3be53afe_amd64.deb + source = spotify.sh + source = spotify.protocol + source = LICENSE + source = spotify-1.2.74.477-2-Release::http://repository.spotify.com/dists/testing/Release + source = spotify-1.2.74.477-2-Release.sig::http://repository.spotify.com/dists/testing/Release.gpg + source = spotify-1.2.74.477-2-x86_64-Packages::http://repository.spotify.com/dists/testing/non-free/binary-amd64/Packages + validpgpkeys = B420FD3777CCE3A7F0076B55C85668DF69375001 + sha512sums = c002c778dd98d3c9425de921a69c630bbab8f6fd5a4b2edd1ac04d76f10a57c92f2f3d6a93a3ff3fb60f2ec911059c20bfc7f7a18a5aa472538932d49e6d666f + sha512sums = da48b628a4ea925dd8521133ebf364b261b11aed252d264dde6605d915cdb631919ffe672c58534bcdb60869e5d87a49a60a8198780b99517123f0031e83fdb1 + sha512sums = 999abe46766a4101e27477f5c9f69394a4bb5c097e2e048ec2c6cb93dfa1743eb436bde3768af6ba1b90eaac78ea8589d82e621f9cbe7d9ab3f41acee6e8ca20 + sha512sums = 2e16f7c7b09e9ecefaa11ab38eb7a792c62ae6f33d95ab1ff46d68995316324d8c5287b0d9ce142d1cf15158e61f594e930260abb8155467af8bc25779960615 + sha512sums = SKIP + sha512sums = SKIP + sha512sums = SKIP + +pkgname = spotify diff --git a/pkgbuilds/spotify/LICENSE b/pkgbuilds/spotify/LICENSE new file mode 100644 index 0000000..3dbb4c4 --- /dev/null +++ b/pkgbuilds/spotify/LICENSE @@ -0,0 +1,349 @@ +Spotify Terms and Conditions of Use + +Effective as of 1 November 2016 + +1 Introduction +2 Changes to the Agreements +3 Enjoying Spotify +4 Rights we grant you +5 Third Party Applications +6 User-Generated Content +7 Rights you grant us +8 User guidelines +9 Infringement and reporting User Content +10 Service limitations and modifications +11 Brand Accounts +12 Spotify Support Community +13 Customer support +14 Export control +15 Payments, cancellations, and cooling off +16 Term and termination +17 Warranty and disclaimer +18 Limitation +19 Third party rights +20 Entire agreement +21 Severability and waiver +22 Assignment +23 Indemnification +24 Choice of law, mandatory arbitration and venue +25 Contact us + +Hello, and welcome to our Terms and Conditions of Use. This is important and affects your legal rights, so please read them and our Privacy Policy and other terms referenced in this document carefully. We hope you’re sitting comfortably and listening to some great music. Here we go… + +1 Introduction + +Thanks for choosing Spotify ("Spotify", "we", "us", "our"). By signing up or otherwise using the Spotify service, websites, and software applications (together, the "Spotify Service" or "Service"), or accessing any content or material that is made available by Spotify through the Service (the "Content") you are entering into a binding contract with the Spotify entity indicated at the bottom of this document. The Spotify Service also includes the Spotify Support Community as further described in the Spotify Support Community section. + +The Spotify Service includes social and interactive features. Use of the Spotify Service relies on several technical requirements. + +Your agreement with us includes these Terms and Conditions of Use ("Terms") and our Privacy Policy. (The Terms, Privacy Policy, and any additional terms that you agree to, as discussed in the Entire Agreement section, are referred to together as the "Agreements".) If you wish to review the terms of the Agreements, the effective version of the Agreements can be found on Spotify’s website. You acknowledge that you have read and understood the Agreements, accept these Agreements, and agree to be bound by them. If you don’t agree with (or cannot comply with) the Agreements, then you may not use the Spotify Service or consume any Content. + +Please read the Agreements carefully. They cover important information about Spotify Services provided to you and any charges, taxes, and fees we bill you. The Agreements include information about future changes to the Agreements, export controls, automatic renewals, limitations of liability, privacy information, a class action waiver, and resolution of disputes by arbitration instead of in court. + +Any information that you provided during sign-up can be corrected during the sign-up process by returning to the previous screens and correcting erroneous information. + +In order to use the Spotify Service and access the Content, you need to (1) be 18 or older, or be 13 or older and have your parent or guardian’s consent to the Agreements (except as set forth in the chart below), (2) have the power to enter a binding contract with us and not be barred from doing so under any applicable laws, and (3) be resident in a country where the Service is available. You also promise that any registration information that you submit to Spotify is true, accurate, and complete, and you agree to keep it that way at all times. + +If you are a resident of one of the following countries, reference this chart for your country-specific age restrictions: + +Country Age Requirements +Chile, Ecuador, Paraguay, Peru Must be 18 or older, or be 15 or older and have parent or guardian consent. +Brazil Must be 18 or older, or be 16 or older and have parent or guardian consent. +Nicaragua, Taiwan Must be 20 or older, or be 13 or older and have parent or guardian consent. +Bulgaria, Hungary, Germany Must be 18 or older, or be 14 or older and have parent or guardian consent. +Italy Must be 13 or older to use Free Service. To register for a Paid Subscription, you must be 18 or older, or be 13 or older and have parent or guardian consent (your parents/guardians will enter into contract on behalf of you). +Malaysia Must be 18 or older, or if 13 to 18, parent or guardian consent is required, and guardian enters into agreement. +Lithuania Must be 13 or older to use Service. For Paid Subscriptions, you must be 18 or older, or be 14 or older with parent or guardian consent. If you are 13 to 18, guardian enters into agreement. +Canada Must be 13 or older to use Service. For Paid Subscriptions, you must be age of majority in your province or territory of residence, or 13 or older with parent or guardian consent. +Spain Must be 14 or older to use Free Service. To register for a Paid Subscription, you must be 18 or older, or be 14 or older and have parent or guardian consent (your parents/guardians will enter into contract on behalf of you). +2 Changes to the Agreements + +Occasionally we may, in our discretion, make changes to the Agreements. When we make material changes to the Agreements, we’ll provide you with prominent notice as appropriate under the circumstances, e.g., by displaying a prominent notice within the Service or by sending you an email. In some cases, we will notify you in advance, and your continued use of the Service after the changes have been made will constitute your acceptance of the changes. Please therefore make sure you read any such notice carefully. If you do not wish to continue using the Service under the new version of the Agreements, you may terminate the Agreements by contacting us through the Customer Service contact form. + +3 Enjoying Spotify + +Here’s some information about all the ways you can enjoy Spotify. + +3.1 Our Services & Paid Subscriptions + +Spotify provides streaming services offering a selection of music and other content. Certain Spotify services are provided to you free-of-charge. Other Spotify services require payment before you can access them. The Spotify services that may be accessed after payment are currently referred to as the "Premium Service" and the "Unlimited Service" (together, the "Paid Subscriptions"). The Spotify service that does not require payment is currently referred to as the "Free Service". You can learn more about our services by visiting our website. + +The Unlimited Service may not be available to all users. We will explain which services are available to you when you are signing up for the services. If you cancel your subscription to the Unlimited Service, or if your subscription to the Unlimited Service is interrupted (for example, if you change your payment details), you may not be able to re-subscribe for the Unlimited Service. Note that the Unlimited Service may be discontinued in the future, in which case you will no longer be charged for the Service. + +If you reside in Turkey, your access to the Free Service may be limited to a fixed amount of listening hours per month. + +3.2 Codes and other pre-paid offers + +If you have purchased or received a code, gift card, pre-paid offer or other offer provided or sold by or on behalf of Spotify for access to a Paid Subscription ("Code"), separate terms and conditions presented to you along with the Code may also apply to your access to the Service and you agree to comply with any such terms and conditions. + +3.3 Trials + +From time to time, we or others on our behalf may offer trials of Paid Subscriptions for a specified period without payment or at a reduced rate (a "Trial"). Spotify reserves the right, in its absolute discretion, to determine your eligibility for a Trial, and, subject to applicable laws, to withdraw or to modify a Trial at any time without prior notice and with no liability, to the greatest extent permitted under the law. + +For some Trials, we’ll require you to provide your payment details to start the Trial. AT THE END OF SUCH TRIALS, WE MAY AUTOMATICALLY START TO CHARGE YOU FOR THE APPLICABLE PAID SUBSCRIPTION ON THE FIRST DAY FOLLOWING THE END OF THE TRIAL, ON A RECURRING MONTHLY BASIS. BY PROVIDING YOUR PAYMENT DETAILS IN CONJUNCTION WITH THE TRIAL, YOU AGREE TO THIS CHARGE USING SUCH PAYMENT DETAILS. IF YOU DO NOT WANT THIS CHARGE, YOU MUST CANCEL THE APPLICABLE PAID SUBSCRIPTION THROUGH YOUR SPOTIFY ACCOUNT’S SUBSCRIPTION PAGE OR TERMINATE YOUR SPOTIFY ACCOUNT BEFORE THE END OF THE TRIAL. IF YOU DO NOT WANT TO CONTINUE TO BE CHARGED ON A RECURRING MONTHLY BASIS, YOU MUST CANCEL THE APPLICABLE PAID SUBSCRIPTION THROUGH YOUR SPOTIFY ACCOUNT’S SUBSCRIPTION PAGE OR TERMINATE YOUR SPOTIFY ACCOUNT BEFORE THE END OF THE RECURRING MONTHLY PERIOD. PAID SUBSCRIPTIONS CANNOT BE TERMINATED BEFORE THE END OF THE PERIOD FOR WHICH YOU HAVE ALREADY PAID, AND EXCEPT AS EXPRESSLY PROVIDED IN THESE TERMS, SPOTIFY WILL NOT REFUND ANY FEES THAT YOU HAVE ALREADY PAID. THE LIMITATION SECTION SETS FORTH ADDITIONAL TERMS REGARDING CANCELLATION OF YOUR PAID SUBSCRIPTION. + +4 Rights we grant you + +The Spotify Service and the Content are the property of Spotify or Spotify's licensors. We grant you a limited, non-exclusive, revocable licence to make use of the Spotify Service, and a limited, non-exclusive, revocable licence to make personal, non-commercial, entertainment use of the Content (the "Licence"). This Licence shall remain in effect until and unless terminated by you or Spotify. You promise and agree that you are using the Content for your own personal, non-commercial, entertainment use and that you will not redistribute or transfer the Spotify Service or the Content. + +The Spotify software applications and the Content are licensed, not sold, to you, and Spotify and its licensors retain ownership of all copies of the Spotify software applications and Content even after installation on your personal computers, mobile handsets, tablets, and/or other relevant devices ("Devices"). + +All Spotify trademarks, service marks, trade names, logos, domain names, and any other features of the Spotify brand ("Spotify Brand Features") are the sole property of Spotify or its licensors. The Agreements do not grant you any rights to use any Spotify Brand Features whether for commercial or non-commercial use. + +You agree to abide by our User guidelines and not to use the Spotify Service, the Content, or any part thereof in any manner not expressly permitted by the Agreements. Except for the rights expressly granted to you in these Agreements, Spotify grants no right, title, or interest to you in the Spotify Service or Content. + +Third party software (for example, open source software libraries) included in the Spotify Service are licensed to you either under the Agreements or under the relevant third party software library’s licence terms as published in the help or settings section of our desktop and mobile client and/or on our website. + +5 Third Party Applications + +The Spotify Service is integrated with third party applications, websites, and services ("Third Party Applications") to make available content, products, and/or services to you. These Third Party Applications may have their own terms and conditions of use and privacy policies and your use of these Third Party Applications will be governed by and subject to such terms and conditions and privacy policies. You understand and agree that Spotify does not endorse and is not responsible or liable for the behavior, features, or content of any Third Party Application or for any transaction you may enter into with the provider of any such Third Party Applications. + +6 User-Generated Content + +Spotify users may post, upload, and/or contribute ("post") content to the Service (which may include, for example, pictures, text, messages, information, playlist compilations, and/or other types of content) ("User Content"). For the avoidance of doubt, "User Content" includes any such content posted to the Spotify Support Community as well as any other part of the Spotify Service. + +You promise that, with respect to any User Content you post on Spotify, (1) you have the right to post such User Content, and (2) such User Content, or its use by Spotify as contemplated by the Agreements, does not violate the Agreements, applicable law, or the intellectual property (including without limitation copyright), publicity, personality, or other rights of others or imply any affiliation with or endorsement of you or your User Content by Spotify or any artist, band, label, entity or individual without express written consent from such individual or entity. + +Spotify may, but has no obligation to, monitor, review, or edit User Content. In all cases, Spotify reserves the right to remove or disable access to any User Content for any or no reason, including but not limited to, User Content that, in Spotify’s sole discretion, violates the Agreements. Spotify may take these actions without prior notification to you or any third party. Removal or disabling of access to User Content shall be at our sole discretion, and we do not promise to remove or disable access to any specific User Content. + +You are solely responsible for all User Content that you post. Spotify is not responsible for User Content nor does it endorse any opinion contained in any User Content. YOU AGREE THAT IF ANYONE BRINGS A CLAIM AGAINST SPOTIFY RELATED TO USER CONTENT THAT YOU POST, THEN, TO THE EXTENT PERMISSIBLE UNDER LOCAL LAW, YOU WILL INDEMNIFY AND HOLD SPOTIFY HARMLESS FROM AND AGAINST ALL DAMAGES, LOSSES, AND EXPENSES OF ANY KIND (INCLUDING REASONABLE ATTORNEY FEES AND COSTS) ARISING OUT OF SUCH CLAIM. + +7 Rights you grant us + +In consideration for the rights granted to you under the Agreements, you grant us the right (1) to allow the Spotify Service to use the processor, bandwidth, and storage hardware on your Device in order to facilitate the operation of the Service, (2) to provide advertising and other information to you, and (3) to allow our business partners to do the same. In any part of the Spotify Service, the Content you view, including its selection and placement, may be influenced by commercial considerations, including agreements with third parties. Some Content licensed or provided to Spotify (e.g. podcasts) may contain advertising as part of the Content. In such cases, Spotify will make such Content available to you unmodified. + +If you provide feedback, ideas or suggestions to Spotify in connection with the Spotify Service or Content ("Feedback"), you acknowledge that the Feedback is not confidential and you authorize Spotify to use that Feedback without restriction and without payment to you. Feedback is considered a type of User Content. + +You grant Spotify a non-exclusive, transferable, sub-licensable, royalty-free, perpetual (or, in jurisdictions where this is not permitted, for a term equal to the duration of the Agreements plus twenty (20) years), irrevocable, fully paid, worldwide licence to use, reproduce, make available to the public (e.g. perform or display), publish, translate, modify, create derivative works from, and distribute any of your User Content in connection with the Service through any medium, whether alone or in combination with other content or materials, in any manner and by any means, method or technology, whether now known or hereafter created. Aside from the rights specifically granted herein, you retain ownership of all rights, including intellectual property rights, in the User Content. Where applicable and permitted under applicable law, you also agree to waive any "moral rights" (or the equivalent under applicable law) such as your right to be identified as the author of any User Content, including Feedback, and your right to object to derogatory treatment of such User Content. + +8 User guidelines + +Spotify respects intellectual property rights and expects you to do the same. We’ve established a few ground rules for you to follow when using the Service, to make sure Spotify stays enjoyable for everyone. Please follow these rules and encourage other users to do the same. + +The following is not permitted for any reason whatsoever: + +copying, redistributing, reproducing, "ripping", recording, transferring, performing or displaying to the public, broadcasting, or making available to the public any part of the Spotify Service or the Content, or otherwise making any use of the Spotify Service or the Content which is not expressly permitted under the Agreements or applicable law or which otherwise infringes the intellectual property rights (such as copyright) in the Spotify Service or the Content or any part of it; +using the Spotify Service to import or copy any local files you do not have the legal right to import or copy in this way; +transferring copies of cached Content from an authorized Device to any other Device via any means; +reverse-engineering, decompiling, disassembling, modifying, or creating derivative works based on the Spotify Service, Content or any part thereof unless permitted by applicable law; +circumventing any technology used by Spotify, its licensors, or any third party to protect the Content or the Service; +selling, renting, sublicensing or leasing of any part of the Spotify Service or the Content; +circumventing any territorial restrictions applied by Spotify or it licensors; +artificially increasing play count or otherwise manipulating the Services by using a script or other automated process; +removing or altering any copyright, trademark, or other intellectual property notices contained on or provided through the Spotify Service (including for the purpose of disguising or changing any indications of the ownership or source of any Content); +providing your password to any other person or using any other person’s username and password; +"crawling" the Spotify Service or otherwise using any automated means (including bots, scrapers, and spiders) to collect information from Spotify; or +selling a user account or playlist, or otherwise accepting any compensation, financial or otherwise, to influence the name of an account or playlist or the content included on an account or playlist. +Please respect Spotify, the owners of the Content, and other users of the Spotify Service. Don’t engage in any activity, post any User Content, or register and/or use a username, which is or includes material that: + +is offensive, abusive, defamatory, pornographic, threatening, or obscene; +is illegal, or intended to promote or commit an illegal act of any kind, including but not limited to violations of intellectual property rights, privacy rights, or proprietary rights of Spotify or a third party; +includes your password or purposely includes any other user’s password or purposely includes personal data of third parties or is intended to solicit such personal data; +includes malicious content such as malware, Trojan horses, or viruses, or otherwise interferes with any user’s access to the Service; +is intended to or does harass or bully other users; +impersonates or misrepresents your affiliation with another user, person, or entity, or is otherwise fraudulent, false, deceptive, or misleading; +uses automated means to artificially promote content; +involves the transmission of unsolicited mass mailings or other forms of spam ("spam"), junk mail, chain letters, or similar, including through the Spotify inbox; +involves commercial or sales activities, such as advertising, promotions, contests, sweepstakes, or pyramid schemes, that are not expressly authorized by Spotify; +links to, references, or otherwise promotes commercial products or services, except as expressly authorized by Spotify; +interferes with or in any way disrupts the Spotify Service, tampers with, breaches, or attempts to probe, scan, or test for vulnerabilities in the Service or Spotify’s computer systems, network, usage rules, or any of Spotify’s security components, authentication measures or any other protection measures applicable to the Service, the Content or any part thereof; or +conflicts with the Agreements, as determined by Spotify. +You acknowledge and agree that posting any such User Content may result in immediate termination or suspension of your Spotify account. You also agree that Spotify may also reclaim your username for any reason. + +Please be thoughtful about how you use the Spotify Service and what you share. The Spotify Service includes social and interactive features, including the ability to post User Content, share content, and make certain information about you public. Remember that shared or publicly available information may be used and re-shared by other users on Spotify or across the web, so please use Spotify carefully and be mindful of your account settings. Spotify has no responsibility for your choices to post material on the Service. + +Your password protects your user account, and you are solely responsible for keeping your password confidential and secure. You understand that you are responsible for all use of your username and password on the Service. If your username or password is lost or stolen, or if you believe there has been unauthorized access to your account by third parties, please notify us immediately and change your password as soon as possible. + +9 Infringement and reporting User Content + +Spotify respects the rights of intellectual property owners. If you believe that any Content infringes your intellectual property rights or other rights, see Spotify’s copyright policy. If Spotify is notified by a copyright holder that any Content infringes a copyright, Spotify may in its absolute discretion take actions without prior notification to the provider of that Content. If the provider believes that the content is not infringing, the provider may submit a counter-notification to Spotify with a request to restore the removed content. + +If you believe that any Content does not comply with the User guidelines, please fill out our notice form. + +10 Service limitations and modifications + +Spotify will make reasonable efforts to keep the Spotify Service operational. However, certain technical difficulties or maintenance may, from time to time, result in temporary interruptions. To the extent permissible under applicable law, Spotify reserves the right, periodically and at any time, to modify or discontinue, temporarily or permanently, functions and features of the Spotify Service, with or without notice, all without liability to you, except where prohibited by law, for any interruption, modification, or discontinuation of the Spotify Service or any function or feature thereof. Notwithstanding the foregoing, if you have prepaid fees for Paid Subscriptions that Spotify permanently discontinues prior to the end of the Pre-Paid Period (defined in the Payments, cancellations, and cooling off section), Spotify will refund you the prepaid fees for the Pre-Paid Period after such discontinuation. You understand, agree, and accept that Spotify has no obligation to maintain, support, upgrade, or update the Service, or to provide all or any specific content through the Service. This section will be enforced to the extent permissible by applicable law. Spotify and/or the owners of any Content may, from time to time, remove any such Content without notice to the extent permitted by applicable law. + +11 Brand Accounts + +If you establish a Spotify account on behalf of a company, organization, entity, or brand (a "Brand", and such account a "Brand Account"), the terms "you" and "your", as used throughout the Agreements, apply to both you and the Brand, as applicable. + +If you open a Brand Account, you represent and warrant that you are authorized to grant all permissions and licences provided in the Agreements and to bind the Brand to the Agreements. + +11.1 Following + +The Brand may only follow users who first follow the Brand; and the Brand may not take any action that implies an endorsement or relationship between the Brand and the followed user, unless the Brand has independently obtained the rights to imply such an endorsement. Upon Spotify’s request, in its sole discretion, a Brand must cease following a user. + +11.2 Listening + +The Brand may not stream media. + +11.3 Messaging + +The Brand may only send messages to users who first send messages to the Brand. + +11.4 Brand Playlists and Sharing + +The Brand may not create or share any Spotify playlists, whether within the Spotify Service or elsewhere, that imply an endorsement or relationship between the Brand and any artist or any other party, unless the Brand has independently obtained the rights to imply such an endorsement. Brands may wish to consult Spotify’s Brand Playlist Guidelines. + +12 Spotify Support Community + +The Spotify Support Community is a place for discussions and exchange of information, tips, and other materials related to the Spotify Service. In order to use the Spotify Support Community, you must (1) have an existing Spotify account; and (2) authenticate your Spotify account for use on the Support Community (a "Spotify Support Account"). Instructions for creating a Spotify Support Account can be found on the Community registration page. In addition to the Agreements, you also agree to adhere to the Spotify Support Community Guidelines that you will be presented with upon registration (the "Support Community Guidelines") when using the Spotify Support Community. If you do not agree to the Agreements or the Support Community Guidelines, you may not use the Spotify Support Community. + +12.1 Spotify Support Accounts + +By creating a Spotify Support Account, you confirm that any registration information that you submit to Spotify is true, accurate, and complete and that you will update such information in order to keep it current. It is strictly prohibited to include information in your profile that suggests that you are a Spotify employee or moderator or to otherwise pose as such an employee or moderator when using the Spotify Support Community. You also acknowledge and agree that Spotify may remove or reclaim your username at any time if Spotify in its absolute discretion considers such action appropriate. + +12.2 No official support + +No User Content or other content posted by Spotify employees, moderators and/or representatives on the Spotify Support Community should be construed as official support provided by Spotify. For details regarding official support, see the section Customer Support. Any content provided or made available to you on the Spotify Support Community by Spotify employees, moderators, and/or representatives is provided on an "as is" basis without warranties of any kind. + +You acknowledge that opinions expressed in User Content on the Spotify Support Community are those of contributors of such User Content only and do not reflect the opinions or policies of Spotify or any of its officers, shareholders, employees, agents, directors, subsidiaries, affiliates, suppliers, or licensors. + +12.3 Reward Program + +The Spotify Support Community features a reward system whereby Spotify, in its sole discretion, may reward users based on the amount of "Kudos" received or quality of responses by a user. You agree to only give Kudos to other users (and not to yourself) and only when deserved, and to refrain from any attempts to manipulate the reward system, e.g., by creating multiple accounts or artificial responses. You acknowledge that Spotify’s decision in respect of any reward shall be final and binding. + +13 Customer support + +For customer support with account-related and payment-related questions ("Customer Support Queries"), please submit a ticket to our customer service department using the Customer Service contact form on the About Us section of our website. We will use reasonable endeavours to respond to all Customer Support Queries within a reasonable time frame but we make no guarantees or warranties of any kind that any Customer Support Queries will be responded to within any particular time frame and/or that we will be able to satisfactorily answer any such queries. + +14 Export control + +Spotify’s products may be subject to U.S. export and re-export control laws and regulations or similar laws applicable in other jurisdictions, including the Export Administration Regulations ("EAR") maintained by the U.S. Department of Commerce, trade and economic sanctions maintained by the Treasury Department’s Office of Foreign Assets Control ("OFAC"), and the International Traffic in Arms Regulations ("ITAR") maintained by the Department of State. You warrant that you are (1) not located in Cuba, Iran, North Korea, Sudan, or Syria; and (2) are not a denied party as specified in the regulations listed above. + +You agree to comply with all applicable export and reexport control laws and regulations, including the EAR, trade and economic sanctions maintained by OFAC, and the ITAR. Specifically, you agree that you shall not – directly or indirectly – sell, export, reexport, transfer, divert, or otherwise dispose of any products, software, or technology (including products derived from or based on such technology) received from Spotify under the Agreements to any destination, entity, or person prohibited by any applicable laws or regulations of the United States or any other jurisdiction without obtaining prior authorization from the competent government authorities as required by those laws and regulations. This export control clause shall survive termination or cancellation of the Agreements. + +15 Payments, cancellations, and cooling off + +Paid Subscriptions can be purchased directly from Spotify or through a third party, such as a telephone company, either by (1) paying a monthly subscription fee; or (2) pre-payment giving you access to the Spotify Service for a specific time period ("Pre-Paid Period"). If you have purchased a Paid Subscription using a Code, your Paid Subscription will automatically terminate at the end of the Pre-Paid Period, or when there is an insufficient pre-paid balance to pay for the Service. + +When you register for a Paid Subscription, Trial, or Code online, you consent to get access to Spotify Premium immediately. If you reside outside the United States and register for a Paid Subscription or Code online, you may change your mind for any or no reason and receive a full refund of all monies paid within fourteen (14) days starting from the day you sign-up for the relevant service (the "Cooling-off Period"). Refunds will not, however, be provided if you have accessed Spotify at any time during the Cooling-off Period. + +Unless your Paid Subscription has been purchased as a Pre-Paid Period, your payment to Spotify will automatically renew at the end of the subscription period, unless you cancel your Paid Subscription through your subscription page before the end of the current subscription period. The cancellation will take effect the day after the last day of the current subscription period, and you will be downgraded to the Free Service. However, if you cancel your payment or Paid Subscription and/or terminate any of the Agreements (1) after you have accessed Spotify during the Cooling-off Period, or (2) after the Cooling-off Period is over (where applicable), or (3) before the end of the current subscription period, we will not refund any subscription fees already paid to us. The refund method will depend upon the payment method. + +If you wish to receive a full refund of all monies paid before the Cooling-off Period is over, you must contact Customer Support. + +If you have purchased your Paid Subscription through a third party, your subscription is also subject to the terms of your agreement with that third party (in addition to these Terms). To cancel your subscription, you must cancel directly with that third party. + +Spotify may change the price for the Paid Subscriptions, Pre-Paid Period (for periods not yet paid for), or Codes from time to time, and will communicate any price changes to you in advance and, if applicable, how to accept those changes. Price changes for Paid Subscriptions will take effect at the start of the next subscription period following the date of the price change. As permitted by local law, you accept the new price by continuing to use the Spotify Service after the price change takes effect. If you do not agree with the price changes, you have the right to reject the change by unsubscribing from the Spotify Service prior to the price change going into effect. Please therefore make sure you read any such notification of price changes carefully. + +16 Term and termination + +The Agreements will continue to apply to you until terminated by either you or Spotify. However, you acknowledge and agree that the perpetual licence granted by you in relation to User Content, including Feedback, is irrevocable and will therefore continue after expiry or termination of any of the Agreements for any reason. Spotify may terminate the Agreements or suspend your access to the Spotify Service at any time, including in the event of your actual or suspected unauthorised use of the Spotify Service and/or Content, or non-compliance with the Agreements. If you or Spotify terminate the Agreements, or if Spotify suspends your access to the Spotify Service, you agree that Spotify shall have no liability or responsibility to you and Spotify will not refund any amounts that you have already paid, to the fullest extent permitted under applicable law. To learn how to terminate your Spotify account, please contact us through the Customer Service contact form which is available on our About Us page. This section will be enforced to the extent permissible by applicable law. You may terminate the Agreements at any time. + +Sections 6, 7, 8, 10, 14, 16, 17, 18, 19, 20, 21, 22, 23, and 24 herein, as well as any other sections of the Agreements that, either explicitly or by their nature, must remain in effect even after termination of the Agreements, shall survive termination. + +17 Warranty and disclaimer + +WE ENDEAVOUR TO PROVIDE THE BEST SERVICE WE CAN, BUT YOU UNDERSTAND AND AGREE THAT THE SPOTIFY SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE", WITHOUT EXPRESS OR IMPLIED WARRANTY OR CONDITION OF ANY KIND. YOU USE THE SPOTIFY SERVICE AT YOUR OWN RISK. TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, SPOTIFY AND ALL OWNERS OF THE CONTENT MAKE NO REPRESENTATIONS AND DISCLAIM ANY WARRANTIES OR CONDITIONS OF SATISFACTORY QUALITY, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. NEITHER SPOTIFY NOR ANY OWNER OF CONTENT WARRANTS THAT THE SPOTIFY SERVICE IS FREE OF MALWARE OR OTHER HARMFUL COMPONENTS. IN ADDITION, SPOTIFY MAKES NO REPRESENTATION NOR DOES IT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY THIRD PARTY APPLICATIONS (OR THE CONTENT THEREOF), USER CONTENT, OR ANY OTHER PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY ON OR THROUGH THE SPOTIFY SERVICE OR ANY HYPERLINKED WEBSITE, OR FEATURED IN ANY BANNER OR OTHER ADVERTISING. YOU UNDERSTAND AND AGREE THAT SPOTIFY IS NOT RESPONSIBLE OR LIABLE FOR ANY TRANSACTION BETWEEN YOU AND THIRD PARTY PROVIDERS OF THIRD PARTY APPLICATIONS OR PRODUCTS OR SERVICES ADVERTISED ON OR THROUGH THE SPOTIFY SERVICE. AS WITH ANY PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE. NO ADVICE OR INFORMATION WHETHER ORAL OR IN WRITING OBTAINED BY YOU FROM SPOTIFY SHALL CREATE ANY WARRANTY ON BEHALF OF SPOTIFY IN THIS REGARD. SOME ASPECTS OF THIS SECTION MAY NOT APPLY IN SOME JURISDICTIONS IF PROHIBITED BY APPLICABLE LAW. + +THIS DOES NOT AFFECT YOUR STATUTORY RIGHTS AS A CONSUMER. + +18 Limitation + +YOU AGREE THAT, TO THE EXTENT PERMITTED BY APPLICABLE LAW, YOUR SOLE AND EXCLUSIVE REMEDY FOR ANY PROBLEMS OR DISSATISFACTION WITH THE SPOTIFY SERVICE IS TO UNINSTALL ANY SPOTIFY SOFTWARE AND TO STOP USING THE SPOTIFY SERVICE. WHILE SPOTIFY ACCEPTS NO RESPONSIBILITY FOR THIRD PARTY APPLICATIONS OR THE CONTENT THEREOF, AND WHILE YOUR RELATIONSHIP WITH SUCH THIRD PARTY APPLICATIONS MAY BE GOVERNED BY SEPARATE AGREEMENTS WITH SUCH THIRD PARTIES, TO THE EXTENT PERMITTED BY APPLICABLE LAW, YOUR SOLE AND EXCLUSIVE REMEDY, AS WITH RESPECT TO SPOTIFY, FOR ANY PROBLEMS OR DISSATISFACTION WITH THIRD PARTY APPLICATIONS OR THE CONTENT THEREOF, IS TO UNINSTALL AND/OR STOP USING ANY SUCH THIRD PARTY APPLICATIONS. + +TO THE FULLEST EXTENT PERMITTED BY LAW, IN NO EVENT WILL SPOTIFY, ITS OFFICERS, SHAREHOLDERS, EMPLOYEES, AGENTS, DIRECTORS, SUBSIDIARIES, AFFILIATES, SUCCESSORS, ASSIGNS, SUPPLIERS, OR LICENSORS BE LIABLE FOR (1) ANY INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE, EXEMPLARY, OR CONSEQUENTIAL DAMAGES; (2) ANY LOSS OF USE, DATA, BUSINESS, OR PROFITS (WHETHER DIRECT OR INDIRECT), IN ALL CASES ARISING OUT OF THE USE OR INABILITY TO USE THE SPOTIFY SERVICE, THIRD PARTY APPLICATIONS, OR THIRD PARTY APPLICATION CONTENT, REGARDLESS OF LEGAL THEORY, WITHOUT REGARD TO WHETHER SPOTIFY HAS BEEN WARNED OF THE POSSIBILITY OF THOSE DAMAGES, AND EVEN IF A REMEDY FAILS OF ITS ESSENTIAL PURPOSE; OR (3) AGGREGATE LIABILITY FOR ALL CLAIMS RELATING TO THE SPOTIFY SERVICE, THIRD PARTY APPLICATIONS, OR THIRD PARTY APPLICATION CONTENT MORE THAN THE AMOUNTS PAID BY YOU TO SPOTIFY DURING THE PRIOR TWELVE MONTHS IN QUESTION, TO THE EXTENT PERMISSIBLE BY APPLICABLE LAW. + +Nothing in the Agreements removes or limits Spotify’s liability for fraud, fraudulent misrepresentation, death or personal injury caused by its negligence, and, if required by applicable law, gross negligence. Some aspects of this section may not apply in some jurisdictions if prohibited by applicable law. + +19 Third party rights + +You acknowledge and agree that the owners of the Content and certain distributors (such as app store providers) are intended beneficiaries of the Agreements and have the right to enforce the Agreements directly against you. Other than as set out in this section, the Agreements are not intended to grant rights to anyone except you and Spotify, and in no event shall the Agreements create any third party beneficiary rights. Furthermore, the rights to terminate, rescind, or agree to any variation, waiver, or settlement of the Agreements are not subject to the consent of any other person. + +If you have downloaded the App from the Apple, Inc. ("Apple") App Store or if you are using the App on an iOS device, you acknowledge that you have read, understood, and agree to the following notice regarding Apple. This Agreement is between you and Spotify only, not with Apple, and Apple is not responsible for the Service and the content thereof. Apple has no obligation whatsoever to furnish any maintenance and support services with respect to the Service. In the event of any failure of the Service to conform to any applicable warranty, then you may notify Apple and Apple will refund any applicable purchase price for the App to you; and, to the maximum extent permitted by applicable law, Apple has no other warranty obligation whatsoever with respect to the Service. Apple is not responsible for addressing any claims by you or any third party relating to the Service or your possession and/or use of the Service, including, but not limited to: (1) product liability claims; (2) any claim that the Service fails to conform to any applicable legal or regulatory requirement; and (3) claims arising under consumer protection or similar legislation. Apple is not responsible for the investigation, defense, settlement and discharge of any third party claim that the Service and/or your possession and use of the App infringe that third party’s intellectual property rights. You agree to comply with any applicable third party terms, when using the Service. Apple, and Apple’s subsidiaries, are third party beneficiaries of this Agreement, and upon your acceptance of this Agreement, Apple will have the right (and will be deemed to have accepted the right) to enforce this Agreement against you as a third party beneficiary of this Agreement. You hereby represent and warrant that (1) you are not located in a country that is subject to a U.S. Government embargo, or that has been designated by the U.S. Government as a "terrorist supporting" country; and (2) you are not listed on any U.S. Government list of prohibited or restricted parties. + +20 Entire agreement + +Other than as stated in this section or as explicitly agreed upon in writing between you and Spotify, the Agreements constitute all the terms and conditions agreed upon between you and Spotify and supersede any prior agreements in relation to the subject matter of these Agreements, whether written or oral. + +Please note, however, that other aspects of your use of the Spotify Service may be governed by additional agreements. That could include, for example, access to the Spotify Service as a result of a gift card or free or discounted Trials. When you are presented with an offer for such aspects of your use, you will be presented with any related additional agreement, and you may have an opportunity to agree to additional terms. Some of those additional terms are listed on Spotify’s website. To the extent that there is any irreconcilable conflict between any additional terms and these Terms, the additional terms shall prevail. + +21 Severability and waiver + +Unless as otherwise stated in the Agreements, should any provision of the Agreements be held invalid or unenforceable for any reason or to any extent, such invalidity or enforceability shall not in any manner affect or render invalid or unenforceable the remaining provisions of the Agreements, and the application of that provision shall be enforced to the extent permitted by law. + +Any failure by Spotify or any third party beneficiary to enforce the Agreements or any provision thereof shall not waive Spotify’s or the applicable third party beneficiary’s right to do so. + +22 Assignment + +Spotify may assign the Agreements or any part of them, and Spotify may delegate any of its obligations under the Agreements. You may not assign the Agreements or any part of them, nor transfer or sub-license your rights under the Agreements, to any third party. + +23 Indemnification + +To the fullest extent permitted by applicable law, you agree to indemnify and hold Spotify harmless from and against all damages, losses, and expenses of any kind (including reasonable attorney fees and costs) arising out of: (1) your breach of this Agreement; (2) any User Content; (3) any activity in which you engage on or through the Spotify Service; and (4) your violation of any law or the rights of a third party. + +24 Choice of law, mandatory arbitration and venue + +24.1 Governing Law / Jurisdiction + +Unless otherwise required by a mandatory law of a member state of the European Union or any other jurisdiction, the Agreements (and any non-contractual disputes/claims arising out of or in connection with them) are subject to the laws of the state or country listed below, without regard to choice or conflicts of law principles. + +Further, you and Spotify agree to the jurisdiction of the courts listed below to resolve any dispute, claim, or controversy that arises in connection with the Agreements (and any non-contractual disputes/claims arising out of or in connection with them). (In some cases, that jurisdiction will be "exclusive", meaning that no other countries’ courts can preside over the matter; have jurisdiction; in other cases, the jurisdiction is "non-exclusive", meaning that other countries’ courts may have jurisdiction as well. This is indicated in the chart as well.) + +Country Choice of Law Jurisdiction +Poland, Italy Laws of Sweden Exclusive; Courts of Local Country +Turkey Laws of Sweden Non-exclusive; Courts and other tribunals in the Republic of Turkey +Brazil Laws of Brazil Exclusive; State and Federal Courts of São Paulo, State of São Paulo, Brazil +Canada Laws of the Province of Ontario Exclusive; Courts of Ontario, Canada +United States, Argentina, Bolivia, Chile, Colombia, Costa Rica, Dominican Republic, Ecuador, El Salvador, Guatemala, Honduras, Nicaragua, Panama, Paraguay, Peru, Uruguay State of California, United States Exclusive; State and Federal Courts of San Francisco County, CA or New York, NY +Estonia, Hong Kong, Latvia, Lithuania Laws of Sweden Non-exclusive; Courts of Sweden +Spain Laws of Spain Exclusive; Courts of the consumer’s current domicile in Spain. +All remaining countries Laws of Sweden Exclusive; Courts of Sweden +Spotify does not accept any codes of conduct as mandatory in connection with the services provided under these Agreements. + +24.2 CLASS ACTION WAIVER + +WHERE PERMITTED UNDER THE APPLICABLE LAW, YOU AND SPOTIFY AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE ACTION. Unless both you and Spotify agree, no arbitrator or judge may consolidate more than one person’s claims or otherwise preside over any form of a representative or class proceeding. + +24.3 ARBITRATION + +If you are located in, are based in, have offices in, or do business in a jurisdiction in which this Section 24.3. is enforceable, the following mandatory arbitration provisions apply to you: + +24.3.1 Dispute resolution and arbitration + +You and Spotify agree that any dispute, claim, or controversy between you and Spotify arising in connection with or relating in any way to these Agreements or to your relationship with Spotify as a user of the Service (whether based in contract, tort, statute, fraud, misrepresentation, or any other legal theory, and whether the claims arise during or after the termination of the Agreements) will be determined by mandatory binding individual arbitration. Arbitration is more informal than a lawsuit in court. THERE IS NO JUDGE OR JURY IN ARBITRATION, AND COURT REVIEW OF AN ARBITRATION AWARD IS LIMITED. There may be more limited discovery than in court. The arbitrator must follow this agreement and can award the same damages and relief as a court (including attorney fees), except that the arbitrator may not award declaratory or injunctive relief benefiting anyone but the parties to the arbitration. This arbitration provision will survive termination of the Agreements. + +24.3.2 Exceptions + +Notwithstanding clause (24.3.1) above, you and Spotify both agree that nothing herein will be deemed to waive, preclude, or otherwise limit either of our rights, at any time, to (1) bring an individual action in small claims court, (2) pursue enforcement actions through applicable federal, state, or local agencies where such actions are available, (3) seek injunctive relief in a court of law, or (4) to file suit in a court of law to address intellectual property infringement claims. + +24.3.3 Arbitration rules + +Either you or we may start arbitration proceedings. Any arbitration between you and Spotify will be finally settled under the Rules of Arbitration of the International Chamber of Commerce (the "ICC") then in force (the "ICC Rules") by one or more arbitrators appointed in accordance with the ICC Rules, as modified by these Agreements, and will be administered by the International Court of Arbitration of the ICC. + +Any arbitration will be conducted in the English language and unless otherwise required by a mandatory law of a member state of the European Union or any other jurisdiction, the law to be applied in any arbitration shall be the law of the State of California, United States, without regard to choice or conflicts of law principles. + +24.3.4 Time for filing + +Any arbitration must be commenced by filing a demand for arbitration within ONE (1) YEAR after the date the party asserting the claim first knows or reasonably should know of the act, omission, or default giving rise to the claim; and there shall be no right to any remedy for any claim not asserted within that time period. If applicable law prohibits a one-year limitation period for asserting claims, any claim must be asserted within the shortest time period permitted by applicable law. + +24.3.5 Notice; Process + +A party who intends to seek arbitration must first send a written notice of the dispute to the other, by certified mail or Federal Express (signature required), or in the event that we do not have a physical address on file for you, by electronic mail ("Notice"). Spotify's address for Notice is: Spotify, Attn: General Counsel, 45 W. 18th Street, 7th Floor, New York, New York 10011, USA. The Notice must (1) describe the nature and basis of the claim or dispute; and (2) set forth the specific relief sought ("Demand"). We agree to use good faith efforts to resolve the claim directly, but if we do not reach an agreement to do so within 30 days after the Notice is received, you or Spotify may commence an arbitration proceeding. During the arbitration, the amount of any settlement offer made by you or Spotify shall not be disclosed to the arbitrator until after the arbitrator makes a final decision and award, if any. In the event our dispute is finally resolved through arbitration in your favor, Spotify shall pay you (1) the amount awarded by the arbitrator, if any, (2) the last written settlement amount offered by Spotify in settlement of the dispute prior to the arbitrator’s award; or (3) $1,000.00, whichever is greater. All documents and information disclosed in the course of the arbitration shall be kept strictly confidential by the recipient and shall not be used by the recipient for any purpose other than for purposes of the arbitration or the enforcement of arbitrator’s decision and award and shall not be disclosed except in confidence to persons who have a need to know for such purposes or as required by applicable law. Except as required to enforce the arbitrator’s decision and award, neither you nor Spotify shall make any public announcement or public comment or originate any publicity concerning the arbitration, including, but not limited to, the fact that the parties are in dispute, the existence of the arbitration, or any decision or award of the arbitrator. + +24.3.6 Modifications + +In the event that Spotify makes any future change to this arbitration provision (other than a change to Spotify's address for Notice), you may reject any such change by sending us written notice within 30 days of the change to Spotify's address for Notice, in which case your account with Spotify shall be immediately terminated and this arbitration provision, as in effect immediately prior to the amendments you reject, shall survive. + +24.3.7 Enforceability + +If the class action waiver at Section 24.2 is found to be unenforceable in arbitration or if any part of this Section 24.3 is found to be invalid or unenforceable, then the entirety of this Section 24.3 shall be null and void and, in such case, the parties agree that the exclusive jurisdiction and venue described in Section 24.1 shall govern any action arising out of or related to the Agreements. + +25 Contact us + +If you have any questions concerning the Spotify Service or the Agreements, please contact Spotify customer service by visiting the About Us section of our website. + +If you are a California resident, you may have the Agreements mailed to you electronically by sending a letter to Spotify, Attn: General Counsel, 45 West 18th Street, 7th Floor, New York, New York 10011, USA with your email address and a request for the Agreements. In addition, under California Civil Code Section 1789.3, you may contact the Complaint Assistance Unit of the Division of Consumer Services of the California Department of Consumer Affairs in writing at 1625 N. Market Blvd., Suite S-202, Sacramento, California 95834, or by telephone at 1-800-952-5210 in order to resolve a complaint regarding the service or to receive further information regarding use of the service. + +Thank you for reading our Terms. We hope you enjoy Spotify! + +Contracting entity: + +Spotify AB +Birger Jarlsgatan 61, 113 56 Stockholm +Sweden +SE556703748501 + +(C) Spotify AB. diff --git a/pkgbuilds/spotify/PKGBUILD b/pkgbuilds/spotify/PKGBUILD new file mode 100644 index 0000000..2600d69 --- /dev/null +++ b/pkgbuilds/spotify/PKGBUILD @@ -0,0 +1,98 @@ +# Maintainer: Christian Heusel +# Maintainer: Robin Candau +# Contributor: NicoHood +# Contributor: TobFromme < TobFromme {hat} pm {dont} me > +# Contributor: Ashley Whetter <(firstname) @ awhetter.co.uk> +# Contributor: Eothred + +pkgname=spotify +pkgver='1.2.74.477' + +epoch=1 +_commit=g3be53afe +pkgrel=2 +pkgdesc='A proprietary music streaming service' +arch=('x86_64') +license=('custom') +url='https://www.spotify.com' +depends=('alsa-lib>=1.0.14' 'gtk3' 'libxss' 'desktop-file-utils' 'openssl' 'nss' 'at-spi2-atk' 'libcurl-gnutls' 'libsm' 'libayatana-appindicator') +optdepends=('ffmpeg4.4: Adds support for playback of local files' + 'zenity: Adds support for importing local files' + 'libnotify: Desktop notifications') +options=('!strip') + +# NOTE: We switched from stable to testing on 18th march, as the spotify +# stable repository is always outdated. Testing seems to be in sync with snap: +# https://snapcraft.io/spotify +# http://repository.spotify.com/dists/testing/Release +# http://repository.spotify.com/dists/testing/non-free/binary-amd64/Packages +# http://repository.spotify.com/dists/testing/Release.gpg +source=("${pkgname}-${pkgver}-${_commit}-x86_64.deb::http://repository.spotify.com/pool/non-free/s/spotify-client/spotify-client_${pkgver}.${_commit}_amd64.deb" + "spotify.sh" + "spotify.protocol" + "LICENSE" + # GPG signature check + "${pkgname}-${pkgver}-${pkgrel}-Release::http://repository.spotify.com/dists/testing/Release" + "${pkgname}-${pkgver}-${pkgrel}-Release.sig::http://repository.spotify.com/dists/testing/Release.gpg" + "${pkgname}-${pkgver}-${pkgrel}-x86_64-Packages::http://repository.spotify.com/dists/testing/non-free/binary-amd64/Packages") +sha512sums=('c002c778dd98d3c9425de921a69c630bbab8f6fd5a4b2edd1ac04d76f10a57c92f2f3d6a93a3ff3fb60f2ec911059c20bfc7f7a18a5aa472538932d49e6d666f' + 'da48b628a4ea925dd8521133ebf364b261b11aed252d264dde6605d915cdb631919ffe672c58534bcdb60869e5d87a49a60a8198780b99517123f0031e83fdb1' + '999abe46766a4101e27477f5c9f69394a4bb5c097e2e048ec2c6cb93dfa1743eb436bde3768af6ba1b90eaac78ea8589d82e621f9cbe7d9ab3f41acee6e8ca20' + '2e16f7c7b09e9ecefaa11ab38eb7a792c62ae6f33d95ab1ff46d68995316324d8c5287b0d9ce142d1cf15158e61f594e930260abb8155467af8bc25779960615' + 'SKIP' + 'SKIP' + 'SKIP') + +# Import key with: +# curl -sS https://download.spotify.com/debian/pubkey_C85668DF69375001.gpg | gpg --import - +validpgpkeys=('B420FD3777CCE3A7F0076B55C85668DF69375001') # Spotify Public Repository Signing Key +# Old Keys: +# 63CBEEC9006602088F9B19326224F9941A8AA6D1 +# E27409F51D1B66337F2D2F417A3A762FAFD4A51F +# F9A211976ED662F00E59361E5E3C45D7B312C643 +# 8FD3D9A8D3800305A9FFF259D1742AD60D811D58 +# 931FF8E79F0876134EDDBDCCA87FF9DF48BF1C90 +# 2EBF997C15BDA244B6EBF5D84773BD5E130D1D45 + +prepare() { + # Validate hashes from the PGP signed "Release" file + echo "$(grep non-free/binary-amd64/Packages ${pkgname}-${pkgver}-${pkgrel}-Release | tail -n 2 | head -n 1 | awk '{print $1}') ${pkgname}-${pkgver}-${pkgrel}-x86_64-Packages" \ + > "${pkgname}-${pkgver}-x86_64-Packages.sha256" + sha256sum -c "${pkgname}-${pkgver}-x86_64-Packages.sha256" + + echo "$(grep SHA512 ${pkgname}-${pkgver}-${pkgrel}-x86_64-Packages | head -n 1 | awk '{print $2}') ${pkgname}-${pkgver}-${_commit}-x86_64.deb" \ + > "${pkgname}-${pkgver}-x86_64.deb.sha512" + sha512sum -c "${pkgname}-${pkgver}-x86_64.deb.sha512" +} + +package() { + tar -xzf data.tar.gz --no-same-owner -C "${pkgdir}" + + # Enable spotify to open URLs from the webapp + sed -i 's/^Exec=.*/Exec=spotify --uri=%u/' "${pkgdir}/usr/share/spotify/spotify.desktop" + + install -Dm 644 "${pkgdir}/usr/share/spotify/spotify.desktop" "${pkgdir}/usr/share/applications/spotify.desktop" + install -Dm 644 "${pkgdir}/usr/share/spotify/icons/spotify-linux-512.png" "${pkgdir}/usr/share/pixmaps/spotify-client.png" + + for size in 22 24 32 48 64 128 256 512; do + install -Dm 644 "${pkgdir}/usr/share/spotify/icons/spotify-linux-${size}.png" \ + "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/spotify.png" + done + + # Move spotify binary to its proper location + mkdir -p "${pkgdir}/opt/spotify" + mv "${pkgdir}/usr/share/spotify" "${pkgdir}/opt/" + + # Copy launch script which allows the use of custom flags + install -Dm 755 spotify.sh "${pkgdir}/usr/bin/spotify" + + # Copy protocol file for KDE + install -Dm 644 spotify.protocol "${pkgdir}/usr/share/kservices5/spotify.protocol" + + # Install license + # https://www.spotify.com/legal/end-user-agreement + install -Dm 644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + + # Fix permissions + chmod -R go-w "${pkgdir}" +} diff --git a/pkgbuilds/spotify/keys/pgp/B420FD3777CCE3A7F0076B55C85668DF69375001.asc b/pkgbuilds/spotify/keys/pgp/B420FD3777CCE3A7F0076B55C85668DF69375001.asc new file mode 100644 index 0000000..63b85d6 --- /dev/null +++ b/pkgbuilds/spotify/keys/pgp/B420FD3777CCE3A7F0076B55C85668DF69375001.asc @@ -0,0 +1,29 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGc0vwABEADQtWcyZgno2mdh35eZDzL676CCFLwCnai5HcLTo9l1ZlcNPzvL +ql6Fj63ZBpq9Y4Ucf6rqNo4uMIRJKC6ybVGhxzzyHijEXwhN+clFhFQPzZQEfyU/ +jEgiOL8R8rAkItlNeumkrvX5Q+TpSkQr8Yh518fMnbKtFnlKEI3Mu3XyDvisGjef +1ES6HTAEbzHSbBAnp0+mzNPQ1NV5kJtRQ2S7eyd31rwRFKEBHzs8rgwti0af6OeH +pnBiaWnB2KznRX1ZR2gU6pKFwx8oraaw876IL2WxpPyhwtDZP6rjtM+GIyd8BmWT +GSOY82RCdaKT+w2/iJl6qYO2fBlphemH8imdhBGbAC1+oGnMjPxOHw6ClTV1aDm6 +nrovFsmyum6F9ou0qA32KIiy4sznPDpGsqIwRcSawDQS9PlCrV02RVtn6uk1Ylpu +s/Fle29ia8cJDosYq4g+KNiC8Z1a4ripqQlSH/XXiem2iKW0C0S/VOE4v6HiON48 +zQBN/B7q4O+D95YehqboSp02gUQwLOUDk1+WrMDIHsQl76QXY9izrYy5caq9cZBy +klGDC0SaEZGbNeKywa6GYejQxPuTBbeQY+CHZgxPkOd35KecighIgdWaI9uiXHEI +wjod7zZVHvQWP20y160WNakYHRJUOUOIUY5C7Yl8cwafNuYJ+J6/ue5JOwARAQAB +tDdTcG90aWZ5IFB1YmxpYyBSZXBvc2l0b3J5IFNpZ25pbmcgS2V5IDx0dXhAc3Bv +dGlmeS5jb20+iQJUBBMBCAA+FiEEtCD9N3fM46fwB2tVyFZo32k3UAEFAmc0vwAC +GwMFCQJRQwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQyFZo32k3UAGSoxAA +rS4ewvpj0vE9jp3qG7cAM5bIkU6H4/cWBED5/l9n/0kQhPTUeeNKE8T52rbdOard +jd25J9CsyaItbDJ7LkE6acRm0V/qtmE7XwlrhLcCUe0qEyCeXWXtuGCiTpbBlZG/ +qJCP6AuiEGBmKlh9ToagMUM/yrng68pgVJXWe/b39GP21mrTDu3H56rXd7jrPO2n +jzlxxhEJq9NxD8+PV5XUFefK2C35idgUhX1yWDEZ9YUBCYPwrBxTr0gEhcIhFZzo +S30T3lG8oU7X97+Kk4QloiV4zsLH+7Aer/F1AMVRe+MVTlDwLlpnusKwAI+Syy3u +aqKp2JGR14JmG3w/PsuzhqJ9rJC1UNYUY5tlIpy8Lje+PP7ag36DteSvzuHSNDMa +feSk2Bve6UKng+zYq0dOLI7NiIQl7KZsHzSGzcskfx3wSdaVw7it3ssvoscul9mM +uhqz4qoCXCXv4N2t49H1XgQtrZ54s/pJ4V9H2G/Xv85qKBrnlSi5xv43w6KbY1cX +1upY90GkKwdhWZu+EueIXNvzA1VkquCSuLmlzUdnCZE7iNTRLDfm/A4afnC8f9K0 +z7qRIk/bCQAXTKngHPwd0qG3yD4z/a3F0W/+PNXIwCzCTC6/kr4goP6gxUkN5b2e +TW2bDjIXULm9fpQsWJ0Y+/zCl69tZHtQ1Nop/3Nrl1M= +=Muvn +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pkgbuilds/spotify/spotify.protocol b/pkgbuilds/spotify/spotify.protocol new file mode 100644 index 0000000..423a5fc --- /dev/null +++ b/pkgbuilds/spotify/spotify.protocol @@ -0,0 +1,11 @@ +[Protocol] +exec=/usr/bin/spotify -uri "%u" +protocol=spotify +input=none +output=none +helper=true +listing=false +reading=false +writing=false +makedir=false +deleting=false diff --git a/pkgbuilds/spotify/spotify.sh b/pkgbuilds/spotify/spotify.sh new file mode 100644 index 0000000..c8938ac --- /dev/null +++ b/pkgbuilds/spotify/spotify.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Substitute XDG_CONFIG_HOME by ~/.config if the env var is unset or empty +XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-~/.config} + +# Allow users to override command-line options +if [[ -f "${XDG_CONFIG_HOME}/spotify-flags.conf" ]]; then + mapfile -t SPOTIFY_USER_FLAGS <<< "$(grep -v '^#' "${XDG_CONFIG_HOME}/spotify-flags.conf")" + echo "User flags:" "${SPOTIFY_USER_FLAGS[@]}" +fi + +# Launch Spotify with the given flags +exec /opt/spotify/spotify "${SPOTIFY_USER_FLAGS[@]}" "$@" diff --git a/pkgbuilds/symfony-cli/.SRCINFO b/pkgbuilds/symfony-cli/.SRCINFO new file mode 100644 index 0000000..9787169 --- /dev/null +++ b/pkgbuilds/symfony-cli/.SRCINFO @@ -0,0 +1,16 @@ +pkgbase = symfony-cli + pkgdesc = The Symfony client helps developers create and manage Symfony applications. + pkgver = 5.15.1 + pkgrel = 8 + url = https://symfony.com/ + arch = x86_64 + license = AGPL3 + makedepends = git + makedepends = go + depends = glibc + provides = symfony-cli + conflicts = symfony-cli + source = git+https://github.com/symfony-cli/symfony-cli#tag=v5.15.1 + sha256sums = SKIP + +pkgname = symfony-cli diff --git a/pkgbuilds/symfony-cli/.gitignore b/pkgbuilds/symfony-cli/.gitignore new file mode 100644 index 0000000..7e33c31 --- /dev/null +++ b/pkgbuilds/symfony-cli/.gitignore @@ -0,0 +1,4 @@ +pkg/ +src/ +symfony* +!symfony-cli.install diff --git a/pkgbuilds/symfony-cli/LICENSE b/pkgbuilds/symfony-cli/LICENSE new file mode 100644 index 0000000..1cc5efd --- /dev/null +++ b/pkgbuilds/symfony-cli/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Florian Moser + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pkgbuilds/symfony-cli/PKGBUILD b/pkgbuilds/symfony-cli/PKGBUILD new file mode 100644 index 0000000..c9cc5ae --- /dev/null +++ b/pkgbuilds/symfony-cli/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Florian Moser + +pkgname=symfony-cli +pkgrel=8 +pkgver=5.15.1 +pkgdesc="The Symfony client helps developers create and manage Symfony applications." +url="https://symfony.com/" +arch=('x86_64') +license=('AGPL3') +depends=('glibc') +makedepends=('git' 'go') +provides=('symfony-cli') +conflicts=('symfony-cli') +source=( + "git+https://github.com/symfony-cli/symfony-cli#tag=v${pkgver}" +) +sha256sums=('SKIP') + +build() { + cd "symfony-cli" + + DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") + PKGVER=${pkgver} + + go mod download + go build -trimpath -ldflags '-s -w -X main.channel=stable -X main.buildDate='"${DATE}"' -X main.version='"${PKGVER}"'' +} + +package() { + install -D -m 755 "${srcdir}/symfony-cli/symfony-cli" "${pkgdir}/usr/bin/symfony" +} diff --git a/pkgbuilds/symfony-cli/README.md b/pkgbuilds/symfony-cli/README.md new file mode 100644 index 0000000..80a5db5 --- /dev/null +++ b/pkgbuilds/symfony-cli/README.md @@ -0,0 +1,15 @@ +# Symfony CLI AUR Package + +## Update package + +0. Get newest version from https://github.com/symfony/cli/releases +1. Update package version in PKGBUILD +2. Execute `update.sh` + +or + +3. Generate new checksums with `updpkgsums` +4. Test install `makepkg -si` +5. Update .SRCINFO `makepkg --printsrcinfo > .SRCINFO` +6. `git remote add arch ssh://aur@aur.archlinux.org/symfony-cli.git` +7. `git push arch` diff --git a/pkgbuilds/symfony-cli/update.sh b/pkgbuilds/symfony-cli/update.sh new file mode 100755 index 0000000..45a1479 --- /dev/null +++ b/pkgbuilds/symfony-cli/update.sh @@ -0,0 +1,17 @@ +# /bin/bash +set +e +sudo pacman -R symfony-cli-bin --noconfirm +sudo pacman -R symfony-cli-bin-debug --noconfirm +set -e +rm -rf src +rm -rf pkg +rm -rf symfony-cli-*.gz +rm -rf symfony-cli-*.tar.zst +makepkg -si --noconfirm +makepkg --printsrcinfo > .SRCINFO +set +e +git add . +git commit -m "update package" +git push +git remote add arch ssh://aur@aur.archlinux.org/symfony-cli.git +git push arch diff --git a/pkgbuilds/ttf-ia-writer/.SRCINFO b/pkgbuilds/ttf-ia-writer/.SRCINFO new file mode 100644 index 0000000..f563259 --- /dev/null +++ b/pkgbuilds/ttf-ia-writer/.SRCINFO @@ -0,0 +1,44 @@ +pkgbase = ttf-ia-writer + pkgdesc = Subset of the fonts provided by iA Writer + pkgver = 20181225 + pkgrel = 1 + url = https://github.com/iaolo/iA-Fonts + arch = any + license = custom:OFL + provides = ttf-ia-writer-duospace + conflicts = ttf-ia-writer-duospace + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Mono/Static/iAWriterMonoS-Bold.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Mono/Static/iAWriterMonoS-BoldItalic.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Mono/Static/iAWriterMonoS-Italic.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Mono/Static/iAWriterMonoS-Regular.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Quattro/Static/iAWriterQuattroS-Bold.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Quattro/Static/iAWriterQuattroS-BoldItalic.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Quattro/Static/iAWriterQuattroS-Italic.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Quattro/Static/iAWriterQuattroS-Regular.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Duo/Static/iAWriterDuoS-Bold.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Duo/Static/iAWriterDuoS-BoldItalic.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Duo/Static/iAWriterDuoS-Italic.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Duo/Static/iAWriterDuoS-Regular.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Duospace/TTF%20(PC)/iAWriterDuospace-Bold.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Duospace/TTF%20(PC)/iAWriterDuospace-BoldItalic.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Duospace/TTF%20(PC)/iAWriterDuospace-Italic.ttf + source = https://github.com/iaolo/iA-Fonts/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce//iA%20Writer%20Duospace/TTF%20(PC)/iAWriterDuospace-Regular.ttf + sha512sums = 3334653927758b8bf1336a7954191df71bb5d660196c6a61a31aeb0a50480bf48c0fb39ec2e17d211c754f16433a8051c300c21dc2fd1b46f117c837d4d89f02 + sha512sums = 994cb5a8e9bc2d7cd79ae08816ed5f631aafcc293559195b26105eaa44f1c8843265e80064e324b2cbf141f125d0dafdf3dcd99de7da5dc954f4e08243c68df4 + sha512sums = e0d189ea1ca7feb04d9ade3232266e944a4ec7747754c01e3fb8d4d10afdafa739037d76d67e7636a7b1e45da3b9a935d8fa644813d97b07e75c1eb049e9eb1e + sha512sums = 837defdaef7fb5252b33c5a770e78ef655666c86a5891aa6b92e6b540167a834d1b79b444fb58bdd33c83b93bcce0e68ea60c99875c73cd2964b79b12b5e104e + sha512sums = 386eb2ad45c8b1126cbe15d8ace870f409f6ebb8393fa9e788e75ac5cee9de2bfd67d6cf55647abb52361daa7c0a4b2d2a63cfe651bfda99f6c1b9731ac586c7 + sha512sums = 9e2322ad3df70572b826f79d43877bd66ef80870125de930756e17b53fc98799cb4336428e1fd3e0333a43d7f814e9eae30a944a5ac6d6440770994f2ba438e1 + sha512sums = ff08a80847770e14a0d6593f43a31812d2bf609a7dbe8f343a69aa35f687b5ee8ebd3102d8bf9d4b474788e67ad6c7298c1c99ec1d15923845436d1184c16273 + sha512sums = 1b0b9c6ad93a98443be677ea447358f23949276ef220795749d4b47f2f7c49b893fef354a1ce3fe533e045860ac351948227da6064d20b0748b7569e0ca254c4 + sha512sums = 5f73b50535b2c187cfa70c9d0cfb9d39a5fc1cdca8c85300ada66fc5cb9ce393ad8db3563ef7ba14010328d533e1c1f7d924116d3ac6d619e1b07ba850a9f66c + sha512sums = 120906c5cdf21f32160f595b757b0534fedf605ed7bc441b570b372801e004b5c6adcf07a6b45e086ce2ab3241c31b05baff220b94db192d9933a2668710e653 + sha512sums = 7b7ea880b6cc7e73c9401ffd2989cc8c51eb868a696de721771899b89f2a808a609d7cba6750bbc301de92a6fb15f9b0454757d5e80726723154a24571c3b04e + sha512sums = d6a5f340ec45bbe9f19247370b4be1d885f5ace6fab1ed9f2ed0966de655c5ae1de08dd774854898ac50129f50e5a2c0f352231930c33d6cbce40ed08521a76c + sha512sums = 45e34601f4eeb57bec8babbc5d82c8a7189db6259d39bd28935cd95bc979b6fb70981047eee7ff34eb203b1f19a9bbf20ba9a5934c832a04dc5a978eeca863f1 + sha512sums = 67405a5e5114ef5f1d0981d55a8cd9ebb0b612fa7f180c98d6bf0022c68bc14c3d742c690282900a9f6b745159f675ac03b49cd748147085c1e3e2dba532196b + sha512sums = f6e278e790128f9a6061f4e18e37a823a3a562a1fdb3f6d39dcd99eaa046bf0dda5a48fadf3bc6b72a613a4ff67cf0900aecc0eea8f7d673e03471ccbe2d2452 + sha512sums = f3d5f41f7b293f15f33d5e84dc01e9ca0252bececb7c29d6e862b6421bb2fbb677c520bcf9e20be488a50705d87f26c6abda190ee32c576fac1820df3a6f66b1 + +pkgname = ttf-ia-writer + diff --git a/pkgbuilds/ttf-ia-writer/.gitignore b/pkgbuilds/ttf-ia-writer/.gitignore new file mode 100644 index 0000000..218620e --- /dev/null +++ b/pkgbuilds/ttf-ia-writer/.gitignore @@ -0,0 +1,4 @@ +* +!/PKGBUILD +!/.SRCINFO +!/.gitignore diff --git a/pkgbuilds/ttf-ia-writer/PKGBUILD b/pkgbuilds/ttf-ia-writer/PKGBUILD new file mode 100644 index 0000000..fc23d45 --- /dev/null +++ b/pkgbuilds/ttf-ia-writer/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Adrián Pérez de Castro +pkgname=ttf-ia-writer +pkgdesc='Subset of the fonts provided by iA Writer' +pkgver=20181225 +pkgrel=1 +url=https://github.com/iaolo/iA-Fonts +conflicts=(ttf-ia-writer-duospace) +provides=(${conflicts[@]}) +license=(custom:OFL) +arch=(any) + +_baseurl="${url}/raw/b337fe1a4c93026268f70e4b2678371f3e89e2ce/" +source=("${_baseurl}/iA%20Writer%20Mono/Static/iAWriterMonoS-Bold.ttf" + "${_baseurl}/iA%20Writer%20Mono/Static/iAWriterMonoS-BoldItalic.ttf" + "${_baseurl}/iA%20Writer%20Mono/Static/iAWriterMonoS-Italic.ttf" + "${_baseurl}/iA%20Writer%20Mono/Static/iAWriterMonoS-Regular.ttf" + "${_baseurl}/iA%20Writer%20Quattro/Static/iAWriterQuattroS-Bold.ttf" + "${_baseurl}/iA%20Writer%20Quattro/Static/iAWriterQuattroS-BoldItalic.ttf" + "${_baseurl}/iA%20Writer%20Quattro/Static/iAWriterQuattroS-Italic.ttf" + "${_baseurl}/iA%20Writer%20Quattro/Static/iAWriterQuattroS-Regular.ttf" + "${_baseurl}/iA%20Writer%20Duo/Static/iAWriterDuoS-Bold.ttf" + "${_baseurl}/iA%20Writer%20Duo/Static/iAWriterDuoS-BoldItalic.ttf" + "${_baseurl}/iA%20Writer%20Duo/Static/iAWriterDuoS-Italic.ttf" + "${_baseurl}/iA%20Writer%20Duo/Static/iAWriterDuoS-Regular.ttf" + "${_baseurl}/iA%20Writer%20Duospace/TTF%20(PC)/iAWriterDuospace-Bold.ttf" + "${_baseurl}/iA%20Writer%20Duospace/TTF%20(PC)/iAWriterDuospace-BoldItalic.ttf" + "${_baseurl}/iA%20Writer%20Duospace/TTF%20(PC)/iAWriterDuospace-Italic.ttf" + "${_baseurl}/iA%20Writer%20Duospace/TTF%20(PC)/iAWriterDuospace-Regular.ttf") + +package () { + install -m644 -D -t "${pkgdir}/usr/share/fonts/${pkgname}" *.ttf +} +sha512sums=('3334653927758b8bf1336a7954191df71bb5d660196c6a61a31aeb0a50480bf48c0fb39ec2e17d211c754f16433a8051c300c21dc2fd1b46f117c837d4d89f02' + '994cb5a8e9bc2d7cd79ae08816ed5f631aafcc293559195b26105eaa44f1c8843265e80064e324b2cbf141f125d0dafdf3dcd99de7da5dc954f4e08243c68df4' + 'e0d189ea1ca7feb04d9ade3232266e944a4ec7747754c01e3fb8d4d10afdafa739037d76d67e7636a7b1e45da3b9a935d8fa644813d97b07e75c1eb049e9eb1e' + '837defdaef7fb5252b33c5a770e78ef655666c86a5891aa6b92e6b540167a834d1b79b444fb58bdd33c83b93bcce0e68ea60c99875c73cd2964b79b12b5e104e' + '386eb2ad45c8b1126cbe15d8ace870f409f6ebb8393fa9e788e75ac5cee9de2bfd67d6cf55647abb52361daa7c0a4b2d2a63cfe651bfda99f6c1b9731ac586c7' + '9e2322ad3df70572b826f79d43877bd66ef80870125de930756e17b53fc98799cb4336428e1fd3e0333a43d7f814e9eae30a944a5ac6d6440770994f2ba438e1' + 'ff08a80847770e14a0d6593f43a31812d2bf609a7dbe8f343a69aa35f687b5ee8ebd3102d8bf9d4b474788e67ad6c7298c1c99ec1d15923845436d1184c16273' + '1b0b9c6ad93a98443be677ea447358f23949276ef220795749d4b47f2f7c49b893fef354a1ce3fe533e045860ac351948227da6064d20b0748b7569e0ca254c4' + '5f73b50535b2c187cfa70c9d0cfb9d39a5fc1cdca8c85300ada66fc5cb9ce393ad8db3563ef7ba14010328d533e1c1f7d924116d3ac6d619e1b07ba850a9f66c' + '120906c5cdf21f32160f595b757b0534fedf605ed7bc441b570b372801e004b5c6adcf07a6b45e086ce2ab3241c31b05baff220b94db192d9933a2668710e653' + '7b7ea880b6cc7e73c9401ffd2989cc8c51eb868a696de721771899b89f2a808a609d7cba6750bbc301de92a6fb15f9b0454757d5e80726723154a24571c3b04e' + 'd6a5f340ec45bbe9f19247370b4be1d885f5ace6fab1ed9f2ed0966de655c5ae1de08dd774854898ac50129f50e5a2c0f352231930c33d6cbce40ed08521a76c' + '45e34601f4eeb57bec8babbc5d82c8a7189db6259d39bd28935cd95bc979b6fb70981047eee7ff34eb203b1f19a9bbf20ba9a5934c832a04dc5a978eeca863f1' + '67405a5e5114ef5f1d0981d55a8cd9ebb0b612fa7f180c98d6bf0022c68bc14c3d742c690282900a9f6b745159f675ac03b49cd748147085c1e3e2dba532196b' + 'f6e278e790128f9a6061f4e18e37a823a3a562a1fdb3f6d39dcd99eaa046bf0dda5a48fadf3bc6b72a613a4ff67cf0900aecc0eea8f7d673e03471ccbe2d2452' + 'f3d5f41f7b293f15f33d5e84dc01e9ca0252bececb7c29d6e862b6421bb2fbb677c520bcf9e20be488a50705d87f26c6abda190ee32c576fac1820df3a6f66b1') diff --git a/pkgbuilds/typora/.SRCINFO b/pkgbuilds/typora/.SRCINFO new file mode 100644 index 0000000..3574944 --- /dev/null +++ b/pkgbuilds/typora/.SRCINFO @@ -0,0 +1,21 @@ +pkgbase = typora + pkgdesc = A minimal markdown editor and reader. + pkgver = 1.12.2 + pkgrel = 1 + url = https://typora.io/ + arch = x86_64 + arch = aarch64 + license = custom:"Copyright (c) 2015 Abner Lee All Rights Reserved." + depends = gtk3 + depends = nss + depends = alsa-lib + optdepends = noto-fonts-emoji: Or some other emoji font to see emojis + optdepends = pandoc: Import/export for extra file formats + source = typora.sh + sha512sums = de9c883c63f3ea35bd551c8761e605f8e1a3468943e000abcbf94bb0c5cbb5f0f6c7fa4d49ab39c177f167e0e3d0b061c861bf828627b4a34f7f1589119c3d04 + source_x86_64 = https://download.typora.io/linux/typora_1.12.2_amd64.deb + sha512sums_x86_64 = ee1213dc64e86d75e11f38ec4444f1a8bedcc6806a8260931875cd443ea5a0ed1c87fe825d04ec8098aec3d02fd0273862dea26b32adeb267e4bfa2c2f041fa7 + source_aarch64 = https://download.typora.io/linux/typora_1.12.2_arm64.deb + sha512sums_aarch64 = c89d97175325cce29c83830e8fb0eae26e1d6892ae89e70639056898f80ad91219ed29cf3fa8da290a6bcb1f84923ca19547a0741b99bf49db76fbf64f670cf1 + +pkgname = typora diff --git a/pkgbuilds/typora/.gitignore b/pkgbuilds/typora/.gitignore new file mode 100644 index 0000000..84e9664 --- /dev/null +++ b/pkgbuilds/typora/.gitignore @@ -0,0 +1,4 @@ +pkg/ +src/ +typora-*.pkg.* +typora_*.deb diff --git a/pkgbuilds/typora/Makefile b/pkgbuilds/typora/Makefile new file mode 100644 index 0000000..abc48a9 --- /dev/null +++ b/pkgbuilds/typora/Makefile @@ -0,0 +1,36 @@ + +# This will update the checksums and build the package +all: updateinfo + makepkg -sr +# Check if any files are world writable + find pkg/typora -type f -perm -o+w -printf "WARNING: '%p' has o+w set\n" + +# This will do the same as all, but will install it to the local system as well +install: updateinfo + makepkg -sri +# Check if any files are world writable + find pkg/typora -type f -perm -o+w -printf "WARNING: '%p' has o+w set\n" + +# This will update the checksums and .SRCINFO +updateinfo: + updpkgsums + makepkg --printsrcinfo > .SRCINFO + +# This will update PKGBUILD with the latest version and build the package +update: + sed 's/^pkgver=.*$$/pkgver=$(shell curl -s https://downloads.typora.io/linux/Packages | grep Version | cut -f 2 -d ' ' | sort -V | cut -f 1 -d '-' | uniq | tail -n 1)/' -i PKGBUILD + sed 's/^pkgrel=.*$$/pkgrel=1/' -i PKGBUILD + $(MAKE) + +# This will list the versions available in the Ubuntu repository +versions: + curl -s https://downloads.typora.io/linux/Packages | grep Version | cut -f 2 -d ' ' | sort -V | cut -f 1 -d '-' | uniq + +# This will remove the files downloaded and created in the build process +clean: + rm -rf pkg src typora_*.deb typora-*.pkg.* + +publish: + git add . + git commit -m "Update to version $(shell sed -n 's/^pkgver=\(.*\)$$/\1/p' PKGBUILD)" +# git push diff --git a/pkgbuilds/typora/PKGBUILD b/pkgbuilds/typora/PKGBUILD new file mode 100644 index 0000000..32a46d0 --- /dev/null +++ b/pkgbuilds/typora/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jonas Bögle +# Contributor: Jonathan Duck + +pkgname=typora +pkgver=1.12.2 +_pkgver_x86_64="$pkgver" +_pkgver_aarch64="$pkgver" +pkgrel=1 +pkgdesc="A minimal markdown editor and reader." +arch=('x86_64' 'aarch64') +license=('custom:"Copyright (c) 2015 Abner Lee All Rights Reserved."') +url="https://typora.io/" +depends=('gtk3' 'nss' 'alsa-lib') +optdepends=( + 'noto-fonts-emoji: Or some other emoji font to see emojis' + 'pandoc: Import/export for extra file formats') +source=("$pkgname.sh") +_urlbase="https://download.typora.io/linux/typora_" +source_x86_64=("${_urlbase}${_pkgver_x86_64}_amd64.deb") +source_aarch64=("${_urlbase}${_pkgver_aarch64}_arm64.deb") +sha512sums=('de9c883c63f3ea35bd551c8761e605f8e1a3468943e000abcbf94bb0c5cbb5f0f6c7fa4d49ab39c177f167e0e3d0b061c861bf828627b4a34f7f1589119c3d04') +sha512sums_x86_64=('ee1213dc64e86d75e11f38ec4444f1a8bedcc6806a8260931875cd443ea5a0ed1c87fe825d04ec8098aec3d02fd0273862dea26b32adeb267e4bfa2c2f041fa7') +sha512sums_aarch64=('c89d97175325cce29c83830e8fb0eae26e1d6892ae89e70639056898f80ad91219ed29cf3fa8da290a6bcb1f84923ca19547a0741b99bf49db76fbf64f670cf1') + +package() { + # unpack archive + if [[ "$CARCH" == "x86_64" ]]; then + bsdtar -xf data.tar.zst -C "$pkgdir/" + elif [[ "$CARCH" == "aarch64" ]]; then + bsdtar -xf data.tar.xz -C "$pkgdir/" + fi + # remove lintian overrides + rm -rf "$pkgdir/usr/share/lintian/" + # replace bin link with custom launch script + rm -rf "$pkgdir/usr/bin/$pkgname" + install -m755 "$srcdir/$pkgname.sh" "$pkgdir/usr/bin/$pkgname" + # move license to correct path + install -Dm644 "$pkgdir/usr/share/doc/$pkgname/copyright" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + # delete previous copyright path + rm "$pkgdir/usr/share/doc/$pkgname/copyright" + # delete doc dir if empty + rmdir --ignore-fail-on-non-empty "$pkgdir/usr/share/doc/$pkgname" "$pkgdir/usr/share/doc" + # remove change log from application comment + sed -i '/Change Log/d' "$pkgdir/usr/share/applications/typora.desktop" + # fix permissions + chmod 644 "$pkgdir/usr/share/applications/typora.desktop" + chmod 644 "$pkgdir/usr/share/typora/resources/packages/node-spellchecker/vendor/hunspell_dictionaries/en_US.dic" + chmod 644 "$pkgdir/usr/share/typora/resources/packages/node-spellchecker/vendor/hunspell_dictionaries/en_US.aff" + find "$pkgdir" -type d -exec chmod 755 {} \; +} diff --git a/pkgbuilds/typora/typora.sh b/pkgbuilds/typora/typora.sh new file mode 100644 index 0000000..9eba597 --- /dev/null +++ b/pkgbuilds/typora/typora.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-~/.config} + +# Allow users to override command-line options +if [[ -f $XDG_CONFIG_HOME/typora-flags.conf ]]; then + TYPORA_USER_FLAGS="$(sed 's/#.*//' $XDG_CONFIG_HOME/typora-flags.conf | tr '\n' ' ')" +fi + +# Launch +exec /usr/share/typora/Typora "$@" $TYPORA_USER_FLAGS diff --git a/pkgbuilds/tzupdate/.SRCINFO b/pkgbuilds/tzupdate/.SRCINFO new file mode 100644 index 0000000..93cca94 --- /dev/null +++ b/pkgbuilds/tzupdate/.SRCINFO @@ -0,0 +1,13 @@ +pkgbase = tzupdate + pkgdesc = Set the system timezone based on IP geolocation + pkgver = 3.1.0 + pkgrel = 1 + url = https://github.com/cdown/tzupdate + arch = x86_64 + license = MIT + makedepends = cargo + options = !lto + source = https://github.com/cdown/tzupdate/archive/refs/tags/3.1.0.tar.gz + sha256sums = aebf678afd261852bd3ebf4689a9a7382c3e4e43a92864b77cbee2d26ec62e22 + +pkgname = tzupdate diff --git a/pkgbuilds/tzupdate/PKGBUILD b/pkgbuilds/tzupdate/PKGBUILD new file mode 100644 index 0000000..a8d05c7 --- /dev/null +++ b/pkgbuilds/tzupdate/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Chris Down + +pkgname=tzupdate +pkgver=3.1.0 +pkgrel=1 +pkgdesc='Set the system timezone based on IP geolocation' +url=https://github.com/cdown/tzupdate +arch=('x86_64') +options=(!lto) +license=('MIT') +makedepends=('cargo') +source=("$url/archive/refs/tags/$pkgver.tar.gz") +sha256sums=('aebf678afd261852bd3ebf4689a9a7382c3e4e43a92864b77cbee2d26ec62e22') + +build() { + cd "$srcdir/$pkgname-$pkgver" + cargo build --release --locked +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + cargo install --no-track --locked --root "$pkgdir/usr" --path . +} diff --git a/pkgbuilds/ufw-docker/.SRCINFO b/pkgbuilds/ufw-docker/.SRCINFO new file mode 100644 index 0000000..10f4e26 --- /dev/null +++ b/pkgbuilds/ufw-docker/.SRCINFO @@ -0,0 +1,15 @@ +pkgbase = ufw-docker + pkgdesc = To fix the Docker and UFW security flaw without disabling iptables. + pkgver = 250710 + pkgrel = 1 + url = https://github.com/chaifeng/ufw-docker + install = ufw-docker.install + arch = any + license = GPL License Version 3.0 + depends = ufw + source = ufw-docker-250710.tar.gz::https://github.com/chaifeng/ufw-docker/archive/refs/tags/250710.tar.gz + source = ufw-docker.install + sha256sums = 13b17fc74df2fdb6bda653c6130054f156318a4910db4c943be1df54110a450b + sha256sums = d97ba0e63766444128e4ddfadc316734f431b5d6d9fc6a6ddadbfd1057ae95f7 + +pkgname = ufw-docker diff --git a/pkgbuilds/ufw-docker/.gitignore b/pkgbuilds/ufw-docker/.gitignore new file mode 100644 index 0000000..abdc5c0 --- /dev/null +++ b/pkgbuilds/ufw-docker/.gitignore @@ -0,0 +1,4 @@ +*.zst +*.tar.gz +pkg/* +src/* diff --git a/pkgbuilds/ufw-docker/PKGBUILD b/pkgbuilds/ufw-docker/PKGBUILD new file mode 100644 index 0000000..299ef5d --- /dev/null +++ b/pkgbuilds/ufw-docker/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: ifurther <> +# Contributor: Aaronjamt +pkgname=ufw-docker +pkgver=250710 +pkgrel=1 +pkgdesc="To fix the Docker and UFW security flaw without disabling iptables." +arch=("any") +url="https://github.com/chaifeng/${pkgname}" +license=('GPL License Version 3.0') +depends=('ufw') +install=ufw-docker.install +source=("$pkgname-$pkgver.tar.gz::https://github.com/chaifeng/$pkgname/archive/refs/tags/$pkgver.tar.gz" + "ufw-docker.install") +sha256sums=('13b17fc74df2fdb6bda653c6130054f156318a4910db4c943be1df54110a450b' + 'd97ba0e63766444128e4ddfadc316734f431b5d6d9fc6a6ddadbfd1057ae95f7') + +package() { + pushd "$srcdir/$pkgname-$pkgver" + msg2 'Installing license...' + install -Dm 644 LICENSE -t "$pkgdir/usr/share/licenses/ufw-docker/LICENSE" + + msg2 'Installing...' + install -Dm755 ufw-docker "$pkgdir/usr/bin/ufw-docker" + +} diff --git a/pkgbuilds/ufw-docker/ufw-docker.install b/pkgbuilds/ufw-docker/ufw-docker.install new file mode 100644 index 0000000..959513e --- /dev/null +++ b/pkgbuilds/ufw-docker/ufw-docker.install @@ -0,0 +1,16 @@ +post_install() { + echo "Now you should back up /etc/ufw/after.rules, and run:" + echo " # ufw-docker install" + echo "If you want to show help , just run:" + echo " # ufw-docker help" + echo "Check installing status, run:" + echo " # ufw-docker check" + echo "Check status, run:" + echo " # ufw-docker status" +} + +post_remove() { + echo "rest after.rules to default" + rm /etc/ufw/after.rules + mv /etc/ufw/after.rules-ufw-docker* /etc/ufw/after.rules +} diff --git a/pkgbuilds/visual-studio-code-bin/.SRCINFO b/pkgbuilds/visual-studio-code-bin/.SRCINFO new file mode 100644 index 0000000..c454c7b --- /dev/null +++ b/pkgbuilds/visual-studio-code-bin/.SRCINFO @@ -0,0 +1,47 @@ +pkgbase = visual-studio-code-bin + pkgdesc = Visual Studio Code (vscode): Editor for building and debugging modern web and cloud applications (official binary version) + pkgver = 1.105.1 + pkgrel = 1 + url = https://code.visualstudio.com/ + install = visual-studio-code-bin.install + arch = x86_64 + arch = aarch64 + arch = armv7h + license = custom: commercial + depends = libxkbfile + depends = gnupg + depends = gtk3 + depends = libsecret + depends = nss + depends = gcc-libs + depends = libnotify + depends = libxss + depends = glibc + depends = lsof + depends = shared-mime-info + depends = xdg-utils + depends = alsa-lib + optdepends = glib2: Needed for move to trash functionality + optdepends = libdbusmenu-glib: Needed for KDE global menu + optdepends = org.freedesktop.secrets: Needed for settings sync + optdepends = icu69: Needed for live share + provides = code + provides = vscode + conflicts = code + options = !strip + source = code-1.105.1.desktop.in::https://raw.githubusercontent.com/microsoft/vscode/1.105.1/resources/linux/code.desktop + source = code-1.105.1-url-handler.desktop.in::https://raw.githubusercontent.com/microsoft/vscode/1.105.1/resources/linux/code-url-handler.desktop + source = code-1.105.1-workspace.xml.in::https://raw.githubusercontent.com/microsoft/vscode/1.105.1/resources/linux/code-workspace.xml + source = visual-studio-code-bin.sh + sha256sums = 2f1782b30c4e040efff655fd9cf477930c5a0c81ddae27749b0cbb922c1d248e + sha256sums = c361efa7e02fcad759ed80d2fbab67877f33219b981578af6fffaf18aeb12d9b + sha256sums = 3af748dd6578a1775e8eb7248ba397b7e11840df2ea6ee234ff76fee3dc306cf + sha256sums = 8257a5ad82fa1f7dec11dfa064217b80df4cfec24f50cec7ca0ad62cf8295bfe + source_x86_64 = code_x64_1.105.1.tar.gz::https://update.code.visualstudio.com/1.105.1/linux-x64/stable + sha256sums_x86_64 = 32a650f1a111df00354ad9571f57d12268376777677dd5af2162ead921067a89 + source_aarch64 = code_arm64_1.105.1.tar.gz::https://update.code.visualstudio.com/1.105.1/linux-arm64/stable + sha256sums_aarch64 = 4579e52664fe2df2d80724b420abab1827d30520f0e766f7608403dba2fe94bd + source_armv7h = code_armhf_1.105.1.tar.gz::https://update.code.visualstudio.com/1.105.1/linux-armhf/stable + sha256sums_armv7h = 5fa56116b955e12d3c6cf80045598801c8b362acf6578b10af0206ce47832ee1 + +pkgname = visual-studio-code-bin diff --git a/pkgbuilds/visual-studio-code-bin/.gitignore b/pkgbuilds/visual-studio-code-bin/.gitignore new file mode 100644 index 0000000..fdf96ac --- /dev/null +++ b/pkgbuilds/visual-studio-code-bin/.gitignore @@ -0,0 +1,2 @@ +*.in +.xml diff --git a/pkgbuilds/visual-studio-code-bin/PKGBUILD b/pkgbuilds/visual-studio-code-bin/PKGBUILD new file mode 100644 index 0000000..f5c9758 --- /dev/null +++ b/pkgbuilds/visual-studio-code-bin/PKGBUILD @@ -0,0 +1,83 @@ +# Maintainer: D. Can Celasun + +pkgname=visual-studio-code-bin +_pkgname=visual-studio-code +pkgver=1.105.1 +pkgrel=1 +pkgdesc="Visual Studio Code (vscode): Editor for building and debugging modern web and cloud applications (official binary version)" +arch=('x86_64' 'aarch64' 'armv7h') +url="https://code.visualstudio.com/" +license=('custom: commercial') +provides=('code' 'vscode') +conflicts=('code') +# Upstream has signature verification for extensions and stripping breaks it +# See https://github.com/microsoft/vscode/issues/223455#issuecomment-2610001754 +options=(!strip) +install=$pkgname.install +# lsof: needed for terminal splitting, see https://github.com/Microsoft/vscode/issues/62991 +# xdg-utils: needed for opening web links with xdg-open +depends=(libxkbfile gnupg gtk3 libsecret nss gcc-libs libnotify libxss glibc lsof shared-mime-info xdg-utils alsa-lib) +optdepends=('glib2: Needed for move to trash functionality' + 'libdbusmenu-glib: Needed for KDE global menu' + 'org.freedesktop.secrets: Needed for settings sync' + # See https://github.com/MicrosoftDocs/live-share/issues/4650 + 'icu69: Needed for live share' ) +source=(code-${pkgver}.desktop.in::https://raw.githubusercontent.com/microsoft/vscode/${pkgver}/resources/linux/code.desktop + code-${pkgver}-url-handler.desktop.in::https://raw.githubusercontent.com/microsoft/vscode/${pkgver}/resources/linux/code-url-handler.desktop + code-${pkgver}-workspace.xml.in::https://raw.githubusercontent.com/microsoft/vscode/${pkgver}/resources/linux/code-workspace.xml + ${_pkgname}-bin.sh) +source_x86_64=(code_x64_${pkgver}.tar.gz::https://update.code.visualstudio.com/${pkgver}/linux-x64/stable) +source_aarch64=(code_arm64_${pkgver}.tar.gz::https://update.code.visualstudio.com/${pkgver}/linux-arm64/stable) +source_armv7h=(code_armhf_${pkgver}.tar.gz::https://update.code.visualstudio.com/${pkgver}/linux-armhf/stable) + +sha256sums=('2f1782b30c4e040efff655fd9cf477930c5a0c81ddae27749b0cbb922c1d248e' + 'c361efa7e02fcad759ed80d2fbab67877f33219b981578af6fffaf18aeb12d9b' + '3af748dd6578a1775e8eb7248ba397b7e11840df2ea6ee234ff76fee3dc306cf' + '8257a5ad82fa1f7dec11dfa064217b80df4cfec24f50cec7ca0ad62cf8295bfe') +sha256sums_x86_64=('32a650f1a111df00354ad9571f57d12268376777677dd5af2162ead921067a89') +sha256sums_aarch64=('4579e52664fe2df2d80724b420abab1827d30520f0e766f7608403dba2fe94bd') +sha256sums_armv7h=('5fa56116b955e12d3c6cf80045598801c8b362acf6578b10af0206ce47832ee1') + +_set_meta_info() { + sed 's/@@NAME_LONG@@/Visual Studio Code/g' "$1" |\ + sed 's/@@NAME_SHORT@@/Code/g' |\ + sed 's/@@NAME@@/code/g' |\ + sed 's#@@EXEC@@#/usr/bin/code#g' |\ + sed 's/@@ICON@@/visual-studio-code/g' |\ + sed 's/@@URLPROTOCOL@@/vscode/g' +} + +prepare() { + _set_meta_info "${srcdir}/code-${pkgver}.desktop.in" > "${srcdir}/code.desktop" + _set_meta_info "${srcdir}/code-${pkgver}-url-handler.desktop.in" > "${srcdir}/code-url-handler.desktop" + _set_meta_info "${srcdir}/code-${pkgver}-workspace.xml.in" > "${srcdir}/code-workspace.xml" +} + +_pkg() { + if [ "${CARCH}" = "aarch64" ]; then + echo 'VSCode-linux-arm64' + elif [ "${CARCH}" = "armv7h" ]; then + echo 'VSCode-linux-armhf' + else + echo 'VSCode-linux-x64' + fi +} + +package() { + install -d "${pkgdir}/opt/${_pkgname}" + install -d "${pkgdir}/usr/bin" + install -d "${pkgdir}/usr/share/"{applications,pixmaps,mime/packages,licenses/${_pkgname}} + + install -m644 "${srcdir}/$(_pkg)/resources/app/LICENSE.rtf" "${pkgdir}/usr/share/licenses/${_pkgname}/LICENSE.rtf" + install -m644 "${srcdir}/$(_pkg)/resources/app/resources/linux/code.png" "${pkgdir}/usr/share/pixmaps/${_pkgname}.png" + install -m644 "${srcdir}/code.desktop" "${pkgdir}/usr/share/applications/code.desktop" + install -m644 "${srcdir}/code-url-handler.desktop" "${pkgdir}/usr/share/applications/code-url-handler.desktop" + install -m644 "${srcdir}/code-workspace.xml" "${pkgdir}/usr/share/mime/packages/${pkgname}-workspace.xml" + install -Dm 644 "${srcdir}/$(_pkg)/resources/completions/bash/code" "${pkgdir}/usr/share/bash-completion/completions/code" + install -Dm 644 "${srcdir}/$(_pkg)/resources/completions/zsh/_code" "${pkgdir}/usr/share/zsh/site-functions/_code" + + cp -r "${srcdir}/$(_pkg)/"* "${pkgdir}/opt/${_pkgname}" + + # Launcher + install -m755 "${srcdir}/${_pkgname}-bin.sh" "${pkgdir}/usr/bin/code" +} diff --git a/pkgbuilds/visual-studio-code-bin/visual-studio-code-bin.install b/pkgbuilds/visual-studio-code-bin/visual-studio-code-bin.install new file mode 100644 index 0000000..f7b11b3 --- /dev/null +++ b/pkgbuilds/visual-studio-code-bin/visual-studio-code-bin.install @@ -0,0 +1,21 @@ +# Colored makepkg-like functions +msg_blue() { + printf "${blue}==>${bold} $1${all_off}\n" +} + +note() { + printf "${blue}==>${yellow} NOTE:${bold} $1${all_off}\n" +} + +all_off="$(tput sgr0)" +bold="${all_off}$(tput bold)" +blue="${bold}$(tput setaf 4)" +yellow="${bold}$(tput setaf 3)" + +post_install() { + note "Custom flags should be put directly in: ~/.config/code-flags.conf" +} + +post_upgrade() { + post_install +} \ No newline at end of file diff --git a/pkgbuilds/visual-studio-code-bin/visual-studio-code-bin.sh b/pkgbuilds/visual-studio-code-bin/visual-studio-code-bin.sh new file mode 100644 index 0000000..7650d63 --- /dev/null +++ b/pkgbuilds/visual-studio-code-bin/visual-studio-code-bin.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-~/.config} + +# Allow users to override command-line options +if [[ -f $XDG_CONFIG_HOME/code-flags.conf ]]; then + CODE_USER_FLAGS="$(sed 's/#.*//' $XDG_CONFIG_HOME/code-flags.conf | tr '\n' ' ')" +fi + +# Launch +exec /opt/visual-studio-code/bin/code "$@" $CODE_USER_FLAGS diff --git a/pkgbuilds/walker/.SRCINFO b/pkgbuilds/walker/.SRCINFO new file mode 100644 index 0000000..61f9091 --- /dev/null +++ b/pkgbuilds/walker/.SRCINFO @@ -0,0 +1,24 @@ +pkgbase = walker + pkgdesc = wayland application runner + pkgver = 2.7.0 + pkgrel = 1 + url = https://github.com/abenz1267/walker + arch = x86_64 + arch = aarch64 + license = GPL + makedepends = cargo + makedepends = gobject-introspection + makedepends = glibc + makedepends = protobuf + depends = gtk4-layer-shell + depends = poppler-glib + depends = cairo + depends = elephant + depends = elephant-desktopapplications + depends = elephant-providerlist + provides = walker + conflicts = walker + source = https://github.com/abenz1267/walker/archive/refs/tags/v2.7.0.tar.gz + sha256sums = 7df842aa627951882fe596b4161c632ed3d5b9f020ea92551b20f810d6e3a317 + +pkgname = walker diff --git a/pkgbuilds/walker/PKGBUILD b/pkgbuilds/walker/PKGBUILD new file mode 100644 index 0000000..3c7b3c3 --- /dev/null +++ b/pkgbuilds/walker/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Andrej Benz + +pkgname=walker +pkgver=2.7.0 +pkgrel=1 +pkgdesc='wayland application runner' +url='https://github.com/abenz1267/walker' +arch=('x86_64' 'aarch64') +license=('GPL') +makedepends=('cargo' 'gobject-introspection' 'glibc' 'protobuf') +depends=('gtk4-layer-shell' 'poppler-glib' 'cairo' 'elephant' 'elephant-desktopapplications' 'elephant-providerlist') +conflicts=('walker') +provides=('walker') +source=("${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=("7df842aa627951882fe596b4161c632ed3d5b9f020ea92551b20f810d6e3a317") + +build() { + cd ${pkgname}-${pkgver} + export RUSTUP_TOOLCHAIN=stable + export CARGO_TARGET_DIR=target + cargo build --release +} + +package() { + cd ${pkgname}-${pkgver}/target/release + install -Dm 755 walker -t "${pkgdir}/usr/bin" + + cd ../../ + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + + cd resources + install -Dm 644 config.toml -t "${pkgdir}/etc/xdg/walker" + + cd themes/default + install -Dm 644 item.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 item_calc.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 item_clipboard.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 item_dmenu.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 item_files.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 item_providerlist.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 item_symbols.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 item_archlinuxpkgs.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 item_todo.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 item_unicode.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 layout.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 keybind.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 preview.xml -t "${pkgdir}/etc/xdg/walker/themes/default" + install -Dm 644 style.css -t "${pkgdir}/etc/xdg/walker/themes/default" +} diff --git a/pkgbuilds/yay/.SRCINFO b/pkgbuilds/yay/.SRCINFO new file mode 100644 index 0000000..92a8d2b --- /dev/null +++ b/pkgbuilds/yay/.SRCINFO @@ -0,0 +1,24 @@ +pkgbase = yay + pkgdesc = Yet another yogurt. Pacman wrapper and AUR helper written in go. + pkgver = 12.5.2 + pkgrel = 2 + url = https://github.com/Jguer/yay + arch = i686 + arch = pentium4 + arch = x86_64 + arch = arm + arch = armv7h + arch = armv6h + arch = aarch64 + arch = riscv64 + license = GPL-3.0-or-later + makedepends = go>=1.24 + depends = pacman>6.1 + depends = git + optdepends = sudo: privilege elevation + optdepends = doas: privilege elevation + options = !lto + source = yay-12.5.2.tar.gz::https://github.com/Jguer/yay/archive/v12.5.2.tar.gz + sha256sums = f1a089862b56a0ecd04c28d3e10d9964dc54c8477b38ffcf8a820ece11e80580 + +pkgname = yay diff --git a/pkgbuilds/yay/.gitignore b/pkgbuilds/yay/.gitignore new file mode 100644 index 0000000..6b087fc --- /dev/null +++ b/pkgbuilds/yay/.gitignore @@ -0,0 +1,6 @@ +/*.tar.xz +/*.tar.gz +/*.tar.zst +/pkg +/src +/yay diff --git a/pkgbuilds/yay/PKGBUILD b/pkgbuilds/yay/PKGBUILD new file mode 100644 index 0000000..ab7c9d5 --- /dev/null +++ b/pkgbuilds/yay/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jguer +pkgname=yay +pkgver=12.5.2 +pkgrel=2 +pkgdesc="Yet another yogurt. Pacman wrapper and AUR helper written in go." +arch=('i686' 'pentium4' 'x86_64' 'arm' 'armv7h' 'armv6h' 'aarch64' 'riscv64') +url="https://github.com/Jguer/yay" +options=(!lto) +license=('GPL-3.0-or-later') +depends=( + 'pacman>6.1' + 'git' +) +optdepends=( + 'sudo: privilege elevation' + 'doas: privilege elevation' +) +makedepends=('go>=1.24') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Jguer/yay/archive/v${pkgver}.tar.gz") +sha256sums=('f1a089862b56a0ecd04c28d3e10d9964dc54c8477b38ffcf8a820ece11e80580') + +build() { + export GOPATH="$srcdir"/gopath + export CGO_CPPFLAGS="${CPPFLAGS}" + export CGO_CFLAGS="${CFLAGS}" + export CGO_CXXFLAGS="${CXXFLAGS}" + export CGO_LDFLAGS="${LDFLAGS}" + export CGO_ENABLED=1 + + cd "$srcdir/$pkgname-$pkgver" + make VERSION=$pkgver DESTDIR="$pkgdir" PREFIX="/usr" build +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make VERSION=$pkgver DESTDIR="$pkgdir" PREFIX="/usr" install +} From 902363c4b162fafa909df323b7454c05e496058e Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 26 Oct 2025 19:37:59 -0400 Subject: [PATCH 02/16] Create sync-aur --- bin/sync-aur | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 bin/sync-aur diff --git a/bin/sync-aur b/bin/sync-aur new file mode 100755 index 0000000..4742b15 --- /dev/null +++ b/bin/sync-aur @@ -0,0 +1,82 @@ +#!/bin/bash + +BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") +source "$BUILD_ROOT/lib/message-helpers.sh" + +PKGBUILDS_DIR="$BUILD_ROOT/pkgbuilds" +PACKAGES_FILE="$BUILD_ROOT/build/packages/omarchy-aur.packages" +TEMP_DIR=$(mktemp -d) + +trap "rm -rf $TEMP_DIR" EXIT + +# Parse arguments +SPECIFIC_PACKAGES=() +if [[ $# -gt 0 ]]; then + SPECIFIC_PACKAGES=("$@") +fi + +print_header "AUR Package Sync" + +mkdir -p "$PKGBUILDS_DIR" + +if [[ ! -f "$PACKAGES_FILE" ]]; then + print_error "Package list not found: $PACKAGES_FILE" + exit 1 +fi + +SYNCED=0 +FAILED=0 + +# Function to sync a package from AUR +sync_package() { + local package="$1" + + print_info "Syncing $package from AUR..." + + cd "$TEMP_DIR" + rm -rf "$package" + + if git clone "https://aur.archlinux.org/${package}.git" 2>/dev/null; then + # Create target directory if it doesn't exist + mkdir -p "$PKGBUILDS_DIR/$package" + + # Copy files (not .git directory) + cp -r "$package"/* "$PKGBUILDS_DIR/$package/" 2>/dev/null || true + cp -r "$package"/.* "$PKGBUILDS_DIR/$package/" 2>/dev/null || true + + # Remove .git from destination + rm -rf "$PKGBUILDS_DIR/$package/.git" + + ((SYNCED++)) + else + print_warning "Failed to clone $package (may not exist in AUR)" + ((FAILED++)) + fi +} + +# If specific packages provided, sync only those +if [[ ${#SPECIFIC_PACKAGES[@]} -gt 0 ]]; then + for package in "${SPECIFIC_PACKAGES[@]}"; do + sync_package "$package" + done +else + # Sync all packages from list + while IFS= read -r line || [ -n "$line" ]; do + [[ "$line" =~ ^#.*$ ]] && continue + [[ -z "$line" ]] && continue + + package=$(echo "$line" | awk '{print $1}') + + # Skip GitHub repos (contain /) + if [[ "$package" == *"/"* ]]; then + continue + fi + + sync_package "$package" + done < <(grep -v "^#" "$PACKAGES_FILE" | grep -v "^$") +fi + +echo "" +print_success "Sync complete!" +echo " Synced: $SYNCED" +echo " Failed: $FAILED" From 27ff8fd9c85b5d2e3af72f397a8964446ca9f7f8 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 26 Oct 2025 19:38:10 -0400 Subject: [PATCH 03/16] Comment out ones we don't want to sync --- build/packages/omarchy-aur.packages | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build/packages/omarchy-aur.packages b/build/packages/omarchy-aur.packages index b099d85..6806458 100644 --- a/build/packages/omarchy-aur.packages +++ b/build/packages/omarchy-aur.packages @@ -24,11 +24,11 @@ #Core Install hyprshade install # aether dependency -aether +# aether 1password-beta 1password-cli -asdcontrol +# asdcontrol elephant install elephant-archlinuxpkgs elephant-bluetooth @@ -50,7 +50,7 @@ localsend localsend-bin macbook12-spi-driver-dkms omarchy-chromium-bin -omarchy-nvim always-build +# omarchy-nvim always-build pinta python-terminaltexteffects spotify @@ -59,7 +59,7 @@ typora tzupdate ufw-docker walker -wayfreeze +# wayfreeze yaru-icon-theme yay From 0554b1c684ceaef36db0092bec19da5ea1f3f0d7 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 26 Oct 2025 19:38:19 -0400 Subject: [PATCH 04/16] Simplify build to only local. --- build/build.sh | 398 +++++++++---------------------------------------- 1 file changed, 71 insertions(+), 327 deletions(-) diff --git a/build/build.sh b/build/build.sh index 81407ff..94c61f5 100755 --- a/build/build.sh +++ b/build/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Build script that handles both AUR and GitHub packages inside Docker container +# Simplified build script - builds all packages in /pkgbuilds/ # Import GPG keys /build/import-gpg-keys.sh || exit 1 @@ -24,10 +24,9 @@ fi # Sync pacman database sudo pacman -Sy -echo "==> Package Builder (AUR & GitHub)" +echo "==> Package Builder" echo "==> Target architecture: $ARCH" echo "==> Output directory: $OUTPUT_DIR" -echo "==> Processing omarchy-aur.packages" mkdir -p "$OUTPUT_DIR" @@ -39,99 +38,49 @@ SKIPPED_PACKAGES="" get_local_version() { local pkg="$1" if [[ -f "$OUTPUT_DIR/omarchy.db.tar.zst" ]]; then - # Find the exact desc file for this package - # For VCS packages, version might start with 'r' instead of a digit local desc_file=$(tar -tf "$OUTPUT_DIR/omarchy.db.tar.zst" | grep "^${pkg}-[0-9r].*/desc$" | head -1) - if [[ -n "$desc_file" ]]; then - # Extract that specific file and get the version tar -xOf "$OUTPUT_DIR/omarchy.db.tar.zst" "$desc_file" 2>/dev/null | awk '/%VERSION%/{getline; print; exit}' fi fi } -# Common build logic for all package types -# Expects to be called with pkg directory already prepared in /src/$pkg +# Build a package from /pkgbuilds/ build_package() { local pkg="$1" - local opts="$2" - local check_repo="$3" # Optional: repository to check for updates (for -git packages) - + + echo "" + echo " -> Processing: $pkg" + + # Copy to build directory + cd /src + rm -rf "$pkg" + cp -r "/pkgbuilds/$pkg" "$pkg" cd "/src/$pkg" || return 1 - - # Handle version checking - local should_build=true - - # Check for always-build option - if [[ "$opts" == *"always-build"* ]]; then - echo " Note: Package flagged as always-build, will use timestamp version" - - # Inject timestamp into pkgver to ensure unique filename - local timestamp=$(date +%Y%m%d.%H%M%S) - echo " Injecting timestamp: $timestamp" - - if grep -q '^pkgver=' PKGBUILD; then - local current_pkgver=$(grep '^pkgver=' PKGBUILD | cut -d'=' -f2 | tr -d "'\"") - sed -i "s/^pkgver=.*/pkgver=${current_pkgver}.${timestamp}/" PKGBUILD - echo " Modified pkgver to: ${current_pkgver}.${timestamp}" - fi - elif [[ "$pkg" == *-git ]] && [[ -n "$check_repo" ]]; then - # For -git packages, check if we need to rebuild based on commit - local latest_commit=$(git ls-remote "https://github.com/${check_repo}.git" HEAD 2>/dev/null | cut -f1 | head -c 7) - - if [[ -n "$latest_commit" ]]; then - local local_version=$(get_local_version "$pkg") - - if [[ -n "$local_version" ]]; then - # Extract commit hash from version (format: r.-) - local local_commit=$(echo "$local_version" | grep -oE '\.[a-f0-9]{7}' | cut -d'.' -f2) - - if [[ "$local_commit" == "$latest_commit" ]]; then - echo " ✓ Up to date: commit $latest_commit - Skipping" - SKIPPED_PACKAGES="$SKIPPED_PACKAGES $pkg" - should_build=false - else - echo " Update available: $local_commit -> $latest_commit" - fi - else - echo " New package (commit: $latest_commit)" - fi - fi - elif [[ ! "$pkg" == *-git ]]; then - # For non-git packages, check PKGBUILD version - local pkgbuild_version=$(bash -c 'source PKGBUILD; echo "${pkgver}-${pkgrel}"' 2>/dev/null) - - if [[ -n "$pkgbuild_version" ]]; then - local local_version=$(get_local_version "$pkg") - - if [[ "$local_version" == "$pkgbuild_version" ]]; then - echo " ✓ Up to date: $local_version - Skipping" - SKIPPED_PACKAGES="$SKIPPED_PACKAGES $pkg" - should_build=false - elif [[ -n "$local_version" ]]; then - echo " Update available: $local_version -> $pkgbuild_version" - else - echo " New package (version: $pkgbuild_version)" - fi - fi + + # Get PKGBUILD version + local pkgbuild_version=$(bash -c 'source PKGBUILD; echo "${pkgver}-${pkgrel}"' 2>/dev/null) + + if [[ -z "$pkgbuild_version" ]]; then + echo " ❌ Failed to read PKGBUILD version" + FAILED_PACKAGES="$FAILED_PACKAGES $pkg" + return 1 fi - - # If package is up to date but has install flag, install it for dependencies - if [[ "$should_build" == false ]] && [[ "$opts" == *"install"* ]]; then - echo " Installing existing package for dependencies..." - local latest_pkg=$(ls -t $OUTPUT_DIR/${pkg}-*.pkg.tar.* 2>/dev/null | grep -v '\.sig$' | head -1) - if [[ -f "$latest_pkg" ]]; then - sudo pacman -U --noconfirm --needed "$latest_pkg" 2>/dev/null || true - fi + + # Check if already built + local local_version=$(get_local_version "$pkg") + + if [[ "$local_version" == "$pkgbuild_version" ]]; then + echo " ✓ Up to date: $local_version - Skipping" + SKIPPED_PACKAGES="$SKIPPED_PACKAGES $pkg" return 0 + elif [[ -n "$local_version" ]]; then + echo " Update available: $local_version -> $pkgbuild_version" + else + echo " New package (version: $pkgbuild_version)" fi - - # Skip building if not needed - if [[ "$should_build" == false ]]; then - return 0 - fi - + # Import package-specific PGP keys if they exist if [[ -d "keys/pgp" ]]; then echo " Importing package-specific PGP keys..." @@ -141,10 +90,10 @@ build_package() { fi done fi - + # Build package with signing MAKEPKG_FLAGS="-scf --noconfirm" - + # Only add sign flag if we have a GPG key configured if grep -q "^GPGKEY=" ~/.makepkg.conf 2>/dev/null; then GPG_KEY=$(grep "^GPGKEY=" ~/.makepkg.conf | cut -d'"' -f2) @@ -153,23 +102,12 @@ build_package() { else echo " No GPG key configured in makepkg.conf" fi - - # Check for skip-pgp in options - if [[ "$opts" == *"skip-pgp"* ]]; then - MAKEPKG_FLAGS="$MAKEPKG_FLAGS --skippgpcheck" - echo " (skipping PGP verification)" - fi - + if makepkg $MAKEPKG_FLAGS; then # Copy to output (including signature files) for pkg_file in *.pkg.tar.*; do if [[ -f "$pkg_file" ]]; then cp "$pkg_file" $OUTPUT_DIR/ - # Check for install option to make package available for dependencies - if [[ "$opts" == *"install"* ]] && [[ "$pkg_file" =~ ^${pkg}-[0-9].*\.pkg\.tar\..* ]] && [[ "$pkg_file" != *.sig ]]; then - echo " Installing locally for dependencies..." - sudo pacman -U --noconfirm --needed "$pkg_file" 2>/dev/null || true - fi fi done echo " ✓ Successfully built $pkg" @@ -182,245 +120,51 @@ build_package() { fi } -# Prepare and build a local PKGBUILD package -build_local_package() { - local pkg="$1" - local opts="$2" - - # Check if package exists locally - if [[ ! -d "/pkgbuilds/$pkg" ]] || [[ ! -f "/pkgbuilds/$pkg/PKGBUILD" ]]; then - return 1 # Not a local package - fi - - echo "" - echo " -> Processing local: $pkg..." - echo " Source: /pkgbuilds/$pkg" - - # Check for source repo override for -git packages - local check_repo="" - if [[ "$opts" =~ source:([^ ]+) ]]; then - check_repo="${BASH_REMATCH[1]}" - echo " Update check repository: $check_repo" - fi - - # Copy to build directory - cd /src - rm -rf "$pkg" - cp -r "/pkgbuilds/$pkg" "$pkg" - - # Build the package - build_package "$pkg" "$opts" "$check_repo" - local result=$? - - cd /src - return $result -} - -# Build a GitHub package -build_github_package() { - local github_repo="$1" - local opts="$2" - - echo "" - echo " -> Processing GitHub: $github_repo..." - - # Extract owner and repo name - local owner=$(echo "$github_repo" | cut -d'/' -f1) - local repo=$(echo "$github_repo" | cut -d'/' -f2) - - if [[ -z "$owner" ]] || [[ -z "$repo" ]]; then - echo " ❌ Invalid GitHub format. Use: owner/repo" - FAILED_PACKAGES="$FAILED_PACKAGES $github_repo" - return 1 - fi - - # Use repo name as package name for local tracking - local pkg="$repo" - - echo " GitHub repository: https://github.com/$github_repo" - - # Check for source repo override for -git packages - local check_repo="" - if [[ "$opts" =~ source:([^ ]+) ]]; then - check_repo="${BASH_REMATCH[1]}" - echo " Update check repository: $check_repo" - elif [[ "$pkg" == *-git ]]; then - # Default to the GitHub repo for checking updates - check_repo="$github_repo" - fi - - # Fresh clone for building - cd /src - rm -rf "$pkg" - - git clone "https://github.com/${github_repo}.git" "$pkg" || { - echo " ❌ Failed to clone $github_repo" - FAILED_PACKAGES="$FAILED_PACKAGES $github_repo" - return 1 - } - - cd "$pkg" - - # Check if PKGBUILD exists - if [[ ! -f "PKGBUILD" ]]; then - echo " ❌ No PKGBUILD found in repository" - FAILED_PACKAGES="$FAILED_PACKAGES $github_repo" - cd /src - return 1 - fi - - # Build the package using common logic - build_package "$pkg" "$opts" "$check_repo" - local result=$? - - cd /src - return $result -} - -# Build an AUR package -build_aur_package() { - local pkg="$1" - local opts="$2" - - echo "" - echo " -> Processing AUR: $pkg..." - - # Get version from AUR API (also gets package base) - local aur_info=$(curl -s "https://aur.archlinux.org/rpc/?v=5&type=info&arg[]=$pkg") - local aur_version=$(echo "$aur_info" | jq -r '.results[0].Version // empty') - local pkg_base=$(echo "$aur_info" | jq -r '.results[0].PackageBase // empty') - - if [[ -z "$aur_version" ]]; then - echo " ❌ Package not found in AUR" - FAILED_PACKAGES="$FAILED_PACKAGES $pkg" - return 1 - fi - - # Use package name as base if not specified - if [[ -z "$pkg_base" ]]; then - pkg_base="$pkg" - elif [[ "$pkg_base" != "$pkg" ]]; then - echo " Using package base: $pkg_base" - fi - - # Check if we need to build (quick check before cloning) - local local_version=$(get_local_version "$pkg") - - if [[ "$local_version" == "$aur_version" ]]; then - echo " ✓ Up to date: $local_version - Skipping" - SKIPPED_PACKAGES="$SKIPPED_PACKAGES $pkg" - - # If install option is set, install the existing package for dependencies - if [[ "$opts" == *"install"* ]]; then - echo " Installing existing package for dependencies..." - local latest_pkg=$(ls -t $OUTPUT_DIR/${pkg}-[0-9]*.pkg.tar.* 2>/dev/null | grep -v '\.sig$' | head -1) - if [[ -f "$latest_pkg" ]]; then - sudo pacman -U --noconfirm --needed "$latest_pkg" 2>/dev/null || true - fi - fi - return 0 - elif [[ -n "$local_version" ]]; then - echo " Update available: $local_version -> $aur_version" - else - echo " New package (AUR: $aur_version)" - fi - - # Clone from AUR - cd /src - rm -rf "$pkg" - - git clone "https://aur.archlinux.org/${pkg_base}.git" "$pkg" || { - echo " ❌ Failed to clone $pkg_base" - FAILED_PACKAGES="$FAILED_PACKAGES $pkg" - return 1 - } - - # Build the package using common logic - # No check_repo for AUR packages - version checking is done above - build_package "$pkg" "$opts" "" - local result=$? - - cd /src - return $result -} - # Main execution cd /src -# Determine input source: single package or package file -if [[ -n "$SINGLE_PACKAGE" ]]; then - echo "==> Single Package Build Mode: $SINGLE_PACKAGE" - PACKAGE_INPUT=$(echo "$SINGLE_PACKAGE") -else - echo "==> Processing omarchy-aur.packages" - PACKAGE_INPUT=$(cat /build/packages/omarchy-aur.packages) -fi +TOTAL_COUNT=0 -# Read and process packages -if [[ -n "$PACKAGE_INPUT" ]]; then - TOTAL_COUNT=0 +# Build all packages in /pkgbuilds/ +for pkgdir in /pkgbuilds/*/; do + [[ ! -d "$pkgdir" ]] && continue + + pkg=$(basename "$pkgdir") + + # Skip if no PKGBUILD exists + [[ ! -f "$pkgdir/PKGBUILD" ]] && continue + + ((TOTAL_COUNT++)) + + build_package "$pkg" +done - while IFS= read -r line || [ -n "$line" ]; do - [[ "$line" =~ ^#.*$ ]] && continue - [[ -z "$line" ]] && continue +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "==> Build Summary" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - ((TOTAL_COUNT++)) +# Count results +SUCCESS_COUNT=$(echo $SUCCESSFUL_PACKAGES | wc -w) +SKIPPED_COUNT=$(echo $SKIPPED_PACKAGES | wc -w) +FAILED_COUNT=$(echo $FAILED_PACKAGES | wc -w) - # Parse package name and options - package=$(echo "$line" | awk '{print $1}') - options=$(echo "$line" | awk '{$1=""; print $0}' | xargs) - - # Check build source in priority order: - # 1. Local PKGBUILD in /pkgbuilds/ - # 2. GitHub repository (contains /) - # 3. AUR package - - # Try local package first - if build_local_package "$package" "$options"; then - # Package was handled locally (either built, skipped, or failed) - continue - fi - - # Check if this is a GitHub package (contains /) - if [[ "$package" == *"/"* ]]; then - # GitHub package format: owner/repo - build_github_package "$package" "$options" - else - # Regular AUR package - build_aur_package "$package" "$options" - fi - done <<< "$PACKAGE_INPUT" +echo " Total packages: $TOTAL_COUNT" +echo " ✓ Built: $SUCCESS_COUNT" +echo " ⏭ Skipped: $SKIPPED_COUNT (already up-to-date)" +echo " ❌ Failed: $FAILED_COUNT" +# List failures if any +if [[ -n "$FAILED_PACKAGES" ]]; then echo "" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "==> Build Summary" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - - # Count results - SUCCESS_COUNT=$(echo $SUCCESSFUL_PACKAGES | wc -w) - SKIPPED_COUNT=$(echo $SKIPPED_PACKAGES | wc -w) - FAILED_COUNT=$(echo $FAILED_PACKAGES | wc -w) - - echo " Total packages: $TOTAL_COUNT" - echo " ✓ Built: $SUCCESS_COUNT" - echo " ⏭ Skipped: $SKIPPED_COUNT (already up-to-date)" - echo " ❌ Failed: $FAILED_COUNT" - - # List failures if any - if [[ -n "$FAILED_PACKAGES" ]]; then - echo "" - echo "Failed packages:" - for pkg in $FAILED_PACKAGES; do - echo " - $pkg" - done - echo "" - echo "==> Some packages failed to build" - exit 1 - else - echo "" - echo "==> All packages processed successfully!" - fi -else - echo "Error: No packages to build" + echo "Failed packages:" + for pkg in $FAILED_PACKAGES; do + echo " - $pkg" + done + echo "" + echo "==> Some packages failed to build" exit 1 +else + echo "" + echo "==> All packages processed successfully!" fi From f6af265928147f308e3a9325ca5c669269fd1123 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 26 Oct 2025 23:31:51 -0400 Subject: [PATCH 05/16] Update AUR list --- build/packages/omarchy-aur.packages | 40 +++++------------------------ 1 file changed, 7 insertions(+), 33 deletions(-) diff --git a/build/packages/omarchy-aur.packages b/build/packages/omarchy-aur.packages index 6806458..0af6699 100644 --- a/build/packages/omarchy-aur.packages +++ b/build/packages/omarchy-aur.packages @@ -1,56 +1,31 @@ -# Omarchy Package List (AUR, GitHub, and Local) -# Supports AUR packages, GitHub repositories, and local PKGBUILDs -# -# Build source priority: -# 1. Local: Checks /pkgbuilds// first -# 2. GitHub: If contains "/", fetches from GitHub -# 3. AUR: Otherwise, fetches from AUR -# -# Formats: -# - Local: packagename [options] (if exists in /pkgbuilds/) -# - GitHub: owner/repo [options] -# - AUR: packagename [options] -# -# Options: -# - skip-pgp: Skip PGP signature verification -# - install: Install package in container (for dependencies) -# - always-build: Always build package with timestamp version (unique filename) -# - source:owner/repo: For -git packages, specify the actual source repo to check for updates -# -# Examples: -# asdcontrol-git source:nikosdion/asdcontrol # Uses local PKGBUILD, checks nikosdion/asdcontrol for updates -# omacom-io/some-package # Fetches from GitHub -# yay # Fetches from AUR +# AUR Sync List - Packages to sync from AUR with bin/aur-sync #Core Install -hyprshade install # aether dependency -# aether - 1password-beta 1password-cli -# asdcontrol +aether elephant install elephant-archlinuxpkgs elephant-bluetooth elephant-calc elephant-clipboard -elephant-desktopapplications install +elephant-desktopapplications elephant-files elephant-menus -elephant-providerlist install +elephant-providerlist elephant-runner elephant-symbols elephant-todo elephant-unicode elephant-websearch gpu-screen-recorder +hyprshade # aether dependency limine-mkinitcpio-hook limine-snapper-sync localsend localsend-bin macbook12-spi-driver-dkms omarchy-chromium-bin -# omarchy-nvim always-build pinta python-terminaltexteffects spotify @@ -59,7 +34,6 @@ typora tzupdate ufw-docker walker -# wayfreeze yaru-icon-theme yay @@ -69,10 +43,10 @@ cursor-bin claude-code lmstudio crush-bin -bun-bin install # for opencode +bun-bin # for opencode opencode symfony-cli -dropbox install +dropbox dropbox-cli nautilus-dropbox openai-codex-bin From 2d673b4ccf23ebd80616e6dd04327e8d51a83a82 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 26 Oct 2025 23:32:14 -0400 Subject: [PATCH 06/16] Update omarchy-nvim package --- pkgbuilds/omarchy-nvim/PKGBUILD | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkgbuilds/omarchy-nvim/PKGBUILD b/pkgbuilds/omarchy-nvim/PKGBUILD index d39280b..94fb3c1 100644 --- a/pkgbuilds/omarchy-nvim/PKGBUILD +++ b/pkgbuilds/omarchy-nvim/PKGBUILD @@ -1,6 +1,6 @@ # Maintainer: Ryan Hughes pkgname=omarchy-nvim -pkgver=2025.10.14 +pkgver=2025.10.26 pkgrel=1 pkgdesc="Pre-built LazyVim configuration with cached plugins" arch=('any') @@ -9,8 +9,9 @@ license=('MIT') depends=('neovim>=0.9.0' 'git') makedepends=('git' 'nodejs' 'npm' 'tree-sitter-cli') conflicts=('omarchy-lazyvim') -source=("git+https://github.com/LazyVim/starter.git") -sha256sums=('SKIP') +options=('!debug') +source=("https://github.com/LazyVim/starter/archive/refs/heads/main.tar.gz") +sha256sums=('d865d50211358358d3c3c1e356773c1e3de1e8964215d85eb1b4c77521e17488') build() { cd "$srcdir" @@ -25,7 +26,7 @@ build() { mkdir -p "$XDG_CONFIG_HOME" "$XDG_DATA_HOME" "$XDG_STATE_HOME" "$XDG_CACHE_HOME" # Setup LazyVim starter - cp -r "$srcdir/starter" "$XDG_CONFIG_HOME/nvim" + cp -r "$srcdir/starter-main" "$XDG_CONFIG_HOME/nvim" rm -rf "$XDG_CONFIG_HOME/nvim/.git" # Copy our custom configs From 95d1a776593cc64185698b44d6debe9290c53b79 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 26 Oct 2025 23:33:22 -0400 Subject: [PATCH 07/16] Overhaul the whole build process --- .gitignore | 1 + bin/build | 65 +++------ bin/build-ruby | 2 +- bin/clean-repo | 33 +++-- bin/list-packages | 3 +- bin/promote-build | 97 ++++++++++++++ bin/release | 114 ++++++++++++++++ bin/remove-package | 18 ++- bin/repo | 47 +++++-- bin/sign | 129 ++++++++++++++++++ bin/sync-repo | 20 +-- bin/update-repo | 4 +- build/build.sh | 319 ++++++++++++++++++++++++++++++++++++++------- 13 files changed, 715 insertions(+), 137 deletions(-) create mode 100755 bin/promote-build create mode 100755 bin/release create mode 100755 bin/sign diff --git a/.gitignore b/.gitignore index 3a4168d..6322726 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ x86_64/ src/ logs/ +build-output/ diff --git a/bin/build b/bin/build index 016119b..73ebf77 100755 --- a/bin/build +++ b/bin/build @@ -9,12 +9,13 @@ source "$BUILD_ROOT/lib/message-helpers.sh" ARCH=${ARCH:-x86_64} -ARCH_DIR="$BUILD_ROOT/output/$ARCH" +BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" +FINAL_OUTPUT_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" SRC_DIR="$BUILD_ROOT/src" BUILD_DIR="$BUILD_ROOT/build" # Create directories if they don't exist -mkdir -p "$ARCH_DIR" "$SRC_DIR" +mkdir -p "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" "$SRC_DIR" # Check for Docker if ! command -v docker &>/dev/null; then @@ -80,7 +81,13 @@ done # Show target architecture after parsing args print_info "Target architecture: $ARCH" -print_info "Output directory: $ARCH_DIR" +print_info "Build workspace: $BUILD_OUTPUT_DIR" +print_info "Final output: $FINAL_OUTPUT_DIR" + +# Clean build-output directory to start fresh +print_info "Cleaning build workspace..." +rm -rf "$BUILD_OUTPUT_DIR"/* +mkdir -p "$BUILD_OUTPUT_DIR" # Check if AUR package list exists (only required if not building single package) if [[ -z "$SINGLE_PACKAGE" ]]; then @@ -92,36 +99,9 @@ else print_info "Building single package: $SINGLE_PACKAGE" fi -# Handle GPG signing setup -if [[ "$SKIP_SIGNING" == true ]]; then - print_warning "Skipping GPG signing (--skip-signing flag set)" - export SKIP_SIGNING=true -else - # Get GPG key from 1Password or environment for signing - if [[ -z "$GPG_PRIVATE_KEY" ]]; then - print_info "Fetching GPG signing key from 1Password..." - GPG_PRIVATE_KEY=$(op document get "Omarchy GPG Private Key" --account=omarchy.1password.com) || { - print_error "Failed to fetch GPG key from 1Password or environment" - exit 1 - } - else - print_info "Using existing GPG signing key from environment" - fi - export GPG_PRIVATE_KEY="$GPG_PRIVATE_KEY" - - # Get passphrase from 1Password or environment - if [[ -z "$GPG_PASSPHRASE" ]]; then - print_info "Fetching GPG key passphrase from 1Password..." - GPG_PASSPHRASE=$(op item get "Omarchy GPG Private Key" --account=omarchy.1password.com --fields password --reveal) || { - print_error "Failed to fetch GPG passphrase from 1Password or environment" - exit 1 - } - else - print_info "Using existing GPG passphrase from environment" - fi - export GPG_PASSPHRASE - print_success "GPG signing key and passphrase loaded" -fi +# GPG is no longer used during build - signing happens in separate step +# But we still need to import verification keys for package validation +export SKIP_SIGNING=true # Build/update the Docker image print_info "Building Docker image..." @@ -129,12 +109,12 @@ docker build -t omarchy-aur-builder:latest -f "$BUILD_DIR/Dockerfile" "$BUILD_DI print_info "Running AUR package build..." -# Ensure output directory is writable by container user +# Ensure output directories are writable by container user # The container runs as 'builder' user, so we need to make output writable if [ "$(id -u)" -eq 0 ]; then - chmod -R 777 "$ARCH_DIR" + chmod -R 777 "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" else - sudo chown -R $(id -u):$(id -g) "$ARCH_DIR" 2>/dev/null || chmod -R 777 "$ARCH_DIR" + sudo chown -R $(id -u):$(id -g) "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" 2>/dev/null || chmod -R 777 "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" fi # Build Docker arguments @@ -142,10 +122,9 @@ DOCKER_ARGS=( --rm -e ARCH="$ARCH" -e SKIP_SIGNING - -e GPG_PRIVATE_KEY - -e GPG_PASSPHRASE -e SINGLE_PACKAGE="$SINGLE_PACKAGE" - -v "$BUILD_ROOT/output:/output" + -v "$BUILD_ROOT/build-output:/build-output" + -v "$BUILD_ROOT/pkgs.omarchy.org:/pkgs.omarchy.org" -v "$BUILD_DIR:/build:ro" -v "$BUILD_ROOT/pkgbuilds:/pkgbuilds:ro" ) @@ -158,20 +137,12 @@ fi # Run the builder with assembled args docker run "${DOCKER_ARGS[@]}" omarchy-aur-builder:latest /build/build.sh -# Clear the GPG key and passphrase from environment -unset GPG_PRIVATE_KEY -unset GPG_PASSPHRASE - BUILD_RESULT=$? # Summary echo "" if [[ $BUILD_RESULT -eq 0 ]]; then print_success "AUR build completed successfully!" - echo "" - print_info "Next steps:" - echo " 1. Run ./bin/update-repo to update the repository" - echo " 2. Commit and push changes" else print_warning "Some AUR packages failed (see details above)" exit $BUILD_RESULT diff --git a/bin/build-ruby b/bin/build-ruby index 9f2dd81..7f0e005 100755 --- a/bin/build-ruby +++ b/bin/build-ruby @@ -290,4 +290,4 @@ for arch in "${ARCHITECTURES[@]}"; do if [[ $TOTAL_FILES -gt 5 ]]; then echo " ... and $((TOTAL_FILES - 5)) more files" fi -done \ No newline at end of file +done diff --git a/bin/clean-repo b/bin/clean-repo index 64b8b99..ec7b252 100755 --- a/bin/clean-repo +++ b/bin/clean-repo @@ -9,7 +9,8 @@ BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/lib/message-helpers.sh" # Repository configuration -ARCH_DIR="$BUILD_ROOT/output/x86_64" +ARCH=${ARCH:-x86_64} +ARCH_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" KEEP_VERSIONS=2 # Function to clean old packages @@ -55,7 +56,7 @@ clean_packages() { local count=${#sorted_files[@]} if [[ $count -gt $keep ]]; then - print_success " -> Processing $pkgname ($count versions found)" + echo " -> Processing $pkgname ($count versions found)" # Remove old versions for ((i = $keep; i < $count; i++)); do @@ -64,9 +65,9 @@ clean_packages() { space_freed=$((space_freed + size)) if [[ "$dry_run" == true ]]; then - print_warning " Would remove: $file ($(numfmt --to=iec-i --suffix=B $size))" + echo " Would remove: $file ($(numfmt --to=iec-i --suffix=B $size))" else - print_error " Removing: $file ($(numfmt --to=iec-i --suffix=B $size))" + echo " Removing: $file ($(numfmt --to=iec-i --suffix=B $size))" rm -f "$file" rm -f "${file}.sig" 2>/dev/null || true fi @@ -79,14 +80,14 @@ clean_packages() { # Summary if [[ $total_removed -gt 0 ]]; then if [[ "$dry_run" == true ]]; then - print_info " -> Would remove $total_removed old package(s)" - print_info " -> Would free $(numfmt --to=iec-i --suffix=B $space_freed)" + echo " -> Would remove $total_removed old package(s)" + echo " -> Would free $(numfmt --to=iec-i --suffix=B $space_freed)" else - print_success " -> Removed $total_removed old package(s)" - print_success " -> Freed $(numfmt --to=iec-i --suffix=B $space_freed)" + echo " -> Removed $total_removed old package(s)" + echo " -> Freed $(numfmt --to=iec-i --suffix=B $space_freed)" fi else - print_warning " -> No old packages to remove" + echo " -> No old packages to remove" fi } @@ -121,7 +122,7 @@ remove_all_packages() { else rm -f *.pkg.tar.* rm -f *.db* *.files* - print_success "Removed $count package(s) and database files" + echo "Removed $count package(s) and database files" fi } @@ -134,11 +135,12 @@ show_disk_usage() { local total_size=$(du -sh . 2>/dev/null | cut -f1) local package_count=$(ls -1 *.pkg.tar.* 2>/dev/null | grep -v '\.sig$' | wc -l) - print_success " -> Total size: $total_size" - print_success " -> Package count: $package_count" + echo " -> Total size: $total_size" + echo " -> Package count: $package_count" if [[ $package_count -gt 0 ]]; then - print_success " -> Average package size: $(du -b *.pkg.tar.* 2>/dev/null | awk '{sum+=$1; count++} END {print sum/count}' | numfmt --to=iec-i --suffix=B)" + local avg_size=$(du -b *.pkg.tar.* 2>/dev/null | awk '{sum+=$1; count++} END {printf "%.0f", sum/count}') + echo " -> Average package size: $(numfmt --to=iec-i --suffix=B $avg_size 2>/dev/null || echo "N/A")" fi } @@ -216,7 +218,7 @@ main() { if [[ "$DRY_RUN" != true ]]; then print_info "Updating repository database..." "$BUILD_ROOT/bin/update-repo" >/dev/null 2>&1 && { - print_success " -> Database updated successfully!" + echo " -> Database updated successfully!" } || { print_warning " -> Database update failed (may need manual update)" } @@ -224,9 +226,6 @@ main() { show_disk_usage fi - - echo "" - print_success "Cleanup complete!" } # Run main function diff --git a/bin/list-packages b/bin/list-packages index 3c780df..ba99783 100755 --- a/bin/list-packages +++ b/bin/list-packages @@ -4,7 +4,8 @@ SCRIPT_DIR=$(realpath "${BASH_SOURCE[0]%/*}") BUILD_ROOT=$(realpath "$SCRIPT_DIR/..") -ARCH_DIR="$BUILD_ROOT/output/x86_64" +ARCH=${ARCH:-x86_64} +ARCH_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" DB_FILE="$ARCH_DIR/omarchy.db.tar.zst" if [[ ! -f "$DB_FILE" ]]; then diff --git a/bin/promote-build b/bin/promote-build new file mode 100755 index 0000000..e57a9de --- /dev/null +++ b/bin/promote-build @@ -0,0 +1,97 @@ +#!/bin/bash +# Promote packages from build-output to pkgs.omarchy.org + +set -e + +BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") +source "$BUILD_ROOT/lib/message-helpers.sh" + +ARCH=${ARCH:-x86_64} +BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" +FINAL_OUTPUT_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" + +print_header "Promote Build to Production" + +# Parse arguments +DRY_RUN=false +while [[ $# -gt 0 ]]; do + case $1 in + --arch) + ARCH="$2" + shift 2 + ;; + --dry-run) + DRY_RUN=true + shift + ;; + -h | --help) + echo "Usage: $0 [OPTIONS]" + echo "" + echo "Options:" + echo " --arch Target architecture (x86_64 or aarch64, default: x86_64)" + echo " --dry-run Show what would be copied without copying" + echo " -h, --help Show this help message" + echo "" + echo "This script promotes packages from build-output/ to pkgs.omarchy.org/" + exit 0 + ;; + *) + print_error "Unknown option: $1" + exit 1 + ;; + esac +done + +print_info "Build output: $BUILD_OUTPUT_DIR" +print_info "Final output: $FINAL_OUTPUT_DIR" + +# Check if build output exists +if [[ ! -d "$BUILD_OUTPUT_DIR" ]]; then + print_error "Build output directory not found: $BUILD_OUTPUT_DIR" + print_warning "Run bin/repo build first" + exit 1 +fi + +# Count packages in build output +cd "$BUILD_OUTPUT_DIR" +PACKAGE_COUNT=$(ls -1 *.pkg.tar.* 2>/dev/null | grep -v '\.sig$' | grep -v 'omarchy-build\.db' | wc -l) + +if [[ $PACKAGE_COUNT -eq 0 ]]; then + print_warning "No packages found in build output" + exit 0 +fi + +print_info "Found $PACKAGE_COUNT package(s) to promote" + +if [[ "$DRY_RUN" == true ]]; then + print_warning "DRY RUN MODE - No files will be copied" + echo "" + print_info "Packages that would be promoted:" + ls -1 *.pkg.tar.* 2>/dev/null | grep -v 'omarchy-build\.db' | while read -r pkg; do + echo " - $pkg" + done +else + echo "" + mkdir -p "$FINAL_OUTPUT_DIR" + + # Copy all package files (excluding build database) + COPIED=0 + for pkg_file in *.pkg.tar.*; do + # Skip build database files + [[ "$pkg_file" == omarchy-build.db* ]] && continue + + if [[ -f "$pkg_file" ]]; then + cp -v "$pkg_file" "$FINAL_OUTPUT_DIR/" + COPIED=$((COPIED + 1)) + fi + done + + echo "" + print_success "Promoted $COPIED file(s) to pkgs.omarchy.org" + + # Cleanup build directory after successful promotion + print_info "Cleaning up build directory..." + cd "$BUILD_OUTPUT_DIR" + rm -f *.pkg.tar.* omarchy-build.db* omarchy-build.files* + print_success "Build directory cleaned" +fi diff --git a/bin/release b/bin/release new file mode 100755 index 0000000..8510a8e --- /dev/null +++ b/bin/release @@ -0,0 +1,114 @@ +#!/bin/bash +# Run the complete release workflow: build, sign, promote, clean, sync + +set -e + +BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") +source "$BUILD_ROOT/lib/message-helpers.sh" + +ARCH=${ARCH:-x86_64} +SYNC_REMOTE="" +SKIP_PROD_CHECK=false + +print_header "Complete Release Workflow" + +echo "" +print_info "This will run the complete release workflow:" +echo " 1. Build packages" +echo " 2. Sign packages" +echo " 3. Promote to production" +echo " 4. Clean old versions" +echo " 5. Sync to remote" +echo "" + +# Parse arguments +BUILD_ARGS=() +while [[ $# -gt 0 ]]; do + case $1 in + --arch) + ARCH="$2" + BUILD_ARGS+=("--arch" "$2") + shift 2 + ;; + --package) + BUILD_ARGS+=("--package" "$2") + shift 2 + ;; + --sync-remote) + SYNC_REMOTE="$2" + shift 2 + ;; + --skip-prod-check) + SKIP_PROD_CHECK=true + shift + ;; + -h | --help) + echo "Usage: $0 [OPTIONS]" + echo "" + echo "Options:" + echo " --arch Target architecture (x86_64 or aarch64, default: x86_64)" + echo " --package Build only the specified package" + echo " --sync-remote Rclone remote for sync (default: pkgs.omarchy.org:omarchy-pkgs)" + echo " --skip-prod-check Skip production environment check during sync" + echo " -h, --help Show this help message" + echo "" + echo "This script runs the complete workflow:" + echo " build → sign → promote → clean → sync" + exit 0 + ;; + *) + print_error "Unknown option: $1" + exit 1 + ;; + esac +done + +# Step 1: Build +echo "" +print_info "Step 1/5: Building packages..." +"$BUILD_ROOT/bin/build" "${BUILD_ARGS[@]}" || { + print_error "Build failed" + exit 1 +} + +# Step 2: Sign +echo "" +print_info "Step 2/5: Signing packages..." +"$BUILD_ROOT/bin/sign" --arch "$ARCH" || { + print_error "Signing failed" + exit 1 +} + +# Step 3: Promote +echo "" +print_info "Step 3/5: Promoting to production..." +"$BUILD_ROOT/bin/promote-build" --arch "$ARCH" || { + print_error "Promotion failed" + exit 1 +} + +# Step 4: Clean (which also updates the repo) +echo "" +print_info "Step 4/5: Cleaning old versions..." +"$BUILD_ROOT/bin/clean-repo" || { + print_error "Cleaning failed" + exit 1 +} + +# Step 5: Sync +echo "" +print_info "Step 5/5: Syncing to remote..." +SYNC_ARGS=("pkgs.omarchy.org/$ARCH") +if [[ -n "$SYNC_REMOTE" ]]; then + SYNC_ARGS+=("--remote" "$SYNC_REMOTE") +fi +if [[ "$SKIP_PROD_CHECK" == true ]]; then + SYNC_ARGS+=("--skip-prod-check") +fi +"$BUILD_ROOT/bin/sync-repo" "${SYNC_ARGS[@]}" || { + print_error "Sync failed" + exit 1 +} + +echo "" +print_success "Release workflow completed successfully!" diff --git a/bin/remove-package b/bin/remove-package index 659db7d..764b18e 100755 --- a/bin/remove-package +++ b/bin/remove-package @@ -4,8 +4,10 @@ set -e # Get the directory of this script SCRIPT_DIR=$(realpath "${BASH_SOURCE[0]%/*}") BUILD_ROOT=$(realpath "$SCRIPT_DIR/..") +source "$BUILD_ROOT/lib/message-helpers.sh" -ARCH_DIR="$BUILD_ROOT/x86_64" +ARCH=${ARCH:-x86_64} +ARCH_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" cd "$ARCH_DIR" if [[ -z "$1" ]]; then @@ -21,8 +23,18 @@ if [[ -z "$FILES" ]]; then exit 1 fi -# Confirm with gum -gum confirm "Remove package '$FILES'?" +# Confirm removal +echo "Package files to remove:" +for file in $FILES; do + echo " - $file" +done +echo "" +read -p "Remove package '$1'? (y/N) " -n 1 -r +echo +if [[ ! $REPLY =~ ^[Yy]$ ]]; then + print_info "Removal cancelled" + exit 0 +fi # Remove from database repo-remove omarchy.db.tar.zst "$1" diff --git a/bin/repo b/bin/repo index 971cfa3..211be2a 100755 --- a/bin/repo +++ b/bin/repo @@ -11,30 +11,45 @@ BUILD_ROOT=$(realpath "$SCRIPT_DIR/..") # Source common functions source "$BUILD_ROOT/lib/message-helpers.sh" -# Setup logging +# Setup logging with timestamps LOG_DIR="$BUILD_ROOT/logs" mkdir -p "$LOG_DIR" -LOG_FILE="$LOG_DIR/repo.log" + +# Rotate logs first - keep only the 10 most recent +if [[ -d "$LOG_DIR" ]]; then + cd "$LOG_DIR" + # List logs by modification time (newest first), skip first 9, delete the rest + # This way after we create the new log, we'll have exactly 10 + ls -t repo_*.log 2>/dev/null | tail -n +10 | xargs -r rm -f + cd "$BUILD_ROOT" +fi + +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +LOG_FILE="$LOG_DIR/repo_${TIMESTAMP}.log" # Show usage show_usage() { echo "Usage: $0 [options]" echo "" echo "Commands:" - echo " build Build AUR packages" + echo " release Run complete workflow: build → sign → promote → clean → sync" + echo " build Build AUR packages (unsigned)" + echo " sign Sign all packages in build-output" + echo " promote Promote build to production (build-output → pkgs.omarchy.org)" echo " update Update repository database" echo " clean Clean old package versions" echo " list List packages in repository" echo " remove Remove a specific package" echo " sync Sync repository to remote" echo "" - echo "Examples:" - echo " $0 build # Build all packages" - echo " $0 update --clean # Update database (clean rebuild)" - echo " $0 clean --dry-run # Preview cleanup" - echo " $0 list # List all packages" - echo " $0 remove package-name # Remove a package" - echo " $0 sync x86_64 # Sync to remote" + echo "Typical workflows:" + echo " $0 release # Complete release workflow" + echo "" + echo " $0 build # Manual step-by-step:" + echo " $0 sign" + echo " $0 promote" + echo " $0 clean" + echo " $0 sync pkgs.omarchy.org/x86_64" echo "" echo "For command-specific help, use:" echo " $0 --help" @@ -52,10 +67,22 @@ shift # Route to appropriate script with logging case $COMMAND in +release) + "$SCRIPT_DIR/release" "$@" 2>&1 | tee "$LOG_FILE" + exit ${PIPESTATUS[0]} + ;; build) "$SCRIPT_DIR/build" "$@" 2>&1 | tee "$LOG_FILE" exit ${PIPESTATUS[0]} ;; +sign) + "$SCRIPT_DIR/sign" "$@" 2>&1 | tee "$LOG_FILE" + exit ${PIPESTATUS[0]} + ;; +promote) + "$SCRIPT_DIR/promote-build" "$@" 2>&1 | tee "$LOG_FILE" + exit ${PIPESTATUS[0]} + ;; update) "$SCRIPT_DIR/update-repo" "$@" 2>&1 | tee "$LOG_FILE" exit ${PIPESTATUS[0]} diff --git a/bin/sign b/bin/sign new file mode 100755 index 0000000..0919891 --- /dev/null +++ b/bin/sign @@ -0,0 +1,129 @@ +#!/bin/bash +# Sign all packages in build-output + +set -e + +BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") +source "$BUILD_ROOT/lib/message-helpers.sh" + +ARCH=${ARCH:-x86_64} +BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" + +print_header "Sign Packages" + +# Parse arguments +while [[ $# -gt 0 ]]; do + case $1 in + --arch) + ARCH="$2" + shift 2 + ;; + -h | --help) + echo "Usage: $0 [OPTIONS]" + echo "" + echo "Options:" + echo " --arch Target architecture (x86_64 or aarch64, default: x86_64)" + echo " -h, --help Show this help message" + echo "" + echo "This script signs all packages in build-output/" + exit 0 + ;; + *) + print_error "Unknown option: $1" + exit 1 + ;; + esac +done + +print_info "Build output: $BUILD_OUTPUT_DIR" + +# Check if build output exists +if [[ ! -d "$BUILD_OUTPUT_DIR" ]]; then + print_error "Build output directory not found: $BUILD_OUTPUT_DIR" + print_warning "Run bin/repo build first" + exit 1 +fi + +# Get GPG key from 1Password or environment +if [[ -z "$GPG_PRIVATE_KEY" ]]; then + print_info "Fetching GPG signing key from 1Password..." + GPG_PRIVATE_KEY=$(op document get "Omarchy GPG Private Key" --account=omarchy.1password.com) || { + print_error "Failed to fetch GPG key from 1Password" + exit 1 + } +fi + +# Get passphrase from 1Password or environment +if [[ -z "$GPG_PASSPHRASE" ]]; then + print_info "Fetching GPG key passphrase from 1Password..." + GPG_PASSPHRASE=$(op item get "Omarchy GPG Private Key" --account=omarchy.1password.com --fields password --reveal) || { + print_error "Failed to fetch GPG passphrase from 1Password" + exit 1 + } +fi + +# Import GPG key temporarily +print_info "Importing GPG signing key..." +echo "$GPG_PRIVATE_KEY" | gpg --batch --import 2>/dev/null || { + print_error "Failed to import signing key" + exit 1 +} + +# Get key ID +KEY_ID=$(gpg --list-secret-keys --keyid-format LONG 2>/dev/null | grep "sec" | head -1 | awk '{print $2}' | cut -d'/' -f2) + +if [[ -z "$KEY_ID" ]]; then + print_error "Could not extract key ID" + exit 1 +fi + +print_success "GPG signing key loaded: $KEY_ID" + +# Find all package files +cd "$BUILD_OUTPUT_DIR" +PACKAGE_FILES=$(ls -1 *.pkg.tar.zst 2>/dev/null || true) + +if [[ -z "$PACKAGE_FILES" ]]; then + print_warning "No packages found in build output" + exit 0 +fi + +PACKAGE_COUNT=$(echo "$PACKAGE_FILES" | wc -l) +print_info "Found $PACKAGE_COUNT package(s) to sign" + +echo "" + +# Sign all packages +SIGNED_COUNT=0 +FAILED_COUNT=0 + +for pkg_file in $PACKAGE_FILES; do + echo -n "Signing: $pkg_file ... " + + # Remove existing signature if present + rm -f "$pkg_file.sig" + + # Sign the package + if gpg --batch --yes --pinentry-mode loopback --passphrase "$GPG_PASSPHRASE" \ + --detach-sign --use-agent --no-armor --local-user "$KEY_ID" "$pkg_file" 2>/dev/null; then + echo "✓" + SIGNED_COUNT=$((SIGNED_COUNT + 1)) + else + echo "✗" + FAILED_COUNT=$((FAILED_COUNT + 1)) + fi +done + +echo "" + +# Summary +if [[ $FAILED_COUNT -eq 0 ]]; then + print_success "Successfully signed all $SIGNED_COUNT package(s)" +else + print_warning "Signed $SIGNED_COUNT package(s), failed $FAILED_COUNT" + exit 1 +fi + +# Clear GPG data +unset GPG_PRIVATE_KEY +unset GPG_PASSPHRASE diff --git a/bin/sync-repo b/bin/sync-repo index 41d549b..58730df 100755 --- a/bin/sync-repo +++ b/bin/sync-repo @@ -10,18 +10,18 @@ REMOTE="$DEFAULT_REMOTE" SKIP_PROD_CHECK=false # Parse arguments -if [ $# -eq 0 ]; then +if [ $# -eq 0 ] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then echo "Usage: $0 [options]" echo "" echo "Options:" - echo " --remote Specify rclone remote (default: $DEFAULT_REMOTE)" + echo " --remote Rclone remote destination (default: $DEFAULT_REMOTE)" echo " --skip-prod-check Skip production sync confirmation" echo "" echo "Examples:" - echo " $0 x86_64 # Sync to production (with confirmation)" - echo " $0 x86_64 --remote test:bucket # Sync to test remote" - echo " $0 x86_64 --skip-prod-check # Sync to production without confirmation" - exit 1 + echo " $0 pkgs.omarchy.org/x86_64 # Sync to production (with confirmation)" + echo " $0 pkgs.omarchy.org/x86_64 --remote dev-pkgs:/ # Sync to dev remote" + echo " $0 pkgs.omarchy.org/x86_64 --skip-prod-check # Sync without confirmation" + exit 0 fi DIRECTORY="$1" @@ -49,13 +49,15 @@ done if [[ "$REMOTE" == "$DEFAULT_REMOTE" ]] && [[ "$SKIP_PROD_CHECK" != true ]]; then print_warning "You are about to sync to PRODUCTION ($REMOTE)" echo "" - gum confirm "Are you sure you want to sync to production?" || { + read -p "Are you sure you want to sync to production? (y/N) " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then print_info "Sync cancelled" exit 0 - } + fi fi -print_info "Syncing to: $REMOTE" +print_info "Syncing to: $REMOTE/$(basename $DIRECTORY)" # First sync packages (excluding database files to ensure packages are uploaded first) # Use --ignore-existing to not overwrite different versions already on remote diff --git a/bin/update-repo b/bin/update-repo index 00e4f0a..5675251 100755 --- a/bin/update-repo +++ b/bin/update-repo @@ -10,7 +10,7 @@ source "$BUILD_ROOT/lib/message-helpers.sh" ARCH=${ARCH:-x86_64} BUILD_DIR="$BUILD_ROOT/build" -ARCH_DIR="$BUILD_ROOT/output/$ARCH" +ARCH_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" # Function to update repository database using Docker update_database() { @@ -51,7 +51,7 @@ update_database() { # Run repo-add in Docker container docker run --rm \ -e ARCH="$ARCH" \ - -v "$BUILD_ROOT/output:/output" \ + -v "$BUILD_ROOT/pkgs.omarchy.org:/output" \ -v "$BUILD_DIR:/build:ro" \ omarchy-aur-builder:latest /build/update-repo.sh } diff --git a/build/build.sh b/build/build.sh index 94c61f5..b40f905 100755 --- a/build/build.sh +++ b/build/build.sh @@ -4,21 +4,55 @@ # Import GPG keys /build/import-gpg-keys.sh || exit 1 -# Add Omarchy repository to pacman.conf if database exists +# Setup directories ARCH=${ARCH:-x86_64} -OUTPUT_DIR="/output/$ARCH" +BUILD_OUTPUT_DIR="/build-output/$ARCH" +FINAL_OUTPUT_DIR="/pkgs.omarchy.org/$ARCH" -if [[ -f "$OUTPUT_DIR/omarchy.db.tar.zst" ]]; then - echo "==> Configuring Omarchy repository for dependency resolution..." +mkdir -p "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" + +# Configure Omarchy repositories for dependency resolution +echo "==> Configuring Omarchy repositories for dependency resolution..." + +# Always add omarchy-build repo (for incremental builds) +# Packages in build-output are unsigned, so use SigLevel = Never +# Use the build-output dir as additional cache to avoid file copying issues +sudo tee -a /etc/pacman.conf > /dev/null < omarchy-build (priority 1): $BUILD_OUTPUT_DIR" + +# Initialize empty build database if it doesn't exist +cd "$BUILD_OUTPUT_DIR" +if [[ ! -f "omarchy-build.db.tar.zst" ]]; then + # Create an empty database + repo-add omarchy-build.db.tar.zst >/dev/null 2>&1 + ln -sf omarchy-build.db.tar.zst omarchy-build.db +else + # Database exists, check if we need to rebuild it from packages + if ls *.pkg.tar.* 2>/dev/null | grep -v '\.sig$' | grep -v 'omarchy-build\.db' | grep -q .; then + echo "==> Rebuilding build database from existing packages..." + ls *.pkg.tar.* | grep -v '\.sig$' | grep -v 'omarchy-build\.db' | xargs -r repo-add omarchy-build.db.tar.zst >/dev/null 2>&1 + ln -sf omarchy-build.db.tar.zst omarchy-build.db + fi +fi + +# Add omarchy repo if it has a database (stable packages) +if [[ -f "$FINAL_OUTPUT_DIR/omarchy.db.tar.zst" ]] || [[ -f "$FINAL_OUTPUT_DIR/omarchy.db" ]]; then sudo tee -a /etc/pacman.conf > /dev/null < Omarchy repository added to pacman.conf" -else - echo "==> No Omarchy repository database found (this is normal for first build)" + echo " -> omarchy (priority 2): $FINAL_OUTPUT_DIR" fi # Sync pacman database @@ -26,21 +60,20 @@ sudo pacman -Sy echo "==> Package Builder" echo "==> Target architecture: $ARCH" -echo "==> Output directory: $OUTPUT_DIR" - -mkdir -p "$OUTPUT_DIR" +echo "==> Build workspace: $BUILD_OUTPUT_DIR" +echo "==> Final output: $FINAL_OUTPUT_DIR" FAILED_PACKAGES="" SUCCESSFUL_PACKAGES="" SKIPPED_PACKAGES="" -# Get version from local repo database +# Get version from final output (production packages) get_local_version() { local pkg="$1" - if [[ -f "$OUTPUT_DIR/omarchy.db.tar.zst" ]]; then - local desc_file=$(tar -tf "$OUTPUT_DIR/omarchy.db.tar.zst" | grep "^${pkg}-[0-9r].*/desc$" | head -1) + if [[ -f "$FINAL_OUTPUT_DIR/omarchy.db.tar.zst" ]]; then + local desc_file=$(tar -tf "$FINAL_OUTPUT_DIR/omarchy.db.tar.zst" | grep "^${pkg}-[0-9r].*/desc$" | head -1) if [[ -n "$desc_file" ]]; then - tar -xOf "$OUTPUT_DIR/omarchy.db.tar.zst" "$desc_file" 2>/dev/null | + tar -xOf "$FINAL_OUTPUT_DIR/omarchy.db.tar.zst" "$desc_file" 2>/dev/null | awk '/%VERSION%/{getline; print; exit}' fi fi @@ -59,8 +92,8 @@ build_package() { cp -r "/pkgbuilds/$pkg" "$pkg" cd "/src/$pkg" || return 1 - # Get PKGBUILD version - local pkgbuild_version=$(bash -c 'source PKGBUILD; echo "${pkgver}-${pkgrel}"' 2>/dev/null) + # Get PKGBUILD version (including epoch if present) + local pkgbuild_version=$(bash -c 'source PKGBUILD; if [[ -n "$epoch" ]]; then echo "${epoch}:${pkgver}-${pkgrel}"; else echo "${pkgver}-${pkgrel}"; fi' 2>/dev/null) if [[ -z "$pkgbuild_version" ]]; then echo " ❌ Failed to read PKGBUILD version" @@ -68,14 +101,9 @@ build_package() { return 1 fi - # Check if already built + # Show version info (version check already done in first pass) local local_version=$(get_local_version "$pkg") - - if [[ "$local_version" == "$pkgbuild_version" ]]; then - echo " ✓ Up to date: $local_version - Skipping" - SKIPPED_PACKAGES="$SKIPPED_PACKAGES $pkg" - return 0 - elif [[ -n "$local_version" ]]; then + if [[ -n "$local_version" ]]; then echo " Update available: $local_version -> $pkgbuild_version" else echo " New package (version: $pkgbuild_version)" @@ -91,54 +119,251 @@ build_package() { done fi - # Build package with signing + # Build package without signing (signing is done separately) MAKEPKG_FLAGS="-scf --noconfirm" - # Only add sign flag if we have a GPG key configured - if grep -q "^GPGKEY=" ~/.makepkg.conf 2>/dev/null; then - GPG_KEY=$(grep "^GPGKEY=" ~/.makepkg.conf | cut -d'"' -f2) - echo " Using GPG key: $GPG_KEY" - MAKEPKG_FLAGS="$MAKEPKG_FLAGS --sign --key $GPG_KEY" - else - echo " No GPG key configured in makepkg.conf" - fi - if makepkg $MAKEPKG_FLAGS; then - # Copy to output (including signature files) + # Copy to build workspace for pkg_file in *.pkg.tar.*; do if [[ -f "$pkg_file" ]]; then - cp "$pkg_file" $OUTPUT_DIR/ + cp "$pkg_file" "$BUILD_OUTPUT_DIR/" fi done + + # If this package is a dependency of another package being built, + # update the build database so it's available via pacman + if [[ "${INSTALL_PACKAGES[$pkg]}" == "1" ]]; then + echo " Updating omarchy-build database (needed as dependency)..." + cd "$BUILD_OUTPUT_DIR" + + # Find the package file we just built (not .sig) + local new_pkg=$(ls -t ${pkg}-*.pkg.tar.* 2>/dev/null | grep -v '\.sig$' | head -1) + + if [[ -n "$new_pkg" ]]; then + echo " Adding $new_pkg to database..." + + # Add to omarchy-build database + repo-add omarchy-build.db.tar.zst "$new_pkg" 2>&1 | grep -E "==>|error" || true + ln -sf omarchy-build.db.tar.zst omarchy-build.db + + # Sync filesystem to ensure package file is fully written + sync + + # Refresh pacman databases so it sees the new package + echo " Refreshing pacman database..." + sudo pacman -Sy 2>&1 | grep -E "omarchy-build|error" || true + + # Verify the package is in the database + if pacman -Sl omarchy-build 2>/dev/null | grep -q "^omarchy-build $pkg "; then + echo " ✓ Package available in omarchy-build repo" + else + echo " ⚠ Warning: Package not found in omarchy-build repo" + fi + fi + + cd /src/$pkg + fi + echo " ✓ Successfully built $pkg" SUCCESSFUL_PACKAGES="$SUCCESSFUL_PACKAGES $pkg" return 0 else - echo " ❌ Failed to build $pkg" + echo " ❌ Makepkg failed for $pkg" + echo " DEBUG: Files in build directory:" + ls -lah *.pkg.tar.* 2>&1 | head -20 || echo " No package files found" FAILED_PACKAGES="$FAILED_PACKAGES $pkg" return 1 fi } +# Get package dependencies from PKGBUILD +get_package_deps() { + local pkg="$1" + local pkgbuild="/pkgbuilds/$pkg/PKGBUILD" + + if [[ ! -f "$pkgbuild" ]]; then + return + fi + + # Extract depends and makedepends, filter for packages in our pkgbuilds/ + ( + source "$pkgbuild" 2>/dev/null + echo "${depends[@]} ${makedepends[@]}" + ) | tr ' ' '\n' | while read -r dep; do + # Strip version constraints (e.g., 'hyprshade>=1.0' -> 'hyprshade') + dep=$(echo "$dep" | sed 's/[<>=].*$//') + # Check if this dependency exists in our pkgbuilds + if [[ -d "/pkgbuilds/$dep" ]]; then + echo "$dep" + fi + done +} + +# Simple dependency-aware build order +# Build packages with no internal deps first, then those that depend on them +build_order() { + local -a all_packages=() + local -a result=() + local -A package_deps_count=() + + # Collect all packages + for pkgdir in /pkgbuilds/*/; do + [[ ! -d "$pkgdir" ]] && continue + local pkg=$(basename "$pkgdir") + [[ ! -f "$pkgdir/PKGBUILD" ]] && continue + all_packages+=("$pkg") + + # Count internal dependencies + local dep_count=0 + while read -r dep; do + ((dep_count++)) + done < <(get_package_deps "$pkg") + package_deps_count[$pkg]=$dep_count + done + + # Sort: packages with fewer deps first + while IFS= read -r pkg; do + result+=("$pkg") + done < <( + for pkg in "${all_packages[@]}"; do + echo "${package_deps_count[$pkg]} $pkg" + done | sort -n | cut -d' ' -f2- + ) + + # Output in build order + printf '%s\n' "${result[@]}" +} + +# Check which packages need building (version check only) +check_needs_build() { + local pkg="$1" + local pkgbuild="/pkgbuilds/$pkg/PKGBUILD" + + [[ ! -f "$pkgbuild" ]] && return 1 + + # Get PKGBUILD version (including epoch if present) + local pkgbuild_version=$(cd "/pkgbuilds/$pkg" && bash -c 'source PKGBUILD; if [[ -n "$epoch" ]]; then echo "${epoch}:${pkgver}-${pkgrel}"; else echo "${pkgver}-${pkgrel}"; fi' 2>/dev/null) + [[ -z "$pkgbuild_version" ]] && return 1 + + # Check if already built + local local_version=$(get_local_version "$pkg") + + if [[ "$local_version" == "$pkgbuild_version" ]]; then + return 1 # Already up to date + else + return 0 # Needs building + fi +} + # Main execution cd /src TOTAL_COUNT=0 -# Build all packages in /pkgbuilds/ +echo "==> Checking which packages need building..." + +# First pass: determine which packages need building +PACKAGES_TO_BUILD=() for pkgdir in /pkgbuilds/*/; do [[ ! -d "$pkgdir" ]] && continue - pkg=$(basename "$pkgdir") - - # Skip if no PKGBUILD exists [[ ! -f "$pkgdir/PKGBUILD" ]] && continue - ((TOTAL_COUNT++)) - - build_package "$pkg" + if check_needs_build "$pkg"; then + PACKAGES_TO_BUILD+=("$pkg") + else + echo " ✓ $pkg - already up to date" + SKIPPED_PACKAGES="$SKIPPED_PACKAGES $pkg" + fi done +if [[ ${#PACKAGES_TO_BUILD[@]} -eq 0 ]]; then + echo "==> All packages are up to date!" +else + echo "==> ${#PACKAGES_TO_BUILD[@]} package(s) need building: ${PACKAGES_TO_BUILD[@]}" + echo "==> Determining build order based on dependencies..." + + # Second pass: order only the packages that need building + # Strategy: build packages with no unmet dependencies first + declare -A unmet_deps_count # How many dependencies does this package still need? + declare -A blocks_packages # Which packages are waiting for this one? + + # Count unmet dependencies for each package + for pkg in "${PACKAGES_TO_BUILD[@]}"; do + unmet_deps_count[$pkg]=0 + done + + # Build the dependency relationships + for pkg in "${PACKAGES_TO_BUILD[@]}"; do + while IFS= read -r dep; do + # Only care about deps that are being built in this run + for build_pkg in "${PACKAGES_TO_BUILD[@]}"; do + if [[ "$dep" == "$build_pkg" ]]; then + # pkg needs dep, so increment pkg's unmet count + ((unmet_deps_count[$pkg]++)) + # Track that dep blocks pkg from building + blocks_packages[$dep]="${blocks_packages[$dep]} $pkg" + fi + done + done < <(get_package_deps "$pkg") + done + + # Start with packages that have all dependencies met (count = 0) + ready_to_build=() + for pkg in "${PACKAGES_TO_BUILD[@]}"; do + if [[ ${unmet_deps_count[$pkg]} -eq 0 ]]; then + ready_to_build+=("$pkg") + fi + done + + # Build packages as dependencies become available + ORDERED_PACKAGES=() + while [[ ${#ready_to_build[@]} -gt 0 ]]; do + # Take the first ready package + current="${ready_to_build[0]}" + ready_to_build=("${ready_to_build[@]:1}") + ORDERED_PACKAGES+=("$current") + + # This package is now built, so packages waiting for it can proceed + for blocked_pkg in ${blocks_packages[$current]}; do + ((unmet_deps_count[$blocked_pkg]--)) + if [[ ${unmet_deps_count[$blocked_pkg]} -eq 0 ]]; then + ready_to_build+=("$blocked_pkg") + fi + done + done + + # Check for circular dependencies + if [[ ${#ORDERED_PACKAGES[@]} -ne ${#PACKAGES_TO_BUILD[@]} ]]; then + echo "ERROR: Circular dependency detected!" + exit 1 + fi + + echo "==> Build order: ${ORDERED_PACKAGES[@]}" + + # Determine which packages need to be installed for other packages being built + declare -A INSTALL_PACKAGES + for pkg in "${ORDERED_PACKAGES[@]}"; do + while IFS= read -r dep; do + [[ -z "$dep" ]] && continue + # Only install if it's being built in this run + for build_pkg in "${ORDERED_PACKAGES[@]}"; do + [[ "$dep" == "$build_pkg" ]] && INSTALL_PACKAGES["$dep"]=1 + done + done < <(get_package_deps "$pkg") + done + + if [[ ${#INSTALL_PACKAGES[@]} -gt 0 ]]; then + echo "==> Packages needed as dependencies: ${!INSTALL_PACKAGES[@]}" + fi + + # Build packages in dependency order + for pkg in "${ORDERED_PACKAGES[@]}"; do + ((TOTAL_COUNT++)) + build_package "$pkg" + done +fi + echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "==> Build Summary" @@ -164,7 +389,7 @@ if [[ -n "$FAILED_PACKAGES" ]]; then echo "" echo "==> Some packages failed to build" exit 1 -else - echo "" - echo "==> All packages processed successfully!" fi + +echo "" +echo "==> All packages processed successfully!" From 9576a67d869e6ede5ff39e30be88659767c393db Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 26 Oct 2025 23:53:13 -0400 Subject: [PATCH 08/16] Add readmen --- .gitignore | 2 +- README.md | 235 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 README.md diff --git a/.gitignore b/.gitignore index 6322726..d6290ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -x86_64/ src/ logs/ build-output/ +pkgs.omarchy.org/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..a4086d9 --- /dev/null +++ b/README.md @@ -0,0 +1,235 @@ +# Omarchy Package Repository + +This repository manages the Omarchy Package Repository, building a host of PKGBUILDs and facilitating syncing from AUR where necessary. + +## Overview + +The build system uses Docker to create a clean, reproducible build environment. Packages are built unsigned, then signed in a separate step, promoted to production, and synced to a remote server. + +### Directory Structure + +``` +omarchy-pkgs/ +├── pkgbuilds/ # Source PKGBUILDs (one directory per package) +├── build-output/ # Temporary build workspace +├── pkgs.omarchy.org/ # Final signed packages +├── build/ # Build scripts that run inside of the Docker container +├── bin/ # Command-line tools +└── logs/ # Build and operation logs +``` + +## Quick Start + +### Complete Release Workflow + +Build, sign, promote, clean, and sync in one command: + +```bash +bin/repo release +``` + +With options: +```bash +bin/repo release --skip-prod-check # Skip production confirmation +bin/repo release --sync-remote dev-pkgs:/ # Sync to dev remote instead +bin/repo release --package omarchy-nvim # Build only one package +``` + +### Step-by-Step Workflow + +```bash +# 1. Build packages (unsigned) +bin/repo build + +# 2. Sign all built packages (sitting in `build-output`) +bin/repo sign + +# 3. Promote to production directory (copy from `build-output` -> `pkgs.omarchy.org`) +bin/repo promote + +# 4. Clean old versions and update database +bin/repo clean + +# 5. Sync to remote server +bin/repo sync pkgs.omarchy.org/x86_64 +``` + +## Commands + +### `bin/repo build` + +Builds packages from `pkgbuilds/` directory in a Docker container. + +**Options:** +- `--package ` - Build only a specific package +- `--arch ` - Target architecture (default: x86_64) + +**What it does:** +- Clears `build-output/` directory +- Builds packages in dependency order +- Creates unsigned `.pkg.tar.zst` files in `build-output/x86_64/` +- Skips packages that are already up-to-date in `pkgs.omarchy.org/` + +**Examples:** +```bash +bin/repo build # Build all packages +bin/repo build --package omarchy-nvim # Build only yay +``` + +### `bin/repo sign` + +Signs all unsigned packages in `build-output/`. + +**What it does:** +- Fetches GPG key and passphrase from env or 1Password +- Signs all `.pkg.tar.zst` files + +### `bin/repo promote` + +Copies signed packages from `build-output/` to `pkgs.omarchy.org/`. + +**Options:** +- `--arch ` - Target architecture (default: x86_64) +- `--dry-run` - Preview what would be copied + +**What it does:** +- Copies all packages and signatures to production directory +- Cleans up `build-output/` after successful promotion + +**Examples:** +```bash +bin/repo promote +bin/repo promote --dry-run +``` + +### `bin/repo clean` + +Removes old package versions and updates the repository database. + +**Options:** +- `--keep N` - Keep N versions of each package (default: 2) +- `--dry-run` - Preview what would be removed +- `--usage` - Show disk usage statistics + +**What it does:** +- Removes old package versions (keeps latest 2 by default) +- Updates `omarchy.db.tar.zst` repository database +- Shows disk usage and statistics + +**Examples:** +```bash +bin/repo clean # Keep 2 versions +bin/repo clean --keep 3 # Keep 3 versions +bin/repo clean --dry-run # Preview cleanup +bin/repo clean --usage # Show disk usage +``` + +### `bin/repo sync` + +Syncs the repository to a remote server using rclone. + +**Arguments:** +- `` - Local directory to sync (e.g., `pkgs.omarchy.org/x86_64`) + +**Options:** +- `--remote ` - Rclone remote destination (default: `pkgs.omarchy.org:omarchy-pkgs`) +- `--skip-prod-check` - Skip production confirmation + +**What it does:** +- Syncs packages to remote (uses `--ignore-existing` to preserve versions) +- Syncs database files with checksums +- Prompts for confirmation when syncing to production + +**Examples:** +```bash +bin/repo sync pkgs.omarchy.org/x86_64 # Sync to production +bin/repo sync pkgs.omarchy.org/x86_64 --skip-prod-check # Skip confirmation +bin/repo sync pkgs.omarchy.org/x86_64 --remote dev-pkgs:/# Sync to dev +``` + +### `bin/repo release` + +Runs the complete release workflow in sequence. + +**Options:** +- `--package ` - Build only a specific package +- `--arch ` - Target architecture (default: x86_64) +- `--sync-remote ` - Rclone remote for sync (default: production) +- `--skip-prod-check` - Skip production confirmation + +**What it does:** +1. Builds packages +2. Signs packages +3. Promotes to production +4. Cleans old versions +5. Syncs to remote + +**Examples:** +```bash +bin/repo release # Full workflow +bin/repo release --skip-prod-check # Skip prod confirmation +bin/repo release --sync-remote dev-pkgs:/ # Sync to dev +bin/repo release --package omarchy-nvim # Single package +``` + +### Other Commands + +**`bin/repo list`** - List all packages in the repository +```bash +bin/repo list +``` + +**`bin/repo remove `** - Remove a package from the repository +```bash +bin/repo remove yay +``` + +**`bin/repo update`** - Update the repository database (usually done automatically by `clean`) +```bash +bin/repo update +``` + +## Adding New Packages + +### From AUR + +1. Add package name to `build/packages/omarchy-aur.packages` (for future syncing) +2. Sync PKGBUILD to local directory: + ```bash + bin/sync-aur package-name + ``` +3. Build and release: + ```bash + bin/repo release --package package-name + ``` + +### Custom Package + +1. Create directory in `pkgbuilds/`: + ```bash + mkdir pkgbuilds/my-package + ``` +2. Add PKGBUILD and any additional files +3. Build and release: + ```bash + bin/repo release --package my-package + ``` + +## Package Dependencies + +The build system automatically handles dependencies between packages being built. For example, if `aether` depends on `hyprshade`, the build system will: + +1. Detect the dependency relationship +2. Build `hyprshade` first +3. Add it to the `omarchy-build` temporary repository +4. Build `aether` (which can now install `hyprshade` from `omarchy-build`) + +This works through two internal repositories: +- **`omarchy-build`** - Temporary repo in `build-output/` (unsigned packages, used during build) +- **`omarchy`** - Production repo in `pkgs.omarchy.org/` (signed packages) + +## Version Management + +Packages are only rebuilt if: +- PKGBUILD version is newer than the version in the repository DB +- Package doesn't exist in production yet From ffbde7cde9e9e5e600de5737c1384fd30a77b188 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 27 Oct 2025 00:00:46 -0400 Subject: [PATCH 09/16] Remove legacy iteme --- bin/build | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/bin/build b/bin/build index 73ebf77..be9ed66 100755 --- a/bin/build +++ b/bin/build @@ -39,10 +39,6 @@ while [[ $# -gt 0 ]]; do ARCH="$2" shift 2 ;; - --skip-signing) - SKIP_SIGNING=true - shift - ;; --package) SINGLE_PACKAGE="$2" shift 2 @@ -52,7 +48,6 @@ while [[ $# -gt 0 ]]; do echo "" echo "Options:" echo " --arch Target architecture (x86_64 or aarch64, default: x86_64)" - echo " --skip-signing Build packages without GPG signing" echo " --package Build only the specified package (with optional options)" echo " -h, --help Show this help message" echo "" @@ -64,7 +59,6 @@ while [[ $# -gt 0 ]]; do echo " Options can be appended after package name (skip-pgp, install, always-build, etc.)" echo "" echo "Examples:" - echo " $0 --skip-signing" echo " $0 --arch aarch64" echo " $0 --package yay" echo " $0 --package \"elephant install\"" @@ -99,10 +93,6 @@ else print_info "Building single package: $SINGLE_PACKAGE" fi -# GPG is no longer used during build - signing happens in separate step -# But we still need to import verification keys for package validation -export SKIP_SIGNING=true - # Build/update the Docker image print_info "Building Docker image..." docker build -t omarchy-aur-builder:latest -f "$BUILD_DIR/Dockerfile" "$BUILD_DIR" @@ -121,7 +111,6 @@ fi DOCKER_ARGS=( --rm -e ARCH="$ARCH" - -e SKIP_SIGNING -e SINGLE_PACKAGE="$SINGLE_PACKAGE" -v "$BUILD_ROOT/build-output:/build-output" -v "$BUILD_ROOT/pkgs.omarchy.org:/pkgs.omarchy.org" From 212d4687d2a92bc6478d46ac230939c04a15e228 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 27 Oct 2025 00:15:27 -0400 Subject: [PATCH 10/16] Move signing out --- bin/sign | 109 +++++++++++++++------------------------ build/import-gpg-keys.sh | 60 ++------------------- build/sign.sh | 91 ++++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 123 deletions(-) create mode 100755 build/sign.sh diff --git a/bin/sign b/bin/sign index 0919891..9e98d94 100755 --- a/bin/sign +++ b/bin/sign @@ -8,6 +8,7 @@ source "$BUILD_ROOT/lib/message-helpers.sh" ARCH=${ARCH:-x86_64} BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" +BUILD_DIR="$BUILD_ROOT/build" print_header "Sign Packages" @@ -35,6 +36,7 @@ while [[ $# -gt 0 ]]; do esac done +print_info "Target architecture: $ARCH" print_info "Build output: $BUILD_OUTPUT_DIR" # Check if build output exists @@ -44,86 +46,59 @@ if [[ ! -d "$BUILD_OUTPUT_DIR" ]]; then exit 1 fi -# Get GPG key from 1Password or environment +# Check for Docker +if ! command -v docker &>/dev/null; then + print_error "Docker is not installed" + exit 1 +fi + +# Check if Docker daemon is running +if ! docker info &>/dev/null; then + print_error "Docker daemon is not running" + print_warning "Start Docker with: sudo systemctl start docker" + exit 1 +fi + +# Check GPG credentials are in environment if [[ -z "$GPG_PRIVATE_KEY" ]]; then - print_info "Fetching GPG signing key from 1Password..." - GPG_PRIVATE_KEY=$(op document get "Omarchy GPG Private Key" --account=omarchy.1password.com) || { - print_error "Failed to fetch GPG key from 1Password" - exit 1 - } + print_error "GPG_PRIVATE_KEY environment variable not set" + exit 1 fi -# Get passphrase from 1Password or environment if [[ -z "$GPG_PASSPHRASE" ]]; then - print_info "Fetching GPG key passphrase from 1Password..." - GPG_PASSPHRASE=$(op item get "Omarchy GPG Private Key" --account=omarchy.1password.com --fields password --reveal) || { - print_error "Failed to fetch GPG passphrase from 1Password" - exit 1 - } -fi - -# Import GPG key temporarily -print_info "Importing GPG signing key..." -echo "$GPG_PRIVATE_KEY" | gpg --batch --import 2>/dev/null || { - print_error "Failed to import signing key" - exit 1 -} - -# Get key ID -KEY_ID=$(gpg --list-secret-keys --keyid-format LONG 2>/dev/null | grep "sec" | head -1 | awk '{print $2}' | cut -d'/' -f2) - -if [[ -z "$KEY_ID" ]]; then - print_error "Could not extract key ID" + print_error "GPG_PASSPHRASE environment variable not set" exit 1 fi -print_success "GPG signing key loaded: $KEY_ID" +# Build/update the Docker image (reuse same image as build) +print_info "Building Docker image..." +docker build -t omarchy-aur-builder:latest -f "$BUILD_DIR/Dockerfile" "$BUILD_DIR" -# Find all package files -cd "$BUILD_OUTPUT_DIR" -PACKAGE_FILES=$(ls -1 *.pkg.tar.zst 2>/dev/null || true) +print_info "Running package signing..." -if [[ -z "$PACKAGE_FILES" ]]; then - print_warning "No packages found in build output" - exit 0 +# Ensure output directory is writable by container user +if [ "$(id -u)" -eq 0 ]; then + chmod -R 777 "$BUILD_OUTPUT_DIR" +else + sudo chown -R $(id -u):$(id -g) "$BUILD_OUTPUT_DIR" 2>/dev/null || chmod -R 777 "$BUILD_OUTPUT_DIR" fi -PACKAGE_COUNT=$(echo "$PACKAGE_FILES" | wc -l) -print_info "Found $PACKAGE_COUNT package(s) to sign" +# Run the signing script in Docker +docker run --rm \ + -e ARCH="$ARCH" \ + -e GPG_PRIVATE_KEY="$GPG_PRIVATE_KEY" \ + -e GPG_PASSPHRASE="$GPG_PASSPHRASE" \ + -v "$BUILD_ROOT/build-output:/build-output" \ + -v "$BUILD_DIR:/build:ro" \ + omarchy-aur-builder:latest /build/sign.sh -echo "" - -# Sign all packages -SIGNED_COUNT=0 -FAILED_COUNT=0 - -for pkg_file in $PACKAGE_FILES; do - echo -n "Signing: $pkg_file ... " - - # Remove existing signature if present - rm -f "$pkg_file.sig" - - # Sign the package - if gpg --batch --yes --pinentry-mode loopback --passphrase "$GPG_PASSPHRASE" \ - --detach-sign --use-agent --no-armor --local-user "$KEY_ID" "$pkg_file" 2>/dev/null; then - echo "✓" - SIGNED_COUNT=$((SIGNED_COUNT + 1)) - else - echo "✗" - FAILED_COUNT=$((FAILED_COUNT + 1)) - fi -done - -echo "" +SIGN_RESULT=$? # Summary -if [[ $FAILED_COUNT -eq 0 ]]; then - print_success "Successfully signed all $SIGNED_COUNT package(s)" +echo "" +if [[ $SIGN_RESULT -eq 0 ]]; then + print_success "Package signing completed successfully!" else - print_warning "Signed $SIGNED_COUNT package(s), failed $FAILED_COUNT" - exit 1 + print_error "Package signing failed" + exit $SIGN_RESULT fi - -# Clear GPG data -unset GPG_PRIVATE_KEY -unset GPG_PASSPHRASE diff --git a/build/import-gpg-keys.sh b/build/import-gpg-keys.sh index 832d5fc..aa99362 100755 --- a/build/import-gpg-keys.sh +++ b/build/import-gpg-keys.sh @@ -1,57 +1,7 @@ #!/bin/bash -# Import GPG keys for package verification and signing +# Import GPG keys for package verification -echo "==> Importing GPG keys..." - -# Check if signing is enabled -if [[ "$SKIP_SIGNING" == true ]]; then - echo " -> Skipping signing key import (--skip-signing enabled)" -else - # Import signing key (required for signing) - echo " -> Importing signing key..." - # Import with batch mode and no tty for automated signing - echo "$GPG_PRIVATE_KEY" | gpg --batch --import || { - echo " -> ERROR: Failed to import signing key" - exit 1 - } - - # Configure GPG for automated signing with passphrase - echo "allow-loopback-pinentry" >>~/.gnupg/gpg-agent.conf - echo "pinentry-mode loopback" >>~/.gnupg/gpg.conf - gpg-connect-agent reloadagent /bye 2>/dev/null || true - - # Extract key ID and configure - KEY_ID=$(gpg --list-secret-keys --keyid-format LONG | grep "sec" | head -1 | awk '{print $2}' | cut -d'/' -f2) - if [[ -n "$KEY_ID" ]]; then - # Trust the key using fingerprint - FINGERPRINT=$(gpg --list-secret-keys --with-colons | grep "^fpr" | head -1 | cut -d':' -f10) - echo "$FINGERPRINT:6:" | gpg --import-ownertrust - # Set as default key in makepkg.conf - echo "GPGKEY=\"$KEY_ID\"" >>~/.makepkg.conf - echo " -> Signing key configured: $KEY_ID" - - # Test signing with the key and passphrase - echo " -> Testing GPG signing capability..." - echo "test" | gpg --batch --yes --pinentry-mode loopback --passphrase "$GPG_PASSPHRASE" --sign --local-user "$KEY_ID" >/dev/null 2>&1 - if [[ $? -ne 0 ]]; then - echo " -> ERROR: Failed to sign with the provided passphrase" - echo " -> Please check your passphrase and try again" - exit 1 - fi - echo " -> GPG signing test successful" - - # Import public signing key into pacman's keyring for local package verification - echo " -> Adding signing key to pacman keyring..." - sudo pacman-key --init || exit 1 - gpg --armor --export "$KEY_ID" > /tmp/signing-key.asc || exit 1 - sudo pacman-key --add /tmp/signing-key.asc || exit 1 - rm -f /tmp/signing-key.asc - sudo pacman-key --lsign-key "$KEY_ID" || exit 1 - else - echo " -> ERROR: Could not extract key ID" - exit 1 - fi -fi +echo "==> Importing GPG verification keys..." # Read the gpg-keys.txt file for verification keys if [[ -f /build/gpg-keys.txt ]]; then @@ -75,9 +25,7 @@ if [[ -f /build/gpg-keys.txt ]]; then } fi done Verification key import complete" + echo " ✓ Verification key import complete" else - echo " -> No gpg-keys.txt file found, skipping verification key import" + echo " -> No gpg-keys.txt file found, skipping" fi - -echo " -> GPG setup complete" diff --git a/build/sign.sh b/build/sign.sh new file mode 100755 index 0000000..3924572 --- /dev/null +++ b/build/sign.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# Sign packages in build-output (runs inside Docker) + +set -e + +ARCH=${ARCH:-x86_64} +BUILD_OUTPUT_DIR="/build-output/$ARCH" + +echo "==> Package Signing" +echo "==> Target architecture: $ARCH" +echo "==> Build output: $BUILD_OUTPUT_DIR" + +# Check if GPG key and passphrase are provided +if [[ -z "$GPG_PRIVATE_KEY" ]]; then + echo "ERROR: GPG_PRIVATE_KEY environment variable not set" + exit 1 +fi + +if [[ -z "$GPG_PASSPHRASE" ]]; then + echo "ERROR: GPG_PASSPHRASE environment variable not set" + exit 1 +fi + +# Import GPG key +echo "==> Importing GPG signing key..." +echo "$GPG_PRIVATE_KEY" | gpg --batch --import 2>/dev/null || { + echo "ERROR: Failed to import signing key" + exit 1 +} + +# Get key ID +KEY_ID=$(gpg --list-secret-keys --keyid-format LONG 2>/dev/null | grep "sec" | head -1 | awk '{print $2}' | cut -d'/' -f2) + +if [[ -z "$KEY_ID" ]]; then + echo "ERROR: Could not extract key ID" + exit 1 +fi + +echo " ✓ GPG signing key loaded: $KEY_ID" + +# Check if build output exists and has packages +if [[ ! -d "$BUILD_OUTPUT_DIR" ]]; then + echo "ERROR: Build output directory not found: $BUILD_OUTPUT_DIR" + exit 1 +fi + +cd "$BUILD_OUTPUT_DIR" + +# Find all unsigned package files +PACKAGE_FILES=$(ls -1 *.pkg.tar.zst 2>/dev/null || true) + +if [[ -z "$PACKAGE_FILES" ]]; then + echo "==> No packages found to sign" + exit 0 +fi + +PACKAGE_COUNT=$(echo "$PACKAGE_FILES" | wc -l) +echo "==> Found $PACKAGE_COUNT package(s) to sign" +echo "" + +# Sign all packages +SIGNED_COUNT=0 +FAILED_COUNT=0 + +for pkg_file in $PACKAGE_FILES; do + echo -n " -> $pkg_file ... " + + # Remove existing signature if present + rm -f "$pkg_file.sig" + + # Sign the package + if gpg --batch --yes --pinentry-mode loopback --passphrase "$GPG_PASSPHRASE" \ + --detach-sign --use-agent --no-armor --local-user "$KEY_ID" "$pkg_file" 2>/dev/null; then + echo "✓" + ((SIGNED_COUNT++)) + else + echo "✗" + ((FAILED_COUNT++)) + fi +done + +echo "" + +# Summary +if [[ $FAILED_COUNT -eq 0 ]]; then + echo "==> Successfully signed all $SIGNED_COUNT package(s)" + exit 0 +else + echo "==> Signed $SIGNED_COUNT package(s), failed $FAILED_COUNT" + exit 1 +fi From c2d62eddd6ff2093bc2991e02bdf27e5e04c21ed Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 27 Oct 2025 00:23:23 -0400 Subject: [PATCH 11/16] Run remove in a container --- bin/remove-package | 69 +++++++++++++++++++++++++++++++---------- build/remove-package.sh | 45 +++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 16 deletions(-) create mode 100755 build/remove-package.sh diff --git a/bin/remove-package b/bin/remove-package index 764b18e..b6a3b91 100755 --- a/bin/remove-package +++ b/bin/remove-package @@ -1,47 +1,84 @@ #!/bin/bash set -e -# Get the directory of this script -SCRIPT_DIR=$(realpath "${BASH_SOURCE[0]%/*}") -BUILD_ROOT=$(realpath "$SCRIPT_DIR/..") +BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/lib/message-helpers.sh" ARCH=${ARCH:-x86_64} -ARCH_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" -cd "$ARCH_DIR" +REPO_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" +BUILD_DIR="$BUILD_ROOT/build" + +print_header "Remove Package" if [[ -z "$1" ]]; then + print_error "Package name required" + echo "" echo "Usage: $0 " exit 1 fi -# Find exact package files (not subpackages like yay-debug) -FILES=$(ls ${1}-[0-9]*.pkg.tar.* 2>/dev/null || true) +PACKAGE_NAME="$1" + +print_info "Target architecture: $ARCH" +print_info "Repository: $REPO_DIR" + +# Check if repository exists +if [[ ! -d "$REPO_DIR" ]]; then + print_error "Repository directory not found: $REPO_DIR" + exit 1 +fi + +# Check Docker is available +check_docker + +# Find package files to confirm before running Docker +cd "$REPO_DIR" +FILES=$(ls ${PACKAGE_NAME}-[0-9]*.pkg.tar.* 2>/dev/null || true) if [[ -z "$FILES" ]]; then - echo "Package '$1' not found" + print_error "Package '$PACKAGE_NAME' not found" exit 1 fi # Confirm removal +echo "" echo "Package files to remove:" for file in $FILES; do echo " - $file" done echo "" -read -p "Remove package '$1'? (y/N) " -n 1 -r +read -p "Remove package '$PACKAGE_NAME'? (y/N) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then print_info "Removal cancelled" exit 0 fi -# Remove from database -repo-remove omarchy.db.tar.zst "$1" +# Build/update the Docker image +build_docker_image "$BUILD_DIR" -# Remove files (only the exact package, not subpackages) -for file in $FILES; do - rm -f "$file" -done +print_info "Removing package..." -echo "Package '$1' removed" +# Ensure directory is writable by container user +if [ "$(id -u)" -eq 0 ]; then + chmod -R 777 "$REPO_DIR" +else + sudo chown -R $(id -u):$(id -g) "$REPO_DIR" 2>/dev/null || chmod -R 777 "$REPO_DIR" +fi + +# Run the removal script in Docker +docker run --rm \ + -e ARCH="$ARCH" \ + -v "$BUILD_ROOT/pkgs.omarchy.org:/pkgs.omarchy.org" \ + -v "$BUILD_DIR:/build:ro" \ + omarchy-aur-builder:latest /build/remove-package.sh "$PACKAGE_NAME" + +RESULT=$? + +echo "" +if [[ $RESULT -eq 0 ]]; then + print_success "Package removal completed successfully!" +else + print_error "Package removal failed" + exit $RESULT +fi diff --git a/build/remove-package.sh b/build/remove-package.sh new file mode 100755 index 0000000..b79adba --- /dev/null +++ b/build/remove-package.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# Remove package from repository (runs inside Docker) + +set -e + +ARCH=${ARCH:-x86_64} +PACKAGE_NAME="$1" +REPO_DIR="/pkgs.omarchy.org/$ARCH" + +if [[ -z "$PACKAGE_NAME" ]]; then + echo "ERROR: Package name required" + exit 1 +fi + +cd "$REPO_DIR" + +# Find exact package files (not subpackages like yay-debug) +FILES=$(ls ${PACKAGE_NAME}-[0-9]*.pkg.tar.* 2>/dev/null || true) + +if [[ -z "$FILES" ]]; then + echo "ERROR: Package '$PACKAGE_NAME' not found" + exit 1 +fi + +echo "==> Removing package: $PACKAGE_NAME" +echo "" +echo "Files to remove:" +for file in $FILES; do + echo " - $file" +done +echo "" + +# Remove from database +echo "==> Removing from repository database..." +repo-remove omarchy.db.tar.zst "$PACKAGE_NAME" + +# Remove files +echo "==> Removing package files..." +for file in $FILES; do + rm -f "$file" + echo " ✓ Removed $file" +done + +echo "" +echo "==> Package '$PACKAGE_NAME' removed successfully" From e400a65fe47912b87ee128193a6aab52e90d827f Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 27 Oct 2025 00:23:29 -0400 Subject: [PATCH 12/16] Consolidate docker checks --- bin/build | 19 ++++--------------- bin/sign | 17 +++-------------- bin/update-repo | 20 ++++---------------- lib/message-helpers.sh | 21 +++++++++++++++++++++ 4 files changed, 32 insertions(+), 45 deletions(-) diff --git a/bin/build b/bin/build index be9ed66..be56dda 100755 --- a/bin/build +++ b/bin/build @@ -17,21 +17,11 @@ BUILD_DIR="$BUILD_ROOT/build" # Create directories if they don't exist mkdir -p "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" "$SRC_DIR" -# Check for Docker -if ! command -v docker &>/dev/null; then - print_error "Docker is not installed" - exit 1 -fi - -# Check if Docker daemon is running -if ! docker info &>/dev/null; then - print_error "Docker daemon is not running" - print_warning "Start Docker with: sudo systemctl start docker" - exit 1 -fi - print_header "Omarchy AUR Package Builder" +# Check Docker is available +check_docker + # Parse command line arguments while [[ $# -gt 0 ]]; do case $1 in @@ -94,8 +84,7 @@ else fi # Build/update the Docker image -print_info "Building Docker image..." -docker build -t omarchy-aur-builder:latest -f "$BUILD_DIR/Dockerfile" "$BUILD_DIR" +build_docker_image "$BUILD_DIR" print_info "Running AUR package build..." diff --git a/bin/sign b/bin/sign index 9e98d94..bf4feea 100755 --- a/bin/sign +++ b/bin/sign @@ -46,18 +46,8 @@ if [[ ! -d "$BUILD_OUTPUT_DIR" ]]; then exit 1 fi -# Check for Docker -if ! command -v docker &>/dev/null; then - print_error "Docker is not installed" - exit 1 -fi - -# Check if Docker daemon is running -if ! docker info &>/dev/null; then - print_error "Docker daemon is not running" - print_warning "Start Docker with: sudo systemctl start docker" - exit 1 -fi +# Check Docker is available +check_docker # Check GPG credentials are in environment if [[ -z "$GPG_PRIVATE_KEY" ]]; then @@ -71,8 +61,7 @@ if [[ -z "$GPG_PASSPHRASE" ]]; then fi # Build/update the Docker image (reuse same image as build) -print_info "Building Docker image..." -docker build -t omarchy-aur-builder:latest -f "$BUILD_DIR/Dockerfile" "$BUILD_DIR" +build_docker_image "$BUILD_DIR" print_info "Running package signing..." diff --git a/bin/update-repo b/bin/update-repo index 5675251..00080e5 100755 --- a/bin/update-repo +++ b/bin/update-repo @@ -16,17 +16,8 @@ ARCH_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" update_database() { print_info "Updating repository database in Docker container..." - # Check for Docker - if ! command -v docker &>/dev/null; then - print_error "Docker is not installed" - exit 1 - fi - - # Check if Docker daemon is running - if ! docker info &>/dev/null; then - print_error "Docker daemon is not running" - exit 1 - fi + # Check Docker is available + check_docker # Ensure output directory exists if [[ ! -d "$ARCH_DIR" ]]; then @@ -42,11 +33,8 @@ update_database() { sudo chown -R $(id -u):$(id -g) "$ARCH_DIR" 2>/dev/null || chmod -R 777 "$ARCH_DIR" fi - # Build Docker image if needed (reuse the same image as build) - if ! docker image inspect omarchy-aur-builder:latest &>/dev/null; then - print_info "Building Docker image..." - docker build -t omarchy-aur-builder:latest -f "$BUILD_DIR/Dockerfile" "$BUILD_DIR" - fi + # Build Docker image + build_docker_image "$BUILD_DIR" # Run repo-add in Docker container docker run --rm \ diff --git a/lib/message-helpers.sh b/lib/message-helpers.sh index 69679b0..203f382 100644 --- a/lib/message-helpers.sh +++ b/lib/message-helpers.sh @@ -36,3 +36,24 @@ print_header() { echo -e "${BOLD}$1${NC}" echo -e "${BOLD}================================${NC}" } + +# Check Docker is available and running +check_docker() { + if ! command -v docker &>/dev/null; then + print_error "Docker is not installed" + exit 1 + fi + + if ! docker info &>/dev/null; then + print_error "Docker daemon is not running" + print_warning "Start Docker with: sudo systemctl start docker" + exit 1 + fi +} + +# Build the Docker image if needed +build_docker_image() { + local build_dir="$1" + print_info "Building Docker image..." + docker build -t omarchy-aur-builder:latest -f "$build_dir/Dockerfile" "$build_dir" +} From fde981aa954d97dffc5e961401f937dde21840da Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 27 Oct 2025 00:23:59 -0400 Subject: [PATCH 13/16] Remove ruby builds since we're not doing that --- bin/build-ruby | 293 ------------------------------------------ build/Dockerfile.ruby | 33 ----- 2 files changed, 326 deletions(-) delete mode 100755 bin/build-ruby delete mode 100644 build/Dockerfile.ruby diff --git a/bin/build-ruby b/bin/build-ruby deleted file mode 100755 index 7f0e005..0000000 --- a/bin/build-ruby +++ /dev/null @@ -1,293 +0,0 @@ -#!/bin/bash - -# Abort if anything fails -set -e - -# Source common functions -BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" - -# Configuration -BUILD_DIR="$BUILD_ROOT/build" -OUTPUT_DIR="$BUILD_ROOT/output/ruby" - -# Default values -ARCHITECTURES=("x86_64") -RUBY_VERSIONS=() -RAILS_VERSIONS=("8.0.2.1") # Current stable Rails version - -# Function to fetch last N Ruby releases -fetch_ruby_releases() { - local count=$1 - print_info "Fetching last $count Ruby releases..." - - # Fetch releases from Ruby's release page - curl -s https://api.github.com/repos/ruby/ruby/releases | \ - jq -r '.[].tag_name' | \ - grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | \ - sed 's/^v//' | \ - head -n "$count" -} - -# Parse command line arguments -while [[ $# -gt 0 ]]; do - case $1 in - --ruby) - IFS=',' read -ra RUBY_VERSIONS <<< "$2" - shift 2 - ;; - --rails) - IFS=',' read -ra RAILS_VERSIONS <<< "$2" - shift 2 - ;; - --arch) - IFS=',' read -ra ARCHITECTURES <<< "$2" - shift 2 - ;; - --last) - # Fetch last N Ruby releases - RUBY_VERSIONS=($(fetch_ruby_releases "$2")) - shift 2 - ;; - -h | --help) - echo "Usage: $0 [OPTIONS]" - echo "" - echo "Options:" - echo " --ruby Comma-separated Ruby versions (e.g., 3.4.5,3.3.0,edge)" - echo " --rails Comma-separated Rails versions (e.g., 8.0.2.1,7.2.0,edge)" - echo " --arch Comma-separated architectures (e.g., x86_64,aarch64)" - echo " --last Build last N Ruby releases" - echo " -h, --help Show this help message" - echo "" - echo "Examples:" - echo " $0 --ruby 3.4.5,edge --rails 8.0.2.1" - echo " $0 --last 10 --rails 8.0.2.1" - echo " $0 --ruby 3.4.5 --rails 8.0.2.1,7.2.0 --arch x86_64,aarch64" - echo "" - echo "Default behavior:" - echo " - Builds Ruby 3.4.5, edge, and last 10 releases" - echo " - Uses Rails 8.0.2.1" - echo " - Builds for x86_64 architecture" - exit 0 - ;; - *) - print_error "Unknown option: $1" - exit 1 - ;; - esac -done - -# If no Ruby versions specified, use defaults -if [[ ${#RUBY_VERSIONS[@]} -eq 0 ]]; then - print_info "No Ruby versions specified, using defaults..." - # Get last 10 releases - LAST_10=($(fetch_ruby_releases 10)) - # Combine with specific versions - RUBY_VERSIONS=("3.4.5" "edge" "${LAST_10[@]}") - # Remove duplicates - RUBY_VERSIONS=($(echo "${RUBY_VERSIONS[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) -fi - -print_header "Ruby Bundle Builder" -print_info "Ruby versions: ${RUBY_VERSIONS[*]}" -print_info "Rails versions: ${RAILS_VERSIONS[*]}" -print_info "Architectures: ${ARCHITECTURES[*]}" - -# Check for Docker -if ! command -v docker &>/dev/null; then - print_error "Docker is not installed" - exit 1 -fi - -# Check if Docker daemon is running -if ! docker info &>/dev/null; then - print_error "Docker daemon is not running" - print_warning "Start Docker with: sudo systemctl start docker" - exit 1 -fi - -# Setup QEMU for multi-platform builds if aarch64 is requested -if [[ " ${ARCHITECTURES[@]} " =~ " aarch64 " ]]; then - print_info "Setting up QEMU for aarch64 emulation..." - - # Install QEMU user static for cross-platform emulation - if ! docker run --rm --privileged multiarch/qemu-user-static --reset -p yes; then - print_warning "Failed to setup QEMU, aarch64 builds may fail" - print_info "You may need to install qemu-user-static on your host" - else - print_success "QEMU emulation enabled for multi-arch builds" - fi -fi - -# Create output directories -for arch in "${ARCHITECTURES[@]}"; do - mkdir -p "$OUTPUT_DIR/$arch" -done - -# Build the Docker image using buildx for multi-platform support -print_info "Building Docker image..." - -# Determine platforms needed -PLATFORMS="" -for arch in "${ARCHITECTURES[@]}"; do - case "$arch" in - x86_64) - [[ -n "$PLATFORMS" ]] && PLATFORMS+="," - PLATFORMS+="linux/amd64" - ;; - aarch64) - [[ -n "$PLATFORMS" ]] && PLATFORMS+="," - PLATFORMS+="linux/arm64" - ;; - *) - print_error "Unsupported architecture: $arch" - continue - ;; - esac -done - -# Use buildx to build multi-platform image -if command -v docker buildx &>/dev/null; then - # Ensure we have a builder instance - BUILDER_NAME="ruby-multiarch" - if ! docker buildx ls | grep -q "$BUILDER_NAME"; then - print_info "Creating buildx builder instance..." - docker buildx create --name "$BUILDER_NAME" --driver docker-container --use - else - docker buildx use "$BUILDER_NAME" - fi - - print_info "Building multi-platform image for: $PLATFORMS" - - # Build for all platforms at once - # We can't use --load with multiple platforms, so we build separately for each - for arch in "${ARCHITECTURES[@]}"; do - case "$arch" in - x86_64) - PLATFORM="linux/amd64" - ;; - aarch64) - PLATFORM="linux/arm64" - ;; - esac - - print_info "Building for $arch ($PLATFORM)..." - if ! docker buildx build \ - --platform "$PLATFORM" \ - -t "ruby-builder:$arch" \ - --load \ - -f "$BUILD_DIR/Dockerfile.ruby-builder" \ - "$BUILD_DIR"; then - print_error "Failed to build Docker image for $arch" - exit 1 - fi - print_success "Built image for $arch" - done -else - print_error "Docker buildx is required for multi-platform builds" - print_info "Install with: docker buildx install" - exit 1 -fi - -print_success "Docker image built successfully" -print_info "Starting Ruby builds..." - -# Track results -SUCCESSFUL_BUILDS=() -FAILED_BUILDS=() - -# Build each combination -TOTAL_BUILDS=$((${#RUBY_VERSIONS[@]} * ${#RAILS_VERSIONS[@]} * ${#ARCHITECTURES[@]})) -CURRENT_BUILD=0 - -print_info "Total builds to perform: $TOTAL_BUILDS" - -for ruby_version in "${RUBY_VERSIONS[@]}"; do - print_info "Processing Ruby version: $ruby_version" - for rails_version in "${RAILS_VERSIONS[@]}"; do - print_info "Processing Rails version: $rails_version" - for arch in "${ARCHITECTURES[@]}"; do - print_info "Processing architecture: $arch" - CURRENT_BUILD=$((CURRENT_BUILD + 1)) - - echo "" - print_info "[$CURRENT_BUILD/$TOTAL_BUILDS] Building Ruby $ruby_version + Rails $rails_version for $arch..." - - # Check if this combination already exists - if [[ "$ruby_version" == "edge" ]]; then - TARBALL_PATTERN="ruby-edge-rails-*-${arch}.tar.gz" - else - if [[ "$rails_version" == "edge" ]]; then - TARBALL_PATTERN="ruby-${ruby_version}-rails-edge-*-${arch}.tar.gz" - else - TARBALL_PATTERN="ruby-${ruby_version}-rails-${rails_version}-${arch}.tar.gz" - fi - fi - - if ls "$OUTPUT_DIR/$arch"/$TARBALL_PATTERN 1>/dev/null 2>&1; then - print_warning "Skipping: $TARBALL_PATTERN already exists" - continue - fi - - # Map architecture to Docker platform - case "$arch" in - x86_64) - PLATFORM="linux/amd64" - ;; - aarch64) - PLATFORM="linux/arm64" - ;; - *) - print_error "Unsupported architecture: $arch" - continue - ;; - esac - - # Run the build in Docker using the architecture-specific image - print_info "Running Ruby build in container for $arch..." - if docker run --rm \ - --platform "$PLATFORM" \ - -e RUBY_VERSION="$ruby_version" \ - -e RAILS_VERSION="$rails_version" \ - -e ARCH="$arch" \ - -v "$OUTPUT_DIR:/output/ruby" \ - -v "$BUILD_DIR/build-ruby.sh:/build/build-ruby.sh:ro" \ - "ruby-builder:$arch"; then - - print_success "Successfully built Ruby $ruby_version + Rails $rails_version for $arch" - SUCCESSFUL_BUILDS+=("ruby-$ruby_version-rails-$rails_version-$arch") - else - print_error "Failed to build Ruby $ruby_version + Rails $rails_version for $arch" - FAILED_BUILDS+=("ruby-$ruby_version-rails-$rails_version-$arch") - fi - done - done -done - -# Summary -echo "" -print_header "Build Summary" -print_info "Total builds attempted: $TOTAL_BUILDS" -print_success "Successful: ${#SUCCESSFUL_BUILDS[@]}" -if [[ ${#FAILED_BUILDS[@]} -gt 0 ]]; then - print_error "Failed: ${#FAILED_BUILDS[@]}" - echo "Failed builds:" - for build in "${FAILED_BUILDS[@]}"; do - echo " - $build" - done - exit 1 -else - print_success "All builds completed successfully!" -fi - -# Show output directory contents -echo "" -print_info "Output directory contents:" -for arch in "${ARCHITECTURES[@]}"; do - echo " $OUTPUT_DIR/$arch:" - ls -lh "$OUTPUT_DIR/$arch/" 2>/dev/null | tail -n +2 | head -5 | sed 's/^/ /' - TOTAL_FILES=$(ls "$OUTPUT_DIR/$arch/" 2>/dev/null | wc -l) - if [[ $TOTAL_FILES -gt 5 ]]; then - echo " ... and $((TOTAL_FILES - 5)) more files" - fi -done diff --git a/build/Dockerfile.ruby b/build/Dockerfile.ruby deleted file mode 100644 index 3e3ede8..0000000 --- a/build/Dockerfile.ruby +++ /dev/null @@ -1,33 +0,0 @@ -FROM archlinux:base-devel - -# Update packages and install dependencies for mise and Ruby compilation -RUN pacman -Syu --noconfirm --needed git curl sudo ca-certificates openssl zlib libyaml libffi readline ncurses base-devel \ - && pacman -Scc --noconfirm - -# Set mise environment variables for a consistent, container-friendly path -ENV MISE_DATA_DIR=/mise -ENV MISE_CONFIG_DIR=/mise -ENV MISE_CACHE_DIR=/mise/cache -ENV MISE_INSTALL_PATH=/usr/local/bin/mise -ENV PATH=/mise/shims:$PATH - -# Install mise -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN curl https://mise.run | sh - -# Set Ruby build options for relocatable/portable compilation -ENV MISE_RUBY_BUILD_OPTS="--enable-load-relative --with-static-linked-ext" - -# Install Ruby 3.4.5 -RUN mise install ruby@3.4.5 - -# Activate Ruby and install Rails -RUN mise use ruby@3.4.5 -RUN gem install rails --version 8.0.2.1 - -# Generate a temporary Rails app to install default gems -RUN rails new temp_app \ - && rm -rf temp_app - -# Create a single tarball with Ruby and all gems -RUN tar -czf /ruby-3.4.5-rails-8.0.2.1.tar.gz -C /mise/installs/ruby 3.4.5 From 51a3318b10a70dc3e584530eba562c40304a7c99 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 27 Oct 2025 00:28:46 -0400 Subject: [PATCH 14/16] Consolidate more helpers --- bin/build | 11 +++----- bin/clean-repo | 2 +- bin/promote-build | 2 +- bin/release | 2 +- bin/remove-package | 9 +++---- bin/repo | 2 +- bin/sign | 9 +++---- bin/sync-aur | 2 +- bin/sync-repo | 2 +- bin/update-repo | 9 +++---- helpers/docker-helpers.sh | 42 +++++++++++++++++++++++++++++ {lib => helpers}/message-helpers.sh | 21 --------------- 12 files changed, 61 insertions(+), 52 deletions(-) create mode 100644 helpers/docker-helpers.sh rename {lib => helpers}/message-helpers.sh (54%) diff --git a/bin/build b/bin/build index be56dda..f4486c7 100755 --- a/bin/build +++ b/bin/build @@ -5,7 +5,8 @@ set -e # Source common functions BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" +source "$BUILD_ROOT/helpers/docker-helpers.sh" ARCH=${ARCH:-x86_64} @@ -89,12 +90,8 @@ build_docker_image "$BUILD_DIR" print_info "Running AUR package build..." # Ensure output directories are writable by container user -# The container runs as 'builder' user, so we need to make output writable -if [ "$(id -u)" -eq 0 ]; then - chmod -R 777 "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" -else - sudo chown -R $(id -u):$(id -g) "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" 2>/dev/null || chmod -R 777 "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" -fi +make_dir_writable "$BUILD_OUTPUT_DIR" +make_dir_writable "$FINAL_OUTPUT_DIR" # Build Docker arguments DOCKER_ARGS=( diff --git a/bin/clean-repo b/bin/clean-repo index ec7b252..5d512d9 100755 --- a/bin/clean-repo +++ b/bin/clean-repo @@ -6,7 +6,7 @@ set -e # Source common functions BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" # Repository configuration ARCH=${ARCH:-x86_64} diff --git a/bin/promote-build b/bin/promote-build index e57a9de..94f3ba6 100755 --- a/bin/promote-build +++ b/bin/promote-build @@ -4,7 +4,7 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" ARCH=${ARCH:-x86_64} BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" diff --git a/bin/release b/bin/release index 8510a8e..c7b3b42 100755 --- a/bin/release +++ b/bin/release @@ -4,7 +4,7 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" ARCH=${ARCH:-x86_64} SYNC_REMOTE="" diff --git a/bin/remove-package b/bin/remove-package index b6a3b91..12252cc 100755 --- a/bin/remove-package +++ b/bin/remove-package @@ -2,7 +2,8 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" +source "$BUILD_ROOT/helpers/docker-helpers.sh" ARCH=${ARCH:-x86_64} REPO_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" @@ -60,11 +61,7 @@ build_docker_image "$BUILD_DIR" print_info "Removing package..." # Ensure directory is writable by container user -if [ "$(id -u)" -eq 0 ]; then - chmod -R 777 "$REPO_DIR" -else - sudo chown -R $(id -u):$(id -g) "$REPO_DIR" 2>/dev/null || chmod -R 777 "$REPO_DIR" -fi +make_dir_writable "$REPO_DIR" # Run the removal script in Docker docker run --rm \ diff --git a/bin/repo b/bin/repo index 211be2a..764479f 100755 --- a/bin/repo +++ b/bin/repo @@ -9,7 +9,7 @@ SCRIPT_DIR=$(realpath "${BASH_SOURCE[0]%/*}") BUILD_ROOT=$(realpath "$SCRIPT_DIR/..") # Source common functions -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" # Setup logging with timestamps LOG_DIR="$BUILD_ROOT/logs" diff --git a/bin/sign b/bin/sign index bf4feea..393ad1a 100755 --- a/bin/sign +++ b/bin/sign @@ -4,7 +4,8 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" +source "$BUILD_ROOT/helpers/docker-helpers.sh" ARCH=${ARCH:-x86_64} BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" @@ -66,11 +67,7 @@ build_docker_image "$BUILD_DIR" print_info "Running package signing..." # Ensure output directory is writable by container user -if [ "$(id -u)" -eq 0 ]; then - chmod -R 777 "$BUILD_OUTPUT_DIR" -else - sudo chown -R $(id -u):$(id -g) "$BUILD_OUTPUT_DIR" 2>/dev/null || chmod -R 777 "$BUILD_OUTPUT_DIR" -fi +make_dir_writable "$BUILD_OUTPUT_DIR" # Run the signing script in Docker docker run --rm \ diff --git a/bin/sync-aur b/bin/sync-aur index 4742b15..a972376 100755 --- a/bin/sync-aur +++ b/bin/sync-aur @@ -1,7 +1,7 @@ #!/bin/bash BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" PKGBUILDS_DIR="$BUILD_ROOT/pkgbuilds" PACKAGES_FILE="$BUILD_ROOT/build/packages/omarchy-aur.packages" diff --git a/bin/sync-repo b/bin/sync-repo index 58730df..0d6c96c 100755 --- a/bin/sync-repo +++ b/bin/sync-repo @@ -2,7 +2,7 @@ # Source common functions BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" # Default remote (production) DEFAULT_REMOTE="pkgs.omarchy.org:omarchy-pkgs" diff --git a/bin/update-repo b/bin/update-repo index 00080e5..a07427b 100755 --- a/bin/update-repo +++ b/bin/update-repo @@ -6,7 +6,8 @@ set -e # Source common functions BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" +source "$BUILD_ROOT/helpers/message-helpers.sh" +source "$BUILD_ROOT/helpers/docker-helpers.sh" ARCH=${ARCH:-x86_64} BUILD_DIR="$BUILD_ROOT/build" @@ -27,11 +28,7 @@ update_database() { fi # Make output directory writable for container - if [ "$(id -u)" -eq 0 ]; then - chmod -R 777 "$ARCH_DIR" - else - sudo chown -R $(id -u):$(id -g) "$ARCH_DIR" 2>/dev/null || chmod -R 777 "$ARCH_DIR" - fi + make_dir_writable "$ARCH_DIR" # Build Docker image build_docker_image "$BUILD_DIR" diff --git a/helpers/docker-helpers.sh b/helpers/docker-helpers.sh new file mode 100644 index 0000000..2cb160a --- /dev/null +++ b/helpers/docker-helpers.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# Docker helper functions for Omarchy package build system + +# Check Docker is available and running +check_docker() { + if ! command -v docker &>/dev/null; then + print_error "Docker is not installed" + exit 1 + fi + + if ! docker info &>/dev/null; then + print_error "Docker daemon is not running" + print_warning "Start Docker with: sudo systemctl start docker" + exit 1 + fi +} + +# Build the Docker image if needed +build_docker_image() { + local build_dir="$1" + print_info "Building Docker image..." + docker build -t omarchy-aur-builder:latest -f "$build_dir/Dockerfile" "$build_dir" +} + +# Make directory writable by Docker container user +make_dir_writable() { + local dir="$1" + if [ "$(id -u)" -eq 0 ]; then + chmod -R 777 "$dir" + else + sudo chown -R $(id -u):$(id -g) "$dir" 2>/dev/null || chmod -R 777 "$dir" + fi +} + +# Run a Docker container with standard setup +run_docker() { + local script="$1" + shift + local -a args=("$@") + + docker run --rm "${args[@]}" omarchy-aur-builder:latest "$script" +} diff --git a/lib/message-helpers.sh b/helpers/message-helpers.sh similarity index 54% rename from lib/message-helpers.sh rename to helpers/message-helpers.sh index 203f382..69679b0 100644 --- a/lib/message-helpers.sh +++ b/helpers/message-helpers.sh @@ -36,24 +36,3 @@ print_header() { echo -e "${BOLD}$1${NC}" echo -e "${BOLD}================================${NC}" } - -# Check Docker is available and running -check_docker() { - if ! command -v docker &>/dev/null; then - print_error "Docker is not installed" - exit 1 - fi - - if ! docker info &>/dev/null; then - print_error "Docker daemon is not running" - print_warning "Start Docker with: sudo systemctl start docker" - exit 1 - fi -} - -# Build the Docker image if needed -build_docker_image() { - local build_dir="$1" - print_info "Building Docker image..." - docker build -t omarchy-aur-builder:latest -f "$build_dir/Dockerfile" "$build_dir" -} From b853ddc51a5a4f20da2e9db4d85fc1605e3a8834 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 27 Oct 2025 00:38:25 -0400 Subject: [PATCH 15/16] Consolidate more things --- bin/build | 15 +++++---------- bin/clean-repo | 9 ++++----- bin/list-packages | 6 +++--- bin/promote-build | 12 +++++------- bin/release | 2 +- bin/remove-package | 5 +---- bin/repo | 2 +- bin/sign | 6 ++---- bin/sync-aur | 2 +- bin/update-repo | 14 ++++++-------- helpers/docker-helpers.sh | 1 - helpers/message-helpers.sh | 1 - helpers/paths.sh | 21 +++++++++++++++++++++ 13 files changed, 50 insertions(+), 46 deletions(-) create mode 100644 helpers/paths.sh diff --git a/bin/build b/bin/build index f4486c7..f1ad346 100755 --- a/bin/build +++ b/bin/build @@ -7,16 +7,10 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/helpers/message-helpers.sh" source "$BUILD_ROOT/helpers/docker-helpers.sh" - -ARCH=${ARCH:-x86_64} - -BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" -FINAL_OUTPUT_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" -SRC_DIR="$BUILD_ROOT/src" -BUILD_DIR="$BUILD_ROOT/build" +source "$BUILD_ROOT/helpers/paths.sh" # Create directories if they don't exist -mkdir -p "$BUILD_OUTPUT_DIR" "$FINAL_OUTPUT_DIR" "$SRC_DIR" +mkdir -p "$BUILD_OUTPUT_DIR" "$REPO_DIR" "$SRC_DIR" print_header "Omarchy AUR Package Builder" @@ -28,6 +22,7 @@ while [[ $# -gt 0 ]]; do case $1 in --arch) ARCH="$2" + update_arch_paths shift 2 ;; --package) @@ -67,7 +62,7 @@ done # Show target architecture after parsing args print_info "Target architecture: $ARCH" print_info "Build workspace: $BUILD_OUTPUT_DIR" -print_info "Final output: $FINAL_OUTPUT_DIR" +print_info "Final output: $REPO_DIR" # Clean build-output directory to start fresh print_info "Cleaning build workspace..." @@ -91,7 +86,7 @@ print_info "Running AUR package build..." # Ensure output directories are writable by container user make_dir_writable "$BUILD_OUTPUT_DIR" -make_dir_writable "$FINAL_OUTPUT_DIR" +make_dir_writable "$REPO_DIR" # Build Docker arguments DOCKER_ARGS=( diff --git a/bin/clean-repo b/bin/clean-repo index 5d512d9..2d5e93f 100755 --- a/bin/clean-repo +++ b/bin/clean-repo @@ -7,10 +7,9 @@ set -e # Source common functions BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/helpers/message-helpers.sh" +source "$BUILD_ROOT/helpers/paths.sh" # Repository configuration -ARCH=${ARCH:-x86_64} -ARCH_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" KEEP_VERSIONS=2 # Function to clean old packages @@ -20,7 +19,7 @@ clean_packages() { print_info "Cleaning old packages (keeping $keep versions)..." - cd "$ARCH_DIR" + cd "$REPO_DIR" # Group packages by name declare -A packages @@ -105,7 +104,7 @@ remove_all_packages() { fi fi - cd "$ARCH_DIR" + cd "$REPO_DIR" local count=$(ls -1 *.pkg.tar.* 2>/dev/null | wc -l) @@ -130,7 +129,7 @@ remove_all_packages() { show_disk_usage() { print_info "Repository Disk Usage:" - cd "$ARCH_DIR" + cd "$REPO_DIR" local total_size=$(du -sh . 2>/dev/null | cut -f1) local package_count=$(ls -1 *.pkg.tar.* 2>/dev/null | grep -v '\.sig$' | wc -l) diff --git a/bin/list-packages b/bin/list-packages index ba99783..d5fe61b 100755 --- a/bin/list-packages +++ b/bin/list-packages @@ -4,9 +4,9 @@ SCRIPT_DIR=$(realpath "${BASH_SOURCE[0]%/*}") BUILD_ROOT=$(realpath "$SCRIPT_DIR/..") -ARCH=${ARCH:-x86_64} -ARCH_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" -DB_FILE="$ARCH_DIR/omarchy.db.tar.zst" +source "$BUILD_ROOT/helpers/paths.sh" + +DB_FILE="$REPO_DIR/omarchy.db.tar.zst" if [[ ! -f "$DB_FILE" ]]; then echo "Repository database not found" diff --git a/bin/promote-build b/bin/promote-build index 94f3ba6..209589e 100755 --- a/bin/promote-build +++ b/bin/promote-build @@ -5,10 +5,7 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/helpers/message-helpers.sh" - -ARCH=${ARCH:-x86_64} -BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" -FINAL_OUTPUT_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" +source "$BUILD_ROOT/helpers/paths.sh" print_header "Promote Build to Production" @@ -18,6 +15,7 @@ while [[ $# -gt 0 ]]; do case $1 in --arch) ARCH="$2" + update_arch_paths shift 2 ;; --dry-run) @@ -43,7 +41,7 @@ while [[ $# -gt 0 ]]; do done print_info "Build output: $BUILD_OUTPUT_DIR" -print_info "Final output: $FINAL_OUTPUT_DIR" +print_info "Final output: $REPO_DIR" # Check if build output exists if [[ ! -d "$BUILD_OUTPUT_DIR" ]]; then @@ -72,7 +70,7 @@ if [[ "$DRY_RUN" == true ]]; then done else echo "" - mkdir -p "$FINAL_OUTPUT_DIR" + mkdir -p "$REPO_DIR" # Copy all package files (excluding build database) COPIED=0 @@ -81,7 +79,7 @@ else [[ "$pkg_file" == omarchy-build.db* ]] && continue if [[ -f "$pkg_file" ]]; then - cp -v "$pkg_file" "$FINAL_OUTPUT_DIR/" + cp -v "$pkg_file" "$REPO_DIR/" COPIED=$((COPIED + 1)) fi done diff --git a/bin/release b/bin/release index c7b3b42..41e0d2b 100755 --- a/bin/release +++ b/bin/release @@ -5,8 +5,8 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/helpers/message-helpers.sh" +source "$BUILD_ROOT/helpers/paths.sh" -ARCH=${ARCH:-x86_64} SYNC_REMOTE="" SKIP_PROD_CHECK=false diff --git a/bin/remove-package b/bin/remove-package index 12252cc..4af5906 100755 --- a/bin/remove-package +++ b/bin/remove-package @@ -4,10 +4,7 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/helpers/message-helpers.sh" source "$BUILD_ROOT/helpers/docker-helpers.sh" - -ARCH=${ARCH:-x86_64} -REPO_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" -BUILD_DIR="$BUILD_ROOT/build" +source "$BUILD_ROOT/helpers/paths.sh" print_header "Remove Package" diff --git a/bin/repo b/bin/repo index 764479f..405a452 100755 --- a/bin/repo +++ b/bin/repo @@ -10,9 +10,9 @@ BUILD_ROOT=$(realpath "$SCRIPT_DIR/..") # Source common functions source "$BUILD_ROOT/helpers/message-helpers.sh" +source "$BUILD_ROOT/helpers/paths.sh" # Setup logging with timestamps -LOG_DIR="$BUILD_ROOT/logs" mkdir -p "$LOG_DIR" # Rotate logs first - keep only the 10 most recent diff --git a/bin/sign b/bin/sign index 393ad1a..a4c4d2a 100755 --- a/bin/sign +++ b/bin/sign @@ -6,10 +6,7 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/helpers/message-helpers.sh" source "$BUILD_ROOT/helpers/docker-helpers.sh" - -ARCH=${ARCH:-x86_64} -BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" -BUILD_DIR="$BUILD_ROOT/build" +source "$BUILD_ROOT/helpers/paths.sh" print_header "Sign Packages" @@ -18,6 +15,7 @@ while [[ $# -gt 0 ]]; do case $1 in --arch) ARCH="$2" + update_arch_paths shift 2 ;; -h | --help) diff --git a/bin/sync-aur b/bin/sync-aur index a972376..4c03da8 100755 --- a/bin/sync-aur +++ b/bin/sync-aur @@ -2,8 +2,8 @@ BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/helpers/message-helpers.sh" +source "$BUILD_ROOT/helpers/paths.sh" -PKGBUILDS_DIR="$BUILD_ROOT/pkgbuilds" PACKAGES_FILE="$BUILD_ROOT/build/packages/omarchy-aur.packages" TEMP_DIR=$(mktemp -d) diff --git a/bin/update-repo b/bin/update-repo index a07427b..7725d92 100755 --- a/bin/update-repo +++ b/bin/update-repo @@ -8,10 +8,7 @@ set -e BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") source "$BUILD_ROOT/helpers/message-helpers.sh" source "$BUILD_ROOT/helpers/docker-helpers.sh" - -ARCH=${ARCH:-x86_64} -BUILD_DIR="$BUILD_ROOT/build" -ARCH_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" +source "$BUILD_ROOT/helpers/paths.sh" # Function to update repository database using Docker update_database() { @@ -21,14 +18,14 @@ update_database() { check_docker # Ensure output directory exists - if [[ ! -d "$ARCH_DIR" ]]; then - print_error "Output directory not found: $ARCH_DIR" + if [[ ! -d "$REPO_DIR" ]]; then + print_error "Output directory not found: $REPO_DIR" print_warning "Run bin/repo build first" exit 1 fi # Make output directory writable for container - make_dir_writable "$ARCH_DIR" + make_dir_writable "$REPO_DIR" # Build Docker image build_docker_image "$BUILD_DIR" @@ -50,6 +47,7 @@ main() { case $1 in --arch) ARCH="$2" + update_arch_paths shift 2 ;; -h | --help) @@ -68,7 +66,7 @@ main() { done print_info "Target architecture: $ARCH" - print_info "Output directory: $ARCH_DIR" + print_info "Output directory: $REPO_DIR" update_database diff --git a/helpers/docker-helpers.sh b/helpers/docker-helpers.sh index 2cb160a..2562d10 100644 --- a/helpers/docker-helpers.sh +++ b/helpers/docker-helpers.sh @@ -1,4 +1,3 @@ -#!/bin/bash # Docker helper functions for Omarchy package build system # Check Docker is available and running diff --git a/helpers/message-helpers.sh b/helpers/message-helpers.sh index 69679b0..0078c51 100644 --- a/helpers/message-helpers.sh +++ b/helpers/message-helpers.sh @@ -1,4 +1,3 @@ -#!/bin/bash # Common printing functions for Omarchy scripts # Colors diff --git a/helpers/paths.sh b/helpers/paths.sh new file mode 100644 index 0000000..db1d154 --- /dev/null +++ b/helpers/paths.sh @@ -0,0 +1,21 @@ +# Common path variables for Omarchy package build system +# This file should be sourced after setting BUILD_ROOT + +# Default architecture +ARCH=${ARCH:-x86_64} + +# Core directories (architecture-independent) +BUILD_DIR="$BUILD_ROOT/build" +SRC_DIR="$BUILD_ROOT/src" +LOG_DIR="$BUILD_ROOT/logs" +PKGBUILDS_DIR="$BUILD_ROOT/pkgbuilds" + +# Function to update architecture-specific paths +# Call this after changing ARCH variable +update_arch_paths() { + BUILD_OUTPUT_DIR="$BUILD_ROOT/build-output/$ARCH" # Unsigned packages + REPO_DIR="$BUILD_ROOT/pkgs.omarchy.org/$ARCH" # Repository (signed packages) +} + +# Initialize architecture-specific directories with default ARCH +update_arch_paths From 47686bd94eddb5f7b63fde1a5954790f0cad975c Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 27 Oct 2025 00:45:32 -0400 Subject: [PATCH 16/16] Add our key to the keyring --- build/Dockerfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build/Dockerfile b/build/Dockerfile index 498caf5..bd6af10 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -4,6 +4,11 @@ FROM archlinux:latest RUN pacman -Syu --noconfirm && \ pacman -S --noconfirm base-devel git sudo wget jq gnupg +# Import Omarchy signing key into pacman keyring +RUN pacman-key --init && \ + pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org && \ + pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571 + # Create build user (required for makepkg - cannot run as root) RUN useradd -m -G wheel builder && \ echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers