about summary refs log tree commit diff
AgeCommit message (Collapse)AuthorFilesLines
2020-02-10 Support vterm-mgt.elWilliam Carroll4-5/+146
I enjoyed using term-switcher so much that I ended up adopting vterm as my primary terminal. After reaching for vterm as often as I did, I realized that I would enjoy supporting cycling through instances, creating new instances, deleting existing instances, renaming instances. Thus spawned vterm-mgt.el. I'm particularly excited about the KBD to toggle between vterm instances and source code buffers.
2020-02-10 Support cycle/{append,remove}William Carroll1-1/+49
Supporting these functions was a little tricky. For example, how should we handle calling cycle/remove on the item that is currently focused? After attempting to be clever, I decided to just set the value to nil and let the consumer decide what is best for them. I can always support a more opinionated version that fallsback to previous-index if previous-index is set. But until I have a better idea of how I'm going to consume this, I think nil is the best option.
2020-02-08 Support cycle/focus-itemWilliam Carroll1-0/+5
I oftentimes call `cycle/focus` and pass `(lambda (a) (equal a b))`. This function should tighten up my code.
2020-02-08 Support cycle/empty?William Carroll1-9/+19
Add predicate for determining if a cycle contains items. Updated cycle/{new,from-list} to support setting current-index to nil when a consumer calls it with an empty list.
2020-02-08 Practice writing, printing, traversing matricesWilliam Carroll1-0/+45
- generate_board: writing - print_board: reading - neighbords: reading I'm working up to creating a function to initialize a game board where no three adjacent cells either vertically or horizontally should be the same value.
2020-02-08 Practice matrix traversalsWilliam Carroll1-0/+59
Recently I've been asked a few interview questions that involve reading from or writing to a grid, matrix, game board, etc. I am not as fast as I'd like to be at this, so I'm going practice. Here I'm practicing reading from existing matrices. I should practice writing to empty boards, reading neigboring cells, wrapping around the board (in the case of Conway's Game of Life), and other useful practices.
2020-02-07 Support a restclient.el scratch bufferWilliam Carroll1-0/+10
I've been using restclient.el and `restclient-mode` lately to test API calls, and I'm enjoying. I think it might make sense to track these scratch files in the repo. Who knows? They may serve as a form of documentation.
2020-02-07 Support serde for Monzo and YNAB transaction structsWilliam Carroll3-1/+137
Define transaction structs for both Monzo and YNAB. Each package has a `main` function that runs some shallow but preliminary round-trip tests for the serializers and decoders. The fixtures.json file that each of them is referencing has been ignored in case either contains confidential data of which I'm unaware.
2020-02-07 Support YNAB personal-access-tokenWilliam Carroll2-4/+5
Define my YNAB personal access token as an environment variable. Prefix Monzo environment variables with "monzo_" to more easily differentiate between Monzo credentials and YNAB credentials.
2020-02-07 Start lorri with sytemdWilliam Carroll3-5/+24
Whenever possible, prefer starting things as systemd units instead of instantiating them in ~/.profile and other dotfiles.
2020-02-07 Add bin dependencies to wpcarros-emacsWilliam Carroll1-2/+20
I removed most of the packages that I install with `nix-env`. You can view these with `nix-env --query`. This is one small step in a grander project to migrate entirely to a declarative config managed by Nix.
2020-02-07 Start lorri daemon in ~/.profileWilliam Carroll2-16/+16
This does two things: 1. Starts lorri daemon 2. Moves ssh-agent and docker daemon startup calls to ~/.profile I'm still not entirely sure when ~/.profile is evaluated... I'd like to use systemd to startup and manage these background services, but I currently don't have a strong enough desire to do this.
2020-02-07 Escape sub-shell in config.fish to prevent evaluationWilliam Carroll1-1/+1
`stack path --local-doc-root` gets evaluated when I create a shell, which is not what I intended.
2020-02-07 Drop support for dkishWilliam Carroll1-7/+0
dkish was an idea to quickly create REPLs for all sorts of languages like Haskell, Elixir, Clojure. I haven't used these, and if I started wanting these with my newfound comfort with Nix, I think I'd reach for that instead.
2020-02-07 Remove assertions that prelude/executable-exists?William Carroll5-13/+6
I'm in the midst of transitioning onto a few new tools. My previous workflow just used `nix-env` to install *some* packages. I didn't have a prescribed methodology for which packages I would install using `nix-env` and which ones I would install using `sudo apt-get install`. Sometimes if a package would be available in my aptitude repositories, I'd use that; other times when it wasn't available I'd use `nix-env`. One complication about being on gLinux intead of NixOS is that some packages (e.g. nixpkgs.terminator) is available via `nix-env -iA nixpkgs.terminator`, but the installation won't actually run on my gLinux. In these instances, I would install terminator from the aptitude repositories. Then @tazjin introduced me to his Emacs configuration that he builds using Nix. What appealed to me about his built Emacs is that it worked as expected on either a NixOS machine and on gLinux (and presumably on other non-NixOS machines as well). A setup towards which I'm working is to own one or a few NixOS machines whose configurations are entirely managed with Nix. On devices like my work machines, which cannot run NixOS, I can build as much of the software that I need using Nix and attempt to minimize the ad hoc configuration either with shell scripts, python, golang, or more Nix code... it's clear that I still don't have a clear idea of how that part will work. For now, I'm adopting nix, nix-env, lorri, direnv, and weening off of aptitude as much as I can. Things are a bit messy, but my general trend feels positive. Stay tuned for more updates.
2020-02-07 Support lorriWilliam Carroll4-7/+29
From what I currently understand, lorri is a tool (sponsored by Target) that uses nix and direnv to build and switch between environments quickly and easily. When you run `lorri init` inside of a directory, lorri creates a shell.nix and an .envrc file. The .envrc file calls `eval "$(lorri direnv)"` and the shell.nix calls `<nixpkgs>.mkShell`, which creates a shell environment exposing dependencies on $PATH and environment variables. lorri uses direnv to ensure that $PATH and the environment variables are available depending on your CWD. lorri becomes especially powerful because of Emacs's `direnv-mode`, which ensures that Emacs buffers can access anything exposed by direnv as well. I still need to learn more about how lorri works and how it will affect my workflow, but I'm enjoying what I've seen thus far, and I'm optimistic about the road ahead.
2020-02-06 Host go directory for some go scratch workWilliam Carroll1-0/+45
actors.go is my attempt to better understand golang's channels. I'm mapping my understanding of concurrency from my experience with Elixir / Erlang and actors onto golang until I have more opinions.
2020-02-06 Partition deepmind directory into two partsWilliam Carroll12-0/+57
Since I did not pass my one-site interview with DM, but I have been invited to attempt again, I decided to partition this directory into two parts: 1. part_one: Hosting the exercises that I completed before my first attempt at earning the job. 2. part_two: Hosting the exercise that I will complete before my second attempt at earning the job.
2020-02-05 Temporarily disable initialization codeWilliam Carroll2-2/+1
My Emacs initialization fails for a few reasons, which I haven't prioritized time to investigate yet: - Some OCaml deps are absent - godoc is absent
2020-02-05 Support OAuth 2.0 login flow for Monzo APIWilliam Carroll6-81/+203
After some toil and lots of learning, monzo_ynab is receiving access and refresh tokens from Monzo. I can now use these tokens to fetch my transactions from the past 24 hours and then forward them along to YNAB. If YNAB's API requires OAuth 2.0 login flow for authorization, I should be able to set that up in about an hour, which would be much faster than it took me to setup the login flow for Monzo. Learning can be a powerful thing. See the TODOs scattered around for a general idea of some (but not all) of the work that remains. TL;DR - Package monzo_ynab with buildGo - Move some utility functions to sibling packages - Add a README with a project overview, installation instructions, and a brief note about my ideas for deployment Note: I have some outstanding questions about how to manage state in Go. Should I use channels? Should I use a library? Are top-level variables enough? Answers to some or all of these questions and more coming soon...
2020-02-05 Inherit parent's .envrc variablesWilliam Carroll2-2/+5
I discovered direnv's convenient `source_up` function today. I needed it to inherit the values defined in ~/briefcase/.envrc, and it's working exactly as I expected it would. What a fine piece of software direnv is.
2020-02-05 Further support Monzo OAuth2.0 login flowWilliam Carroll1-3/+43
I'm now pulling the authorization code off of Monzo's request to my redirect URI. I intend to use exchange that code for an access and refresh token. Once I have these two items, I should be able to interact with Monzo's API much more easily.
2020-02-05 Further configure Go toolingWilliam Carroll2-0/+24
- Prefer goimports to gofmt. goimports calls gofmt; it also adds and removes dependencies. - Assert the presence of goimports, godoc, godef - KBD godef to M-. - Support the M-x compile command for calling `go build -v`
2020-02-05 Support hgwhat aliasWilliam Carroll1-14/+15
Support a Mercurial alias for listing the files that have changed on a particular branch. This commit is particularly noisy because I reformatted the above aliases to align with the new width.
2020-02-04 Begin supporting Monzo OAuth 2.0 login flowWilliam Carroll2-0/+43
What's done: - Basic support of the client authorization grant stage of the OAuth login flow: - Open Google Chrome to point the user to Monzo's client authorization page. - Created a web server to retrieve the authorization code from Monzo. What's left: - Pulling the authorization grant (i.e. code) from Monzo's request and exchanging it for an access token and a refresh token, which can be used to make subsequent requests. Unanswered question: - Assuming this is a stateless app, where should I store the access token and refresh token to avoid the authorization flow. I'd like to avoid the client authorization flow because ideally I could run this app as a job that runs periodically throughout the day without requiring my interactions with it. Some interesting notes: - Notice how in the .envrc file, it's possible to make calls to `pass`. This allows me to check in the .envrc files without obscuring their content. It also allows me to consume these values in my app by using `os.Getenv("client_secret")`, which I find straightforward. Overall, I'm quite pleased to have stumbled upon this pattern - assuming that it's secure.
2020-02-03 Remove KBDs supporting undesired Ergodox configurationWilliam Carroll2-15/+1
I mistakenly mapped one of my dual-function keys on my Ergodox to send Shift+CMD instead of CMD. When some of my Emacs keybindings weren't firing, I noticed that the key event they received was some like `C-S-s-<char>` instead of say `C-s-<char>`. As a quick fix, I duplicated each of my keybindings that relied on the CMD key to support Shift+CMD as well until I remapped the key on my Ergodox. This morning, I remapped the Shift+CMD key to CMD, so I'm bidding adieu to this code.
2020-02-02 Support script to download RFCs to my KindleWilliam Carroll4-0/+334
Today I learned that you can email your Kindle files to read them using the paperwhite display. I'm attempting to read RFCs, so after reading 1/4 of the way through RFC6479 (on OAuth2.0), I realized that it might be easier to read on my Kindle instead of on my computer screen. Out of this, rfcToKindle.go was born. I'm not sure if I'd like to publish this or not.
2020-02-02 Add KBDs to vtermWilliam Carroll1-0/+14
Support pasting and scrolling.
2020-02-02 Support emacs fn for rebuilding wpcarros-emacsWilliam Carroll1-0/+7
Call `M-x` `nix/rebuild-emacs` to build and link `wpcarros-emacs`.
2020-02-02 Support focusing EXWM X-application buffersWilliam Carroll2-5/+31
Press `<M-escape.` to display a list of buffers hosting X applications. Use `completing-read` to select and focus one of these. See the function docs and TODOs for more information.
2020-02-02 Blacklist additional non-source-code modesWilliam Carroll1-0/+2
I don't want vterm buffers or magit buffers showing up when I cycle throw buffers.
2020-02-02 Attempt to debug xrandr behavior in display.elWilliam Carroll1-1/+1
Currently, after I connect my monitor to my laptop, I run `display/enable-4k`, which will use `xrandr` to enable the display. The scaling of the enabled display is not what I expect. So I've habituated re-running the same function, `display/enable-4k`, which scales the display and meets my expectations. What's strange is that if instead of running `display/enable-4k` the first time from Emacs, I call `xrandr ...` from a terminal, this enables the display and scales it properly on the first invocation. I'm unsure how to explain this behavior. It's possible that a environment variable is set properly in the terminal that isn't set in my Emacs, but this is just a guess. I'm going to using a different invocation in display.el that explicitly passes the monitors dimensions. Let's see if that works.
2020-02-02 Support KBDs for term-switcher packageWilliam Carroll2-92/+6
To facilitate transitioning from using `terminator` to using `vterm`, I'm defining some KBDs that I hope will help me habituate my usage of `vterm`.
2020-02-02 Support timestring.elWilliam Carroll2-0/+72
Quickly access strings that encode time is various formats. See the module docs in timestring.el for more information.
2020-02-02 Re-write delete_dotfile_symlinks in golangWilliam Carroll2-88/+117
I'm currently quite unfamiliar with golang. As an exercise to help me onboard onto golang, and as a proof-of-concept to see if golang is a viable substitute for Python as a scripting language, I decided to port my delete_dotfile_symlinks to golang. In the process, renamed ./python -> ./scripts, which is a more accommodating name for a directory.
2020-01-31 Support golangWilliam Carroll2-0/+24
I decided to start writing go code for scripts instead of python. I think this will be a learning opportunity for me and should increase the integrity of my scripts by adding some static type checking.
2020-01-31 Add deploy.nix to blogWilliam Carroll1-0/+15
Adding a deploy.nix to output docker images based on the <briefcase>.blog derivation. See the deploy/README.md docs for more information.
2020-01-31 Consolidate injected dependenciesWilliam Carroll1-6/+3
Move the three injected dependencies into one.
2020-01-31 Rename docker -> deployWilliam Carroll3-2/+1
I think the name deploy is more representative of the purpose of this directory since docker is just one of a few tools that I'm using to deploy software.
2020-01-31 Render pandoc output to index.htmlWilliam Carroll3-13/+17
Using index.html allows us to use the Google AdSense script and extend the styling by adding a CSS stylesheet.
2020-01-31 Rename dotfiles -> briefcaseWilliam Carroll20-59/+60
Renaming my mono-repo briefcase. I first introduced this commit in master, but it introduced a bug where one of two things would happen: 1. Emacs wouldn't start and would crash X. 2. Emacs would start but my keyboard wouldn't work. I learned some valuable debugging skills in the process. Here are some of them: When my keyboard was broken, I wanted to control my computer using my laptop. Thankfully this is possible by using `x2x`, which forward X events from the SSH client to the SSH host. ```shell > # I'm unsure if this is the *exact* command > ssh -X desktop x2x -west :0.0 ``` Git commit-local bisecting. I didn't need to do a `git bisect` because I knew which commit introduced the bug; it was HEAD, master. But -- as you can see from the size of this commit -- there are many changes involved. I wanted to binary search through the changes, so I did the following workflow using `magit`: - git reset --soft HEAD^ - git stash 1/2 of the files changed - re-run `nix-env -f ~/briefcase/emacs -i` - restart X session - If the problem persists, the bug exists in the non-stashed files. Repeat the process until you find the bug. In my case, the bug was pretty benign. Calling `(exwm/switch "Dotfiles")` at the bottom of `window-manager.el` was failing because "Dotfiles" is the name of a non-existent workspace; it should've been `(exwm/switch "Briefcase")`. There may have been more problems. I changed a few other things along the way, including exposing the env vars BRIEFCASE to `wpcarros-emacs` inside of `emacs/default.nix`. The important part is that this was a valuable learning opportunity, and I'm glad that I'm walking away from the two days of "lost productivity" feeling actually productive.
2020-01-31 Support script to audit, remove dotfile symlinksWilliam Carroll1-0/+88
Adding a simple script to help me manage the symlinks to the dotfiles managed by my mono-repo.
2020-01-31 Support building wpcarros-emacsWilliam Carroll3-2/+14
I'm using a Makefile until I can remember the command: ```shell > nix-env -f . -i ``` This will install (i.e. `-i`) any derivations instantiated from the Nix expression resolvable by `-f`. Ideally the incantation will look something like this: ```shell > nix-env -f '<universe>' -iA emacs ``` Informing `nix-env` to install all of the derivations created by the expression at attribute `emacs` in my `<universe>` repository. For now two things are preventing this: 1. `emacs` isn't an attribute in my top-level expression defined in the `default.nix`. 2. If I do add `emacs` as an attribute and call the above command, my usage of `readTree` results in `pkgs` missing `.lib` and a few other stdlib commands that are available in `(import <nixpkgs> {})`. A fix for both of these should be forthcoming.
2020-01-31 Point <nixpkgs> to ~/nixpkgsWilliam Carroll1-1/+1
At the moment, all of the Nix repositories that I'm consuming exist in ~. To keep things consistent, I ran: ```shell > hub clone nixos/nixpkgs ~/nixpkgs ```
2020-01-30 Move move .emacs.d out of configs/sharedWilliam Carroll190-302/+41
Moving all of my Emacs-related files into their own directory at the root of this repository.
2020-01-29 Remove unused filesWilliam Carroll2-22/+0
When I first moved to London, I created common.txt to store the address of my office, my temporary housing, my new phone number, and other information. It serverd its purpose, but I no longer need it anymore. bookmarks.txt started out as a dmenu/rofi -> google-chrome integration. This predates EXWM, which has replaced this with a google-chrome.el module (or something similarly named).
2020-01-29 Splice ./universe directory into ./William Carroll133-7979/+17
Manually merging: - README.md: I added the description from universe/README.md into the heading of dotfiles/README.md. - .envrc: dotfiles/.envrc was a superset of universe/.envrc - .gitignore: Adding some of the ignored patterns from universe/.gitignore to dotfiles/.gitignore Everything else here should be a simple rename.
2020-01-29 Add 'universe/' from commit '8ad51b24dd8719840aac47134835ea25cfe1b0b8'William Carroll131-0/+13792
git-subtree-dir: universe git-subtree-mainline: 15110e6de9f85537c7847267caa35fa068aea001 git-subtree-split: 8ad51b24dd8719840aac47134835ea25cfe1b0b8
2020-01-29 Drop support for ZSHWilliam Carroll7-1633/+5
I've been using Fish consistently for about a month now, and I don't see myself switching back to ZSH. Some of the code from this commit should be published. I may get around to that one day. Before I did that, I would need to clean it up and document it, which I won't be doing today. Thank you, ZSH, for your service.
2020-01-29 Support env vars for {DESK,LAP,CLOUD}TOP devicesWilliam Carroll7-38/+21
I recently changed my hostname for my desktop and laptop from wpcarro.lon.corp.google.com -> zeno.lon.corp.google.com wpcarro2 -> seneca If you're curious, the names Zeno and Seneca come from famous Stoic philosophers. As you can see from this commit, my configuration depends on the values of these hostnames. Immediately impacted: - .profile - device.el Not immediately impacted: - configs/install - configs/uninstall - .ssh/config - .zshrc* * As a side note, I should stop supporting ZSH. Using an .envrc file helps me DRY up some of my configuration. Ideally I should only need to make changes to the .envrc file and then expect everything to work as expected. Let's see how that goes.