Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8ccbb46903 |
@@ -1 +1,10 @@
|
|||||||
use flake
|
export DIRENV_WARN_TIMEOUT=20s
|
||||||
|
|
||||||
|
eval "$(devenv direnvrc)"
|
||||||
|
|
||||||
|
# `use devenv` supports the same options as the `devenv shell` command.
|
||||||
|
#
|
||||||
|
# To silence the output, use `--quiet`.
|
||||||
|
#
|
||||||
|
# Example usage: use devenv --quiet --impure --option services.postgres.enable:bool true
|
||||||
|
use devenv
|
||||||
|
|||||||
+1
-4
@@ -1,9 +1,6 @@
|
|||||||
/fdroid/config.yml
|
/fdroid/config.yml
|
||||||
/fdroid/keystore.p12
|
/fdroid/keystore.p12
|
||||||
/fdroid/repo/
|
/fdroid/repo/*.apk
|
||||||
/fdroid/archive/
|
|
||||||
/fdroid/tmp/
|
|
||||||
/fdroid/metadata/
|
|
||||||
|
|
||||||
# Devenv
|
# Devenv
|
||||||
.devenv*
|
.devenv*
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ keys:
|
|||||||
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||||
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||||
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
||||||
- &docker-env-var age1qwfnn0gv7mt5dsgy4enew439mgtfd49q46r2gfdqyehpkzx4npcq78a87s
|
|
||||||
|
|
||||||
creation_rules:
|
creation_rules:
|
||||||
- path_regex: fdroid/*
|
- path_regex: fdroid/*
|
||||||
@@ -11,4 +10,3 @@ creation_rules:
|
|||||||
- *primary
|
- *primary
|
||||||
- *aspi-ssh
|
- *aspi-ssh
|
||||||
- *builder-ssh
|
- *builder-ssh
|
||||||
- *docker-env-var
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env sh
|
#! /bin/sh
|
||||||
|
|
||||||
sops -d fdroid/encrypted-config.yml > fdroid/config.yml
|
sops -d fdroid/encrypted-config.yml > fdroid/config.yml
|
||||||
sops -d fdroid/encrypted-keystore.p12 > fdroid/keystore.p12
|
sops -d fdroid/encrypted-keystore.p12 > fdroid/keystore.p12
|
||||||
+103
@@ -0,0 +1,103 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"devenv": {
|
||||||
|
"locked": {
|
||||||
|
"dir": "src/modules",
|
||||||
|
"lastModified": 1759939975,
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "devenv",
|
||||||
|
"rev": "6eda3b7af3010d289e6e8e047435956fc80c1395",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"dir": "src/modules",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "devenv",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1747046372,
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"git-hooks": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"gitignore": "gitignore",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1759523803,
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"rev": "cfc9f7bb163ad8542029d303e599c0f7eee09835",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gitignore": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"git-hooks",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1709087332,
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1758532697,
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "devenv-nixpkgs",
|
||||||
|
"rev": "207a4cb0e1253c7658c6736becc6eb9cace1f25f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"ref": "rolling",
|
||||||
|
"repo": "devenv-nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"devenv": "devenv",
|
||||||
|
"git-hooks": "git-hooks",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"pre-commit-hooks": [
|
||||||
|
"git-hooks"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
packages = [
|
||||||
|
pkgs.fdroidserver
|
||||||
|
pkgs.sops
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json
|
||||||
|
inputs:
|
||||||
|
nixpkgs:
|
||||||
|
url: github:cachix/devenv-nixpkgs/rolling
|
||||||
|
|
||||||
|
# If you're using non-OSS software, you can set allowUnfree to true.
|
||||||
|
# allowUnfree: true
|
||||||
|
|
||||||
|
# If you're willing to use a package that's vulnerable
|
||||||
|
# permittedInsecurePackages:
|
||||||
|
# - "openssl-1.1.1w"
|
||||||
|
|
||||||
|
# If you have more than one devenv you can merge them
|
||||||
|
#imports:
|
||||||
|
# - ./backend
|
||||||
+21
-30
@@ -296,42 +296,33 @@ keydname: ENC[AES256_GCM,data:Y3wSx0afY5cU1UTFGhfjkFUfhxfq1QLXJg==,iv:yKm+MRbVjh
|
|||||||
#ENC[AES256_GCM,data:zKniEwAw4Q+i+i4jmjIjyKtbymHpXL7P1roBPRlgi674/VBbgTzu7g==,iv:SyRbw64A7eiMJtjwo4QK90ovbkw5yQUR1mD71FPhc60=,tag:gP4mu7DTwJhXdlggPz0UxQ==,type:comment]
|
#ENC[AES256_GCM,data:zKniEwAw4Q+i+i4jmjIjyKtbymHpXL7P1roBPRlgi674/VBbgTzu7g==,iv:SyRbw64A7eiMJtjwo4QK90ovbkw5yQUR1mD71FPhc60=,tag:gP4mu7DTwJhXdlggPz0UxQ==,type:comment]
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- enc: |
|
- recipient: age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||||
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsRis5WitnZnBwVm15bXdO
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsWHkyZHFUcnVkRERzbnhj
|
||||||
cHo2dkdwWDlNMUFOT3Q4SHErL29jY0tTZDI4CmtYVzdCcjZ4ZXl0MTNvdStJNHlH
|
UnZQb0JvVUtlUnhkME1VZDFPVGgyeFc2TmowCkhWak5RZVh6NXZuRVdaRkpHNHc3
|
||||||
c0Nab2YwNWh2THJzdjJpYjhyVUl6M28KLS0tIGZuWHUxY1lCdUdvYUtCWXpqb3p0
|
WDYyQ25tVWFCenhRUGVncE9hc1ByZXMKLS0tIFpUOWhHMVpGeitQYzBhUisvNmRR
|
||||||
WmdGNGVZRGhuWE4rZVJBV1F6aTQ0eDgKkykL55f1wEkE+eMha/c7USjwpsUbJBpA
|
eC9pcWFuY2ZHaTFWaGdNR1AvYmFpTncKCjWikMHAI7Mbqh5eUNwCs5BIlLLh5OxE
|
||||||
IEy+9awjauMD9pNrBjqhbh2g5xY042ea7dcPaexNVsqauHxzzN4m4g==
|
ypwLLQoCECj1BWgJGGEnTVOGSdiRwUMCgWxsJSO/nz+1SbPTp4z0GQ==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
- recipient: age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqWEtDNGVDdXNXQktpNlds
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLNCtLdmovUmJhemtvWHRH
|
||||||
VlBMZ2NEcDFMMENSUnVUR0YvUUg3clhOOVZZCmxJTGp5UUJvaG05V2Z3NG52SjVG
|
RGRLNHdvRGJadXpHdFZhaStWbUxVNGJxOVdrClZydGNYVzlSYnd6RDJJZCtLRzJk
|
||||||
OS8vS0pIeXdlRVdPeVdHV0I5UkNwbG8KLS0tIGIvcUJvdFRxUExhY0cwN3hqV0Ur
|
TjM3RWV1L254T2MxeElkanJTS0ZFQ2MKLS0tIFluRllablZkRGp5cjR2Tm1wN1hD
|
||||||
clhac1BydUk1MEFBdDdFUnFlNzZ5YXcK2UaiG9h9ZBDTfAEmLIS5Zwya60d5G7l4
|
bDMxT3RqdG1QdVJ5cTlNVHBwd0x0czAKN6VTum88epGjNgA2v887k4/cfUIrZwTC
|
||||||
Gn3maQh8+N3iaapsn/waxwMXOUxlvVjBsRBd4z3k5iBHmt1+G23M3g==
|
cUGQmPwunrVK5OlwsM4d1xKC39CHWFE/uDeYCl8gADrOG1TcsFvqpA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
- recipient: age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzOE9CMTQ2OEw0dG5WVUkz
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQTVpSUDFTY0NabFpqT05y
|
||||||
ZWgrR1F6OWR1eXJQblRLOEoreHI5YmZNMkRzClJlRTF6Y3hGRzNGYmU3RC9Rek9Y
|
THB2bVZ1RFhEejI1NkFEeEs3SjF4TDBaU2pjCnNpQkRVY1BhLzVLWjVML29HanlB
|
||||||
YWdpWThmMTdkRjIwMnBpb2FwL1ZVejAKLS0tIDRsMHRXblZBUXltRGNqcytrSjlu
|
QXpzREMyYWkxQTZUbWg2Wk9KMkVkajAKLS0tIGdIa0w1ZFR5UEdydUVYYkVzSmgv
|
||||||
V1VSWEZ0dC9XdUx6WFRvMUtlSjl5TGMKh+9AIETppAs8PbhyDiIHGhaT+5Nm7qs7
|
SnB5aGptOU5DTklKQVUwaHFTTm00N1kKIDN8J2/Ypw3r1pA7FxCssaFT6wyiB2IR
|
||||||
hoUlfXSluotltd/a+B/IX0IjME/h7P6akJ9iecJzZfNTqh9ocD4IEw==
|
SmgMhts+dAtDIKxASiqAQAt9WJ5IUneqXu2IVF2bdzBHpcr3iXhbzQ==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
|
||||||
- enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzNHJXRVBsam91cThzaXli
|
|
||||||
K29SS08xRkRZNlJhaDhtZVpzTEJOREdIVzNrClQzdEk4RDhpcFVHdng4S2hpMFBT
|
|
||||||
R2ZPeXRheldwNTl2WDFheDlHdDl1NEkKLS0tIElvWnFqS2Q4NGZJcUlOUG5ESCtV
|
|
||||||
RzdIb0VJT1FaN24wY3hiUHVGaTZaN3cKS1lru+T2GyCLm6WPktEgZyuDnaOMc/ws
|
|
||||||
pPCTcWZHxQCkL7kb/127eDsZJTxGdv8Dyn6PKr2ajlro1lQOwQHuCQ==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
recipient: age1qwfnn0gv7mt5dsgy4enew439mgtfd49q46r2gfdqyehpkzx4npcq78a87s
|
|
||||||
lastmodified: "2025-10-09T06:24:30Z"
|
lastmodified: "2025-10-09T06:24:30Z"
|
||||||
mac: ENC[AES256_GCM,data:tk5TECa+qYWwoQoOpnY79i4VNdacVNk6p98/yWjK35MCAmK4sHl+GETK+lImh+9FmTrtNzvLZ8mHvAalnpV1CqDTsZqjBRD8snPvpZdn6VgLrTu66C2Ft+FNWnJC1yECoJGE8csa94cHhMaezC/9jpCYnGG2rtaiVr9sfB28olM=,iv:HDDZ5gfFASGzJ5pOYkS/DSgkhFfMc0yeJzxFgTLOjYg=,tag:lmvOIa8oHS/HNA82w01TvQ==,type:str]
|
mac: ENC[AES256_GCM,data:tk5TECa+qYWwoQoOpnY79i4VNdacVNk6p98/yWjK35MCAmK4sHl+GETK+lImh+9FmTrtNzvLZ8mHvAalnpV1CqDTsZqjBRD8snPvpZdn6VgLrTu66C2Ft+FNWnJC1yECoJGE8csa94cHhMaezC/9jpCYnGG2rtaiVr9sfB28olM=,iv:HDDZ5gfFASGzJ5pOYkS/DSgkhFfMc0yeJzxFgTLOjYg=,tag:lmvOIa8oHS/HNA82w01TvQ==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
|
|||||||
@@ -3,25 +3,20 @@
|
|||||||
"sops": {
|
"sops": {
|
||||||
"age": [
|
"age": [
|
||||||
{
|
{
|
||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOSW1EWFFYam1zZ1hjMnk2\nZ1dJWjVtWGgxYzBjYXVqL1MxME43TjZXRkVFCmN4NUxzdVJ6dEdrRTJwY2MzWlF6\ncVE1aWtxK0R0ZW1NK3lPZUNjWmZVZzAKLS0tIEJvZk40bUU1RmFva25Wc3Nsa1Fj\ncWMwRWhKRXRLcHVITFRLVTl0NVlJK1EKDRRcacbVcrl6/0VITguko7ec9dVoOasN\nBFJKCefNCzldoukS9IVpmxH+pBL+Q7awMiqFW1aabfoSRdn2oWoPDQ==\n-----END AGE ENCRYPTED FILE-----\n",
|
"recipient": "age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg",
|
||||||
"recipient": "age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg"
|
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxb3QyWWFHZjlvcFMzUFRV\nTVl2NEszNmVEWlNtYUJ0OW54YjUyVjRDeHk0CjM3S2pjUmNma0wrd0xXQ0VEM1Ir\nNXNndFlNUkpjZEUyeHB5dkdwYTcrOUkKLS0tIDBEaWVKZXVRMjlsOWRDdGhnSENY\nQm5EYy9ENGhQNmFsOTE0bFhXTC9IMTgKVNYtDqCUbzY2Q8zn1ub1T7PObImsjAq1\nXQcx6UXomwRz0NzHsLefFHZ+n7FbNzjnnlujkA7ez3vCY71EdRKUCQ==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhUGNVY0FzRmVVMmZUcU1r\nbVVFM2J0aG9qdTNCd1JyWnJiVHcwaCtIM0hVClJmN1NKT2l4TXVvU2ZZczVQMWM0\nZ3dabG05QWlaSU9GR2pFM2tldlBDVUkKLS0tIHhPT0pOUWx4M2ROQkR6T2M0NUlX\nbHBwR1RQUUI3QUt5bE1VWWtLZ3J3RmcKag3xF4PALKFu1N+cmvvdFjnW5k1Dp2vO\n/M/49tcDw7kc9LSkfzQhSJhXUNr+PtJmOinh228PziO/UJJ/d6HnVQ==\n-----END AGE ENCRYPTED FILE-----\n",
|
"recipient": "age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4",
|
||||||
"recipient": "age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4"
|
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQVTNKRDQrb3R2R3lnWjJN\nZitETG9VdWlHNm1rRFpVd2Z2ckNIenA2MlRrCmx1ZVRhZUg0ZVBoYzhPdVhXUG5j\na2FXNUhJWDVuQjNyS0tBbHNQWjZPY3MKLS0tIHUvRU1leklPVkZpSkpJVjZHY1pk\nK05obThKKzdxc3BLcmQ1QWE4RjYvODQK3hIPfDysWC6elB5+EXcAjGay7KAKx40M\nqJzAy7JLviIh/leJDQY/4m0Wx5v6AJtm4Q6RpUcVouPpMD6bDYY4Kg==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrQ211UDlxTDR4UWxjZG85\nZHJTeFA0OFBsWU5nVSsxZ2RINGpnN3YzMXdvCmpMcnJVRG1SS2JVWUdxU0JGWmpy\ndTRJYUppU01qYmZFVU5RTGd3SHRMKzQKLS0tIHBZZWsvaVQvcmRMd0QvUzNKOWNz\nb3F3eXl4bmo4WjdTY1l2dWMwZ2llZjQKjN3vWtL+9PF39BkyPSqGaPfmyQrgXbDQ\nxObWs6NZqVWyJ+SEx8RvjdQymzbqG5NfQiWPCTR4kkS4/7KWxQxDTw==\n-----END AGE ENCRYPTED FILE-----\n",
|
"recipient": "age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja",
|
||||||
"recipient": "age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja"
|
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4WEEzMTFOaW9wKzk0OE56\nMEJuejNCZ29HSnhvUGMyZUtMSmhRUWZZbFRVCjFodmZyekcyUHZ6QXEydStJQS9l\nSjhnWkpiNVpRL1pTbzFGTjhBd2tmWEUKLS0tIG1SRTB0d3E4S3pwRUFhVE9xZlk3\nVWJVMEpLMFNNbGQ2dk1JWWNyRHZPVUkKQ5IuJwMyqgJF8dkgEVJUcRLgQRhizFSJ\nB6qTE+SbjwRmgD5Ua2My4VxdOgXlsNVL8hHxKhGD4NkNC2edRUC+YA==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||||
},
|
|
||||||
{
|
|
||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxWkFYdVROeWplUElxOGtY\nYlRoRkViWEJwdDNOSk5WczRvYWxPMkw2SVVvCnlneWI3VUN4R2E0Si9DWThUblVJ\nVUdoWGpTN0dldFUxMktPSTZIaXRmUjQKLS0tIGVwWWVqMW9NWTBzejlUWGFpY3NR\najRjc3pjRGhWOENKRFczQUtVcE8va1EKSZnqNhNcbD89iQi3he00TXfx9rw4HXNt\nZs3JnZOigvnZv2G0BwHD+TEeSbw3haS/2v65LMNhifsVVO/CZZrHOw==\n-----END AGE ENCRYPTED FILE-----\n",
|
|
||||||
"recipient": "age1qwfnn0gv7mt5dsgy4enew439mgtfd49q46r2gfdqyehpkzx4npcq78a87s"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lastmodified": "2025-10-09T06:24:12Z",
|
"lastmodified": "2025-10-09T06:24:12Z",
|
||||||
"mac": "ENC[AES256_GCM,data:uN3S6ttwLzX9If39NfoNRgrSzNjU7Ieym+yM1TJGNgHU545QDghPlar0EYRkbNpCucEQb0qANI6GUja51JTnNIJcMRET8VmvT3JXAVKV+4vB1X+j3Pq9/2IWg5UMXw+JKAT7eVbCsjxmJ7zh+XAC//wztbzUnT6fRvDCInQ52Fw=,iv:C9RjR3uuj/VG3fc/maTqJSSTt+iA82CYas0JS1I13CI=,tag:/h5+xMZgC3cn8aG+qyO2qA==,type:str]",
|
"mac": "ENC[AES256_GCM,data:uN3S6ttwLzX9If39NfoNRgrSzNjU7Ieym+yM1TJGNgHU545QDghPlar0EYRkbNpCucEQb0qANI6GUja51JTnNIJcMRET8VmvT3JXAVKV+4vB1X+j3Pq9/2IWg5UMXw+JKAT7eVbCsjxmJ7zh+XAC//wztbzUnT6fRvDCInQ52Fw=,iv:C9RjR3uuj/VG3fc/maTqJSSTt+iA82CYas0JS1I13CI=,tag:/h5+xMZgC3cn8aG+qyO2qA==,type:str]",
|
||||||
"unencrypted_suffix": "_unencrypted",
|
|
||||||
"version": "3.11.0"
|
"version": "3.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
AuthorName: ''
|
||||||
|
Categories:
|
||||||
|
- repo-frajul
|
||||||
|
CurrentVersionCode: 2147483647
|
||||||
|
IssueTracker: ''
|
||||||
|
Name: sheetless
|
||||||
|
SourceCode: ''
|
||||||
|
Summary: ''
|
||||||
|
WebSite: ''
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}, "packages": {"com.example.sheetless": {"metadata": {"preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"5b767e2a8ff69867a53406184f2469119e64d12d5418f6e60916cb0c04d6dedf": null, "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}, "packages": {"com.example.sheetless": {"metadata": {"preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"35af8ff102f332f06edde3e1a20fa6c31a7a3ab89a6ceecad4ac003af133e024": null, "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}, "packages": {"com.example.sheetless": {"metadata": {"preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"35af8ff102f332f06edde3e1a20fa6c31a7a3ab89a6ceecad4ac003af133e024": null, "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}, "packages": {"com.example.sheetless": {"metadata": {"preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"523a2afc0741c0c75049fa27cbb85482f04a9a62ddb90e30b0d5f761b75e52af": null, "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}, "packages": {"com.example.sheetless": {"metadata": {"preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"523a2afc0741c0c75049fa27cbb85482f04a9a62ddb90e30b0d5f761b75e52af": null, "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}, "packages": {"com.example.sheetless": {"metadata": {"preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"7fd8bd4f70da9aaf0758774189d651fab81bb844a2d2681f846f3eac8034910f": null, "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}, "packages": {"com.example.sheetless": {"metadata": {"preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"7fd8bd4f70da9aaf0758774189d651fab81bb844a2d2681f846f3eac8034910f": null, "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}, "packages": {"com.example.sheetless": {"metadata": {"preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"da971d6f53700a2b4cc44e28f8a99dba925ad8f9f5c1d63b39e7886ab2dbb204": null, "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}, "packages": {"com.example.sheetless": {"metadata": {"preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"da971d6f53700a2b4cc44e28f8a99dba925ad8f9f5c1d63b39e7886ab2dbb204": null, "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000}}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{"timestamp": 1770871832000, "version": 20002, "index": {"name": "/index-v2.json", "sha256": "c82f9dcb4ec44cd950a3e37c2068e98bd937ee3ecbe3ec3e43bf92e454ddfb41", "size": 1356, "numPackages": 1}, "diffs": {"1770867053000": {"name": "/diff/1770867053000.json", "sha256": "237340f2725bce32223ab52872b36ec5f4de9a681cc1d7cd79aba0527b5caff7", "size": 891, "numPackages": 1}, "1770867889000": {"name": "/diff/1770867889000.json", "sha256": "d737a12dcb02182f71e8dab972f75849db81d9033a6b4dda53aa1b75d2ba1e44", "size": 891, "numPackages": 1}, "1770867892000": {"name": "/diff/1770867892000.json", "sha256": "d737a12dcb02182f71e8dab972f75849db81d9033a6b4dda53aa1b75d2ba1e44", "size": 891, "numPackages": 1}, "1770868831000": {"name": "/diff/1770868831000.json", "sha256": "7ae66e04480aa3387f7433a07be2502346dd6bf7ea97629ce0ae5e32ed6dc7f6", "size": 891, "numPackages": 1}, "1770868833000": {"name": "/diff/1770868833000.json", "sha256": "7ae66e04480aa3387f7433a07be2502346dd6bf7ea97629ce0ae5e32ed6dc7f6", "size": 891, "numPackages": 1}, "1770869424000": {"name": "/diff/1770869424000.json", "sha256": "7a09eca63b624a6d7b051a11aff2456f6b4cb80ef8adf0866edfc384766f322c", "size": 891, "numPackages": 1}, "1770869426000": {"name": "/diff/1770869426000.json", "sha256": "7a09eca63b624a6d7b051a11aff2456f6b4cb80ef8adf0866edfc384766f322c", "size": 891, "numPackages": 1}, "1770870688000": {"name": "/diff/1770870688000.json", "sha256": "97c70f56299ef604c92212e7189327d047b6097977b039432a99236b0cc0ea53", "size": 891, "numPackages": 1}, "1770870690000": {"name": "/diff/1770870690000.json", "sha256": "97c70f56299ef604c92212e7189327d047b6097977b039432a99236b0cc0ea53", "size": 891, "numPackages": 1}, "1770871830000": {"name": "/diff/1770871830000.json", "sha256": "5009941efc1dabc0a0c6e5e7cfbbe17b708a6365c109d9f11d2573321a0ae508", "size": 38, "numPackages": 0}}}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 829 B |
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"timestamp": 1770871832000, "version": 20002, "name": "Frajul's repo", "icon": "icon.png", "address": "https://fdroid.julian-mutter.de/fdroid/repo", "description": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "requests": {"install": [], "uninstall": []}, "apps": [{"categories": ["repo-frajul"], "suggestedVersionCode": "2147483647", "license": "Unknown", "name": "sheetless", "added": 1754377910000, "packageName": "com.example.sheetless", "lastUpdated": 1754377910000}], "packages": {"com.example.sheetless": [{"added": 1754377910000, "apkName": "sheetless.apk", "hash": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "hashType": "sha256", "minSdkVersion": 24, "nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "packageName": "com.example.sheetless", "sig": "6befcaf4267998cd7c7d367d3e7b5354", "signer": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce", "size": 63373156, "targetSdkVersion": 36, "uses-permission": [["android.permission.INTERNET", null], ["com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION", null]], "versionCode": 1, "versionName": "0.2.0"}]}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770871832000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1,228 @@
|
|||||||
|
/* auto-generated - fdroid index updates will overwrite this file */
|
||||||
|
BODY {
|
||||||
|
font-family : Arial, Helvetica, Sans-Serif;
|
||||||
|
color : #0000ee;
|
||||||
|
background-color : #ffffff;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
text-align : justify;
|
||||||
|
}
|
||||||
|
p.center {
|
||||||
|
text-align : center;
|
||||||
|
}
|
||||||
|
TD {
|
||||||
|
font-family : Arial, Helvetica, Sans-Serif;
|
||||||
|
color : #0000ee;
|
||||||
|
}
|
||||||
|
body,td {
|
||||||
|
font-size : 14px;
|
||||||
|
}
|
||||||
|
TH {
|
||||||
|
font-family : Arial, Helvetica, Sans-Serif;
|
||||||
|
color : #0000ee;
|
||||||
|
background-color : #F5EAD4;
|
||||||
|
}
|
||||||
|
a:link {
|
||||||
|
color : #bb0000;
|
||||||
|
}
|
||||||
|
a:visited {
|
||||||
|
color : #ff0000;
|
||||||
|
}
|
||||||
|
.zitat {
|
||||||
|
margin-left : 1cm;
|
||||||
|
margin-right : 1cm;
|
||||||
|
font-style : italic;
|
||||||
|
}
|
||||||
|
#intro {
|
||||||
|
border-spacing : 1em;
|
||||||
|
border : 1px solid gray;
|
||||||
|
border-radius : 0.5em;
|
||||||
|
box-shadow : 10px 10px 5px #888;
|
||||||
|
margin : 1.5em;
|
||||||
|
font-size : .9em;
|
||||||
|
width : 600px;
|
||||||
|
max-width : 90%;
|
||||||
|
display : table;
|
||||||
|
margin-left : auto;
|
||||||
|
margin-right : auto;
|
||||||
|
font-size : .8em;
|
||||||
|
color : #555555;
|
||||||
|
}
|
||||||
|
#intro > p {
|
||||||
|
margin-top : 0;
|
||||||
|
}
|
||||||
|
#intro p:last-child {
|
||||||
|
margin-bottom : 0;
|
||||||
|
}
|
||||||
|
.last {
|
||||||
|
border-bottom : 1px solid black;
|
||||||
|
padding-bottom : .5em;
|
||||||
|
text-align : center;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-collapse : collapse;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
text-align : center;
|
||||||
|
}
|
||||||
|
.perms {
|
||||||
|
font-family : monospace;
|
||||||
|
font-size : .8em;
|
||||||
|
}
|
||||||
|
.repoapplist {
|
||||||
|
display : table;
|
||||||
|
border-collapse : collapse;
|
||||||
|
margin-left : auto;
|
||||||
|
margin-right : auto;
|
||||||
|
width : 600px;
|
||||||
|
max-width : 90%;
|
||||||
|
}
|
||||||
|
.approw, appdetailrow {
|
||||||
|
display : table-row;
|
||||||
|
}
|
||||||
|
.appdetailrow {
|
||||||
|
display : flex;
|
||||||
|
padding : .5em;
|
||||||
|
}
|
||||||
|
.appiconbig, .appdetailblock, .appdetailcell {
|
||||||
|
display : table-cell
|
||||||
|
}
|
||||||
|
.appiconbig {
|
||||||
|
vertical-align : middle;
|
||||||
|
text-align : center;
|
||||||
|
}
|
||||||
|
.appdetailinner {
|
||||||
|
width : 100%;
|
||||||
|
}
|
||||||
|
.applinkcell {
|
||||||
|
text-align : center;
|
||||||
|
float : right;
|
||||||
|
width : 100%;
|
||||||
|
margin-bottom : .1em;
|
||||||
|
}
|
||||||
|
.paddedlink {
|
||||||
|
margin : 1em;
|
||||||
|
}
|
||||||
|
.approw {
|
||||||
|
border-spacing : 1em;
|
||||||
|
border : 1px solid gray;
|
||||||
|
border-radius : 0.5em;
|
||||||
|
padding : 0.5em;
|
||||||
|
margin : 1.5em;
|
||||||
|
}
|
||||||
|
.appdetailinner .appdetailrow:first-child {
|
||||||
|
background-color : #d5d5d5;
|
||||||
|
}
|
||||||
|
.appdetailinner .appdetailrow:first-child .appdetailcell {
|
||||||
|
min-width : 33%;
|
||||||
|
flex : 1 33%;
|
||||||
|
text-align : center;
|
||||||
|
}
|
||||||
|
.appdetailinner .appdetailrow:first-child .appdetailcell:first-child {
|
||||||
|
text-align : left;
|
||||||
|
}
|
||||||
|
.appdetailinner .appdetailrow:first-child .appdetailcell:last-child {
|
||||||
|
float : none;
|
||||||
|
text-align : right;
|
||||||
|
}
|
||||||
|
.minor-details {
|
||||||
|
font-size : .8em;
|
||||||
|
color : #555555;
|
||||||
|
}
|
||||||
|
.boldname {
|
||||||
|
font-weight : bold;
|
||||||
|
}
|
||||||
|
#appcount {
|
||||||
|
text-align : center;
|
||||||
|
margin-bottom : .5em;
|
||||||
|
}
|
||||||
|
kbd {
|
||||||
|
padding : 0.1em 0.6em;
|
||||||
|
border : 1px solid #CCC;
|
||||||
|
background-color : #F7F7F7;
|
||||||
|
color : #333;
|
||||||
|
box-shadow : 0px 1px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 2px #FFF inset;
|
||||||
|
border-radius : 3px;
|
||||||
|
display : inline-block;
|
||||||
|
margin : 0px 0.1em;
|
||||||
|
text-shadow : 0px 1px 0px #FFF;
|
||||||
|
white-space : nowrap;
|
||||||
|
}
|
||||||
|
div.filterline, div.repoline {
|
||||||
|
display : table;
|
||||||
|
margin-left : auto;
|
||||||
|
margin-right : auto;
|
||||||
|
margin-bottom : 1em;
|
||||||
|
vertical-align : middle;
|
||||||
|
display : table;
|
||||||
|
font-size : .8em;
|
||||||
|
}
|
||||||
|
.filterline form {
|
||||||
|
display : table-row;
|
||||||
|
}
|
||||||
|
.filterline .filtercell {
|
||||||
|
display : table-cell;
|
||||||
|
vertical-align : middle;
|
||||||
|
}
|
||||||
|
fieldset {
|
||||||
|
float : left;
|
||||||
|
}
|
||||||
|
fieldset select, fieldset input, #reposelect select, #reposelect input {
|
||||||
|
font-size : .9em;
|
||||||
|
}
|
||||||
|
.pager {
|
||||||
|
display : table;
|
||||||
|
margin-left : auto;
|
||||||
|
margin-right : auto;
|
||||||
|
width : 600px;
|
||||||
|
max-width : 90%;
|
||||||
|
padding-top : .6em;
|
||||||
|
}
|
||||||
|
/* should correspond to .repoapplist */
|
||||||
|
.pagerrow {
|
||||||
|
display : table-row;
|
||||||
|
}
|
||||||
|
.pagercell {
|
||||||
|
display : table-cell;
|
||||||
|
}
|
||||||
|
.pagercell.left {
|
||||||
|
text-align : left;
|
||||||
|
padding-right : 1em;
|
||||||
|
}
|
||||||
|
.pagercell.middle {
|
||||||
|
text-align : center;
|
||||||
|
font-size : .9em;
|
||||||
|
color : #555;
|
||||||
|
}
|
||||||
|
.pagercell.right {
|
||||||
|
text-align : right;
|
||||||
|
padding-left : 1em;
|
||||||
|
}
|
||||||
|
.anti {
|
||||||
|
color : peru;
|
||||||
|
}
|
||||||
|
.antibold {
|
||||||
|
color : crimson;
|
||||||
|
}
|
||||||
|
#footer {
|
||||||
|
text-align : center;
|
||||||
|
margin-top : 1em;
|
||||||
|
font-size : 11px;
|
||||||
|
color : #555;
|
||||||
|
}
|
||||||
|
#footer img {
|
||||||
|
vertical-align : middle;
|
||||||
|
}
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.repoapplist {
|
||||||
|
display : block;
|
||||||
|
}
|
||||||
|
.appdetailinner, .appdetailrow {
|
||||||
|
display : block;
|
||||||
|
}
|
||||||
|
.appdetailcell {
|
||||||
|
display : block;
|
||||||
|
float : left;
|
||||||
|
line-height : 1.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
<!-- auto-generated - fdroid index updates will overwrite this file -->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
||||||
|
<meta content="width=device-width; initial-scale=1.0; minimum-scale=0.5; maximum-scale=2.0; user-scalable=1;" name="viewport">
|
||||||
|
<title>
|
||||||
|
Frajul's repo
|
||||||
|
</title>
|
||||||
|
<base href="index.html">
|
||||||
|
<link href="index.css" rel="stylesheet" type="text/css">
|
||||||
|
<link href="icons/icon.png" rel="icon" type="image/png">
|
||||||
|
<link href="icons/icon.png" rel="shortcut icon" type="image/png">
|
||||||
|
<meta content="Frajul's repo" property="og:site_name">
|
||||||
|
<meta content="Frajul's repo" property="og:title">
|
||||||
|
<meta content property="og:determiner">
|
||||||
|
<meta content="This is Frajul's fdroid repo containing all my apps in release as well as development state." property="og:description">
|
||||||
|
<meta content="index,nofollow" name="robots">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2>
|
||||||
|
Frajul's repo
|
||||||
|
</h2>
|
||||||
|
<div id="intro">
|
||||||
|
<p style="margin-bottom:.2em;">
|
||||||
|
<span style="float:right;width:100px;margin-left:.5em;">
|
||||||
|
<a href="index.png" title="QR: test">
|
||||||
|
<img alt="QR: test" src="index.png" width="100">
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
This is Frajul's fdroid repo containing all my apps in release as well as development state.
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
Currently it serves
|
||||||
|
<kbd>
|
||||||
|
1
|
||||||
|
</kbd>
|
||||||
|
apps. To add it to your F-Droid app, scan the QR code (click it to enlarge) or use this link:
|
||||||
|
</p>
|
||||||
|
<p class="center" style="margin-top:.5em">
|
||||||
|
<a href="https://fdroid.link/#https://fdroid.julian-mutter.de/fdroid/repo?fingerprint=61A74BF9BA80E2C1E23F8614049F33FF45A2A8DB6E39A044CB575F48FD423966">
|
||||||
|
<code style="color:#000000;font-weight:bold;">
|
||||||
|
https://fdroid.julian-mutter.de/fdroid/repo
|
||||||
|
</code>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If you would like to manually verify the fingerprint (SHA-256) of the repository signing key, here it is:
|
||||||
|
<br>
|
||||||
|
<blockcode style="color:#000000;font-weight:bold;">
|
||||||
|
61 A7 4B F9 BA 80 E2 C1 E2 3F 86 14 04 9F 33 FF 45 A2 A8 DB 6E 39 A0 44 CB 57 5F 48 FD 42 39 66
|
||||||
|
</blockcode>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><fdroid><repo icon="icon.png" name="Frajul's repo" pubkey="308204f4308202dca0030201020209009bccfbba2ba8eb6e300d06092a864886f70d01010b050030273110300e060355040b1307462d44726f6964311330110603550403130a686f6d652e6c6f63616c3020170d3235303830353036313932375a180f32303532313232313036313932375a30273110300e060355040b1307462d44726f6964311330110603550403130a686f6d652e6c6f63616c30820222300d06092a864886f70d01010105000382020f003082020a0282020100d05732a2a53151743d17d821ba41ece154f764a2a702cb5d4ed82829e61e1a01043d18a5ece6d08311dc97d0eaa3b8688586e2d822b1c2e12b5036f3d15d88933ac3e67cc2a650196e88957898a02644c7fcdc931a062a55dd495fcf11d3fc68a5a15cda3616ef8724464d037b360b99e014cf8957921c2d53f65e8b690e1ea76096347bae6618895de44372664fdeda3745b93922b8e108222214221ce228d3535e3d585358e71bb9c11cbd6e12bf4f3907c45df2402181d116891ef98607b185f026d0491188884cf40852c49f837ed5b9d109e7c489d5fadb1f290a594b5373d21c31ee49f89997bb3b6120967b8d8542752dab657e2ca47c6f983ff9a075cab6b2db47ed5bcf94595aa718078c80c7c2651db57046eb06922dfffe17a5ffe99c548aba1782f28a9bbd155f399be87ae8823e81e9fba30f57f5285c776e73ae90492fe732ae0e099b2234184697fca5072ff6f45490b243e6fad014510627e30334b82ae334379f9fc9a863bce5d186d547f28ccced734719b5b30e4b5328cc4469bb6a5ea14e241055ec22879b2d6c6b0c499da790c0d2c18811571183a5c53a002a1ad7e004e2bb01484330e919cfcfe8d624ee096b0d56b4fda2c81bf23bebcd3a6965c0f70a04cbe175d06cbec8f7fc471ee4747649ed133f084447f11908ca8334d600eb5f0feabbc1f29cea6e3c519b37edf3540ac8a80a123d44a70203010001a321301f301d0603551d0e0416041458f13a031c3316b725a8c22e33a7a37521ea9e4a300d06092a864886f70d01010b05000382020100aa2284ac434d898e6b1881c26da6b10f29b4fdfab938695fe37e9744e8a503d6624e3a336f93bb3b830cd8491e4ecf64cbba36c87476ed3338a52002adb1e866a11189de8fa405767a4abfdea74d5a1324f5f2cd512e171ba9e315f5adef9b26f87c42f6a30756c742b13cdd07138225237142a57955f1653c1ea11a880ec7d96c5c3186c1658dee87cfbce7cab132e4b54819c70b285fc54f66b3d5eb32345c0b359f4016881c6a429f997b6963bb01a4e260bb2d075ceff6fa706b6380064ed7b41a1be0a1de782710aa03b8728562cebaf031d3d342b9b886e89364489b7dd0b567c8b4a7bcd65bc50de7db855b0075e6bdea536fe9802160d22afcc68c4666cff3b3509cdf63b76a1eda22fb63f45de76c32f69cd3259e418eb797032acdeb0d0b7d0cd90b2cbdea3c0a7d947f908f912e37727878215d4fa1bee2d8a8e3d83441e5557a6fdb4d85950f012c06b64754c73ac7f0d7e13fabb024fa494f406a3ec21390ad158b344fd38bb515b5cdb94becb12f2382013d7d30ed06f5166fb27cd362f65153c264e1b4007023d08fb5bcf8e08b239da237b2755cb05a9b7f8082bf89a758b8d124ba4302a418fc4621f934d75cdca971e21fff8bce7b726b2a434d226fdfef6f8add9b6fd83bf29dd69ef719a851fd0863c5f60c2f665c7909d1175da9bcf23bf5d314ec88b0170f80bf393c321de599b21fd9ff7d1411ed" timestamp="1770871832" url="https://fdroid.julian-mutter.de/fdroid/repo" version="20002"><description>This is Frajul's fdroid repo containing all my apps in release as well as development state.</description></repo><application id="com.example.sheetless"><id>com.example.sheetless</id><added>2025-08-05</added><lastupdated>2025-08-05</lastupdated><name>sheetless</name><summary></summary><desc>No description available</desc><license>Unknown</license><categories>repo-frajul</categories><category>repo-frajul</category><web></web><source></source><tracker></tracker><marketversion></marketversion><marketvercode>2147483647</marketvercode><package><version>0.2.0</version><versioncode>1</versioncode><apkname>sheetless.apk</apkname><hash type="sha256">434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469</hash><size>63373156</size><sdkver>24</sdkver><targetSdkVersion>36</targetSdkVersion><added>2025-08-05</added><sig>6befcaf4267998cd7c7d367d3e7b5354</sig><permissions>INTERNET,com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION</permissions><nativecode>arm64-v8a,armeabi-v7a,x86_64</nativecode></package></application></fdroid>
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{"antiFeatures":{},"apksigner":"/nix/store/jlkx8vqd5aifnsg0bzrmdwg5127pk0lw-apksigner-35.0.6/bin/apksigner","archivePolicy0":[],"commandLine":["/nix/store/in55za5sszy2rpnm9wb7z4nx7kh4p830-fdroidserver-2.4.2/bin/fdroid update"],"disabled":[],"endTimestamp":1770871834406,"failedBuilds":{},"jarsigner":"/run/current-system/sw/bin/jarsigner","keytool":"/run/current-system/sw/bin/keytool","needsUpdate":["com.example.sheetless"],"noPackages":["com.example.sheetless"],"noUpdateCheck":["com.example.sheetless"],"stages":{"delete_disabled_builds":1770871832370,"index.make repo":1770871832375,"prepare_apps repo":1770871832374,"process_apks":1770871832370,"read_added_date_from_all_apks":1770871832374,"remove_apks":1770871832374,"scan_repo_files":1770871832370},"startTimestamp":1770868232000,"subcommand":"update"}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"antiFeatures":{},"apksigner":"/nix/store/jlkx8vqd5aifnsg0bzrmdwg5127pk0lw-apksigner-35.0.6/bin/apksigner","archivePolicy0":[],"commandLine":["/nix/store/in55za5sszy2rpnm9wb7z4nx7kh4p830-fdroidserver-2.4.2/bin/fdroid update"],"disabled":[],"endTimestamp":1770871834406,"failedBuilds":{},"jarsigner":"/run/current-system/sw/bin/jarsigner","keytool":"/run/current-system/sw/bin/keytool","needsUpdate":["com.example.sheetless"],"noPackages":["com.example.sheetless"],"noUpdateCheck":["com.example.sheetless"],"stages":{"delete_disabled_builds":1770871832370,"index.make repo":1770871832375,"prepare_apps repo":1770871832374,"process_apks":1770871832370,"read_added_date_from_all_apks":1770871832374,"remove_apks":1770871832374,"scan_repo_files":1770871832370},"startTimestamp":1770868232000,"subcommand":"update"}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"METADATA_VERSION": 20002,
|
||||||
|
"allow_disabled_algorithms": false,
|
||||||
|
"sheetless.apk": {
|
||||||
|
"hash": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469",
|
||||||
|
"hashType": "sha256",
|
||||||
|
"uses-permission": [
|
||||||
|
[
|
||||||
|
"android.permission.INTERNET",
|
||||||
|
null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION",
|
||||||
|
null
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"uses-permission-sdk-23": [],
|
||||||
|
"features": [],
|
||||||
|
"icons_src": {},
|
||||||
|
"icons": {},
|
||||||
|
"antiFeatures": {},
|
||||||
|
"packageName": "com.example.sheetless",
|
||||||
|
"versionCode": 1,
|
||||||
|
"name": "sheetless",
|
||||||
|
"versionName": "0.2.0",
|
||||||
|
"minSdkVersion": 24,
|
||||||
|
"targetSdkVersion": 36,
|
||||||
|
"nativecode": [
|
||||||
|
"arm64-v8a",
|
||||||
|
"armeabi-v7a",
|
||||||
|
"x86_64"
|
||||||
|
],
|
||||||
|
"sig": "6befcaf4267998cd7c7d367d3e7b5354",
|
||||||
|
"signer": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce",
|
||||||
|
"size": 63373156,
|
||||||
|
"apkName": "sheetless.apk",
|
||||||
|
"added": 1754377910.0
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770867053000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "d4fd17cff4b06c112814596a378d0a9886d5a2bef7d98f328097b1262463f4a6"}, "versions": {"5b767e2a8ff69867a53406184f2469119e64d12d5418f6e60916cb0c04d6dedf": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "5b767e2a8ff69867a53406184f2469119e64d12d5418f6e60916cb0c04d6dedf", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["d4fd17cff4b06c112814596a378d0a9886d5a2bef7d98f328097b1262463f4a6"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770867889000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "a53cfc01f8d00b65ba424e0078e1ebdaa9dc73e8f591ea74616108c5aeb66f33"}, "versions": {"35af8ff102f332f06edde3e1a20fa6c31a7a3ab89a6ceecad4ac003af133e024": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "35af8ff102f332f06edde3e1a20fa6c31a7a3ab89a6ceecad4ac003af133e024", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["a53cfc01f8d00b65ba424e0078e1ebdaa9dc73e8f591ea74616108c5aeb66f33"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770867892000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "a53cfc01f8d00b65ba424e0078e1ebdaa9dc73e8f591ea74616108c5aeb66f33"}, "versions": {"35af8ff102f332f06edde3e1a20fa6c31a7a3ab89a6ceecad4ac003af133e024": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "35af8ff102f332f06edde3e1a20fa6c31a7a3ab89a6ceecad4ac003af133e024", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["a53cfc01f8d00b65ba424e0078e1ebdaa9dc73e8f591ea74616108c5aeb66f33"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770868831000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "86ba90ac4cd633a9e7506f86efa935b4477d82d85d2c58127de476c8224ad5ce"}, "versions": {"523a2afc0741c0c75049fa27cbb85482f04a9a62ddb90e30b0d5f761b75e52af": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "523a2afc0741c0c75049fa27cbb85482f04a9a62ddb90e30b0d5f761b75e52af", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["86ba90ac4cd633a9e7506f86efa935b4477d82d85d2c58127de476c8224ad5ce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770868833000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "86ba90ac4cd633a9e7506f86efa935b4477d82d85d2c58127de476c8224ad5ce"}, "versions": {"523a2afc0741c0c75049fa27cbb85482f04a9a62ddb90e30b0d5f761b75e52af": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "523a2afc0741c0c75049fa27cbb85482f04a9a62ddb90e30b0d5f761b75e52af", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["86ba90ac4cd633a9e7506f86efa935b4477d82d85d2c58127de476c8224ad5ce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770869424000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "9e51517d5f435c69dcc7380998011376ddf0cbfba99de39cc45706beeae61ccd"}, "versions": {"7fd8bd4f70da9aaf0758774189d651fab81bb844a2d2681f846f3eac8034910f": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "7fd8bd4f70da9aaf0758774189d651fab81bb844a2d2681f846f3eac8034910f", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["9e51517d5f435c69dcc7380998011376ddf0cbfba99de39cc45706beeae61ccd"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770869426000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "9e51517d5f435c69dcc7380998011376ddf0cbfba99de39cc45706beeae61ccd"}, "versions": {"7fd8bd4f70da9aaf0758774189d651fab81bb844a2d2681f846f3eac8034910f": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "7fd8bd4f70da9aaf0758774189d651fab81bb844a2d2681f846f3eac8034910f", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["9e51517d5f435c69dcc7380998011376ddf0cbfba99de39cc45706beeae61ccd"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770870688000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "3871434d37bcab349352d1b839879eb5590a6f941cee83cae5869eadc597437e"}, "versions": {"da971d6f53700a2b4cc44e28f8a99dba925ad8f9f5c1d63b39e7886ab2dbb204": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "da971d6f53700a2b4cc44e28f8a99dba925ad8f9f5c1d63b39e7886ab2dbb204", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["3871434d37bcab349352d1b839879eb5590a6f941cee83cae5869eadc597437e"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770870690000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "3871434d37bcab349352d1b839879eb5590a6f941cee83cae5869eadc597437e"}, "versions": {"da971d6f53700a2b4cc44e28f8a99dba925ad8f9f5c1d63b39e7886ab2dbb204": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "da971d6f53700a2b4cc44e28f8a99dba925ad8f9f5c1d63b39e7886ab2dbb204", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["3871434d37bcab349352d1b839879eb5590a6f941cee83cae5869eadc597437e"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770871830000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"repo": {"name": {"en-US": "Frajul's repo"}, "description": {"en-US": "This is Frajul's fdroid repo containing all my apps in release as well as development state."}, "icon": {"en-US": {"name": "/icons/icon.png", "sha256": "7acef9d5d36134905a34482ba1bda6af4cd6458c87df27fca2244c1cebda4095", "size": 829}}, "address": "https://fdroid.julian-mutter.de/fdroid/repo", "timestamp": 1770871832000, "categories": {"repo-frajul": {"name": {"en-US": "repo-frajul"}}}}, "packages": {"com.example.sheetless": {"metadata": {"added": 1754377910000, "categories": ["repo-frajul"], "lastUpdated": 1754377910000, "name": {"en-US": "sheetless"}, "preferredSigner": "821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"}, "versions": {"434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469": {"added": 1754377910000, "file": {"name": "/sheetless.apk", "sha256": "434ba657b0898a17ef9bf9b57d9e0ce7ffeed2488b92cef928d7a91a9ba7d469", "size": 63373156}, "manifest": {"nativecode": ["arm64-v8a", "armeabi-v7a", "x86_64"], "versionName": "0.2.0", "versionCode": 1, "usesSdk": {"minSdkVersion": 24, "targetSdkVersion": 36}, "signer": {"sha256": ["821568ad07f71143d3d837ca57d9fefd6ee38191e2bcd35d7f8eb3034dc69fce"]}, "usesPermission": [{"name": "android.permission.INTERNET"}, {"name": "com.example.sheetless.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"}]}}}}}}
|
||||||
Generated
-27
@@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1781577229,
|
|
||||||
"narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "567a49d1913ce81ac6e9582e3553dd90a955875f",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
{
|
|
||||||
description = "Docker image with Nginx, F-Droid, and a 30-minute periodic task";
|
|
||||||
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = {nixpkgs, ...}: let
|
|
||||||
system = "x86_64-linux";
|
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
|
|
||||||
periodicScript = pkgs.writeShellScript "run-update" (builtins.readFile ./hosting/update.sh);
|
|
||||||
caddyConfig = ./hosting/Caddyfile;
|
|
||||||
|
|
||||||
entrypoint = pkgs.writeShellScript "entrypoint" ''
|
|
||||||
# Ensure necessary directories exist
|
|
||||||
mkdir -p /repo/fdroid/repo /tmp/caddy_data /tmp/caddy_config
|
|
||||||
|
|
||||||
# Start the background loop (1800 seconds = 30 minutes)
|
|
||||||
echo "Starting 30-minute background loop..."
|
|
||||||
while true; do
|
|
||||||
${periodicScript}
|
|
||||||
${pkgs.coreutils}/bin/sleep 1800
|
|
||||||
done &
|
|
||||||
|
|
||||||
# Set environment variables so Caddy writes its state to /tmp instead of /root
|
|
||||||
export XDG_DATA_HOME=/tmp/caddy_data
|
|
||||||
export XDG_CONFIG_HOME=/tmp/caddy_config
|
|
||||||
|
|
||||||
# Start Caddy in the foreground
|
|
||||||
echo "Starting Caddy..."
|
|
||||||
exec ${pkgs.caddy}/bin/caddy run --config ${caddyConfig} --adapter caddyfile
|
|
||||||
'';
|
|
||||||
|
|
||||||
deploy-script = pkgs.writeShellScriptBin "deploy" ''
|
|
||||||
${pkgs.nix}/bin/nix build .#container
|
|
||||||
|
|
||||||
${pkgs.skopeo}/bin/skopeo copy \
|
|
||||||
--registries-conf /dev/null \
|
|
||||||
docker-archive:result \
|
|
||||||
docker://gitlab.julian-mutter.de/julian/fdroid-frajul:latest
|
|
||||||
'';
|
|
||||||
|
|
||||||
dockerImage = pkgs.dockerTools.buildLayeredImage {
|
|
||||||
name = "gitlab.julian-mutter.de/julian/fdroid-frajul";
|
|
||||||
tag = "latest";
|
|
||||||
|
|
||||||
contents = with pkgs; [
|
|
||||||
coreutils
|
|
||||||
bashInteractive
|
|
||||||
caddy
|
|
||||||
dockerTools.fakeNss # Provides fake /etc/passwd for basic user emulation
|
|
||||||
dockerTools.usrBinEnv
|
|
||||||
dockerTools.binSh
|
|
||||||
dockerTools.caCertificates
|
|
||||||
|
|
||||||
fdroidserver
|
|
||||||
jq
|
|
||||||
curl
|
|
||||||
sops
|
|
||||||
git
|
|
||||||
];
|
|
||||||
|
|
||||||
config = {
|
|
||||||
Cmd = ["${entrypoint}"];
|
|
||||||
WorkingDir = "/src";
|
|
||||||
ExposedPorts = {
|
|
||||||
"8080/tcp" = {};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
maxLayers = 10;
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
# nix build .#container
|
|
||||||
# docker load < result
|
|
||||||
packages.${system}.container = dockerImage;
|
|
||||||
devShells.${system}.default = pkgs.mkShell {
|
|
||||||
packages = [
|
|
||||||
deploy-script
|
|
||||||
|
|
||||||
pkgs.skopeo
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
:8080 {
|
|
||||||
# 1. Exact match redirect from root to the repo
|
|
||||||
redir / /fdroid/repo/ 302
|
|
||||||
|
|
||||||
# 2. Redirect without trailing slash to ensure correct routing
|
|
||||||
redir /fdroid/repo /fdroid/repo/ 302
|
|
||||||
|
|
||||||
# 3. Strip '/fdroid/repo' from the URL and serve the underlying files
|
|
||||||
handle_path /fdroid/repo/* {
|
|
||||||
root * /repo/fdroid/repo
|
|
||||||
file_server browse
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Use lightweight Nginx + Git
|
||||||
|
FROM nginx:alpine
|
||||||
|
|
||||||
|
# Install git and bash
|
||||||
|
RUN apk add --no-cache git bash
|
||||||
|
|
||||||
|
# Copy nginx config
|
||||||
|
COPY nginx.conf /etc/nginx/nginx.conf
|
||||||
|
|
||||||
|
# Copy update script
|
||||||
|
COPY update.sh /update.sh
|
||||||
|
RUN chmod +x /update.sh
|
||||||
|
|
||||||
|
# Start update loop + nginx
|
||||||
|
CMD ["/bin/bash", "-c", "/update.sh & nginx -g 'daemon off;'"]
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
docker build . -t gitlab.julian-mutter.de/julian/fdroid-frajul:latest
|
|
||||||
docker push gitlab.julian-mutter.de/julian/fdroid-frajul:latest
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
events {}
|
||||||
|
http {
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name = fdroid.julian-mutter.de;
|
||||||
|
|
||||||
|
location = / {
|
||||||
|
return 302 /fdroid/repo;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /fdroid/repo {
|
||||||
|
alias /repo/fdroid/repo/;
|
||||||
|
autoindex on;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Executable → Regular
+13
-49
@@ -1,61 +1,25 @@
|
|||||||
#!/usr/bin/env bash
|
#! /bin/bash
|
||||||
|
|
||||||
# Config
|
if [ ! -d "/repo/.git" ]; then
|
||||||
REPO_URL="https://gitlab.julian-mutter.de/julian/fdroid-frajul"
|
|
||||||
BRANCH="master"
|
|
||||||
|
|
||||||
if [ ! -d "./code/.git" ]; then
|
|
||||||
echo "Performing initial setup!"
|
|
||||||
echo "Current working directory: $(pwd)"
|
|
||||||
mkdir ./code
|
|
||||||
echo "Cloning repository..."
|
echo "Cloning repository..."
|
||||||
git clone --branch "$BRANCH" "$REPO_URL" "./code"
|
git clone --branch "$BRANCH" "$REPO_URL" "/repo"
|
||||||
echo "Decrypting secrets..."
|
|
||||||
cd ./code
|
|
||||||
./scripts/decrypt.sh
|
|
||||||
echo "Done"
|
|
||||||
else
|
|
||||||
cd "./code"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Running regular repo update..."
|
while true; do
|
||||||
echo ""
|
echo "Running repo update..."
|
||||||
|
|
||||||
|
cd "/repo" || exit
|
||||||
git fetch origin
|
git fetch origin
|
||||||
LOCAL=$(git rev-parse HEAD)
|
LOCAL=$(git rev-parse HEAD)
|
||||||
REMOTE=$(git rev-parse "origin/$BRANCH")
|
REMOTE=$(git rev-parse origin/binaries)
|
||||||
|
|
||||||
NEED_FDROID_UPDATE=false
|
|
||||||
|
|
||||||
# Update repo
|
|
||||||
if [ "$LOCAL" != "$REMOTE" ]; then
|
if [ "$LOCAL" != "$REMOTE" ]; then
|
||||||
NEED_FDROID_UPDATE=true
|
echo "Updating repo..."
|
||||||
echo "Pulling repo..."
|
git reset --hard origin/binaries
|
||||||
git pull "origin/$BRANCH"
|
echo "Update complete."
|
||||||
echo "Pull complete"
|
|
||||||
echo "Decrypting secrets..."
|
|
||||||
./scripts/decrypt.sh
|
|
||||||
echo "Done"
|
|
||||||
else
|
else
|
||||||
echo "No changes in repo."
|
echo "Nothing to do."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Update apks
|
sleep 600 # check every 10 min
|
||||||
echo "Updating apks..."
|
done
|
||||||
./scripts/update-apks.sh
|
|
||||||
|
|
||||||
if [ $? -eq 10 ]; then
|
|
||||||
NEED_FDROID_UPDATE=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Run fdroid update if needed
|
|
||||||
if [ "$NEED_FDROID_UPDATE" = true ]; then
|
|
||||||
echo "Running fdroid update..."
|
|
||||||
cd fdroid
|
|
||||||
fdroid update -c
|
|
||||||
fdroid update
|
|
||||||
echo "Done"
|
|
||||||
else
|
|
||||||
echo "No changes made so no fdroid update necessary."
|
|
||||||
echo "Done"
|
|
||||||
fi
|
|
||||||
|
|||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
git checkout master
|
||||||
|
git add .
|
||||||
|
git commit -m "Update from CI"
|
||||||
|
git push origin master
|
||||||
|
|
||||||
|
git branch -D binaries
|
||||||
|
git checkout --orphan binaries
|
||||||
|
git add -f fdroid/repo/*.apk
|
||||||
|
git commit -m "Add latest apks"
|
||||||
|
git push --force origin binaries
|
||||||
|
git checkout master
|
||||||
|
git branch -D binaries
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
# ==========================================
|
|
||||||
# CONFIGURATION
|
|
||||||
# ==========================================
|
|
||||||
GITEA_URL="https://gitlab.julian-mutter.de"
|
|
||||||
REPO_OWNER="julian"
|
|
||||||
REPO_NAME="sheetless"
|
|
||||||
APP_NAME="de.frajul.sheetless"
|
|
||||||
TARGET_ASSET_NAME="app-release.apk"
|
|
||||||
APK_DIR="/apks"
|
|
||||||
|
|
||||||
# ==========================================
|
|
||||||
# SETUP & API CALL
|
|
||||||
# ==========================================
|
|
||||||
mkdir -p "$APK_DIR"
|
|
||||||
|
|
||||||
API_URL="${GITEA_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/releases"
|
|
||||||
|
|
||||||
echo "Fetching releases from Gitea..."
|
|
||||||
RELEASES_JSON=$(curl -sL "$API_URL")
|
|
||||||
|
|
||||||
# Check if Gitea returned a valid JSON array
|
|
||||||
if ! echo "$RELEASES_JSON" | jq -e 'type == "array"' >/dev/null; then
|
|
||||||
echo "Error: Failed to fetch releases. Check your URL, Repo names, or Token."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ==========================================
|
|
||||||
# SYNC LOGIC
|
|
||||||
# ==========================================
|
|
||||||
UPDATE_TRIGGERED=false
|
|
||||||
|
|
||||||
echo "Processing versioned releases for asset: $TARGET_ASSET_NAME"
|
|
||||||
|
|
||||||
# Single jq command to:
|
|
||||||
# 1. Ignore "latest" releases
|
|
||||||
# 2. Extract ONLY the matching asset URL
|
|
||||||
# 3. Output as Tab-Separated Values (TSV) for safe bash reading
|
|
||||||
while IFS=$'\t' read -r TAG DOWNLOAD_URL; do
|
|
||||||
|
|
||||||
# Skip empty lines if jq returns nothing
|
|
||||||
[[ -z "$TAG" ]] && continue
|
|
||||||
|
|
||||||
LOCAL_FILE="$APK_DIR/${APP_NAME}_${TAG}.apk"
|
|
||||||
|
|
||||||
echo "Checking release: $TAG..."
|
|
||||||
|
|
||||||
if [[ -f "$LOCAL_FILE" ]]; then
|
|
||||||
echo " -> Already exists locally. Skipping."
|
|
||||||
else
|
|
||||||
echo " -> Downloading new version: $LOCAL_FILE"
|
|
||||||
|
|
||||||
curl -sL -o "$LOCAL_FILE" "$DOWNLOAD_URL"
|
|
||||||
|
|
||||||
UPDATE_TRIGGERED=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Feed the jq output into the loop from the bottom
|
|
||||||
done < <(echo "$RELEASES_JSON" | jq -r --arg target "$TARGET_ASSET_NAME" '
|
|
||||||
.[]
|
|
||||||
| select(.tag_name != "latest")
|
|
||||||
| .tag_name as $tag
|
|
||||||
| .assets[]
|
|
||||||
| select(.name == $target)
|
|
||||||
| "\($tag)\t\(.browser_download_url)"
|
|
||||||
')
|
|
||||||
|
|
||||||
if [ "$UPDATE_TRIGGERED" = true ]; then
|
|
||||||
echo "Sync complete. New updates were downloaded."
|
|
||||||
exit 10
|
|
||||||
else
|
|
||||||
echo "Sync complete. No new updates found."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Put here all apk update scripts
|
|
||||||
UPDATE_SCRIPTS=(
|
|
||||||
"./scripts/apk-update-scripts/sheetless.sh"
|
|
||||||
)
|
|
||||||
|
|
||||||
for script in "${UPDATE_SCRIPTS[@]}"; do
|
|
||||||
echo "--------------------------------"
|
|
||||||
echo "Executing: $script"
|
|
||||||
|
|
||||||
# Run the script
|
|
||||||
$script
|
|
||||||
done
|
|
||||||
|
|
||||||
# Sync all apks from the mounted dir to dest
|
|
||||||
SOURCE="/apks/"
|
|
||||||
DEST="/src/code/fdroid/repo/"
|
|
||||||
|
|
||||||
HASH_BEFORE=$(ls -l "$DEST" | sha256sum)
|
|
||||||
|
|
||||||
echo "Syncing apks in directory $DEST with $SOURCE..."
|
|
||||||
rsync -rv --include="*.apk" --exclude="*" --delete "$SOURCE" "$DEST"
|
|
||||||
|
|
||||||
HASH_AFTER=$(ls -l "$DEST" | sha256sum)
|
|
||||||
|
|
||||||
if [ "$HASH_BEFORE" == "$HASH_AFTER" ]; then
|
|
||||||
echo "No APKs were added or removed. Skipping F-Droid update."
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
echo "Changes detected! Files were copied or deleted."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
# !/bin/sh
|
||||||
|
|
||||||
|
cd fdroid
|
||||||
|
fdroid update -c
|
||||||
|
fdroid update
|
||||||
Reference in New Issue
Block a user