Commit graph

1096 commits

Author SHA1 Message Date
William Carroll
1399eae319 Cover struct.el
Add some basic test coverage to struct.el.
2020-01-17 10:56:21 +00:00
William Carroll
b52d210b9b Support cycle/previous-focus
Define a `cycle/previous-focus` function that returns the item that was
previously "focused" in the cycle. This is helpful for toggling back-and-forth
between buffers and EXWM workspaces for example without needing to define ad-hoc
variables to support it.

Also: Adds tests to cycle.el.

Also: Prefers `struct/set!` instead of `setf`. See the previous commit's message
for more information about that preference.
2020-01-17 10:56:21 +00:00
William Carroll
ef881e059b Prefer struct/set! to setf
I originally tried using `struct/set` instead of `setf`, which I had forgotten
was the *immutable* version of `struct/set!`. When this didn't work, I reverted
to `setf`. After a good night's sleep and with a fresh set of eyes, I dug into
the issue and discovered that `struct/set!` was what I wanted the whole.

I am curious now about `struct/update` versus `struct/update!`; shouldn't the
former be immutable and the latter be mutable? I'll save that investigation for
a later date.
2020-01-17 10:56:21 +00:00
William Carroll
5407eeb146 Add missing dependency to set.el
I had startup problems without the struct.el module being required since set.el
consumes `struct/update`.
2020-01-17 10:56:21 +00:00
William Carroll
271e7f9561 Support functions for navigating buffer caches
I've wanted an MRU/LRU sort of my "source code buffers" in Emacs. This commit
support three ways for working with a cache of source code buffers.

So first, what's a source code buffer? Well it isn't a buffer like *Messages*;
we can call these "Emacs-generated" buffers for convenience. Other problematic
buffers are buffers like `magit-status` and `dired-mode` and `erc` buffers.

I added some predicates for querying buffers for their major modes.

Supporting three KBDs for quickly accessing these functions:
1. <SPC><SPC> Toggle previous buffer
2. <SPC>b     Use ivy to fuzzily search source code buffers
3. C-{f,b}    Cycle {forwards,backwards} through the source code buffer cache.
2020-01-17 10:56:21 +00:00
William Carroll
2c03651483 Support KBDs for quickly editing common dotfiles
I had forgotten that I defined <SPC>J. Maybe I should switch to using Hydras or
transient mode to improve the discoverability of my own setup... well in the
spirit of support things that I will likely forget, here's a new KBD for editing
config files in the `~/.config` directory.
2020-01-17 10:56:21 +00:00
William Carroll
ca8cb3fe21 Support utils for finding Emacs dotfiles and Org files
Defined `dotfiles/find-emacs-file` and `org-helpers/find-file`, to clean up some
of the `find-file` calls I have with long path names. This DRYs things up as
well so that the path can be changed without breaking many other things.
2020-01-17 10:56:21 +00:00
William Carroll
a51afca1cc Support xsessionrc and config.fish in dotfiles.el
Add entries for xsessionrc and config for the `dotfiles/edit` function.
2020-01-17 10:56:21 +00:00
William Carroll
88f5791fb5 Install ts.el for timestamp functions in Elisp
I've been looking for this! Thank you, @alphapapa.
2020-01-17 10:56:21 +00:00
William Carroll
e8e5ec5f40 Install prism for scope-highlighting > syntax highlighting
I've wanted a library like this ever since I saw Douglas Crockford's JS talk
about scope highlighting as a more useful alternative to syntax highlighting.
2020-01-17 10:56:21 +00:00
William Carroll
6e77fc7978 Revert Nixified Emacs configuration
I attempted to Nixify my Emacs over winter break. I made some meaningful
progress, but not enough progress to use my Nixified Emacs setup. Since Emacs is
my primary editor and my window manager at work and at home, having a partially
baked setup is untenable at the moment.

Reverting these changes so that I can get on with my work, but checking them in
so that I can pick up where I left off one day.
2020-01-17 10:56:21 +00:00
William Carroll
069ca63082 WIP: Nixify Emacs setup
The things that I dislike about this setup are:
1. `xref-find-definitions` takes me to `/nix/store`, which is a read-only
version of the source code, so I cannot edit it, which doesn't feel lispy.

2. I need to rebuild the derivation when I change something, which also doesn't
feel lispy.

There are ways to circumvent both of these drawbacks, but for now, I'm checking
this in only to later revert it.
2020-01-17 10:56:21 +00:00
William Carroll
7175d230c2 Nixify fish configuration
This isn't 100% usable, but it works. You can build it with `nix-env` and then
run it with `wpcarros-fish`.
2020-01-17 10:56:21 +00:00
William Carroll
8d00a456a0 Beging work to port f.el to Haskell
This is a work-in-progress. I'd like to add a README to this project to explain
my intention. The goal, roughly, is to port Elisp's fantastic f.el module to
Haskell. I consider Haskell APIs to be useful but somewhat sloppily designed. In
the same spirit as Elixir wrapping Erlang APIs, many of the functions I intend
to define will simply wrap existing Haskell APIs, but with a hopefully cleaner
API that I find more intuitive.
2020-01-15 14:29:18 +00:00
William Carroll
d4d8397e5f Add InterviewCake.com examples
Adds some of the code I generated while studying for a role transfer at Google
using the fantastic resource, InterviewCake.com. This work predates the
mono-repo.

I should think of ways to DRY up this code and the code in
crack_the_coding_interview, but I'm afraid I'm creating unnecessary work for
myself that way.
2020-01-15 14:25:33 +00:00
William Carroll
b4ee283b23 Add "Crack the Coding Interview" examples
I believe I have multiple other snippets and attempts scattered across /tmp,
~/programming, and other directories. Again, I created these files and others
before the mono-repo.
2020-01-15 14:23:37 +00:00
William Carroll
456d358cd7 Upload my 2019 Advent of Code attempts
Well, unexpectedly (perhaps naively so), I only made it to Day 7. I created
these before I stumbled upon the idea of the mono-repository; otherwise, I like
to think I would have more granular commits introducing this work.
2020-01-15 14:21:45 +00:00
William Carroll
d480b6f08b Initialize repo
Adding a README and a basic .gitignore to initialize this mono-repo. I'm quite
excited about this undertaking!
2020-01-15 14:21:08 +00:00
William Carroll
73e988c298 Define nix_find command in fish
Defining a function for outputting the /nix/store path to a package built with
Nix.
2020-01-06 15:25:25 +00:00
William Carroll
8c667af902 Support Wall-E theme
Add Wall-E theme to consume the latest `doom-material` theme.
2020-01-06 15:25:25 +00:00
William Carroll
9f209f5ccd Support EXWM workspace for IRC
Supporting this since my chat workspace is already a bit populous.
2020-01-06 15:25:25 +00:00
William Carroll
74ed4b6b11 Debug lt ZSH function
Change `-all` to `--all`.
2020-01-06 15:25:25 +00:00
William Carroll
47d16e2512 Support lispyville KBDs
After deciding to support the `C-s-` prefix for lispyville KBDs, I'm
re-introducing support for:
  - `lispyville-drag-backward`
  - `lispyville-drag-forward`
  - `lispyville-end-of-defun`
  - `lispyville-beginning-of-defun`
2020-01-06 15:25:25 +00:00
William Carroll
6d87dcb710 Decrease default font size on laptop
See diff for more information.
2020-01-06 15:25:25 +00:00
William Carroll
f182410fd2 Support Freenode IRC
Previously my ERC setup just supported Google's internal IRC. Now I have
Freenode for things like #nixos, #emacs.

This complicated my KBDs for cycling through IRC channels since certain channels
only exist on certain servers. To remedy this, I introduced a temporary solution
that looks up the server given a particular channel. This isn't ideal, but it
works for now.
2020-01-06 15:25:25 +00:00
William Carroll
50f99976e0 Support set/{reduce,intersection,equal?,distinct?}
Adds additional functions for the set.el module. See the function documentation
and tests for more information.
2020-01-06 15:25:25 +00:00
William Carroll
d5cd2719e7 Support pasting in read-expression-map
This was something small that has been slightly bothering me for a *very* long
time. Now it's fixed!
2020-01-06 15:25:25 +00:00
William Carroll
d13e347b9f Prefer variadic cycle/new
TODO: Ensure all */new functions in my Elisp library share this API.
2020-01-06 15:25:25 +00:00
William Carroll
837a74f10f Support alist/{find,map-keys,map-values} and tests
Supporting iterable / enumerable functions for alists.
2020-01-06 15:25:25 +00:00
William Carroll
9d20c1b894 Prefer Telegram native over Telegram web
I installed nixpkgs.tdesktop to support dark-mode and access other useful
features of the native Telegram client.
2020-01-06 15:25:25 +00:00
William Carroll
5785a5d126 Support prelude/start-process
If you refer to the previous commit where I change shell-command usages to
start-process function calls, you'll see the rationale for why I prefer
start-process.

This commit introduces a more ergonomic API for start-process that fits most of
my current use-cases of it. This cleans up the code. I have introduced a bug in
the way that I'm tokenizing the COMMAND value. I've tracked that with a
TODO. For now it only affects the `xmodmap -e '<command-string>'` calls, which
isn't too disruptive.
2020-01-06 15:25:25 +00:00
William Carroll
c078f04526 Change &keys -> &key in cl-defun
These were latent bugs.
2020-01-06 15:25:25 +00:00
William Carroll
15d889fa0e Prefer start-process to shell-command for pulse-audio module
Continuing the series of easy-win commits that increase the speed of commands
that I was previously using `shell-command` to run by using `start-process`
instead.
2020-01-06 15:25:25 +00:00
William Carroll
7ec4dca723 Reduce latency of screen-brightness/{increase,decrease}
As promised in the previous commit, I'm refactoring usages of `shell-command` to
prefer the faster alternative `start-process`. So far, I'm pleased with the
results.
2020-01-06 15:25:25 +00:00
William Carroll
5fbe860b95 Prefer start-process to shell-command
Without doing any benchmarking (break this naughty habit), I'm preferring to
call `start-process` instead of `shell-command` in my `wallpaper/set`
function. I noticed that the `shell-command` call was unnecessarily polluting my
`pstree` call when I debugging my randomly changing wallpaper bug.

I'm mostly likely going to change a few more `shell-command` calls to prefer
`start-process`.
2020-01-06 15:25:25 +00:00
William Carroll
4e454f0466 Define new Emacs theme
Defining "Shapely Patterns" theme... surely I can come up with better names than
this... :/
2020-01-06 15:25:25 +00:00
William Carroll
7ae17daa98 Drop support for i3
While I first switched to EXWM warily and thinking it would only be temporary,
it seems like this switch is here to stay. It turns out that EXWM was exactly
the integration I've been looking for. How serendipitous it that I found it when
I did.

Thank you, @tazjin.
2020-01-06 15:25:25 +00:00
William Carroll
25ce422abd Support microphone toggling
Use pactl and exwm KBDs to support toggling my microphone setting from Emacs.
2020-01-06 15:25:25 +00:00
William Carroll
ba1034a9c8 Begin the Emacs email journey
While this commit isn't much (i.e. notmuch), it represents one brave step
forward in the quest for supporting email in Emacs -- something I'm estimating
to be somewhere between a 1.5x and 2x workflow booster.
2020-01-06 15:25:25 +00:00
William Carroll
67f060d6f9 Temporarily disable flycheck
TL;DR:
Problem: I ran into a bug where my computer wallpaper was changing every five
seconds whenever my init.el file was open and I was typing in it.

Short-term solution: Disable flycheck.

Long-term solution: Disable flycheck just for Elisp or just for init.el in
Elisp.

Post Mortem:
Warning: If you have flycheck-emacs-lisp-initialize-packages set to auto or
really anything other than nil, than the emacs-lisp flycheck-checker will spin
up a new Emacs instance, and evaluate all of the Elisp in init.el.

Why does this matter? Well, if like me, you have code anywhere in your
init.el (and any files downstream from init.el), that code will get evaluated
not just twice. But countless times... tens, hundreds, w/e. So... while you
might think you have code that is just running at startup this code will be
called incessantly.

As a dramatic, contrived example, if you had something like...

```elisp
(bank/send :amount 100 :to "wpcarro@gmail.com")
```

...anywhere in that your init.el would evaluate, you may end up sending
wpcarro@gmail.com millions of dollars. To make debugging this problem a bit more
complicated is that because this runs in a separate Emacs instance, you can't do
something like...

```elisp
(defvar already-evaluated? nil)
(unless already-evaluated? (bank/send :amount 100 :to "wpcarro@gmail.com"))
(setq already-evaluated? t)
```

...since the `already-evaluated?` variable will be local to the Emacs
instance. So if you needed a mechanism to ensure code like this runs only once,
you would need a way to share this semaphore across Emacs instances --
e.g. writing to and reading from disk.
2020-01-06 15:25:25 +00:00
William Carroll
852783827c Ensure git yday alias formats commits like git today
Prefer the --oneline flag for `git yday` so that it is formatted like the
`git today` command.
2020-01-06 15:25:25 +00:00
William Carroll
7bb4201905 Support more fish abbr's for git
I'm sure that there is a fish package that supports git aliases or
abbreviations. This time, I'm preferring to write my own.

Side note: The more that I use fish's abbreviations, the less that I like them
-- at least for the way in which I'm using them.
2020-01-06 15:25:25 +00:00
William Carroll
f089cf9394 Ignore .gnupg/random_seed
I'm not actually sure if this is sensitive information, but I'm erring on the
side of caution and ignoring it in case it is.

squash! Ignore .gnupg/random_seed
2020-01-06 15:25:23 +00:00
William Carroll
6cf8517cab Combine google-{stuff,tooling}
Google-related files should eventually be moved out of GitHub hosting and onto
Google infrastructure (e.g. Git on Borg).

When I do this, I should run:

```fish
> git grep --ignore-case google (git rev-list --all)
```

To assess the reference I've introduced into this repository.

Other tools that should come in handy when I do this are:
- git filter-branch
- BFG repo-cleaner
2019-12-24 15:21:34 +00:00
William Carroll
96032dbeb0 Support JS-style header in web-mode
Yasnippet supports a way to share snippets between related modes. I should do
this instead of just defining a new snippet here. Well... until then.
2019-12-24 15:21:34 +00:00
William Carroll
27c57a1f16 Drop support for purpose.el
For now, my lack of understanding of purpose results in purpose getting in my
way. One day, I may reinvestigate this. For now, I'm attempting to learn Prolog
and Nix, which is occupying most of my tolerance for new technology.
2019-12-24 15:21:34 +00:00
William Carroll
0cd3b44ce3 Support evil-magit, refine
It took me awhile to install evil-magit because I believed that evil-collection
supported it. My grasp of Emacs bindings was enough to tolerate the strangely
"inconsistent" KBD support of in magit. Eventually though my tolerance waned,
and I verified that evil-collection does *not* support magit, and suggests that
users seek evil-magit. I did that. I do not regret it.

Installing Wilfred's refine.el, which is a lovely package for interactively
editing data structures. Go LISP!
2019-12-24 15:21:34 +00:00
William Carroll
7bd668ee8f Defensively install all-the-icons assets
Wrap installation call with a predicate that checks on the file-system for the
icon assets. Along the way, document other parts of the wpc-ui package.
2019-12-24 15:21:34 +00:00
William Carroll
d1566dd0e6 Refactor strings.el tests
Ensure that string.el follows the latest whim in my Elisp testing circus.
2019-12-24 15:21:34 +00:00
William Carroll
90955a3c02 Support ensure_{file,dir} in zsh
Support functions for ensuring the existence of directories and files. These
functions represent the type of small ergonomic wins that I believe libraries
should support.
2019-12-24 15:21:34 +00:00