{"id":15712302,"url":"https://github.com/rycieos/profile-manager","last_synced_at":"2026-02-01T00:01:44.003Z","repository":{"id":99673160,"uuid":"78868290","full_name":"Rycieos/profile-manager","owner":"Rycieos","description":"Utility to sync projects across machines automatically with simple configuration","archived":false,"fork":false,"pushed_at":"2022-04-04T16:13:16.000Z","size":14,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-07T06:49:50.967Z","etag":null,"topics":["bashrc","bootstrap","dot-files","profile-manager","sync"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rycieos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-13T17:02:36.000Z","updated_at":"2022-04-04T16:13:20.000Z","dependencies_parsed_at":"2023-05-04T05:17:24.982Z","dependency_job_id":null,"html_url":"https://github.com/Rycieos/profile-manager","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/Rycieos%2Fprofile-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rycieos%2Fprofile-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rycieos%2Fprofile-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rycieos%2Fprofile-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rycieos","download_url":"https://codeload.github.com/Rycieos/profile-manager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247608156,"owners_count":20965950,"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":["bashrc","bootstrap","dot-files","profile-manager","sync"],"created_at":"2024-10-03T21:15:27.797Z","updated_at":"2026-02-01T00:01:43.889Z","avatar_url":"https://github.com/Rycieos.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# profile-manager\n\nprofile-manager syncs git projects to hosts, keeping all profiles\nup-to-date. It is designed with bootstrapping and auto-running in mind.\n\nWhile profile-manager has many features, it was designed to not \"do everything\nfor you\". Bootstrapping, auto-running, and plugins are all up to the user. This\nis because, while searching for the perfect dot-file manager, I found many that\ndid what I wanted, but fell short because they forced a certain usage or file\nsetup that didn't work for me. This project aims to solve those problems.\n\n## Options\n -c|--config [config-file]  \n    Load the config file specified instead of the default,\n    ~/.config/profile-manager/config  \n -q|--quiet  \n    Don't print messages as plugins are installed and updated.  \n -f|--force  \n    Force re-linking files even if the plugin wasn't updated.  \n\n## Bootstrapping\n\nBootstrapping allows for one command setups of new machines. A bootstrap would\ninstall all wanted plugins and setup the auto-running to keep everything\nup-to-date.\n\nAs mentioned above, profile-manager doesn't come with any built-in boostrapping\npower, just the ability to be bootstrapped easily.\n\nMost likely, you would have all of your dot-files and other projects on a git\nhosting service like GitHub. This makes bootstrapping very easy, as you can\ndownload the files from those services.\n\nSince profile-manager is idempotent, all you need to do is run it with your\nconfig file. A simple bootstrapping example is this:\n```\nbash \u003c(curl -s https://raw.githubusercontent.com/Rycieos/profile-manager/master/profile-manager) -c \u003c(curl -s https://raw.githubusercontent.com/Rycieos/dot-files/master/profile-manager/config)\n```\nThis loads the program from the web, loading the config file into it. You can\nreplace my config with yours.\n\nAn even simpler version is to put the above line into a file, as seen in the\nbootstrap.sh file in this repo, and put that file somewhere with a short url.\nI have done this with my bootstrap script, which means I can just run:\n```\nbash \u003c(curl https://www.rycieos.com/pu)\n```\nto install on a machine. This line I can memorize, allowing me to have my\nconfigs up and running less than a minute after first touching the keyboard.\n\n## Auto-updating\n\nThere are two ways I will mention to auto-run this, but the options are\nendless.\n\n### bashrc\nThis is the way I do it. This means every login will start an update.\nAdd a few lines like this to your bashrc:\n```\nif [[ -x ~/bin/profile-manager ]]; then\n  profile-manager -q \u0026\nfi\n```\nThis runs it quiet, so it doesn't bug whatever you are trying to do, and in a\nsub-shell, so it doesn't slow your login down.\n\n### cron\nYou can add a line to cron to run it every so often. Adding the --quiet flag\nwill make cron only mail you if anything goes wrong. A line like this:\n```\n0 * * * * /home/user/bin/profile-manager --quiet\n```\nshould do the trick; set the timing how you like.\n\n## Config\n\nThe config is where you specify what plugins, or repos, to install and how to\ndo it. Here is a full-featured example:\n```\nvoom() {\n  repo_url=\"https://github.com/Rycieos/voom.git\"\n  files=(\n    [\"voom\"]=\"~/bin/voom\"\n  )\n  depends=(\n    \"vim\"\n  )\n  voom_post_install() {\n    voom\n  }\n  voom_post_update() {\n    voom update\n  }\n}\n```\n\nEvery repo must be its own function.\n\nEvery repo must have `repo_url` set. This is the address used for the initial\nclone. Don't use the ssh protocol unless you will be setting up your ssh keys\non every machine before running your bootstrap.\n\nTo be useful, every repo must have lines in the `files` array. The first part\nof the line is the filename of the file you want to have linked, relative to\nthe repo root. The second part is the location that you want it to be linked\nto. For example, the \"voom\" file above is a script in the repo root. I want to\nbe able to run it when I want, so I link it to \"~/bin/voom\". The link will\nforce replace files, so make sure you don't have any naming conflicts.\n\nOptionally, the `depends` array can be set. Each value in the array is a\ncommand that is searched for. If any are not found on the machine, the repo\nwill not be installed.\n\nThere are post install and update hooks, that will run after their respective\nactions. The must be prefixed with the name of the plugin, like in the example\nabove.\n\nSee [my config](https://github.com/Rycieos/dot-files/blob/master/profile-manager/config) for more examples.\n\nTo be most useful, you will want to add profile-manager itself to the config,\nalong with your config for profile manager. For example:\n```\nprofile-manager() {\n  repo_url=\"https://github.com/Rycieos/profile-manager.git\"\n  files=(\n    [\"profile-manager\"]=\"~/bin/profile-manager\"\n  )\n}\n\ndot-files() {\n  repo_url=\"https://github.com/Rycieos/dot-files.git\"\n  files=(\n    [\"profile-manager/config\"]=\"~/.config/profile-manager/config\"\n  )\n}\n```\n\n## vim\n\nprofile-manager could be used to sync vim plugins. For each plugin, add a line\nlike such:\n```\n[\".\"]=\"~/.vim/bundle/[plugin-name]\"\n```\nIn this way, it works similarly to [voom](https://github.com/airblade/voom).\n\nIf you run profile-manager automatically, then it would update the plugins\nautomatically as well.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frycieos%2Fprofile-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frycieos%2Fprofile-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frycieos%2Fprofile-manager/lists"}