Add hugo website

This commit is contained in:
Joshua Goins 2022-04-08 20:41:15 -04:00
parent b3e6b4e050
commit 97417bb1b7
29 changed files with 565 additions and 2 deletions

View file

@ -4,9 +4,9 @@ COPY . /site
WORKDIR /site
ARG DOMAIN
#RUN hugo --baseURL ${DOMAIN}
RUN hugo --baseURL ${DOMAIN}
FROM caddy
COPY Caddyfile /etc/caddy/Caddyfile
#COPY --from=build /site/public /srv
COPY --from=build /site/public /srv

6
archetypes/default.md Normal file
View file

@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

23
config.toml Normal file
View file

@ -0,0 +1,23 @@
languageCode = "en-us"
title = "xiv.zone"
theme = "mytheme"
summaryLength = 30
disableHugoGeneratorInject = true
enableEmoji = true
[params]
mainSections = ["astra"]
[privacy]
[privacy.disqus]
disable = true
[privacy.googleAnalytics]
disable = true
[privacy.instagram]
disable = true
[privacy.twitter]
disable = true
[privacy.vimeo]
disable = true
[privacy.youtube]
disable = true

27
content/astra/_index.md Normal file
View file

@ -0,0 +1,27 @@
---
title: "Astra"
layout: "single"
---
A FFXIV launcher that supports multiple profiles and Dalamud plugins. It also supports Windows, macOS and Linux natively!
![Main Screenshot](main-screenshot.png)
{{< begin-grid >}}
{{< blurb title="Wine Support" description="You can use Wine easily on macOS and Linux where FFXIV is not native." >}}
{{< blurb title="Dalamud Support" description="You can use Dalamud plugins out of the box just like FFXIVQuickLauncher." >}}
{{< blurb title="Native Interface" description="The interface looks native on Windows, macOS and Linux." >}}
{{< blurb title="Multiple Profiles" description="Almost all of the settings can be set per-profile." >}}
{{< blurb title="Encrypted Arguments" description="Game arguments are encrypted out of the box, so it's just as secure as other launchers." >}}
{{< blurb title="Secure Password Storage" description="Login information is encrypted using your system keychain and is never stored plain-text." >}}
{{< end-grid >}}
## Get Involved & Support
{{< begin-grid >}}
{{< blurb title="Download" description="Install the latest version on your preferred operating system." url="/astra/install" >}}
{{< blurb title="Get Source" description="The full source code for Astra is available on sourcehut." url="https://sr.ht/~redstrate/astra" >}}
{{< blurb title="Give Feedback" description="Send an email on the mailing list for feature requests, bugs, and patches." url="https://lists.sr.ht/~redstrate/astra-dev" >}}
{{< blurb title="Donate Money" description="Any monetary contribution helps so I can continue working on this in my free time." url="https://ko-fi.com/redstrate" >}}
{{< end-grid >}}

130
content/astra/changelog.md Normal file
View file

@ -0,0 +1,130 @@
# Astra
## Changelog
### 0.4.0
**Note: this is not released yet.**
It's time for another big release of Astra! There's a lot of exciting features this time around, including:
#### Game boot updating support
This is a small but important change, as this is a sort of "baby step" towards game patch support. To clairfy, your "game boot" is the files in the `boot` folder in your
game directory. This includes stuff like the official launcher, ffxivboot.exe, among other things. This happens transparently when you log in, just like the official launcher does.
#### Game installation support
Astra can now install the game for you if you don't have it installed already! Unfortunately due to unshield (the library it uses to extract game data from the installer) is not yet available for Windows, so this feature is limited to macOS and Linux users at the moment. I hope to have this fixed soon.
#### Prebuilt binaries and AUR packages are now available!
Now at long last there are now prebuilt binaries available! I'm very sorry this took so long, but I wanted to make sure the launcher was in a good place before I started distributing these to users that aren't developers. However there are some notes for each platform:
##### Windows
Unfortunately I do not have an installer prepared, so this is a "portable binary". Just put this anywhere (it doesn't matter where) and run it. The application data is stored in your `AppData` folder, so it doesn't matter where you place the executable. This should work on any recent Windows version, but I only have tested Windows 10 personally.
Unfortunately, **this application does not auto-update at the moment**.
##### macOS
I do have an Apple Developer license, so the app is notarized to work outside of the App Store. Please confirm the developer reads as "Joshua Goins" so you know the app is coming directly from me. Unfortunately, **this app does not auto-update at the moment**.
##### Linux
If you're on Arch Linux, I also maintain the AUR package so that's an option for you as well. I hope to expand my Linux package offerings later on. Unfortunately there is no other precompiled binaries, but I am working on publishing a Flatpak soon.
### News & Topics
Now you can view the news in Astra, so you aren't missing out! Right now the news selection is incredibly basic, and you only get the main banner nor does it properly "slideshow". I hope to address this soon in a follow up release.
### More asset updates
The asset updater got an overhaul, and now will display in a pretty little dialog window that is now cancellable! Fortunately, this dialog should never show up as the gooatscorp CDN and my webserver is plenty fast to download from, so don't freak out if you don't see anything.
### Additional stuff
* The login error message is now pulled directly from Square Enix's response, such as "timeout" and "locked accout" errors that might occur.
* Astra now uses libxiv. This is included as a submodule so no seperate install is required.
* Astra and nativelauncher's communication is now much more stable, and you will get less bootups with Dalamud not injecting properly.
* Unencrypted game arguments now work again, and custom wine executables are fixed. Thank you @mariakeating for your contribution!
---
### 0.3.1
This is a incremental release, meant for the eventual release on the AUR.
However, it does include some important changes:
* Dalamud assets and runtime are now downloaded automatically and also kept up to date for you.
* System libraries are now used for qt5-keychain and quazip if found on your system.
---
### 0.3.0
Hello again! It's time for another big update :-)
#### Name Change
If you haven't noticed already, I changed the name from `xivlauncher` to Astra! Now that this is finally out of the way, I can start distributing packages (I've started on a PKGBUILD already for Arch users) and it's another step towards being fully stable. Unfortunately this means your **config is lost unless you rename it manually**. Dalamud and nativelauncher will automatically redownload to the new data directory as well, but you can rename that as well.
#### Dalamud support
This is a big feature that I've been working on, and now it's finally ready to enter beta testing! For now, it is required to have **XIVLauncher
installed through Wine already**. The asset updater built into Astra doesn't have the capabilities to bootstrap a fresh Dalamud environment on it's own yet, so XIVQuickLauncher is still required for that purpose, although I recommend having it installed anyway :-)
Simply **tick the "Enable Dalamud Injection" setting** in your profile, and Dalamud/nativelauncher will download automatically and Astra will take care of the injection for you. Major thanks to the XIVQuickLauncher devs for writing the original ACL bypass relocated [here](https://github.com/redstrate/nativelauncher).
Dalamud is also automatically updated to the latest stable version automatically, in the future I hope to expand the updating options.
#### CLI Interface
There is now a basic CLI interface, and see you check all of it's options by running `astra --help`. This is pretty basic, but there's enough to have a nice auto-login script going. This isn't a true GUI-less experience though, as Astra still depends on Qt5 heavily, but I hope this is a good enough :-)
#### Maintenance Checks
The login button is now automatically disabled when Astra detects that the game server is under maintenance. In the future, I hope to make this feature more robust.
#### Arch Linux CI builds
Thank you @pepper-jelly for contributing the Github action, which runs and **automatically generates an Arch Linux binary to download**. This still is not ideal though, as this requires a Github account to download, but in the future I will provide real releases.
#### Settings are reorganized
The settings are reorganized a bit, i'm still not completely happy with the layout but it's much, much better than it was before.
![image](https://user-images.githubusercontent.com/54911369/155547834-08f46a7d-4201-4edb-abc9-c0b2a833eb84.png)
**Gamescope settings** were also added, which includes stuff like width, height, refresh rate and so on. I hope to keep expanding these in the future with more of the wine tweaks. Also, gamescope and gamemode are automatically disabled if they are not installed on your system.
There is now a dedicated Dalamud options box, I hope to expand this in the future with being able to enable/disable mods before launching the game, etc. This is part of my effort to better support dedicated/external tools (#14).
The boot/dalamud versions are now displayed in the profile settings as well!
#### Automatically closing
There is now an option to **automatically "close" Astra when the game is launched**, similar to how the official launcher and XIVQuickLauncher works. Due to how our processes are handled, the actual Astra process does not close, but is hidden until the game itself is closed - and that's when the actual application process quits. This option is **enabled by default**.
#### Tags are now signed
I now have a [public GPG key](https://redstrate.com/gpg-0x1DF57CA30D92A21B-2022-02-02.asc), and I will be **signing tags from now on**. This is to test the waters and make sure my GPG key is stable and works before I start having to sign more stuff - like commits, binary packages, and the like. This is also going to be essential for any packages that have be verified using my key.
#### Experimental stuff
There is also some experimental/untested stuff included in this release. When Endwalker launched, I quickly added [Watchdog](https://github.com/redstrate/astra/wiki/Watchdog) to help me through the long login queues. Also, I managed to forget about Steam support, so I skimmed and implemented a Steam option, but I don't have the game on Steam to test yet.
---
### 0.2.0
This is a major beta release which adds a bunch new features!
- Multiple profile support
- All of the settings you already use are now configurable, per profile. This includes server type, directx mode, and a whole bunch of neat configurable things. For people testing Sapphire servers or different types of wine this should be extremely useful!
- Encrypted game argument support
- On Windows, FFXIV "encrypts" (not really, just obfuscates) the game arguments otherwise your game login token (SID) is in plain-text. This now matches the behavior of the official xivboot.exe and also XIVQuickLauncher. This will become the new default option in the next release.
- Big thanks to XIVQuickLauncher where the code is based off of, as well as the information on xivdev.
- Custom wine prefix/executable options on Linux and macOS
These bugs are also fixed:
- Windows dependencies are now copied when building
- Windows "open game directory" button now works
- The built-in game wine is now the default (for real this time) on macOS
---
### 0.1.0
First public release!

19
content/astra/install.md Normal file
View file

@ -0,0 +1,19 @@
## Installation
The current version is [v0.4.0](/astra/changelog). You can tell which version you have by reading it in the `About` menu under `Help`.
### Windows
[Portable EXE](https://xiv.zone/astra-distrib/windows/Astra.exe)
### macOS
[App](https://xiv.zone/astra-distrib/macOS/Astra.app)
_Note: The app is signed and the developer should read as "Joshua Goins"._
### Linux
[AUR](https://aur.archlinux.org/packages/astra-launcher)
[Tarball](https://xiv.zone/astra-distrib/macOS/Astra.app)

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

20
themes/mytheme/LICENSE Normal file
View file

@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2022 Joshua Goins
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -0,0 +1,2 @@
+++
+++

View file

@ -0,0 +1,126 @@
@media screen and (min-width: 900px) {
#wrapper {
display: flex;
}
#center-wrapper {
width: 900px;
margin: auto;
}
}
html {
font-family: sans-serif;
--content-color: white;
--link-color: rgb(199, 26, 26);
--link-color-visited: rgb(128, 0, 0);
--content-border: 1px solid;
--border-color: white;
overflow-y: scroll;
color: #2f2f2f;
background-color: white;
}
hr {
height: 0px;
border: none;
border-top: 1px solid black;
}
body {
margin: 0;
}
header {
margin-bottom: 20px;
width: 100%;
height: 100%;
}
a:link {
color: var(--link-color);
}
a:visited {
color: var(--link-color-visited)
}
img {
max-width: 100%;
height: auto;
}
table {
border-collapse: collapse;
font-size: 10pt;
}
td {
border-top: 1px solid #ddd;
padding: 4px
}
main {
background-color: var(--content-color);
border: var(--content-border);
border-radius: 10px;
border-color: var(--border-color);
margin: 2px;
}
main > h2 {
margin: 0px;
}
@media screen and (max-width: 900px) {
#header-links {
justify-content: center;
flex-wrap: wrap;
}
html {
font-size: 1.1em;
}
header > h1 {
text-align: center;
}
#center-wrapper {
margin-left: 10px;
margin-right: 10px;
}
}
footer {
font-size: .9rem;
}
.blurb {
background-color: #eaeaea;
padding: 1em;
border-radius: 7px;
margin: 0.5em;
}
.blurb-button {
padding: 1em;
border-radius: 7px;
margin: 0.5em;
text-decoration: none;
}
.blurb-button:hover {
background-color: #eaeaea;
}
.blurb-button h4, .blurb h4 {
margin: 0 0 3px;
}
.buttons {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
margin: auto;
}

View file

@ -0,0 +1,5 @@
{{ define "main" }}
404 not found.
{{ end }}

View file

@ -0,0 +1,12 @@
{{- $url := .Destination | safeURL -}}
{{- $img := .Page.Resources.GetMatch .Destination -}}
{{- if and (not $img) .Page.File -}}
{{ $path := path.Join .Page.File.Dir .Destination }}
{{- $img = resources.Get $path -}}
{{- end -}}
{{- with $img -}}
{{- $large := $img.Resize "800x webp" -}}
<a class="gallery-img spotlight" href="{{ $img.RelPermalink }}" data-download="true"><img class="fancy-img" alt="{{ $.Text }}" width="{{ $large.Width }}" height="{{ $large.Height }}" src="{{ $large.RelPermalink }}" src="{{ $large.RelPermalink }}" /></a>
{{- else -}}
<a class="gallery-img spotlight" href="{{ .Destination | safeURL }}" data-download="true"><img class="fancy-img" src="{{ .Destination | safeURL }}" alt="{{ $.Text }}" />{{- end -}}</a>

View file

@ -0,0 +1,19 @@
{{ partial "head.html" . }}
<div id="center-wrapper">
{{ partial "header.html" . }}
<div id="wrapper">
<main>
<h2>{{ .Title }}</h2>
{{ .Content }}
</main>
</div>
</div>
</html>

View file

@ -0,0 +1,19 @@
{{ partial "head.html" . }}
<div id="center-wrapper">
{{ partial "header.html" . }}
<div id="wrapper">
<main>
{{- block "main" . }}{{- end }}
</main>
</div>
{{ partial "footer.html" . }}
</div>
</html>

View file

@ -0,0 +1,3 @@
{{ define "main" }}
{{ end }}

View file

@ -0,0 +1 @@
{{ .Content }}

View file

@ -0,0 +1,5 @@
{{ define "main" }}
<h2>{{ .Title }}</h2>
{{ .Content }}
{{ end }}

View file

@ -0,0 +1,5 @@
{{ define "main" }}
<ul>
<li><a href="/astra">Astra</a> - a cross-platform FFXIV launcher.</li>
</ul>
{{ end }}

View file

@ -0,0 +1,3 @@
<footer>
</footer>

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html
class=""
lang="{{ .Site.LanguageCode }}"
prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"
>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="theme-color" content="#fffff" media="(prefers-color-scheme: light)"/>
<meta name="theme-color" content="rgb(77, 77, 82)" media="(prefers-color-scheme: dark)"/>
{{ if .IsHome }}
<meta name="description" content="{{ $.Site.Params.description }}"/>
<title>{{.Site.Title}}</title>
{{ else }}
<title>{{.Site.Title}} - {{ .Title }}</title>
<meta name="description" content="{{ .Summary }}"/>
{{ end }}
<link rel="canonical" href="{{ .Permalink }}" />
<base href="{{ .Site.BaseURL }}">
{{ if .IsHome }}
{{ with .OutputFormats.Get "RSS" }}
<link href="{{ .RelPermalink }}" rel="alternate" type="application/rss+xml" title="{{ $.Title }}"/>
{{ end }}
{{ end }}
{{ $css := resources.Get "css/style.css" | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $css.Permalink }}" integrity="{{ $css.Data.Integrity }}" />
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
</head>

View file

@ -0,0 +1,14 @@
<header>
<h1>{{ .Site.Title}}</h1>
<nav id="header-links">
{{ range .Site.Menus.main }}
{{ $icon := .Params.icon}}
{{ if eq $.RelPermalink .URL }}
<p class="header-link" >{{ partial "svg" $icon }} {{ .Name }}</p>
{{ else }}
<a class="header-link" href="{{ .URL }}">{{ partial "svg" $icon }} {{ .Name }}</a>
{{ end }}
{{ end }}
</nav>
</header>

View file

@ -0,0 +1,53 @@
{{ $image := resources.Get "img/profile.jpg" }}
{{ with $image }}
{{ $resized := .Resize "webp 256x" }}
<img class="fancy-img" alt="Profile Picture" width="{{ $resized.Width }}" height="{{ $resized.Height }}" src="{{ $resized.Permalink }}"/>
{{ end }}
<div style="text-align: center; margin-top: 10px">
{{ $currentPage := . }}
{{ range $index, $element := .Site.Menus.formats }}
{{ $len := (len $.Site.Menus.formats) }}
<a class="header-link" title="{{ .Name }}" rel="me" href="{{ .URL }}">{{ .Name }}</A>
{{ if not (eq (add $index 1) $len) }}·{{ end }}
{{ end }}
</div>
<p>
Hey I do graphics dev, write tools, cross-platform stuff and contribute
where I can! I draw sometimes.
</p>
<hr>
<p>Accounts:</p>
<div id="social-links">
{{ $currentPage := . }}
{{ range .Site.Menus.links }}
{{ $icon := .Params.icon}}
<div><a class="header-link" title="{{ .Name }}" rel="me" href="{{ .URL }}">{{ partial "svg" $icon }} {{ .Name }}</a></div>
{{ end }}
</div>
<p>Contact:</p>
<div id="social-links">
{{ $currentPage := . }}
{{ range .Site.Menus.contact }}
{{ $icon := .Params.icon}}
<div><a class="header-link" title="{{ .Name }}" rel="me" href="{{ .URL }}">{{ partial "svg" $icon }} {{ .Name }}</a></div>
{{ end }}
</div>
<p>Donate:</p>
<div id="social-links">
{{ $currentPage := . }}
{{ range .Site.Menus.donate }}
{{ $icon := .Params.icon}}
<div><a class="header-link" title="{{ .Name }}" rel="me" href="{{ .URL }}">{{ partial "svg" $icon }} {{ .Name }}</a></div>
{{ end }}
</div>

View file

@ -0,0 +1,6 @@
{{ $svg := . }}
{{ $class := print $svg "-icon" }}
{{ $match := "<svg (.*)?>(.*)</svg>" }}
{{ $replaceWith := printf `<svg class="%s" ${1}>${2}</svg>` $class }}
{{ return (replaceRE $match $replaceWith (printf "/static/images/%s.svg" $svg | readFile) | safeHTML) }}

View file

@ -0,0 +1 @@
<div class="buttons">

View file

@ -0,0 +1,15 @@
{{ $title := .Get "title"}}
{{ $desc := .Get "description" }}
{{ if (.Get "url") }}
<a href='{{.Get "url"}}' class="blurb-button">
{{ else }}
<div class="blurb">
{{ end }}
<h4>{{$title}}</h4>
<p>{{$desc}}</p>
{{ if (.Get "url") }}
</a>
{{ else }}
</div>
{{ end }}

View file

@ -0,0 +1 @@
</div>

View file

@ -0,0 +1,2 @@
<!-- raw html -->
{{.Inner}}

10
themes/mytheme/theme.toml Normal file
View file

@ -0,0 +1,10 @@
name = "xiv.zone theme"
license = "MIT"
description = "A simple theme."
tags = []
features = []
min_version = "0.41.0"
[author]
name = "Joshua Goins"
homepage = "https://redstrate.com"