Skip to main content

doti

Easily manage all your dotfiles across your devices.

Motivation

I wanted a simple way to manage all my dotfiles while having each application isolated, so I can easily share them across different devices.

Popular options:

  • stow - great simple tool but a hassle to manage multiple separate dotfiles
  • chezmoi - powerful tool but I didn't want the complexity that came with it

I created doti to extend the functionality, simplicity, and portability of stow with a config file to manage dotfiles of multiple programs on different systems.

Features

Features:

  • Isolate all configs of an application into its own directory.
  • Use same directory structure as can be seen from the home (~) or root (/) directories within the application's own directory.
  • Symlink configs so we can edit directly from the dotfiles directory instead of trying to hunt the config files down.
  • Both home and root configs supported.
  • Hostname-specific, system-specific, and general configs
  • Supports Linux, Termux, OSX, OpenBSD, FreeBSD, and Cygwin.
  • Non-root installation using pip.

Non-features:

  • No template files. I want the configs to be portable and not rely on doti or any specific dotfile manager.

Installation

Requirements: stow

# Cross-Platform (pip)
pip install doti

# or

# Arch Linux (AUR)
yay -S doti

Setup

Within the dotfiles directory, create a separate sub-directory for each program. Within each sub-directory organize that programs config files as they appear from the home or root directory.

Example dotfiles directory structure:
.
├── doti
│   └── .config
│       └── doti
│           └── doti.cfg
├── dircolors
│   └── .config
│       └── dircolors
│           └── .dir_colors
├── env_root
│   └── etc
│       └── environment
├── git
│   └── .config
│       └── git
│           └── config
├── gtk
│   └── .config
│       ├── gtk-2.0
│       │   └── gtkrc
│       └── gtk-3.0
│           ├── gtk.css
│           └── settings.ini
├── termux
│   └── .termux
│       ├── colors.properties
│       └── termux.properties
├── tty
│   └── etc
│       ├── issue
│       └── profile
└── zsh
    ├── .config
    │   └── zsh
    │       ├── .zprofile
    │       └── .zshrc
    └── .zshenv

Configuration

Check the sample doti.cfg file for details.

Usage

Run doti without arguments to use all the settings from the config file.

doti -h
usage: doti [-h] [-r] [-R] [-c FILE] [-d DIR] [-v] [-q] [-n] [-V]
            {add,remove} ...

Symlink dotfiles into their respective directories using `stow`.

positional arguments:
  {add,remove}

options:
  -h, --help            show this help message and exit
  -r, --root-enable     enable root section in config
  -R, --root-only       only use root section in config
  -c FILE, --config FILE
                        path to config file (doti.cfg)
  -d DIR, --dotfiles DIR
                        path to dotfiles directory
  -v, --verbose         show verbose output
  -q, --quiet           supress output
  -n, --no, --simulate  simulate run, no filesystem modification
  -V, --version         show version number
doti add -h
usage: doti add [-h] [-r] NAME [NAME ...]

positional arguments:
  NAME        symlink dir[s]'s files to the home directory

options:
  -h, --help  show this help message and exit
  -r, --root  use root dir instead of home
doti remove -h
usage: doti remove [-h] [-r] NAME [NAME ...]

positional arguments:
  NAME        remove dir[s]'s symlinks from the home directory

options:
  -h, --help  show this help message and exit
  -r, --root  use root dir instead of home

Metadata

Release files for doti 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for doti 0.4.0
File Size Uploaded
doti-0.4.0.tar.gz 21.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for doti 0.4.0
File Interpreter ABI Platform
doti-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 43.9 kB

Release files / doti-0.4.0.tar.gz

Download URL doti-0.4.0.tar.gz
Size 21.6 kB
Tags Source
SHA-256 checksum
How to use checksums
09df457e5e9477627862db895c54061086fe3b9b1d5ec47dcc5cb47ae647c4c4
BLAKE2b-256 checksum
How to use checksums
8205904503de994e7b683d6093378cce2df01746ef87ae317bbd1c61376ae558
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Release files / doti-0.4.0-py3-none-any.whl

Download URL doti-0.4.0-py3-none-any.whl
Size 22.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0c054cb9d1552747390b85d20f4db0c54ec79a5d0f79b05ef407c02fc5ac64f4
BLAKE2b-256 checksum
How to use checksums
062dae9845af6132e7a39d606298ec2f3d4926fa2c38c64ca3965071618cebd2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page