| Elm reminds me of Haskell. In fact, I'm using `haskell-mode` (for now) in Emacs
to write my Elm code, and it works reliably. I'm not writing a Haskell app, but
if I were, I would define my application Model with the following Haskell code:
```haskell
data Model = Model { whitelistedChords :: [Theory.Chord]
                   , selectedChord :: Theory.Chord
                   , isPaused :: Bool
                   , tempo :: Int
                   }
```
When I first modelled my application state, I did something similar. After
reading more Elm examples of SPAs, I see that people prefer using type aliases
to define records. As far as I know, you cannot do this in Haskell; I believe
all types are "tagged" (something about "nominal typing" comes to mind). Anyhow,
Elm isn't Haskell; Haskell has cool features like type classes; Elm has cool
features like human-readable error messages and exhaustiveness checking for
cases. I love Haskell, and I love Elm, and you didn't ask.
Anyhow, this commit refactors my records as type aliases instead of types. I
think the resulting code is more readable and ergonomic. | ||
|---|---|---|
| advent-of-code | ||
| boilerplate | ||
| configs | ||
| emacs | ||
| go | ||
| gopkgs | ||
| haskell-file | ||
| lisp | ||
| monzo_ynab | ||
| nix_gcr | ||
| nixos | ||
| org | ||
| scratch | ||
| third_party | ||
| tools | ||
| travel_hitlist | ||
| utils | ||
| website | ||
| .envrc | ||
| .gitignore | ||
| default.nix | ||
| Makefile | ||
| README.md | ||
briefcase
Welcome to my monorepo: briefcase.
Herein you will find a variety of libraries, packages, and documents. Some of this work in finished and other work is incomplete or just a sketch for a future project.
Where applicable, I try to include README.md files in some of the
subdirectories to help orient both myself and any onlookers.
Languages
To give you a general idea of the source code inside of this monorepo, here is
the latest output from tokei --hidden --sort code .:
-------------------------------------------------------------------------------
 Language            Files        Lines         Code     Comments       Blanks
-------------------------------------------------------------------------------
 CSS                     9        67324        50733          218        16373
 Emacs Lisp            111        25326        15790         6337         3199
 Python                 99         7432         5414          623         1395
 JSON                   18         2235         2235            0            0
 Markdown               34         1771         1771            0            0
 TypeScript             25         1665         1317          115          233
 Nix                    65         1302         1115           82          105
 Go                     17         1256          926          173          157
 Vim Script              2          766          470           87          209
 HTML                   17          496          459           11           26
 Org                     8          420          411            8            1
 Haskell                 4          319          217           57           45
 Plain Text              5          145          145            0            0
 JavaScript             13          105           99            0            6
 Fish                    1           87           54           23           10
 Lisp                    3           83           43           23           17
 Elixir                  1           50           39            5            6
 Sass                    1           51           38            2           11
 TOML                    2           37           32            0            5
 Shell                   2           34           15            9           10
 Java                    2           11           11            0            0
 Makefile                2           14            9            3            2
 C                       1            6            5            0            1
 BASH                    2           10            4            2            4
 YAML                    1            5            4            0            1
 Rust                    1            5            3            1            1
-------------------------------------------------------------------------------
 Total                 446       110955        81359         7779        21817
-------------------------------------------------------------------------------
67,321 of the 67,324 lines of CSS comes from //website, which includes the
template I use for my blog. Because I use TailwindCSS for my personal projects,
most of the styling is embedded in the class atribute of HTML and JSX tags.
Sign posts
Below I have outlined a few projects that you might find interesting. I am
using // to indicate the root of my monorepo, the directory in which this
README.md resides.
- //boilerplate: scaffolding for projects. Boilerplate's goal is to reduce the startup costs of a project.
- //configs: my dotfiles (e.g.- config.fish,- init.vim). Eventually Nix- home-managershould replace this.
- //emacs: Emacs is both my preferred text editor and my window manager; with tens of thousands of lines of Emacs Lisp, you can safely assume that this directory hosts a lot of libraries and packages.
- //monzo_ynab:- systemdtimer unit that imports my Monzo (i.e. a U.K.-based online bank) transactions into the personal finance tool YNAB (i.e. youneedabudget.com).
- //nixos: my declarative configuration for my NixOS machines. If you are unfamiliar with Nix, I recommend reading about the NixOS project.
- //tools: some scripts and projects that simplify my life.
- //website: everything required to build my website, wpcarro.dev.
Notes to self
Here are a few reminders when setting up a new machine:
- Use Nix home-managerto configure the new machine.
- Ensure ~/.password-storeexists.
- Run export_gpgfrom a computer with my gpg credentials. Runimport_gpgfrom the new machine.
- Ensure the new machine can access my Github.