Compare commits

..

No commits in common. "forgejo" and "master" have entirely different histories.

167 changed files with 462 additions and 2964 deletions

View file

@ -1,33 +0,0 @@
on:
push:
jobs:
build:
strategy:
matrix:
arch:
- aarch64
- armhf
- armv7
- ppc64le
- riscv64
- s390x
- x86_64
- x86
container: registry.git.ptrc.gay/ptrcnull/ptrcports-builder/${{ matrix.arch }}:latest
steps:
- uses: https://code.forgejo.org/actions/checkout@v4
- uses: https://code.forgejo.org/actions/cache@v4
with:
path: ~/repodest
key: ${{ matrix.arch }}-ptrcports
- name: Set up secrets
run: |
echo "${{ secrets.SSH_KEY }}" | base64 -d > /tmp/ssh_key
echo "${{ secrets.PACKAGER_PRIVKEY }}" | base64 -d > /tmp/packager_key
- name: Do the build
env:
PRIVATE_KEY: /tmp/ssh_key
PACKAGER_PRIVKEY: /tmp/packager_key
run: do-the-build ptrcports "$GITHUB_REF_NAME"

View file

@ -1,93 +0,0 @@
build-x86_64: &build
image: registry.git.ptrc.gay/ptrcnull/ptrcports-builder/x86_64:latest
tags: [x86_64]
cache:
key: repodest-x86_64
paths: [repodest/ptrcports/x86_64]
when: always
stage: build
script:
- CARCH=$(apk --print-arch)
- doas apk upgrade -Ua
- setup-ssh-key "$PRIVATE_KEY"
- setup-abuild-key "$PACKAGER_PRIVKEY" "alpine@ptrcnull.me-60610fa4.rsa"
- mkdir -p repodest/ptrcports/$CARCH
- rsync --archive --update --hard-links --delete --delete-after --delay-updates --itemize-changes --no-o --no-g
buildozer@repo.ptrc.gay:repodest/ptrcports/$CARCH/
repodest/ptrcports/$CARCH/
- buildrepo
--aports $PWD/..
--destdir $PWD/repodest
--purge
ptrcports
- |-
if [ "$CI_COMMIT_BRANCH" = "master" ]; then
rsync --archive --update --hard-links --delete --delete-after --delay-updates --itemize-changes --no-o --no-g \
repodest/ptrcports/$CARCH/ \
buildozer@repo.ptrc.gay:repodest/ptrcports/$CARCH/
else
echo "Current branch: $CI_COMMIT_BRANCH"
fi
build-aarch64:
<<: *build
tags: [aarch64]
cache:
key: repodest-aarch64
paths: [repodest/ptrcports/aarch64]
when: always
image: registry.git.ptrc.gay/ptrcnull/ptrcports-builder/arm64v8:latest
build-armhf:
<<: *build
tags: [armhf]
cache:
key: repodest-armhf
paths: [repodest/ptrcports/armhf]
when: always
image: registry.git.ptrc.gay/ptrcnull/ptrcports-builder/arm32v6:latest
build-armv7:
<<: *build
tags: [armv7]
cache:
key: repodest-armv7
paths: [repodest/ptrcports/armv7]
when: always
image: registry.git.ptrc.gay/ptrcnull/ptrcports-builder/arm32v7:latest
build-ppc64le:
<<: *build
tags: [ppc64le]
cache:
key: repodest-ppc64le
paths: [repodest/ptrcports/ppc64le]
when: always
image: registry.git.ptrc.gay/ptrcnull/ptrcports-builder/ppc64le:latest
build-riscv64:
<<: *build
tags: [riscv64]
cache:
key: repodest-riscv64
paths: [repodest/ptrcports/riscv64]
when: always
image: registry.git.ptrc.gay/ptrcnull/ptrcports-builder/riscv64:latest
build-s390x:
<<: *build
tags: [s390x]
cache:
key: repodest-s390x
paths: [repodest/ptrcports/s390x]
when: always
image: registry.git.ptrc.gay/ptrcnull/ptrcports-builder/s390x:latest
build-x86:
<<: *build
tags: [x86]
cache:
key: repodest-x86
paths: [repodest/ptrcports/x86]
when: always
image: registry.git.ptrc.gay/ptrcnull/ptrcports-builder/i386:latest

5
README
View file

@ -3,9 +3,8 @@ Hi!
This is an Alpine Linux repository of random packages I find useful, but
not quite fitting into the official aports repo.
All the stuff here is built from https://git.ptrc.gay/ptrcnull/ptrcports,
currently the main supported architectures are x86_64 and aarch64,
but most packages are being built for all Alpine edge architectures.
All the stuff here is built from https://git.ddd.rip/ptrcnull/ptrcports,
currently the main supported architectures are x86_64 and aarch64.
Adding into your system (as root):
echo "@ptrc https://repo.ptrc.gay/ptrcports" >> /etc/apk/repositories

View file

@ -1,7 +1,7 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=apatch
pkgver=1.5.1
pkgver=1.4.0
pkgrel=0
pkgdesc="make aports patches easier"
url="https://git.ddd.rip/ptrcnull/apatch"
@ -17,5 +17,5 @@ package() {
}
sha512sums="
5b90007c61b47d9a515a325920b816eca12fb5166467c3ed1ddfe1064690e349ad90a8d3d1941ff690560a98db1dcd59a39b7caae12611674f1e2e4372dd61be apatch-v1.5.1.tar.gz
70425c1422880fdf45adb4a5a8b7f37b60bcbced9fc2e96c4962d3e94e4f4e5b9ebf8c1aa0f1328822de114b4b66f67ecfba5cdeb6f022995ed0a38204a233b1 apatch-v1.4.0.tar.gz
"

View file

@ -2,7 +2,7 @@
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=fdcreate
pkgver=1.0.0
pkgrel=1
pkgrel=0
pkgdesc="chainable utility for creating memfds"
url="https://git.ddd.rip/ptrcnull/fdcreate"
arch="all"

View file

@ -5,7 +5,7 @@ pkgrel=0
_gitrev=c37dc82bbaf18efbe564f0e705bbef192f358d6d
pkgdesc="Fixed-width bitmap font forked from Dina and Proggy Tiny"
url="https://github.com/bjin/ctrld-font"
arch="aarch64 x86_64"
arch="noarch"
license="none"
depends="fontconfig mkfontscale"
source="$pkgname-$pkgver.tar.gz::https://github.com/bjin/ctrld-font/archive/$_gitrev.tar.gz"

View file

@ -5,7 +5,7 @@ pkgver=1
pkgrel=0
pkgdesc="SF Pro font by Apple"
url="https://developer.apple.com/fonts/"
arch="aarch64 x86_64"
arch="noarch"
license="proprietary"
makedepends="cpio p7zip"
source="https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"

View file

@ -5,7 +5,7 @@ pkgver=1.1.2
pkgrel=0
pkgdesc="paste"
url="https://git.ddd.rip/ptrcnull/gaypaste"
arch="aarch64 x86_64"
arch="all"
license="custom"
makedepends="go"
subpackages="$pkgname-openrc"

View file

@ -1,10 +1,10 @@
# Maintainer: psykose <alice@ayaya.dev>
pkgname=htop-full
pkgver=3.2.2
pkgver=3.2.1
pkgrel=0
pkgdesc="Interactive process viewer"
url="https://htop.dev/"
arch="aarch64 x86_64"
arch="all"
license="GPL-2.0-or-later"
makedepends="
autoconf
@ -44,5 +44,5 @@ package() {
}
sha512sums="
dd82d5b2f70694e76b3740ef0f6f6d3446fe83b748c2cfe61c783985d62cb6e1d00fcb4b1fe7dc8f1d8c6bc7b29474e1e88eaa01f154198d702b100bcbc135bb htop-full-3.2.2.tar.gz
d7b76e28ee870ac572ba1d9606dec6f9475346a00e599ca15838017c97683f1fc1be40417b9c1e76128cacc8a60ff9ba88c6b237be1835d309f98329b25644fc htop-full-3.2.1.tar.gz
"

View file

@ -5,7 +5,7 @@ pkgver=2
pkgrel=0
pkgdesc="QuickJS-based jq-like data processing tool"
url="https://git.ddd.rip/ptrcnull/ptrcports"
arch="aarch64 x86_64"
arch="all"
license="BSD-2-Clause"
makedepends="quickjs-dev"
source="jsq.js"

View file

@ -1,22 +1,21 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=kouhai
pkgver=0_alpha15
_commit=733ef8b1c67226096303dcfdadf7be3903d37c3f
pkgver=0_alpha9
_commit=5ae1015ff395a9e0474193c65b18b20da8fa95eb
pkgrel=0
pkgdesc="Your everyday IRC student"
url="https://git.sr.ht/~taiite/senpai"
arch="aarch64 x86_64"
arch="all"
license="ISC"
makedepends="go scdoc"
subpackages="$pkgname-doc"
source="$pkgname-$pkgver.tar.gz::https://github.com/ptrcnull/kouhai/archive/$_commit.tar.gz"
builddir="$srcdir/kouhai-$_commit"
options="net" # go dependencies
prepare() {
default_prepare
sed -i "s/senpai dev build/kouhai version $pkgver/" window.go
sed -i "s/production/$pkgver/" window.go
}
build() {
@ -32,5 +31,5 @@ package() {
}
sha512sums="
d094fdf607e7edd0156d69e840e60bda352ed305783d1759507f74fef06e99fdc9ae1e0ac5e1327491eb36981db5838476c59e3c3f3b9d3e31191a32d739d33f kouhai-0_alpha15.tar.gz
7eb702a805668db303b9ce7da48cd8c22a6658a339faadfb00e29b99a2ddf54c77ab6231e6b3328085dbdbe9fff44e217ed8e6ea716c25542466192df115799e kouhai-0_alpha9.tar.gz
"

41
libdrm-static/APKBUILD Normal file
View file

@ -0,0 +1,41 @@
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=libdrm-static
pkgver=2.4.109
pkgrel=0
pkgdesc="Userspace interface to kernel DRM services"
url="https://dri.freedesktop.org/"
arch="x86_64"
# Requires a computer with gfx, no X running, build user in 'video' group..
options="!check"
license="MIT"
depends="linux-headers"
makedepends="meson libpthread-stubs eudev-dev libpciaccess-dev xmlto"
checkdepends="cunit-dev bash"
source="https://gitlab.freedesktop.org/mesa/drm/-/archive/libdrm-$pkgver/drm-libdrm-$pkgver.tar.gz"
builddir="$srcdir/drm-libdrm-$pkgver"
build() {
abuild-meson \
-Dfreedreno=true \
-Dtegra=true \
-Domap=true \
-Dexynos=true \
-Dvc4=true \
-Detnaviv=true \
-Dudev=true \
-Ddefault_library=static \
. output
meson compile ${JOBS:+-j ${JOBS}} -C output
}
check() {
meson test -v -C output
}
package() {
install -Dm644 "$builddir"/output/libdrm.a "$pkgdir"/usr/lib/libdrm.a
}
sha512sums="
77afc048f449de2c3d8588b7ef9136f69fc11b9130a7364872ad30807407aa180ded27d37961e94a738f8b5db9a9b19266c8f00d9a39b3f6b33ecad2ea44bc7b drm-libdrm-2.4.109.tar.gz
"

View file

@ -0,0 +1,18 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=limine-upgrade-hook
pkgver=1
pkgrel=0
pkgdesc="Copies new Limine EFI file to /boot/EFI/BOOT/BOOTX64.EFI"
url="https://git.ddd.rip/ptrcnull/ptrcports"
arch="x86_64"
license="BSD-2-Clause"
depends="limine-64"
triggers="limine-upgrade-hook.trigger=/usr/share/limine"
builddir="$srcdir"
options="!check"
package() {
mkdir -p "$pkgdir"
}

View file

@ -0,0 +1,4 @@
#!/bin/sh
mkdir -p /boot/EFI/BOOT
cp /usr/share/limine/BOOTX64.EFI /boot/EFI/BOOT

View file

@ -1,8 +1,8 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=linux-smol
pkgver=5.15.90
pkgrel=1
pkgver=5.15.44
pkgrel=0
pkgdesc="linux kernel but smol"
url="https://www.kernel.org"
arch="x86_64"
@ -29,6 +29,6 @@ package() {
}
sha512sums="
ef0e9e249ace8b9c006377a5169558f68dec4cdf455394809b1c9095081e3b00da53ee9cff13810a93533531736bcbdf335f0118021b6a8e92eae521de5097b7 linux-5.15.90.tar.xz
9768b527d08a82c782591199da9a3034de425c20134627f89a52d86647c89357edf5132b1a2b105387bad3a6b6a2b6eecfa05458c4dff944190afaea6afaa63e config
79a477dac536355b2a6c6de14ede675311d6ec179917c3f2acdadea16c81e706b1f9686fa3868a4a36a57441c2d25113632534ad8359a3544207e7068d0e177b linux-5.15.44.tar.xz
6c594e97e127ac00e385fb6bf139f7bbeccd57f17ab6e30aeb927d46aa4e6b3ca2284234226f540ae52fa8d8936d8f675ad667d4296ccf38f72a6ecf9966f436 config
"

View file

@ -1,21 +1,20 @@
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86 5.15.90 Kernel Configuration
# Linux/x86 5.15.30 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="gcc (Alpine 12.2.1_git20220924-r8) 12.2.1 20220924"
CONFIG_CC_VERSION_TEXT="gcc (Alpine 11.2.1_git20220219) 11.2.1 20220219"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=120201
CONFIG_GCC_VERSION=110201
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=24000
CONFIG_AS_VERSION=23800
CONFIG_LD_IS_BFD=y
CONFIG_LD_VERSION=24000
CONFIG_LD_VERSION=23800
CONFIG_LLD_VERSION=0
CONFIG_CC_CAN_LINK=y
CONFIG_CC_CAN_LINK_STATIC=y
CONFIG_CC_HAS_ASM_GOTO=y
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_IRQ_WORK=y
@ -86,7 +85,6 @@ CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
#
# Timers subsystem
@ -215,7 +213,7 @@ CONFIG_MULTIUSER=y
CONFIG_SGETMASK_SYSCALL=y
# CONFIG_SYSFS_SYSCALL is not set
CONFIG_FHANDLE=y
CONFIG_POSIX_TIMERS=y
# CONFIG_POSIX_TIMERS is not set
CONFIG_PRINTK=y
# CONFIG_BUG is not set
CONFIG_ELF_CORE=y
@ -307,6 +305,7 @@ CONFIG_X86_FEATURE_NAMES=y
CONFIG_X86_X2APIC=y
CONFIG_X86_MPPARSE=y
# CONFIG_GOLDFISH is not set
CONFIG_RETPOLINE=y
# CONFIG_X86_CPU_RESCTRL is not set
# CONFIG_X86_EXTENDED_PLATFORM is not set
CONFIG_SCHED_OMIT_FRAME_POINTER=y
@ -426,16 +425,6 @@ CONFIG_MODIFY_LDT_SYSCALL=y
CONFIG_HAVE_LIVEPATCH=y
# end of Processor type and features
CONFIG_CC_HAS_SLS=y
CONFIG_CC_HAS_RETURN_THUNK=y
CONFIG_SPECULATION_MITIGATIONS=y
# CONFIG_PAGE_TABLE_ISOLATION is not set
CONFIG_RETPOLINE=y
CONFIG_RETHUNK=y
CONFIG_CPU_UNRET_ENTRY=y
CONFIG_CPU_IBPB_ENTRY=y
CONFIG_CPU_IBRS_ENTRY=y
# CONFIG_SLS is not set
CONFIG_ARCH_HAS_ADD_PAGES=y
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
CONFIG_USE_PERCPU_NUMA_NODE_ID=y
@ -525,7 +514,6 @@ CONFIG_HAVE_KPROBES_ON_FTRACE=y
CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
CONFIG_HAVE_NMI=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
@ -816,7 +804,6 @@ CONFIG_NET_UDP_TUNNEL=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
CONFIG_INET_TABLE_PERTURB_ORDER=16
# CONFIG_INET_DIAG is not set
CONFIG_TCP_CONG_ADVANCED=y
# CONFIG_TCP_CONG_BIC is not set
@ -1577,7 +1564,6 @@ CONFIG_PPS=y
#
# PTP clock support
#
# CONFIG_PTP_1588_CLOCK is not set
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
#
@ -2024,6 +2010,7 @@ CONFIG_IO_WQ=y
# CONFIG_SECURITY_DMESG_RESTRICT is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
# CONFIG_PAGE_TABLE_ISOLATION is not set
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
# CONFIG_HARDENED_USERCOPY is not set
# CONFIG_FORTIFY_SOURCE is not set
@ -2038,12 +2025,7 @@ CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,appar
#
# Memory initialization
#
CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
CONFIG_INIT_STACK_NONE=y
# CONFIG_INIT_STACK_ALL_PATTERN is not set
# CONFIG_INIT_STACK_ALL_ZERO is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
@ -2143,6 +2125,7 @@ CONFIG_CRYPTO_CRC32C=y
# CONFIG_CRYPTO_CRC32_PCLMUL is not set
# CONFIG_CRYPTO_XXHASH is not set
# CONFIG_CRYPTO_BLAKE2B is not set
# CONFIG_CRYPTO_BLAKE2S is not set
CONFIG_CRYPTO_BLAKE2S_X86=y
CONFIG_CRYPTO_CRCT10DIF=y
CONFIG_CRYPTO_CRCT10DIF_PCLMUL=y
@ -2222,6 +2205,26 @@ CONFIG_CRYPTO_JITTERENTROPY=y
# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
# CONFIG_CRYPTO_USER_API_RNG is not set
# CONFIG_CRYPTO_USER_API_AEAD is not set
#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_BLAKE2S=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519=y
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y
CONFIG_CRYPTO_LIB_CURVE25519=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=y
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y
CONFIG_CRYPTO_LIB_POLY1305=y
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y
CONFIG_CRYPTO_LIB_SHA256=y
# CONFIG_CRYPTO_HW is not set
#
@ -2247,28 +2250,6 @@ CONFIG_GENERIC_IOMAP=y
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_ARCH_USE_SYM_ANNOTATIONS=y
#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519=y
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y
CONFIG_CRYPTO_LIB_CURVE25519=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=y
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y
CONFIG_CRYPTO_LIB_POLY1305=y
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y
CONFIG_CRYPTO_LIB_SHA256=y
# end of Crypto library routines
CONFIG_LIB_MEMNEQ=y
CONFIG_CRC_CCITT=y
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
@ -2346,8 +2327,6 @@ CONFIG_DYNAMIC_DEBUG_CORE=y
CONFIG_SYMBOLIC_ERRNAME=y
# end of printk and dmesg options
CONFIG_AS_HAS_NON_CONST_LEB128=y
#
# Compile-time checks and compiler options
#
@ -2524,6 +2503,7 @@ CONFIG_STRICT_DEVMEM=y
#
# x86 Debugging
#
CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
CONFIG_X86_VERBOSE_BOOTUP=y
CONFIG_EARLY_PRINTK=y
# CONFIG_DEBUG_TLBFLUSH is not set

View file

@ -5,7 +5,7 @@ pkgver=1.1.1
pkgrel=0
pkgdesc="docker but simpler"
url="https://git.ddd.rip/ptrcnull/miniroot"
arch="aarch64 x86_64"
arch="all"
license="MIT"
makedepends="go"
source="miniroot-v$pkgver.tar.gz::https://git.ddd.rip/ptrcnull/miniroot/archive/v$pkgver.tar.gz"

View file

@ -1,10 +1,10 @@
# Maintainer: psykose <alice@ayaya.dev>
pkgname=nginx-current
pkgver=1.27.0
pkgrel=1
pkgver=1.23.3
pkgrel=0
pkgdesc="HTTP and reverse proxy server (current version)"
url="https://www.nginx.org/"
arch="aarch64 x86_64"
arch="all"
license="BSD-2-Clause"
depends="!nginx"
makedepends="
@ -15,7 +15,6 @@ makedepends="
libxml2-dev
libxslt-dev
lld
llvm
linux-headers
openssl-dev>3
pcre2-dev
@ -40,18 +39,14 @@ source="https://nginx.org/download/nginx-$pkgver.tar.gz
builddir="$srcdir/nginx-$pkgver"
options="!check" # no time!
export AR=llvm-ar
export NM=llvm-nm
export RANLIB=llvm-ranlib
export CC=clang
export CFLAGS="$CFLAGS -flto -O3"
export CFLAGS="$CFLAGS -flto=thin"
# passed below
export LDFLAGS="$LDFLAGS -fuse-ld=lld -Wl,--icf=safe,--gc-sections,-z,pack-relative-relocs"
export LDFLAGS="$LDFLAGS -flto=thin -fuse-ld=lld -Wl,--icf=safe,--gc-sections"
_modules_dir="usr/lib/nginx/modules"
# Built-in dynamic modules
# shellcheck disable=2043
for _mod in \
stream
do
@ -108,7 +103,6 @@ build() {
\
--with-http_ssl_module \
--with-http_v2_module \
--with-http_v3_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
@ -185,7 +179,7 @@ vim() {
}
_module() {
local name="${subpkgname#"$pkgname"-mod-}"; name="${name//-/_}"
local name="${subpkgname#$pkgname-mod-}"; name="${name//-/_}"
local ver=$(getvar _${name}_ver)
pkgdesc="Nginx module ${name//_/-}"
@ -234,7 +228,7 @@ getvar() {
}
sha512sums="
251bfe65c717a8027ef05caae2ab2ea73b9b544577f539a1d419fe6adf0bcc846b73b58f54ea3f102df79aaf340e4fa56793ddadea3cd61bcbbe2364ef94bacb nginx-1.27.0.tar.gz
da5f473ac213f8947f40f0a69820bf981157432fe9d29cf71fe30225dadd05f5814309034f0411ea15fb70bece8ceefc0cb0b2588096c1a9496c2a36fa425d9f nginx-1.23.3.tar.gz
9c5ee975dffa15b76688ef798371635f38f1e6773b143c738add26297878dddfc20ebf276e3871a60f28b197e8a70496ca17d4816c2136171978c157bb8e591f nginx.conf
0907f69dc2d3dc1bad3a04fb6673f741f1a8be964e22b306ef9ae2f8e736e1f5733a8884bfe54f3553fff5132a0e5336716250f54272c3fec2177d6ba16986f3 default.conf
f3321a45736697009817db335ad36d3f1d05f60d98ac90a943220cdd4c00c52632f018db6a6076d5431a483525aacc5725b87b765b590e2f63b3ef98c5b16bd8 stream.conf

45
nitter/APKBUILD Normal file
View file

@ -0,0 +1,45 @@
# Maintainer: psykose <alice@ayaya.dev>
pkgname=nitter
pkgver=0_git20221127
_gitrev=d923c20aa6a87224343562f15b00e72e7780aa3d
pkgrel=1
pkgdesc="Alternative Twitter front-end "
url="https://github.com/zedeus/nitter/"
arch="all"
license="AGPL-3.0-only"
depends="libssl1.1 libcrypto1.1 pcre"
makedepends="libsass-dev nimble pcre-dev"
pkgusers="nitter"
pkggroups="nitter"
install="$pkgname.pre-install"
subpackages="$pkgname-openrc"
source="https://github.com/zedeus/nitter/archive/$_gitrev/nitter-$_gitrev.tar.gz
downgrade-zippy.patch
nitter.initd
"
builddir="$srcdir/$pkgname-$_gitrev"
options="!check"
build() {
nimble -y build -d:release
nimble -y scss
nimble -y md
}
package() {
depends="$depends redis"
install -Dm755 nitter -t "$pkgdir"/usr/bin
install -Dm755 "$srcdir"/nitter.initd "$pkgdir"/etc/init.d/nitter
install -Dm640 nitter.example.conf -t"$pkgdir"/var/lib/nitter
cp -a public "$pkgdir"/var/lib/nitter
chown -R nitter:nitter "$pkgdir"/var/lib/nitter
}
sha512sums="
74aca0d7a8923b0ebc29fb938e70a094d9a707477e89c320d919bb75869e1532af3ef19144d566d2568f73331a8b380de144c6148a6ddc1016a982e216d7e3f3 nitter-d923c20aa6a87224343562f15b00e72e7780aa3d.tar.gz
975ab7e9e89c375729b5623de938583385335b1b8fb0ce09bf470ed66e920cb03cf27505d495d3aeb6d2f1dafdb88fe0a6978255883d2167e0a073e896f3e7e3 downgrade-zippy.patch
7382562f40e50d13ba16adf17eb86b58b365474934bb33cbddf9117d4cc7ff12da9186edb01fd3c13b4efd91e35e57f368f056b376d03b4d5c6a191971a07ace nitter.initd
"

View file

@ -0,0 +1,14 @@
the new versions sigill on ud2
diff --git a/nitter.nimble b/nitter.nimble
index a4d2e87..30c3893 100644
--- a/nitter.nimble
+++ b/nitter.nimble
@@ -20,7 +20,7 @@ requires "packedjson#9e6fbb6"
requires "supersnappy#6c94198"
requires "redpool#8b7c1db"
requires "https://github.com/zedeus/redis#d0a0e6f"
-requires "zippy#61922b9"
+requires "zippy#0.9.11"
requires "flatty#9f885d7"
requires "jsony#d0e69bd"

22
nitter/nitter.initd Normal file
View file

@ -0,0 +1,22 @@
#!/sbin/openrc-run
depend() {
use net
after firewall
need redis
}
supervisor=supervise-daemon
name=nitter
description="nitter"
command=/usr/bin/nitter
directory=/var/lib/nitter
command_background=true
output_log=/var/log/nitter.log
error_log=/var/log/nitter.log
command_user=nitter:nitter
start_pre() {
checkpath -f -o $command_user /var/log/nitter.log
}

View file

@ -0,0 +1,9 @@
#!/bin/sh
user=nitter
group=nitter
addgroup -S $group 2>/dev/null
adduser -S -D -h /var/lib/$user -s /sbin/nologin -G $group -g $user $user 2>/dev/null
exit 0

47
node-print/APKBUILD Normal file
View file

@ -0,0 +1,47 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=node-print
pkgver=9
pkgrel=0
pkgdesc="another terrible javascript engine wrapper"
url="https://git.ddd.rip/ptrcnull/ptrcports"
arch="noarch"
license="BSD-2-Clause"
depends="nodejs-current"
source="np index.js"
builddir="$srcdir"
_assert() {
[ "$1" == "$2" ] || { echo "'$1' != '$2'"; return 1; }
}
check() {
local out
out="$(echo test | node -r . -p "stdin().substring(2).replace('t', 'rc').replace('s', 'pt')")"
_assert "$out" "ptrc"
out="$(echo '{"test":"property"}' | node -r . -p "stdin().test")"
_assert "$out" "property"
out="$(echo '["item"]' | node -r . -p "stdin()[0]")"
_assert "$out" "item"
out="$(echo crtp | node -r . -p "stdin().lines()[0].reverse()")"
_assert "$out" "ptrc"
out="$(node -r . -p "exec('echo', ['1']).stdout.toString()")"
_assert "$out" "1"
out="$(node -r . -p "exec('echo', ['[]']).stdout.length")"
_assert "$out" "0"
}
package() {
install -Dm755 np "$pkgdir"/usr/bin/np
install -Dm644 index.js "$pkgdir"/usr/lib/node/ptrc/index.js
}
sha512sums="
b3dfdeb49637be33d2e2718c5abcf35a87dd55023918c99341273c3b38bd6685189d1f786451a742c47c5f3bc3b58555decb58e2a3a018c9b9ee92043f8fac03 np
78e8f576fe7d13394c08fc7746817cfaf61ff76fd779f09fb0ace9ac72a5fd7202479624b50f1b4b03375aae86685a8da9d7e7c034dc69ee4b5fb336ee37fdb1 index.js
"

View file

@ -1,7 +1,5 @@
const fs = require('fs')
const child_process = require('child_process')
global.stdin = () => {
const fs = require('fs')
const out = fs.readFileSync(0).toString()
return out.tryParseJSON()
}
@ -10,8 +8,6 @@ Object.prototype.map = function(cb) {
return cb(this)
}
Object.prototype.apply = Object.prototype.map
String.prototype.lines = function() {
let res = this.split("\n")
return res.at(-1) === '' ? res.slice(0, -1) : res
@ -26,11 +22,6 @@ String.prototype.includesAny = function(strings) {
return strings.some(x => this.includes(x))
}
String.prototype.replaceAt = function(idx, str) {
if (idx > (this.length - 1) || idx < 0) throw new RangeError('idx must be in bounds of the string')
return this.substring(0, idx) + str + this.substring(idx + str.length)
}
String.prototype.tryParseJSON = function() {
const str = this.trim()
if (
@ -57,47 +48,29 @@ Buffer.prototype.tryParseJSON = function() {
}
global.exec = (command, args, options) => {
const child_process = require('child_process')
const res = child_process.spawnSync(command, args, options)
res.stdout = res.stdout?.tryParseJSON()
res.stderr = res.stderr?.tryParseJSON()
res.orFail = function() {
if (res.status !== 0) {
const cmd = [
command,
...((args && Array.isArray(args)) ? args : [])
].join(' ')
throw new Error(`command '${cmd}' exited with code ${res.status}`)
}
}
return res
}
global.execnc = (command, args, options) => {
if (!options) options = {}
if (!options.stdio) options.stdio = 'inherit'
return exec(command, args, options)
}
/* wow it's almost like it's my own package and i can include whatever garbage i want :) */
/* not writing a test for that tho */
global.apkindex = input => {
if (!input) input = stdin()
return input
.split("\n\n")
.filter(str => str.length)
.map(x => Object.fromEntries(x.lines().map(e => [e.at(0), e.slice(2)])))
.map(pkg => ({
...pkg,
S: Number(pkg.S),
I: Number(pkg.I),
t: new Date(Number(pkg.t) * 1000),
i: pkg.i?.split(' '),
D: pkg.D?.split(' '),
p: pkg.p?.split(' ')
}))
.map(Object.prune)
}
global.apkindex = () => stdin()
.split("\n\n")
.filter(str => str.length)
.map(x => Object.fromEntries(x.lines().map(e => [e.at(0), e.slice(2)])))
.map(pkg => ({
...pkg,
S: Number(pkg.S),
I: Number(pkg.I),
t: new Date(Number(pkg.t) * 1000),
i: pkg.i?.split(' '),
D: pkg.D?.split(' '),
p: pkg.p?.split(' ')
}))
.map(Object.prune)
Array.prototype.sum = function(def = 0) {
return this.reduce((a, b) => a + b, def)
@ -107,16 +80,8 @@ Array.prototype.product = function(def = 1) {
return this.reduce((a, b) => a * b, def)
}
Array.prototype.min = function() {
return this.reduce((a, b) => Math.min(a, b))
}
Array.prototype.max = function() {
return this.reduce((a, b) => Math.max(a, b))
}
Array.prototype.sortNum = function(getter = (x => x)) {
return this.sort((a, b) => getter(a) - getter(b))
Array.prototype.sortNum = function() {
return this.sort((a, b) => a - b)
}
Array.prototype.partition = function(compareFn) {
@ -143,22 +108,6 @@ Array.prototype.transpose = function() {
return new Array(this[0].length).fill().map((_, i) => this.map(x => x[i]))
}
Array.prototype.shuffle = function() {
// borrowed from https://stackoverflow.com/a/12646864
for (let i = this.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[this[i], this[j]] = [this[j], this[i]];
}
}
Array.prototype.uniq = function() {
return new Array(...(new Set(this)))
}
Array.prototype.lines = function() {
return this.join('\n')
}
Set.prototype.union = function(other) {
if (!other || !(other instanceof Set)) throw new TypeError('other must be a Set')
return new Set([...this, ...other])
@ -169,11 +118,6 @@ Set.prototype.intersection = function(other) {
return new Set([...this].filter(el => other.has(el)))
}
Set.prototype.difference = function(other) {
if (!other || !(other instanceof Set)) throw new TypeError('other must be a Set')
return new Set([...this].filter(el => !other.has(el)))
}
Set.prototype.at = function(index) {
return [...this].at(index)
}

View file

@ -1,53 +0,0 @@
# Maintainer: psykose <alice@ayaya.dev>
pkgname=abr
pkgver=17
pkgrel=0
pkgdesc="abr~!"
url="https://git.ddd.rip/ptrcnull/aports"
arch="noarch"
license="ISC"
# chrt, ionice
depends="
abuild
execline
jq
util-linux-misc
"
checkdepends="
shellcheck
shfmt
"
source="
APKBUILD_SHIM
abr
apkbuild-anitya
apkbuild-shellcheck
"
builddir="$srcdir"
options="!check" # manual
check() {
shellcheck -s sh .
shfmt \
--diff \
--simplify \
--posix \
--indent 3 \
--space-redirects \
--binary-next-line \
.
}
package() {
install -Dm755 abr apkbuild-anitya apkbuild-shellcheck \
-t "$pkgdir"/usr/bin/
install -Dm644 APKBUILD_SHIM \
-t "$pkgdir"/usr/share/abuild/
}
sha512sums="
c011f82c90acf0de2b16db3b264cda52b182de9640b9edae985fd646c235969f3f5d3f003ec0e5df1035959e567bb55f85018308c989db95e21d93d3cd93742b APKBUILD_SHIM
171e161bb7768fa29ddc45598480eafda4077b93186b17b449fae511e5222e8f04f4be0abb858d626ad70e2d90e3c097a424e1d18571c50c23ccb10580334628 abr
71d8cb1e5e57ff739915fa4de1f5699afa60ab36e2e5219c4c366af5ceab24dc6ee55e738d29ca2b63dd5e387de7661594fc86bf2183d787932e75b4c03c6a9f apkbuild-anitya
482835319d06aab0fc3548e3c217f6e117c3bf812034252539624b6de8d179f9662c3db91df1228fd5d85bea76b679d1e4c4e122223d87d4ea817ec74dac8dcf apkbuild-shellcheck
"

View file

@ -1,113 +0,0 @@
#!/bin/sh
set -e
arch=
builddir=
checkdepends=
depends=
depends_dev=
depends_doc=
depends_libs=
depends_openrc=
depends_static=
install=
install_if=
langdir=
ldpath=
license=
makedepends=
makedepends_build=
makedepends_host=
md5sums=
options=
patch_args=
pkgbasedir=
pkgdesc=
pkgdir=
pkgname=
pkgrel=
pkgver=
pkggroups=
pkgusers=
provides=
provider_priority=
replaces=
sha256sums=
sha512sums=
somask=
sonameprefix=
source=
srcdir=
startdir=
subpackages=
subpkgdir=
subpkgname=
triggers=
url=
# abuild.conf
CFLAGS=
CXXFLAGS=
CPPFLAGS=
LDFLAGS=
JOBS=
MAKEFLAGS=
CMAKE_CROSSOPTS=
. ./APKBUILD
: "$arch"
: "$builddir"
: "$checkdepends"
: "$depends"
: "$depends_dev"
: "$depends_doc"
: "$depends_libs"
: "$depends_openrc"
: "$depends_static"
: "$install"
: "$install_if"
: "$langdir"
: "$ldpath"
: "$license"
: "$makedepends"
: "$makedepends_build"
: "$makedepends_host"
: "$md5sums"
: "$options"
: "$patch_args"
: "$pkgbasedir"
: "$pkgdesc"
: "$pkgdir"
: "$pkgname"
: "$pkgrel"
: "$pkgver"
: "$pkggroups"
: "$pkgusers"
: "$provides"
: "$provider_priority"
: "$replaces"
: "$sha256sums"
: "$sha512sums"
: "$somask"
: "$sonameprefix"
: "$source"
: "$srcdir"
: "$startdir"
: "$subpackages"
: "$subpkgdir"
: "$subpkgname"
: "$triggers"
: "$url"
# abuild.conf
: "$CFLAGS"
: "$CXXFLAGS"
: "$CPPFLAGS"
: "$LDFLAGS"
: "$JOBS"
: "$MAKEFLAGS"
: "$CMAKE_CROSSOPTS"

View file

@ -1,146 +0,0 @@
#!/bin/sh -e
# clean self and do not pass through any environment
# except path/home, because it doesn't matter too much for this specific purpose,
# and home is required
# and a few that are useful to keep some cache paths
if [ -z "$_CLEAN" ]; then
exec env -i \
_CLEAN=1 \
HOME="$HOME" \
PATH="$PATH" \
USER="$USER" \
TERM="xterm" \
${CARGO_HOME:+CARGO_HOME="$CARGO_HOME"} \
${CBUILD:+CBUILD="$CBUILD"} \
${GNUPGHOME:+GNUPGHOME="$GNUPGHOME"} \
${GOCACHE:+GOCACHE="$GOCACHE"} \
${GOMODCACHE:+GOMODCACHE="$GOMODCACHE"} \
${GOPATH:+GOPATH="$GOPATH"} \
${GOTMPDIR:+GOTMPDIR="$GOTMPDIR"} \
${CCACHE_DIR:+CCACHE_DIR="$CCACHE_DIR"} \
${SCCACHE_CACHE_SIZE:+SCCACHE_CACHE_SIZE="$SCCACHE_CACHE_SIZE"} \
${SSH_AUTH_SOCK:+SSH_AUTH_SOCK="$SSH_AUTH_SOCK"} \
${XDG_CACHE_HOME:+XDG_CACHE_HOME="$XDG_CACHE_HOME"} \
${XDG_CONFIG_HOME:+XDG_CONFIG_HOME="$XDG_CONFIG_HOME"} \
${DISTFILES_MIRROR:+DISTFILES_MIRROR="$DISTFILES_MIRROR"} \
${mirror:+mirror="$mirror"} \
"$0" "$@"
fi
while getopts "j:fhmnsxN" opt; do
case "$opt" in
'j')
jobs="$OPTARG"
export JOBS="$jobs"
export MAKEFLAGS="-j$jobs"
export SAMUFLAGS="-j$jobs"
export CARGO_BUILD_JOBS="$jobs"
;;
'f')
# also run checksum/checkapk
full=1
;;
'h')
fsynchack=1
;;
'm')
# don't set LD_PRELOAD for another alloc
# since i set this normally, this unexports it.
# XXX: funnily, any extra alloc breaks gjs-based testsuites (why?)
nomemhack=1
unset LD_PRELOAD
;;
'n')
nonice=1
;;
's')
nosccache=1
;;
'x')
# skip checks
export ABUILD_BOOTSTRAP=1
;;
'N')
# skip extras
nosha512sum=1
;;
*)
echo "invalid argument passed"
exit 1
;;
esac
done
shift "$((OPTIND - 1))"
# loop again to check if rootbld
for arg; do
if eltest "$arg" =~ "rootbld"; then
rootbld=1
fi
done
# always prevent installing all the firmware for no reason
extra="linux-firmware-none"
if [ -n "$rootbld" ]; then
if [ -n "$fsynchack" ]; then
# in rootbld, should be safe to skip fsync
extra="$extra libeatmydata"
export LD_PRELOAD="$LD_PRELOAD /usr/lib/libeatmydata.so"
fi
else
if [ -z "$nosccache" ]; then
# not rootbld use sccache
# TODO: maybe we can mount something into rootbld without patches
extra="$extra sccache"
export RUSTC_WRAPPER=sccache
fi
fi
if [ -z "$nomemhack" ]; then
extra="$extra scudo-malloc"
export LD_PRELOAD="$LD_PRELOAD /usr/lib/libscudo.so"
fi
if [ -z "$nonice" ]; then
# max bg idle
# note that there is no nice here,
# but nice is mostly useless with modern linux process groups.
# (and this is in its' own by virtue of a new terminal)
nicewrap="chrt -i 0 ionice -c 2 -n 7"
fi
root="$(git rev-parse --show-toplevel)"
if [ -n "$root" ]; then
# abuild cannot detect the root dir to get .rootbld-repositories
# to work, unless the dir has aports in git remotes or is ~/aports
# ...
export APORTSDIR="$root"
fi
export EXTRADEPENDS_BUILD="$extra pigz xz"
if [ -z "$nosha512sum" ]; then
export EXTRADEPENDS_BUILD="$EXTRADEPENDS_BUILD coreutils-sha512sum"
fi
# ignore user gitconfig always
export GIT_CONFIG_GLOBAL="$(mktemp)"
trap 'rm -f "$GIT_CONFIG_GLOBAL"' EXIT INT TERM HUP
if [ -n "$full" ]; then
abuild checksum
fi
$nicewrap abuild -fr "$@"
if [ -n "$full" ]; then
checkapk
abuild validate
apkbuild-shellcheck || true
apkbuild-anitya || true
fi

View file

@ -1,10 +0,0 @@
#!/bin/sh
. APKBUILD
items="$(curl -s "https://release-monitoring.org/api/v2/packages/?name=$pkgname&distribution=Alpine" | jq .total_items)"
if [ "$items" = 0 ]; then
echo "Package $pkgname is not tracked by Anitya."
echo "Add it here: https://release-monitoring.org/"
exit 1
fi

View file

@ -1,16 +0,0 @@
#!/bin/sh
shellcheck -s ash \
-e SC3043 \
-e SC3057 \
-e SC3060 \
-e SC2016 \
-e SC2086 \
-e SC2169 \
-e SC2155 \
-e SC2100 \
-e SC2209 \
-e SC2030 \
-e SC2031 \
-e SC1090 \
-xa /usr/share/abuild/APKBUILD_SHIM

View file

@ -1,21 +0,0 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=acme-update
pkgver=1
pkgrel=0
pkgdesc="uacme stuff"
url="https://git.ptrc.gay/ptrcnull/ptrcports"
arch="aarch64 x86_64"
license="BSD-2-Clause"
depends="uacme node-print"
source="acme-update uacme-hook"
package() {
install -Dm755 "$srcdir"/acme-update -t "$pkgdir"/usr/bin/
install -Dm755 "$srcdir"/uacme-hook -t "$pkgdir"/usr/libexec/
}
sha512sums="
d9b6fcc1bf35ff8672062b8dd579d707d3fdbb041aae7713f0e5d57384d5bd92cdb48a0fa5c8a122df3c2954919ef5d7c6aafe0f52dbec438bf93f2f54994cf9 acme-update
7386138a0382a8c029185fb966d770e573237579e919f873792d7d4b8d29759dc2fffce1e0aa7368e584bd7ec8e2f4918d4d8d35b74e13701c368c2888c912fa uacme-hook
"

View file

@ -1,65 +0,0 @@
#!/bin/sh -eu
exec &> >(tee -a /var/log/acme.log) 2>&1
echo "[acme-update] starting cert renewal at: $(date)"
. /etc/uacme/config.sh
export UACME_CHALLENGE_PATH=/var/www/acme/.well-known/acme-challenge
expiry_date() {
openssl x509 -enddate -noout -in "$1" | cut -d= -f2 | sed 's/ GMT//'
}
actually_did_something=false
for domain in $domains; do
acme_domain="$domain"
if [ "${domain:0:1}" = "*" ]; then
acme_domain="${domain/\*./} $domain"
domain="${domain/\*./}"
fi
cert="/etc/ssl/uacme/$domain/cert.pem"
echo
if [ -f "$cert" ]; then
date_exp=$(date -d "$(expiry_date "$cert")" "+%s" || true)
date_now=$(date "+%s")
# if more than 1 month
if [ "$(( date_exp - date_now ))" -gt 2592000 ]; then
echo "[acme-update] cert for $domain expires in more than a month, skipping"
continue
fi
fi
echo "[acme-update] getting cert for $domain"
hook=/usr/libexec/uacme-hook
/usr/bin/uacme -v --hook $hook -b 384 --type EC issue $acme_domain || true
cp -fv /etc/ssl/uacme/private/$domain/key.pem /etc/ssl/uacme/$domain/cert.pem.key
chown acme:acme /etc/ssl/uacme/$domain/cert.pem.key
chmod 440 /etc/ssl/uacme/$domain/cert.pem.key
cp -fv /etc/ssl/uacme/$domain/cert.pem /etc/ssl/uacme/all/$domain.pem
cp -fv /etc/ssl/uacme/$domain/cert.pem.key /etc/ssl/uacme/all/$domain.pem.key
cert="/etc/ssl/uacme/$domain/cert.pem"
if ! [ -e "$cert" ]; then
echo "[acme-update] warning: cert $cert does not exist"
continue
fi
expiration="$(expiry_date "$cert")"
actually_did_something=true
echo "[acme-update] certificate expiration for $domain: $expiration"
done
if $actually_did_something; then
doas service haproxy reload
doas service soju reload
doas service maddy restart
doas service mosquitto restart
fi
echo info: cert renewal completed successfully at: $(date)
exit 0

View file

@ -1,205 +0,0 @@
#!/usr/bin/node
require('ptrc')
const fs = require('fs')
const dns = require('node:dns/promises')
const ACME_PATH = '/var/www/acme/.well-known/acme-challenge/'
const config = fs.readFileSync('/etc/uacme/config.json', 'utf8').apply(JSON.parse)
const [ , , action, method, domain, token, recordValue ] = process.argv
function findZone(fullDomain) {
let domain = fullDomain
while (true) {
if (Object.keys(config.domains).includes(domain)) {
return domain
}
const newDomain = domain.split('.').slice(1).join('.')
if (!newDomain.includes('.')) {
throw new Error(`cannot find keys for ${fullDomain}`)
}
domain = newDomain
}
}
const recordName = `_acme-challenge.${domain}`
const zone = findZone(domain)
const shortRecordName = recordName.replaceAll(`.${zone}`, '')
console.log(`> ${action} ${recordName} [${shortRecordName} at ${zone}] ${token} = '${recordValue}'`)
class Hetzner {
ns = 'hydrogen.ns.hetzner.com'
async _fetch (url, opts) {
if (!opts) {
opts = {}
}
opts.headers ??= {}
opts.headers['Auth-API-Token'] = config.secrets.hetzner
if (opts.body) {
opts.method ??= 'POST'
opts.headers['Content-Type'] = 'application/json'
}
const res = await fetch('https://dns.hetzner.com/api/v1' + url, opts)
if (res.status !== 200) {
const body = await res.text()
throw new Error(`status ${res.status}: ${body}`)
}
return res.json()
}
async init() {
const { zones } = await this._fetch('/zones')
this.zoneID = zones.find(x => x.name === zone).id
}
async create () {
await this.remove()
console.log(`>> [hetzner] creating ${shortRecordName}.${zone} (zone ${this.zoneID}) with value ${recordValue}`)
await this._fetch('/records', {
body: JSON.stringify({
value: recordValue,
ttl: 300,
type: 'TXT',
name: shortRecordName,
zone_id: this.zoneID
})
})
}
async remove () {
const { records } = await this._fetch(`/records?zone_id=${this.zoneID}`)
for (let record of records) {
if (record.name === shortRecordName) {
console.log(`>> [hetzner] removing ${recordName} (${record.id})`)
try {
await this._fetch(`/records/${record.id}`, { method: 'DELETE' })
} catch (err) {
console.error('>> [hetzner] failed to remove record:', err)
}
}
}
}
}
class Cloudflare {
ns = 'aida.ns.cloudflare.com'
init () {
process.env['CF_API_TOKEN'] = config.secrets.cloudflare
}
_exec (args) {
const res = exec('flarectl', [ '--json', ...args ])
if (res.status !== 0) {
throw new Error(`'flarectl --json ${args.join(" ")}' exited with ${res.status}:\n${res.stderr}`)
}
return res.stdout
}
async create () {
await this.remove()
console.log(`>> [cloudflare] creating ${recordName} with value ${recordValue}`)
this._exec([
'dns', 'create',
'--zone', zone,
'--type', 'TXT',
'--name', recordName,
'--content', recordValue
])
}
async remove () {
const records = this._exec(['dns', 'list', '--zone', zone])
for (let record of records) {
if (record.Name === recordName) {
console.log(`>> [cloudflare] removing ${recordName} (${record.ID})`)
try {
this._exec(['dns', 'delete', '--zone', zone, '--id', record.ID])
} catch (err) {
console.error('>> [cloudflare] failed to remove record:', err)
}
}
}
}
}
class Http {
init () {
this.path = ACME_PATH + token
}
async create () {
console.log(`>> [http] creating ${this.path} with contents ${recordValue}`)
fs.writeFileSync(this.path, recordValue, 'utf8')
}
async remove () {
console.log(`>> [http] removing ${this.path}`)
fs.unlinkSync(this.path)
}
}
const handlers = {
hetzner: new Hetzner(),
cloudflare: new Cloudflare(),
http: new Http()
}
async function main() {
const handlerName = config.domains[zone]
if ((method === 'dns-01') === (handlerName === 'http')) {
console.log(`> handler is ${handlerName} for method ${method}, try again`)
process.exit(1)
}
console.log('> using handler:', handlerName)
const handler = handlers[handlerName]
await handler.init()
if (action === 'begin') {
await handler.create()
} else {
await handler.remove()
}
if (method === 'dns-01') {
const dns4 = await dns.resolve4(handler.ns)
const dns6 = await dns.resolve6(handler.ns)
dns.setServers(dns4.concat(dns6))
let tries = 0
while (tries < 5) {
console.log(`> checking DNS (attempt ${tries+1}/5)`)
let values
try {
values = (await dns.resolveTxt(recordName)).flat()
} catch (err) {
if (err.code === 'ENOTFOUND') {
console.log('> got ENOTFOUND from DNS')
values = []
} else {
console.error(`> error when querying TXT ${recordName}:`, err)
}
}
console.log('> DNS result:', values)
if ((action === 'begin') === values.includes(recordValue)) {
process.exit(0)
}
await new Promise((resolve, reject) => setTimeout(resolve, 5000))
tries++
}
console.log('> could not ensure the DNS record was created!!')
}
}
main().catch(err => {
console.error('> uncaught error:', err.toString().split('\n').join('\n> '))
process.exit(1)
})

View file

@ -1,25 +0,0 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=bat-alert
pkgver=0.2.0
pkgrel=0
pkgdesc="battery alerts"
url="https://git.ddd.rip/ptrcnull/bat-alert"
arch="aarch64 x86_64"
license="custom"
makedepends="zig"
source="$pkgname-$pkgver.tar.gz::https://git.ddd.rip/ptrcnull/bat-alert/archive/v$pkgver.tar.gz"
builddir="$srcdir/bat-alert"
options="!check" # meow
build() {
zig build -Doptimize=ReleaseSmall
}
package() {
install -Dm755 zig-out/bin/bat-alert "$pkgdir"/usr/bin/bat-alert
}
sha512sums="
b101e95e222b3ae4083ba543e6fbcd9fc7fcf0b149bb70a83c6ce9f9f412edcf06d175f77ec65b7d1a172b19fba1d1611a06353e9068c45d7ae5bdaa37b35547 bat-alert-0.2.0.tar.gz
"

View file

@ -1,20 +0,0 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=bsdtar-ponyfill
pkgver=1
pkgrel=0
pkgdesc="symlink to bsdtar in /bin/tar"
url="https://git.ptrc.gay/ptrcnull/ptrcports"
arch="noarch"
license="Unlicense"
depends="cmd:bsdtar"
options="!check" # is symlink
replaces="tar"
provides="tar"
package() {
mkdir -p "$pkgdir"/bin
ln -svf /usr/bin/bsdtar "$pkgdir"/bin/tar
}

View file

@ -1,32 +0,0 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=font-atb2
pkgver=1
pkgrel=0
pkgdesc="Banedanmark mittog.dk fonts"
url="https://mittog.dk"
arch="aarch64 x86_64"
license="custom"
makedepends="woff2"
source="
AtB2Screen-Medium.woff2
AtB2Screen-Regular.woff2
"
builddir="$srcdir"
options="!check" # is font
build() {
for file in *.woff2; do
woff2_decompress "$file"
done
}
package() {
mkdir -p "$pkgdir"/usr/share/fonts/atb2
cp ./*.ttf "$pkgdir"/usr/share/fonts/atb2/
}
sha512sums="
6ab2bb8117dbc55c2d18c8381a303b3ab4824733a2ee60c9f2cf21cacc6e1d04e8728193dfe5a9271e8876a5bd06c376cfcbfec492f58a4c2ce491d5b6f5ccb6 AtB2Screen-Medium.woff2
a3d18c57aa3fab75838475148f7d5600b8b34aa1e3fc7e74c16e8b8e30336f22b5007166fc3f552daab13da73824722dd2da925588382a2c4c2d8ba03e1b1314 AtB2Screen-Regular.woff2
"

View file

@ -1,57 +0,0 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=font-db-type
pkgver=1
pkgrel=0
pkgdesc="DB brand fonts"
url="https://bahn.de"
arch="aarch64 x86_64"
license="custom"
makedepends="woff2"
source="
DBHead-Black.woff2
DBHead-BlackItalic.woff2
DBHead-Light.woff2
DBHead-Regular.woff2
DBIcons.woff2
DBSans-BlackItalic.woff2
DBSans-Bold.woff2
DBSans-BoldItalic.woff2
DBSans-Italic.woff2
DBSans-Regular.woff2
DBScreenHead-Black.woff2
DBScreenHead-Light.woff2
DBScreenHead-Regular.woff2
DBScreenSans-Bold.woff2
DBScreenSans-Regular.woff2
"
builddir="$srcdir"
build() {
for file in *.woff2; do
woff2_decompress "$file"
done
}
package() {
mkdir -p "$pkgdir"/usr/share/fonts/db
cp ./*.ttf "$pkgdir"/usr/share/fonts/db/
}
sha512sums="
b1c23c600db2fba2cdb08a19ce8f60012e4621181d7c2fc24fa22acf80eec93d505eb57554e0e067bcafad8c096c9cd5618f9ef9d8079ce18f75f142afd664ec DBHead-Black.woff2
090524ecc19454a36390eaee657939b2074a0e67112b614790a2bd1be2118a89119d0777fb6ef2ec5e6e8cb2c699e172d0d05fd329a720d5ee11a2dccbf32ef1 DBHead-BlackItalic.woff2
289e0143a745e39ff4c0e83754df4576ccf6d1581488255036daab38ed32648ca0eb08c1ce31713ebe8d849010fa7e9dfa85c4c76141d37adbfcb2748c5d844f DBHead-Light.woff2
6a06571bca7afd08637aeb46f552f490210998fde28d639bf4f2a3b1af7a670f313d2d7a1c53fc8df8aed9f7198ea4ec7f73cc13d6a235d3c8261abdb75926a1 DBHead-Regular.woff2
2f33a42511c2e76850fe9de85e3a7577b0123671c7f7e92dca71c8388b32003931760f9828fd80e327831dd285b29e95189dc940ca38370b5841a9e4cae1d978 DBIcons.woff2
91f4715f80e64818b9ee432c5e57474e23ccdad07e68a98c0588af493567847c8b5c21e2c8b72814cdfe1c040951428a4992e3c61320a3adc02a4232fafe28e9 DBSans-BlackItalic.woff2
aaae6536c1e4a0f90c534487635d223d3fb575463863b435369f90036e2b13c7e5d6c549edba223b7986f9c340f2dae5afab357faaf06371c413733b934cb3bc DBSans-Bold.woff2
bd1f1d4b82ab955e5974f4770280e2ad0ae97448f00b2b9027781c89f7fc2bf96e0c43d359bc2b583c84e77d29e9694e684032eca47358e056592bd60592129d DBSans-BoldItalic.woff2
7ff441d39337d1ddc45be5e0e81288847d28bcc3d28964a375892fec5b25f887539662b117aee9af94b6765b51571303a0ca6661b241ac6da46cd9ca1d28ec56 DBSans-Italic.woff2
553a4435cc711a996c6b96fa6bccac48942ddfb81dba9991688e6b4b5a6352e793531f58e00fe349a8243217a4c4cbd00a033188a1ef1a9388bd6469af2d03a9 DBSans-Regular.woff2
3f0cfdffe8cc3e906927a1e51d337e92eebd888f591a02b31a4d56317a9d44d685c9589224d75a390a0cc2fd129cf85d969ff3f8ac26b1a275b7018f884f8953 DBScreenHead-Black.woff2
78ae1e1be5dcb07f8343738dd6d0ab4ddb98dddce05c1d67c1630e1463eea75be1979c189b096a05802d85d8857efe17e7c30f7433825b6af3c0ab451f34d19b DBScreenHead-Light.woff2
b95dcbe00f7f20c660cb99f29ef5b986e1ebeb927b3e01d2d6cc03cb48c67516ca1fdcb6eef4ef48e8c937bf8c0e9397faaf06b1f982f34ebf2322f7e6e9c6c6 DBScreenHead-Regular.woff2
7d267e6343a38c362b63ec652afc70eac712144105dfcb4f102e54d641c929ec582e48a2005dde1139c621ca0d632e37b9bb7751d3b10ee1223cadf18c050b0f DBScreenSans-Bold.woff2
e15ead86c5063c87c3d3e3ba7db8ddd1cf69e047086714b638c7fd685bed97cfcb527381c41dbe7d8c01305e9f656b4fc668c8c329a98962f979ed5a0c85af35 DBScreenSans-Regular.woff2
"

Binary file not shown.

View file

@ -1,32 +0,0 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=font-noto-ikea
pkgver=1
pkgrel=0
pkgdesc="IKEA marketing fonts"
url="https://ikea.com"
arch="aarch64 x86_64"
license="custom"
makedepends="woff2"
source="
noto-ikea-latin-bold.woff2
noto-ikea-latin-regular.woff2
"
builddir="$srcdir"
options="!check" # is font
build() {
for file in *.woff2; do
woff2_decompress "$file"
done
}
package() {
mkdir -p "$pkgdir"/usr/share/fonts/noto-ikea
cp ./*.ttf "$pkgdir"/usr/share/fonts/noto-ikea/
}
sha512sums="
feb21424972d70b99c5fcf6cca1b11fe4380950e7be6abf7c27f87cd10444c9830ce45192619d4de8128b3b9cfd830ea996e2063736b51044fc5434ef64e880e noto-ikea-latin-bold.woff2
8b20fc782f0243cc56a65f24687efb0221297cc582fa94180e3cb96b03a10cc50ae65e01c6e8daec5b0da807943f9e637230da73a999bc2061d40ac553633876 noto-ikea-latin-regular.woff2
"

View file

@ -1,56 +0,0 @@
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=font-radikal
pkgver=1
pkgrel=0
pkgdesc="Radikal web font"
url="https://nootype.com/buy-radikal.html"
arch="aarch64 x86_64"
license="custom"
makedepends="woff2"
source="
RadikalBlack.woff2
RadikalBlackItalic.woff2
RadikalBold.woff2
RadikalBoldItalic.woff2
RadikalLight.woff2
RadikalLightItalic.woff2
RadikalMedium.woff2
RadikalMediumItalic.woff2
RadikalRegular.woff2
RadikalRegularItalic.woff2
RadikalThin.woff2
RadikalThinItalic.woff2
RadikalUltraThin.woff2
RadikalUltraThinItalic.woff2
"
builddir="$srcdir"
options="!check" # it's a font.
build() {
for file in *.woff2; do
woff2_decompress "$file"
done
}
package() {
mkdir -p "$pkgdir"/usr/share/fonts/radikal
cp ./*.ttf "$pkgdir"/usr/share/fonts/radikal/
}
sha512sums="
29b06320033e170971d4802d0a0341404570fc62c0f74629bce390887b9668ce6b79dd54200ac1eaf9e3b1b40697f6dcdb74e2a33fb8012c8bb4fda7dc1c0936 RadikalBlack.woff2
c7f68e5cde9a53757ed200dd3faf8231290d287d1f32542b2ffe5dff2644293549a6a996fbb02893f42738cc1d41bda56e7896dced589657a3c492e79f3e4d1c RadikalBlackItalic.woff2
39cd10c5a1cbf5d1aa58294739e3fbc30717f3f5d5216789c440f3fff137375cad72fd6dad55b3e2ca8ecab57d803495e1b113ef5111ca4c1af5c0055052836a RadikalBold.woff2
2d58f3edebf088a484b0a2181552904a9830ac8faf7d9cf3fcd2cad16c06e9d905707c1297c4b109e856de4e77c9de157ec2b3a5a3ccbc1d5b8505d00e4596fa RadikalBoldItalic.woff2
9539e7168a0a3463aac0d32b377ee645e61100a0cea8d8c8fb7e60c194211be0b2f168cdca8b8e86f7cf7bd3e7d79aa642ceacb942d4f7cecbed4a17b2ea8ff6 RadikalLight.woff2
bc9cec2624ce4bc224a4e90411fa55796decd5e54d0be25345557f18e580ae02c8b935b01e13e593686daf6dca9d90a2365a5470b9d813a7d9195bf82857326d RadikalLightItalic.woff2
f48a553331b2f3c00a4128856250428ebfecea9ceb0bf5aeea26c36c843ed8e57015f91d19fe457363c7760df6cf794b7ae5f124acbc28a99bfc601db6fdc969 RadikalMedium.woff2
128d2c0fbb9dc7af374fa48f49ad3d178633aed0ac8b761d3cba46fdef802a85974fb7773c91c4908c6dbbb0242eb8d6512c6e49c6815297a924cfbf4fd16403 RadikalMediumItalic.woff2
d0dc03bfbd2bc3bc8df894b043bb0cf2eac85103e6979271003a6fa0a37dde6af3fdbf0a7749557a71f3c821570ea2bb0813e8f7c753075ddf244963ca7d21da RadikalRegular.woff2
4f849600d6cafdd1e80719f2b3c596c36e60d94e1c1c3a55f5e732442fadd086e47330230b15b4f196282851d68acb89164d096d399c62e0258f9a72a986e79b RadikalRegularItalic.woff2
948068c38cf4709deaa0e1f56cd9fa9278e1ef71007c67f9cf042971d414ffee8324fb3093e195bf80b7e3d5e283db6781216b9bad4b51c1d8fb397f0403d6f7 RadikalThin.woff2
a4bdf35a771096a4f7e96973b197f22b0d39ea6d0f85dcd38f3be55201c92a74491000ba9dfa9ad947d914ec62a88c0f685a7711025be05bc5063d9367096241 RadikalThinItalic.woff2
0bbaa962145f19c2401de6d15bd802822dca4f6d0173ac91849009fd399675777e666cc97cce69d249f7aafb169c340bcf7d076f170a3b5bc0aea91ca7eddb81 RadikalUltraThin.woff2
83912674d6d3af605cd69dcb4d28c920b64d0b1656865f0e8e85f5445966edb74dc91e800c9247ecb14326392e0011067d828f88fc25a2ef1fa7d4d6b8222dfb RadikalUltraThinItalic.woff2
"

Some files were not shown because too many files have changed in this diff Show more