diff --git a/content/blog/framework-13.md b/content/blog/framework-13.md
new file mode 100644
index 0000000..5a64a61
--- /dev/null
+++ b/content/blog/framework-13.md
@@ -0,0 +1,58 @@
++++
+title = "Framework 13 @ 6 months"
+date = 2024-10-15
++++
+
+The internet does not need another "framework laptop cool" post.
+
+Unfortunately, I don't care what the internet wants or needs.
+
+---
+
+I've been using my Framework 13 (Ryzen 7040 edition) for around 6 months now, and I have some thoughts.
+This post is mainly to organize them all in one place - I may or may not randomly update this when I have New Thoughts, we'll see.
+
+## Performance
+I don't have any real performance benchmarks.
+If you want those, go find some Actual Review Company that does Actual Product Reviews.
+
+In the things I normally do (web browsing, programming, some gaming) performance has never been an issue.
+I have the model with the 7840U (8 cores), and for a laptop chip it's pretty great.
+My only real complaint would be the graphics performance, but being an integrated GPU (Radeon 780M) it's totally fine for what it is.
+It wasn't *designed* to play Satisfactory or Baldur's Gate 3, and it handles both of those *playably*, which is probably more than I should have expected.
+
+## Battery Life
+Battery life hasn't been a problem. I can get through a school day with more than half of the battery left, and that's all that really matters to me.
+It dies quickly if you try to game on it, but that's to be expected.
+
+## Speakers
+They... exist.
+That's about all I can say.
+
+They don't sound particularly great out of the box, and while it might be possible to tune them, I haven't bothered.
+I've never actually needed to use the speakers, so I haven't really cared to look into it.
+
+## Flex
+I don't notice the keyboard flexing when I type on it, but it sometimes leaves marks on the screen.
+I have to clean the screen pretty often to not have a constant keyboard imprint on it.
+
+## Bezel
+The magnetic bezel is **entirely** too fun to play with. I started fidgeting with it, and after a while the plastic started to crack.
+I can't blame this on the laptop, it's entirely my own doing, but still a little annoying.
+
+I also just wish they came in more exciting colors. Where's blue? A dark purple? (Please, Framework, please...)
+
+## IO
+I currently have:
+- 2x USB-C
+- 1x USB-A
+- 1x HDMI
+
+The HDMI expansion card in particular came in super useful.
+A friend of mine needed a USB-C to HDMI adapter, and I simply pulled it out of my laptop and gave it to him.
+It's kind of nice to just have that on hand, rather than carrying even more adapters in my backpack.
+
+## Conclusion
+I like the laptop, it works for me, but I understand that it's by no means a perfect laptop for everyone.
+The value isn't great, and it's definitely not as *polished* a product as, say, a macbook.
+Despite that, I really like Framework's mission, and I don't regret buying it. It's been great for me overall.
diff --git a/content/blog/keyboard-lighting.md b/content/blog/keyboard-lighting.md
new file mode 100644
index 0000000..430b32b
--- /dev/null
+++ b/content/blog/keyboard-lighting.md
@@ -0,0 +1,211 @@
++++
+title = "Keyboard Lighting"
+date = 2024-04-10
+updated = 2024-07-30
++++
+{% note() %}
+**I am not a keyboard nerd**. Full respect to any of you out there, but I am not one, nor do I plan to become one anytime soon.
+Don't take this as a "definitive guide" to anything, it was just me messing around.
+{% end %}
+
+# Introduction
+Yesterday, I started using a new keyboard.
+Well, it was yesterday as of when I started writing this - it certainly isn't yesterday anymore.
+
+Previously, I'd been using a super mushy-feeling Incredibly Generic Office Supply Keyboard from Dell, which honestly sucked.
+After a few years of heavy use it had gotten kinda nasty, and was basically uncleanable.
+
+Considering how much time I spend typing, I figured it was worth getting an upgrade, so I ordered a
+[Keychron C1 Pro](https://www.keychron.com/products/keychron-c1-pro-qmk-via-wired-mechanical-keyboard?variant=40615805583449)
+(the variant with hot-swappable switches, and therefore also RGB lighting).
+I'm not going to say it's the best keyboard ever and that you should go out and buy it immediately,
+or conversely that it's the *worst* keyboard and you should avoid it at all costs.
+It's fine for my purposes, and is a huge improvement over my old keyboard, but that's beside the point.
+
+I didn't buy it for the RGB effects.
+To be honest, I don't even *like* RGB lighting most of the time. I find it kind of distracting,
+and I usually try to avoid "gamer-branded" products stuffed to the brim with multicolored lights like the plague.
+But, being me, and being told "yeah this keyboard has an ARM chip inside it" (a `STM32F402RC` to be precise) I had to see if I could customize it.
+
+Aaaand so began an afternoon-long dive down a keyboard rabbit-hole.
+
+# VIA
+{% important() %}
+I started writing this before [Keychron Launcher](https://launcher.keychron.com) came out.
+I haven't tried to use it, and don't really know what it's capable of, but it's possible that
+if it had existed at the time I wouldn't have gone down this rabbit hole at all.
+{% end %}
+
+From poking around on Keychron's website it looked like the simplest route to customize the lighting was to use [VIA](https://www.caniusevia.com/).
+Firefox doesn't support [webhid](https://caniuse.com/?search=webhid), but Chromium-based browsers do, so I opened up Chromium...
+and what's this? An error? Already? I haven't even *done* anything yet.
+
+{{ image(src="/assets/keyboard/keyboard-via-error.png", alt="Screenshot of VIA displaying an error", caption="Extremely useful error message") }}
+
+Ooookay?
+
+Apparently you need to dig up a keyboard-specific config file (in my case [this json](/assets/keyboard/c1_pro_v2_ansi_rgb.json)) and load it.
+Don't really know how I missed that.
+
+In any case, it seemed to be working, and I could cycle through the various RGB modes, as well as customize the static color.
+But, come on, that's *so dreadfully boring*. I wasn't interested in customizing keymaps or anything like that, and I felt... unsatisfied... with the lighting options.
+Apparently their definition of "customizable" lighting doesn't quite align with mine.
+There's a little computer inside there, there's bound to be *something* more I can do with it...
+
+# Screwing around with a Windows VM
+After googling around for a while, I stumbled upon [this reddit post](https://www.reddit.com/r/Keychron/comments/lbk2fk/a_very_odd_workaround_for_the_rgb_software/)
+advertising a supposed way to program the lighting using somewhat sketchy-seeming third-party software.
+
+Soo... (not knowing any better), I guess it's Windows VM time!
+
+{{ image(src="/assets/keyboard/keyboard-windont.png", alt="Windows installation screen inside of QEMU", caption="Ah shit, here we go again") }}
+
+Maybe it had something to do with the keyboard itself being unsupported, maybe it was the software,
+maybe it was USB device passthrough being weird, but the app always quit with a "no gaming device found" popup and no other useful information.
+I also tried VIA again and some other software, and had no real success with any of it.
+
+Solid waste of an hour.
+
+It felt like I was digging too deep into solutions for *my specific keyboard*, but how do people do this more generally?
+
+# QMK Firmware
+> Your computer keyboard has a processor inside of it, similar to the one inside your computer.
+> This processor runs software that is responsible for detecting button presses and informing the computer when keys are pressed.
+> QMK Firmware fills the role of that software, detecting button presses and passing that information on to the host computer. [...]
+> QMK tries to put a lot of power into your hands by making easy things easy, and hard things possible.
+>
+> \- [QMK documentation](https://docs.qmk.fm/newbs)
+
+Well, this certainly sounds more promising.
+I'm kind of upset I didn't find this earlier, to be honest.
+
+Apparently putting custom firmware on a keyboard is a perfectly normal thing? Having not looked into any of this before, it felt a little daunting.
+
+> Open your `keymap.c` file in your text editor.
+
+Wait what?
+I need C?
+I don't... I don't do C...
+What am I even doing at this point?
+How did I get here?
+Help??? Anyone???
+
+
+At least the [QMK Documentation](https://docs.qmk.fm/newbs) is fairly comprehensive, and flashing custom firmware isn't *that* much of a pain, all things considered.
+They have it set up to be fairly friendly toward clueless people like me who have no idea what they're doing.
+
+I wasn't interested in a custom keymap, I'm just here for the [RGB matrix effects](https://docs.qmk.fm/features/rgb_matrix#custom-rgb-matrix-effects).
+
+The basic examples were pretty easy to follow, and it wasn't that hard to display a static pattern of lights.
+Doing something dynamic sounded cool, but also like a project for The Distant Future(tm).
+
+## HID Communication
+Somehow, the VIA app was communicating with the keyboard to set the static color without flashing new firmware,
+so I wanted to see if I could imitate that myself.
+
+Turns out QMK makes it quite easy to [send data back and forth](https://docs.qmk.fm/features/rawhid)
+between the computer and the keyboard, and after a little fiddling around, I had something promising.
+
+## Final Code
+```c,linenos
+RGB_MATRIX_EFFECT(custom_colors)
+RGB_MATRIX_EFFECT(pride_flag)
+
+#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+// yes I *know* these could be packed but no
+static uint8_t color_r = 0xFF;
+static uint8_t color_g = 0xFF;
+static uint8_t color_b = 0xFF;
+
+// I'm almost positive you're not *supposed* to have this in your rgb effect definitions,
+// but uhh... it works... so, I'm not complaining
+#include "raw_hid.h"
+void raw_hid_receive(uint8_t* data, uint8_t length) {
+ // this probably isn't proper idiomatic C, but whatever
+ color_r = data[0];
+ color_g = data[1];
+ color_b = data[2];
+}
+
+static bool custom_colors(effect_params_t* params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max)
+ for (uint8_t i = led_min; i < led_max; i++) {
+ rgb_matrix_set_color(i,
+ color_r,
+ color_g,
+ color_b
+ );
+ }
+ return rgb_matrix_check_finished_leds(led_max);
+}
+
+
+// simple static effect, just for fun
+static bool pride_flag(effect_params_t* params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ for (uint8_t i = led_min; i < led_max; i++) {
+ int16_t y = g_led_config.point[i].y;
+ // hardcoded y values found through trial and error,
+ // and are probably specific to my particular keyboard model
+ // there's almost certainly a better way, but this Works(tm)
+ //
+ // tbe colors are more or less completely eyeballed since the
+ // color accuracy of this keyboard is garbage
+ if (y <= 13) rgb_matrix_set_color(i, 0x00, 0x00, 0x00);
+ else if (y <= 26) rgb_matrix_set_color(i, 0x2B, 0x9E, 0xFA);
+ else if (y <= 38) rgb_matrix_set_color(i, 0xF0, 0x19, 0x18);
+ else if (y <= 51) rgb_matrix_set_color(i, 0xFF, 0xFF, 0xFF);
+ else if (y <= 63) rgb_matrix_set_color(i, 0xF5, 0x19, 0x18);
+ else rgb_matrix_set_color(i, 0x2B, 0x9E, 0xFA);
+ }
+ return rgb_matrix_check_finished_leds(led_max);
+}
+
+#endif
+```
+
+I then wrote this little command-line thing to let me change the keyboard color on the fly.
+
+```rs,linenos
+use hidapi::HidApi;
+use std::env;
+
+fn main() {
+ let color = u32::from_str_radix(&env::args().nth(1).expect("specify a color"), 16)
+ .expect("failed to parse color");
+
+ let api = HidApi::new().unwrap();
+ let device = api
+ .device_list()
+ .find(|device|
+ // this is... less than great
+ device.vendor_id() == 0x3434 &&
+ device.product_id() == 0x0510 &&
+ device.usage_page() == 0xFF60 &&
+ device.usage() == 0x61
+ ).expect("failed to find keyboard")
+ .open_device(&api)
+ .expect("failed to open device");
+
+ let mut data = [0u8; 32]; // must be 32 bytes
+ data[1..4].copy_from_slice(&color.to_be_bytes()[1..4]);
+ device.write(&data).expect("failed to set color");
+}
+```
+
+It works! Yay!
+
+I'm actually surprised it was that straightforward; when the QMK docs first mentioned using C and flashing
+custom firmware on the keyboard I expected it to be a *lot* worse than it actually ended up being.
+
+# Conclusion
+This was a bit of an adventure.
+I only barely scratched the surface when it comes to QMK, but it's still super cool to see something like this actually *work*.
+
+There's clearly a lot more you can do with custom firmware, especially considering HID communication.
+I can imagine someone doing all sorts of cool things with different keys lighting up to signal different things.
+Maybe a push-to-talk key (for e.g. Discord) with a colorful status indicator?
+
+I'm curious what kind of crazy stuff people have come up with.
+
diff --git a/content/blog/solidworks-on-linux.md b/content/blog/solidworks-on-linux.md
new file mode 100644
index 0000000..a90bb9f
--- /dev/null
+++ b/content/blog/solidworks-on-linux.md
@@ -0,0 +1,181 @@
++++
+title = "Solidworks on Linux"
+date = 2024-10-29
++++
+
+{% note() %}
+If you don't care about the context, you can just [skip to the guide](#instructions).
+{% end %}
+
+The title is somewhat disingenuous, it's less "SolidWorks on Linux" and more "SolidWorks in a Windows VM without Pissing Off The License Server" but that's not as good of a title.
+
+# Context
+- I need SolidWorks 2023 for school.
+- I finally built a PC capable of running it.
+- I use Linux (~~arch btw~~).
+
+See the problem yet?
+{% note() %}
+I know it's supposed to be styled SOLIDWORKS, but that's both annoying to type and to look at, and [Wikipedia just calls it SolidWorks](https://en.wikipedia.org/wiki/SolidWorks).
+I'm just going to go with that.
+{% end %}
+
+## Wine
+My first thought was "well, will it just work with [Wine](https://winehq.org)?"
+
+{{ image(src="/assets/solidworks/wine-installer.png", alt="SolidWorks installer under Wine", caption="So far so good") }}
+
+No, [of course not](https://appdb.winehq.org/objectManager.php?sClass=application&iId=318).
+It's never that easy, is it.
+
+{{ image(src="/assets/solidworks/wine-installer-broken.png", alt="Broken (blank) SolidWorks popup", caption="Should have seen that coming...") }}
+
+There is [an existing script](https://github.com/cryinkfly/SOLIDWORKS-for-Linux) to get SolidWorks to run under [Wine](https://www.winehq.org/),
+but even after dissecting it and trying various things with [winetricks](https://github.com/Winetricks/winetricks), I never got the installer
+to work properly.
+
+I got stuck at the following error:
+```log
+03e8:fixme:ieframe:navigate_url Unsupported args (Flags 1470F138 {VT_I4: 0}; TargetFrameName 1470F128 {VT_BSTR: (null)})
+03e8:fixme:mshtml:load_gecko Gecko can only be used from one thread.
+03e8:err:mshtml:create_document_object Failed to init Gecko, returning CLASS_E_CLASSNOTAVAILABLE
+```
+
+I'm not a Wine expert, I have no idea how to work around this (if it's even possible).
+At this point I was getting fairly frustrated and decided to spin up a VM instead.
+
+## VM
+Using [virt-manager](https://github.com/virt-manager/virt-manager) I set up a quick Windows 10 VM, but quickly hit a wall.
+
+{{ image(src="/assets/solidworks/installer-license.png", alt="SolidWorks license error", caption="Great...") }}
+
+I'm not paying for my own license. I only use SolidWorks for school projects, and therefore use my school's license, and,
+well, I'm not exactly interested in spending [around $3000 per year](https://www.solidworks.com/how-to-buy/solidworks-plans-pricing)
+just to do my homework (I know it's much cheaper for hobbyists, but still).
+
+Additionally, I'm a little scared of trying to boot Windows on bare metal, and don't have a sacrificial drive for that.
+
+I don't really want to try to find a way to crack it. I have no doubt people have done it, but I'm not interested, except as an absolute last resort.
+
+Soo... I guess that means it's time to trick SolidWorks into thinking it *isn't* in a VM?
+
+{% note() %}
+It seems like SolidWorks [supports *some* VMs](https://www.solidworks.com/sw/support/11168_enu_html.htm), but not QEMU/KVM.
+A friend of mine uses a Mac, and it Just Worked(tm) through [Parallels](https://www.parallels.com/), with the same license and everything.
+Figures.
+{% end %}
+
+(*Cue montage of spending too many hours of messing around and getting absolutely nowhere*)
+
+Eventually though, I managed to get something to work, starting from [this reddit post](https://www.reddit.com/r/qemu_kvm/comments/dq2nki/how_to_completely_hide_virtualization_from_guest/),
+this [proxmox forum post](https://forum.proxmox.com/threads/solidworks-license-server.58312/) and a bunch of other Random Clueless Googling.
+
+I'm not sure if what I did is optimal, there might be better ways to get around the check.
+However, it *does* work, and that's enough for my purposes.
+
+# Instructions
+
+{% important() %}
+I have no idea whether bypassing the VM check violates some part of the terms of use.
+Do this at your own risk.
+{% end %}
+
+Start by starting up a new Windows 10 (11 should work too, haven't tested) VM using `virt-manager`.
+
+Don't go through the Windows installer setup, and instead go to the machine details.
+
+## Virtual SCSI Drives
+Make sure the virtual storage is set to use `SCSI`, not `SATA`.
+The XML should look something like this:
+```xml
+
+
+
+
+
+
+
+```
+(The important part is `bus="scsi"`)
+
+Also ensure the SCSI controller model is set to be `virtio-scsi` (it defaulted to `lsilogic` for me).
+The XML should be something like:
+```xml
+
+
+
+```
+
+Next you'll need the VirtIO SCSI guest drivers.
+[This page](https://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers) links to
+[here](https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md), which is where I found them.
+Grab the ISO, and add it as a virtual CDROM.
+
+{{ image(src="/assets/solidworks/add-driver-cdrom.png", alt="Adding the virtio driver iso as a CDROM", caption="") }}
+
+Next, go to **Boot Options** and ensure the SCSI disk and the Windows installer are both selected.
+
+{{ image(src="/assets/solidworks/boot-options.png", alt="Both devices selected in virt-manager's boot device order", caption="") }}
+
+Now start the VM, and go through the normal Windows install process until it inevitably complains about not finding any drive to install on.
+
+{{ image(src="/assets/solidworks/windows-no-drives.png", alt="Windows finds no drives to install on", caption="") }}
+
+Select "Load driver," and select the appropriate driver for the architecture and Windows version.
+
+{{ image(src="/assets/solidworks/windows-install-driver.png", alt="Installing the VirtIO SCSI controller driver", caption="") }}
+
+Now the device should appear, and you can continue installing Windows as normal.
+
+Once it tries to reboot, remove both virtual SATA CDROMs, and boot into the new installation to finish setup.
+
+{% important() %}
+You **have to remove both of them** or SolidWorks will detect it!
+{% end %}
+
+After that, the installer should just work! SolidWorks no longer thinks it's in a VM, and installs normally!
+
+{{ image(src="/assets/solidworks/victory.png", alt="SolidWorks open in a Windows 10 VM", caption="Finally! It works!!!") }}
+
+## Other Things
+
+Interestingly, *Windows itself* still knows it's virtualized.
+
+{{ image(src="/assets/solidworks/task-manager.png", alt="Task Manager showing that Windows is virtualized", caption="Virtual machine: Yes") }}
+
+You can fix this by [disabling the "hypervisor" feature](https://forum.level1techs.com/t/hiding-hypervisor-from-vm-guest/132755).
+```xml
+
+
+
+```
+Doing so might have a significant performance impact, and since SolidWorks works fine without it, I wouldn't bother.
+
+At one point while experimenting, I tried SMBIOS host mode, which made no difference to SolidWorks.
+Apparently that used to be [all you had to do](https://www.reddit.com/r/qemu_kvm/comments/dq2nki/comment/faawvxt/) to get around the check.
+```xml
+
+ hvm
+
+
+```
+
+# Conclusion
+I have no idea why SolidWorks doesn't flag the VirtIO SCSI drivers.
+The SATA controller just seems like a really weird way to check if you're in a VM.
+Why does it *not* care about the hypervisor flag? You'd think that would be the easiest way to tell, but I guess not...?
+
+I don't really know enough to say *why* this workaround works, all I know is that it *does*, and that's good enough for now.
+
+It's just *annoying* that companies doing things like this is normalized.
+It's not like I'm trying to distribute their software or deploy it in hundreds of VMs, I'm literally *just trying to do homework*.
+It doesn't *have* to be like this. You shouldn't have to find cursed workarounds for checks like this, because *checks like this shouldn't exist in the first place*.
+Who does it even benefit? Do they really sell that many more copies of SolidWorks by doing this?
+Surely there's a better way to scrape more profit than *flagging VMs by their SATA devices?*
+
+Maybe they do have a valid reason, but what it could possibly be is beyond me.
+
+It's rare that I find something that's actually worth writing a post about.
+Since I didn't see any guides on what to do (or, well, any guides that *worked*) I figured I might as well write this up.
+
+Hopefully someone else finds it helpful, and if not, I know I will when I inevitably forget the steps.
diff --git a/content/blog/test.md b/content/blog/test.md
deleted file mode 100644
index bc9c6ff..0000000
--- a/content/blog/test.md
+++ /dev/null
@@ -1,6 +0,0 @@
-+++
-title = "My first post"
-date = 2019-11-27
-+++
-
-This is my first blog post.
\ No newline at end of file
diff --git a/content/blog/test2.md b/content/blog/test2.md
deleted file mode 100644
index ef92b45..0000000
--- a/content/blog/test2.md
+++ /dev/null
@@ -1,6 +0,0 @@
-+++
-title = "My second post"
-date = 2019-11-28
-+++
-
-This is my second blog post.
\ No newline at end of file
diff --git a/content/blog/tone.md b/content/blog/tone.md
new file mode 100644
index 0000000..ad0e4f8
--- /dev/null
+++ b/content/blog/tone.md
@@ -0,0 +1,45 @@
++++
+title = "Tone"
+date = 2024-07-30
++++
+
+I spent so long writing the [keyboard lighting](/blog/keyboard-lighting) post that writing about writing that post has become its own post to write.
+
+I'm kind of stuck.
+You see, I can't figure out the proper *tone* to use while writing these things.
+
+I probably rewrote that one at least four times in the 3 months between getting that keyboard and
+putting up this site publicly with that post on it.
+(It was the first real post other than [the introduction](/blog/yet-another-blog))
+
+And, of course, I'm still not happy with it. It's only public because I can't stand editing that same file over and over anymore,
+and keeping it in the Ever-Growing Bin of Unfinished Posts would make the time spent on it effectively a waste.
+
+{% note() %}
+It's not any *less* of a waste public, since it's unlikely anyone will ever read it, but, on the other hand, writing it
+and keeping it private isn't a waste either, since it was good writing practice and something I *wanted* to do.
+I don't know. You can't expect my reasoning to make sense. I don't make sense to *myself* either.
+{% end %}
+
+There are some patterns I've noticed with my writing:
+- My sentence structure gets really repetitive unless I actively try to break it up
+- I use a quite a few kind of noncommittal words that are sort of just filter, like "really", "kind of", "maybe", "sort of", etc.
+- I gravitate toward self-deprecation and discounting my own worth because I'm terrified of coming off as overconfident/hubristic
+- I either use way, wayyy, too, many, commas, everywhere, or too few of them in incredibly long run-on sentences that drag on forever and ever as if the person writing them forgot that she could use this piece of punctuation known as a "period" or a "full stop" to break long pieces of text into multiple sentences instead of stringing them together to the point where it becomes difficult to read
+
+I could maybe try going the [todepond route](https://www.todepond.com/wikiblogarden/academia/style/two-beat/),
+but I don't think that would fit with the things I'm likely to write about, or really *me* in general, if that makes sense.
+
+{% note() %}
+If it wasn't obvious by the number of links, their wikiblogarden-thing is a pretty major inspiration, and probably
+[the reason I sat down to write anything in the first place](https://www.todepond.com/wikiblogarden/art/blog/).
+{% end %}
+
+I don't know how to write any sizeable amount of text without it being super repetitive, too dry, and generally unpleasant to read.
+It never *flows* quite the way I want it to. And then, I go around in circles making tiny edits for hours without actually writing
+anything of value, because it just isn't "perfect enough" yet.
+
+I'm not sure if there's anything I can directly *do* to fix this, other than practice.
+Write a bunch of not-so-great stuff, try not to worry about it not being absolutely perfect, and slowly improve and refine my "style" over time.
+
+So... I guess that's what I'm going to do!
diff --git a/content/blog/wobsite.md b/content/blog/wobsite.md
new file mode 100644
index 0000000..3749894
--- /dev/null
+++ b/content/blog/wobsite.md
@@ -0,0 +1,21 @@
++++
+title = "Wobsite"
+date = 2024-09-14
++++
+
+There's something *really nice* about having a website.
+
+I don't know if anyone ever actually visits this page, but I assume almost nobody does. I have no analytics beyond what Cloudflare provides, and I'm almost positive those numbers are wildly overinflated due to the Mastodon instance I'm running.
+
+I don't really care about that though. It's not about other people finding this; it exists mainly for myself.
+
+It's sort of the "ooh shiny" factor of being able to type something into a browser and go "ooh look! that's mine! I put that there!"
+It's just... *neat*. I don't really know how else to describe it.
+
+What was this point of this? I don't know, it's not really even a blog post. (Then again, this is my site, which means I get to decide what I put on it - which makes me irrationally excited)
+
+If for some reason you're reading this, (uh, hi!) I hope you're having a good day.
+
+---
+
+[xkcd 148](https://xkcd.com/148/)
diff --git a/content/blog/yet-another-blog.md b/content/blog/yet-another-blog.md
new file mode 100644
index 0000000..3c34c62
--- /dev/null
+++ b/content/blog/yet-another-blog.md
@@ -0,0 +1,69 @@
++++
+title = "Yet Another Blog"
+date = 2024-02-25
+updated = 2024-07-26
++++
+
+{% note() %}
+This was written in February 2024, months before I actually put up this site.
+Although updated slightly, it's more or less the same as it was then.
+{% end %}
+
+I don't read people's blogs.
+Okay, fine.
+That's a lie, there's like two that I actively read.
+*Still.*
+
+I don't write either.
+Those "creative writing" assignments in school?
+Those were the worst. I was _never_ any good at those.
+Words are **_hard_** for me. Always have been, always will be.
+
+For some reason, here I am, writing whatever the heck this is.
+
+For the past while (year? two years?) I've been tossing around the idea of writing a blog/ramble/thing.
+I didn't.
+Every time I tried, I'd give up after writing a post or two, never actually putting it anywhere.
+
+I'd justify it in a few ways:
+- There's nothing I'm actually qualified to write about
+- I don't have anything unique or important to say
+- _I'm too embarrassed_
+
+But, I think I've finally been convinced that it just *doesn't matter*.
+There's no "right" way to go about this.
+I don't need to live up to somebody else's standard.
+I just need to [_write_ something](https://www.todepond.com/wikiblogarden/art/blog/).
+
+If nobody cares, that's **totally okay**.
+If someone somewhere does care, that's totally okay too.
+But that isn't the point. That doesn't matter.
+The _point_ is to _write_.
+
+"About what", you might be asking?
+I have no idea. We'll see. Probably not one consistent topic.
+~~To be honest I probably wouldn't have the attention span for that anyway~~.
+
+Don't expect to find any well-written, well-researched informative articles here, or anything actually useful.
+I fully expect there to be nothing but incoherent ramblings written at times of day better spent sleeping.
+Maybe it'll just [be whatever](https://www.todepond.com/wikiblogarden/my-wikiblogarden/).
+
+And that's okay!
+
+## Note to Future Me
+
+While I'm here, I should probably say hello to future me...
+
+> Hello future me! How's the future? Do flying cars exist yet? Do _you_ have one? No? Go fix that. Come back here once you've done that.
+
+Future me is probably reading this, and cringing _very_ hard.
+And that's fair, this *is* somewhat "cringe".
+_Embrace that_.
+
+I can probably assume that reading this you (me) are horribly embarrassed, and probably tempted to take this post down, or even the whole site (that is, assuming you ever got around to making it public in the first place).
+You'd rather it collect virtual dust on your hard drive, unseen and unnoticed, just like you.
+Heaven forbid anyone actually _reads_ this. You might die of embarrassment.
+
+But _don't_ give into that.
+That won't do you any good.
+Trust me.
diff --git a/static/assets/keyboard/c1_pro_v2_ansi_rgb.json b/static/assets/keyboard/c1_pro_v2_ansi_rgb.json
new file mode 100644
index 0000000..4114ce7
--- /dev/null
+++ b/static/assets/keyboard/c1_pro_v2_ansi_rgb.json
@@ -0,0 +1,285 @@
+{
+ "name": "Keychron C1 Pro V2 ANSI RGB",
+ "vendorId": "0x3434",
+ "productId": "0x0516",
+ "keycodes": ["qmk_lighting"],
+ "menus": [
+ {
+ "label": "Lighting",
+ "content": [
+ {
+ "label": "Backlight",
+ "content": [
+ {
+ "label": "Brightness",
+ "type": "range",
+ "options": [0, 255],
+ "content": ["id_qmk_rgb_matrix_brightness", 3, 1]
+ },
+ {
+ "label": "Effect",
+ "type": "dropdown",
+ "content": ["id_qmk_rgb_matrix_effect", 3, 2],
+ "options": [
+ ["00. None", 0],
+ ["01. SOLID_COLOR", 1],
+ ["02. BREATHING", 2],
+ ["03. BAND_SPIRAL_VAL", 3],
+ ["04. CYCLE_ALL", 4],
+ ["05. CYCLE_LEFT_RIGHT", 5],
+ ["06. CYCLE_UP_DOWN", 6],
+ ["07. RAINBOW_MOVING_CHEVRON", 7],
+ ["08. CYCLE_OUT_IN", 8],
+ ["09. CYCLE_OUT_IN_DUAL", 9],
+ ["10. CYCLE_PINWHEEL", 10],
+ ["11. CYCLE_SPIRAL", 11],
+ ["12. DUAL_BEACON", 12],
+ ["13. RAINBOW_BEACON", 13],
+ ["14. JELLYBEAN_RAINDROPS", 14],
+ ["15. PIXEL_RAIN", 15],
+ ["16. TYPING_HEATMAP", 16],
+ ["17. DIGITAL_RAIN", 17],
+ ["18. REACTIVE_SIMPLE", 18],
+ ["19. REACTIVE_MULTIWIDE", 19],
+ ["20. REACTIVE_MULTINEXUS", 20],
+ ["21. SPLASH", 21],
+ ["22. SOLID_SPLASH", 22]
+ ]
+ },
+ {
+ "showIf": "{id_qmk_rgb_matrix_effect} > 1",
+ "label": "Effect Speed",
+ "type": "range",
+ "options": [0, 255],
+ "content": ["id_qmk_rgb_matrix_effect_speed", 3, 3]
+ },
+ {
+ "showIf": "{id_qmk_rgb_matrix_effect} != 0",
+ "label": "Color",
+ "type": "color",
+ "content": ["id_qmk_rgb_matrix_color", 3, 4]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "customKeycodes": [
+ {"name": "Mission Control", "title": "Mission Control in macOS", "shortName": "MCtrl"},
+ {"name": "Launch Pad", "title": "Launch Pad in macOS", "shortName": "LPad"},
+ {"name": "Left Option", "title": "Left Option in macOS", "shortName": "LOpt"},
+ {"name": "Right Option", "title": "Right Option in macOS", "shortName": "ROpt"},
+ {"name": "Left Cmd", "title": "Left Command in macOS", "shortName": "LCmd"},
+ {"name": "Right Cmd", "title": "Right Command in macOS", "shortName": "RCmd"},
+ {"name": "Siri", "title": "Siri in macOS", "shortName": "Siri"},
+ {"name": "Task View", "title": "Task View in windows", "shortName": "Task"},
+ {"name": "File Explorer", "title": "File Explorer in windows", "shortName": "File"},
+ {"name": "Screen Shot", "title": "Screenshot in macOS", "shortName": "SShot"},
+ {"name": "Cortana", "title": "Cortana in windows", "shortName": "Cortana"}
+ ],
+ "matrix": {"rows": 6, "cols": 17},
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ {
+ "x": 0.25
+ },
+ "2,14",
+ "2,15",
+ "2,16"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ {
+ "w": 1.25
+ },
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16"
+ ]
+ ]
+ }
+}
diff --git a/static/assets/keyboard/keyboard-via-error.png b/static/assets/keyboard/keyboard-via-error.png
new file mode 100644
index 0000000..defa753
Binary files /dev/null and b/static/assets/keyboard/keyboard-via-error.png differ
diff --git a/static/assets/keyboard/keyboard-windont.png b/static/assets/keyboard/keyboard-windont.png
new file mode 100644
index 0000000..910d364
Binary files /dev/null and b/static/assets/keyboard/keyboard-windont.png differ
diff --git a/static/assets/solidworks/add-driver-cdrom.png b/static/assets/solidworks/add-driver-cdrom.png
new file mode 100644
index 0000000..9121c95
Binary files /dev/null and b/static/assets/solidworks/add-driver-cdrom.png differ
diff --git a/static/assets/solidworks/boot-options.png b/static/assets/solidworks/boot-options.png
new file mode 100644
index 0000000..fc1fcdf
Binary files /dev/null and b/static/assets/solidworks/boot-options.png differ
diff --git a/static/assets/solidworks/installer-license.png b/static/assets/solidworks/installer-license.png
new file mode 100644
index 0000000..dc7cd24
Binary files /dev/null and b/static/assets/solidworks/installer-license.png differ
diff --git a/static/assets/solidworks/task-manager.png b/static/assets/solidworks/task-manager.png
new file mode 100644
index 0000000..ecff897
Binary files /dev/null and b/static/assets/solidworks/task-manager.png differ
diff --git a/static/assets/solidworks/victory.png b/static/assets/solidworks/victory.png
new file mode 100644
index 0000000..8ecdf97
Binary files /dev/null and b/static/assets/solidworks/victory.png differ
diff --git a/static/assets/solidworks/windows-install-driver.png b/static/assets/solidworks/windows-install-driver.png
new file mode 100644
index 0000000..12dbbb4
Binary files /dev/null and b/static/assets/solidworks/windows-install-driver.png differ
diff --git a/static/assets/solidworks/windows-no-drives.png b/static/assets/solidworks/windows-no-drives.png
new file mode 100644
index 0000000..f544d6b
Binary files /dev/null and b/static/assets/solidworks/windows-no-drives.png differ
diff --git a/static/assets/solidworks/wine-installer-broken.png b/static/assets/solidworks/wine-installer-broken.png
new file mode 100644
index 0000000..416fe25
Binary files /dev/null and b/static/assets/solidworks/wine-installer-broken.png differ
diff --git a/static/assets/solidworks/wine-installer.png b/static/assets/solidworks/wine-installer.png
new file mode 100644
index 0000000..72b1eed
Binary files /dev/null and b/static/assets/solidworks/wine-installer.png differ