1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# Lite XL Plugin Manager
A standalone binary that provides an easy way of installing, and uninstalling
plugins from lite-xl, as well as different version fo lite-xl.
Can be used by a package manager plugin that works from inside the editor
and calls this binary.
Releases forthcoming, should be available on Windows, Mac, Linux and FreeBSD.
Also contains a plugin_manager.lua plugin to integrate the binary with lite in
the form of an easy-to-use GUI.
By default in releases, `lpm` will automatically consume the specification
in the `latest` branch of this repository.
Conforms to [SCPS3](https://github.com/adamharrison/straightforward-c-project-standard#SCPS3).
## Specification
For details about the `manifest.json` files that `lpm` consumes,
[see here](SPEC.md).
## Quickstart
If you have a C compiler, and `git`, and want to compile from scratch,
you can do:
```
git clone git@github.com:adamharrison/lite-xl-plugin-manager.git \
--shallow-submodules --recurse-submodules && cd lite-xl-plugin-manager &&\
./build.sh && ./lpm
````
If you want to build it quickly, and have the right modules installed, you can
do:
```
./build.sh -lgit2 -lzip -llua -lm -lmbedtls -lmbedx509 -lmbedcrypto -lz
```
OR
```
gcc src/lpm.c lib/microtar/src/microtar.c -Ilib/microtar/src -lz -lgit2 \
-lzip -llua -lm -lmbedtls -lmbedx509 -lmbedcrypto -o lpm
```
CI is enabled on this repository, so you can grab Windows and Linux builds from the
`continuous` [release page](https://github.com/adamharrison/lite-xl-plugin-manager/releases/tag/continuous).
You can get a feel for how to use `lpm` by typing `./lpm --help`.
## Supporting Libraries
As seen in the `lib` folder, the following external libraries are used to
build `lpm`:
* `lua` (core program written in)
* `mbedtls` (https/SSL support)
* `libgit2` (accessing git repositories directly)
* `libz` (supporting library for everything)
* `libzip` (for unpacking .zip files)
* `libmicrotar` (for unpacking .tar.gz files)
## Use in CI
To make pre-fab lite builds, you can easily use `lpm` in CI. If you had a linux build container, you could do something like:
```sh
curl https://github.com/adamharrison/lite-xl-plugin-manager/releases/download/v0.1/lpm.x86_64-linux > lpm
export LITE_USERDIR=lite-xl/data && export LPM_CACHE=/tmp/cache
./lpm add https://github.com/adamharrison/lite-xl-plugin-manager && ./lpm install plugin_manager lsp
```
## Usage
```sh
lpm install aligncarets
lpm uninstall aligncarets
```
```sh
lpm --help
```
## Building & Running
### Linux & MacOS & Windows MSYS
```
./build.sh clean && ./build.sh && ./lpm
```
### Linux -> Windows
```
./build.sh clean && CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-gcc-ar WINDRES=x86_64-w64-mingw32-windres
CMAKE_DEFAULT_FLAGS="-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER\ -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=NEVER -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_INCLUDE_PATH=/usr/share/mingw-w64/include"\
GIT2_CONFIGURE="-DDLLTOOL=x86_64-w64-mingw32-dlltool" ./build.sh -DLPM_STATIC -DLPM_VERSION='"'$VERSION-x86_64-windows-`git rev-parse --short HEAD`'"'
```
## Tests
To run the test suite, simply use lua to run `lua t/run.lua`. use `FAST=1 t/run.lua` to avoid the costs of tearing down and building up suites each time.
## Bugs
If you find a bug, please create an issue with the following information:
* Your operating system.
* The commit or version of LPM you're using.
* The exact steps to reproduce in LPM invocations, if possible from a fresh LPM install (targeting an empty folder with `--userdir`).
| Plugin | Description |
| :----------------------------------------------- | :------------------------------------------------- |
| [`json`](plugins/json.lua?raw=1) | JSON support plugin, provides encoding/decoding. |
| [`plugin_manager`](plugins/plugin_manager?raw=1) | A GUI interface to the Adam's lite plugin manager. |
|