Merge pull request #5 from omacom-io/simplify-builds
Update overall architecture
This commit is contained in:
+2
-1
@@ -1,3 +1,4 @@
|
||||
x86_64/
|
||||
src/
|
||||
logs/
|
||||
build-output/
|
||||
pkgs.omarchy.org/
|
||||
|
||||
@@ -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 <name>` - Build only a specific package
|
||||
- `--arch <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 <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:**
|
||||
- `<directory>` - Local directory to sync (e.g., `pkgs.omarchy.org/x86_64`)
|
||||
|
||||
**Options:**
|
||||
- `--remote <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 <name>` - Build only a specific package
|
||||
- `--arch <arch>` - Target architecture (default: x86_64)
|
||||
- `--sync-remote <path>` - 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 <package>`** - 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
|
||||
@@ -5,43 +5,26 @@ set -e
|
||||
|
||||
# Source common functions
|
||||
BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..")
|
||||
source "$BUILD_ROOT/lib/message-helpers.sh"
|
||||
|
||||
ARCH=${ARCH:-x86_64}
|
||||
|
||||
ARCH_DIR="$BUILD_ROOT/output/$ARCH"
|
||||
SRC_DIR="$BUILD_ROOT/src"
|
||||
BUILD_DIR="$BUILD_ROOT/build"
|
||||
source "$BUILD_ROOT/helpers/message-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/docker-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/paths.sh"
|
||||
|
||||
# Create directories if they don't exist
|
||||
mkdir -p "$ARCH_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
|
||||
mkdir -p "$BUILD_OUTPUT_DIR" "$REPO_DIR" "$SRC_DIR"
|
||||
|
||||
print_header "Omarchy AUR Package Builder"
|
||||
|
||||
# Check Docker is available
|
||||
check_docker
|
||||
|
||||
# Parse command line arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--arch)
|
||||
ARCH="$2"
|
||||
update_arch_paths
|
||||
shift 2
|
||||
;;
|
||||
--skip-signing)
|
||||
SKIP_SIGNING=true
|
||||
shift
|
||||
;;
|
||||
--package)
|
||||
SINGLE_PACKAGE="$2"
|
||||
shift 2
|
||||
@@ -51,7 +34,6 @@ while [[ $# -gt 0 ]]; do
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --arch <arch> Target architecture (x86_64 or aarch64, default: x86_64)"
|
||||
echo " --skip-signing Build packages without GPG signing"
|
||||
echo " --package <name> Build only the specified package (with optional options)"
|
||||
echo " -h, --help Show this help message"
|
||||
echo ""
|
||||
@@ -63,7 +45,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\""
|
||||
@@ -80,7 +61,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: $REPO_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,60 +79,22 @@ 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
|
||||
|
||||
# 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..."
|
||||
|
||||
# Ensure output directory is 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"
|
||||
else
|
||||
sudo chown -R $(id -u):$(id -g) "$ARCH_DIR" 2>/dev/null || chmod -R 777 "$ARCH_DIR"
|
||||
fi
|
||||
# Ensure output directories are writable by container user
|
||||
make_dir_writable "$BUILD_OUTPUT_DIR"
|
||||
make_dir_writable "$REPO_DIR"
|
||||
|
||||
# Build Docker arguments
|
||||
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 +107,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
|
||||
|
||||
-293
@@ -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 <versions> Comma-separated Ruby versions (e.g., 3.4.5,3.3.0,edge)"
|
||||
echo " --rails <versions> Comma-separated Rails versions (e.g., 8.0.2.1,7.2.0,edge)"
|
||||
echo " --arch <archs> Comma-separated architectures (e.g., x86_64,aarch64)"
|
||||
echo " --last <n> 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
|
||||
+19
-21
@@ -6,10 +6,10 @@ 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/paths.sh"
|
||||
|
||||
# Repository configuration
|
||||
ARCH_DIR="$BUILD_ROOT/output/x86_64"
|
||||
KEEP_VERSIONS=2
|
||||
|
||||
# Function to clean old packages
|
||||
@@ -19,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
|
||||
@@ -55,7 +55,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 +64,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 +79,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
|
||||
}
|
||||
|
||||
@@ -104,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)
|
||||
|
||||
@@ -121,7 +121,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
|
||||
}
|
||||
|
||||
@@ -129,16 +129,17 @@ 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)
|
||||
|
||||
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 +217,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 +225,6 @@ main() {
|
||||
|
||||
show_disk_usage
|
||||
fi
|
||||
|
||||
echo ""
|
||||
print_success "Cleanup complete!"
|
||||
}
|
||||
|
||||
# Run main function
|
||||
|
||||
+3
-2
@@ -4,8 +4,9 @@
|
||||
SCRIPT_DIR=$(realpath "${BASH_SOURCE[0]%/*}")
|
||||
BUILD_ROOT=$(realpath "$SCRIPT_DIR/..")
|
||||
|
||||
ARCH_DIR="$BUILD_ROOT/output/x86_64"
|
||||
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"
|
||||
|
||||
Executable
+95
@@ -0,0 +1,95 @@
|
||||
#!/bin/bash
|
||||
# Promote packages from build-output to pkgs.omarchy.org
|
||||
|
||||
set -e
|
||||
|
||||
BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..")
|
||||
source "$BUILD_ROOT/helpers/message-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/paths.sh"
|
||||
|
||||
print_header "Promote Build to Production"
|
||||
|
||||
# Parse arguments
|
||||
DRY_RUN=false
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--arch)
|
||||
ARCH="$2"
|
||||
update_arch_paths
|
||||
shift 2
|
||||
;;
|
||||
--dry-run)
|
||||
DRY_RUN=true
|
||||
shift
|
||||
;;
|
||||
-h | --help)
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --arch <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: $REPO_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 "$REPO_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" "$REPO_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
|
||||
Executable
+114
@@ -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/helpers/message-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/paths.sh"
|
||||
|
||||
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 <arch> Target architecture (x86_64 or aarch64, default: x86_64)"
|
||||
echo " --package <name> Build only the specified package"
|
||||
echo " --sync-remote <path> 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!"
|
||||
+59
-16
@@ -1,35 +1,78 @@
|
||||
#!/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/helpers/message-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/docker-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/paths.sh"
|
||||
|
||||
ARCH_DIR="$BUILD_ROOT/x86_64"
|
||||
cd "$ARCH_DIR"
|
||||
print_header "Remove Package"
|
||||
|
||||
if [[ -z "$1" ]]; then
|
||||
print_error "Package name required"
|
||||
echo ""
|
||||
echo "Usage: $0 <package-name>"
|
||||
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"
|
||||
|
||||
if [[ -z "$FILES" ]]; then
|
||||
echo "Package '$1' not found"
|
||||
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
|
||||
|
||||
# Confirm with gum
|
||||
gum confirm "Remove package '$FILES'?"
|
||||
# Check Docker is available
|
||||
check_docker
|
||||
|
||||
# Remove from database
|
||||
repo-remove omarchy.db.tar.zst "$1"
|
||||
# Find package files to confirm before running Docker
|
||||
cd "$REPO_DIR"
|
||||
FILES=$(ls ${PACKAGE_NAME}-[0-9]*.pkg.tar.* 2>/dev/null || true)
|
||||
|
||||
# Remove files (only the exact package, not subpackages)
|
||||
if [[ -z "$FILES" ]]; then
|
||||
print_error "Package '$PACKAGE_NAME' not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Confirm removal
|
||||
echo ""
|
||||
echo "Package files to remove:"
|
||||
for file in $FILES; do
|
||||
rm -f "$file"
|
||||
echo " - $file"
|
||||
done
|
||||
echo ""
|
||||
read -p "Remove package '$PACKAGE_NAME'? (y/N) " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
print_info "Removal cancelled"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Package '$1' removed"
|
||||
# Build/update the Docker image
|
||||
build_docker_image "$BUILD_DIR"
|
||||
|
||||
print_info "Removing package..."
|
||||
|
||||
# Ensure directory is writable by container user
|
||||
make_dir_writable "$REPO_DIR"
|
||||
|
||||
# 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
|
||||
|
||||
@@ -9,32 +9,47 @@ 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"
|
||||
source "$BUILD_ROOT/helpers/paths.sh"
|
||||
|
||||
# Setup logging
|
||||
LOG_DIR="$BUILD_ROOT/logs"
|
||||
# Setup logging with timestamps
|
||||
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 <command> [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 <command> --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]}
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
#!/bin/bash
|
||||
# Sign all packages in build-output
|
||||
|
||||
set -e
|
||||
|
||||
BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..")
|
||||
source "$BUILD_ROOT/helpers/message-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/docker-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/paths.sh"
|
||||
|
||||
print_header "Sign Packages"
|
||||
|
||||
# Parse arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--arch)
|
||||
ARCH="$2"
|
||||
update_arch_paths
|
||||
shift 2
|
||||
;;
|
||||
-h | --help)
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --arch <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 "Target architecture: $ARCH"
|
||||
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
|
||||
|
||||
# Check Docker is available
|
||||
check_docker
|
||||
|
||||
# Check GPG credentials are in environment
|
||||
if [[ -z "$GPG_PRIVATE_KEY" ]]; then
|
||||
print_error "GPG_PRIVATE_KEY environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$GPG_PASSPHRASE" ]]; then
|
||||
print_error "GPG_PASSPHRASE environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build/update the Docker image (reuse same image as build)
|
||||
build_docker_image "$BUILD_DIR"
|
||||
|
||||
print_info "Running package signing..."
|
||||
|
||||
# Ensure output directory is writable by container user
|
||||
make_dir_writable "$BUILD_OUTPUT_DIR"
|
||||
|
||||
# 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
|
||||
|
||||
SIGN_RESULT=$?
|
||||
|
||||
# Summary
|
||||
echo ""
|
||||
if [[ $SIGN_RESULT -eq 0 ]]; then
|
||||
print_success "Package signing completed successfully!"
|
||||
else
|
||||
print_error "Package signing failed"
|
||||
exit $SIGN_RESULT
|
||||
fi
|
||||
Executable
+82
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
|
||||
BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..")
|
||||
source "$BUILD_ROOT/helpers/message-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/paths.sh"
|
||||
|
||||
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"
|
||||
+12
-10
@@ -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"
|
||||
@@ -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 <directory> [options]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --remote <remote> Specify rclone remote (default: $DEFAULT_REMOTE)"
|
||||
echo " --remote <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
|
||||
|
||||
+13
-30
@@ -6,52 +6,34 @@ set -e
|
||||
|
||||
# Source common functions
|
||||
BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..")
|
||||
source "$BUILD_ROOT/lib/message-helpers.sh"
|
||||
|
||||
ARCH=${ARCH:-x86_64}
|
||||
BUILD_DIR="$BUILD_ROOT/build"
|
||||
ARCH_DIR="$BUILD_ROOT/output/$ARCH"
|
||||
source "$BUILD_ROOT/helpers/message-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/docker-helpers.sh"
|
||||
source "$BUILD_ROOT/helpers/paths.sh"
|
||||
|
||||
# Function to update repository database using Docker
|
||||
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
|
||||
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
|
||||
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 "$REPO_DIR"
|
||||
|
||||
# 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 \
|
||||
-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
|
||||
}
|
||||
@@ -65,6 +47,7 @@ main() {
|
||||
case $1 in
|
||||
--arch)
|
||||
ARCH="$2"
|
||||
update_arch_paths
|
||||
shift 2
|
||||
;;
|
||||
-h | --help)
|
||||
@@ -83,7 +66,7 @@ main() {
|
||||
done
|
||||
|
||||
print_info "Target architecture: $ARCH"
|
||||
print_info "Output directory: $ARCH_DIR"
|
||||
print_info "Output directory: $REPO_DIR"
|
||||
|
||||
update_database
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
+294
-325
@@ -1,135 +1,112 @@
|
||||
#!/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
|
||||
|
||||
# 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 <<EOF
|
||||
|
||||
[options]
|
||||
CacheDir = /var/cache/pacman/pkg
|
||||
CacheDir = $BUILD_OUTPUT_DIR
|
||||
|
||||
[omarchy-build]
|
||||
SigLevel = Never
|
||||
Server = file://$BUILD_OUTPUT_DIR
|
||||
EOF
|
||||
echo " -> 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 <<EOF
|
||||
|
||||
[omarchy]
|
||||
SigLevel = Optional TrustAll
|
||||
Server = file://$OUTPUT_DIR
|
||||
Server = file://$FINAL_OUTPUT_DIR
|
||||
EOF
|
||||
echo " -> 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
|
||||
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"
|
||||
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
|
||||
# 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 [[ -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
|
||||
# Extract that specific file and get the version
|
||||
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
|
||||
}
|
||||
|
||||
# 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
|
||||
# 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)
|
||||
|
||||
# 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<rev>.<commit>-<pkgrel>)
|
||||
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
|
||||
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
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Skip building if not needed
|
||||
if [[ "$should_build" == false ]]; then
|
||||
return 0
|
||||
# Show version info (version check already done in first pass)
|
||||
local local_version=$(get_local_version "$pkg")
|
||||
if [[ -n "$local_version" ]]; then
|
||||
echo " Update available: $local_version -> $pkgbuild_version"
|
||||
else
|
||||
echo " New package (version: $pkgbuild_version)"
|
||||
fi
|
||||
|
||||
# Import package-specific PGP keys if they exist
|
||||
@@ -142,285 +119,277 @@ 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
|
||||
|
||||
# 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)
|
||||
# Copy to build workspace
|
||||
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
|
||||
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
|
||||
}
|
||||
|
||||
# Prepare and build a local PKGBUILD package
|
||||
build_local_package() {
|
||||
# Get package dependencies from PKGBUILD
|
||||
get_package_deps() {
|
||||
local pkg="$1"
|
||||
local opts="$2"
|
||||
local pkgbuild="/pkgbuilds/$pkg/PKGBUILD"
|
||||
|
||||
# Check if package exists locally
|
||||
if [[ ! -d "/pkgbuilds/$pkg" ]] || [[ ! -f "/pkgbuilds/$pkg/PKGBUILD" ]]; then
|
||||
return 1 # Not a local package
|
||||
if [[ ! -f "$pkgbuild" ]]; then
|
||||
return
|
||||
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
|
||||
# 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
|
||||
}
|
||||
|
||||
# Build a GitHub package
|
||||
build_github_package() {
|
||||
local github_repo="$1"
|
||||
local opts="$2"
|
||||
# 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=()
|
||||
|
||||
echo ""
|
||||
echo " -> Processing GitHub: $github_repo..."
|
||||
# Collect all packages
|
||||
for pkgdir in /pkgbuilds/*/; do
|
||||
[[ ! -d "$pkgdir" ]] && continue
|
||||
local pkg=$(basename "$pkgdir")
|
||||
[[ ! -f "$pkgdir/PKGBUILD" ]] && continue
|
||||
all_packages+=("$pkg")
|
||||
|
||||
# Extract owner and repo name
|
||||
local owner=$(echo "$github_repo" | cut -d'/' -f1)
|
||||
local repo=$(echo "$github_repo" | cut -d'/' -f2)
|
||||
# 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
|
||||
|
||||
if [[ -z "$owner" ]] || [[ -z "$repo" ]]; then
|
||||
echo " ❌ Invalid GitHub format. Use: owner/repo"
|
||||
FAILED_PACKAGES="$FAILED_PACKAGES $github_repo"
|
||||
return 1
|
||||
fi
|
||||
# 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-
|
||||
)
|
||||
|
||||
# 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
|
||||
# Output in build order
|
||||
printf '%s\n' "${result[@]}"
|
||||
}
|
||||
|
||||
# Build an AUR package
|
||||
build_aur_package() {
|
||||
# Check which packages need building (version check only)
|
||||
check_needs_build() {
|
||||
local pkg="$1"
|
||||
local opts="$2"
|
||||
local pkgbuild="/pkgbuilds/$pkg/PKGBUILD"
|
||||
|
||||
echo ""
|
||||
echo " -> Processing AUR: $pkg..."
|
||||
[[ ! -f "$pkgbuild" ]] && return 1
|
||||
|
||||
# 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')
|
||||
# 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
|
||||
|
||||
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)
|
||||
# Check if already built
|
||||
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"
|
||||
if [[ "$local_version" == "$pkgbuild_version" ]]; then
|
||||
return 1 # Already up to date
|
||||
else
|
||||
echo " New package (AUR: $aur_version)"
|
||||
return 0 # Needs building
|
||||
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")
|
||||
TOTAL_COUNT=0
|
||||
|
||||
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")
|
||||
[[ ! -f "$pkgdir/PKGBUILD" ]] && continue
|
||||
|
||||
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 "==> Processing omarchy-aur.packages"
|
||||
PACKAGE_INPUT=$(cat /build/packages/omarchy-aur.packages)
|
||||
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
|
||||
|
||||
# Read and process packages
|
||||
if [[ -n "$PACKAGE_INPUT" ]]; then
|
||||
TOTAL_COUNT=0
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "==> Build Summary"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
[[ "$line" =~ ^#.*$ ]] && continue
|
||||
[[ -z "$line" ]] && continue
|
||||
# Count results
|
||||
SUCCESS_COUNT=$(echo $SUCCESSFUL_PACKAGES | wc -w)
|
||||
SKIPPED_COUNT=$(echo $SKIPPED_PACKAGES | wc -w)
|
||||
FAILED_COUNT=$(echo $FAILED_PACKAGES | wc -w)
|
||||
|
||||
((TOTAL_COUNT++))
|
||||
|
||||
# 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
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "==> All packages processed successfully!"
|
||||
|
||||
@@ -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 </build/gpg-keys.txt
|
||||
echo " -> 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"
|
||||
|
||||
@@ -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/<packagename>/ 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
|
||||
|
||||
Executable
+45
@@ -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"
|
||||
Executable
+91
@@ -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
|
||||
@@ -0,0 +1,41 @@
|
||||
# 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"
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
#!/bin/bash
|
||||
# Common printing functions for Omarchy scripts
|
||||
|
||||
# Colors
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,3 @@
|
||||
include:
|
||||
- project: 'dev/core/1password-archlinux-aur-ci'
|
||||
file: '/ci.yml'
|
||||
Executable
+48
@@ -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
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
.gitlab-ci.yml @people/ops-team
|
||||
CODEOWNERS @people/ops-team
|
||||
@@ -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 <<EOF
|
||||
$(cat ./com.1password.1Password.policy.tpl)
|
||||
EOF" > ./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
|
||||
}
|
||||
@@ -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"
|
||||
@@ -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
|
||||
@@ -0,0 +1,10 @@
|
||||
# makepkg directories
|
||||
pkg/
|
||||
src/
|
||||
|
||||
# built packages
|
||||
*.tar.xz
|
||||
*.tar.zst
|
||||
|
||||
# source files
|
||||
*.zip
|
||||
@@ -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
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
# Maintainer: slurpee <aur@lylat.io>
|
||||
# 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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -0,0 +1,61 @@
|
||||
# Maintainer: Noel Jacob <noeljacob91 at gmail dot com>
|
||||
# Contributor: thdxr (original PKGBUILD)
|
||||
# Contributor: 37h4n (aarch64 support added by Ethan Reece <aur at ethanreece dot com>)
|
||||
# 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"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,3 @@
|
||||
[claude-code]
|
||||
source = "npm"
|
||||
npm = "@anthropic-ai/claude-code"
|
||||
@@ -0,0 +1,28 @@
|
||||
# Maintainer: Christopher Cooper <christopher@cg505.com>
|
||||
# Maintainer: Jérôme Poulin <jeromepoulin@gmail.com>
|
||||
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"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,46 @@
|
||||
# This file was generated by GoReleaser. DO NOT EDIT.
|
||||
# Maintainer: kujtimiihoxha <kujtim@charm.sh>
|
||||
# Maintainer: caarlos0 <carlos@charm.sh>
|
||||
|
||||
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/"
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,33 @@
|
||||
# Maintainer: Gunther Schulz <dev@guntherschulz.de>
|
||||
|
||||
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
|
||||
}
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
exec /usr/bin/rg "${@/--cursor-ignore/--ignore-file}"
|
||||
@@ -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
|
||||
@@ -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/
|
||||
@@ -0,0 +1,39 @@
|
||||
# Maintainer: Muflone http://www.muflone.com/contacts/english/
|
||||
# Contributor: Fredy García <frealgagu at gmail dot com>
|
||||
# Contributor: Joel Teichroeb <joel@teichroeb.net>
|
||||
# Contributor: Matthias Maennich < arch .at. maennich.net >
|
||||
# Contributor: bruce < b_a_g99 .at. hotmail.com >
|
||||
# Contributor: carstene1ns <arch carsten-teibes de>
|
||||
|
||||
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}"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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)"
|
||||
@@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 235.45 200"><defs><style>.cls-1{fill:#0061ff;}</style></defs><title>DropboxGlyph</title><polygon class="cls-1" points="58.86 0 0 37.5 58.86 75 117.73 37.5 58.86 0"/><polygon class="cls-1" points="176.59 0 117.73 37.5 176.59 75 235.45 37.5 176.59 0"/><polygon class="cls-1" points="0 112.5 58.86 150 117.73 112.5 58.86 75 0 112.5"/><polygon class="cls-1" points="176.59 75 117.73 112.5 176.59 150 235.45 112.5 176.59 75"/><polygon class="cls-1" points="58.86 162.5 117.73 200 176.59 162.5 117.73 125 58.86 162.5"/></svg>
|
||||
|
After Width: | Height: | Size: 605 B |
@@ -0,0 +1,67 @@
|
||||
# Maintainer: Massimiliano Torromeo <massimiliano.torromeo@gmail.com>
|
||||
# Contributor: Chih-Hsuan Yen <yan12125@gmail.com>
|
||||
# Contributor: Tom < tomgparchaur at gmail dot com >
|
||||
# Contributor: David Manouchehri <d@32t.ca>
|
||||
|
||||
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 <linux@dropbox.com>
|
||||
)
|
||||
|
||||
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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,28 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,28 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,28 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,4 @@
|
||||
/pkg
|
||||
/src
|
||||
*.zip
|
||||
*.tar.xz
|
||||
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
|
||||
|
||||
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}"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,34 @@
|
||||
# Maintainer: dec05eba <dec05eba@protonmail.com>
|
||||
|
||||
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"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
post_install() {
|
||||
setcap cap_sys_admin+ep usr/bin/gsr-kms-server
|
||||
}
|
||||
|
||||
post_upgrade() {
|
||||
post_install "$1"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,4 @@
|
||||
*
|
||||
!/PKGBUILD
|
||||
!/.SRCINFO
|
||||
!/.gitignore
|
||||
@@ -0,0 +1,63 @@
|
||||
# Maintainer: John Bernard <loqusion@gmail.com>
|
||||
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
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
limine-entry-tool*
|
||||
limine-mkinitcpio*
|
||||
pkg
|
||||
src
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,4 @@
|
||||
src
|
||||
pkg
|
||||
limine-snapper-sync*
|
||||
clean.sh
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user