Commit graph

381 commits

Author SHA1 Message Date
William Carroll
a726bf737a Enable lieer-google.timer
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 15:43:37 +00:00
William Carroll
3677a7a39e Begin supporting notmuch in Emacs
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 18:32:26 +00:00
William Carroll
072be0befd Nixify simple_vim idea
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 18:05:32 +00:00
William Carroll
fc8283ff6e Define briefcase alias to cd into my monorepo
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 17:01:12 +00:00
William Carroll
61be808a92 Preferring to start wpcarros-emacs with dbus-launch
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 23:24:38 +00:00
William Carroll
938c1a4eb0 Start lorri with sytemd
Whenever possible, prefer starting things as systemd units instead of
instantiating them in ~/.profile and other dotfiles.
2020-02-07 11:01:34 +00:00
William Carroll
c15a393112 Start lorri daemon in ~/.profile
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 11:01:24 +00:00
William Carroll
185fa0dda5 Escape sub-shell in config.fish to prevent evaluation
`stack path --local-doc-root` gets evaluated when I create a shell, which is not
what I intended.
2020-02-07 11:01:24 +00:00
William Carroll
0009ba2d71 Drop support for dkish
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 11:01:24 +00:00
William Carroll
7c2933f3c3 Support hgwhat alias
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-05 14:41:20 +00:00
William Carroll
837cfe07c7 Rename dotfiles -> briefcase
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 15:27:48 +00:00
William Carroll
edea127e07 Support building wpcarros-emacs
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 13:20:18 +00:00
William Carroll
578ed1ba98 Move move .emacs.d out of configs/shared
Moving all of my Emacs-related files into their own directory at the root of
this repository.
2020-01-30 16:00:29 +00:00
William Carroll
15110e6de9 Drop support for ZSH
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 14:21:01 +00:00
William Carroll
093b566e71 Support env vars for {DESK,LAP,CLOUD}TOP devices
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.
2020-01-29 14:21:01 +00:00
William Carroll
d28690d814 Remove PAGER prefix from hgst abbreviation
1. This isn't correct fish syntax.
2. I'm not sure that I need this.
2020-01-28 11:35:02 +00:00
William Carroll
4ef1396a51 Add missing dependencies to constants.el
Perhaps commits like these will become less frequent when I adopt Nix and a
proper packaging strategy.
2020-01-27 23:58:56 +00:00
William Carroll
7e1391cc47 Rename mono -> universe
Update code that depends on my mono-repo being named "mono". I've renamed it to
"universe", which explains the changes in this commit.

TODO: Merge dotfiles into universe.
2020-01-27 16:21:30 +00:00
William Carroll
680d129cb3 Temporarily remove server-start from Emacs
I'm having trouble debugging why `pgrep emacs` returns two PIDs instead of just
one. Additionally when I call `emacsclient .` on the command line, I see a
message...
"Waiting for Emacs..."
...but when I cycle through all of my workspaces, I don't see any active
buffers. This commit is part of a larger debugging effort to get this working as
expected.
2020-01-27 14:56:14 +00:00
William Carroll
4952142916 Sketch ideas for YNAB integration
The end goal is to have some functions that help me manage my Monzo and YNAB
accounts. YNAB (i.e. youneedabudget.com) doesn't support Monzo
integrations. However, both services offer APIs. Here I'm sketching ideas for
what the API integrations might look like. Coming soon: monzo.el.
2020-01-27 14:56:10 +00:00
William Carroll
5399b4bd03 Add maybe.el dependency to fn in prelude.el
Not adding it as a top-level dependency since maybe.el depends on on
prelude.el. This shouldn't be a circular dependency when the requirement happens
in the function's scope though.
2020-01-27 14:52:04 +00:00
William Carroll
22968046b7 Rename alarm.el -> egg-timer.el
Add path to `egg-timer.el` module for now until it's published on MELPA.
2020-01-27 14:51:22 +00:00
William Carroll
b5c0d29601 Change Emacs startup
Remove `dbus-launch` and prefer simply `exec emacs`. Add `--no-site-file` and
`--no-site-lisp` flags.

Temporarily disable `google-stuff.el` because it's unavailable with the
`--no-site-lisp` flag.

This should all be fixed when I fully nixify my Emacs.
2020-01-27 14:50:09 +00:00
William Carroll
b6e9952889 Disable auto-fill-mode and company-mode in IRC buffers
Why?
- `company-mode` is too noisy in IRC buffers.
- `auto-fill-mode` inserts newline characters that end up each being their own
  message, which means that I make more noise than I should in IRC.
2020-01-27 11:40:05 +00:00
William Carroll
fb51c8b458 Support nix-eval fish function
Wrapping the `nix eval` incantation in a fish function for two reasons:
1. Document that this is how to evaluate Nix from a file.
2. Provide a more ergonomic way of evaluating Nix from a file.
2020-01-27 11:39:02 +00:00
William Carroll
d1fdc9fa63 Enable ivy-mode globally
This takes care of my outstanding TODO of understanding why something ivy was
being used and other times it wasn't. It turns out that there is a generic
`completing-read` function that many Emacs packages consume. `ivy-mode` ensures
that when that function is called it is used instead of the default Emacs
completing package.

I'm still unsure of the difference between ivy and counsel. My best guess
currently is that counsel is the narrowing framework and ivy is the integration
of the narrowing framework with `completing-read`. Swiper must be the
integration with incremental {forward,backward} search.
2020-01-27 11:26:10 +00:00
William Carroll
11d0a6c794 Add missing require for ivy-clipmenu
Adding the missing dependency requirement for keybindings.el
2020-01-27 11:25:32 +00:00
William Carroll
d8193c3a52 Delete alarm.el
Since I've exported alarm.el as egg-timer.el, prefer requiring the latter, which
is in a separate repository.
2020-01-27 11:24:40 +00:00
William Carroll
b6b8611f69 Prefer keynav daemonize
Instead of `keynav &`.
2020-01-25 18:36:24 +00:00
William Carroll
bd82a25ff2 Add additional KBD for scrot/select
As mentioned in the TODO, I need this redundant KBD for my Ergodox.
2020-01-24 16:59:17 +00:00
William Carroll
7c67334141 Support alarm.el
- Renames productivity-timer.el -> alarm.el
- Support functionality
- Whitelists alarm.el in init.el
2020-01-24 16:58:43 +00:00
William Carroll
e0fa9d907d Define pkill Emacs function
I can kill process from Emacs instead of creating a terminal and using that.
2020-01-24 11:26:57 +00:00
William Carroll
402720792e Prefer opening locate buffers using dired-find-file-other-window
`dired-display-file` opens the file in another window but does not focus that
window. `dired-find-file-other-window` does what `dired-display-file` does
except it focuses that window.
2020-01-24 10:04:49 +00:00
William Carroll
7bf8997830 Support nix/sly-from-universe
This function builds a version of SBCL using `nix.buildLisp` and points `sly` to
the built executable. The result is a REPL with access to your project's
dependencies, which is quite useful. One drawback at the moment is that if new
dependencies are added to the project, I think I need to rebuild SBCL using nix
and restart sly.
2020-01-23 22:02:13 +00:00
William Carroll
ccd8907e22 Exposing the text-mode snippest to lisp-mode
This gives me access to some generic-purpose snippets that allow me to easily
insert characters like this: ✓ and ✗!
2020-01-23 14:56:01 +00:00
William Carroll
fcfed99600 Assert that the labels used in the bookmark/magit-status are defined
My current self hoping to help my future self.
2020-01-23 14:55:22 +00:00
William Carroll
e11ba0598e Move the location of tazjins-depot
Since I spend a decent amount of time scouring the excellent work of my
colleague, @tazjin, I figured having some functions and KBDs setup to make this
work cheaper would be beneficial.

Also preferring the name `"depot"` to `"tazjins-depot"`. I don't think the
namespace `"tazjin-"` is useful at this time. I'm considering renaming my
mono-repo `"universe"`... a bit grandiose, but hey, let me get my kicks.
2020-01-23 14:53:43 +00:00
William Carroll
7edd5d81f5 Explicitly set that yasnippet directory
I'd like to limit the available snippets to those snippets that I have
explicitly defined. I ran into this problem when defining the `defpackage`
snippet for `lisp-mode`; it appeared that another snippet for `defpackage`
existed somewhere on my machine.
2020-01-23 14:52:18 +00:00
William Carroll
190d5e4406 Support set/{super,sub}set
Define predicates for testing whether two sets are supersets or subsets.
2020-01-23 14:51:50 +00:00
William Carroll
d7c52e4e64 Define CL snippet for a module header
Since I'm new to the CL world, snippets are a useful note-taking analogue with
the added benefit of potentially speeding up my workflow should the
muscle-memory set.
2020-01-23 13:51:53 +00:00
William Carroll
3732ed4795 Define CL snippet for an untyped function
For the times when I'd like to be DyNaMiC.
2020-01-23 13:51:27 +00:00
William Carroll
37f8ca04f2 Update dired-mode-map KBDs
- Ensure `"<SPC>"` is available for my "leader" KBDs
- Define `"o"` as `#'dired-find-file-other-window`
2020-01-23 13:50:18 +00:00
William Carroll
df112d34b6 Support CL snippet for a typed function
This depends on the `type` macro that's defined in my mono-repo. Perhaps another
reason why my dotfiles needs to be merged into the mono-repo.
2020-01-23 13:49:31 +00:00
William Carroll
1a2ae5499e Support bookmark/magit-status
Add function to quickly get `magit-status` buffers for some repositories in
which I spend time.
2020-01-22 21:55:33 +00:00
William Carroll
857ef43d2d Support bookmark/from-label
Add function to resolve a bookmark from its label.
2020-01-22 21:55:07 +00:00
William Carroll
589349282f Format bookmark.el
Move `bookmark/install-kbds?` to the top of the module.
2020-01-22 21:54:22 +00:00
William Carroll
61c2050f23 Support additional bookmarks
- Adds bookmark for my mono-repo
- Adds bookmark for tazjins-depot
2020-01-22 21:53:43 +00:00
William Carroll
5a66f175e5 Support magit-popup
One of my Google Emacs libraries depends on the `magit-popup` library. I believe
it's `fig-status` and I'm unsure why that library didn't ship with
`magit-popup`... tune in next week for more packaging woes.
2020-01-22 21:13:10 +00:00
William Carroll
b3e24a1783 Support Emacs restclient
An excellent HTTP and REST client built into Emacs! Consider reaching for this
instead of reaching for `httpie`, `curl`.
2020-01-22 21:13:06 +00:00
William Carroll
0caca5985e Track work to support individual modules for each LISP dialect
Instead of one, big wpc-lisp.el, I think it might be better if each LISP dialect
that I supported had its own module.
2020-01-22 21:13:06 +00:00