This is my personal set of configuration files.
I make an effort to document why the configuration is the way it is. I host the files on GitHub for my own convenience, and in case they are useful to others, but of course there is NO WARRANTY ETC. ETC.
- Clone this repository somewhere.
- Run the
setup.shscript to link configuration files and install tools.
On Windows, run this in PowerShell instead:
irm https://raw.githubusercontent.com/ctrueden/dotfiles/main/setup.ps1 | iexIt installs scoop and git, clones this repository into
~/code/ctrueden/dotfiles, and runs its setup.ps1, which runs setup.sh
in Git Bash, then sets up PowerShell and Windows Terminal. Later, rerun
setup.ps1 (or setup.sh, which defers to it) from the clone.
This is free and unencumbered software released into the public domain. See the UNLICENSE file or http://unlicense.org/ for details.
-
A supercharged zsh configuration built on zpm and Oh My Zsh:
- Jump to directories quickly using z.
- Functional vi mode on the terminal for easy multi-line commands.
- Syntax highlighted terminal commands as you type.
- Vastly improved tab completion support for git, mvn and many more.
- A Starship prompt with git status, language version info, and more.
- See the zshrc for the full list of zsh plugins.
-
A supercharged editor configuration:
- Neovim with kickstart.nvim on systems with nvim 0.10+, providing LSP integration, treesitter syntax, fuzzy finding via Telescope, completion via nvim-cmp, debugging via nvim-dap, and more.
- Vim with Vundle as a fallback on systems without neovim, with plugins including vim-fugitive, vim-airline, and vim-sensible.
- vim-sneak and vim-surround and more for both editors.
- See the vimrc and nvim/ for details.
-
A terminal multiplexer setup using byobu on top of tmux:
- Byobu launches automatically, for login shells and local terminals.
- Ctrl+A as the prefix key, leaving F12 free for a drop-down terminal.
- Ctrl+B instead over SSH, so nested sessions each have their own prefix.
- Prefix + Space opens a fuzzy-find command palette (via fzf).
- Prefix + h opens the current pane's full scrollback in your editor.
- Custom status bar widgets counting unread GitHub notifications and local repositories with unpushed changes.
- Where byobu is missing, plain tmux (over SSH) and, on Windows, psmux read the same tmux.conf, plus byobu's main function keys from fkeys.conf.
- See tmux/ and byobu/ for details.
-
A declarative package manifest, installed by
install-packages:- One packages file lists tools for apt, Homebrew, and, on
Windows, scoop and winget, plus npm and uv; each entry names its
alternatives in order of preference, e.g.
apt:fd-find | brew|scoop:fd. - Sections for core tools (always), GUI apps (desktops only), and
opt-in groups (build, dev, heavy, primary, java, system), chosen per machine when
setup.shfirst runs and saved in~/.config/dotfiles/sections. - Installs only what is missing, in as few package manager
invocations as possible; use
--dry-runto preview. - Custom installers in bin/packages/ for things no package manager supplies well, each pinned to a release and verified against a recorded checksum.
update-allreruns it, so new manifest entries and bumped pins reach existing machines, then upgrades uv tools and npm packages.
- One packages file lists tools for apt, Homebrew, and, on
Windows, scoop and winget, plus npm and uv; each entry names its
alternatives in order of preference, e.g.
-
A managed set of SCM repositories for the SciJava ecosystem:
- Sensible defaults for an extensible source code folder structure,
anchored at
~/code, and subdivided into categories. - Extensible configuration for myrepos to work with many repositories en masse.
- Shell aliases (type
goand press tab) for jumping to specific code folders for SciJava et al., or use z. devlinkbuilds tool checkouts (uv, pixi, npm, cargo, make, or plain scripts) and links their executables into~/bin, shadowing released versions; mr runs it on checkout and update.
- Sensible defaults for an extensible source code folder structure,
anchored at
-
A toolbox for managing and working with Java:
jlistlists the Java installations, found beneath~/Java, the cjdk cache, macOSjava_home, Linux alternatives, and Homebrew.jhomeprints the path of a matching installation, for one-off use without changing the shell, e.g.JAVA_HOME=$(jhome "^17") mvn ....jswitchchanges the current shell's Java, downloading it via cjdk if needed, e.g.jswitch zulu:21; or use shortcuts likej8,j21, andjg21(GraalVM).java,javac, etc. followJAVA_HOME, which defaults to an installed LTS release, preferring Java 21.- Utilities for inspecting JAR files:
catjar,jar-manifest,jardiff,find-class,list-classes, and more in bin/java/. - Configuration for using jgo to easily launch useful Java code, particularly SciJava-related code, including ImageJ, Fiji, Bio-Formats, SCIFIO, and script REPLs including Jython, Groovy and the multi-language SciJava REPL.
-
Limited legacy support for those stuck on bash, including bash 3.x.
Supported platforms include:
- Linux (tested foremost on Ubuntu)
- FreeBSD (tested on TrueNAS)
- macOS
- Windows (via WSL, Git Bash, or Cygwin)
Other platforms might work too—I make an effort to keep everything POSIX-friendly—but I haven't tested them.