{"id":25265794,"url":"https://github.com/mong8se/link_o_matic","last_synced_at":"2026-05-03T17:34:23.728Z","repository":{"id":143036588,"uuid":"494627892","full_name":"mong8se/link_o_matic","owner":"mong8se","description":"A configuration-free dotfiles via symlinks manager","archived":false,"fork":false,"pushed_at":"2024-07-02T22:13:59.000Z","size":75,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-27T14:14:20.683Z","etag":null,"topics":["dotfiles","symlink","symlinks-manager"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mong8se.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-20T23:02:52.000Z","updated_at":"2025-01-16T21:29:59.000Z","dependencies_parsed_at":"2023-03-27T17:58:06.610Z","dependency_job_id":null,"html_url":"https://github.com/mong8se/link_o_matic","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mong8se/link_o_matic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mong8se%2Flink_o_matic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mong8se%2Flink_o_matic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mong8se%2Flink_o_matic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mong8se%2Flink_o_matic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mong8se","download_url":"https://codeload.github.com/mong8se/link_o_matic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mong8se%2Flink_o_matic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32578787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["dotfiles","symlink","symlinks-manager"],"created_at":"2025-02-12T08:22:09.219Z","updated_at":"2026-05-03T17:34:23.709Z","avatar_url":"https://github.com/mong8se.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# link_o_matic\n\n## Learning Rust on my own\n\n### just one more dot file symlinker_o_matic\n\nNOTE THIS IS BETA AND ONLY USED BY ME SO MAYBE DON'T USE THE DELETE\nFUNCTIONS UNTIL YOU ARE SURE I KNOW WHAT I AM DOING -- But I've been\nusing it without accidentally deleting files so far.\n\n#### uses convention over configuration principle:\n\nExpects an environment variable LINKOMATIC_ROOT which points to where\ndotfiles are checked out. Doesn't have to be exported, just need to\nset it when you run link_o_matic\n\nInside your LINKOMATIC_ROOT you'll make a directory called `home`\nwhich will be the files/dirs you'll want linked without the\nleading `.` in the names\nExamples:\n  * `home/thing` will get linked to `~/.thing`\n  * `home/config/other_thing` will get linked to `~/.config/other_thing`\n\nExpects an environment variable LINKOMATIC_HOSTNAME which is whatever\nstring you want to represent the host you are on. Can be the same as\nHOSTNAME or different if you want to obfuscate your host names in your\ngit repo.\n\nAny files that begin with an underscore will only be symlinked IF:\n  * They start with `_${LINKOMATIC_HOSTNAME}`\n    * Will be symlinked as `_machine` and the rest\n      * For example `_bob.nvim.lua` will get linked as `_machine.nvim.lua` only on host bob\n    * Other machines should get their own dang LINKOMATIC_HOSTNAME\n  * They start with one of `_mac` `_linux` and your OS is mac or linux\n    * Will be symlinked as `_platform`\n      * For example `_mac.fish` will get linked as `_platform.fish` only on a mac\n\nThis way your config files can reference your `_machine` and `_platform`\nfiles and not have to know the actual names.\n\n## Commands\n\n`install cleanup sync autocleanup implode`\n\n### install\n\nStarts in `LINKOMATIC_ROOT/home`\n\nIf it is a dir, it is recursed.\nIf it is a file, a symlink is made to it.\nIf it is a symlink, a symlink is made to its target.\nIts name will have a `.` prepended\n\n### cleanup\n\nLooks for links in ~ that link to something in `LINKOMATIC_ROOT/home`\nLook in the root of ~, or recursively through any ~/dir that has a\nmatching LINKOMATIC_ROOT/home/dir to avoid scanning through the entire\nhome directory. So if you remove a top level directory you'll leave\norphaned links at this point, unless you remove them from the repo first\nand cleanup before removing the top level directory.\nTODO: is there a better way?\n\nIf it's a broken or invalid link, prompts to delete.\n\n### sync\n\nFirst `install` then `cleanup`.\n\n### autocleanup\n\nSame as `cleanup` but doesn't prompt.\n\n### implode\n\nLooks for links in ~ that link to something in `LINKOMATIC_ROOT/home`\nPrompts to delete.\n\n## Aliases (symlinks to spawn symlinks)\n\nIf you create a symlink inside `LINKOMATIC_ROOT/home` that is a valid _relative_ path\nto a file inside `LINKOMATIC_ROOT`, when the link is created it will point\ndirectly to the target of the symlink, not the intermediary symlink.\n\nFor example start in your dot files:\n\n    cd ~/$LINKOMATIC_ROOT\n\nThis step isn't strictly necessary but will allow tab completion of your\ntarget\n\n    cd home\n\nNow make a relative link to your target file (you'd link to `home/vimrc` if\nyou skipped above step)\n\n    ln -s ../config/nvim/init.vim vimrc\n\nNow you will have a symlink in `LINKOMATIC_ROOT/home/vimrc` that points to\n`LINKOMATIC_ROOT/config/nvim/init.vim` but relatively.\n\nWhen you run install your `~/.vimrc` will point to your\n`LINKOMATIC_ROOT/config/nvim/init.vim` ... not to the symlink `LINKOMATIC_ROOT/home/vimrc`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmong8se%2Flink_o_matic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmong8se%2Flink_o_matic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmong8se%2Flink_o_matic/lists"}