This is only public so I can easily share it across machines. There is probably nothing of interest for you here ... or is there?
My usage is mostly terminal-based on MacOS, Debian Trixie over SSH, or sometimes Crostini (Debian) on Chromebook. Making heavy use of:
- Ghostty
- Bash / Tmux
- Neovim
- FZF / fd / ripgrep
- cmus
git clone https://github.com/fortes/dotfiles.git
./dotfiles/script/setupOnce you've run setup, you'll still have to do the following universal manual steps (see platform-specific sections for more):
-
Generate the machine's SSH keys via 1Password, then add the key into GitHub and wherever else
-
Add any additional ssh keys into
~/.ssh -
If it's a server, may want to authorize your other public keys on the new machine:
ssh-import-id gh:fortes
-
Add your favorite servers into
.ssh/config.local -
Setup
.gitconfig.local:[user] name = Your Name email = xyz@abc.comIf you need to tweak any config based upon the directory path, do something like
[includeIf "gitdir:~/src/company/"] path = ~/.config/git/company.gitconfig -
Log into GitHub Copilot / Claude Code
# GitHub CLI client gh auth login # Install the Copilot extension gh extension install github/gh-copilot # May also need to update the Copilot extensions gh extension upgrade gh-copilot # Launch Claude Code, which will take you through the flow claude # Launch codex CLI to log in codex # Copilot Vim extension by doing `:Copilot auth` # Make sure `ENABLE_GITHUB_COPILOT` variable is set in `~/.profile.local` # Launch Copilot CLI agent, open and do `/login copilot # Launch Gemini CLI agent, open and do `/login gemini
-
Add keys for
llmviallm keys set xxx(or copy over from another machine from~/.config/io.datasette.llm)
git update-index --skip-worktree ./symlinks/npmrcTo make changes in the future:
git update-index --no-skip-worktree ./symlinks/npmrc- Log into sync accounts, extensions should automatically install
- Run
dotfiles/script/stowmanually to make sure to linkuser.jsfor Firefox now that a profile has been created - Configure uBlock Origin
- Enable in private mode
- Enable cloud storage mode. Should do the following for you, but doesn't always work:
- Enable annoyances filters
- Add Bypass paywalls clean filter
- Log into sync accounts, extensions should automatically install
- Log into 1Password extension
-
Set up TouchID, Apple account if required
-
Remove all the junk from the dock
-
Enable Night Shift and set to Sunset to Sunrise
-
Turn off Natural Scrolling
-
Increase keyboard repeat rate to max, delay to min
-
Change Globe key to Control dictation
-
Disable iCloud syncing of all but Find My Mac & Safari
-
Set
terminal.appprofile, send option as meta key -
May want to install command line tools manually in order to get
git:xcode-select --install -
Run
setup_mac -
Make sure keys repeat properly in VSCode:
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false- For other apps that have this issue, do the following:
# Get the app id osascript -e 'id of app "Cursor"' # Outputs something like `com.todesktop.xxxxx` defaults write -g com.todesktop.xxxxx ApplePressAndHoldEnabled -bool false
- You'll also need to log in to VSCode to get stuff, plus you probably want to run
script/install_vscode_extensionsto get all the extensions installed
- For other apps that have this issue, do the following:
-
terminal.appsucks with colors, switch to Ghostty and pin it in the dock -
Make sure
Rectangle.appstarts on login -
Install the 1Password extension in Safari (others should sync automatically)
-
If planning on using Docker a lot, can have Colima autostart on login by running the following:
brew services start colima
Otherwise, just run
colima startmanually when needed. -
If gaming, install Battle.net/Steam via brew:
# May require this first in order to run Battle.net # (Steam has a beta that doesn't require Rosetta) softwareupdate --install-rosetta --agree-to-license brew install --cask battle-net steam # For battle.net, will need to manually run setup to install the app # open /opt/homebrew/Caskroom/battle-net/VERSION/Battle.net-Setup.app
- For servers, make sure to set up email delivery
- Should also set up unattended upgrades via
sudo dpkg-reconfigure unattended-upgrades - You may need to install
avahi-daemon,avahi-dnsconfd,avahi-utils, andlibnss-mdnsto get.localhostnames to resolve properly mergerfsif you want to do any pooling of drivescifs-utilsmay also be useful to have installed for mounting Windows shares
- All the steps from
Chromesection above - Set up "Night Light" if it didn't automatically sync
- Enable Linux, choose a larger disk size (20GB fine?). Double check which debian version it is via
lsb_release -a(should betrixie) - Run
setup_machine - Share
Downloadsfolder with Linux, then symlink vialn -s /mnt/chromeos/MyFiles/Downloads ~/downloads - Change terminal font by going to
chrome-untrusted://terminal/html/nassh_preferences_editor.html- Add
'DejaVu Sans Mono Nerd'to the beginning of "Text Font Family" - Add the following to custom CSS:
@font-face { font-family: "DejaVu Sans Mono Nerd"; src: url(https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/patched-fonts/DejaVuSansMono/Regular/DejaVuSansMNerdFontMono-Regular.ttf); font-weight: normal; font-style: normal; }
- Add
Images are built with some frequency, via CI.
# Start container in background
docker-compose up -d
# Connect to tmux session
docker-compose exec dotfiles tmux attach -t main
# Stop/restart as needed
docker-compose stop
docker-compose startGets deleted when you exit.
docker run -it --rm --name dotfiles -v ~/src:/workspaces ghcr.io/fortes/dotfiles:latestPreserves state, but not always running
# First time
docker run -it --name dotfiles -v ~/src:/workspaces ghcr.io/fortes/dotfiles:latest
# Later sessions
docker start -ai dotfilesdocker build -t dotfiles .Then follow normal pattern, just use the local image name like so:
docker run -it --rm --name dotfiles dotfilesSince you have to manually install packages from backports, can be tricky to know what is available. To find out, run the following:
apt-cache policy $(dpkg --list | cut -d' ' -f3)This will list out all the packages installed, then need to search through to manually check which have backports available (pipe to nvim -).
- Firefox and VSCode casks get ornery and no longer update via brew, currently install once via script, but updates have to happen manually. Need to investigate further.
This repository previously supported Linux GUI environments (using sway/i3) and Windows WSL2. These configurations have been removed as they are no longer actively used. If you need these configurations, check the git history for older implementations.
- Get folke/sidekick.nvim working
- Check out harper for grammar checking using LSP
- Install
m4xshen/hardtime.nvimfor improving vim motions -
Debian Trixie upgrade(completed)-
Need to run(completed)apt modernize-sourcesto update source format-
Check scripts to make sure we use the new source format as well(completed) - Look at using
extrepo? Lots of sources can probably get rid of a bunch of manual addition
-
- Figure out what's wrong with
/etc/sysctl.don Docker Mac
-
- Set up network share in Crostini
- Get
devcontainersetup for this repo - Figure out how to get M1 CI running to check builds
- Get things working in GitHub codespaces, which seems to use Ubuntu 20.04.06 LTS underneath. Currently fails silently trying to install backports sources. Troubleshooting instructions can be helpful
- Figure out how to use Hammerspoon to have media keys control cmus, instead of launching iTunes (gross)
- Move from
dockertopodman - Look into
glancesandbtop - Auto-publish Docker images
- Dotfile managers might have something better than GNU
stow
This repository is licensed under the BSD 3-Clause License. See the LICENSE file for more information.