Commit graph

1080 commits

Author SHA1 Message Date
William Carroll
8562bf5b5a Rename //deploy -> //nix_gcr
I create //deploy when I first deployed a few applications that I
packaged with Nix. This was before I setup socrates as my "cloud". Now I
deploy all of my services using NixOS. The name "deploy" is a bit stale.
I'm renaming it //nix_gcr because it documents how I can deploy
Nix-packaged projects on Google Cloud Run.
2020-04-05 15:40:47 +01:00
William Carroll
a500171fd8 Remove unnecessary rec { .. }
In Nix, rec mean "recursive" and for attribute sets, this allows
attributes to refer to other attributes in the same attribute set. This
is useful, but I'm not using it here, so I'm removing it.
2020-04-05 15:29:59 +01:00
William Carroll
3f5cea53b0 Prefer ~/.local/share/static to ~/Dropbox/static
I would like to remove all dependencies on Dropbox.
2020-04-05 15:29:14 +01:00
William Carroll
61c6a50285 Delete //clojure
Deleting my early sketches of how I would like a Nix expression that
built Clojure packages, libraries, and executables to look like.
2020-04-05 15:20:18 +01:00
William Carroll
b266378850 Tidy advent-of-code directory
TL;DR:
- Add README.md
- Delete *.nix sketches
- Delete *.pyc and *.ex python artifacts
2020-04-05 15:17:50 +01:00
William Carroll
444da4aa05 Forward git.wpcarro.dev connections to :3000
Gitea is running a web server on localhost:3000.
2020-04-05 14:57:08 +01:00
William Carroll
2686a9a2ed Prefer gitea to gogs
Gitea's announcement notes explain some of the benefits of Gitea over
Gogs:

https://blog.gitea.io/2016/12/welcome-to-gitea/

Also, I never configured Gogs such that I could use it, so the cost of
switching from Gogs to Gitea was basically zero.
2020-04-05 14:33:02 +01:00
William Carroll
46d817665f Move Emacs documents to //emacs
These documents outline some of my Elisp conventions and ideas. As such,
I think //emacs should host them.
2020-04-04 14:30:27 +01:00
William Carroll
d0d331df09 Update README.md
This change was long overdue. I'm updating this README.md to reflect the
state of my monorepo.
2020-04-04 14:29:28 +01:00
William Carroll
3555f5a418 Fix spelling errors in cell-phone-experiment blog
Shoutout to Ryan D. for texting me about these.
2020-04-03 17:20:13 +01:00
William Carroll
55e1170bf5 Change Disqus shortname
I setup a Disqus Admin account.
2020-04-03 11:35:31 +01:00
William Carroll
466392673e Edit cell-phone-experiment blog post
After a full night's rest, I re-read my blog post and made some changes:
- Fix grammatical errors
- Clarify unclear passages
2020-04-03 11:26:20 +01:00
William Carroll
f23e1be416 Drop support for Terminal workspace
I created the Terminal workspace before I wrote a function for finding/creating
vterm instances. I now use the latter almost exclusively.
2020-04-03 10:08:41 +01:00
William Carroll
87c7b31271 Finish blog post about cell phone usage
Read the blog post for more information.
2020-04-03 02:08:25 +01:00
William Carroll
d8f0f3daf3 Remove :index field from exwm/named-workspace struct
I can compute the index use dash.el's -elem-index. I'm also removing some unused
EXWM workspaces.
2020-04-02 18:36:51 +01:00
William Carroll
099d88739b Tidy window-manager.el
Remove stale code and stale comments.
2020-04-02 18:36:21 +01:00
William Carroll
691583ed5c Refactor opening X applications from Emacs
I borrowed heavily from Vincent's depot.
2020-04-02 18:34:49 +01:00
William Carroll
d12b8b3dcb Build either emacs.{glinux,nixos} depending on my current device
`M-x nix/rebuild-emacs` will build either emacs.glinux or emacs.nixos depending
on whether I'm using a work device or a personal device.
2020-04-02 14:50:53 +01:00
William Carroll
86da482fbf Define device/corporate?
Write a predicate function for checking whether or not I'm on a corporate
device.
2020-04-02 14:50:18 +01:00
William Carroll
401ec6a7a1 Tidy up emacs/default.nix
When I run `nix-env -f '<briefcase>' -iA emacs`, Nix builds a derivation of
wpcarros-emacs using the path to the Emacs derivation. This doesn't work well on
glinux and causes strange behavior. For instance, Chrome crashes when it tries
to browse for files. Building with `nix-env -iA emacs.glinux` fixes this and
other problems.

Miscellaneous other changes:
- Remove unnecessary fix-point recursion
- Drop support for unused dottime.el
- Remove unused overrideEmacs
- Remove unused withLocalConfig
- Support emacs.glinux and emacs.nixos alternative derivations
2020-04-02 14:37:47 +01:00
William Carroll
8c3bf2debf Set Gruvbox theme as my default Emacs theme
I want to use a dark theme for awhile.
2020-04-02 14:37:09 +01:00
William Carroll
be13644f1c Tidy up themes.el
TL;DR:
- Prune unused themes
- Prefer "JetBrainsMono" font for all themes
- Remove TODOs that I've either supported or that I'm uninterested in supporting
2020-04-02 14:36:12 +01:00
William Carroll
8fa3140253 Increase default font size for laptop
I'm working off of my laptop but I'm using my 4k monitor. The expression that
sets `fonts/size` could be more sophisticated and detect this, but for now, I'm
just bumping up the size.
2020-04-02 14:34:31 +01:00
William Carroll
d88a4d5792 Drop support for org-capture
I don't use org-capture, and I am not currently interested in developing that
habit.
2020-04-01 21:02:30 +01:00
William Carroll
90154fd2dd Prefer briefcase/org to Dropbox/org
I would like to version-control most but not all of my org files.
2020-04-01 21:01:17 +01:00
William Carroll
7dbf7b025a Delete dusty Elisp code
When I first switched to EXWM, I wrote a lot of Elisp. I think I was mostly
excited about having a monorepo and, as I had a backlog of ideas that I wanted
to implement, I ended up writing many halfly baked ideas in Elisp. These are
mostly sketches.
2020-04-01 20:58:10 +01:00
William Carroll
f17e8126eb Version-control first-of-the-month.org
Every time it is the 1st day of the month, I complete this habit chain.
2020-04-01 20:48:30 +01:00
William Carroll
d4e0e5b964 Add finance.org to briefcase/org
I'd like to version-control the habit chain that I follow after Google sends me
my paycheck.
2020-04-01 20:47:08 +01:00
William Carroll
f165cf568b Update morning routine
I've been trying to read 15 minutes in the mornings. I also recently purchased
some house plants that I have been watering daily before I do my yoga routine.
2020-03-31 15:44:53 +01:00
William Carroll
b2849682d3 Progress with InterviewCake's coin problem
I'm writing a function that returns the total number of ways a cashier can make
change given the `amount` of change that the customer needs and an array of
`coins` from which to create the change.

My solution conceptually works but it actually does not return the results I am
expecting because I cannot create a Set of Map<A, B> in JavaScript. I'm also
somewhat sure that InterviewCake is expecting a less computationally expensive
answer.
2020-03-31 14:43:03 +01:00
William Carroll
3550fb3452 Add dir-locals.nix to boilerplate/typescript
This should help prettier-mode work out-of-the-box.
2020-03-30 20:29:15 +01:00
William Carroll
af969a7641 Prototype my digital habits journal
Trying to obviate my Google Sheets spreadsheet in favor of a more focused web
app.
2020-03-30 20:28:38 +01:00
William Carroll
8d36c6d00f Solve InterviewCake's compute nth Fibonacci
While the "Dynamic programming and recursion" section hosts this problem, the
optimal solution does not use recursion. Many cite the Fibonacci problem as a
quintessential dynamic programming question. I assume these people expect an
answer like:

```python
def fib(n):
  cache = {0: 0, 1: 1}
  def do_fib(n):
    if n in cache:
      return cache[n]
    else:
      cache[n - 1] = do_fib(n - 1)
      cache[n - 2] = do_fib(n - 2)
      return cache[n - 1] + cache[n - 2]
  return do_fib(n)
```

The cache turns the runtime of the classic Fibonacci solution...

```python
def fib(n):
  if n in {0, 1}:
    return n
  return fib(n - 1) + fib(n - 2)
```

... from O(2^n) to a O(n). But both the cache itself and the additional stacks
that the runtime allocates for each recursive call create an O(n) space
complexity.

InterviewCake wants the answer to be solved in O(n) time with O(1)
space. To achieve this, instead of solving fib(n) from the top-down, we solve it
from the bottom-up.

I found this problem to be satisfying to solve.
2020-03-30 14:14:02 +01:00
William Carroll
7e41aba8b7 Drop attempt to support a user-local /etc/hosts
While the idea of managing the hosts at a per-user level appeals much more to me
that running this as root and managing /etc/hosts, I haven't been able to get it
to work.
2020-03-29 20:39:44 +01:00
William Carroll
7d340689ba Delete the stale tests
While this project would benefit from having test coverage, the current tests
are not providing any useful coverage.
2020-03-29 20:39:39 +01:00
William Carroll
946764f6bd Read and write to /etc/hosts
TL;DR:
- Rename website-blocker to url-blocker
- Add a README.md
- Reads and writes to /etc/hosts
2020-03-29 20:39:39 +01:00
William Carroll
75595b0126 Parse and serialize rules.json
TL;DR:
- Write FromJSON instances to decode rules.json file
- Prefer Text to String and use the OverloadedStrings language extension
- Read /etc/hosts and append the serialized rules.json to the end

Notes:
- I can remove some of the FromJSON instances and use GHC Generics to define
  them for me.

TODO:
- Define the systemd timer unit for this to run
- Ensure script can run with root privileges
2020-03-29 18:49:45 +01:00
William Carroll
059af12bea Experiment with user /etc/hosts
I have not been able to get this to work yet, but I hear that it is possible to
maintain a user-specific /etc/hosts.
2020-03-29 00:01:51 +00:00
William Carroll
ef5eda4015 Implement isToday predicate
Use the Data.Time package to implement the isToday predicate.
2020-03-29 00:00:47 +00:00
William Carroll
561cb619a1 Add <unstable> to NIX_PATH
1. I should be using NixOS/nixpkgs-channels instead of NixOS/nixpkgs
2. Instead of refactoring everything, I'm supporting <unstable> and pointing it
   to NixOS/nixpkgs-channels

I needed <unstable> to get a more recent version of the Data.Time Haskell
package.
2020-03-28 23:58:37 +00:00
William Carroll
37bb04eb5d Start social-fasting app
I'd like to ensure that my /etc/hosts file blocks websites at certains times. I
use this to allow / disallow websites at various times of the day.

TODO:
- Add project README
- Add tests
- Publish
- Create a Nix derivation
- Run as a systemd timer unit
- Figure out if I can run this as a user rather than root
2020-03-28 19:36:13 +00:00
William Carroll
778114e6a8 Digitize daily habits
Create a web app off the post-its that I keep near my bathroom mirror.
2020-03-27 18:26:27 +00:00
William Carroll
1aefbf7be3 Add timestamps to habits.org
Add approximations to the duration of each activity.
2020-03-27 16:10:55 +00:00
William Carroll
c68b3ba021 Change srcs to src for website.goals derivation
Debug the typo.
2020-03-27 16:02:44 +00:00
William Carroll
48cdb69efb Publish habits as a webpage
I think it might be a good idea to version control my habits, so that I can
audit them as they change.

I'm publishing these on my website, so that I can refer to them wherever I had
internet.
2020-03-27 16:02:44 +00:00
William Carroll
f2ba5aca31 Ensure Emacs prettier hook activates
Problem:
prettier-js waits for rjsx-mode. rjsx-mode only runs on .js files. As such,
the hook that installs prettier-js-mode for *all* of my frontend hooks, which
includes more than just js files, does not install until a javascript file is
opened.

Solution:
Do not conditionally load prettier-js.

Bonus:
Remove the .js mode from rjsx.
2020-03-27 10:59:57 +00:00
William Carroll
0281eb58aa Add node_modules to .gitignore of boilerplate/typescript
briefcase's top-level .gitignore ignores node_modules, so I never noticed that
it was missing from my boilerplate .gitignore. I don't *really* need to add it
to that .gitignore, but if I want to cleanly eject directories from this
monorepo, it makes sense to keep the .gitignore files local to each project.
2020-03-27 10:59:50 +00:00
William Carroll
514136c99a Run Prettier across projects
Problem:
Prettier was not running when I saved Emacs buffers.

Why?
- prettier-js-mode needs needs node; lorri exposes node to direnv; direnv
  exposes node to Emacs; lorri was not working as expected.

Solution:
Now that I'm using nix-buffer, I can properly expose node (and other
dependencies) to my Emacs buffers. Now Prettier is working.

Commentary:
Since prettier hadn't worked for so long, I stopped thinking about it. As such,
I did not include it as a dependency in boilerplate/typescript. I added it
now. I retroactively ran prettier across a few of my frontend projects to unify
the code styling.

I may need to run...
```shell
$ cd ~/briefcase
$ nix-shell
$ npx prettier --list-different "**/*.{js,ts,jsx,tsx,html,css,json}"
```
...to see which files I should have formatted.
2020-03-27 10:59:50 +00:00
William Carroll
f4f7f454fa Delete nut-score
In the spirit of minimalism, I would like to delete this half-baked project from
my repository.

Do less, but better.
2020-03-27 10:59:50 +00:00
William Carroll
6b224a9e31 Drop support for lorri
Lorri does not cleanly integrate with my corporate device, which cannot run
NixOS. To expose dependencies to Emacs buffers, I will use nix-buffer.el, which
reads its values from dir-locals.nix. To easily expose dependencies from my
existing shell.nix files into dir-locals.nix, I wrote a Nix utility function.
2020-03-27 10:59:50 +00:00