{"id":18712149,"url":"https://github.com/greglook/toolkit","last_synced_at":"2025-08-08T08:33:20.470Z","repository":{"id":12523258,"uuid":"15193111","full_name":"greglook/toolkit","owner":"greglook","description":"Simple ruby tool to manage common user configuration and scripts.","archived":false,"fork":false,"pushed_at":"2017-11-29T17:55:58.000Z","size":26,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-30T20:33:45.683Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/greglook.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-12-14T21:24:15.000Z","updated_at":"2017-02-04T00:57:25.000Z","dependencies_parsed_at":"2022-09-23T07:51:38.588Z","dependency_job_id":null,"html_url":"https://github.com/greglook/toolkit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greglook%2Ftoolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greglook%2Ftoolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greglook%2Ftoolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greglook%2Ftoolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greglook","download_url":"https://codeload.github.com/greglook/toolkit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251777785,"owners_count":21642224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T12:40:52.229Z","updated_at":"2025-04-30T20:34:00.504Z","avatar_url":"https://github.com/greglook.png","language":"Ruby","funding_links":[],"categories":["Ruby"],"sub_categories":[],"readme":"Toolkit\n=======\n\nThis is a tool which provides a shared location for environment configuration\n(colloquially, 'dotfiles'), utility scripts, and any other kinds of files which\nyou want to keep in sync across multiple user accounts on different machines.\nThis enables new user accounts to be set up quickly with a common set of such\nfiles.\n\nYou can think of this as a very lightweight package manager for your home\ndirectory.\n\nPackages\n--------\nFiles are separated into _packages_ specific to certain programs or\nenvironments, which lets you tailor the installation to the local requirements.\nPackages may be _selected_ for installation; some are selected by default,\nothers based on environment detection, and you can of course manually set any\npackage's selection state.\n\nPackage installation creates symlinks from the user's `$HOME` directory to the\nfiles in the toolkit package. Thus, edits to the normal file paths are also\nedits to the git repository, which can then be committed and shared with the\ntoolkits on other hosts.\n\nPackage Sets\n------------\nPackages are further separated into _package sets_. This is primarily to allow\nfor the package files to be maintained separately from the toolkit code itself.\nThis way you can also install packages from multiple sources, and keep sensitive\npackages in non-public repositories.\n\nA package set consists of a directory of packages with a _manifest file_. This\nis written in a simple Ruby DSL to define the available packages. Below are\nsome examples which show the package options:\n\n```ruby\n# A simple package with no options.\npackage 'foo'\n\n# Packages installed by default, when the shell is 'zsh', when the command\n# 'tmux' is installed, when the and when ~/.rbenv exists, respectively.\npackage 'tools', :default =\u003e true\npackage 'zsh',   :when =\u003e shell?('zsh')\npackage 'tmux',  :when =\u003e installed?('tmux')\npackage 'rbenv', :when =\u003e file?(ENV['HOME'], '.rbenv')\n\n# Package names with an '@' are special-cased:\npackage 'foo@'        # Automatically enabled for users named 'foo'.\npackage '@bar'        # Enabled on host 'bar', 'bar.tld', etc.\npackage 'foo@bar.tld' # Enabled for user 'foo' on host 'bar.tld' only.\n\n# Packages may prefix all files with periods or provide an explicit list of\n# entries to convert into hidden files.\npackage 'vim', :dotfiles =\u003e true, :when =\u003e installed?('vim')\npackage 'solarized', :dotfiles =\u003e ['vim', 'zsh']\n\n# This will install into a subpath of the mount point.\npackage 'synergy', :into =\u003e 'util/synergy'\n```\n\nThe package definitions should be placed in `manifest.rb` in the package set\ndirectory. For more examples, take a look at [my\npackages](https://github.com/greglook/toolkit-packages).\n\nUsage\n-----\nTo set up a toolkit for a new user account, first clone the toolkit repository\ninto a local folder:\n\n```bash\n$ mkdir ~/util \u0026\u0026 cd ~/util\n$ git clone https://github.com/greglook/toolkit.git\n$ cd toolkit\n```\n\nNext clone your desired package sets into the `packages` directory:\n\n```bash\n$ git clone https://github.com/$USER/toolkit-packages.git packages/$USER\n$ git clone git@git.myserver.com:myprivate-packages.git packages/private\n```\n\nOnce you've got some packages, run the toolkit script to display which packages\nare currently active, select any additional packages you'd like, and install the\npackage symlinks:\n\n```bash\n$ ./toolkit show\n$ ./toolkit enable foo/tools bar/zsh\n$ ./toolkit build\n```\n\nThis will also generate a configuration file at `~/.config/toolkit` with the\ninstalled packages and link information.\n\nUpdates\n-------\nIn order to update an installed toolkit, simply pull updates and re-build:\n\n```bash\n$ cd ~/util/toolkit/packages/foo\n$ git pull\n$ cd ../..\n$ ./toolkit build\n```\n\nLicense\n-------\nThis is free and unencumbered software released into the public domain.\nSee the UNLICENSE file for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreglook%2Ftoolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreglook%2Ftoolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreglook%2Ftoolkit/lists"}