{"id":23579584,"url":"https://github.com/swaykh/linksym","last_synced_at":"2025-05-06T18:15:06.681Z","repository":{"id":257812053,"uuid":"853361202","full_name":"SwayKh/linksym","owner":"SwayKh","description":"Linksym is a dotfiles manager. Making it easier to create and manager symlink while creating automatic records.","archived":false,"fork":false,"pushed_at":"2025-04-26T16:06:20.000Z","size":127,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-06T18:14:59.298Z","etag":null,"topics":["cli","dotfiles","dotfiles-manager","go","golang"],"latest_commit_sha":null,"homepage":"","language":"Go","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/SwayKh.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,"zenodo":null}},"created_at":"2024-09-06T13:59:12.000Z","updated_at":"2025-04-26T16:06:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"0ed2512d-638c-4048-8a2e-f33211748743","html_url":"https://github.com/SwayKh/linksym","commit_stats":null,"previous_names":["swaykh/linksym"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwayKh%2Flinksym","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwayKh%2Flinksym/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwayKh%2Flinksym/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwayKh%2Flinksym/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SwayKh","download_url":"https://codeload.github.com/SwayKh/linksym/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252741474,"owners_count":21797027,"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":["cli","dotfiles","dotfiles-manager","go","golang"],"created_at":"2024-12-26T23:11:12.746Z","updated_at":"2025-05-06T18:15:06.664Z","avatar_url":"https://github.com/SwayKh.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Linksym - A Symlink-ing tool\n\n`linksym` is a dotfiles management tool which acts as a wrapper around `ln` for\ncreating symbolic links (symlinks) and creating a record of those symlinks in a\nconfiguration file, allowing to easily recreate those symlinks later from a\nsingle file using a simple command.\n\n## Features\n\n- Allows easy creation of symlinks.\n- Automatically records symlinks in `.linksym.yaml` file\n- Allow you to recreate or restore symlinks from the configuration file\n- Follows the NO_COLOR protocol, export NO_COLOR=1(any value) to disable colored\n  output in logs\n\n### Workflow\n\n\u003e - Make a dotfiles directory.\n\u003e - Initialize linksym with `linksym init`.\n\u003e - Add dotfiles to dotfiles directory with `linksym add`.\n\u003e - Remove any unneeded dotfiles with `linksym remove`.\n\u003e - Track changes with git.\n\u003e - On another system or machine, Clone your dotfiles repo.\n\u003e - Run `linksym update` to update the `.linksym.yaml` file.\n\u003e - Run `linksym restore \u003cdir/path\u003e` to create it's symlink\n\u003e - Run `linksym source` to create all symlinks from the `.linksym.yaml` file.\n\u003e - Profit.\n\n## Installation\n\nMake sure you have `go` installed on your system. Install it directly using `go`\n\n```bash\ngo install github.com/SwayKh/linksym@latest\n```\n\nOr if you're on Arch Linux, there is an AUR package available for `linksym`\n```bash\n$ yay -S linksym\nor\n$ paru -S linksym\n```\n\nOr get the binary from the releases page. And put directly in your path\n\nUninstall `linksym` by running:\n\n```bash\n$ rm -f $(which linksym)\n```\n\n## Usage\n\n```\nlinksym init\n```\n\nCreates a `.linksym.yaml` file in the current directory This file acts as a\ndatabase for storing record of symlinks. All other commands require for the\n`.linksym.yaml` file to be present and hence this command is required to be\nrun before any other command.\n\n---\n\n```\nlinksym add [target] [destination (optional)]\n```\n\nMoves the file from `target-path` to `destination-path` (Or the current\ndirectory if no destination path is provided) and creates a symlinks at source\npointing to destination. And records it in `.linksym.yaml`.\n\n\u003e [!NOTE]\n\u003e the `linksym add` command can also be used in a way similar to `ln` where if\n\u003e the target directory or file is already moved to the destination, running\n\u003e `linksym add [symlink location] [target path]` will create a symlink there\n\u003e anyway.\n\n---\n\n```\nlinksym record [target] [destination (optional)]\n```\n\nSeparate command to add a symlink record to `.linksym.yaml` file. Skips the\nMoving and symlinking step of the `add` subcommand. Useful for creating a record\nof symlink paths that are already present on the system.\n\n---\n\n```\nlinksym remove [target(s)...]\n```\n\nRemoves the symlink and restores the target file or directory to its original\npath and remove the record from `.linksym.yaml`.\n\n---\n\n```\nlinksym restore [target(s)...]\n```\n\nCreate a symlink for the specified target(s) at their source location based on\nthe record in `.linksym.yaml`.\n\n---\n\n```\nlinksym update\n```\n\nUpdates the `.linksym.yaml` file in the current directory. This updates the Init\ndirectory field in `.linksym.yaml` file with the current directory. and updates the\n`record name` fields appropriately.\n\n---\n\n```\nlinksym source\n```\n\nReads the `.linksym.yaml` file in the current directory and creates symlinks for\neach record. Useful for replicating recorded symlinks on a different\nsystem or machine.\n\n\u003e [!WARNING]\n\u003e Using the source command to create symlinks will overwrite any existing\n\u003e Directory or File at the Source path where the symlink will be made\n\n---\n\n#### Help\n\n```\n$ linksym -h/ --help\n\nUSAGE:\n  linksym [flags] [subcommand]\n\nFLAGS:\n  -h, --help\n    Display this help message.\n  -v\n    Show verbose output.\n\nAVAILABLE COMMANDS:\n  init\n    Initialize the linksym configuration file (.linksym.yaml) to hold records of symlinks.\n\n  add [target] [destination (Optional)]\n    Create a symlink for the specified path. Optionally takes a destination path for the symlink.\n\n  record [target] [destination (Optional)]\n    Creates a record of symlink in .linksym.yaml, which actually creating symlink.\n\n  remove [target(s)...]\n    Remove the symlink and restore the original file to its original path.\n\n  restore [target(s)...]\n    Create symlink for specified target(s) that has a record in .linksym.yaml configuration file.\n\n  source\n    Create all symlinks described in the .linksym.yaml configuration file.\n\n  update\n    Update the .linksym.yaml configuration file in the current directory.\n```\n\n## Motivation\n\nI know that there are quite a few tools out there for managing dotfiles. Like\nall these utilities on [http://dotfiles.github.io/utilities/]. Stow and\nChezmoi are famous choices for dotfiles management. But they have completely\ndifferent workflows and I never got used to stow with the packages of dotfiles.\n\nThere's also `mackup` which backups _ALL_ your dotfiles automatically to any\nfile sharing/storing providers like dropbox or google-cloud. A bit overkill for\nmy use case but be sure to have a look.\n\nI manage my dotfiles with a simple bash script which just has `ln` command to\nlink each of my [dotfiles](https://github.com/swaykh/dotfiles). This project was\nmade to ease that process and make it easier to manage symlinks.\n\n## License\n\n[The MIT License ](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswaykh%2Flinksym","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswaykh%2Flinksym","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswaykh%2Flinksym/lists"}