diff --git a/Dockerfile b/Dockerfile index 36f1baa..683a754 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..eaa9ff3 --- /dev/null +++ b/config.toml @@ -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 diff --git a/content/astra/_index.md b/content/astra/_index.md new file mode 100644 index 0000000..2636afc --- /dev/null +++ b/content/astra/_index.md @@ -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 >}} + diff --git a/content/astra/changelog.md b/content/astra/changelog.md new file mode 100644 index 0000000..3389920 --- /dev/null +++ b/content/astra/changelog.md @@ -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! diff --git a/content/astra/install.md b/content/astra/install.md new file mode 100644 index 0000000..befb6dd --- /dev/null +++ b/content/astra/install.md @@ -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) diff --git a/content/astra/main-screenshot.png b/content/astra/main-screenshot.png new file mode 100644 index 0000000..2531b5e Binary files /dev/null and b/content/astra/main-screenshot.png differ diff --git a/resources/_gen/images/astra/main-screenshot_hu19881f1cccbca9d0fa0ea6020d6522f3_307487_800x0_resize_q75_h2_box_3.webp b/resources/_gen/images/astra/main-screenshot_hu19881f1cccbca9d0fa0ea6020d6522f3_307487_800x0_resize_q75_h2_box_3.webp new file mode 100644 index 0000000..95ee906 Binary files /dev/null and b/resources/_gen/images/astra/main-screenshot_hu19881f1cccbca9d0fa0ea6020d6522f3_307487_800x0_resize_q75_h2_box_3.webp differ diff --git a/themes/mytheme/LICENSE b/themes/mytheme/LICENSE new file mode 100644 index 0000000..9ed963a --- /dev/null +++ b/themes/mytheme/LICENSE @@ -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. diff --git a/themes/mytheme/archetypes/default.md b/themes/mytheme/archetypes/default.md new file mode 100644 index 0000000..ac36e06 --- /dev/null +++ b/themes/mytheme/archetypes/default.md @@ -0,0 +1,2 @@ ++++ ++++ diff --git a/themes/mytheme/assets/css/style.css b/themes/mytheme/assets/css/style.css new file mode 100644 index 0000000..460437a --- /dev/null +++ b/themes/mytheme/assets/css/style.css @@ -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; +} diff --git a/themes/mytheme/layouts/404.html b/themes/mytheme/layouts/404.html new file mode 100644 index 0000000..b032a7b --- /dev/null +++ b/themes/mytheme/layouts/404.html @@ -0,0 +1,5 @@ +{{ define "main" }} + +404 not found. + +{{ end }} \ No newline at end of file diff --git a/themes/mytheme/layouts/_default/_markup/render-image.html b/themes/mytheme/layouts/_default/_markup/render-image.html new file mode 100644 index 0000000..3616165 --- /dev/null +++ b/themes/mytheme/layouts/_default/_markup/render-image.html @@ -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" -}} +{{ $.Text }} +{{- else -}} + +{{ $.Text }}{{- end -}} diff --git a/themes/mytheme/layouts/_default/bare.html b/themes/mytheme/layouts/_default/bare.html new file mode 100644 index 0000000..47a04ff --- /dev/null +++ b/themes/mytheme/layouts/_default/bare.html @@ -0,0 +1,19 @@ +{{ partial "head.html" . }} + +
+ + {{ partial "header.html" . }} + +
+ +
+

{{ .Title }}

+ + {{ .Content }} +
+ +
+ +
+ + \ No newline at end of file diff --git a/themes/mytheme/layouts/_default/baseof.html b/themes/mytheme/layouts/_default/baseof.html new file mode 100644 index 0000000..66e3436 --- /dev/null +++ b/themes/mytheme/layouts/_default/baseof.html @@ -0,0 +1,19 @@ +{{ partial "head.html" . }} + +
+ + {{ partial "header.html" . }} + +
+ +
+ {{- block "main" . }}{{- end }} +
+ +
+ +{{ partial "footer.html" . }} + +
+ + diff --git a/themes/mytheme/layouts/_default/list.html b/themes/mytheme/layouts/_default/list.html new file mode 100644 index 0000000..c897030 --- /dev/null +++ b/themes/mytheme/layouts/_default/list.html @@ -0,0 +1,3 @@ +{{ define "main" }} + +{{ end }} diff --git a/themes/mytheme/layouts/_default/simple.html b/themes/mytheme/layouts/_default/simple.html new file mode 100644 index 0000000..fb3ffc2 --- /dev/null +++ b/themes/mytheme/layouts/_default/simple.html @@ -0,0 +1 @@ +{{ .Content }} \ No newline at end of file diff --git a/themes/mytheme/layouts/_default/single.html b/themes/mytheme/layouts/_default/single.html new file mode 100644 index 0000000..9d176a0 --- /dev/null +++ b/themes/mytheme/layouts/_default/single.html @@ -0,0 +1,5 @@ +{{ define "main" }} +

{{ .Title }}

+ + {{ .Content }} +{{ end }} diff --git a/themes/mytheme/layouts/index.html b/themes/mytheme/layouts/index.html new file mode 100644 index 0000000..d686ce1 --- /dev/null +++ b/themes/mytheme/layouts/index.html @@ -0,0 +1,5 @@ +{{ define "main" }} + +{{ end }} diff --git a/themes/mytheme/layouts/partials/footer.html b/themes/mytheme/layouts/partials/footer.html new file mode 100644 index 0000000..0ed3a6c --- /dev/null +++ b/themes/mytheme/layouts/partials/footer.html @@ -0,0 +1,3 @@ + diff --git a/themes/mytheme/layouts/partials/head.html b/themes/mytheme/layouts/partials/head.html new file mode 100644 index 0000000..a1bd564 --- /dev/null +++ b/themes/mytheme/layouts/partials/head.html @@ -0,0 +1,36 @@ + + + + + + + + + + + {{ if .IsHome }} + + {{.Site.Title}} + {{ else }} + {{.Site.Title}} - {{ .Title }} + + {{ end }} + + + + + {{ if .IsHome }} + {{ with .OutputFormats.Get "RSS" }} + + {{ end }} + {{ end }} + + {{ $css := resources.Get "css/style.css" | resources.Minify | resources.Fingerprint }} + + + + diff --git a/themes/mytheme/layouts/partials/header.html b/themes/mytheme/layouts/partials/header.html new file mode 100644 index 0000000..e598854 --- /dev/null +++ b/themes/mytheme/layouts/partials/header.html @@ -0,0 +1,14 @@ +
+

{{ .Site.Title}}

+ + +
diff --git a/themes/mytheme/layouts/partials/sidebar.html b/themes/mytheme/layouts/partials/sidebar.html new file mode 100644 index 0000000..fc9e9a6 --- /dev/null +++ b/themes/mytheme/layouts/partials/sidebar.html @@ -0,0 +1,53 @@ +{{ $image := resources.Get "img/profile.jpg" }} +{{ with $image }} +{{ $resized := .Resize "webp 256x" }} +Profile Picture +{{ end }} + +
+ {{ $currentPage := . }} + {{ range $index, $element := .Site.Menus.formats }} + {{ $len := (len $.Site.Menus.formats) }} + + {{ .Name }} + + {{ if not (eq (add $index 1) $len) }}ยท{{ end }} + {{ end }} +
+ +

+ Hey I do graphics dev, write tools, cross-platform stuff and contribute + where I can! I draw sometimes. +

+ +
+ +

Accounts:

+ + + +

Contact:

+ + + +

Donate:

+ + diff --git a/themes/mytheme/layouts/partials/svg.html b/themes/mytheme/layouts/partials/svg.html new file mode 100644 index 0000000..e616cb7 --- /dev/null +++ b/themes/mytheme/layouts/partials/svg.html @@ -0,0 +1,6 @@ +{{ $svg := . }} +{{ $class := print $svg "-icon" }} +{{ $match := "(.*)" }} + +{{ $replaceWith := printf `${2}` $class }} +{{ return (replaceRE $match $replaceWith (printf "/static/images/%s.svg" $svg | readFile) | safeHTML) }} \ No newline at end of file diff --git a/themes/mytheme/layouts/shortcodes/begin-grid.html b/themes/mytheme/layouts/shortcodes/begin-grid.html new file mode 100644 index 0000000..b878352 --- /dev/null +++ b/themes/mytheme/layouts/shortcodes/begin-grid.html @@ -0,0 +1 @@ +
diff --git a/themes/mytheme/layouts/shortcodes/blurb.html b/themes/mytheme/layouts/shortcodes/blurb.html new file mode 100644 index 0000000..b0c9390 --- /dev/null +++ b/themes/mytheme/layouts/shortcodes/blurb.html @@ -0,0 +1,15 @@ +{{ $title := .Get "title"}} +{{ $desc := .Get "description" }} + +{{ if (.Get "url") }} + +{{ else }} +
+{{ end }} +

{{$title}}

+

{{$desc}}

+{{ if (.Get "url") }} +
+{{ else }} +
+{{ end }} diff --git a/themes/mytheme/layouts/shortcodes/end-grid.html b/themes/mytheme/layouts/shortcodes/end-grid.html new file mode 100644 index 0000000..04f5b84 --- /dev/null +++ b/themes/mytheme/layouts/shortcodes/end-grid.html @@ -0,0 +1 @@ +
diff --git a/themes/mytheme/layouts/shortcodes/rawhtml.html b/themes/mytheme/layouts/shortcodes/rawhtml.html new file mode 100644 index 0000000..520ec17 --- /dev/null +++ b/themes/mytheme/layouts/shortcodes/rawhtml.html @@ -0,0 +1,2 @@ + +{{.Inner}} \ No newline at end of file diff --git a/themes/mytheme/theme.toml b/themes/mytheme/theme.toml new file mode 100644 index 0000000..1fb3151 --- /dev/null +++ b/themes/mytheme/theme.toml @@ -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"