Skip to main content

Package manager for your dotfiles

Project description

Dotpkg

PyPI Check

A package manager for your dotfiles.

Why Dotpkg?

  • Lightweight: Pure Python 3.10 with no dependencies
  • JSON-configurable: Easy to write, includes a schema for code completion
  • Cross-platform: Runs on Linux, macOS and Windows
  • Flexible: Configurable target locations, ignore lists, rename rules and more

Usage

First make sure to have Python 3.10+ installed. To create a dotfile package, set up a folder with the following layout (the top-level folder is assumed to be some folder, e.g. a Git repo, where you store all of your dotfiles):

dotfiles
└─my-package
  ├─dotpkg.json
  ├─.some-dotfile-one
  ├─.some-dotfile-two
    ...

A minimal dotpkg.json is structured as follows:

{
  "name": "my-package",
  "description": "Description of my package"
}

Navigating into dotfiles and running dotpkg install my-package will then symlink .some-dotfile-one and .some-dotfile-two into your home directory.

Note that when running on Windows, unprivileged users might not be able to create symlinks, a feature that dotpkg relies on. Enabling Developer Mode in your Windows Settings (from an administrator account) will permit this. Also, you may need to substitute python3 [path/to/dotpkg] for dotpkg since Windows does not support Unix-style shebangs.

Optionally, you can specify keys such as requiresOnPath too, which will only install the package if a given binary is found on your PATH (useful if your config targets some application). Additionally, targetDir configures the search path to symlink the files into some other directory than your home (dotpkg will use the first directory that exists, this is useful to cross-platform packages).

For example, a package that manages configurations for Visual Studio Code could look like this:

{
  "name": "vscode",
  "description": "Visual Studio Code settings and keybindings",
  "requiresOnPath": ["code"],
  "targetDir": [
    "${home}/.config/Code",
    "${home}/Library/Application Support/Code",
    "${home}/AppData/Roaming/Code"
  ]
}

A full JSON schema for the dotpkg.json manifests can be found here.

Note that you can add the schema to your VSCode settings to get autocompletion in dotpkg.json files by specifying json.schemas:

{
  "json.schemas": [
    {
      "fileMatch": ["dotpkg.json"],
      "url": "https://raw.githubusercontent.com/fwcd/dotpkg/main/dotpkg.schema.json"
    }
  ]
}

Alternatively, you can specify the schema individually in each dotpkg.json:

{
  "$schema": "https://raw.githubusercontent.com/fwcd/dotpkg/main/dotpkg.schema.json"
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dotpkg-0.2.1.tar.gz (18.1 kB view details)

Uploaded Source

File details

Details for the file dotpkg-0.2.1.tar.gz.

File metadata

  • Download URL: dotpkg-0.2.1.tar.gz
  • Upload date:
  • Size: 18.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for dotpkg-0.2.1.tar.gz
Algorithm Hash digest
SHA256 6f0cdcc41cda03857a44b768cd32ebdb21764ebe787e12c30573d98a8a9cf446
MD5 3f2a7f8d3b2978f1a799db336be9a5ca
BLAKE2b-256 60eb62232d2f585448c2338b77e5eef15d501fb2892e9f88ed668e1e38ba043f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page