the-internet-vagabond-dot-com/feed.xml

1475 lines
95 KiB
XML
Raw Normal View History

2025-01-03 19:48:05 +00:00
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.3">Jekyll</generator><link href="https://www.theinternetvagabond.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.theinternetvagabond.com/" rel="alternate" type="text/html" /><updated>2025-01-03T13:48:04-06:00</updated><id>https://www.theinternetvagabond.com/feed.xml</id><title type="html">The Internet Vagabond</title><author><name>Bill Niblock</name></author><entry><title type="html">Life in Progress: January, 2025</title><link href="https://www.theinternetvagabond.com/2025/01/03/life-update.html" rel="alternate" type="text/html" title="Life in Progress: January, 2025" /><published>2025-01-03T00:00:00-06:00</published><updated>2025-01-03T00:00:00-06:00</updated><id>https://www.theinternetvagabond.com/2025/01/03/life-update</id><content type="html" xml:base="https://www.theinternetvagabond.com/2025/01/03/life-update.html"><![CDATA[<h1 id="life-in-progress-january-2025">Life in Progress: January, 2025</h1>
<p>My <a href="/now">now page</a> is growing too verbose. Instead, Ill leave that page as a
summary of what this/these page(s) will explore. Ill start with a retrospective
of 2024, up to now, the beginning of 2025. Maybe a bit of ambitions too.</p>
<h2 id="2024-retrospective">2024 Retrospective</h2>
<p>2024 was a significant year. The most notable change being that I was laid off
in April. The remaining 8 months were quite nice. Before April, the year doesnt
feel much different or significant. From what I remember, I was stressed,
unhappy, and overall dissatisfied with my situation. I was in the process of
saving money to leave, when I was laid off and paid a generous (enough)
severance. Its nice when the universe solves problems.</p>
<p>Much of April and May was time spent decompressing. A bit too much drinking,
from what I recall. I began receiving unemployment payments, and looking for
jobs, though only half-heartedly. I was already decided I would start my own
business. I also started my playthrough of <strong>Fallout 3</strong>.</p>
<p>At the end of May, I entered into a game jam, and made my first video game,
<a href="https://vagabondazulien.itch.io/lander">L4-N-DER Training Simulator</a>. One thing
I do remember from the beginning of the year was speaking with some friends
about trying to publish a video game on Itch. I made the game using
<a href="https://fennel-lang.org/">Fennel</a> and the <a href="https://www.love2d.org/">LÖVE 2D game
engine</a>. It was incredibly rewarding, and a great
learning experience. This game would be the first of 5 that I published on my
Itch page this year.</p>
<p>Much of the summer was spent procrastinating starting my own business, and
golfing. At the beginning of summer, in June, my grandmother passed away. She
was about 2 weeks from her birthday, and so we round up and say she lived to 98.
I spent some time helping to clean and clear up her house too. In the beginning
of July I traveled to New York City to see Rezz. I also started properly
exploring WordPress, and working to understand better the business I was still
going to start. Around August, I began playing <strong>Morrowind</strong> for the first time.</p>
<p>In the fall is when I “got serious” about my business. I signed up for the New
York State Self-Employment Assistance Program (SEAP), and through them signed up
with SCORE to speak with a mentor and begin some small business training. I made
my first WordPress site, for a relative (and for free). I also entered into 3
more game jams during this period, publishing
<a href="https://vagabondazulien.itch.io/ticsweeper">TICSweeper</a> (a Minesweeper clone
mde with the TIC-80); <a href="https://vagabondazulien.itch.io/runr">RUNR</a> (another
TIC-80 game); and <a href="https://vagabondazulien.itch.io/escape-the-crash">Escape The
Crash</a>. <em>Escape</em> was based on
some work of mine over the summer to better understand and implement ray-casting
in the TIC-80, which I then translated for use in Fennel and LÖVE. At the end of
fall, my remaining grandmother severely injured herself, placing her in town
through the end of the year. For the second year in a row, much of the holidays
would be spent visiting a rehabilitation center (the same one as my first
grandmothers). Since the pandemic, I dont think Ive had a “normal” holiday
season.</p>
<p>At the end of the year, I formally started my business, <a href="https://www.niblock.tech">Niblock Technology
Solutions</a>, and began working on websites for two
additional clients. Exploring this new world has been exciting, and there are a
lot of new challenges. I love working with others to solve problems, and Im
looking forward to it. Im also beginning work on a second business idea for a
game shop. I want to build a community space for people to play games, enjoy
company, and relax. Rounding the year out was my first playthrough of <strong>Deus
Ex</strong>.</p>
<h2 id="now-january-2025">Now: January, 2025</h2>
<p>Now. Plenty of plans and ambitions.</p>
<p>Easiest: I started a playthrough of <strong>Oblivion</strong>. Similar to <strong>Fallout 3</strong> and
<strong>Morrowind</strong>, my goal is to complete the main story and all DLCs. This time
around, I explored a new modding setup, using <a href="https://lutris.net/">Lutris</a> to
install and manage the game (from GOG), and all the modding tools. For all three
of these games I want to write up a brief retrospective about my experiences and
any of the setup required for playing them on Linux. I already have two articles
for Oblivion (<a href="/2021/11/20/oblivion-linux.html">Part 1</a>, <a href="/2021/12/09/oblivion-linux-2.html">Part
2</a>) detailing using Steam and Proton. I think
the Lutris approach is a bit nicer.</p>
<p><em>Escape The Crash</em> was fun to make, but its not done yet. I want to add in a
floor, sound effects, a skybox, and objectives. And an actual ending condition.</p>
<p>Game-making in general I want to continue. Ive started looking into the
<a href="https://dragonruby.org/">DragonRuby game engine</a>. I also want to learn (more)
Godot. I have no shortage of ideas, only my regular struggles with motivation
and focus.</p>
<p>Ive fallen into a few bad habits, and my health is worse for them. Its absurdly
easy for me to put on weight, and equally as difficult to lose it again. At my
heaviest I was over 320 pounds, and Im now at a much better 240. I want to
bring that number down to 200, but I also want to remove as much significance
from that number as I can. It should be a metric, not a grade.</p>
<p>Ive also set for myself several music goals. I want to get better at
sight-reading, and so I have a goal to read a new piece of music each week. I
also want to explore music production, and try making my own 45-60 minute mix.</p>
<p>There are the business goals. I need to have an income that supports my
lifestyle, which means more clients and (hopefully) more businesses!</p>
<p>Finally, I want to write more. I think about writing, but rarely follow-through.
As all my other ambitions develop, sharing them with the world will help me
formally catalog my successes. Plus, if I have something useful and helpful to
share, then I want to!</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Life in Progress: January, 2025]]></summary></entry><entry><title type="html">Life in Progress: September, 2024</title><link href="https://www.theinternetvagabond.com/2024/09/24/life-in-progress-september.html" rel="alternate" type="text/html" title="Life in Progress: September, 2024" /><published>2024-09-24T00:00:00-05:00</published><updated>2024-09-24T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2024/09/24/life-in-progress-september</id><content type="html" xml:base="https://www.theinternetvagabond.com/2024/09/24/life-in-progress-september.html"><![CDATA[<h1 id="life-in-progress-as-of-2024-09-24">Life In Progress, as of 2024-09-24</h1>
<ul>
<li>New hardware: laptop, phone, and NAS</li>
<li><strong>TWO</strong> game jams!</li>
<li>Finishing up Morrowind</li>
<li>SEAP/Self-Employment Progress</li>
</ul>
<h2 id="new-hardware">New Hardware</h2>
<h3 id="framework-laptop">Framework Laptop</h3>
<p>This new <a href="https://frame.work">Framework</a> is great! Ive only had it for a few
weeks, but it is wonderful. Ive been slowly syncing and migrating workflows
from my various existing options to it. Being able to work for multiple hours
without worrying about battery life is nice.</p>
<p>Previously, the Chromebook I have was my go-to remote personal macine.
Considering its age, and the inherent limitations of a Chromebook, it served me
better than I ever could have hoped. However, I knew its time was drawing
near, and the Dell I got as part of my work severance was not going to cut it.
Considering Im starting a business doing technology, I needed a reliable,
“all-day” machine with Linux. The ARM-based Macs are incredibly tempting, but
I am not a fan of Mac. Ive been eyeing Framework for a bit now, and their
newest 13-inch model with AMD components checked enough of the boxen for me to
dive in.</p>
<h3 id="phone">Phone</h3>
<p>For a while Ive been eyeing Mint Mobile. In the US, they have a plan offering
unlimited text and talk, plus 5 GB of data, for $15 per month. I generally use
less than 1 GB of streaming data, so this seemed like a clearly better option
than the $30+ I was paying for Google Fi. When I decided to switch, they had an
incredible deal offering a Google Pixel 9 plus a years service for a great
price, so I not only switched carrier, I also snagged a new phone! I had a
Samsung S21, which was more than sufficient for my needs, so switching isnt
quite as significant as with the laptop, but its still a nice new experience.
The OS and environment on the Pixel is much nicer than Samsung phones, so
thats quite the plus!</p>
<h3 id="nas">NAS</h3>
<p>I bought a 2-bay Synology NAS from a friend a few months ago, and with the
myriad other changes, decided to set it up proper. I setup
<a href="https://www.navidrome.org/">Navidrome</a> for audio, and <a href="https://jellyfin.org/">Jellyfin</a> for video. I had previously used Navidrome, then
switched to Jellyfin for both audio and video, but with the new phone comes a
return to form. I like <a href="https://gitlab.com/ultrasonic/ultrasonic">Ultrasonic</a>,
and Navidrome plays nicely with it.</p>
<p>The other big additions with the NAS is more backup scripts, and also pulling
down some YouTube series I like for local copies. More details in a full post.</p>
<h2 id="game-making">Game Making</h2>
<p>Two game jams! One for the entire month of September, <a href="https://itch.io/jam/clone-jam-game-a-month">Clone
Jam</a>, and a
<a href="https://itch.io/jam/mini-jam-167-cyber">Mini-Jam</a>. For the Clone Jam, I was
working on building a ray-casting-based dungeon scavenger, similar to “Legend
of Grimrock”, but with less combat. However, while I have made great progress
understanding how ray-casting works, and how to implement it, I wont have time
to finish such a game. That knowledge wont go to waste, though! Theres a
game-jam at the end of October where I intend to make use of it. Instead, Ill
be touching-up and submitting a clone of Minesweeper I made:
<a href="https://vagabondazulien.itch.io/ticsweeper">TICsweeper</a>.</p>
<p>For the Mini-Jam, I decided to make a “runner” type game: you maneuver your
sprite to collect and/or avoid certain projectiles. I also made this game in
the <a href="https://tic80.com">TIC-80</a>. While I didnt pull any all-nighters, focusing
on a single project for 72-hours with as little down-time as possible is still
quite exhausting! My submission was called
<a href="https://vagabondazulien.itch.io/runr">RUNR</a>. It ranked 48th out of 66
submissions, which is honestly disappointing, but not enough to demotivate me
from continuing my game-making journey!</p>
<h2 id="game-playing">Game Playing</h2>
<p>I finally finished my play-through of Morrowind, and one of its two expansions,
Tribunal. (Note: before “DLC”, new game content for existing games was
distributed like the game itself, on a piece of data-storing media, such as a
CD. These were called “expansion packs.”) I have thoroughly enjoyed my time in
The Elder Scrolls III, and I definitely understand why many claim it as their
favorite. I will talk more about my experience in a full post, just like I did
for my recent Fallout 3 replay (I mean, just like I <em>will</em>. I <em>WILL!</em>)</p>
<h2 id="business-time">Business Time</h2>
<p>Alas, while game making and playing are great uses of my time, they do not get
me the resources I need to pay my bills. I continue to work on starting my own
business. Ive met with two mentors, one business and one technology, to help
get me started and provide guidance. In fact, this week marks what I would
consider the proper beginning of my business. With some dedication, Ill have
more exciting news to share about this next time!</p>
<h2 id="thats-all-for-now">Thats All For Now!</h2>
<p>I think the original intention of a “Now” page is to be less verbose, but I
find the monthly cadence of a somewhat comprehensive update to be more
appealing! Until next month!</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Life In Progress, as of 2024-09-24]]></summary></entry><entry><title type="html">Life in Progress: August, 2024</title><link href="https://www.theinternetvagabond.com/2024/08/19/life-in-progress-august.html" rel="alternate" type="text/html" title="Life in Progress: August, 2024" /><published>2024-08-19T00:00:00-05:00</published><updated>2024-08-19T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2024/08/19/life-in-progress-august</id><content type="html" xml:base="https://www.theinternetvagabond.com/2024/08/19/life-in-progress-august.html"><![CDATA[<h1 id="life-in-progress-as-of-2024-08-19">Life In Progress, as of 2024-08-19</h1>
<ul>
<li>Learning <a href="https://www.youtube.com/watch?v=LZVpvJsqTMM">Stan Rogers
<em>Bluenose</em></a> on mandolin and voice</li>
<li>Building a few games in the <a href="https://tic80.com">TIC-80 fantasy console</a></li>
<li>Deploying my own <a href="https://codeberg.org/Codeberg/pages-server/">“Pages” server</a></li>
<li>Building a Forgejo Action for deploying game builds to Itch.io using
<a href="https://itch.io/docs/butler/">butler</a></li>
<li>Building a custom WordPress Docker container that uses SQLite</li>
<li>Starting my own business</li>
</ul>
<h2 id="music">Music</h2>
<p>Adam and I continue our semi-weekly jam sessions! Weve settled on <a href="https://www.youtube.com/watch?v=LZVpvJsqTMM">Stan Rogers
<em>Bluenose</em></a> for our first piece. I
normally pick up lyrics pretty quick, but this song eludes me. We worked on the
chord progression last week, and Ive been actually practicing!</p>
<h2 id="game-dev">Game Dev</h2>
<p>Still having a blast with <a href="https://tic80.com/">TIC-80</a>. I made a small farming
experiment game, to learn <a href="https://fennel-lang.org">Fennel</a> some more and also
nail-down some basic design principles. Some of the ideas in that experiment,
namely generating the map with a loop and <code class="language-plaintext highlighter-rouge">mset</code> instead of using the built-in
map designer, gave me some insight for solving my darkness troubles in
Nightgolf. Im still wrapping my head around it, but I think this will be a
solution.</p>
<p>The farming experiment game lives on
<a href="https://vagabondazulien.itch.io/farm-experiment-1">Itch.io</a> and the <a href="https://tic80.com/play?cart=3965">TIC-80
Webzone</a>.</p>
<h2 id="tech-dev">Tech Dev</h2>
<p><a href="https://forgejo.org/">Forgejo</a> continues to be rewarding, and Im looking
forward to expanding my deployment of it by deploying my own <a href="https://codeberg.org/Codeberg/pages-server/">“Pages”
server</a>. This will allow me to
deploy my static sites on my own infrastructure. Im also working on an “Action”
for leveraging <a href="https://itch.io/docs/butler/">butler</a> to publish games I publish
the source code for from my Forge to Itch.io.</p>
<p>In preparation for both my own use, and my business use, I need to learn more
about Nextcloud. Im also working on building a custom WordPress Docker
container that relies on SQLite instead of MySQL.</p>
<p>Hovering about all this is backups and monitoring, both of which I sprinkle into
my learning voyage. Im looking forward to writing up some documentation about
my implementation.</p>
<h2 id="entrepreneurship">Entrepreneurship</h2>
<p>Im happy to report I was accepted into New Yorks Self-Employment Assistance
Program, <a href="https://dol.ny.gov/SEAP">SEAP</a>. I will be starting a business offering
managed online services, such as website design and deployment, personal cloud,
and email. I would like to offer these services to local small businesses and
not-for-profits. I think of it as “Silicon Valley experience” at reasonable,
local prices. Im excited to dive into the parts Im not very familiar with,
namely the business side of things. I have extensive technical experience and
mastery, but I lack any significant business experience.</p>
<h2 id="gaming">Gaming</h2>
<p>Ive started a new playthrough of <a href="https://en.wikipedia.org/wiki/Darkest_Dungeon">Darkest
Dungeon</a>. Its mildly
frustrating, but mostly fun. I have fun yelling at the game; its like stress
relief. Ive been generally successful, but the Crimson Court has been very
rough to me. It is a game about challenges and loss, though, so nothing
unexpected.</p>
<p>Ive continued my play-through of
<a href="https://en.wikipedia.org/wiki/Sundered">Sundered</a>, though have put it down for
a bit. Im playing it on my Steam Deck using <a href="https://lutris.net/">Lutris</a>, and
it works very well. Lutris continues to impress me, and I want to try writing an
installer for a game.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Life In Progress, as of 2024-08-19]]></summary></entry><entry><title type="html">Automatic Backups with RClone, systemd, and Backblaze</title><link href="https://www.theinternetvagabond.com/2023/05/07/rclone-backups.html" rel="alternate" type="text/html" title="Automatic Backups with RClone, systemd, and Backblaze" /><published>2023-05-07T00:00:00-05:00</published><updated>2023-05-07T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2023/05/07/rclone-backups</id><content type="html" xml:base="https://www.theinternetvagabond.com/2023/05/07/rclone-backups.html"><![CDATA[<h1 id="automatic-backups-with-rclone-systemd-and-backblaze">Automatic Backups with RClone, systemd, and Backblaze</h1>
2024-06-18 23:26:12 +00:00
<h2 id="quick-note">Quick Note</h2>
<p>Backups are not complicated. They may seem like it, but in reality the
complications arise from restoration. If youre not doing anything fancy with
your data now, then dont do anything fancy with your backups. Follow the 3-2-1
methodology: 3 copies of (important) data, in 2 different locations, 1 of which
is off-site. Many others have written about this in better detail than I ever
can; Jeff Geerling has a great article and several videos about it <a href="https://www.jeffgeerling.com/blog/2021/my-backup-plan">on his
site</a>. The time (and
often money) investment now can reduce worry, stress, and loss should the data
you care about ever become unusable.</p>
<p>(There are no affiliate links in this post, nor was I paid to recommend any
product or service.)</p>
<h1 id="my-needs">My Needs</h1>
<p>Backups are as important as the data you have. If all youve got is a directory
full of meme GIFs that you dont mind losing, then backups may be a waste of
time and money. I have recently taken to buying as much of my music as possible
(especially through Bandcamp, and especially on Bandcamp Fridays!). While much
of the music I buy does exist on a remote server at a company somewhere, the
cost of having to re-download and re-organize all of it well outweighs the cost
of proper backups. Not to mention the music which I cant get anywhere else
anymore. Nor to further mention the other data which I have. All of this is to
say: backups are worth it to me.</p>
<p>Recently I wanted to setup NFS on my home network. I was concerned about messing
something up, and erasing the directory I had intended to share, so I wanted to
backup the data. For a while Ive been intending to setup backups (as everyone
probably does), but it was never a priority. This project helped to prioritze
it. I had read about <a href="https://rclone.org/">RClone</a>, a command-line utility for
interacting with an incredible number of cloud services. I messed around a bit
with it, found it to my liking, and started shopping around for a cloud storage
solution. Enter <a href="https://www.backblaze.com/">Backblaze</a>. The folks that publish
all those hard-drive stats? Turns out they also run a business where they
provide cloud storage. Its inexpensive, reliable, and straight-forward. The
last step was to automate it with systemd timer units.</p>
<h2 id="backblaze-setup">Backblaze Setup</h2>
<ul>
<li><a href="https://www.backblaze.com/">Backblaze Site</a></li>
<li><a href="https://www.backblaze.com/help.html">Backblaze Docs</a></li>
</ul>
<p>First step is to setup Backblaze. Create an account, verify email address, all
that jazz. Id recommend enabling multi-factor authentication on the
<strong>Account</strong> -&gt; <strong>My Settings</strong> page, under <strong>Security</strong>. Next, click on the
<strong>Account</strong> -&gt; <strong>Application Keys</strong> page, and generate a new key. Fill in the
blanks (I gave my key full access to all buckets), copy the important bits, and
store them somewhere safe (like your password vault).</p>
<h2 id="rclone-setup">RClone Setup</h2>
<ul>
<li><a href="https://rclone.org/">RClone Site</a></li>
<li><a href="https://rclone.org/b2/">RClone Backblaze B2 Page</a></li>
</ul>
<p>Download and install RClone. Next run <code class="language-plaintext highlighter-rouge">rclone config</code> and walk through the
prompts. Im using Backblaze, so I select “Backblaze B2” as my storage backend.
Then I add the application key ID and application key secret (key) at the
relevant prompts. For all of this configuration, I named the remote “backblaze”,
though a shorter name can make commands easier. Regardless, verify the
configuration is setup properly by running <code class="language-plaintext highlighter-rouge">rclone lsd backblaze:</code>, which will
list buckets. Unless a bucket was already configured, nothing will show up, and
also there wont be any errors.</p>
<h2 id="backup-configuration">Backup Configuration</h2>
<p>Now, figure out how you want to backup your data. I have a <a href="/2020/06/14/setting-up-btrfs.html">BTRFS RAID setup
with multiple sub-volumes</a>, each for a
different data type: one for Books, one for Music, and so on. Since creating a
bucket doesnt cost anything, I decided to split my backups similarly. I created
the buckets I wanted, and did a “manual” RClone sync of the data.</p>
<p><code class="language-plaintext highlighter-rouge">rclone sync --fast-list --transfers 20 /path/to/Books
backblaze:bucket-for-Books-backups</code></p>
<p>The “fast-list” and “transfers” options are specified on the <a href="https://rclone.org/b2/">RClone
Backblaze B2 page</a>, along with some others that may be
of interest.</p>
<p>At this point, my data was “backed-up”, and I could muck about with it more
confidently. Also, at this point, configuring back-ups is done. Run those RClone
sync commands once a week, and all is set. I dont want to remember to do
things, though.</p>
<h2 id="automating-the-process">Automating the Process</h2>
<p>The first thing to do is create a user-agnostic location for the configuration
file and some additional files. I chose <code class="language-plaintext highlighter-rouge">/etc/rclone</code>, and copied the RClone
configuration file generated previously to this directory as <code class="language-plaintext highlighter-rouge">backblaze.conf</code>.</p>
<p>Next, I created a filter file. RClone has extensive <a href="https://rclone.org/filtering/">filtering
options</a>. For my current needs, a single file
will suffice.</p>
<h3 id="defaultfilter">default.filter</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Exclude BTRFS snapshot directories
- .snapshots/**
# Exclude Syncthing configuration directories
- .stfolder/**
</code></pre></div></div>
<p>systemd timer units ( [<a href="https://wiki.archlinux.org/title/Systemd/Timers">Arch
Wiki</a>]
[<a href="https://man.archlinux.org/man/systemd.timer.5">Manual</a>] ) are triggers that
activate on a schedule. That schedule can be dynamic (relative to a
previous/other trigger), or static (at 6:15 every day). A timer unit triggers a
service unit, which does the work. For my backups, I decided to run a sync every
hour, at sometime between the 15 and 45 minute mark of that hour. To simplify
having multiple timer units that all do the same thing, I setup a template unit
(see the <strong>Note</strong> here: <a href="https://wiki.archlinux.org/title/Systemd#Using_units">Arch
Wiki</a>).</p>
<h3 id="rclone-backuptimer">rclone-backup@.timer</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Unit]
Description=RClone Backup Timer Template
[Timer]
# Run every hour, sometime between the 15 minute and 45 minute mark
OnCalendar=*-*-* *:15:00
AccuracySec=30min
RandomizedDelaySec=5min
# The %i is whatever value is after the "@" for the configured unit. For
# example, rclone-backup@Books.timer will run the rclone-backup@Books.service
Unit=rclone-backup@%i.service
[Install]
WantedBy=timers.target
</code></pre></div></div>
<p>Then I can <code class="language-plaintext highlighter-rouge">enable</code> and <code class="language-plaintext highlighter-rouge">start</code> a timer for each directory to backup. To
minimize configuration, I also setup the service file to be a template. This
requires a bit of inflexible coordination: the directory name must match to a
part of the bucket name.</p>
<h3 id="rclone-backupservice">rclone-backup@.service</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Unit]
Description=RClone Backup of %I
[Service]
Type=simple
ExecStart=/usr/bin/rclone sync -v --config "/etc/rclone/backblaze.conf" --fast-list --transfers 20 --filter-from "/etc/rclone/default.filter" /path/to/%i/ backblaze:bucket-for-%i-backups
</code></pre></div></div>
<p>The <code class="language-plaintext highlighter-rouge">--config</code> option allows us to specify the configuration in the <code class="language-plaintext highlighter-rouge">/etc</code>
directory. I include <code class="language-plaintext highlighter-rouge">-v</code> to have some additional output in the journal.
Again, <code class="language-plaintext highlighter-rouge">--fast-list</code> and <code class="language-plaintext highlighter-rouge">--transfers</code> are used to speed up the process and keep
costs lower. Then I <code class="language-plaintext highlighter-rouge">--filter-from</code> the “default.filter” file.</p>
<p>Place each of these files (<code class="language-plaintext highlighter-rouge">rclone-backup@.timer</code> and <code class="language-plaintext highlighter-rouge">rclone-backup@.service</code>)
into <code class="language-plaintext highlighter-rouge">/etc/systemd/system</code>. For each directory, enable and start the timer
unit; <code class="language-plaintext highlighter-rouge">systemctl enable rclone-backup@Example.timer</code> and <code class="language-plaintext highlighter-rouge">systemctl start
rclone-backup@Example.timer</code> will backup <code class="language-plaintext highlighter-rouge">/path/to/Example/</code> to the
<code class="language-plaintext highlighter-rouge">bucket-for-Example-backups</code> bucket.</p>
<h1 id="next-steps">Next Steps</h1>
<p>I would like to get some sort of metrics and dashboards setup to track backup
status and statistics. It could be very useful to be notified if a backup ever
fails.</p>
<p>Eventually, Ill upload this to a repository somewhere for ease of access and
backup. When I do, Ill update this post.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Automatic Backups with RClone, systemd, and Backblaze]]></summary></entry><entry><title type="html">Funkwhale on Linode with Object Storage</title><link href="https://www.theinternetvagabond.com/2022/09/27/linode_funkwhale.html" rel="alternate" type="text/html" title="Funkwhale on Linode with Object Storage" /><published>2022-09-27T00:00:00-05:00</published><updated>2022-09-27T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2022/09/27/linode_funkwhale</id><content type="html" xml:base="https://www.theinternetvagabond.com/2022/09/27/linode_funkwhale.html"><![CDATA[<h1 id="funkwhale-on-linode-with-object-storage">Funkwhale on Linode with Object Storage</h1>
<h2 id="funkwhale-setup">Funkwhale Setup</h2>
<p><a href="https://funkwhale.audio/">Funkwhale</a> is a decentralized music service,
connecting to the <a href="https://en.wikipedia.org/wiki/Fediverse">fediverse</a> using the
ActivityPub protocol. It is a web-based application, allowing users to upload,
listen, and share music and podcasts. I think its a cool project, and I can
self-host it, so I did. For a while, Funkwhale offered an all-in-one Docker
container, but they shifted focus to a multi-container approach. I had delayed
my transition from all-in-one to multi-container, but finally this past weekend
I found myself with time and motivation to get it done. The installation of
Funkwhale using Docker is very straight forward. The community has developed a
series of templates that can be fetched, modified, and used to get started very
quickly and easily. Those instructions are
<a href="https://docs.funkwhale.audio/installation/docker.html#multi-container-installation">here</a>.
The only significant modification I made was using <code class="language-plaintext highlighter-rouge">/opt/funkwhale</code> as my
default data and media root. I keep all my Docker configuration in directories
in my home directory as well. Much of these changes can be established in the
<code class="language-plaintext highlighter-rouge">.env</code> file discussed in the installation instructions, but I also scrubbed the
template files created and used during installation to make sure the directories
were as I wanted them. I also proxy Funkwhale and many other services behind
nginx, and there were a few <a href="https://docs.funkwhale.audio/installation/index.html#nginx">additional
steps</a> I had to
take. With all that complete, I had transitioned successfully. I already had SSL
certificates, but if thats also a requirement, they can easily be provisioned
using <a href="https://certbot.eff.org/">Certbot</a>.</p>
<h2 id="object-storage-setup">Object Storage Setup</h2>
<p>In my old setup, I leveraged Funkwhales ability to <a href="https://docs.funkwhale.audio/admin/importing-music.html">in-place import
music</a>. I transferred
about 70GB worth of music to my VPS (using Syncthing &lt;3), filling the disk
almost entirely (<em>98%</em>). It was a temporary solution for a road trip, and I
knew I couldnt keep it that way for long. Funkwhale has the ability to leverage
S3-compatible object storage, and Linode, the provider I already use for my VPS,
offers object storage. Any of the other major cloud providers will also do the
trick; I just went with what was easiest. On the Linode side, theres not much
to it. I created a new bucket, labeled it accordingly, created an access key,
and that was it. The Funkwhale side proved to be a bit challenging, but not, it
turns out, due to configuration. Well, <em>technically</em> it was.</p>
<p>The relevant configuration options on the Funkwhale side, in the <code class="language-plaintext highlighter-rouge">.env</code> file:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## External storages configuration
# Funkwhale can store uploaded files on Amazon S3 and S3-compatible storages (such as Minio)
# Uncomment and fill the variables below
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_STORAGE_BUCKET_NAME=
# An optional bucket subdirectory were you want to store the files. This is especially useful
# if you plan to use share the bucket with other services
# AWS_LOCATION=
# If you use a S3-compatible storage such as minio, set the following variable
# the full URL to the storage server. Example:
# AWS_S3_ENDPOINT_URL=https://minio.mydomain.com
AWS_S3_ENDPOINT_URL=
# If you want to serve media directly from your S3 bucket rather than through a proxy,
# set this to false
# PROXY_MEDIA=false
# If you are using Amazon S3 to serve media directly, you will need to specify your region
# name in order to access files. Example:
# AWS_S3_REGION_NAME=eu-west-2
# AWS_S3_REGION_NAME=
# If you are using Amazon S3, use this setting to configure how long generated URLs should stay
# valid. The default value is 3600 (60 minutes). The maximum accepted value is 604800 (7 days)
# AWS_QUERYSTRING_EXPIRE=
# If you are using an S3-compatible object storage provider, and need to provide a default
# ACL for object uploads that is different from the default applied by boto3, you may
# override it here. Example:
# AWS_DEFAULT_ACL=public-read
# Available options can be found here: https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl
AWS_DEFAULT_ACL=
</code></pre></div></div>
<p>Ive included the comments. The entire file is commented, and generally easy
enough to figure out. On the Linode side, when I generated the access key, it
provided me an <em>Access Key</em> and a <em>Secret Key</em>. I had already created a bucket,
and so I had the <em>Bucket Name</em>. The challenge for me was what the <em>Endpoint URL</em>
was, and if I needed to set a <em>Region Name</em> and <em>ACL</em>. Linodes documentation on
their object storage offering is a bit anemic, and so I made use of their setup
instructions for <a href="https://www.linode.com/docs/products/storage/object-storage/guides/s3cmd/">using s3cmd with Linode object
storage</a>.
From this guide, I was able to both setup <code class="language-plaintext highlighter-rouge">s3cmd</code>, and also determine what the
<em>Endpoint URL</em> would be. I also set the <em>Region Name</em> and <em>ACL</em> to match what
the UI was showing, but Im still not certain their necessary. Heres the trick,
and the cause of a few hours-worth of confusion: restarting the Docker
containers wasnt re-reading the <code class="language-plaintext highlighter-rouge">.env</code> file; I had to completely stop and
re-create them. It wasnt until I ran <code class="language-plaintext highlighter-rouge">docker inspect funkwhale-docker_api_1</code>
and noticed the environment variables werent set that I figured this out. Could
be this is common knowledge for Docker-gurus; now I know. With the
configuration in place, and the containers recreated, I was able to upload files
through Funkwhale, and watch them be stored in my Linode bucket. My final
configuration options were as follows:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>AWS_ACCESS_KEY_ID=&lt;stuff&gt;
AWS_SECRET_ACCESS_KEY=&lt;secret stuff&gt;
AWS_STORAGE_BUCKET_NAME=funkwhale-music-bucket-name
AWS_S3_ENDPOINT_URL=https://us-southeast-1.linodeobjects.com
AWS_S3_REGION_NAME=us-southeast-1
AWS_DEFAULT_ACL=public-read
</code></pre></div></div>
<h2 id="next-steps">Next Steps</h2>
<p>The downside of Funkwhales S3-compatible object storage integration lies in how
files are uploaded. One cannot simply <del>walk into</del> upload files to the bucket;
music must be uploaded through Funkwhales API (via web or other means), and
then Funkwhale stores it accordingly (like for local uploads). I have a lot of
music, and I cant be asked to manually upload it all. Thats, like, 2 hours of
half-hearted work. No, instead, the obvious solution is to build a script that
can automatically upload any new music from my local music directory to
Funkwhale automatically. What Im considering now is how I want to do that. I
could leverage systemd to watch my local music directory, and run the upload
script whenever new music is uploaded. Could even expand it to remove music
whenever I delete it locally, though that seems a bit odd. I could instead setup
a cron or systemd-timer to run at a set interval, and check for any new files
since the last run, and upload them. Regardless of the trigger, the upload
functionality should ideally avoid duplicates, run in a non-blocking fashion,
maybe batch upload files, and be low impact on my desktop. So thats next.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Funkwhale on Linode with Object Storage]]></summary></entry><entry><title type="html">Setting up Syncthing on the Steam Deck (Updated!)</title><link href="https://www.theinternetvagabond.com/2022/07/04/steam_deck_syncthing.html" rel="alternate" type="text/html" title="Setting up Syncthing on the Steam Deck (Updated!)" /><published>2022-07-04T00:00:00-05:00</published><updated>2022-07-04T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2022/07/04/steam_deck_syncthing</id><content type="html" xml:base="https://www.theinternetvagabond.com/2022/07/04/steam_deck_syncthing.html"><![CDATA[<h1 id="syncthing-on-the-steam-deck-updated">Syncthing on the Steam Deck (Updated!)</h1>
<h2 id="update">Update</h2>
<p>Turns out, when you update the SteamOS, it completely over-writes the operating
system. All of the setup I had originally written was great, if I never update,
which is unacceptable. Not all is lost; the quest simply gets harder. If I cant
rely on system-wide services, then I rely on user services.</p>
<h3 id="the-wrong-way-system-wide-services">The Wrong Way: System-Wide Services</h3>
<p>My first attempt was to setup Syncthing as a system-wide service managed by
<code class="language-plaintext highlighter-rouge">systemd</code>, installed via <code class="language-plaintext highlighter-rouge">pacman</code>. There are several problems with this. First,
it requires disabling the read-only file-system. Next, <code class="language-plaintext highlighter-rouge">pacman</code> is not setup nor
reliable, since every SteamOS update will over-write any changes I make to any
of the read-only file-system, including the directories that <code class="language-plaintext highlighter-rouge">pacman</code> relies on.
Related, the update will also erase the Syncthing package. This means I either
never update (inadvisable, and unacceptable), or I setup Syncthing not in the
read-only file-system.</p>
<h3 id="the-right-way-user-services">The Right Way: User Services</h3>
<p>systemd allows for non-root-based services, called user services. The Arch Wiki
<a href="https://wiki.archlinux.org/title/Systemd/User">systemd/User</a> article describes
this functionality much more than I will. Here are the relevant details:</p>
<ul>
<li>User services can be enabled to start when a user logs in</li>
<li>Service files are stored in the users home directory (specifically
<code class="language-plaintext highlighter-rouge">~/.config/systemd/user</code>)</li>
<li>No root privileges are required. No modifying the read-only file-system</li>
</ul>
<h2 id="syncthing">Syncthing</h2>
<p>Syncthing is incredible. Ive <a href="2020/07/19/syncthing-part-1.html">written about it
before</a>, but the setup here is a bit more
involved. The Steam Deck runs Arch Linux (and have I told you yet today that I
do too?), so the Arch Wiki <a href="https://wiki.archlinux.org/title/Syncthing">article on
Syncthing</a> gives some good insight.
When I initially started this process, I installed the SyncthingGTK application
from the Discover Store. This means it is a Flatpak application, and so doesnt
require elevated user privileges. I also tried the Syncthingy application, which
explicitly calls out Steam Deck users. However, both require running the Flatpak
in the background (like some users do for Discord or Spotify). I dont like
this, it feels off, and thus I sought a different approach.</p>
<h2 id="sshd-still-incredibly-useful">SSHD: Still Incredibly Useful</h2>
<p>I got real tired real quick of using the on-screen keyboard. After
complaining, a friend recommended I enable <code class="language-plaintext highlighter-rouge">sshd</code> and just remote in to the
device. Doing so was a breeze, and I recommend to others who dont have a
physical keyboard they can plug into their device. Drop to desktop mode
(hold the power button for a few seconds, and select the option), and start a
terminal (default is Konsole). Before remotely accessing the device, or using
elevated privileges via <code class="language-plaintext highlighter-rouge">sudo</code>, I need to set a password for the default user,
<em>deck</em>. In the terminal, type <code class="language-plaintext highlighter-rouge">passwd</code> and set it (and then put it in your
password vault so you dont forget. You <em>do</em> have a password vault, right?).
Start the service, <code class="language-plaintext highlighter-rouge">sudo systemctl start sshd</code>, and optionally enable it to have
<code class="language-plaintext highlighter-rouge">sshd</code> automatically started on each boot (<code class="language-plaintext highlighter-rouge">sudo systemctl enable sshd</code>). Get
the device IP with <code class="language-plaintext highlighter-rouge">ip addr list</code>, from my desktop run <code class="language-plaintext highlighter-rouge">ssh deck@ip-address</code>,
type in the password, and now Im a grade-A Hackermans.</p>
<p>This setting is not reset on SteamOS updates, that I can tell. Once enabled,
this will always start at boot, and always be on until explicitly turned off. Be
mindful of that if you decide to wander away from your home network; maybe turn
it off in public if you dont need it.</p>
<h2 id="setup">Setup</h2>
<p>There are 2 things required: a systemd service file, and the <code class="language-plaintext highlighter-rouge">syncthing</code>
binary. Syncthing is written in Go, and a compiled binary can be downloaded that
has no dependencies or installation requirements. It can be downloaded from
the <a href="https://github.com/syncthing/syncthing/releases/tag/v1.20.3">Syncthing
Releases</a> page for
many platforms and architectures. The Steam Deck is a Linux platform, using the
AMD64 architecture (or x86_64), so I grab that one. Ill note here, since I have
SSH access, I do all the editing and downloading on my desktop, and then
transfer the files using <code class="language-plaintext highlighter-rouge">scp</code> to the Deck. All of these steps can be done on
the Deck itself, without SSH access. Once the proper tarball has been
downloaded, extract it, and within will be the <code class="language-plaintext highlighter-rouge">syncthing</code> binary, ready to
rock. I copy/move the binary to <code class="language-plaintext highlighter-rouge">~/.local/bin/syncthing</code> on the Deck. The exact
location is less important than ensuring the binary is within my home directory
on the Deck.</p>
<p>The systemd serivce file can also be taken from the extracted tarball, but
requires modification. In the tarball, it is
<code class="language-plaintext highlighter-rouge">etc/linux-systemd/user/syncthing.service</code>. Copy this file to
<code class="language-plaintext highlighter-rouge">~/.config/systemd/user</code> on the Deck, and edit the “ExecStart” line in the
“[Service]” section from</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>...
[Service]
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart --logflags=0
...
</code></pre></div></div>
<p>to</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>...
[Service]
ExecStart=/home/deck/.local/bin/syncthing serve --no-browser --no-restart --logflags=0
...
</code></pre></div></div>
<p>(or wherever you decided to put the local <code class="language-plaintext highlighter-rouge">syncthing</code> binary)</p>
<p>With everything in place, I can now enable and start the Syncthing user service:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>systemctl --user enable syncthing.service
systemctl --user start syncthing.service
</code></pre></div></div>
<p>Since I dont have a physical keyboard plugged in, I modify my SSH command
slightly to forward the Syncthing web-UI from the Deck to my local machine:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh -L 31337:deck-ip-goes-here:8384 deck@deck-ip-goes-here
</code></pre></div></div>
<p>Now, on my local machine I can open one tab to <code class="language-plaintext highlighter-rouge">localhost:8384</code>, to show
Syncthing on my local machine, and another tab to <code class="language-plaintext highlighter-rouge">localhost:31337</code> to show
Syncthing on my Deck. From here, I add my local machine as a device on my Deck,
and begin sharing folders.</p>
<h2 id="closing-thoughts">Closing Thoughts</h2>
<p>Ive been using this setup for about a week now. Ive synced almost 20GB of
files, including configurations and saves for Retroarch. It works after
restarts, OS and client upgrades, and waking the device from sleep. It sits
quietly in the background, without having to start up applications. The biggest
problem is that it doesnt automatically update to the newest version of
Syncthing. Its also a bit involved to setup. To that end, Ive written a tool
to help with setup: <a href="https://codeberg.org/VagabondAzulien/steam-deck-syncthing">Steam Deck Syncthing
Setup</a>. Im still
finishing it up, but I intend to make use of it to keep my version of Syncthing
up-to-date. If you use it, let me know!</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Syncthing on the Steam Deck (Updated!)]]></summary></entry><entry><title type="html">Oblivion on Linux, with Mods! Part 2 - Mods</title><link href="https://www.theinternetvagabond.com/2021/12/09/oblivion-linux-2.html" rel="alternate" type="text/html" title="Oblivion on Linux, with Mods! Part 2 - Mods" /><published>2021-12-09T00:00:00-06:00</published><updated>2021-12-09T00:00:00-06:00</updated><id>https://www.theinternetvagabond.com/2021/12/09/oblivion-linux-2</id><content type="html" xml:base="https://www.theinternetvagabond.com/2021/12/09/oblivion-linux-2.html"><![CDATA[<p>Every players mod list is different. Some will focus on visuals, making the
game as graphically impressive and pretty as possible. Others care primarily
about additional content. I tend towards the later, with a preference for
additional survival or realism mods. I recommend starting with the “Core Mods”
section in the <a href="https://www.nexusmods.com/oblivion/mods/49898">Oblivion Comprehensive Modding Guide by
Dispensation</a> which will cover
some essential performance and enhancement mods.</p>
<p>Below are some specific mods I would like to highlight, and which I enjoy.</p>
<h2 id="survival-related">Survival Related</h2>
<h3 id="basic-primary-needs--personal-hygiene">Basic Primary Needs &amp; Personal Hygiene</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/37088">Nexus Link - Basic Primary Needs</a></li>
<li><a href="https://www.nexusmods.com/oblivion/mods/42038_">Nexus Link - Basic Personal Hygiene</a></li>
</ul>
<p>These two mods cover most of the survival aspects of my mod pack. “Basic Primary
Needs” adds hunger, thirst, and fatigue, while “Basic Personal Hygiene” adds
cleanliness. Managing these will feel tedious to some, but I really like having
to eat and drink, and visiting a bath house after a long time adventuring.</p>
<p>Each mod can make use of <a href="https://www.nexusmods.com/oblivion/mods/34905">additional HUD Status
Bars</a>, which makes tracking the
new needs much easier.</p>
<h3 id="travelers-tent">Travelers Tent</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/49654">Nexus Link</a></li>
</ul>
<p>This mod adds a portable player home, and is supremely comfy. Because I avoid
fast-travel, I wanted some sort of camping mod. I originally used <a href="https://www.nexusmods.com/oblivion/mods/37197">Maskars
Camping Mod</a> before learning of
this mod. By comparison, the tent in Travelers Tent feels almost like cheating,
but sometimes its important to treat yourself.</p>
<h2 id="world-enhancement">World Enhancement</h2>
<p>These I would consider my graphical improvements. Im generally not too
concerned with making the game look good, but I love making the game feel more
realistic. These mods make Cyrodiil feel more alive.</p>
<h3 id="better-cities">Better Cities</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/16513/">Nexus Link</a></li>
</ul>
<p>This is a massive collection of city overhaul and enhancement mods. I was
awe-struck when I walked around the Imperial City for the first time with this
mod enabled. Bravil felt like a dangerous, crowded harbor town. Leyawin looks
like an actual place people live. Though the improvements do come with FPS hits.
Doubly-so if enabling the Open Cities option, which moves cities into the
overworld space, instead of their own individual instances. Its a balancing
act: the immersion of walking directly into a city sometimes isnt worth
crashing to desktop when adventuring around cities.</p>
<h3 id="cobl">COBL</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/21104">Nexus Link</a></li>
</ul>
<p>“Common Oblivion” enriches the world of Oblivion by adding lots of little
things, and helping different mods “talk” to each other. I like to think of it
as filling in a lot of the details that feel missing from vanilla Oblivion.</p>
<h3 id="enhanced-economy">Enhanced Economy</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/25078">Nexus Link</a></li>
<li><a href="https://www.nexusmods.com/oblivion/mods/47184">Lubrons Patch</a></li>
</ul>
<p>This mod and the corresponding patch make the economy of the world more dynamic.
What I really like are the merchant quests that are added. Several merchants in
each town will ask you to find an item in one of the nearby dungeons. It adds
flavor to the game in just the right way.</p>
<p>Lubrons Patch for Enhanced Economy fixes some bugs and cleans up the code a
bit.</p>
<h3 id="lights-of-oblivion---road-lanterns">Lights of Oblivion - Road Lanterns</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/46131">Nexus Link</a></li>
</ul>
<p>A very simple mod that I feel really enhances my travel around Cyrodiil. I avoid
fast-traveling whenever possible, and walking lit roads at night feels comfy.
Im partial to the Imperial model.</p>
<h3 id="natural-environments">Natural Environments</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/2536">Nexus Link</a></li>
</ul>
<p>Arguably the only graphical enhancement mod, Natural Environments provides
options for modifying the weather, water, and vegetation around Cyrodiil. The
weather and vegetation enhancements especially stand out. Overall the mods
dont cause me much performance impact, if any.</p>
<h3 id="cyrodiil-travel-services">Cyrodiil Travel Services</h3>
<ul>
<li><a href="https://www.afkmods.com/index.php?/files/file/263-cyrodiil-travel-services/">AFK Mods Link</a></li>
</ul>
<p>I really enjoyed that in Skyrim there was a dude with a wagon you could pay to
travel to the various cities. This mod adds similar functionality, and then
some. Useful when playing the game without fast-travel enabled.</p>
<h2 id="overhauls">Overhauls</h2>
<p>Arguably, these are the heavy hitters. These mods will alter the mechanics of
the game, often making things more challenging but also more rewarding.</p>
<h3 id="maskars-oblivion-overhaul">Maskars Oblivion Overhaul</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/42780">Nexus Link</a></li>
</ul>
<p>Maskars Overhaul is a massive endeavor. It “[improves] many aspects of the
game, while maintaining the overall feel of the game and ensuring compatibility
with most other mods.” I think it does so with great success! However, be
forewarned, that this overhaul makes the game more challenging.</p>
<p>There is too much to cover about Maskars in this post, but I highly recommend
it. It comes with a PDF instruction manual, which is 61 pages long.</p>
<h3 id="vanilla-combat-enhanced">Vanilla Combat Enhanced</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/45314">Nexus Link</a></li>
</ul>
<p>As the name implies, this overhaul adjusts but does not change the vanilla
combat experience. Whereas other mods add new moves or fatigue systems, this mod
updates the vanilla combat experience to be more challenging and fair. It works
with Maskars after a small modification, which will be covered in the next
part. This is one of the mods that I havent played with for too long, and
there are definitely some additional or alternative combat mods Im considering.
Namely, <a href="https://www.nexusmods.com/oblivion/mods/49873">Dynamic Oblivion Combat</a>
and <a href="https://www.nexusmods.com/oblivion/mods/49939">Combat Additions</a>.</p>
<h3 id="supreme-magicka">Supreme Magicka</h3>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/12466">Nexus Link</a></li>
</ul>
<p>Rounding out the trio is a magic overhaul. Supreme Magicka approaches magic in
Oblivion in a similar way to Vanilla Combat Enhanced with combat: it seeks to
improve and expand, without replacing. To continue similarities, this mod is one
I havent sank my teeth into as much. The characters Ive been playing most
recently havent achieved very powerful magical capabilities yet. An alternative
to this mod is <a href="https://www.nexusmods.com/oblivion/mods/49096">Av Latta
Magicka</a>.</p>
<h2 id="next-steps">Next Steps</h2>
<p>In the last part of this series, I want to walk through a complete install of
Oblivion from scratch.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Every players mod list is different. Some will focus on visuals, making the game as graphically impressive and pretty as possible. Others care primarily about additional content. I tend towards the later, with a preference for additional survival or realism mods. I recommend starting with the “Core Mods” section in the Oblivion Comprehensive Modding Guide by Dispensation which will cover some essential performance and enhancement mods.]]></summary></entry><entry><title type="html">Oblivion on Linux, with Mods! Part 1 - Tools</title><link href="https://www.theinternetvagabond.com/2021/11/20/oblivion-linux.html" rel="alternate" type="text/html" title="Oblivion on Linux, with Mods! Part 1 - Tools" /><published>2021-11-20T00:00:00-06:00</published><updated>2021-11-20T00:00:00-06:00</updated><id>https://www.theinternetvagabond.com/2021/11/20/oblivion-linux</id><content type="html" xml:base="https://www.theinternetvagabond.com/2021/11/20/oblivion-linux.html"><![CDATA[<p>Oblivion holds a special place in my heart. I remember spending a summer in the
town I went to college in, and playing Oblivion almost every day while listening
to Dream Theaters <em>Systematic Chaos</em>. Back then, I wasnt aware of modding, so
it was literally just vanilla Oblivion for hours upon hours. I also used
Windows, so the game would run fine. Now, things have changed. The easier issue
to deal with is playing Oblivion on Linux. Thanks to Valve, Oblivion runs
excellent with Proton out of the box. The more challenging issue is mods, and
thats what this write-up is all about!</p>
<h1 id="vanilla-oblivion">Vanilla Oblivion</h1>
<p>Starting from the beginning, Oblivion is available on many platforms, but my
experiences here will assume the Steam installation. The primary difference will
be with respect to how the tools used to mod Oblivion are run. Ive got the
Game of the Year edition, which is Steam ID <code class="language-plaintext highlighter-rouge">22330</code>.</p>
<h1 id="modding-tools">Modding Tools</h1>
<p>Much of modding Oblivion is done with the help of additional tools. A mod
manager is used for installing and configuring the mods. There are several
options for Oblivion, and the one Ive been suggested and use is called <code class="language-plaintext highlighter-rouge">Wrye
Bash</code>. Mod load order is also important, and the tool Im using to help with
that is <code class="language-plaintext highlighter-rouge">LOOT</code>. Finally, <code class="language-plaintext highlighter-rouge">TES4Edit</code>, <code class="language-plaintext highlighter-rouge">TES4LODGen</code> and <code class="language-plaintext highlighter-rouge">BethINI</code> each helps with
performance and configuration.</p>
<p>I have the following directory structure setup for my mods:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>OblivionMods
|- Archives
|- Backups
|- Tools
|- WryeBash
</code></pre></div></div>
<p><em>Archives</em> is where I store the actual archives of the mods I use. <em>Backups</em> is
where I store any relevant backups for my Oblivion game, such as saves or
configuration files for the mods. <em>Tools</em> is where I put the executables for all
the tools I mentioned above. <em>WryeBash</em> is used to store the unarchived mods
(which it calls “projects”) and mod data that <code class="language-plaintext highlighter-rouge">Wrye Bash</code> uses.</p>
<p>Because each of these tools is run using Proton, I also have a set of aliases
configured. Similar aliases could be setup for using Wine instead. For each
alias, modify the paths accordingly for your setup. I should also note that Im
running Oblivion using <a href="https://github.com/GloriousEggroll/proton-ge-custom">Glorious Eggrolls
Proton</a>, version 6.16. I
havent experimented with different Proton versions to find the most performant
version, but if I do in the future, Ill mention it.</p>
<h2 id="wrye-bash">Wrye Bash</h2>
<ul>
<li><a href="https://github.com/wrye-bash/wrye-bash">Project Link</a></li>
<li><a href="https://wrye-bash.github.io/">Homepage</a></li>
<li><a href="https://www.nexusmods.com/oblivion/mods/22368">Nexus Link</a></li>
</ul>
<p><code class="language-plaintext highlighter-rouge">Wrye Bash</code> is involved. I dont know how to use it fully. There are a few
guides that helped me learn how to use it enough to get mods installed and
configured though. The first, and very relevant, is at <a href="https://www.shrine-of-kynareth.de/wrye-bash-on-linux">Shrine of
Kynareth</a>. I referenced
this guide, and the
<a href="https://www.shrine-of-kynareth.de/wrye-bash-for-beginners-part-1-installation-and-installers-tab">other</a>
<a href="https://www.shrine-of-kynareth.de/wrye-bash-for-beginners-part-2-load-order-bashed-patch-and-savegame-profiles">written</a>
<a href="https://www.shrine-of-kynareth.de/wrye-bash-for-beginners-part-3-ini-edits-tools-and-tricks">guides</a>
to learn how Wrye Bash works and what to setup. I also learned some tricks from
the <a href="https://www.nexusmods.com/oblivion/mods/49898">Oblivion Comprehensive Modding Guide by
Dispensation</a>.</p>
<h3 id="setup">Setup</h3>
<p>The easiest option is to use the stand-alone executable from the GitHub releases
page. Extract the archive, and then use Proton to run the executable in the
<em>Mopy</em> directory. This is the alias I use; replace paths accordingly:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-wrye='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
/path/to/proton/proton run /path/to/OblivionMods/Tools/Mopy/Wrye\ Bash.exe'
</code></pre></div></div>
<p>Additionally, I copy the <em>Mopy/bash_default.ini</em> file to <em>Mopy/bash.ini</em> and set
the <code class="language-plaintext highlighter-rouge">sOblivionMods</code> to “Z:\path\to\OblivionMods\WryeBash”, <code class="language-plaintext highlighter-rouge">sBashModData</code> to
“Z:\path\to\OblivionMods\WryeBash\Bash Mod Data”, <code class="language-plaintext highlighter-rouge">sInstallersData</code> to
“Z:\path\to\OblivionMods\WryeBash\Bash Installers”, and <code class="language-plaintext highlighter-rouge">sOblivionPath</code> to
“Z:\path\to\steam\steamapps\common\Oblivion”. In Wine, <code class="language-plaintext highlighter-rouge">Z:</code> references your
local file system. Theoretically, because Wine is awesome, you may be able to
use Linux file system paths in the configuration, but I went with this.</p>
<h3 id="usage">Usage</h3>
<p>The guides above provide a very thorough explanation of use. Of note: <code class="language-plaintext highlighter-rouge">Wrye
Bash</code> in Wine does not like drag-and-drop actions, so dont do them. I dont do
anything special with my usage of <code class="language-plaintext highlighter-rouge">Wrye Bash</code>: run the alias, install mods from
the Installers tab, enable or disable mods from the Mods tab. I generally dont
do anything else.</p>
<h2 id="loot">LOOT</h2>
<ul>
<li><a href="https://github.com/loot/loot">Project Link</a></li>
<li><a href="https://loot.github.io/">Homepage</a></li>
</ul>
<p><code class="language-plaintext highlighter-rouge">LOOT</code> sets the proper load order for mods. There is a native Linux client, but
I ran into <a href="https://github.com/loot/loot/issues/1615">this issue</a> and decided to
just use the Windows version. The GitHub releases page includes a 7z archive
with a stand-alone executable, and thats what I used.</p>
<h3 id="setup-1">Setup</h3>
<p>Download the stand-alone executable, and extract it to <em>OblivionMods/Tools</em>.
This is the alias I use; replace paths accordingly:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-loot='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
/path/to/proton/proton run /path/to/OblivionMods/Tools/LOOT/LOOT.exe'
</code></pre></div></div>
<p>On first run, it should auto-detect the Oblivion installation and configure
everything accordingly. If it doesnt, there are instructions on the Homepage
for configuration.</p>
<h3 id="usage-1">Usage</h3>
<p><code class="language-plaintext highlighter-rouge">LOOT</code> is pretty straight forward. It references a master list of mods to
determine the optimal load order for all installed mods. I ran into an issue
where <code class="language-plaintext highlighter-rouge">LOOT</code> couldnt properly download the master list, and so as a work-around
I manually downloaded the master list, and then configured <code class="language-plaintext highlighter-rouge">LOOT</code> to use that
local file instead of the remote Git repository. Those instructions are covered
<a href="https://loot.github.io/docs/help/LOOT-FAQs.html#git-errors">in the FAQ</a>. If
everything works, and the list of mods is there, then you can run a sort, and
apply the changes. <code class="language-plaintext highlighter-rouge">LOOT</code> will inform you of any “dirty” mods, which you can use
the next tool the clear up. I ended up keeping <code class="language-plaintext highlighter-rouge">LOOT</code> open, while stepping
through the cleaning procedure for each mod, until everything looked happy.</p>
<h2 id="tes4edit">TES4Edit</h2>
<ul>
<li><a href="https://github.com/TES5Edit/TES5Edit">Project Link</a></li>
<li><a href="https://tes5edit.github.io/">Homepage</a></li>
<li><a href="https://www.nexusmods.com/oblivion/mods/11536">Nexus Link</a></li>
</ul>
<p><code class="language-plaintext highlighter-rouge">TES4Edit</code> is the Oblivion version of <code class="language-plaintext highlighter-rouge">xEdit</code>, which is an incredible tool. All
I use it for is to clean dirty mods. <code class="language-plaintext highlighter-rouge">LOOT</code> provides a link to the <a href="https://tes5edit.github.io/docs/7-mod-cleaning-and-error-checking.html#ThreeEasyStepstocleanMods">quick cleaning
guide</a>,
which gives us exactly the steps required.</p>
<h3 id="setup-2">Setup</h3>
<p>Download the latest build from GitHub, and extract it to <em>OblivionMods/Tools</em>.
This is the alias I use, which runs the “Quick Auto Clean” function; replace
paths accordingly:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-tes4edit-quick='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
/path/to/proton/proton run /path/to/OblivionMods/Tools/TES4Edit/TES4EditQuickAutoClean.exe'
</code></pre></div></div>
<p>TES4Edit is also useful for other, non-quick-clean functionality, so I have this
alias for that:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-tes4edit='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
/path/to/proton/proton run /path/to/OblivionMods/Tools/TES4Edit/TES4Edit.exe'
</code></pre></div></div>
<h3 id="usage-2">Usage</h3>
<p>Run the quick-clean alias, select the problematic file, and click “OK”. Only one
file can be cleaned at a time.</p>
<h2 id="tes4lodgen">TES4LODGen</h2>
<ul>
<li><a href="https://github.com/TES5Edit/xLODGen">Project Link</a></li>
<li><a href="https://tes5edit.github.io/docs/16-xLODGen.html">Homepage</a></li>
<li><a href="https://www.nexusmods.com/oblivion/mods/15781?tab=description">Nexus Link</a></li>
</ul>
<p><code class="language-plaintext highlighter-rouge">TES4LODGen</code> will generate the relevant LOD files ahead of time. Apparently it
helps with performance in-game, but may result in slower initial load times when
starting the game.</p>
<h3 id="setup-3">Setup</h3>
<p>I downloaded the files from Nexus, and extracted the archive to
<em>OblivionMods/Tools/TES4LODGen</em>. Heres the alias; replace paths accordingly:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-tes4lodgen='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
/path/to/proton/proton run /path/to/OblivionMods/Tools/TES4LODGen/TES4LODGen.exe'
</code></pre></div></div>
<h3 id="usage-3">Usage</h3>
<p>Run the alias. The program should auto-find everything, do some magic, and will
eventually report that it has finished. At that point, you can close the
application.</p>
<h2 id="bethini">BethINI</h2>
<ul>
<li><a href="https://www.nexusmods.com/oblivion/mods/46440">Nexus Link</a></li>
</ul>
<p><code class="language-plaintext highlighter-rouge">BethINI</code> helps manage the “oblivion.ini” file, providing sane options and a
wizard for configuration. While not required, it does help with optimizations.</p>
<h3 id="setup-4">Setup</h3>
<p>I downloaded the files from Nexus, and extracted the archive to
<em>OblivionMods/Tools/Bethini</em>. If you use AutoHotKey apparently you can use that
to run it, but that doesnt make sense to me, so I went with the stand-alone
executable. Heres the alias; replace paths accordingly:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-bethini='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
/path/to/proton/proton run /path/to/OblivionMods/Tools/BethINI/BethINI.exe'
</code></pre></div></div>
<h3 id="usage-4">Usage</h3>
<p>Just like the rest, run the alias and answer the questions. <code class="language-plaintext highlighter-rouge">BethINI</code> will make
backups of the modified INI files before over-writing them.</p>
<h1 id="next-steps">Next Steps</h1>
<p>Once all the tools are assembled, and usable, the next step is mods! In my next
post, Ill cover some of my favorite mods. The third part will then be a
complete walk-thru of my installation of my full mod list.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Oblivion holds a special place in my heart. I remember spending a summer in the town I went to college in, and playing Oblivion almost every day while listening to Dream Theaters Systematic Chaos. Back then, I wasnt aware of modding, so it was literally just vanilla Oblivion for hours upon hours. I also used Windows, so the game would run fine. Now, things have changed. The easier issue to deal with is playing Oblivion on Linux. Thanks to Valve, Oblivion runs excellent with Proton out of the box. The more challenging issue is mods, and thats what this write-up is all about!]]></summary></entry><entry><title type="html">Character Write-up: Dabbledop Humblebumple</title><link href="https://www.theinternetvagabond.com/2020/10/23/gnome-cleric-wizard.html" rel="alternate" type="text/html" title="Character Write-up: Dabbledop Humblebumple" /><published>2020-10-23T00:00:00-05:00</published><updated>2020-10-23T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2020/10/23/gnome-cleric-wizard</id><content type="html" xml:base="https://www.theinternetvagabond.com/2020/10/23/gnome-cleric-wizard.html"><![CDATA[<p>Gnomes are interesting. I cant help but play them as small frantic stressballs.
Like hobbits from <em>Lord of the Rings</em>, dialed up to 11, minus the extra
breakfasts, and plus ceaseless banter. Gnomes are fun. This write up was for a
character for the same campaign as <a href="/2018/01/27/halvar.html">Halvar</a>, when he had
to step away for a bit.</p>
<h2 id="backstory">Backstory</h2>
<p>Nothing is more tiresome than midweek afternoon service. All the candles, and
the verses, and the never-ending procession. Odins great and all, but I dont
think he cares about this. Of course, I mention that one time to the head priest
and its latrine duty for the week! I guess now it doesnt matter. All these
acolyte duties were from many years ago. It was pure fate, the day my current
teacher Maellezharon wandered into our village. He needed certain gemstones,
which my family was renowned for, and which I was responsible for that day. I
just happened to bring exactly the number he needed with me to the church that
day. Thats a habit I have. The priests say Im “blessed by foresight.”</p>
<p>Anyway, Maellezharon wanders in, and finds me, and I tell him I know hes
looking for these gemstones, and hes a bit surprised, but mentions that he
hadnt had his serious anti-divination protections up, since he figured no one
would care. I told him I didnt know what that meant. The priest chimed in that
I was blessed by foresight. Maellezharon said that was shit. I was blown away.
The priest huffed and wandered off, and I just stared at this elf who seemed
completely unphased by an ability the priests couldnt stop fawning over me for.
So I push him a bit on it, and he says that divination is mighty common, and
that if I wanted to learn more he could teach me, and hed be willing to give me
a discount on his services if I gave him a discount on the gems!</p>
<p>And man temples are booooring! So yeah, I just packed up some stuff and told the
priests I had to go because “foresight told me I had to!” and caught up with
Maellezharon and off we went! I brought some extra gems, and a few extra
sandwiches (which he seemed off-put by, which I account to his dainty elf ways,
which meant more for me!).</p>
<p>For the most part, it was kind of boring - but not as boring as the temple!
Nothing is as boring as that. Trust me. Just routine travel along “safe and
well-known roads” (says Maellezharon) to “respectable and trustworthy
merchants” (says Maellezharon) for “law-abiding and fair trade deals.” (says
Maellezharon). I was a bit surprised to find myself still saying a prayer here
and there but old habits die hard. The more we travelled, the more Maellezharon
would teach me. First he helped me refine my portent abilities, and got me a
spellbook, and let me copy some of his spells into it. Then, in each town we
went to, we would combine our powers to get the best deals possible. I would
call upon my divine powers to aid him, and he would wheel-and-deal his way
through trade deals and contracts. He insisted, time and again, that we do
things “legally and fair” (his words) which was fine by me.</p>
<p>Then, the event happened. And magic suddenly left, and Maellezharon… did not
take that well. I should say, this was probably 5 or so years into his
mentorship. He had taught me many things, and I was developing into “quite the
capable wizard, if I do say so myself” (Maellezharon said that). We had
travelled all over the place, and eventually Maellezharon decided hed like to
“invest in real estate since its like free money” so he bought a tower and did
the whole typical wizard thing: magic plants, and a few animated objects as
guards, and what not. I helped with that too, which was really fun. Anyway when
the event happened, we were trading and suddenly I just felt this… emptiness.
Like, a part of my body was suddenly missing. I looked at Maellezharon and he
was pale as bone. He just stared at his hands, then looked at the merchant and
told him he had to go, and he just left. He didnt even get his things, he just
stumbled out of the shop. I grabbed anything that was ours, and walked outside
and saw him just standing there, waving his arms and trying to say the words,
and his eyes were a bit crazy-like, and he was sweating. After about 20 minutes,
he just sat down and stared. It took me almost 4 hours to finally get him up and
to an inn. The next day we went back to the tower, and it was really quite a sad
sight. The plants had all died (and not because I forgot to water them I always
watered them I am responsible), the guards were piles of rubble. I helped him
in, to his room, to his favorite chair, where he just slumped down and stared
into the empty, cold fireplace. For a few weeks I tended to him, making sure he
at least ate. And I kept up the place, cleaning as best I could. But after a
while, I started worrying about my family, and so I hired a local farm boy to
take care of Maellezharon while I was gone (feed him twice a day, make sure he
uses the loo, and dont let him hurt himself).</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Gnomes are interesting. I cant help but play them as small frantic stressballs. Like hobbits from Lord of the Rings, dialed up to 11, minus the extra breakfasts, and plus ceaseless banter. Gnomes are fun. This write up was for a character for the same campaign as Halvar, when he had to step away for a bit.]]></summary></entry><entry><title type="html">Pathfinder Characters: Eldritch Knight</title><link href="https://www.theinternetvagabond.com/2020/09/27/pathfinder-eldritch-knight.html" rel="alternate" type="text/html" title="Pathfinder Characters: Eldritch Knight" /><published>2020-09-27T00:00:00-05:00</published><updated>2020-09-27T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2020/09/27/pathfinder-eldritch-knight</id><content type="html" xml:base="https://www.theinternetvagabond.com/2020/09/27/pathfinder-eldritch-knight.html"><![CDATA[<h1 id="building-my-eldritch-knight">Building My Eldritch Knight</h1>
<p>Pathfinder has been the tabletop game of choice for my longest-running group.
One of my favorite activities is creating characters. I love theory crafting,
pouring through source material, and setting limits. My favorite archetype of
characters are those that take the combat focus of a warrior and supplement it
with magic. The druid, which I <a href="/2020/09/06/pathfinder-druid.html">already touched
on</a>, is a class that
has this built in. This blending of magic and metal is often called a
<a href="https://en.wiktionary.org/wiki/gish">Gish</a>.</p>
<h2 id="concept">Concept</h2>
<p>All of my characters come from a concept. This concept is heavily mechanics
focused, and heavily opinionated: I want a “proper” eldricth knight. To me, a
proper eldritch knight doesnt use any gimmicks or tricks to get into the
prestige class sooner, doesnt rely too heavily on especially unique or strange
equipment, and sticks to a limited set of rule books.</p>
<h2 id="build">Build</h2>
<p>For this build, Ill be limiting myself the these rule books:</p>
<ul>
<li>Core Rulebook</li>
<li>the Ultimate books (Combat, Magic, Intrigue, Wilderness, and Equipment)</li>
<li>the Advanced books (Players Guide, Race, and Class)</li>
</ul>
<p>Eldritch Knight needs a martial class, and an arcane class. While there are
plenty of options, I wanted to start with the most basic options:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Fighter 1 / Wizard (Enchantment) 5 / Eldritch Knight X
</code></pre></div></div>
<p>Wizards have the option of taking a school, and it makes a lot of sense for
a melee combatant to focus on buffing itself. Thus, I went for a Transmutation
school, and specifically for the Enchantment school. For opposed schools, I
opted for Evocation and Necromancy. I lose out on some nice spells, certainly,
but considering our focus, we wouldnt be using many blasting spells. Not to
mention, our spell penetration will be relatively weak by comparison to more
spell-focused builds. Obviously, open to alternatives, but I would advise
against choosing Illusion, since it has some of the better non-transmutation
buffs in the game.</p>
<p>Wizards also have to choose an arcane bond, which is either a familiar or an
item. Familiars are incredibly useful, but for this build I really liked the
idea of having my arcane bond be my weapon. This can be <strong>very dangerous!</strong> If
your bonded item is taken from you, or destroyed, you will have a <em>very
difficult time</em> casting spells.</p>
<h2 id="traits">Traits</h2>
<p>In our Pathfinder group, we dont <em>really</em> use traits, but I use traits.
Specifically, I always use 1 trait when it is applicable, because I believe
without this trait, any Gish build that relies on multiple classes is severely
penalized: Magical Knack. This trait will allow me to up my caster level for
Wizard by up to +2, up to my maximum hit dice. This doesnt give me more spells
per day, but it does affect spell details such as duration, or saving throw DC,
that rely on caster level. Conveniently, for this build, we have exactly two
levels that do not give a bonus to wizard caster level: the 1 level of fighter
we take, and the first level of eldritch knight.</p>
<p>If two traits are allowed, solid choices are <code class="language-plaintext highlighter-rouge">Reactionary</code> for a bonus to
initiative; <code class="language-plaintext highlighter-rouge">Deft Dodger</code> for an improved reflex save; <code class="language-plaintext highlighter-rouge">Eyes and Ears of the
City</code> for a bonus on perception and to add it as a class skill; or <code class="language-plaintext highlighter-rouge">Armor
Expert</code> to reduce all armor check penalties by 1.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Magical Knack (Wizard)
</code></pre></div></div>
<h2 id="race">Race</h2>
<p>Human. Elf as a very close second. The bonus for spell penetration, the bonus to
perception and spellcraft skills, and the ability score modifiers are all solid.
But, this build wont need to worry about puncturing spell resistance, and
because were a melee combatant, we need all the constitution we can get. Human
provides a bonus +1 skill point per level, a bonus feat, and a floating +2
ability score increase, which we can use for our strength or intelligence.</p>
<h2 id="skills">Skills</h2>
<p>None of the three classes in this build provide a significant number of skills;
all three give 2 + INT per level. However, being a wizard, we <em>do</em> have a nice
intelligence score, and as a human we get an additional +1. At a minimum, well
probably get 5 skill points per level. There are no skill requirements to get
into eldritch knight, so we can focus on the “important” skills:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Knowledge (Arcana)
Knowledge (Dungeoneering)
Knowledge (Nature)
Knowledge (Planes)
Knowledge (Religion)
Perception
Sense Motive
Spellcraft
Survival
</code></pre></div></div>
<p>I also like to drop a single point in <code class="language-plaintext highlighter-rouge">Climb</code>, <code class="language-plaintext highlighter-rouge">Swim</code>, <code class="language-plaintext highlighter-rouge">Ride</code>, and <code class="language-plaintext highlighter-rouge">Fly</code>, if I
can afford to. Getting the trained bonus, combined with our generally good
strength and dexterity, means we can accomplish the basics. As a wizard, we can
further supplement these with spells. Unfortunately, we do not get perception as
a class skill, and so using a trait for that would make sense.</p>
<h2 id="feats">Feats</h2>
<p>It is very easy to get lost in feats. Like most aspects of Pathfinder, there are
an excess of options. To narrow down my focus, I tried to consider what the
characters options were: warrior focused on melee combat; wizard focused on
buffing and crowd control. Being in melee means Ill be wearing armor, and that
brings the <code class="language-plaintext highlighter-rouge">Arcane Armor Training</code> feats into relevance. Theres also the
<code class="language-plaintext highlighter-rouge">Arcane Strike</code> feat, which is perfect for arcane gish builds. Initiative is the
king of combat, and as a wizard Ill want to try going first as often as
possible. I also dont have the most hit points, due to those 5 levels of
wizard. <code class="language-plaintext highlighter-rouge">Improved Initiative</code> and <code class="language-plaintext highlighter-rouge">Toughness</code> make sense. Considering the
possibility of being in combat when buffing, <code class="language-plaintext highlighter-rouge">Combat Casting</code> makes sense. Ill
probably focus on a specific weapon, so <code class="language-plaintext highlighter-rouge">Weapon Focus</code> makes sense, and as a
fighter/eldritch knight, those levels will stack for feat requirements. That
means, <code class="language-plaintext highlighter-rouge">Weapon Specialization</code> is a possibility in the future.</p>
<p>While Im sure there are some crazy feats in other books, all these feats come
from the Core Rulebook. That excites me for some reason. Thus far, the only
non-core rulebook thing weve done is traits, and for this build we can live
without those if absolutely necessary. Again, this limit isnt necessary, but it
was something I wanted to adhere to for this build.</p>
<p>The number of feats laid out above is very quickly growing. Conveniently, Im
entering the game with 3: one for level 1, a bonus for human, and a bonus for
fighter. Thats <code class="language-plaintext highlighter-rouge">Improved Initiative</code>, <code class="language-plaintext highlighter-rouge">Toughness</code>, and <code class="language-plaintext highlighter-rouge">Weapon Focus</code>. Any
two-handed weapon will do, though Im partial to the good ol greatsword. Using
a sword-and-board will severely restrict my casting abilities, because both
hands will be full.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Improved Initiative (Level 1)
Toughness (Human bonus feat level 1)
Weapon Focus (Greatsword) (Fighter level 1 bonus combat feat)
Scribe Scroll (Wizard level 1 bonus feat)
Combat Casting (Level 3)
Arcane Strike (Level 5)
Craft Wonderous Items (Wizard level 5 bonus feat; debatable)
Arcane Armor Training (Eldritch Knight bonus combat feat)
Power Attack (Level 7)
</code></pre></div></div>
<p>The wizard gets a bonus feat at level 5, which is limited to an arcane crafting
feat, a metamagic feat, Spell Mastery, or an arcane discovery. I opted for
<code class="language-plaintext highlighter-rouge">Craft Wonderous Items</code> because I like the options it opens up. There are some
good metamagic options I considered though: <code class="language-plaintext highlighter-rouge">Extend Spell</code> makes sense for
buffing; <code class="language-plaintext highlighter-rouge">Still Spell</code> makes sense since were in armor; <code class="language-plaintext highlighter-rouge">Toppling Spell</code> can
give Magic Missile and other force damage spells some crowd-control. Since
evocation is one of my opposed schools, though, it wouldnt work for me.</p>
<p>Wizards at first level also get <code class="language-plaintext highlighter-rouge">Scribe Scroll</code> as a bonus feat. Scrolls are
great for situational spells.</p>
<h2 id="gear">Gear</h2>
<p>Theres only one piece of gear that is unusual here, and its the armor. Kikko
armor is from Ultimate Equipment, and specifically is a type of eastern setting
armor. It provides a +5 armor bonus, allows for a dexterity bonus of +4, incurs
a -3 armor check penalty, and has 20% arcane spell failure. However, it is
primarily made of metal, and thus can be made from mithral. A mithral suit of
kikko armor provides +5 armor bonus, allows for a dexterity bonus of 6, incurs
no armor check penalty, and has a 10% arcane spell failure. Those numbers are
fantastic. No armor check penalty is great for the odd <code class="language-plaintext highlighter-rouge">Climb</code> or <code class="language-plaintext highlighter-rouge">Swim</code> check,
and for when I can <code class="language-plaintext highlighter-rouge">Fly</code>. The 10% arcane spell failure chance is lowered to 0%
by <code class="language-plaintext highlighter-rouge">Arcane Armor Training</code>, allowing me to safely cast in armor when I so
choose. If limited to the core rule book, the next best bet will be either a
breastplate, or hide armor.</p>
<p>As for the weapon, I went with a greatsword. You could go with a falchion, and
“crit-fish,” but Id rather have the raw damage. Numbered enchantment bonuses
are good, but there is one specific enchantment I would highly suggest: called.
A called weapon can be teleported to the wielders hand as a swift action.
Considering our greatsword is our arcane focus, well want that in our
possession at all times, and this greatly increases the chances of that. Keen
wouldnt be too bad; increasing the critical threat range to 17-20. Spell
storing obviously makes a lot of sense, too.</p>
<p>Im a spell caster, so I picked up a few <code class="language-plaintext highlighter-rouge">Pearls of Power</code>, a few wands (<code class="language-plaintext highlighter-rouge">Cure
Light Wounds</code>, <code class="language-plaintext highlighter-rouge">Protection from Evil</code>, and <code class="language-plaintext highlighter-rouge">Expeditious Retreat</code>), and a bunch
of potions of <code class="language-plaintext highlighter-rouge">Lead Blades</code>. The reason for the potions and not scrolls or a
wand is to avoid <code class="language-plaintext highlighter-rouge">Use Magic Device</code> checks.</p>
<p>I have a collection of mundane items, including things like a bedroll, rope,
sewing needles, chalk, and a handful of alchemical items, that I like to carry
in a <code class="language-plaintext highlighter-rouge">Handy Haversack</code>.</p>
<p>Beyond all this, I went with the remainder of the “Big 6”: a <code class="language-plaintext highlighter-rouge">Cloak of
Resistance</code>, a <code class="language-plaintext highlighter-rouge">Ring of Protection</code>, a <code class="language-plaintext highlighter-rouge">Headband of Intellect</code>, and a <code class="language-plaintext highlighter-rouge">Belt of
Strength</code>.</p>
<p>With any left over funds, investing in additional spells known, scrolls, copies
of your spellbook, and cheaper wonderous items is always nice.</p>
<h2 id="spells">Spells</h2>
<p>Im a wizard (Harry), with the most versatile spell list in the game, and a book
(or books) that can get them all! Aside from the opposed school (but even then,
there are some worth getting, such as <code class="language-plaintext highlighter-rouge">False Life</code>), I went for every spell that
I even remotely thought I would use. On my sheet, thats 62 spells across levels
1 to 3. I wont mark them all here, but there are some which I wouldnt want to
be without.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Level 1
- Comprehend Languages (also a great scroll)
- Enlarge Person
- Magic Missile (despite being opposed, a solid fall-back)
- Mount
- Protection from Alignment (generally, evil and chaos make the most sense)
- Shield
- Vanish
Level 2
- False Life
- Glitterdust
- Invisibility
- Mirror Image
- Resist Energy
- Rope Trick
Level 3
- Ablative Barrier
- Fly
- Haste
- Phantom Steed
- Sleet Storm
- Versatile Weapon
</code></pre></div></div>
<p>At character level 9, we get access to 4th level wizard spells. Some spells on
my wishlist include great crowd-control like <code class="language-plaintext highlighter-rouge">Acid Pit</code> and <code class="language-plaintext highlighter-rouge">Black Tentacles</code>;
self-buffs like <code class="language-plaintext highlighter-rouge">Stoneskin</code> and <code class="language-plaintext highlighter-rouge">Greater Invisibility</code>; and utility like
<code class="language-plaintext highlighter-rouge">Dimension Door</code>, <code class="language-plaintext highlighter-rouge">Stone Shape</code>, and even <code class="language-plaintext highlighter-rouge">Wall of Fire</code> or <code class="language-plaintext highlighter-rouge">Wall of Ice</code>,
despite them being from an opposed school.</p>
<p>Also, as a wizard I got <code class="language-plaintext highlighter-rouge">Scribe Scroll</code> at first level. Many spells in my
spellbook are almost only there so I can make scrolls of them. Examples include
<code class="language-plaintext highlighter-rouge">Identify</code>, the various ability enhancements (<code class="language-plaintext highlighter-rouge">Cats Grace</code>, etc..), and so on.</p>
<h2 id="gameplay">Gameplay</h2>
<p>Ive actually played this build 3 times. The first time, as the human shown
here. The second time, as this build but with the zombie lord template added.
And a third time, but with the skeleton champion template added. Needless to
say, those templates make this build <em>incredibly powerful</em>. However, I made some
poor play decisions, thinking I was a bit more resistant that I actually was,
and so all of these characters died rather unfortunate and avoidable deaths.</p>
<p>What Ive learned through all three characters is to be patient! This build is
very capable, with many options. It can wade into combat and deal some
significant damage, even before buffs. Out of combat, it has the flexibility
that a well-filled spell book can provide, and a good coverage of knowledge
skills.</p>
<p>When engaging in combat, I always try to make sure I have the following
self-buffs up, or ready to be up:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">Protection from Alignment</code></li>
<li><code class="language-plaintext highlighter-rouge">Shield</code></li>
<li><code class="language-plaintext highlighter-rouge">Resist Energy</code></li>
<li><code class="language-plaintext highlighter-rouge">Mirror Image</code></li>
<li><code class="language-plaintext highlighter-rouge">Ablative Barrier</code></li>
</ul>
<p>For damage, theres a ranger spell called <code class="language-plaintext highlighter-rouge">Lead Blades</code> which is so good it
should almost be considered essential. <code class="language-plaintext highlighter-rouge">Versatile Weapon</code> can help with damage
resistance which is overcome with special materials.</p>
<p>As for party buffs, few options beat <code class="language-plaintext highlighter-rouge">Haste</code>.</p>
<p>For crowd-control, Ill tend towards a <code class="language-plaintext highlighter-rouge">Glitterdust</code>, <code class="language-plaintext highlighter-rouge">Pyrotechnics</code>, or <code class="language-plaintext highlighter-rouge">Sleet
Storm</code>.</p>
<p>In combat, get buffed to a point you feel capable. This may take 2 or 3 rounds.
Thats OK! Youre the second line. Use your swift action for <code class="language-plaintext highlighter-rouge">Arcane Armor
Training</code>, buff yourself, move in. Do that again, maybe moving in for a flank.
Third round, swift action for <code class="language-plaintext highlighter-rouge">Arcane Strike</code>, and unload with a <code class="language-plaintext highlighter-rouge">Power Attack</code>
greatsword swing! If youve got <code class="language-plaintext highlighter-rouge">Lead Blades</code> up, thats 3d6 + 6 (<code class="language-plaintext highlighter-rouge">Power
Attack</code>) + 2 (<code class="language-plaintext highlighter-rouge">Arcane Strike</code>) + 1.5x strength bonus. Not bad! Unfortunately,
Eldritch Knights lag behind for base-attack bonus, so at level 8 (which is the
level for all my builds) its only 1 attack a round. At level 9, you get two
attacks a round. You can also fall back on a composite longbow, which you can
also use <code class="language-plaintext highlighter-rouge">Arcane Strike</code> with for 1d8 + strength bonus + 2 (<code class="language-plaintext highlighter-rouge">Arcane Strike</code>),
which isnt as impressive as that big sword, but can still contribute. And, if
weapons wont due, youre a wizard! Keep your prepared spells flexible. <code class="language-plaintext highlighter-rouge">Scribe
Scroll</code> allows you to have certain spells available at all times. <code class="language-plaintext highlighter-rouge">Craft
Wonderous Items</code> can allow you to create plenty of gizmos and gadgets that give
you once-per-day options. Crafting is powerful; use it!</p>
<p>Ive always had fun with this build. I have, no joke, lost sleep just figuring
out cool spells to add to the spell book, worthwhile scrolls, and just imagining
scenarios. Despite the apparent short-comings, the Eldritch Knight can
definitely hold its own, though it does require a ramp-up time.</p>
<h1 id="sources">Sources</h1>
<ul>
<li><a href="https://www.d20pfsrd.com/">Pathfinder SRD</a></li>
<li><a href="https://docs.google.com/document/d/10x042PGSyqX4JqHbYFf7vDsK1NCnhBT2ck8i1eG6kpc/edit">The Muscle Wizard Guide</a></li>
2025-01-03 19:48:05 +00:00
</ul>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Building My Eldritch Knight]]></summary></entry></feed>