# agares, a multi armed demon

well, originally i don’t think the multi armed part was mentioned in the “list of demons” i found on the internet. now, though, agares is absolutely multi armed because I keep adding so much bullshit to this project.

- sync my dot files. .emacs, bash, powershell, etc.
- configure windows devices. install software, some minor software configuration, remove windows bullshit.
- sync my keyboard config; this involves updating a .png as well as a folder of .json an .kll files to apply firmware to ergodox.
- house deployments for home projects

Up next is configuring an Mac device, and then whatever else I get to throw at it.

## dot file sync

I think I’m doing this poorly. So far all i’m really doing is configuring all devices actual dot files to load these `agares/` dotfiles.

- powershell: make sure you don’t have powershell, vscode /ise, and pwsh.exe all looking for the same profile. you’ll hate yourself. split them up.
- .emacs: this is pretty straightforward unless you use more emacs features than me (easy to do). I leave in just a single .emacs file.
- .bashrc: there’s a complicated set of rules that determines, at least on mac, when different .bash* files get loaded. be careful that yours only loads when you want it
- .tmux: straight forward.
- conemu: i don’t have an elegant solve for this. I just import this file whenever I set up a new machine. there is likely a better way.

### further .bashrc info

I found this link very useful, quoted below:
When a “login shell” starts up, it reads the file “/etc/profile” and then “~/.bash_profile” or “~/.bash_login” or “~/.profile” (whichever one exists - it only reads one of these, checking for them in the order mentioned).

When a “non-login shell” starts up, it reads the file “/etc/bashrc” and then the file “~/.bashrc”.

Note that when bash is invoked with the name “sh”, it tries to mimic the startup sequence of the Bourne shell (“sh”). In particular, a non-login shell invoked as “sh” does not read any dot files by default. See the bash man page for details.

What this means is that you don’t want to link or load the agares .bashrc file from .bashrc necessarily. It depends on your usage. you’ll likely wanna call it from .bash_profile instead, if you’re on a mac.

## configure windows devices

3rd party app install is all handled through chocolatey. this is a great / terrible tool for this. great because it actually exists (wonderful!). Terrible because of certain usability problems. some packages install very weirdly through. emacs, for instance; do you want emacs? or emacs64? Those are not just optimized for different cpus, but are actually different versions of emacs (24 vs 25) that have different features shipped natively.

### removing windows kruft

windows, particularly windows10, now ships with a bunch of bullshit that no sane person wants on their fucking computer. fucking 3rd party games are my favorite. thanks msft, get the fuck out. I stole a bunch of functions from this gist (which stole them from another). I definitely recommend perusing powershell module file i made before running the functions therein. Some are easy wins, or simple “get started” features, like removing a game or unpinning stuff from the start menu. Some are more hit or miss, like disabling the windows store; great 90% of the time IME, but if you didn’t have WSL you must have the windows store or you can’t install it.

### a note on hypervisors

i do a lot of work on hyper-v, especially recently, because there’s a great suite of automation tools that work natively on that platform. hyperv is a fine tool for many things, particularly home labbing, but far less useful as a “need to run second OS without dual boot” utility. If you need that you’ll likely need something like vmware workstation or virtualbox. the bad news is you cannot have hyperv and another hypervisor active on the same machine at the same time. hyperv blocks other hypervisors from working because its petty and rude (something about the way it operates does this. for more information on this check out this superuser answer).

## keyboard firmware sync

i use an infinity ergodox at home. this is a fun entry level diy project that taught me to solder (badly) and introduced me to QMK and TMK. I avoid having to dive very deep into those and instead use input.club’s online configurator tool. i download the output and put them into the keyboard dir of `agares`, along with a screenshot of the configurator tool, so that I know how everything is currently configured. this helps especially early on when you’re tweaking the keymap every few days trying to remember “where the fuck did i put the _ sign??”.

Once that’s downloaded you still have to flash your ergodox. do yourself a favor and keep a “flash” keybinding easily accessible on both sides of your keyboard or you will hate yourself.

Some guides say you only need to flash one side of the keyboard as long as they are plugged into each other. That has never worked for me and I must flash both sides or the keymap will be incorrect.

### flashing the keyboard on windows

i absolutely can not get this to work unless i’m running a linux guest in virtualbox. instead, I flash from a mac or other *nix computer because its just hilariously easy and I don’t have to fuck with loading a new driver first. sorry for this terrible answer, but for the infinity ergodox this is literally the easiest way. if anyone knows one for the love of god please email me.

### flashing the keyboard on *nix

read this here poast

## deployments for home projects

right now this is really just a spot for my deployment of `mojojojo-bot`, my slackbot. you can read more about it (in an out of date blog post) here.

I deploy it using ansible targeting one of my few docker hosts. right now those are all local. eventually, i hope to build out a spot, or a deployment mechanism, for pushing it to Azure or AWS. I call `mojo.yml` with ansible-playbook, referencing a custom inventory file of `hosts.yml`, with `--ask-vault-pass` to prompt for password to decrypt `mojo-vault-vars.yml`, containing the slack-bot API token. this allows me to sync the actual API token via github, encrypted, without worrying about everyone and their dog fucking with my slack server.