Configuration for my development environment, on macOS and Ubuntu.
Managed with sennit, written for this repository. Three files describe the whole thing:
packages.toml |
every package, and what it provides |
theme.toml |
the colour scheme, once |
sennit.toml |
what gets linked, generated, and run afterwards |
CI installs the whole thing into a fresh Ubuntu container on every push, then checks that
nothing any config references is missing from packages.toml. A pull request that adds
a declaration is tested by removing it again and seeing whether the install still
succeeds; edits inside an existing declaration and outright deletions only get the
unmutated build.
This repository manages configurations for:
- Shell & Prompt:
- Editors:
- Terminal & Multiplexers:
- System & Tools:
- Mise - Runtime executor & version manager (Node, Python, etc.).
- Hammerspoon - macOS automation.
- LazyGit - Simple terminal UI for git commands.
- macOS or Linux (Ubuntu/Debian)
curl,git
To install and set up everything, simply run the following command:
curl -fsSL -o /tmp/dotfiles-install.sh \
https://github.com/ghraw/ken109/dotfiles/main/script/install.sh \
&& bash /tmp/dotfiles-install.shTwo steps joined with && rather than bash -c "$(curl …)" on purpose. A command
substitution throws away curl's exit status, so a 404 or a connection dropped mid-body
would feed bash a truncated script — which, since this one is all function definitions
with a single call on the last line, exits 0 having done nothing. -f catches the 404 and
the && catches the truncation, which curl reports as exit 18.
It clones the repository to ~/.dotfiles, installs Homebrew and enough to run sennit,
and hands the rest over: sennit sync installs what packages.toml declares, and
sennit apply renders the templates and places the symlinks.
After installation, the following commands and aliases are available:
dotfiles update: Pull, then re-apply.dotfiles list: Show every managed path and where it points.
Or use sennit directly, from anywhere inside the repository:
sennit diff # what an apply would change
sennit apply # place it
sennit sync # install anything declared but missing
sennit check # is everything the configs need declared?
sennit verify # is everything declared actually here?cdg: Quickly navigate toghqmanaged repositories usingfzf.git-branch-prune: Delete local branches that have been removed from the remote.
.dotfiles
├── packages.toml # every package, per OS and package manager
├── theme.toml # the colour scheme
├── sennit.toml # what to link, what to generate, what to run after
├── .config/ # XDG configuration (nvim, zsh, tmux, alacritty, ...)
├── .hammerspoon/ # macOS automation
├── .local/ # GNOME Shell extensions (Linux)
└── script/ # bootstrap and setup; everything else is sennit's job
Files ending in .tmpl are generated from theme.toml; their output is not committed.
MIT © Kensuke Kubo
