]> git.wincent.com - wincent.git/blob - aspects/vim/index.ts
b8b4d7896d5ff8a254a940fb1dc8d5508ee2e295
[wincent.git] / aspects / vim / index.ts
1 import {
2     attributes,
3     command,
4     file,
5     resource,
6     skip,
7     task,
8     variable,
9 } from '../../src/Fig.js';
10 import stat from '../../src/fs/stat.js';
11 import path from '../../src/path.js';
12
13 task('make directories', async () => {
14     // Some overlap with "dotfiles" aspect here.
15     await file({path: '~/.backups', state: 'directory'});
16     await file({path: '~/.config', state: 'directory'});
17 });
18
19 task('link ~/.config/nvim to ~/.vim', async () => {
20     await file({
21         path: '~/.config/nvim',
22         src: '~/.vim',
23         state: 'link',
24     });
25 });
26
27 task('copy to ~/backups', async () => {
28     // Some overlap with "dotfiles" aspect here (may want to look at
29     // abstracting backups somehow).
30     const files = variable.paths('files');
31
32     for (const file of files) {
33         const base = file.basename;
34         const source = path.home.join(base);
35         const target = path.home.join('.backups', base);
36
37         const stats = await stat(source);
38
39         if (stats instanceof Error) {
40             throw stats;
41         } else if (!stats) {
42             continue;
43         } else if (stats.type === 'directory' || stats.type === 'file') {
44             await command('mv', ['-f', source, target], {
45                 creates: target,
46             });
47         }
48     }
49 });
50
51 task('create symlinks', async () => {
52     // Some overlap with "dotfiles" aspect here.
53     const files = variable.paths('files');
54
55     for (const src of files) {
56         await file({
57             force: true,
58             path: path.home.join(src.basename),
59             src: path.aspect.join('files', src.basename),
60             state: 'link',
61         });
62     }
63 });
64
65 const COMMAND_T_BASE = 'pack/bundle/opt/command-t/ruby/command-t/ext/command-t';
66
67 task('configure Command-T', async () => {
68     const base = resource.file('.vim').join(COMMAND_T_BASE);
69
70     await command('ruby', ['extconf.rb'], {
71         chdir: base,
72         creates: base.join('Makefile'),
73     });
74 });
75
76 task('compile Command-T', async () => {
77     const bundle = attributes.platform === 'darwin' ? 'ext.bundle' : 'ext.so';
78     const base = resource.file('.vim').join(COMMAND_T_BASE);
79
80     await command('make', [], {
81         chdir: base,
82         creates: base.join(bundle),
83     });
84 });
85
86 task('update bundle', async () => {
87     skip('not yet implemented');
88 });