{"id":18073385,"url":"https://github.com/blakewilliams/remote-development-manager","last_synced_at":"2025-04-12T05:15:01.264Z","repository":{"id":38086532,"uuid":"451235563","full_name":"BlakeWilliams/remote-development-manager","owner":"BlakeWilliams","description":"tooling that makes development easier in remote environments like ssh and codespaces","archived":false,"fork":false,"pushed_at":"2025-01-10T18:09:22.000Z","size":71,"stargazers_count":34,"open_issues_count":1,"forks_count":7,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-12T05:14:51.356Z","etag":null,"topics":["codespaces","ssh","tmux","vim"],"latest_commit_sha":null,"homepage":"","language":"Go","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/BlakeWilliams.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-01-23T21:28:56.000Z","updated_at":"2025-01-10T18:09:26.000Z","dependencies_parsed_at":"2024-06-19T01:43:14.317Z","dependency_job_id":null,"html_url":"https://github.com/BlakeWilliams/remote-development-manager","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlakeWilliams%2Fremote-development-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlakeWilliams%2Fremote-development-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlakeWilliams%2Fremote-development-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlakeWilliams%2Fremote-development-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BlakeWilliams","download_url":"https://codeload.github.com/BlakeWilliams/remote-development-manager/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248519557,"owners_count":21117761,"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":["codespaces","ssh","tmux","vim"],"created_at":"2024-10-31T10:06:42.078Z","updated_at":"2025-04-12T05:15:01.149Z","avatar_url":"https://github.com/BlakeWilliams.png","language":"Go","readme":"# Remote Development Manager\n\nAn experimental Go application that allows an SSH session to interact with the\nclipboard of the host machine and forward calls to `open`. RDM works by\nlistening on a unix socket locally that can be forwarded to an SSH session.\n\nThe server works on MacOS and Linux, but the client commands are not OS\nspecific.\n\n## Installation\n\n### Homebrew Casks:\n\n1. Tap the cask:\n   ```bash\n   brew tap BlakeWilliams/remote-development-manager https://github.com/BlakeWilliams/remote-development-manager\n   ```\n2. Install `rdm`:\n   ```bash\n   brew install --cask rdm\n   ```\n\n### Manual:\n\n[Download the latest\nrelease](https://github.com/BlakeWilliams/remote-development-manager/releases)\nfor your platform.\n\ne.g. for a Linux server you can use `wget` to download the binary then put it somewhere in your `$PATH`:\n\n```\nwget https://github.com/BlakeWilliams/remote-development-manager/releases/latest/download/rdm-linux-amd64\nmv rdm-linux-amd64 /usr/local/bin/rdm\nchmod +x /usr/local/bin/rdm\n```\n\n### Build from source:\n\n`go build main.go`.\n\n### Mac daemon installation\n\nIf you are running the server on MacOS you can set up rdm as a\n[launchd](https://www.launchd.info/) service that will automatically start on\nsystem boot:\n\n```\n$ rdm service install\nRun state:     [Running] done!\nRun `launchctl print gui/501/me.blakewilliams.rdm` for more detail.\nConfigured to start at boot. Uninstall using:\n        rdm service uninstall\n```\n\n### Linux daemon installation with systemd\n\nIf you use systemd you can easily daemonize `rdm` for your user with:\n\n```sh\nsystemctl edit --user --force --full rdm.service\n```\n\nThat will open your `$EDITOR` and you should fill the file with something like:\n\n```systemd\n[Unit]\nDescription=Remote Development Manager\n\n[Service]\nExecStart=/path/to/rdm server\nExecStop=/path/to/rdm stop\n```\n\nOnce that is done you can use `systemctl --user start rdm` or `systemctl --user stop rdm`\nwhen you want to start/stop the daemon or `systemctl --user enable rdm` so that it is\nautomatically enabled for your user when it logs in.\n\n## Usage\n\nThe following is an example of forwarding an rdm server to a remote host: `ssh\n-R 127.0.0.1:7391:$(rdm socket) user@mysite.net`. It's worth noting the port\nnumber is not currently configurable and will always attempt to connect to\n`7391`.\n\nFor Codespaces, `rdm` can be forwarded as part of the `gh cs ssh` command as\narguments to `ssh`, e.g.: `gh cs ssh -- -R 127.0.0.1:7391:$(rdm socket)`\n\nServer commands:\n\n* `rdm server` - hosts a server locally (macOS only) so that your machine can receive copy, paste, and open commands.\n* `rdm stop` - attempts to close a running server.\n* `rdm logpath` - returns the path where server logs are located. Useful for `tail $(rdm logpath)`\n* `rdm socket` - returns the path where the server socket lives. Useful for SSH commands, as seen above.\n\nClient commands:\n\n* `rdm copy` - reads stdin and forwards the input to the host machine, adding it to the clipboard. e.g. `echo \"hello world\" | rdm copy`\n* `rdm paste` - reads and prints the host machine's clipboard. `rdm paste`\n* `rdm open` - forwards the first argument to `open`. e.g. `rdm open https://github.com/blakewilliams/remote-development-manager`\n\n## Integrations\n\nHere's a few tools you can easily hook `rdm` into:\n\n### Tmux\n\nIf you're using macOS and are already delegating copy to `pbcopy` you can\neasily use `rdm` in an ssh session by creating an alias.\n\n```shell\nalias pbcopy=\"rdm copy\"\n```\n\nAlternatively, you can define the commands explicitly for `rdm`:\n\n```\nbind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel \"rdm copy\"\nbind-key -T copy-mode-vi 'y' send -X copy-pipe-and-cancel \"rdm copy\"\n```\n\n### Neovim\n\nNeovim supports custom clipboards out-of-the-box. You can use `rdm` with Neovim\nusing the following code:\n\n```viml\nlet g:clipboard = {\"name\": \"rdm\", \"copy\": {}, \"paste\": {}}\nlet g:clipboard.copy[\"+\"] = [\"rdm\", \"copy\"]\nlet g:clipboard.paste[\"+\"] = [\"rdm\", \"paste\"]\nlet g:clipboard.copy[\"*\"] = [\"rdm\", \"copy\"]\nlet g:clipboard.paste[\"*\"] = [\"rdm\", \"paste\"]\n```\n\nOr if you use lua:\n\n```lua\nvim.g.clipboard = {\n  name = \"rdm\",\n  copy = {\n    [\"+\"] = {\"rdm\", \"copy\"},\n    [\"*\"] = {\"rdm\", \"copy\"}\n  },\n  paste = {\n    [\"+\"] = {\"rdm\", \"paste\"},\n    [\"*\"] = {\"rdm\", \"paste\"}\n  },\n}\n```\n\nFor `open` support, add the following to `~/.zshenv` if you're using zsh:\n\n```shell\nalias open=\"rdm open\"\nalias xdg-open=\"rdm open\"\n```\n\n## GitHub CLI\n\nGitHub CLI allows you to configure the browser used to open URL's. We can use\nthis to set `rdm` as the browser target:\n\n```\n$ gh config set browser \"rdm open\"\n```\n\n## TO-DO\n\nSo far this is just an experiment and there's a lot to be done to get it to a\nstable point. Contributions are very welcome.\n\n* Daemonize the server process\n* Add a configuration file that allows custom commands\n* Add instructions for vim\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblakewilliams%2Fremote-development-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblakewilliams%2Fremote-development-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblakewilliams%2Fremote-development-manager/lists"}