Copy-paste across machines using GitLab Snippets as a storage backend.
This is a simple CLI tool inspired by the usability of pbcopy and pbpaste or xclip
but designed to work across machines.
If you have Go installed go get github.com/bradwood/glsnip.
Alternatively, you can download a binary from the Releases page
You can configure glsnip via a configuration file or via environment
variables. Environment variables will always override configuration file
settings.
Create a YAML-formatted config file (default location $HOME/.glsnip). You must
include at least a single server profile YAML block called default, like this:
---
default:
gitlab_url: https://url.of.gitlab.server/
token: USERTOKEN
clipboard_name: glsnip
...Multiple additional server profile blocks can be added using any block name, like this:
...
work:
gitlab_url: https://url.of.work.server/
token: USERTOKENWORK
clipboard_name: glsnip
project_id: 12345678
...If you set the project_id in a server profile, a project-based Gitlab Snippet API will be used.
You may also specify an alternative location for the configuration file with the
--config flag.
Instead of using a configuration file, you may set environment variables by
prefixing the key in a configuration file block with GLSNIP_ and then converting
all alphabetic characters to UPPERCASE. Note that environment variables will
override any configuration specified in the configuration file, regardless of
the profile specified. You may specify a server profile by setting
GLSNIP_PROFILE.
You can set environment variables as follows:
export GLSNIP_GITLAB_URL=https://gitlab.com
export GLSNIP_TOKEN=xxxxIt goes without saying, be careful what you chose to copy, especially to public
services like gitlab.com. Reasonable security can be achieved by using TLS
(https) when defining your gitlab_url and relying on glsnip defaulting to
GitLab's private visibility level which will create a snippet that only you
can see.
You may override the visibility setting by passing the --visibility flag when
copying but this must be explicitly passed on every invocation. GitLab defines
the public and internal visibility levels, both of which will work with
glsnip, but note this
issue if you are wanting
to use the internal option on public gitlab.com
To specify a non-default server profile use the --profile flag.
Copying examples:
glsnip copy <some_file.txt
glsnip copy --profile work <some_file.txt # copy to Snippet at on "work" GitLab server
ls | glsnip copy
ls | GLSNIP_GITLAB_URL=https://blah.com GLSNIP_TOKEN=xxx glsnip copyPasting examples:
glsnip paste # paste to STDOUT
glsnip paste > myfile.txt
glsnip paste --profile public > myfile.txt # paste from public GitLab server
glsnip paste | lessContributions are welcome, please feel free to raise a PR or issue.
