Cross-platform dotfiles & developer environment for PopOS (Ubuntu), macOS Catalina+ & Windows 11 with WSL2
Install with curl bash which will download, clone and execute script:
curl -fsSL https://raw.githubusercontent.com/jthegedus/dotfiles/main/dotfiles.bash | bash
Always read script contents before executing via "curl-bash" - read Friends don't let friends Curl | Bash
Run install script locally after clone:
git clone https://github.com/jthegedus/dotfiles ~/projects/dotfiles bash ~/projects/dotfiles/dotfiles.bash
There are 2 categories of software:
asdfas an example)
How you manage and install these 2 categories of software is very difficult to maintain, especially across multiple machines and OSs. How should you manage dependencies that span the boundaries of these two types of top-level software categories? Eg: your browser could require a dependency to be updated that is used by a pinned version of a runtime used for a specific project. There doesn't seem to be a perfect solution.
Desired properties to tackle this problem can be observed below:
|tool||os-level install||manages dep graph||version pinning per-project||Debian/Ubuntu||Windows11 (non-WSL)||macOS|
NixOS appears to be the best solution to this problem. Unfortunately it does not support windows11, NixOS is itself an operating system and configuration requires learning the
In my opinion rolling version updates should use the systems native package manager. And unless you're willing to put in the hours to learn Nix then
asdf is a decent fit for version pinning per-project.
nushell: a new type of shell
starship: cross-shell theme
asdf: Manage multiple runtime versions with a single CLI tool
ripgrep: recursively search directories for a regex pattern while respecting your gitignore
zoxide: A smarter cd command
bat: A cat(1) clone with wings
fd: A simple, fast and user-friendly alternative to 'find'
Naturally these should be managed per-project for which we have chosen
Not installed automatically with this repo's script, but worth looking into:
input-leap(fork of Barrier which is fork of Synergy 1.9): Open-source KVM software
I rely on the PopOS distro for:
curl -fsSL https://raw.githubusercontent.com/jthegedus/dotfiles/dotfiles.bash | bash -- -s --uninstall
bash ~/projects/dotfiles/dotfiles.bash --uninstall
Nushell has a delightful core set of features that allow easy replacement of many tools. It achieves most of these features by treating "everything as data". For example, jq or jql can be replaced with inbuilt commands:
dotfiles on main took 521ms fetch https://api.github.com/repos/jthegedus/dotfiles | select created_at # created_at 0 2017-03-28T01:04:13Z dotfiles on main (fetch https://api.github.com/repos/jthegedus/dotfiles).created_at 2017-03-28T01:04:13Z
Over the years I have slowly moved from extremely custom systems to a smaller set of more powerful tools allowing the same flexibility. From i3wm on Ubuntu to PopOS with it's tiling defaults, bash -> zsh -> nushell achieves the same simplification of toolset by utilising a newer tool that is built on the experience and learning from the past.
~/.gitconfig-> symlinked to