]> git.wincent.com - wincent.git/log
2 days agochore(nvim): update Command-T submodule main master
Greg Hurrell [Thu, 1 Dec 2022 21:27:27 +0000 (22:27 +0100)] 
chore(nvim): update Command-T submodule

* aspects/nvim/files/.config/nvim/pack/bundle/opt/command-t e8d4847...429b6b7 (5):
  > Merge branch 'pull/414'
  > test: add tests for `is_table()` and `is_list()`
  > doc: start new section in HISTORY post-release
  > chore: prepare for 6.0.0-b.0 release
  > doc: flesh out installation instructions

6 days agostyle: run `bin/format`
Greg Hurrell [Mon, 28 Nov 2022 13:04:04 +0000 (14:04 +0100)] 
style: run `bin/format`

6 days agochore: note what we _would_ do if we wanted to install Homebrew Ruby
Greg Hurrell [Mon, 28 Nov 2022 12:46:47 +0000 (13:46 +0100)] 
chore: note what we _would_ do if we wanted to install Homebrew Ruby

So I had little play with this to see if it is worth it, and sadly, I
don't think it is.

The rationale: Sorbet requires at least Ruby 2.7.0, and macOS Ventura
(2022) ships with Ruby 2.6 (2018). Ruby 2.6 is old/unsupported, so
"overwriting" it seams reasonable.

The reality: my system has a fragile dependency on Ruby. Neovim depends
on Ruby, and I get Neovim from Homebrew. I need Ruby support in Neovim
for Command-T (well, not really, as I am using the Lua version now, but
I'd still like it to work). It is not clear to me whether installing
Neovim before/after installing Ruby will produce a working set-up, or
whether I can have them be somewhat independent.

So, I tried out the code in this commit, adding the new Ruby to the
start of the path. Neovim `:checkhealth` notes that the Command-T C
extension doesn't work. If I try to use it, I see this:

    command-t.vim could not load the C extension.
    Please see INSTALLATION and TROUBLE-SHOOTING in the help.
    Vim Ruby version: 2.6.10-p210
    Expected version: 2.6.8-p205
    For more information type:    :help command-t-ruby

which is actually super puzzling. I think this means that the extension
didn't load, and the version numbers are misleading about why. The
current OS (Ventura) is running 2.6.10, and that's why that shows up
even though it isn't first in the `$PATH` (when Neovim was built, maybe
it linked against a specific version, or maybe it didn't). When
Command-T was built, pre-Ventura, 2.6.8 was probably the current
version, so that's what's showing up in the message. In reality, Neovim
must be using not 2.6.10 but the 3.1.0 version coming from Homebrew,
which is why the extension isn't loading.

I could fix all this by rebuilding, but it doesn't feel particularly
robust. So, I put my `$PATH` back the way it was before, did a rebuild,
and everything works again.

The other problem. Even with the new version of Ruby, I can't run `srb`
in the main repo I work in because it dies looking for a million
uninstalled Gems. I don't want to (and perhaps can't) install those, and
much less on an ARM Mac. So, if `srb` won't run, Neovim can't use it to
provide LSP services.

Finally, the bootstrap process is annoyingly interdependent. For
example, I install Neovim and Ruby with Brew in the "homebrew" aspect.
Later, in the "ruby" aspect, I install gems, but for those to work, the
`$PATH` has to already be up-to-date. But the `$PATH` won't be
up-to-date because it was set up in the "dotfiles" aspect earlier on in
the process, but from an older shell, which means that the `$PATH` won't
become active until next time I open a terminal. I could fix this by
updating the path in the running install process, but that feels rather

Overall, I deem this too much effort and the juice is not worth the

9 days agochore(nvim): turn on Sorbet by default
Greg Hurrell [Thu, 24 Nov 2022 16:34:50 +0000 (17:34 +0100)] 
chore(nvim): turn on Sorbet by default

No need to do this on Codespaces because the ones I use already have it.
Can't do it on Darwin for annoying reasons noted in the comment (and
setting up a custom Ruby earlier in the `$PATH` seems fraught and maybe
not worth it). May still want to do it on non-Codespace Linux box, but
can cross that bridge later on.

3 weeks agochore: update git-cipher submodule
Greg Hurrell [Thu, 10 Nov 2022 14:28:47 +0000 (15:28 +0100)] 
chore: update git-cipher submodule

3 weeks agofix(dotfiles): don't skip linking directories
Greg Hurrell [Thu, 10 Nov 2022 14:13:30 +0000 (15:13 +0100)] 
fix(dotfiles): don't skip linking directories

Regression introduced in parent commit, d1adbb539a94c5eb ("fix: don't
check directories for encryptedness", 8 Nov 2022).

The intent there was to not check directories for encryptedness, but I
moved the entire `file()` up into the `is('codespaces')` check, meaning
that we failed to link a bunch of entries like `~/.config/kitty`,
causing subsequent tasks to fail.

3 weeks agofix: don't check directories for encryptedness
Greg Hurrell [Tue, 8 Nov 2022 17:40:26 +0000 (18:40 +0100)] 
fix: don't check directories for encryptedness

We were checking a bunch of directories that of course are not going to
be encrypted; eg.

    [info]    Skipped: not linking .../aspects/dotfiles/files/.config/clipper because it is not decrypted
    [info]    Skipped: not linking .../aspects/dotfiles/files/.config/dunst because it is not decrypted
    [info]    Skipped: not linking .../aspects/dotfiles/files/.config/glow because it is not decrypted
    [info]    Skipped: not linking .../aspects/dotfiles/files/.config/herbstluftwm because it is not decrypted
    [info]    Skipped: not linking .../aspects/dotfiles/files/.config/i3 because it is not decrypted
    [info]    Skipped: not linking .../aspects/dotfiles/files/.config/i3blocks because it is not decrypted
    [info]    Skipped: not linking .../aspects/dotfiles/files/.config/kitty because it is not decrypted
    [info]    Skipped: not linking .../aspects/dotfiles/files/.config/lf because it is not decrypted

Add a `stat` call so that we only run on files instead.

3 weeks agorefactor(codespaces): don't die if sshd pidfile isn't present
Greg Hurrell [Tue, 8 Nov 2022 16:47:40 +0000 (17:47 +0100)] 
refactor(codespaces): don't die if sshd pidfile isn't present

More upstream changes, I suspect, as I am seeing errors like this on
initial bootstrap:

     pkill: pidfile not valid
     Try `pkill --help' for more information.

Logging into the VM later on, I can definitely see a pidfile there, and
the command works without issue:

    sudo pkill -HUP -F /var/run/sshd.pid

So, I'm going to assume that if the pidfile isn't present, the daemon is
restarting or something, in which case it will re-read the config file
anyway. Lame, but I don't see any other obvious choice at this point.

3 weeks agorefactor(codespaces): bring in .tmux-local.conf
Greg Hurrell [Tue, 8 Nov 2022 11:20:52 +0000 (12:20 +0100)] 
refactor(codespaces): bring in .tmux-local.conf

This was in my private codespaces dotfiles repo, but that set-up
recently got broken by some upstream refactoring (the setup script
stopped running, which meant I had to rename my setup script, and that
in turn meant that symlinks stopped being created automatically).

So, as this file doesn't have anything sensitive in it, just bring it
over here instead (it doesn't need to be encrypted).

5 weeks agofix: avoid race between "nvim" and "codespaces" aspects
Greg Hurrell [Fri, 28 Oct 2022 10:06:24 +0000 (12:06 +0200)] 
fix: avoid race between "nvim" and "codespaces" aspects

This never failed me before but with timing changes caused by upstream
modifications to codespace creation, a latent race has been revealed and
it seems to manifest quite reliably:

    [notice]  Task: nvim | create symlinks
    [notice]  Task: codespaces | symlink files
    [notice]  Summary: changed=138 failed=0 ok=7 skipped=14 elapsed=47.86s
    [notice]  Changed: file[link] /home/vscode/.config/nvim
    [error]   Cannot stat "/home/vscode/.config/nvim/init-local.vim" because parent "/home/vscode/.config/nvim" does not exist

The "nvim" and "codespaces" tasks run in parallel, and "codespaces"
implicitly relies on "nvim" having created the symlink at
`~/.config/nvim` before it tries to symlink something else inside of it.

This commit is the simplest fix: don't run them in parallel. I want to
measure how much slower this is before deciding whether to bother with
micromanaging things further such that we can make them (mostly) run in
parallel again, except without a race.

6 weeks agochore: update git-cipher submodule
Greg Hurrell [Fri, 21 Oct 2022 09:28:03 +0000 (11:28 +0200)] 
chore: update git-cipher submodule

Remember that in order to actually use the changed code have to trigger
a build in the `vendor/git-cipher` directory.

* vendor/git-cipher 44cf8a6...a343d2e (7):
  > fix: add missing `v` prefix to version in PROTOCOL_URL
  > chore: add .yarnrc
  > docs: start new section in CHANGELOG.md, post-release
  > docs: update docs prior to v2.0.0-pre.2 release
  > style: run `yarn format`
  > docs: add some more docs
  > docs: add short descriptions to all subcommands

6 weeks agochore(nvim): update Command-T submodule
Greg Hurrell [Fri, 21 Oct 2022 09:21:53 +0000 (11:21 +0200)] 
chore(nvim): update Command-T submodule

* aspects/nvim/files/.config/nvim/pack/bundle/opt/command-t 5b07b5d...e8d4847 (10):
  > refactor: improve config validation
  > chore: avoid duplicate actions runs
  > docs: update HISTORY section
  > refactor: reduce duplication in scanner benchmarks
  > perf: make scanner benchmarks work again
  > refactor: use list/command finders/scanners
  > refactor: rationalize option propagation
  > refactor: pass in `open` via options
  > feat: add "list" finder
  > doc: remove reference to missing fallback from KNOWN ISSUES

2 months agochore(nvim): install v0.8.0 on Debian machines
Greg Hurrell [Sat, 1 Oct 2022 17:09:33 +0000 (19:09 +0200)] 
chore(nvim): install v0.8.0 on Debian machines

2 months agochore(dotfile): add stats alias
Greg Hurrell [Fri, 30 Sep 2022 12:15:27 +0000 (14:15 +0200)] 
chore(dotfile): add stats alias

2 months agochore(dotfiles): encrypt host-specific shell config
Greg Hurrell [Fri, 30 Sep 2022 12:12:35 +0000 (14:12 +0200)] 
chore(dotfiles): encrypt host-specific shell config

Because I'm putting some semi-private stuff in here.

2 months agochore: update stylua to v0.15.1
Greg Hurrell [Thu, 22 Sep 2022 18:36:58 +0000 (20:36 +0200)] 
chore: update stylua to v0.15.1

- https://github.com/JohnnyMorganz/StyLua/releases/tag/v0.15.1

This fixes the parser regressions in v0.15.0, and means I can put the
problematic string back the way it was before. See 807aed991824253ba
("chore: use latest version (v0.15.0) of stylua") for context.

2 months agochore: point at `stylua-action@v1`
Greg Hurrell [Thu, 22 Sep 2022 12:40:15 +0000 (14:40 +0200)] 
chore: point at `stylua-action@v1`

As noted here:

- https://github.com/JohnnyMorganz/stylua-action/issues/40

README uses `v1` in the example, but the tag was only recently
published (about 17 minutes ago, at the time I write this).

2 months agochore: use latest version (v0.15.0) of stylua
Greg Hurrell [Thu, 22 Sep 2022 12:14:47 +0000 (14:14 +0200)] 
chore: use latest version (v0.15.0) of stylua

- https://github.com/JohnnyMorganz/StyLua/releases/tag/v0.15.0

This has the `--allow-hidden` switch, which means we can simplify our

However, it did not like this line (using `[=[`/`]=]` delimiters and
some nested quotations):

    vim.opt_local.include = [=[\v<((do|load)file|require)\s*\(?['"]\zs[^'"]+\ze['"]]=]


    error parsing: error occurred while tokenizing: unclosed string at line 2, column 25

The "long bracket" syntax is valid, however, and is described like this:

> Literal strings can also be defined using a long format enclosed by
> long brackets. We define an opening long bracket of level n as an
> opening square bracket followed by n equal signs followed by another
> opening square bracket. So, an opening long bracket of level 0 is
> written as [[, an opening long bracket of level 1 is written as [=[,
> and so on. A closing long bracket is defined similarly; for instance,
> a closing long bracket of level 4 is written as ]====]. A long string
> starts with an opening long bracket of any level and ends at the first
> closing long bracket of the same level. Literals in this bracketed
> form can run for several lines, do not interpret any escape sequences,
> and ignore long brackets of any other level. They can contain anything
> except a closing bracket of the proper level.

in the Lua manual:

- https://www.lua.org/manual/5.1/manual.html

To work around this, I just split it over multiple lines and it parses
fine. I'll report this upstream:

- https://github.com/JohnnyMorganz/StyLua/issues/587

2 months agofeat(nvim): avoid `W12` warning when using `:W` command
Greg Hurrell [Wed, 21 Sep 2022 12:51:30 +0000 (14:51 +0200)] 
feat(nvim): avoid `W12` warning when using `:W` command

Via Pro-Tip from Adrian Kocis in YouTube comment:


Temporarily set a non-empty `'buftype'`; as revealed by `:help W12`:

    Warning: File "{filename}" has changed and the buffer was changed in
    Vim as well

    Like the above, and the buffer for the file was changed in this Vim
    as well.  You will have to decide if you want to keep the version
    in this Vim or the one on disk.  This message is not given when
    'buftype' is not empty.

2 months agofeat(nvim): add `safe-par` as wrapper around par
Greg Hurrell [Sat, 10 Sep 2022 17:21:51 +0000 (19:21 +0200)] 
feat(nvim): add `safe-par` as wrapper around par

Because I find it annoying that I hit `gq` in Vim and my selection gets
unhelpfully replaced with:

    par error:
    Word too long: ...

par prints this out to standard out, so you can't hide it with a `2>
/dev/null` redirect. I haven't tested this, but my reading of the
man page suggests that it immediately aborts at this point, so even if
we could redirect the error message, you could still wind up with
something like this in your buffer:

   wrapped line
   wrapped line
   (omitted line due to error)
   (subsequent lines omitted due to early exit)

So, here we add the most inelegant of wrappers (inelegant because we
need not one but two temporary files) to shield us from this unwanted
behavior. In the first  we capture the input. In the second we capture
the output of `par`. If `par` succeeds, we return the output. Otherwise
we return the input.

2 months agorefactor(nvim): remove unnecessary `{ remap = true }`
Greg Hurrell [Tue, 6 Sep 2022 17:02:12 +0000 (19:02 +0200)] 
refactor(nvim): remove unnecessary `{ remap = true }`

Unnecessary, because this is the default.

2 months agochore(nvim): update to Command-T v6.0.0-a.4
Greg Hurrell [Mon, 5 Sep 2022 20:41:35 +0000 (22:41 +0200)] 
chore(nvim): update to Command-T v6.0.0-a.4

* aspects/nvim/files/.config/nvim/pack/bundle/opt/command-t c37fd54...5b07b5d (8):
  > docs: start new section in HISTORY post-release
  > chore: prepare for 6.0.0-a.4 release
  > docs: update README
  > docs: update HISTORY section
  > feat: show "fallback" in prompt title if, er, falling back
  > refactor: rename {un,}stub_candidates to `{un,}stub`
  > fix: make watchman scanner work with path argument
  > refactor: DRY up fallback finders

2 months agoperf(nvim): update base16-nvim submodule
Greg Hurrell [Sat, 3 Sep 2022 20:54:21 +0000 (22:54 +0200)] 
perf(nvim): update base16-nvim submodule

* aspects/nvim/files/.config/nvim/pack/bundle/opt/base16-nvim a80c303...e71ae26 (1):
  > perf: use `vim.api.nvim_set_hl()` for speed

2 months agochore: update submodules
Greg Hurrell [Mon, 5 Sep 2022 09:31:55 +0000 (11:31 +0200)] 
chore: update submodules

* aspects/nvim/files/.config/nvim/pack/bundle/opt/command-t a61574d...c37fd54 (5):
  > Merge branch 'pull/405'
  > feat: fail fast if bin/format encounters a problem
  > feat: make bin/check-format return an exit status
  > feat: add workflow to run Prettier in GitHub actions
  > style: remove whitespace from CONTRIBUTING

* vendor/git-cipher 8001e1d...44cf8a6 (1):
  > refactor: avoid duplication of version number in two places

3 months agochore(nvim): update base16-nvim again (doc typo fix)
Greg Hurrell [Sat, 3 Sep 2022 12:13:54 +0000 (14:13 +0200)] 
chore(nvim): update base16-nvim again (doc typo fix)

* aspects/nvim/files/.config/nvim/pack/bundle/opt/base16-nvim a1a1d97...a80c303 (1):
  > docs: fix grammar

3 months agochore(nvim): update base16-nvim submodule
Greg Hurrell [Sat, 3 Sep 2022 12:11:18 +0000 (14:11 +0200)] 
chore(nvim): update base16-nvim submodule

Nothing of substance changed, but I like to keep up to date.

* aspects/nvim/files/.config/nvim/pack/bundle/opt/base16-nvim 3e732be...a1a1d97 (1):
  > docs: add notes on how to update

3 months agochore(nvim): update base16-nvim to bring in changes from base16-vim
Greg Hurrell [Sat, 3 Sep 2022 11:47:22 +0000 (13:47 +0200)] 
chore(nvim): update base16-nvim to bring in changes from base16-vim

Note that my update procedure:

1. Made changes to the template in the submodule in my dotfiles repo (at
2. Copied them up to the superproject working area with:
   `cp aspects/nvim/files/.config/nvim/pack/bundle/opt/base16-nvim/templates/default.mustache
3. Ran `NO_CLONE=1 support/base16-builder.rb`.

Required me to fix a bug in the `NO_CLONE` handling.

Now that this is all done. I'm cleaning my working area with:

    cd vendor/base16-templates/base16-nvim
    git fetch
    git reset --hard origin/main

* aspects/nvim/files/.config/nvim/pack/bundle/opt/base16-nvim 92ed876...3e732be (3):
  > feat: add support for special names (NONE, bg, etc)
  > feat: tweak Statement color
  > feat: add LSP highlight groups

3 months agochore: update color schemes
Greg Hurrell [Sat, 3 Sep 2022 11:23:42 +0000 (13:23 +0200)] 
chore: update color schemes

1. Updated submodules:

* vendor/base16-templates-source 3af55c8...394b12c (1):
  > Merge pull request #109 from YoloClin/master

2. Ran `support/base16-builder.rb` and tweaked it to unbreak it given
   upstream changes.

3. Committed changes to base16-nvim submodule:

* aspects/nvim/files/.config/nvim/pack/bundle/opt/base16-nvim 2f0d2c2...92ed876 (1):
  > chore: update with new schemes

3 months agochore(nvim): update base16-nvim submodule
Greg Hurrell [Sat, 3 Sep 2022 08:56:14 +0000 (10:56 +0200)] 
chore(nvim): update base16-nvim submodule

* aspects/nvim/files/.config/nvim/pack/bundle/opt/base16-nvim b9c6f65...2f0d2c2 (2):
  > chore: add .mailmap file
  > chore: replace bad links

3 months agochore: replace bad links
Greg Hurrell [Sat, 3 Sep 2022 08:49:40 +0000 (10:49 +0200)] 
chore: replace bad links

These all point at some kind of crypto/casino site now, and I find it
irritating to have a bunch of links like that in my repo.

3 months agofix: correct bad path in workflow
Greg Hurrell [Fri, 2 Sep 2022 18:46:28 +0000 (20:46 +0200)] 
fix: correct bad path in workflow

Leading to:

    error: no file or directory found matching 'aspects/dotfiles/.hammerspoon'

As seen here:

- https://github.com/wincent/wincent/runs/8162235393?check_suite_focus=true

3 months agofix: add missing `runs-on` to workflow file
Greg Hurrell [Fri, 2 Sep 2022 18:44:46 +0000 (20:44 +0200)] 
fix: add missing `runs-on` to workflow file

    The workflow is not valid. .github/workflows/ci.yml (Line: 14,
    Col: 5): Required property is missing: runs-on

As seen here:

- https://github.com/wincent/wincent/actions/runs/2981177808

3 months agorefactor: change the way we do checks in CI environment
Greg Hurrell [Fri, 2 Sep 2022 18:41:26 +0000 (20:41 +0200)] 
refactor: change the way we do checks in CI environment

- Instead of: CI calling Yarn to run Prettier via `package.json` scripts.
- Do: CI uses actions to run Prettier and StyLua; `package.json` scripts
  are not used in CI; they just call `bin/` scripts; `bin/` scripts call
  executables directly (well `stylua` directly, and `prettier` via
  `npx`, same as before).

3 months agostyle: format Lua with StyLua
Greg Hurrell [Fri, 2 Sep 2022 18:20:53 +0000 (20:20 +0200)] 
style: format Lua with StyLua

- https://github.com/JohnnyMorganz/StyLua

3 months agoMerge branch 'pull/135'
Greg Hurrell [Fri, 2 Sep 2022 17:42:29 +0000 (19:42 +0200)] 
Merge branch 'pull/135'

Closes: https://github.com/wincent/wincent/pull/135
* pull/135:
  docs: update "Authors" section in README.md
  style(nvim): prefer single quotes over doubles
  refactor(nvim): try search options using terser expression
  refactor(nvim): don't shadow `module` global
  refactor(nvim): use more descriptive names
  refactor(nvim): avoid variables with numeric suffixes
  refactor(nvim): inline another variable
  refactor(nvim): inline `modfile` and `initfile`
  refactor(nvim): remove unused fallback
  refactor(nvim): remove unused parameter from `include_paths()`
  refactor(nvim): simplify separator handling
  refactor(nvim): replace dynamic `fmt()` call with static value
  refactor(nvim): remove unused local variable
  refactor(nvim): inline function that is only called from one place
  refactor(nvim): don't take a param for something that never changes
  refactor(nvim): make find_required_path() not a global function
  feat(nvim): update(now, you can hit `gf` on a require file)

3 months agodocs: update "Authors" section in README.md
Greg Hurrell [Fri, 2 Sep 2022 17:42:12 +0000 (19:42 +0200)] 
docs: update "Authors" section in README.md

3 months agostyle(nvim): prefer single quotes over doubles
Greg Hurrell [Fri, 2 Sep 2022 17:33:13 +0000 (19:33 +0200)] 
style(nvim): prefer single quotes over doubles

To match style used in rest of project.

3 months agorefactor(nvim): try search options using terser expression
Greg Hurrell [Fri, 2 Sep 2022 17:32:11 +0000 (19:32 +0200)] 
refactor(nvim): try search options using terser expression

3 months agorefactor(nvim): don't shadow `module` global
Greg Hurrell [Fri, 2 Sep 2022 17:30:21 +0000 (19:30 +0200)] 
refactor(nvim): don't shadow `module` global

Instead, match the name that Vim uses (`v:fname`) for the value passed
into `'includeexpr'`.

3 months agorefactor(nvim): use more descriptive names
Greg Hurrell [Fri, 2 Sep 2022 17:25:52 +0000 (19:25 +0200)] 
refactor(nvim): use more descriptive names

3 months agorefactor(nvim): avoid variables with numeric suffixes
Greg Hurrell [Fri, 2 Sep 2022 17:21:45 +0000 (19:21 +0200)] 
refactor(nvim): avoid variables with numeric suffixes

These (ie. `path1` and `path2`) are a code smell; it's better to use
(and re-use) `candidate`.

3 months agorefactor(nvim): inline another variable
Greg Hurrell [Fri, 2 Sep 2022 17:16:59 +0000 (19:16 +0200)] 
refactor(nvim): inline another variable

Line isn't too long/complex, even with the inlining.

3 months agorefactor(nvim): inline `modfile` and `initfile`
Greg Hurrell [Fri, 2 Sep 2022 17:13:53 +0000 (19:13 +0200)] 
refactor(nvim): inline `modfile` and `initfile`

To reduce cognitive load, so the reader can just read all this serially.

3 months agorefactor(nvim): remove unused fallback
Greg Hurrell [Fri, 2 Sep 2022 17:11:35 +0000 (19:11 +0200)] 
refactor(nvim): remove unused fallback

3 months agorefactor(nvim): remove unused parameter from `include_paths()`
Greg Hurrell [Fri, 2 Sep 2022 17:04:36 +0000 (19:04 +0200)] 
refactor(nvim): remove unused parameter from `include_paths()`

`ext` is not used, so the call to `include_paths()` with "fnl" as the
second parameter isn't doing anything. Now, `package.path` is going to
look something like this (but all on one line, separated by ";"):


It is possible to configure Lua's `require()` to automatically compile
".fnl" files on demand:

- https://fennel-lang.org/api#use-luas-built-in-require-function

but I don't know whether there is any expectation that you should be
able to add "?.fnl" entries to your `package.path` or not. I presume you
probably can't, and that what's actually expected is that a ".lua" file
gets compiled at the same location. As such, we'd actually expect our
code here to check for ".fnl" files first, because the user probably
would rather see the source files than the compiled ones.

That's something to figure out if I ever become a Fennel user, or one
tells me about it. In the meantime, there's dead code to kill, so I'm
going to remove it rather than blindly "fixing" it to support a use case
I'm not even familiar with.

3 months agorefactor(nvim): simplify separator handling
Greg Hurrell [Fri, 2 Sep 2022 16:50:37 +0000 (18:50 +0200)] 
refactor(nvim): simplify separator handling

There were two inconsistencies here:

- One is that we were calling `dir_separator()` in one place, but not
- The other is that one place was carefully guarding against the
  possibility that `package.config` might not be set, but not in

Given that it evidently _is_ true (because it doesn't blow up in the
place where we're not doing the check), we can assume it's always true.
The Lua 5.1 docs don't mention it, but the 5.2 docs do:

- http://www.lua.org/manual/5.2/manual.html#pdf-package.config

and evidently LuaJIT must be following the same pattern.

Given that all that's left then is a call to `string.match()`, just
assign it to a module-local variable. There is no cost to pay at startup
for this, because this file is only ever loaded on demand when it is
actually needed.

3 months agorefactor(nvim): replace dynamic `fmt()` call with static value
Greg Hurrell [Fri, 2 Sep 2022 16:39:25 +0000 (18:39 +0200)] 
refactor(nvim): replace dynamic `fmt()` call with static value

3 months agorefactor(nvim): remove unused local variable
Greg Hurrell [Fri, 2 Sep 2022 16:37:48 +0000 (18:37 +0200)] 
refactor(nvim): remove unused local variable

3 months agorefactor(nvim): inline function that is only called from one place
Greg Hurrell [Fri, 2 Sep 2022 16:37:13 +0000 (18:37 +0200)] 
refactor(nvim): inline function that is only called from one place

3 months agorefactor(nvim): don't take a param for something that never changes
Greg Hurrell [Fri, 2 Sep 2022 16:35:44 +0000 (18:35 +0200)] 
refactor(nvim): don't take a param for something that never changes

3 months agorefactor(nvim): make find_required_path() not a global function
Greg Hurrell [Fri, 2 Sep 2022 16:24:53 +0000 (18:24 +0200)] 
refactor(nvim): make find_required_path() not a global function

Because we don't like polluting the global environment unless we have

- `~/.config/nvim/ftplugin/lua.lua` is now basically empty, except for
  setting a couple of local options.
- All the contents move down into
  `~/.config/nvim/lua/wincent/ftplugin/lua/includeexpr.lua` (the name
  here chose to mirror the path, and follow the pattern set by the
  existing `foldexpr.lua`, which is also called in the same way, using
- The global `find_required_path()` is therefore now accessed as
  `wincent.ftplugin.lua.includeexpr()` (specifically, using `v:lua`).

3 months agofeat(nvim): update(now, you can hit `gf` on a require file)
Hashem A. Damrah [Fri, 2 Sep 2022 15:18:24 +0000 (08:18 -0700)] 
feat(nvim): update(now, you can hit `gf` on a require file)

For example, let's say you have the following code:


When you hover over the file being required, you can now jump to the
file by pressing `gf` just as you would another file.


Hashem A. Damrah

Mail: singularisartt@gmail.com
Web:  https://singularisart.github.io

3 months agochore(nvim): update LuaSnip
Greg Hurrell [Thu, 1 Sep 2022 19:18:52 +0000 (21:18 +0200)] 
chore(nvim): update LuaSnip

Note that it requires an update to cmp_luasnip as well due to breaking

- https://github.com/L3MON4D3/LuaSnip/issues/81

Motivation? Not wanting to stray too far from `HEAD` of `master`, to
distribute the pain of an eventual big upgrade over time. On the bright
side, because we're switching to per-'filetype' lazy loading, we spend
less time evaluating `~/.config/nvim/plugin/snippets.lua`.

`nvim --startuptime vim.log` before:

    112.510  000.219  000.219: sourcing /Users/wincent/.config/nvim/plugin/par.lua
    116.324  003.734  003.734: sourcing /Users/wincent/.config/nvim/plugin/snippets.lua
    116.997  000.336  000.336: require('wincent.pinnacle')

And after:

    113.560  000.218  000.218: sourcing /Users/wincent/.config/nvim/plugin/par.lua
    115.057  000.294  000.294: require('luasnip.loaders.util')
    115.061  000.806  000.512: require('luasnip.loaders.from_lua')
    117.122  003.455  002.649: sourcing /Users/wincent/.config/nvim/plugin/snippets.lua
    117.707  000.237  000.237: require('wincent.pinnacle')


- We went from about 3.7ms on this machine (mid-2015 15" MacBook Pro),
  to 2.6ms.
- That's the "own" time for the script. If we add in the time for the
  LuaSnip files that it requires, we get back up to 3.5ms; giving us a
  whopping 0.2ms speed boost!

I jest... as we add more and more snippets over time, the wins will only
increase from here, so this is a good thing.

Submodule changes:

* aspects/nvim/files/.config/nvim/pack/bundle/opt/LuaSnip cc00863...1843932 (128):
  > Format with stylua
  > Auto generate docs
  > make some opts for `ls.snip_expand` available through `ls.expand`.
  > ci: verify there are no duplicate helptags.
  > Auto generate docs
  > Revert "generate help for duplicate tags"
  > Auto generate docs
  > generate help for duplicate tags
  > Format with stylua
  > Auto generate docs
  > Add tests for ext_opts.
  > ext_opts: add states `visited` and `unvisited`.
  > Merge pull request #558 from dzfrias/fix-jsregexp-install
  > Merge pull request #557 from leiserfg/rename-tag
  > Format with stylua
  > Auto generate docs
  > Merge branch 'parse_from_ast'
  > Format with stylua
  > Auto generate docs
  > get_snippet_filetypes: filter duplicate filetypes.
  > Merge branch 'override_fn'
  > Format with stylua
  > Auto generate docs
  > loaders: gracefully handle missing files.
  > Format with stylua
  > Merge branch 'loader_handle_symlinks'
  > Merge pull request #543 from leiserfg/setup
  > Merge pull request #540 from jrowlingson/patch-3
  > Merge pull request #539 from jrowlingson/patch-1
  > Merge pull request #528 from leiserfg/parse-vargs
  > Merge pull request #536 from axieax/master
  > Merge pull request #531 from atticus-sullivan/unset_lua_path
  > Format with stylua
  > snippetProxy: prevent instantiation if select keys are nil.
  > Auto generate docs
  > Merge remote-tracking branch 'zjp/doc'
  > Merge pull request #512 from leiserfg/fix-nil-dyn
  > Auto generate docs
  > unset LUA_PATH and LUA_CPATH before running tests (close #508).
  > Auto generate docs
  > doc: replace broken+bad example (closes #507).
  > Format with stylua
  > Auto generate docs
  > fix(environ): don't return nil for vars without underscore.
  > Merge pull request #479 from leiserfg/extend_env
  > Auto generate docs
  > feat/fix: Don't switch to NORMAL after select_choice-popup.
  > Format with stylua
  > Auto generate docs
  > refactor(loader): extract loading snippets from file, remove goto.
  > Auto generate docs
  > CI: install lua5.1-headers.
  > Format with stylua
  > Auto generate docs
  > dynamicNode: indent snippetNode in `update_static` (close #491).
  > Auto generate docs
  > edit_snippet_files: add doc for `edit`.
  > Auto generate docs
  > edit_snippet_files: allow custom edit-command.
  > edit_snippet_files: escape magic chars before `gsub` in default `format`.
  > Format with stylua
  > Auto generate docs
  > unlink_current if leftover extmarks found in in_snippet (close #485).
  > Format with stylua
  > Auto generate docs
  > format with stylua.
  > Auto generate docs
  > fix: initialize positions in update_restore.
  > fix(restoreNode): call correct update-routine.
  > Auto generate docs
  > fix(env): vim.tbl_extend does not preserve metatables!!!
  > Merge pull request #463 from zdcthomas/master
  > ci: run tests on PR
  > Auto generate docs
  > Merge branch 'pre_expand_env'
  > Auto generate docs
  > doc: add short note on duplicate keys in fmt (close #465).
  > Auto generate docs
  > ci: fix it.
  > Auto generate docs
  > otf: prevent crash with $ before end of string.
  > Auto generate docs
  > Merge pull request #447 from maxmahlke/master
  > Auto generate docs
  > load lazy_load-snippets immediately after lazy_load-call.
  > Readme: clean up mapping-section a bit.
  > Merge pull request #446 from kjerstadius/docs/prev-choice
  > loader: Properly escape filename for au-pattern.
  > Auto generate docs
  > Correctly indent f during static_*-operations.
  > Auto generate docs
  > Merge branch 'pre_expand_callback'
  > Merge branch 'lazy_load_support'
  > snip_expand: delete clear_region before expanding.
  > Auto generate docs
  > Merge branch 'snip_expand_no_enter_snippet'
  > Auto generate docs
  > doc: explicitly explain how to switch choices.
  > Auto generate docs
  > Merge pull request #430 from L3MON4D3/indent_improve
  > Auto generate docs
  > fmt: add docs (closes #412).
  > doc: update+improve documentation for loaders.
  > Add per-snippet priority to vscode+snipmate-loader.
  > add tests for priorities.
  > loaders: only allow {override,default}_priority as add_snippet-options.
  > Auto generate docs
  > vscode: add add_opts, like for lua and snipmate.
  > loader-cache: deepcopy loaded snippets before re-adding them.
  > snippetProxy: prevent parse when invalidate is called.
  > edit_snippet_files: shorten packer+config default-paths.
  > Move lazy_load-autocommands into plugin/luasnip.vim.
  > remove autocommands on cleanup.
  > Merge branch 'master' into loader_priority
  > snipmate-loader: Add reload on save.
  > vscode-loader: Add reload on save.
  > loader: Allow filtering items using format.
  > Add ft-edit to vscode and snipmate, add editing files from all sources.
  > lua-loader: simplify reload.
  > vscode: prevent multiple-parsing.
  > fix corner-case with extends and multiple paths in snipmate-loader.
  > Prepare snipmate-loader for reload-capability.
  > Further restructure vscode-loader.
  > restructure vscode-loader (not done yet).
  > Merge branch 'master' into loader_priority
  > Store add_opts by path as well, needed for reload.
  > Allow passing any options to add_snippets-call from (lazy_)load().
  > fix(loaders): don't store snippets as autosnippets.

* aspects/nvim/files/.config/nvim/pack/bundle/opt/cmp_luasnip 7bd2612...a9de941 (6):
  > refactor(cmp_luasnip): breaking change use 0.7 autocmd api
  > Create LICENSE
  > Merge pull request #37 from jedrzejboczar/reuse-line-before-cursor
  > Merge pull request #36 from jedrzejboczar/fix-readme-typo
  > Merge pull request #35 from L3MON4D3/master
  > Fix #31

3 months agochore(nivm): update command-t submodule
Greg Hurrell [Wed, 31 Aug 2022 20:34:25 +0000 (22:34 +0200)] 
chore(nivm): update command-t submodule

* aspects/nvim/files/.config/nvim/pack/bundle/opt/command-t 54fc4c7...a61574d (9):
  > docs: update HISTORY post-release
  > chore: prepare for 6.0.0-a.3 release
  > Merge branch 'wincent/control-characters'
  > Merge branch 'wincent/fallbacks'
  > Merge branch 'pull/401'
  > Merge branch 'wincent/fix-32-bit'
  > chore: prepare for 6.0.0-a.2 release
  > Merge branch 'wincent/32-bit'
  > Merge branch 'wincent/delete-words'

Bah, and now I notice that by using more topic branches, these summaries
aren't as useful any more (it all depends on how good the topic branch
name is). For reference, here's a `--graph` view:

    * a61574d docs: update HISTORY post-release
    * ac4a39c chore: prepare for 6.0.0-a.3 release
    *   5919c2f Merge branch 'wincent/control-characters'
    | * 3d7b0e3 docs: update HISTORY section
    | * 7f5457b fix: don't let control characters mess up the display
    *   005b695 Merge branch 'wincent/fallbacks'
    | * 43acbee docs: update HISTORY
    | * 9e8c790 feat: implement fallback for some finders
    | * b229d92 refactor: hide stderr from Neovim
    *   fa9e113 Merge branch 'pull/401'
    | * 27258d6 docs: update HISTORY and AUTHORS sections
    | * f4b6a91 docs: update Lua mappings documentation
    *   f862693 Merge branch 'wincent/fix-32-bit'
    | * 730ee7c docs: update HISTORY section
    | * 6c8e2a3 fix: add missing `-D` prefixes when building on 32-bit architectures
    | * 842f62e docs: start new heading for next release under HISTORY
    * 41e814c chore: prepare for 6.0.0-a.2 release
    *   946f373 Merge branch 'wincent/32-bit'
    | * f5b6cb5 docs: update HISTORY
    | * 61f140b style: use uniform indents in Makefile
    | * 7b47958 fix: use smaller memory allocation values on 32-bit systems
    *   1d40403 Merge branch 'wincent/delete-words'
    | * 9a0e934 docs: update HISTORY
    | * 0a19ffb feat: teach prompt window to delete words with `<C-w>`
    * 54fc4c7 docs: add some more notes on testing with Vagrant

3 months agoperf(nvim): speed up `<leader>zz` mapping
Greg Hurrell [Mon, 29 Aug 2022 15:26:15 +0000 (17:26 +0200)] 
perf(nvim): speed up `<leader>zz` mapping

Noticed it is slow on a big Markdown doc that I frequently edit
(currently, 1.8k lines).

Gets much faster (instant) if we only update changed lines. Before this
commit, it took some number of seconds on that big file.

Note, I don't recall why I wrote it this way, and the commit message
where it took on its form isn't very revealing (see 2cb23aba198843a40,
"Address some vim-vint lints", Jun 13, 2017). Before that, it did this,
which I presume was very fast but must have had some unwanted

    let l:pos=getcurpos()
    let l:search=@/
    keepjumps %substitute/\s\+$//e
    let @/=l:search
    call setpos('.', l:pos)

3 months agochore(nvim): prefer Ripgrep for Command-T
Greg Hurrell [Mon, 29 Aug 2022 13:08:30 +0000 (15:08 +0200)] 
chore(nvim): prefer Ripgrep for Command-T

I need to figure out what I want to do in the long term because it is
probably something stupidly elaborate like:

1. Use Watchman if available, falling back to...
2. Ripgrep if Watchman is not available, falling back to...
3. Git if in a Git repo and Ripgrep is not available, failing back to...
4. The vanilla scanner.

Or something like that; maybe the order of 2 and 3 is swapped. Need to
think about it a bit more.

But in the meantime, Ripgrep is fast and if I want to find something
that Ripgrep usually wouldn't find, I can always run a different command
instead of hitting the mapping.

3 months agochore(nvim): update Command-T submodule
Greg Hurrell [Mon, 29 Aug 2022 07:09:48 +0000 (09:09 +0200)] 
chore(nvim): update Command-T submodule

Just doc fixes, so nothing important; just wanting to keep up-to-date.

* aspects/nvim/files/.config/nvim/pack/bundle/opt/command-t 4a0ee7b...54fc4c7 (2):
  > docs: add some more notes on testing with Vagrant
  > docs: fix typo ("Watcman" -> "Watchman")

3 months agochore: point Command-T submodule at "main" instead of "pu"
Greg Hurrell [Sun, 28 Aug 2022 16:33:45 +0000 (18:33 +0200)] 
chore: point Command-T submodule at "main" instead of "pu"

Everything that was on "pu" is now on "main" and we're going to be
continuing from there.

3 months agochore(nvim): don't show 'colorcolumn' in vim-dirvish
Greg Hurrell [Sun, 28 Aug 2022 15:57:59 +0000 (17:57 +0200)] 
chore(nvim): don't show 'colorcolumn' in vim-dirvish

Another change I made while troubleshooting for the parent commit, but
it makes sense to do this anyway. These are only display-only buffers,
so there is no point in giving feedback to the user about how wide the
contents are.

3 months agochore(nvim): update command-t and vim-dirvish submodules
Greg Hurrell [Sun, 28 Aug 2022 15:56:14 +0000 (17:56 +0200)] 
chore(nvim): update command-t and vim-dirvish submodules

As described in this commit in the Command-T repo:


I wanted to fix a glitch that is due to an interaction with vim-dirvish.
I first tried updating the latter's submodule, but the bug was still
there, so I went on to produce a workaround.

* aspects/nvim/files/.config/nvim/pack/bundle/opt/command-t e345176...4a0ee7b (26):
  > docs: update HISTORY section
  > fix: fix rendering glitches due to interaction with vim-dirvish
  > fix: correct two more stale references to `test.sh`
  > docs: prepare HISTORY section for subsequent development
  > fix: correct broken path in GitHub action
  > chore: prepare for 6.0.0-a.1 release
  > docs: add back link to canonical upstream
  > docs: add some notes on release process to CONTRIBUTING.md
  > refactor: get rid of Rake
  > chore: remove .release-notes.txt from .gitignore
  > chore: add .vagrant and Vagrantfile to .gitignore
  > refactor: get rid of diagnostic message
  > docs: add some notes on using Vagrant to create troubleshooting envs
  > refactor: "expose" `ui.open()` function
  > fix: don't freak out when not passed a `finders` config
  > docs: document `:CommandTRipgrep` and friends
  > docs: remove reference to `g:CommandTSuppressRubyDeprecationWarning`
  > fix: apply consistent prefix
  > docs: correct two small typos
  > chore: remove empty .gitmodules file
  > chore: remove unused config file
  > refactor: mostly clean out Rakefile
  > test: avoid another deprecation warning
  > test: avoid deprecation warnings
  > docs: prepare HISTORY section for subsequent development
  > docs: prep documentation for 6.0.0a release

* aspects/nvim/files/.config/nvim/pack/bundle/opt/vim-dirvish ff3f5cd...81b4087 (17):
  > fix: no icons with g:dirvish_relative_paths
  > fix: :Shdo! on non-jagged path
  > feat!: change ":Dirvish" to default to current file
  > fix: <Plug>(dirvish_up) fails on crazy filenames
  > fix: unnamed buffer is not remembered
  > the big short
  > refactor(bufwin_do): buf number instead of name
  > WIP: g:dirvish_relative_paths
  > fix: preserve altbuf, prevbuf
  > style
  > Don't enter Dirvish if 'bufhidden' is not "hide" or empty
  > Fix version check for globpath() #220
  > buf_close: trigger autocommands on altbuf #198
  > doc: mention vim-dirvish-dovish #217
  > mappings: remove deprecated "q" mapping
  > Shdo: handle spaces in 'shell' #211
  > mappings: introduce "~", "cd"

3 months agochore(dotfiles): add `$GOPATH/bin` to `$PATH`
Greg Hurrell [Thu, 25 Aug 2022 13:27:32 +0000 (15:27 +0200)] 
chore(dotfiles): add `$GOPATH/bin` to `$PATH`

So I can run `skeema` etc.

3 months agochore(ssh): drop `LogLevel DEBUG` from shell host config.
Greg Hurrell [Wed, 24 Aug 2022 09:05:50 +0000 (11:05 +0200)] 
chore(ssh): drop `LogLevel DEBUG` from shell host config.

3 months agostyle: add missing whitespace in fig/README.md
Greg Hurrell [Tue, 23 Aug 2022 17:12:09 +0000 (19:12 +0200)] 
style: add missing whitespace in fig/README.md

3 months agofeat: set up Go LSP
Greg Hurrell [Tue, 23 Aug 2022 17:00:26 +0000 (19:00 +0200)] 
feat: set up Go LSP

3 months agochore: add new host alias for new project
Greg Hurrell [Tue, 23 Aug 2022 15:16:30 +0000 (17:16 +0200)] 
chore: add new host alias for new project

Need a new alias so I can work from a codespace for a different repo,
where the codespace needs a different user.

3 months agochore(dotfiles): add a couple more handles
Greg Hurrell [Tue, 23 Aug 2022 13:37:37 +0000 (15:37 +0200)] 
chore(dotfiles): add a couple more handles

3 months agochore: teach Prettier to ignore an encrypted JSON file
Greg Hurrell [Sat, 20 Aug 2022 22:59:35 +0000 (00:59 +0200)] 
chore: teach Prettier to ignore an encrypted JSON file

Because in CI it will be encrypted and will fail as seen here:


like so:

    $ npx -y prettier --check "**/*.{js,json,md,ts}" "*.{md,ts}"
    Checking formatting...
    Error:  aspects/dotfiles/files/.github-handles.json: SyntaxError: Unexpected token (2:1)
    Error:    1 | magic = com.wincent.git-cipher
    Error:  > 2 | url = https://github.com/wincent/git-cipher/blob/v2.0.0-pre.2/PROTOCOL.md
    Error:      | ^
    Error:    3 | version = 1
    Error:    4 | algorithm = aes-256-cbc
    Error:    5 | filename = "aspects/dotfiles/files/.github-handles.json"
    All matched files use Prettier code style!
    error Command failed with exit code 2.

I could make a more complex solution here that changes the glob that
CI uses to select files for format checks (ie. based on the `CI`
environment variable), but this file is so trivial that I am choosing
the easy way out instead.

3 months agochore(dotfiles): turn off audible terminal bell in Kitty
Greg Hurrell [Fri, 19 Aug 2022 16:23:02 +0000 (18:23 +0200)] 
chore(dotfiles): turn off audible terminal bell in Kitty

I was getting annoyed by this, particularly because for reasons that I
don't understand, the bell was persistent until I ran `reset` in the
tab where the bell occurred. This meant that any time I switched to or
from the tab with the error, the bell would sound.

3 months agochore: update git-cipher submodule
Greg Hurrell [Sat, 20 Aug 2022 18:32:15 +0000 (20:32 +0200)] 
chore: update git-cipher submodule

* vendor/git-cipher 598ccb8...8001e1d (12):
  > style: improve the appearance of demo output
  > feat: handle repos without commits a bit better
  > fix: don't `add` unless repo is ready
  > fix: always run `yarn` commands from the repo root
  > feat: add mechanism for including docs in other docs
  > refactor: remove another stale comment
  > docs: add links to subcommand documentation
  > docs: remove mention of command I won't be implementing
  > refactor: remove stale comment
  > feat: show usage info when `--help` is passed
  > feat(unlock): teach `unlock` to alert when `init` needs to be run
  > fix: fix failure due to bootstrap due to ordering

3 months agofix: remove a comment that contained a typo
Greg Hurrell [Thu, 18 Aug 2022 14:46:14 +0000 (16:46 +0200)] 
fix: remove a comment that contained a typo

3 months agochore: update git-cipher submodule to latest `next`
Greg Hurrell [Thu, 18 Aug 2022 14:42:08 +0000 (16:42 +0200)] 
chore: update git-cipher submodule to latest `next`

* vendor/git-cipher 17e05c5...598ccb8 (6):
  > refactor: tweak marked up documentation styling a bit
  > feat: improve help formatting
  > refactor: simplify(?) wrapping logic
  > feat: implement wrapping
  > feat: flesh out Markdown scanner a bit more
  > chore: bundle up changes for the most banal purpose

3 months agochore: install terminfo files on codespaces
Greg Hurrell [Wed, 17 Aug 2022 15:15:00 +0000 (17:15 +0200)] 
chore: install terminfo files on codespaces

Not sure why I didn't do this originally. It means I can let tmux use
`tmux-256color` as `$TERM` by default. It was working fine with
`xterm-256color`, although it's not recommended. May as well do it the
"right" way in any case.

3 months agorefactor: more tweaks for new version of git-cipher
Greg Hurrell [Tue, 9 Aug 2022 13:52:33 +0000 (15:52 +0200)] 
refactor: more tweaks for new version of git-cipher

In our "dotfiles" aspects we have some entries in "files" that are
really directories, and they contain encrypted files:

Directory:                     Contains:
----------                     ---------

.config/Raycast                .config/Raycast/Script Commands/emp.sh
                               .config/Raycast/Script Commands/the-hub.sh

.gitconfig.d                   .gitconfig.d/retiro

.zsh                           .zsh/exports.private

I am not too worried about the Raycast ones, because I'll always decrypt
on macOS, and that's the only place I use Raycast.

But ".gitconfig.d" could be a problem. If we include such a file without
decrypting it, Git will complain about bad config.

Likewise if we source the ".zsh" items and they are full of gibberish
because they're still encrypted, that will cause problems.

So, as mitigation:

1. In the ".zsh" files, we avoid sourcing them if we detect a magic
   header indicating that the file is still encrypted. I didn't want to
   call out to `git-cipher is-encrypted` from my shell startup files,
   because I want shell startup to be fast.

2. In the ".gitconfig.d" files, we'll skip over them if they aren't
   decrypted. Note that if you then do a `git-cipher lock`, the link
   will start pointing at ciphertext that Git will consider to be
   invalid garbage. In practice, we already have this problem with lots
   of other dotfiles; you're not really supposed to lock a repository
   that you're actively using to provide configuration to your machine.

In the "ssh" aspect,  we have similar stuff going on. The main
"~/.ssh/config" file is templated out, and we won't do that if it is not
decrypted. It itself includes files that are links to (hopefully)
decrypted files. We skip creating those links if things aren't
decrypted, with the same results: if you later lock, they will suddenly
become invalid, and you probably shouldn't do that.

Includes submodule update:

* vendor/git-cipher 35ab0b5...17e05c5 (5):
  > style: format more docs
  > feat(add): staged new files in Git index
  > docs: clean out old documentation
  > refactor: uncomment some code
  > refactor: remove dead code

3 months agochore: update git-cipher submodule
Greg Hurrell [Mon, 8 Aug 2022 20:35:48 +0000 (22:35 +0200)] 
chore: update git-cipher submodule

Because it now has an `is-encrypted` subcommand, and `ls` correctly
prints to stdout, not stderr.

3 months agostyle(dotfiles): fix whitespace damage
Greg Hurrell [Mon, 8 Aug 2022 10:54:15 +0000 (12:54 +0200)] 
style(dotfiles): fix whitespace damage

Just noticed and may as well fix it.

3 months agochore: update vendored yarn version from 1.22.5 to 1.22.19
Greg Hurrell [Mon, 8 Aug 2022 10:05:58 +0000 (12:05 +0200)] 
chore: update vendored yarn version from 1.22.5 to 1.22.19

Done with:

    cd vendor
    wget https://yarnpkg.com/latest.tar.gz
    gunzip latest.tar.gz
    tar xf latest.tar
    rm latest.tar
    git rm -r yarn

    # Remove pesky gitignored .DS_Store, which stopped directory from being removed.
    rm -r yarn

    mv yarn-v1.22.19 yarn
    git add yarn
    git diff --cached

Changelog is incomplete:


but you can see diff here (15 changed files with 232 additions and 192


At some time I am going to have to move onto a newer version (or go back
to npm) because v1.x development is pretty much frozen at this point.

3 months agorefactor: update to git-cipher v2.x (next) branch
Greg Hurrell [Mon, 8 Aug 2022 09:58:41 +0000 (11:58 +0200)] 
refactor: update to git-cipher v2.x (next) branch

Some TODOs noted inline.

4 months agofeat(nvim): detect new ".mts", ".cts" TypeScript extensions
Greg Hurrell [Tue, 2 Aug 2022 17:16:57 +0000 (19:16 +0200)] 
feat(nvim): detect new ".mts", ".cts" TypeScript extensions

4 months agofeat(dotfiles): add some macOS style fallbacks
Greg Hurrell [Mon, 1 Aug 2022 21:27:41 +0000 (23:27 +0200)] 
feat(dotfiles): add some macOS style fallbacks

At this point this is really just OCD (brought to you by the power of
Vim macros).


- Type Option-n Shift-b and see "˜B"
- Type Option-e x and see "´x"
- Type Option-u } and see "¨}"


4 months agofix(interception): fix modifiers
Greg Hurrell [Mon, 1 Aug 2022 20:51:10 +0000 (22:51 +0200)] 
fix(interception): fix modifiers

4 months agofeat: add some more dead keys
Greg Hurrell [Mon, 1 Aug 2022 20:44:20 +0000 (22:44 +0200)] 
feat: add some more dead keys

Not an exhaustive list because, as noted in the comments, I am too lazy
for that. I might autogenerate it somehow. That's something I can do...
Basically want fallbacks for every typable key, which means around 20
letters (lowercase), 20 uppercase, number row, punctuation keys etc,
shifted versions of same.

4 months agochore: update git-cipher submodule
Greg Hurrell [Mon, 1 Aug 2022 11:56:30 +0000 (13:56 +0200)] 
chore: update git-cipher submodule

4 months agofix(dotfiles): fix search path, again
Greg Hurrell [Mon, 1 Aug 2022 10:35:02 +0000 (12:35 +0200)] 
fix(dotfiles): fix search path, again

Not sure if they changed it again, or I just failed to update it
correctly in:

    commit 320bd40204ec6623a59a4ea4f020595196a82e06
    Date:   Tue Jul 26 10:08:51 2022 +0200

        fix(dotfiles): update for new search URL

It should be `/search/?query=` instead of `/?query=`.

4 months agorefactor: update some comments
Greg Hurrell [Mon, 1 Aug 2022 09:57:22 +0000 (11:57 +0200)] 
refactor: update some comments

4 months agofeat: also add dead key bindings for inverted punctuation
Greg Hurrell [Mon, 1 Aug 2022 08:26:04 +0000 (10:26 +0200)] 
feat: also add dead key bindings for inverted punctuation

4 months agochore(nvim): update Command-T submodule
Greg Hurrell [Sun, 31 Jul 2022 22:10:10 +0000 (00:10 +0200)] 
chore(nvim): update Command-T submodule

* aspects/nvim/files/.config/nvim/pack/bundle/opt/command-t dd3e518...e345176 (5):
  > style: run clang-format in CI
  > style: set up clang-format
  > refactor(lua): prefer `directory` over `dir` abbreviation
  > docs(lua): add some notes on Watchman scanner
  > fix(lua): unbreak scanner benchmarks

4 months agochore(tampermonkey): remove unnecessary script
Greg Hurrell [Sun, 31 Jul 2022 21:59:58 +0000 (23:59 +0200)] 
chore(tampermonkey): remove unnecessary script

There is now a user setting for this.

4 months agostyle: run `yarn format`
Greg Hurrell [Sun, 31 Jul 2022 21:38:43 +0000 (23:38 +0200)] 
style: run `yarn format`

4 months agofeat(tampermonkey): add script to unbreak YouTube
Greg Hurrell [Sun, 31 Jul 2022 21:35:36 +0000 (23:35 +0200)] 
feat(tampermonkey): add script to unbreak YouTube

I'm in some A/B test (at least, I only see this when logged in), but
there is some new (as in, within the last month or two) design on
YouTube that prevents me from seeing the darn view count and upload date
on videos.

As usually, installed by running `./install tampermonkey` and then went
to: http://localhost/~wincent and navigating to the new script and
clicking it.

4 months agofix(dotfiles): get rid of useless `'fileencoding'` modeline
Greg Hurrell [Sun, 31 Jul 2022 21:11:44 +0000 (23:11 +0200)] 
fix(dotfiles): get rid of useless `'fileencoding'` modeline

Opening the file once it is templated out yields this:

    Error detected while processing FocusGained Autocommands for "*":
    E5108: Error executing lua
    Vim(doautocmd):E21: Cannot make changes, 'modifiable' is off: fileencoding=utf-8

The docs don't reveal any reason why it would actually be desirale to
have this setting; specifically, note:

            When 'fileencoding' is empty, the file will be saved with UTF-8
            encoding (no conversion when reading or writing a file).

Here it is again with the rest, showing the full context:

    'fileencoding' 'fenc'     string (default: "")
                              local to buffer

            File-content encoding for the current buffer. Conversion is done with
            iconv() or as specified with 'charconvert'.

            When 'fileencoding' is not UTF-8, conversion will be done when
            writing the file.  For reading see below.
            When 'fileencoding' is empty, the file will be saved with UTF-8
            encoding (no conversion when reading or writing a file).

            WARNING: Conversion to a non-Unicode encoding can cause loss of

            See |encoding-names| for the possible values.  Additionally, values may be
            specified that can be handled by the converter, see

            When reading a file 'fileencoding' will be set from 'fileencodings'.
            To read a file in a certain encoding it won't work by setting
            'fileencoding', use the |++enc| argument.  One exception: when
            'fileencodings' is empty the value of 'fileencoding' is used.
            For a new file the global value of 'fileencoding' is used.

            Prepending "8bit-" and "2byte-" has no meaning here, they are ignored.
            When the option is set, the value is converted to lowercase.  Thus
            you can set it with uppercase values too.  '_' characters are
            replaced with '-'.  If a name is recognized from the list at
            |encoding-names|, it is replaced by the standard name.  For example
            "ISO8859-2" becomes "iso-8859-2".

            When this option is set, after starting to edit a file, the 'modified'
            option is set, because the file would be different when written.

            Keep in mind that changing 'fenc' from a modeline happens
            AFTER the text has been read, thus it applies to when the file will be
            written.  If you do set 'fenc' in a modeline, you might want to set
            'nomodified' to avoid not being able to ":q".

            This option cannot be changed when 'modifiable' is off.

4 months agofix(dotfiles): make alt+click open links in Kitty consistently
Greg Hurrell [Sun, 31 Jul 2022 18:54:36 +0000 (20:54 +0200)] 
fix(dotfiles): make alt+click open links in Kitty consistently

I feel like this used to work consistently on both macOS and Linux, but
maybe I am misremembering: one thing I am clear on is that before this
commit, my old habit of alt-clicking URLs in Kitty was no longer opening
them in the browser on either Linux or macOS.

This this change, it seems to work in both places again.

Note, as the comment in the commit describes, I'm using "alt" here in
the Linux sense. On Linux "alt-click" means holding down the big
modifier next to the space bar and clicking. On macOS, we tell Kitty to
"cmd-click" instead, which makes it do the same thing (open the link in
the browser when you click on it while holding the big modifier).

4 months agorefactor(dotfiles): turn kitty.conf into a templated file
Greg Hurrell [Sun, 31 Jul 2022 18:32:50 +0000 (20:32 +0200)] 
refactor(dotfiles): turn kitty.conf into a templated file

Because I need to diverge the macOS and Linux versions of it, for
reasons that will become clear in the next commit.

4 months agostyle: run `yarn format`
Greg Hurrell [Sun, 31 Jul 2022 18:02:05 +0000 (20:02 +0200)] 
style: run `yarn format`

4 months agodocs: add link to Kitty to README
Greg Hurrell [Sun, 31 Jul 2022 18:00:06 +0000 (20:00 +0200)] 
docs: add link to Kitty to README

Seeing as I am currently using exclusively iTerm on my work machine, and
exclusively Kitty on my personal laptop, so I am reasonably confident
that things work well with both.

4 months agostyle: fix Prettier failure by updating ignore pattern
Greg Hurrell [Sun, 31 Jul 2022 17:58:00 +0000 (19:58 +0200)] 
style: fix Prettier failure by updating ignore pattern

Seen failing here:


Caused by the move in:

    commit a02f78119191064149cf041d45087918aa1d8059
    Date:   Sun Jul 31 19:28:39 2022 +0200

        refactor(interception): move mac2linux files one level deeper

4 months agofeat: also set up Linux dead keys for Euro and em dash
Greg Hurrell [Sun, 31 Jul 2022 17:54:35 +0000 (19:54 +0200)] 
feat: also set up Linux dead keys for Euro and em dash

"€" and "—".

4 months agorefactor(interception): move mac2linux files one level deeper
Greg Hurrell [Sun, 31 Jul 2022 17:28:39 +0000 (19:28 +0200)] 
refactor(interception): move mac2linux files one level deeper

Mostly to make them easier to find with a command like `j mac2linux`;
also because it is nice for them to be "labeled" in this way, as
opposed to looking like an undifferentiated mess in the "support"

4 months agodocs: update READMEs with info on recent keyboard changes
Greg Hurrell [Sun, 31 Jul 2022 17:19:48 +0000 (19:19 +0200)] 
docs: update READMEs with info on recent keyboard changes

4 months agorefactor(dotfiles): add .Xmodmap
Greg Hurrell [Sun, 31 Jul 2022 11:45:20 +0000 (13:45 +0200)] 
refactor(dotfiles): add .Xmodmap

Figured out that the reason why the kernel is sending F21/F22/F23 but
some part of the X stack is instead seeing
XF86TouchpadToggle/XF86TouchpadOn/XF86TouchpadOff is because of mappings
defined in /usr/share/X11/xkb/symbols/inet (excerpt):

    // Evdev Standardized Keycodes
    partial alphanumeric_keys
    xkb_symbols "evdev" {
        key <FK21>   {      [ XF86TouchpadToggle    ]       };
        key <FK22>   {      [ XF86TouchpadOn        ]       };
        key <FK23>   {      [ XF86TouchpadOff       ]       };

So, I could leave everything as-is, but I think I prefer to do the
override here. That way, `evtest` and `xev` see the same keys, and the
whole thing is lot more coherent (all the way from the kernel key codes,
via Interception Tools, up through the X stack, they all agree on what
the keys are), even though it does mean adding another file and having
to use it in two places. Part of the ugliness here is that we have two
systems interacting: the "legacy" `xmodmap` layer and the "modern"
`setxkbmap` layer, so it all feels a bit fragile and prone to change;
but with any luck, it will probably keep working for years.

4 months agofeat: set up some macOS-like dead-key mappings on Linux
Greg Hurrell [Sun, 31 Jul 2022 00:13:44 +0000 (02:13 +0200)] 
feat: set up some macOS-like dead-key mappings on Linux