From 7acbd87221f6e4594edf3db029520997027a7bed Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sun, 2 Aug 2026 15:29:37 -0500 Subject: convert readme to nfo; convert docs to txt --- INSTANCES.md | 6 ------ INSTANCES.txt | 6 ++++++ README.md | 47 ----------------------------------------------- README.nfo | 47 +++++++++++++++++++++++++++++++++++++++++++++++ REDIRECTS.md | 13 ------------- REDIRECTS.txt | 13 +++++++++++++ SETUP.md | 56 -------------------------------------------------------- SETUP.txt | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ TODO.md | 27 --------------------------- TODO.txt | 27 +++++++++++++++++++++++++++ 10 files changed, 149 insertions(+), 149 deletions(-) delete mode 100755 INSTANCES.md create mode 100755 INSTANCES.txt delete mode 100755 README.md create mode 100644 README.nfo delete mode 100755 REDIRECTS.md create mode 100755 REDIRECTS.txt delete mode 100755 SETUP.md create mode 100755 SETUP.txt delete mode 100755 TODO.md create mode 100755 TODO.txt diff --git a/INSTANCES.md b/INSTANCES.md deleted file mode 100755 index b47d1b8..0000000 --- a/INSTANCES.md +++ /dev/null @@ -1,6 +0,0 @@ -JSON variant should be used from main: -[instances.json](https://github.com/krazywarez/skunky-art/blob/main/instances.json) - -|Instance|Yggdrasil|I2P|Tor|NSFW|Proxifying|Modified Sources|Country| -|:------:|:-------:|:-:|:-:|:--:|:--------:|:--------------:|:-----:| -|[krz.sh](https://art.krz.sh)|No|No|[Yes](http://mplqs2jxkjd5wxak3zjv55oxyadf4vwzx6ksgj4ztftndjl6elgsf4qd.onion)| Yes | Yes | No | United States | diff --git a/INSTANCES.txt b/INSTANCES.txt new file mode 100755 index 0000000..b47d1b8 --- /dev/null +++ b/INSTANCES.txt @@ -0,0 +1,6 @@ +JSON variant should be used from main: +[instances.json](https://github.com/krazywarez/skunky-art/blob/main/instances.json) + +|Instance|Yggdrasil|I2P|Tor|NSFW|Proxifying|Modified Sources|Country| +|:------:|:-------:|:-:|:-:|:--:|:--------:|:--------------:|:-----:| +|[krz.sh](https://art.krz.sh)|No|No|[Yes](http://mplqs2jxkjd5wxak3zjv55oxyadf4vwzx6ksgj4ztftndjl6elgsf4qd.onion)| Yes | Yes | No | United States | diff --git a/README.md b/README.md deleted file mode 100755 index 205fe36..0000000 --- a/README.md +++ /dev/null @@ -1,47 +0,0 @@ -> [!NOTE] -> This is a fork of [SkunkyArt](https://git.macaw.me/skunky/SkunkyArt). The -> upstream repository has not been updated in over a year, contains a number of -> unresolved bugs, and all of its previously listed instances were found to be -> dead links. This fork exists to keep the project maintained. - -SkunkyArt - -Instances: [`INSTANCES.md`](INSTANCES.md) - -## Description -SkunkyArt 🦨 — an alternative frontend for DeviantArt that works entirely -without JavaScript. - -## Build -It is recommended to build with the 'embed' tag because it embeds the presets in -the binary. If you plan to modify the templates, then do not use this tag. You -can also add the `-ldflags "-w -s"` argument (GCCGO has a different name for it -— `gccgoflags`) to reduce the size of the output file. Here is an example: - -`go build -tags embed -ldflags "-w -s"` - -Such a build reports its version as `dev`. To stamp one in, as the release -workflow does from the git tag, add `-X main.version=` to the ldflags. - -## Docker -Prebuilt multi-arch images (`linux/amd64`, `linux/arm64`) are published to GHCR -on every release tag: - -`docker pull ghcr.io/krazywarez/skunky-art:latest` - -Each release is tagged `1.3.3`, `1.3`, `1` and `latest`; pin an exact version if -you want reproducible upgrades. `compose.example.yaml` uses this image by -default and keeps a commented-out `build: .` for building from a checkout. -`compose.vpn_example.yml` does the same, plus an optional VPN egress sidecar. - -## Setup -The sample config is in the `config.example.json` file. For custom config, use -the `--config` option. - -See the [`SETUP.md`](SETUP.md) file for more info about directives. - -## Adding instance to the list -To do this, you must either make a PR by adding your instance to the -`instances.json` and `INSTANCES.md` files (you can use `--add-instance` -cli-argument to automatically add the instance to these files) or create an -Issue. diff --git a/README.nfo b/README.nfo new file mode 100644 index 0000000..39d14cb --- /dev/null +++ b/README.nfo @@ -0,0 +1,47 @@ +┌──────────────────────────────────────────────────────────────┐ +│ S K U N K Y A R T [ KRZ ] krz.sh │ +└──────────────────────────────────────────────────────────────┘ + +FORK + fork of SkunkyArt (https://git.macaw.me/skunky/SkunkyArt). upstream + hasn't updated in over a year, has open bugs, and its listed + instances are dead links. this fork keeps it maintained. + +WHAT + skunkyart. alternative frontend for deviantart. works with no + javascript. + + instances: INSTANCES.txt + +BUILD + build with the embed tag to embed presets in the binary. skip the + tag if you'll modify templates. add -ldflags "-w -s" (gccgo: + gccgoflags) to shrink the output: + + go build -tags embed -ldflags "-w -s" + + that build reports its version as dev. stamp one in with + -X main.version=, as the release workflow does from the + git tag. + +DOCKER + multi-arch images (linux/amd64, linux/arm64) publish to ghcr on + every release tag: + + docker pull ghcr.io/krazywarez/skunky-art:latest + + each release is tagged 1.3.3, 1.3, 1, and latest. pin an exact + version for reproducible upgrades. compose.example.yaml uses the + image; compose.vpn_example.yml adds an optional vpn egress sidecar. + +CONFIG + sample config in config.example.json. custom config with --config. + directive details in SETUP.txt. + +INSTANCES + add yours by pr to instances.json and INSTANCES.txt (or use + --add-instance to write both), or open an issue. + +┌──────────────────────────────────────────────────────────────┐ +│ krz.sh │ +└──────────────────────────────────────────────────────────────┘ diff --git a/REDIRECTS.md b/REDIRECTS.md deleted file mode 100755 index 2469977..0000000 --- a/REDIRECTS.md +++ /dev/null @@ -1,13 +0,0 @@ -# Search -* `deviantart.com/search?q=$QUERY` => `/search?q=$QUERY&type=all` -# Daily Deviations -* `deviantart.com` => `/dd` -# Deviations -* (`$USER_GROUP.deviantart.com/art/$ID`|`deviantart.com/$USER_GROUP/art/$ID`) => `/post/$USER_GROUP/$ID` -# Groups and users -## Main user page -* (`$USER_GROUP.deviantart.com`|`deviantart.com/$USER_GROUP`) => `/group_user?type=about&q=$USER_GROUP` -## Gallery -* (`$USER_GROUP.deviantart.com/gallery`|`deviantart.com/$USER_GROUP/gallery`) => `/group_user?type=gallery&q=$USER_GROUP` -## Favourites -* (`$USER_GROUP.deviantart.com/favourites`|`deviantart.com/$USER_GROUP/favourites`) => `/group_user?type=favourites&q=$USER_GROUP` diff --git a/REDIRECTS.txt b/REDIRECTS.txt new file mode 100755 index 0000000..2469977 --- /dev/null +++ b/REDIRECTS.txt @@ -0,0 +1,13 @@ +# Search +* `deviantart.com/search?q=$QUERY` => `/search?q=$QUERY&type=all` +# Daily Deviations +* `deviantart.com` => `/dd` +# Deviations +* (`$USER_GROUP.deviantart.com/art/$ID`|`deviantart.com/$USER_GROUP/art/$ID`) => `/post/$USER_GROUP/$ID` +# Groups and users +## Main user page +* (`$USER_GROUP.deviantart.com`|`deviantart.com/$USER_GROUP`) => `/group_user?type=about&q=$USER_GROUP` +## Gallery +* (`$USER_GROUP.deviantart.com/gallery`|`deviantart.com/$USER_GROUP/gallery`) => `/group_user?type=gallery&q=$USER_GROUP` +## Favourites +* (`$USER_GROUP.deviantart.com/favourites`|`deviantart.com/$USER_GROUP/favourites`) => `/group_user?type=favourites&q=$USER_GROUP` diff --git a/SETUP.md b/SETUP.md deleted file mode 100755 index 987041a..0000000 --- a/SETUP.md +++ /dev/null @@ -1,56 +0,0 @@ -# Units -Maximum file size in megabytes, requires numeric value.
-Time units: -* `i` — minutes -* `h` — hours -* `w` — weeks -* `m` — months -* `y` — years - -# Config -* `listen` — IP and port to listen on in the following form: ip:port -* `uri` — Instance URI. Example: `"uri":"/art/"` -> https://skunky.ebloid.ru/art/ -* `cache` — Caching system; default is off. - * `enabled` — Caching system state, requires boolean value - * `path` — Path to cache directory. It must be writable by the user SkunkyArt - runs as, and SkunkyArt refuses to start if it is not. The container image - runs as uid 10000, so a bind-mounted cache needs - `sudo chown -R 10000:10000 ` on the host. - * `memcache` — Also keep served media in RAM, on top of the on-disk cache. - Entries are scored by how often they are requested and dropped once they go - a round unused. The cache is bounded only by that scoring, so leave it off - unless you have RAM to spare for your traffic. - * `lifetime` — Cached file life time, requires numeric value, followed by multiplicative suffix (see Time Units for details) - * `max-size` — Maximum file size in megabytes - * `update-interval` — Automatic rotation interval -* `static-path` — This setting determines path to static, which will be copied to RAM when SkunkyArt is started. Useless if you're use binary compiled with 'embed' tag. -* `download-proxy` — Outbound proxy used when fetching media from DeviantArt's - CDN. Leave empty (`""`) unless you actually run a proxy: if this points at - something that isn't listening, every image 502s while pages still render, - because only media fetches go through it. Inside a container `127.0.0.1` is - the container itself, so a host-side proxy must be addressed by service name - or host IP, not loopback. -* `user-agent` — String, which SkunkyArt uses as UA -* `proxy` — Serve media through this instance instead of linking straight to - DeviantArt's CDN. Required by `cache`; when off, clients fetch images from - wixmp directly. -* `nsfw` — Show mature content. - -# Setting up reverse proxy -Pretty much business as usual, except for the [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto) header setting. - -Nginx example configuration: -```apache -server { - listen 443 ssl; - server_name skunky.example.com; - - # In case of subdomain, use / instend of ((BASE_URL)) - location ((BASE_URL)) { - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header Host $host; - proxy_http_version 1.1; - proxy_pass http://((IP)):((PORT)); - } -} -``` \ No newline at end of file diff --git a/SETUP.txt b/SETUP.txt new file mode 100755 index 0000000..987041a --- /dev/null +++ b/SETUP.txt @@ -0,0 +1,56 @@ +# Units +Maximum file size in megabytes, requires numeric value.
+Time units: +* `i` — minutes +* `h` — hours +* `w` — weeks +* `m` — months +* `y` — years + +# Config +* `listen` — IP and port to listen on in the following form: ip:port +* `uri` — Instance URI. Example: `"uri":"/art/"` -> https://skunky.ebloid.ru/art/ +* `cache` — Caching system; default is off. + * `enabled` — Caching system state, requires boolean value + * `path` — Path to cache directory. It must be writable by the user SkunkyArt + runs as, and SkunkyArt refuses to start if it is not. The container image + runs as uid 10000, so a bind-mounted cache needs + `sudo chown -R 10000:10000 ` on the host. + * `memcache` — Also keep served media in RAM, on top of the on-disk cache. + Entries are scored by how often they are requested and dropped once they go + a round unused. The cache is bounded only by that scoring, so leave it off + unless you have RAM to spare for your traffic. + * `lifetime` — Cached file life time, requires numeric value, followed by multiplicative suffix (see Time Units for details) + * `max-size` — Maximum file size in megabytes + * `update-interval` — Automatic rotation interval +* `static-path` — This setting determines path to static, which will be copied to RAM when SkunkyArt is started. Useless if you're use binary compiled with 'embed' tag. +* `download-proxy` — Outbound proxy used when fetching media from DeviantArt's + CDN. Leave empty (`""`) unless you actually run a proxy: if this points at + something that isn't listening, every image 502s while pages still render, + because only media fetches go through it. Inside a container `127.0.0.1` is + the container itself, so a host-side proxy must be addressed by service name + or host IP, not loopback. +* `user-agent` — String, which SkunkyArt uses as UA +* `proxy` — Serve media through this instance instead of linking straight to + DeviantArt's CDN. Required by `cache`; when off, clients fetch images from + wixmp directly. +* `nsfw` — Show mature content. + +# Setting up reverse proxy +Pretty much business as usual, except for the [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto) header setting. + +Nginx example configuration: +```apache +server { + listen 443 ssl; + server_name skunky.example.com; + + # In case of subdomain, use / instend of ((BASE_URL)) + location ((BASE_URL)) { + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_pass http://((IP)):((PORT)); + } +} +``` \ No newline at end of file diff --git a/TODO.md b/TODO.md deleted file mode 100755 index e5b372e..0000000 --- a/TODO.md +++ /dev/null @@ -1,27 +0,0 @@ -# TODO - -## v1.3.x - -- [ ] Clean up the messy code -- [ ] Add search filters -- [x] Make a port for FreeBSD -- [ ] **Finish parsing the description** -- [x] Implement strips in daily arts -- [x] Fix the page navigation bug -- [x] Make proper error display -- [x] Make the units in the config more understandable -- [ ] Add an instance checker for availability -- [x] Add viewing of a user's liked arts -- [ ] Add the ability to embed templates into the binary `[P]` -- [x] Implement thumbnails and optimize CSS for small screens -- [ ] Write a Makefile and a script for automatic instance deployment -- [ ] Fix the emoji bug where some custom emotes may not display -- [x] Add a `&filename` argument that serves the file with a properly formatted name -- [x] Improve the caching system: add a rating for eviction and copy images into RAM - -## v1.4 - -- [ ] Implement an API -- [ ] Implement themes -- [ ] Switch to arenas in the cache -- [ ] Implement a multilingual interface diff --git a/TODO.txt b/TODO.txt new file mode 100755 index 0000000..e5b372e --- /dev/null +++ b/TODO.txt @@ -0,0 +1,27 @@ +# TODO + +## v1.3.x + +- [ ] Clean up the messy code +- [ ] Add search filters +- [x] Make a port for FreeBSD +- [ ] **Finish parsing the description** +- [x] Implement strips in daily arts +- [x] Fix the page navigation bug +- [x] Make proper error display +- [x] Make the units in the config more understandable +- [ ] Add an instance checker for availability +- [x] Add viewing of a user's liked arts +- [ ] Add the ability to embed templates into the binary `[P]` +- [x] Implement thumbnails and optimize CSS for small screens +- [ ] Write a Makefile and a script for automatic instance deployment +- [ ] Fix the emoji bug where some custom emotes may not display +- [x] Add a `&filename` argument that serves the file with a properly formatted name +- [x] Improve the caching system: add a rating for eviction and copy images into RAM + +## v1.4 + +- [ ] Implement an API +- [ ] Implement themes +- [ ] Switch to arenas in the cache +- [ ] Implement a multilingual interface -- cgit v1.2.3