dotsy 0.8.1

A basic dotfile manager created to replace my usage of dotbot.
Documentation

Dotsy

A Huge WIP for managing dotfiles 🧪

https://github.com/user-attachments/assets/2937ebfe-6d4b-4ea3-935f-1b215e806766

The thinking behind Dotsy

The main idea behind this is to be able to manage and reinstall a "config" or "profile" from where ever you were in the file tree.

For example

ls ~/
> ~/Dotfiles
> ~/dev
pwd
> ~/dev/supercool-project/

dotsy config install neovim
# ^ This would install your neovim config without moving you
# out of the directory or context you're currently in (I've felt this is useful
# when I break things)

Getting started on a new machine would theoretically be as simple as running this after cloning your dotfiles

cargo install dotsy
dotsy init
# ^ After this you would have to fill in the config file with the location
# of your dotfiles but this step could be skipped if you have a .dotsyrc in your
# dotfiles repo
dotsy profile install <name of profile to install>

Planning

Command structure?

  • dotsy profile install <profile-name/'s'>
  • dotsy profile uninstall <profile-name/'s'>
  • dotsy config install <config-name/'s>
  • dotsy config uninstall <config-name/'s>
  • dotsy config list
  • dotsy profile list

File structure

  • configs/
    • config/
      • <name>/
      • <name>.json
  • profiles/
    • <name>.json
  • .dotsyrc ( This will hold global options such as the package manager install and uninstall command etc...)

test-config.json

Everything will be optional

{
  "description": "Test config",
  "links": [{ "from": "./test", "to": "~/test" }],
  "directories": ["~/Test-Dir"],
  "packages": ["npm"],
  "shell": ["npm i test"],
  "revert-shell": ["npm uninstall test"]
}

profile.json example

Everything but configs will be optional

{
  "description": "Test profile",
  "configs": ["test-config"],
  "directories": ["~/Documents"],
  "packages": ["nvim"],
  "shell": ["npm i test"],
  "revert-shell": ["npm uninstall test"]
}