about summary refs log tree commit diff
AgeCommit message (Collapse)AuthorFilesLines
2020-02-21 Read two PG essaysWilliam Carroll1-2/+2
- Programming Bottom-Up: Benefits of writing reusable utility functions and amassing a personal utility belt. Specifically how lisp makes this easier than most or all languages. - This Year We Can End the Death Penalty: Voting against the death penalty is voting against the killing of killers *and* the killing of innocent people, since some estimate that 4% of people on death row are in fact innocent.
2020-02-21 Solve InterviewCake's inflight-entertainment problemWilliam Carroll2-1/+86
Write a predicate that tests whether two films in a list of films can exactly fill the duration of a flight.
2020-02-21 Track which Paul Graham essays I've read and haven't readWilliam Carroll1-0/+190
As I mention at the top of the org file, I cannot rely on my web browser informing me which of these essays I've read; it only shows me which of the links I've clicked.
2020-02-20 Support ssh/{sudo-buffer,cd-home}William Carroll1-3/+17
- Support command to open a dired buffer with wpcarro's $HOME directory for any host defined in ssh/hosts. - Support opening the current buffer with sudo privileges.
2020-02-20 Support installer.nixWilliam Carroll1-0/+11
The command... nix-build -A config.system.build.isoImage -I nixos-config=installer.nix nixos ...creates an .iso file in the ./result directory. You can then copy this onto a USB and use it a custom installer... cp ./result/iso/*-linux.iso /dev/sda I needed an installer that used a version of the Linux kernel higher than the one distributed on NixOS's website: 4.19.? -> 5.4.20+. My Acer laptop needed a version of the kernel that supported its network controller: Intel 3168NGW. TODO(wpcarro): Pin the nixpkgs git commit SHA inside of installer.nix.
2020-02-20 Support basic nixos/configuration.nixWilliam Carroll1-0/+35
I'm attempting to configure an old Acer laptop that I bought at a used electronics store in Shepherd's Bush (~100GBP) as my server. I'd like to install NixOS on it. The configuration.nix herein defines a starting point for the configuration for that machine. It isn't currently working. Troubleshooting and solutions forthcoming...
2020-02-20 Solve InterviewCake's cafe-order-checker problemWilliam Carroll2-1/+65
Write a predicate that tests if a given list of integers, zs, is a possible interleaving of two other lists, xs and ys.
2020-02-19 Solve InterviewCake's merge sorted arrays questionWilliam Carroll2-1/+64
Write a function merging two sorted arrays into one sorted array.
2020-02-19 Support SSH config for acer machineWilliam Carroll1-0/+5
I'd like to setup a NixOS machine that runs in my flat to host my blog and other projects. For now it's a slow Acer running Manjaro Linux. I'm hoping that I can install NixOS on it remotely over SSH. But first! SSH access... I setup port forwarding from my router to this machine for: - HTTP - HTTPS - SSH
2020-02-19 Solve bonus part of reverse-wordsWilliam Carroll1-0/+11
InterviewCake asks "How would you handle punctuation?". Without precise specs about what that entails, I'm supporting sentences ending with punctuation.
2020-02-19 Solve InterviewCake's reverse-wordsWilliam Carroll2-1/+64
Wrote a function to reverse the words in a list of characters. A word is a space-delimited strings of characters. The trick here is to first reverse the entire string and then reverse each word individually.
2020-02-18 Configure ssh preferencesWilliam Carroll2-3/+15
Every Tuesday I work from Google's 6PS office instead of BEL. I work from my laptop, which often requires that I ssh into the desktop work station in BEL. I have settled on a locally optimal workflow that I'd like to improve. To help seek higher ground, I'm planning on using ssh.el to configure tramp and define utility functions to lower my cost of exploring new workflows. - Defines a function, `ssh/desktop-cd-home` that helps me quickly open a dired buffer for my work station's home directory. - Documents some variables that I set weeks ago. - Requires ssh.el in init.el.
2020-02-18 Further configure notmuchWilliam Carroll1-0/+32
Until now my notmuch is usable but not almost always pleasurably so. For example, when I reply to messages, notmuch warns that "Insert failed:"; when I check Gmail, the reply sent... strange. After consulting with a fellow notmuch user and Emacs disciple, tazjin@, I borrowed some of his notmuch configuration. - notmuch is no longer warning about replies - Replies do not include noisy email signatures - I have an Emacs User-Agent header in my outgoing mail - All of this and more...
2020-02-18 Define KBD for find-file-at-point (i.e. ffap)William Carroll1-0/+5
I'm attempting to incorporate the beloved find-file-at-point function into my workflow.
2020-02-18 Further specify saved searches for tagsWilliam Carroll1-3/+3
Add tag:unread to: - direct - broadcast - systems Additionally: I added "and not tag:sent" for direct because oftentimes I send myself mail. Without that condition, my sent mail shows up in direct.
2020-02-17 Require keybindings.el after wpc-keybindings.elWilliam Carroll1-1/+1
keybindings.el calls (require 'evil-ex), which I introduced in this commit... 0456a1c4b4405da2681296b2250681454637d80f ...calling (require 'evil-ex) loads evil. When evil is loaded before evil-want-integration is set to nil, evil-collection writes to *Warnings* when Emacs initializes, which I find noisy. This commit ensures the evil-want-integration is set to nil before evil is loaded, which appeases evil-collection and thus removes the warning message. Bonus: If you git checkout the previous commit, and attempt to run the KBDs... - `SPC g s`: magit-status - `s h`: evil-window-vsplit ...from a buffer whose major-mode is dired-mode, you should notice that the above functions won't execute. Strangely though, if you look at this commit... 37f8ca04f29ea9bf988b2277c42f3e264d7a89e1 ...I fixed these issues. Well I introduced a regression when I added 0456a1c. My current guess is that when evil-collection complains about evil-want-integration, it is breaking the evaluation sequence of my init.el file. wpc-dired.el is downstream from wpc-keybindings.el, which requires evil-collection. Perhaps no modules required after wpc-keybindings.el are evaluated after evil-collection warns about evil-want-integration. Even if that assumption is wrong, what I do know is that this commit fixes the evil-collection warning and restores the KBDs for dired-mode-map. Here's to feeding two birds with one scone!
2020-02-17 Drop support for comptonWilliam Carroll4-46/+1
I'm finding myself running `pkill compton` offer. In the spirit of slimming down my configuration, I'm dropping support for compton.
2020-02-16 Alias systemctlWilliam Carroll1-0/+2
Support `systemctl` and `systemctl --user`.
2020-02-16 Support additional notmuch saved queriesWilliam Carroll1-9/+10
Today I setup declarative gmail filters using some Google internal tooling. I'm now adding labels to messages from Critique, Sphinx, Ganpati, "The Daily Insider", messages sent directly to me, and more. These labels are applied server-side. On the notmuch, client-side, I'm support saved queries for these newly created gmail labels.
2020-02-16 Support KBDs for labelling emailsWilliam Carroll1-1/+16
I can already tag emails with `+` and `-`. Here I'm defining KBDs for moving messages from my inbox into: action, review, and waiting. I'm also mutually excluding messages in action, review, and waiting from inbox and vice versa. I'm also supporting a "muted" tag for now; I'm still learning how to use notmuch with email threads, but I'm hoping the "muted" tag will prevent future messages in a thread from arriving in my inbox.
2020-02-14 Prefer newest-to-oldest sortingWilliam Carroll1-0/+3
The default sorting order of results from notmuch.el are in oldest-to-newest. This prefers the opposite.
2020-02-14 Enable lieer-google.timerWilliam Carroll1-0/+1
After running `systemctl --user enable lieer-google.timer`, systemctl created a symlink pointing from timers.target.wants -> ../lieer-google.timer. I'm not sure if tracking symlinks in a git repository is such a useful idea. This commit reminds me that I could and should be using Nix to better manage symlink creation and destruction.
2020-02-14 Define notmuch KBDsWilliam Carroll1-0/+44
Until I have more opinions about my workflow with notmuch, I will redefine the KBDs from Gmail that I'm comfortable with. While not many KBDs are defined here, evil-collection defines dozens, many of which I find reasonable; those that I disagree with, I've unbound in this commit. Composing emails in notmuch feels similar to writing a commit message with magit. I want to be able to type :x or :wq, but these commands don't DWIM. For magit, I'd like that behavior to be the same as `C-c C-c`; not surprisingly, for notmuch, I'd like the same. I've bound :x to do this for notmuch. I'd like to define a macro that can easily define buffer-local evil-ex commands for particular modes. This should lower the cost of defining evil-ex commands and hopefully convince me to support some of this desired behavior.
2020-02-14 Configure saved searches for notmuchWilliam Carroll1-1/+25
Mimmicking the "action", "review", and "waiting" labels that I had in Gmail using the equivalent labels as tags in notmuch.
2020-02-14 Support list/xs-distinct-by?William Carroll1-0/+5
Supporting a predicate to check that all elements in a list are distinct after applying a transformation function to them.
2020-02-13 Begin supporting notmuch in EmacsWilliam Carroll3-0/+22
I'm borrowing from @tazjin's dotfiles, which are stored in Git on Borg. When you call `nix-build ~/briefcase/mail`, result will output a systemd units, which you should move to ~/.config/systemd/user/. The path to `gmi`, which is Lieer's executable, exists in /nix/store, and you can read it from the systemd unit file (i.e. lieer-google.service). Lieer synchronizes notmuch with Gmail and Gmail with notmuch. Here's a general sequence of commands that I ran to set everything up. Special thank you to @tazjin for helping me with all of this. These steps are not certified as a tutorial; I'm recalling them from memory. When I set this up things didn't work as expected immediately and I had to troubleshoot. ```shell > mkdir -p ~/mail/account.google > cd ~/mail/account.google > nix-env -iA nixpkgs.notmuch > notmuch setup > nix-build ~/briefcase/mail > cp ./result/lieer-google.{service,timer} ~/.config/systemd/user > rm ./result > systemctl --user cat lieer-google ...copy the /nix/store path to gmi... > notmuch new > /nix/store/gmi init ...follow the OAuth login flow... > ``` Unknowns? - Do I need to call `systemctl --user start lieer-google` at startup? Or should I move these units to user/default.target.wants? - Can I send email from notmuch? - How do I use notmuch to delete email? To respond to emails? To do anything? Todo: - Once this configuration stabilizes, I should package everything with Nix.
2020-02-13 Solve merging-rangesWilliam Carroll2-1/+116
Write a function to merge meeting times. Added an in-place solution, which the "Bonus" section suggested attempting to solve. - Added some simple benchmarks to test the performance differences between the in-place and not-in-place variants. To my surprise, the in-place solution was consistently slower than the not-in-place solution.
2020-02-12 Prefer alias to abbrWilliam Carroll1-214/+83
After working with fish for a few weeks, I've decided that I prefer aliases to abbreviations. Why? When I reverse search through my command history, I search for the what I typed and not what it expanded to. Some of my aliases wrap existing tools encoding my preference for tool A if tool B isn't available. For example I alias vim to neovim. When nvim isn't available on $PATH, typing vim will expand to nvim, which will in turn fail.
2020-02-12 Disable auto pairing parens, brackets, quotesWilliam Carroll1-3/+0
I don't see much value in this tool for my workflow.
2020-02-12 Nixify simple_vim ideaWilliam Carroll2-0/+10
I previously had an alias defined as `simple_vim`, which would start an instance of Vim with a bare bones config. I had a to-do to Nixify it. That is now (mostly) to-done. When I try and install it with `nix-env -f ~/briefcase -iA tools.simple_vim`, Nix fails and says that pkgs.stdenv is undefined. I will need to fix this one day, but it is neither important nor urgent...
2020-02-12 Define briefcase alias to cd into my monorepoWilliam Carroll1-0/+3
Defining an alias in my config.fish makes me realize that I should prune many of my abbreviations and change the ones that remain into aliases.
2020-02-12 Tidy up structure of briefcaseWilliam Carroll89-41/+53
I had a spare fifteen minutes and decided that I should tidy up my monorepo. The work of tidying up is not finished; this is a small step in the right direction. TL;DR - Created a tools directory - Created a scratch directory (see README.md for more information) - Added README.md to third_party - Renamed delete_dotfile_symlinks -> symlinkManager - Packaged symlinkManager as an executable symlink-mgr using buildGo
2020-02-12 Complete InterviewCake reverse-string-in-placeWilliam Carroll2-6/+13
Wrote a function in TypeScript to reverse an array of characters mutatively.
2020-02-11 Move matrix-traversals -> ./miscWilliam Carroll1-0/+0
I'd like the top-level files in deepmind/part_two to correspond 1:1 with the TODOs in my org file tracking the work.
2020-02-11 Attempt to support TypeScript for coding challengesWilliam Carroll6-0/+107
I was a bit weaker than I expected to be in my most recent interview using TypeScript. To improve, I think I'd like to attempt solving some of the InterviewCake.com questions using TypeScript. If you've read the previous commits, the inspiration for `run` arose because I need to call `npx ts-code <file>`, which is easy enough to remember, but I'd still rather just call `run <file>`.
2020-02-11 Begin supporting runWilliam Carroll5-0/+104
I'd like to be able to just call `run file.py` and have a program DWIM. I'm working on run as a step in this direction. Define a simple configuration that maps file extensions to template strings where "$file" is replaced with the argv[1]. It basically works but there are outstanding TODOs. See the README and source code for more information.
2020-02-11 Support utils.Resolve/2William Carroll1-0/+39
Supporting a function that resolves a file name checking for the nearest occurrence of the file from the CWD until it traverses beyond the user's home directory, after which point it checks in backupPaths.
2020-02-11 Support utils.FileExists/1William Carroll1-0/+10
Support predicate for checking if a file exists on disk.
2020-02-11 Support utils.HomeDir/0William Carroll1-0/+10
Support function for returning the home directory of the current user.
2020-02-11 Encode InterviewCake.com questions as an org-mode listWilliam Carroll1-0/+77
This way I can track what I've done and what I need to do.
2020-02-11 Support cycling through display configurationsWilliam Carroll2-18/+31
Today when I opened my laptop, I wasn't sure if it was powered off or on because the display was blank. Thankfully the volume was muted and the LED indicator was on, which informed me that the laptop was powered on. This saved me from unnecessarily rebooting. What happened was that last night I was working from home and using my external monitor. Usually I enable my external display and disable my laptop display. But when I left for work this morning, I unplugged the HDMI cable from my laptop without disabling the external display or enabling the laptop display. I noticed a XF86 button on my laptop entitled XF86Display. I figured that this could be a nice place to bind a key to toggle my laptop display on or off. At the last minute, I had the idea to just cycle through all possible display configurations that I use; there are only three anyways. When dealing with more than two states, I realized I should use a cycle to model the configuration states. Now I'm thinking that I should be using cycles to model toggles as well - instead of just using a top-level variable that I `setq` over. I haven't refactored existing toggles to be cycles, but I am excited about this new keybinding. This commit additionally: - Moves keybindings out of display.el and into keybindings.el - Conditionally sets KBDs if using work laptop
2020-02-10 Preferring to start wpcarros-emacs with dbus-launchWilliam Carroll1-1/+1
When I ran `pass show some/password`, gpg, which uses pinentry would start its ncurses password prompt. For many this wouldn't be a problem but my current vterm version cannot send the <return> key to ncurses, so once that prompt appears, I cannot get rid of it without C-c and killing the shell. For a day or more I just opened suffered through this. Today I dug more into the issue and when I ran `pinentry --version` it warned that it couldn't connect to DBUS. After searching for more information on this, people with similar issues recommended starting their window managers with `dbus-launch`. I previously started Emacs with `dbus-launch`, but only because some i3 documentation told me to do so and I just copied them. Then I switched to EXWM and copied that pattern over. A friend of mine uses EXWM and starts his without calling `dbus-launch` but `exec emacs`. I mirrored this thinking that I no longer needed `dbus-launch`. What I didn't know, however, was that this friend was using a Nix-built Emacs (like me) except that his wrapped a native Emacs installation while mine doesn't. His natively wrapped Emacs installation has the proper variables set to interact with dbus and other important Linuxy things that I don't fully understand. Since I'm using a Nix-built Emacs, some of my variables are unset or set to different values than programs expect. This is why when I try and start `gnome-terminal` or `terminator`, they refuse to start and warn about many unset or incorrectly variables and not being able to bind to sockets, etc. This change reverts back to using `dbus-launch` until I have a better understanding of Linux, Nix, etc.
2020-02-10 Begin work on YNAB clientWilliam Carroll4-1/+70
After reading these docs https://api.youneedabudget.com/v1#/Transactions/createTransaction I successfully made a request to post a transaction to my YNAB account. Hastily created a client.go that doesn't contain much at the moment.
2020-02-10 Sort items in travel_hitlistWilliam Carroll1-2/+2
Grouping entries by country and sorting according to Done -> Todo. I should consider sorting the country groups alphabetically by the country name and then each entry alphabetically by its city name. Right now, however, this isn't a priority.
2020-02-10 Add Turkish cities to wish listWilliam Carroll1-0/+2
I would like to see Istanbul and Ankara one day.
2020-02-10 Add Grenoble and LyonsWilliam Carroll1-0/+2
In 2013, I lived in Grenoble with a host family. During that time, I visited Lyons, as well as a few other locations that aren't tracked by this document at the time of this writing.
2020-02-10 Lint the documentWilliam Carroll1-1/+1
Removing a trailing comma from Dubrovnik, Croatia.
2020-02-10 Adding a few cities that I visited in 2019William Carroll1-1/+5
I spent two weeks on the Spanish islands of Ibiza and Formentera over the summer. I went to Hamburg twice to visit Mimi's family - once in the summer; once for Christmas. In the Fall, I went to Bordeaux with Mimi where we stayed at a charming Airbnb. I spent New Years Eve in Amsterdam with Matty, Ryan, and Conor. I may be missing a few other places that I visited in 2019; it was an active year.
2020-02-10 Add 'travel_hitlist/' from commit 'a97002bb21425c4d36335e9d70a1ec8bad6b51f2'William Carroll1-0/+75
git-subtree-dir: travel_hitlist git-subtree-mainline: 3fa827681622dc9f20d5095a781e78dbaaa23791 git-subtree-split: a97002bb21425c4d36335e9d70a1ec8bad6b51f2
2020-02-10 Support C-k for upward movement in ivy-switch-buffer-mapWilliam Carroll1-1/+1
Without these KBDs, C-k kills buffers. As an evil-mode user, I expect C-k to move upwards. As such, adding the `ivy-switch-buffer-map` to my existing ivy KBDs that handle a similar use-case. Note: I'm unsure why the KBDs in evil-collection didn't cover this.