No description
Find a file
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
advent-of-code Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
blog Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
clojure Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
configs Support building wpcarros-emacs 2020-01-31 13:20:18 +00:00
crack_the_coding_interview Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
data_structures_and_algorithms Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
deepmind Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
docker Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
emacs Support building wpcarros-emacs 2020-01-31 13:20:18 +00:00
fish Nixify fish configuration 2020-01-17 10:56:21 +00:00
haskell-file Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
java Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
lisp Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
third_party/lisp Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
.envrc Point <nixpkgs> to ~/nixpkgs 2020-01-31 12:44:38 +00:00
.gitignore Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
default.nix Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
elisp-conventions.md Massive configuration overhaul 2019-12-24 15:21:34 +00:00
keybindings.md Massive configuration overhaul 2019-12-24 15:21:34 +00:00
Makefile Massive configuration overhaul 2019-12-24 15:21:34 +00:00
README.md Splice ./universe directory into ./ 2020-01-29 14:43:20 +00:00
snippets.md Massive configuration overhaul 2019-12-24 15:21:34 +00:00
utils.nix Move move .emacs.d out of configs/shared 2020-01-30 16:00:29 +00:00

dotfiles

This is my mono-repo. Having a personal mono-repo is a new idea for me, so at the time of this writing, the state of this repository is fledgling.

I'm attempting to amass a collection of functions across a variety of languages while minimizing the costs of sharing the code across a projects. Stay tuned for more updates as my definition of the mono-repo becomes more clear, my opinions evolve, and my preferences change.

My configuration also lives inside of my mono-repo. Things like Emacs, Tmux, SSH, and other tools are configured herein.

Installation

wpgtk and gvcci

$ apti python-pip3
$ gclone deviantfero/wpgtk
$ cd ..
$ gclone FabriceCastel/gvcci
  • TODO: Integrate Emacs themes into wpgtk.
  • TODO: Integrate Vim themes into wpgtk.
  • TODO: add these to the install script
$ ln -s ~/Dropbox/.password-store ~/.password-store
$ ln -s ~/Dropbox/bin ~/bin
$ import_gpg $DOTFILES/configs/shared/gpg/.gnupg/exported
  1. Clipmenu

Clipmenu is a service to store a history of copied strings.

Install it as:

$ cd ~/programming && g clone cdown/clipmenu
  • TODO: Include ~/.config/systemd/user in configs/shared.
  • TODO: Obviate installation.

Ensure that it runs on startup:

$ cd ~/programming/clipmenu
$ cp clipmenu clipmenud clipdel ~/bin # You may not need to do this step.
$ vim init/clipmenud.service
# Change the ExecStart line to point to ~/bin/clipmenud
$ cp init/clipmenud.service ~/.config/systemd/user/clipmenud.service
$ systemctl --user start clipmenud
$ systemctl --user enable clipmenud # This step may be optional.
$ reboot
$ systemctl --user status clipmenud # Verify installation worked.
  1. Install Dropbox
$ cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
$ crontab -e # add the following line...
@reboot ~/.dropbox-dist/dropboxd 2>&1 >/tmp/dropbox.log
$ reboot            # 1/3 verify installation
$ pgrep dropbox     # 2/3 verify installation
$ dropbox.py status # 3/3 verify installation
  1. Authorize computer to access GitHub
$ ssh-keygen -t rsa -b 4096 -C 'wpcarro@gmail.com'
$ eval $(ssh-agent -s)
$ ssh-add ~/.ssh/id_rsa
$ xclip -sel clip <~/.ssh/id_rsa.pub
$ browse github.com # paste ssh public key in settings
  1. Install Vundle, nix-env
$ ln -s ~/Dropbox/Vundle.vim ~/.config/nvim/bundle/Vundle.vim
$ cat ~/Dropbox/install_nix.sh | sh
$ for p in $(cat nix-env.txt); do
>   nix-env -i "$p"
> done
  1. Install dotfiles
  • TODO: include steps 2-4 in the make install command.

Missing the following dependencies:

  • stow
  • neovim
  • bat
  • exa
  • fasd
  • opam
  • ghcup
  • ripgrep
  • fzf
  • fd
  • hub
  • pass
$ cd ~/Dropbox/dotfiles
$ DOTFILES="$(pwd)" make install
  1. Install Node dependencies

For now, this deserves its own section since it isn't automated.

$ gclone tj/n       # clone repo
$ sudo make install # build from source
$ n stable          # install the stable version of node
  • TODO: support dependencies like terminal themes

SSHFS

TODO: add explanation about unison, rsync, etc.

SSHFS enables seamless file transfers from your local machine to a remote machine.

Usage

Assuming your remote machine is configured in your ~/.ssh/config (see above), you can mount your remote machine's home directory on your local machine like so:

$ mkdir ~/ec2
$ sshfs ec2:/home/ubuntu ~/ec2 -o reconnect,follow_symlinks

Now your remote machine's home directory can be accessed using the ~/ec2 directory. This directory can be treated as if it were an ordinary local directory. To illustrate how easy it is to use, let's install Vundle onto our remote machine.

$ git clone https://github.com/VundleVim/Vundle.vim.git ~/ec2/.vim/bundle/Vundle.vim

Voila! We now have Vundle installed on our ec2 instance without needing to manually SSH into that machine.

GnuPG

To install GPG run the following:

$ import_gpg

TODO: create a job that runs this periodically.

$ export_gpg

Reference

- sec: secret key
- pub: public key
- ssb: secret sub-key
- sub: public sub-key

Terminals and Fonts

Any terminal or font I choose should pass the following checks:

$ test_true_color
$ test_16_colors
$ test_text_formatting
$ test_unicode
$ test_emojis

Ligatures

If using a font with ligature (e.g. Hasklig) assert that your terminal also support ligatures.