Skip to main content

Keep track of all your dot(file)s. A dotfiles manager with tool installation.

Project description

freckle

Keep track of all your dot(file)s.

A dotfiles manager with tool installation for Linux and macOS.

Overview

Freckle automates the "bare repo" strategy for dotfiles with intelligent conflict resolution, automatic backups, and cross-platform package management.

Features

  • Interactive Setup: Run freckle init to configure your repository.
  • Bare Repo Management: Safely check out dotfiles into your home directory, backing up conflicts automatically.
  • Profile Support: Manage multiple machine configurations via git branches.
  • Secret Detection: Blocks accidental commits of private keys and tokens.
  • Restore Points: Automatic backups before destructive operations.
  • Declarative Tools: Define tools in config with automatic package manager selection (brew, apt, cargo, pip, npm) and curated script support.
  • Platform Aware: Supports Debian-based Linux (apt) and macOS (brew).
  • Scheduled Backups: Automatic daily/weekly backups via launchd or cron.
  • Health Checks: freckle doctor diagnoses common issues.

Installation

Quick Install (Recommended)

Bootstrap freckle on a fresh system with a single command:

curl -LsSf https://raw.githubusercontent.com/peterprescott/freckle/main/scripts/bootstrap.sh | bash

This installs uv and freckle automatically.

Manual Install

If you already have uv:

uv tool install freckle

Or with pip:

pip install freckle

Quick Start

# Initialize (interactive setup)
freckle init

# Check status of dotfiles
freckle sync

# Commit and push local changes
freckle backup

# Pull remote changes
freckle update

# Run health checks
freckle doctor

Commands

Core Commands

freckle init              # Interactive setup wizard
freckle sync              # Check dotfiles status, clone on first run
freckle backup            # Commit and push local changes
freckle update            # Pull and apply remote changes
freckle status            # Show detailed status of dotfiles and tools
freckle doctor            # Run health checks and diagnostics

File Management

freckle add <file>        # Track a new file in dotfiles
freckle remove <file>     # Stop tracking a file
freckle config            # Open config file in your editor

Secret detection is built-in. Adding private keys or tokens will be blocked:

$ freckle add .ssh/id_rsa
✗ Blocked: .ssh/id_rsa appears to contain a private key.
  To override: freckle add --force .ssh/id_rsa

Profile Management

Profiles let you maintain different configurations for different machines. Each profile is a git branch:

freckle profile list              # List all profiles
freckle profile switch <name>     # Switch to a profile
freckle profile create <name>     # Create a new profile
freckle profile delete <name>     # Delete a profile

Keep configuration in sync across profiles:

freckle config check              # Check config consistency
freckle config propagate          # Sync config to all branches

Tool Management

Tools are defined in your config and installed via the best available package manager:

freckle tools                     # Show tool installation status
freckle tools install <name>      # Install a specific tool

Backup & Restore

Freckle creates restore points before destructive operations:

freckle restore --list            # List available restore points
freckle restore <timestamp>       # Restore from a specific point

Git Convenience

freckle log               # Show commit history
freckle diff              # Show uncommitted changes

Scheduled Backups

freckle schedule          # Show current schedule status
freckle schedule daily    # Enable daily backups at 9am
freckle schedule weekly   # Enable weekly backups (Sundays)
freckle schedule off      # Disable scheduled backups

Shell Completion

Freckle supports tab completion for bash, zsh, and fish.

# Install completion for your current shell
freckle --install-completion

# Or show the completion script to customize installation
freckle --show-completion

After installation, restart your shell or source your shell config.

Global Options

freckle --verbose ...     # Enable debug logging
freckle sync --dry-run    # Preview what would happen
freckle backup --dry-run  # See what would be committed

Configuration

Freckle stores its configuration in ~/.freckle.yaml.

Example

dotfiles:
  repo_url: "https://github.com/{local_user}/dotfiles.git"
  branch: "main"
  dir: "~/.dotfiles"

profiles:
  default:
    tools:
      - git
      - zsh
      - tmux
      - nvim

  work:
    tools:
      - git
      - zsh
      - docker

tools:
  git:
    brew: git
    apt: git
    config_files:
      - ~/.gitconfig
  zsh:
    brew: zsh
    apt: zsh
    config_files:
      - ~/.zshrc
  nvim:
    brew: neovim
    apt: neovim
    config_files:
      - ~/.config/nvim/
  docker:
    brew: docker
    apt: docker.io

Variables

  • {local_user}: Automatically replaced with your system username.
  • Custom variables: Define your own in the vars section.
vars:
  git_host: "github.com"

dotfiles:
  repo_url: "https://{git_host}/{local_user}/dotfiles.git"

License

MIT

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

freckle-0.9.1.tar.gz (43.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

freckle-0.9.1-py3-none-any.whl (59.8 kB view details)

Uploaded Python 3

File details

Details for the file freckle-0.9.1.tar.gz.

File metadata

  • Download URL: freckle-0.9.1.tar.gz
  • Upload date:
  • Size: 43.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for freckle-0.9.1.tar.gz
Algorithm Hash digest
SHA256 975691551b8b02a6cf1ebb926156a5539d6e4cf11ad8301d52ae36402d4dc66b
MD5 e84a754222688036b6f035a58d166d25
BLAKE2b-256 1115e92288a9d338f3ef0da2fdb93525fe55600b2d82d061e6ec5f03be6c1a4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for freckle-0.9.1.tar.gz:

Publisher: publish.yml on peterprescott/freckle

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file freckle-0.9.1-py3-none-any.whl.

File metadata

  • Download URL: freckle-0.9.1-py3-none-any.whl
  • Upload date:
  • Size: 59.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for freckle-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6d1665b03ed84a811791a11a811aff54b52b28ae63c9e31acdfe76ca2d275dc2
MD5 90fae2083f4a46dd83e75732f1ec39cb
BLAKE2b-256 8f68c8a2ed313eb82efffec74428ba23494981b68893c7bbe94339dbce3a51fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for freckle-0.9.1-py3-none-any.whl:

Publisher: publish.yml on peterprescott/freckle

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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