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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
{
config,
systemConfig,
pkgs,
lib,
...
}:
{
options.programs.micro.lsp-servers = lib.mkOption {
default = { };
type = lib.types.attrsOf (
lib.types.submodule {
options = {
command = lib.mkOption {
type = lib.types.str;
};
options = lib.mkOption {
type = (pkgs.formats.json { }).type;
default = { };
};
};
}
);
};
config.programs.sherlock.settings.ignore = "Micro";
config.programs.micro = {
enable = true;
package =
if systemConfig.modules.presets.graphical.enable then pkgs.micro-with-wl-clipboard else pkgs.micro;
settings = {
"*.nix".tabstospaces = true;
"*.nix".tabmovement = true;
"*.nix".tabsize = 2;
"*.nim".tabstospaces = true;
"*.nim".tabmovement = true;
"*.nim".tabsize = 2;
clipboard = "terminal";
scrollbar = true;
eofnewline = false;
wordwrap = true;
softwrap = true;
ignorecase = true;
savehistory = false;
"lsp.formatOnSave" = true;
"lsp.tabcompletion" = true;
"lsp.autocompleteDetails" = false;
"lsp.server" =
if systemConfig.modules.presets.graphical.enable != true then
""
else
(lib.concatMapAttrsStringSep "," (
name: value:
lib.concatStringsSep "=" (
[
name
value.command
]
++ (lib.optionals (lib.hasAttr "options" value) [
(builtins.toJSON (value.options))
])
)
) config.programs.micro.lsp-servers);
};
};
config.home = {
sessionVariables.EDITOR = "micro";
shellAliases.nano = "micro";
file = {
# keybindings
"${config.xdg.configHome}/micro/bindings.json".source = pkgs.writeText "micro-keybindings.json" (
builtins.toJSON {
"Alt-," = "PreviousTab";
"Alt-." = "NextTab";
"Alt-Backspace" = "DeleteWordLeft";
"Alt-CtrlH" = "DeleteWordLeft";
"Alt-F" = "FindLiteral";
"Alt-[" = "DiffPrevious|CursorStart";
"Alt-]" = "DiffNext|CursorEnd";
"Alt-a" = "StartOfLine";
"Alt-b" = "WordLeft";
"Alt-c" = "RemoveAllMultiCursors";
"Alt-e" = "EndOfLine";
"Alt-f" = "WordRight";
"Alt-g" = "ToggleKeyMenu";
"Alt-m" = "SpawnMultiCursorSelect";
"Alt-n" = "SpawnMultiCursor";
"Alt-p" = "RemoveMultiCursor";
"Alt-x" = "SkipMultiCursor";
"Alt-{" = "ParagraphPrevious";
"Alt-}" = "ParagraphNext";
"AltDown" = "MoveLinesDown";
"AltLeft" = "StartOfTextToggle";
"AltRight" = "EndOfLine";
"AltShiftDown" = "SpawnMultiCursorDown";
"AltShiftLeft" = "SelectToStartOfTextToggle";
"AltShiftRight" = "SelectToEndOfLine";
"AltShiftUp" = "SpawnMultiCursorUp";
"AltUp" = "MoveLinesUp";
"Backspace" = "Backspace";
"Backtab" = "OutdentSelection|OutdentLine";
"Ctrl-MouseLeft" = "MouseMultiCursor";
"Ctrl-a" = "SelectAll";
"Ctrl-b" = "ShellMode";
"Ctrl-c" = "Copy|CopyLine";
"Ctrl-d" = "DuplicateLine";
"Ctrl-e" = "CommandMode";
"Ctrl-f" = "Find";
"Ctrl-g" = "ToggleHelp";
"Ctrl-h" = "Backspace";
"Ctrl-j" = "PlayMacro";
"Ctrl-k" = "CutLine";
"Ctrl-l" = "command-edit:goto ";
"Ctrl-n" = "FindNext";
"Ctrl-o" = "OpenFile";
"Ctrl-p" = "FindPrevious";
"Ctrl-q" = "Quit";
"Ctrl-r" = "ToggleRuler";
"Ctrl-s" = "Save";
"Ctrl-t" = "AddTab";
"Ctrl-u" = "ToggleMacro";
"Ctrl-v" = "Paste";
"Ctrl-w" = "NextSplit";
"Ctrl-x" = "Cut|CutLine";
"Ctrl-y" = "Redo";
"Ctrl-z" = "Undo";
"CtrlDown" = "CursorEnd";
"CtrlEnd" = "CursorEnd";
"CtrlHome" = "CursorStart";
"CtrlPageDown" = "NextTab";
"CtrlPageUp" = "PreviousTab";
"AltPageDown" = "NextTab";
"AltPageUp" = "PreviousTab";
"CtrlShiftDown" = "SelectToEnd";
"CtrlShiftLeft" = "SelectWordLeft";
"CtrlShiftRight" = "SelectWordRight";
"CtrlShiftUp" = "SelectToStart";
"CtrlUp" = "CursorStart";
"Delete" = "Delete";
"Down" = "CursorDown";
"End" = "EndOfLine";
"Enter" = "InsertNewline";
"Esc" = "Escape";
"F10" = "Quit";
"F2" = "Save";
"F3" = "Find";
"F4" = "Quit";
"F7" = "Find";
"Home" = "StartOfText";
"Insert" = "ToggleOverwriteMode";
"Left" = "CursorLeft";
"MouseLeft" = "MousePress";
"MouseLeftDrag" = "MouseDrag";
"MouseLeftRelease" = "MouseRelease";
"MouseMiddle" = "PastePrimary";
"MouseWheelDown" = "ScrollDown";
"MouseWheelUp" = "ScrollUp";
"PageDown" = "CursorPageDown";
"PageUp" = "CursorPageUp";
"Right" = "CursorRight";
"ShiftDown" = "SelectDown";
"ShiftEnd" = "SelectToEndOfLine";
"ShiftHome" = "SelectToStartOfTextToggle";
"ShiftLeft" = "SelectLeft";
"ShiftPageDown" = "SelectPageDown";
"ShiftPageUp" = "SelectPageUp";
"ShiftRight" = "SelectRight";
"ShiftUp" = "SelectUp";
"Tab" = "Autocomplete|IndentSelection|InsertTab";
"Up" = "CursorUp";
# plugins
"Alt-/" = "lua:comment.comment";
"Alt-d" = "command:definition";
# "Alt-f" = "command:format";
"Alt-k" = "command:hover";
"Alt-r" = "command:references";
"CtrlSpace" = "command:lspcompletion";
"CtrlUnderscore" = "lua:comment.comment";
"F1" = "command:cheat";
# "F4" = "command:jumptag";
"F5" = "lua:wc.wordCount";
}
);
# plugins
"${config.xdg.configHome}/micro/plug/lsp".source = pkgs.fetchFromGitHub {
owner = "AndCake";
repo = "micro-plugin-lsp";
rev = "v0.6.3";
sha256 = "sha256-rZ9Vw9WPGNaJBGHKU40F6cBIYQ1JFtSKPDrheazKkPY=";
};
"${config.xdg.configHome}/micro/plug/detectindent".source = pkgs.fetchFromGitHub {
owner = "dmaluka";
repo = "micro-detectindent";
rev = "v1.1.0";
sha256 = "sha256-5bKEkOnhz0pyBR2UNw5vvYiTtpd96fBPTYW9jnETvq4=";
};
"${config.xdg.configHome}/micro/plug/wc".source = pkgs.fetchFromGitHub {
owner = "adamnpeace";
repo = "micro-wc-plugin";
rev = "b2c9957e521770eadc1ecae9d54c0a30f40a0a3d";
sha256 = "sha256-Z6MC2cet8+7XHv41G+SlAZViCqlh/9dk0CSt7HklnTg=";
};
};
};
}