@hurshb50/setup-ubuntu 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -50
- package/distribution/assets/.bashrc +147 -0
- package/distribution/assets/.blerc +22 -0
- package/distribution/assets/.gitconfig +31 -0
- package/distribution/assets/AGENTS.md +15 -0
- package/distribution/assets/fonts/comic-code/ComicCodeLigatures-Bold.otf +3 -0
- package/distribution/assets/fonts/comic-code/ComicCodeLigatures-BoldItalic.otf +3 -0
- package/distribution/assets/fonts/comic-code/ComicCodeLigatures-Italic.otf +3 -0
- package/distribution/assets/fonts/comic-code/ComicCodeLigatures-Medium.otf +3 -0
- package/distribution/assets/fonts/comic-code/ComicCodeLigatures-MediumItalic.otf +3 -0
- package/distribution/assets/fonts/comic-code/ComicCodeLigatures-Regular.otf +3 -0
- package/distribution/assets/fonts/nerd-fonts-symbols/symbols-nerd-font-mono-regular.otf +3 -0
- package/distribution/assets/fonts/nerd-fonts-symbols/symbols-nerd-font-regular.otf +3 -0
- package/distribution/assets/oh-my-posh.toml +61 -0
- package/distribution/assets/skills/design/SKILL.md +44 -0
- package/distribution/assets/skills/teach/SKILL.md +17 -0
- package/distribution/assets/wallpapers/horizontal-wallpaper.jpeg +0 -0
- package/distribution/assets/wallpapers/vertical-wallpaper.jpeg +0 -0
- package/distribution/assets/zed/keymap.json +123 -0
- package/distribution/assets/zed/settings.json +161 -0
- package/distribution/setup-ubuntu.mjs +636 -1
- package/package.json +13 -8
package/README.md
CHANGED
|
@@ -1,59 +1,28 @@
|
|
|
1
1
|
# setup-ubuntu
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
The repo includes two GitHub Actions workflows.
|
|
6
|
-
|
|
7
|
-
- `publish.yaml` checks, tests, builds, bumps the version, tags it, and stages the package on npm.
|
|
8
|
-
- `release.yaml` publishes a GitHub release once the version is live.
|
|
9
|
-
|
|
10
|
-
CI uses npm's OIDC trusted publishing and staged publishing. No npm token. Nothing goes live until you approve it with 2FA.
|
|
11
|
-
|
|
12
|
-
## One-time setup
|
|
13
|
-
|
|
14
|
-
1. Push the repo to GitHub. Run `gh auth login` first if needed.
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
git init -b main
|
|
18
|
-
git add .
|
|
19
|
-
git commit -m "Initial commit"
|
|
20
|
-
gh repo create setup-ubuntu --public --source . --remote origin --push
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
2. Log in to npm.
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
vp pm login
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
3. Publish the first version manually. npm cannot stage a new package.
|
|
3
|
+
Sets up a fresh Ubuntu machine with tools, configuration, and dotfiles.
|
|
30
4
|
|
|
31
|
-
|
|
32
|
-
vp pm publish
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
This publishes 0.0.0. Later releases go through CI.
|
|
36
|
-
|
|
37
|
-
4. Allow GitHub Actions to publish. In the package settings on npmjs.com, add a GitHub Actions trusted publisher.
|
|
38
|
-
|
|
39
|
-
- Organization or user: `hurshb50`
|
|
40
|
-
- Repository: `setup-ubuntu`
|
|
41
|
-
- Workflow filename: `publish.yaml`
|
|
42
|
-
- Allowed actions: staged publishing only
|
|
43
|
-
|
|
44
|
-
5. Optional: in package settings under Publishing access, set "Require two-factor authentication and disallow tokens". CI still works through OIDC.
|
|
45
|
-
|
|
46
|
-
## Releasing a version
|
|
5
|
+
## Installation
|
|
47
6
|
|
|
48
7
|
```bash
|
|
49
|
-
|
|
8
|
+
sudo apt update && sudo apt install -y curl ca-certificates
|
|
9
|
+
curl -fsSL https://vite.plus | bash
|
|
10
|
+
vpx @hurshb50/setup-ubuntu
|
|
50
11
|
```
|
|
51
12
|
|
|
52
|
-
|
|
13
|
+
## After Installation
|
|
53
14
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
15
|
+
Open a new terminal, then:
|
|
16
|
+
|
|
17
|
+
- Log out and back in to use Docker without `sudo`.
|
|
18
|
+
- Sign in to Zed, 1Password, and Chrome.
|
|
19
|
+
- Run `gh auth login` to authenticate the GitHub CLI.
|
|
20
|
+
- Pick a wallpaper in HydraPaper.
|
|
21
|
+
- Put personal shell config in `~/custom.bashrc`, not `~/.bashrc`.
|
|
22
|
+
- Update `/.gitconfig` if you are on work machine
|
|
23
|
+
|
|
24
|
+
## Publishing
|
|
58
25
|
|
|
59
|
-
|
|
26
|
+
1. Run `publish.yaml` from the Actions tab with a `patch`, `minor`, or `major` bump. CI checks, tests, builds, tags, and stages the package, using OIDC instead of a token.
|
|
27
|
+
2. Approve the staged package on npmjs.com to publish it.
|
|
28
|
+
3. `release.yaml` creates the GitHub release once the version is live.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
function is_interactive() {
|
|
2
|
+
[[ $- == *i* ]]
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
function check_command() {
|
|
6
|
+
command -v "$1" &> /dev/null
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function path_exists() {
|
|
10
|
+
if [ -e "$1" ]; then
|
|
11
|
+
return 0
|
|
12
|
+
else
|
|
13
|
+
return 1
|
|
14
|
+
fi
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function is_posix() {
|
|
18
|
+
shopt -oq posix
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function print_error() {
|
|
22
|
+
local RED='\033[0;31m'
|
|
23
|
+
local NC='\033[0m'
|
|
24
|
+
echo -e "\n${RED} $1 ${NC}"
|
|
25
|
+
echo -e "\n${RED} Run the setup script to fix this.${NC}"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function path() {
|
|
29
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function setup_history() {
|
|
33
|
+
shopt -s histappend
|
|
34
|
+
shopt -s checkwinsize
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function completion() {
|
|
38
|
+
if is_posix; then
|
|
39
|
+
return
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
USER_COMPLETION_PATH="/usr/share/bash-completion/bash_completion"
|
|
43
|
+
|
|
44
|
+
if path_exists "${USER_COMPLETION_PATH}"; then
|
|
45
|
+
. "${USER_COMPLETION_PATH}"
|
|
46
|
+
fi
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function terminal_view() {
|
|
50
|
+
if ! check_command "oh-my-posh"; then
|
|
51
|
+
print_error "'oh-my-posh' is not installed"
|
|
52
|
+
return 1
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
eval "$(oh-my-posh init bash --config $HOME/.config/oh-my-posh/oh-my-posh.toml)"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function smart_change_directory() {
|
|
59
|
+
if ! check_command "zoxide"; then
|
|
60
|
+
print_error "'zoxide' is not installed"
|
|
61
|
+
return 1
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
eval "$(zoxide init bash --cmd cd)"
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function list_directory_alias() {
|
|
68
|
+
alias ls="ls -lAh --color=auto"
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function custom_bash_rc() {
|
|
72
|
+
CUSTOM_BASH_RC_PATH="${HOME}/custom.bashrc"
|
|
73
|
+
|
|
74
|
+
if ! path_exists "${CUSTOM_BASH_RC_PATH}"; then
|
|
75
|
+
return
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
source "${CUSTOM_BASH_RC_PATH}"
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function disable_legacy() {
|
|
82
|
+
stty -ixon
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function swap_capslock_and_esc() {
|
|
86
|
+
gsettings set org.gnome.desktop.input-sources xkb-options "['caps:swapescape']"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function load_auto_suggestion() {
|
|
90
|
+
BLE_PATH="$HOME/.local/share/blesh/ble.sh"
|
|
91
|
+
|
|
92
|
+
if ! path_exists "$BLE_PATH"; then
|
|
93
|
+
print_error "'ble.sh' is not installed"
|
|
94
|
+
return 1
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
source "$BLE_PATH" --attach=none
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function start_auto_suggestion() {
|
|
101
|
+
if ! check_command "ble-attach"; then
|
|
102
|
+
print_error "ble-attach is not installed"
|
|
103
|
+
return 1
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
ble-attach
|
|
107
|
+
clear
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function fuzzy_finder() {
|
|
111
|
+
if ! check_command "fzf"; then
|
|
112
|
+
print_error "'fzf' is not installed"
|
|
113
|
+
return 1
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
FZF_KEY_BINDINGS="/usr/share/doc/fzf/examples/key-bindings.bash"
|
|
117
|
+
FZF_COMPLETION="/usr/share/bash-completion/completions/fzf"
|
|
118
|
+
|
|
119
|
+
if path_exists "$FZF_KEY_BINDINGS"; then
|
|
120
|
+
source "$FZF_KEY_BINDINGS"
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
if path_exists "$FZF_COMPLETION"; then
|
|
124
|
+
source "$FZF_COMPLETION"
|
|
125
|
+
fi
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function run() {
|
|
129
|
+
if ! is_interactive; then
|
|
130
|
+
return
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
path
|
|
134
|
+
load_auto_suggestion
|
|
135
|
+
setup_history
|
|
136
|
+
completion
|
|
137
|
+
terminal_view
|
|
138
|
+
smart_change_directory
|
|
139
|
+
list_directory_alias
|
|
140
|
+
custom_bash_rc
|
|
141
|
+
disable_legacy
|
|
142
|
+
swap_capslock_and_esc
|
|
143
|
+
fuzzy_finder
|
|
144
|
+
start_auto_suggestion
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
run
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
bleopt highlight_syntax=
|
|
2
|
+
bleopt highlight_filename=
|
|
3
|
+
bleopt highlight_variable=
|
|
4
|
+
|
|
5
|
+
ble-face -s auto_complete fg=245
|
|
6
|
+
|
|
7
|
+
ble-bind -m auto_complete -f 'C-RET' 'auto_complete/insert'
|
|
8
|
+
|
|
9
|
+
set -o vi
|
|
10
|
+
|
|
11
|
+
function blerc/vim-mode-hook {
|
|
12
|
+
bleopt keymap_vi_mode_show=
|
|
13
|
+
ble-bind -m vi_nmap --cursor 2
|
|
14
|
+
ble-bind -m vi_imap --cursor 6
|
|
15
|
+
ble-bind -m vi_imap -f 'C-p' 'history-search backward:ignore-case'
|
|
16
|
+
ble-bind -m vi_imap -f 'C-n' 'history-search forward:ignore-case'
|
|
17
|
+
ble-bind -m vi_nmap -f 'C-p' 'history-search backward:ignore-case'
|
|
18
|
+
ble-bind -m vi_nmap -f 'C-n' 'history-search forward:ignore-case'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
blehook/eval-after-load keymap_vi blerc/vim-mode-hook
|
|
22
|
+
bleopt prompt_command_changes_layout=1
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
[user]
|
|
2
|
+
name = Hursh Patel
|
|
3
|
+
email = hurshb50@gmail.com
|
|
4
|
+
|
|
5
|
+
[core]
|
|
6
|
+
editor = zed --wait
|
|
7
|
+
|
|
8
|
+
[init]
|
|
9
|
+
defaultBranch = main
|
|
10
|
+
|
|
11
|
+
[push]
|
|
12
|
+
autoSetupRemote = true
|
|
13
|
+
|
|
14
|
+
[merge]
|
|
15
|
+
conflictStyle = zdiff3
|
|
16
|
+
|
|
17
|
+
[diff]
|
|
18
|
+
algorithm = histogram
|
|
19
|
+
|
|
20
|
+
[fetch]
|
|
21
|
+
prune = true
|
|
22
|
+
|
|
23
|
+
[rerere]
|
|
24
|
+
enabled = true
|
|
25
|
+
|
|
26
|
+
[branch]
|
|
27
|
+
sort = -committerdate
|
|
28
|
+
|
|
29
|
+
[credential "https://github.com"]
|
|
30
|
+
helper =
|
|
31
|
+
helper = !/usr/bin/gh auth git-credential
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Formatting
|
|
2
|
+
|
|
3
|
+
- Sentences: 8 words or fewer
|
|
4
|
+
- Paragraphs: 2 sentences or fewer
|
|
5
|
+
- Sections: 3 paragraphs or fewer
|
|
6
|
+
- Lists: 4 words per item
|
|
7
|
+
- Tables: 3 columns or fewer, 3 words or fewer per cell
|
|
8
|
+
- Diagrams: 6 nodes, one per level
|
|
9
|
+
|
|
10
|
+
# Explanation
|
|
11
|
+
|
|
12
|
+
- Simple
|
|
13
|
+
- Straightforward
|
|
14
|
+
- Minimal
|
|
15
|
+
- Avoid verbosity
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
console_title_template = '{{ .Folder }}'
|
|
2
|
+
version = 3
|
|
3
|
+
final_space = true
|
|
4
|
+
|
|
5
|
+
[[blocks]]
|
|
6
|
+
type = 'prompt'
|
|
7
|
+
alignment = 'left'
|
|
8
|
+
newline = true
|
|
9
|
+
|
|
10
|
+
[[blocks.segments]]
|
|
11
|
+
style = 'diamond'
|
|
12
|
+
template = ' {{ .Path }} '
|
|
13
|
+
foreground = '#000000'
|
|
14
|
+
background = 'blue'
|
|
15
|
+
type = 'path'
|
|
16
|
+
|
|
17
|
+
[blocks.segments.properties]
|
|
18
|
+
folder_icon = ' '
|
|
19
|
+
folder_separator_icon = ' / '
|
|
20
|
+
home_icon = ' '
|
|
21
|
+
max_depth = 2
|
|
22
|
+
style = 'agnoster_short'
|
|
23
|
+
|
|
24
|
+
[[blocks.segments]]
|
|
25
|
+
style = 'plain'
|
|
26
|
+
template = ' {{ if or (.Working.Changed) (.Staging.Changed) }}{{ .HEAD }} {{ else }}{{ .HEAD }}{{ end }}'
|
|
27
|
+
foreground = 'yellow'
|
|
28
|
+
background = 'transparent'
|
|
29
|
+
type = 'git'
|
|
30
|
+
|
|
31
|
+
[blocks.segments.properties]
|
|
32
|
+
branch_icon = ''
|
|
33
|
+
fetch_status = true
|
|
34
|
+
|
|
35
|
+
[[blocks]]
|
|
36
|
+
type = 'prompt'
|
|
37
|
+
alignment = 'right'
|
|
38
|
+
overflow = 'hidden'
|
|
39
|
+
|
|
40
|
+
[[blocks.segments]]
|
|
41
|
+
style = 'plain'
|
|
42
|
+
template = ' {{ .FormattedMs }} '
|
|
43
|
+
foreground = '#000000'
|
|
44
|
+
background = 'lightRed'
|
|
45
|
+
type = 'executiontime'
|
|
46
|
+
|
|
47
|
+
[blocks.segments.properties]
|
|
48
|
+
always_enabled = true
|
|
49
|
+
style = 'roundrock'
|
|
50
|
+
|
|
51
|
+
[[blocks]]
|
|
52
|
+
type = 'prompt'
|
|
53
|
+
alignment = 'left'
|
|
54
|
+
newline = true
|
|
55
|
+
|
|
56
|
+
[[blocks.segments]]
|
|
57
|
+
style = 'plain'
|
|
58
|
+
template = ' '
|
|
59
|
+
foreground = 'green'
|
|
60
|
+
background = 'transparent'
|
|
61
|
+
type = 'text'
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design
|
|
3
|
+
description: Push an architecture forward. Interview me, fan out on widely varying designs, then build the API shape together.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Design
|
|
8
|
+
|
|
9
|
+
Turn a vague idea into one API shape.
|
|
10
|
+
|
|
11
|
+
## Output
|
|
12
|
+
|
|
13
|
+
- Produce the API shape
|
|
14
|
+
- Types, signatures, classes with fields and methods
|
|
15
|
+
- No implementation, no function bodies, no pseudocode
|
|
16
|
+
|
|
17
|
+
## Phase 1. Interview
|
|
18
|
+
|
|
19
|
+
1. Ask only about decisions needing my judgement
|
|
20
|
+
2. Move on when only trying designs can answer
|
|
21
|
+
|
|
22
|
+
## Phase 2. Ideation
|
|
23
|
+
|
|
24
|
+
- Spawn 4 subagents at once
|
|
25
|
+
- Send each one different starting material
|
|
26
|
+
|
|
27
|
+
Each subagent returns:
|
|
28
|
+
|
|
29
|
+
- The API shape
|
|
30
|
+
- An example caller
|
|
31
|
+
|
|
32
|
+
## Phase 3. Feedback
|
|
33
|
+
|
|
34
|
+
- Present all the designs
|
|
35
|
+
- Show how a caller would use each one
|
|
36
|
+
- Do not pick a winner
|
|
37
|
+
- Ask what I like and dislike
|
|
38
|
+
- Ask whether to run another round
|
|
39
|
+
|
|
40
|
+
## Phase 4. Converge
|
|
41
|
+
|
|
42
|
+
- Build one API shape from my choices
|
|
43
|
+
- It must read as one design
|
|
44
|
+
- Show it, then refine from my feedback
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: teach
|
|
3
|
+
description: Teach me a concept from the ground up, assuming no prior knowledge and no context.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Teach
|
|
8
|
+
|
|
9
|
+
Any concept, in one sitting, from the ground up.
|
|
10
|
+
|
|
11
|
+
Assume no prior knowledge and no context.
|
|
12
|
+
|
|
13
|
+
## The lesson
|
|
14
|
+
|
|
15
|
+
- Define every term before use, even basic ones
|
|
16
|
+
- Each section depends on the ones before
|
|
17
|
+
- Open with an example, then a definition
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"context": "Editor",
|
|
4
|
+
"bindings": {
|
|
5
|
+
"d ]": null,
|
|
6
|
+
"d [": null,
|
|
7
|
+
"g shift-k": null,
|
|
8
|
+
"ctrl-f": null
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"context": "Editor",
|
|
13
|
+
"bindings": {
|
|
14
|
+
"ctrl-w v": null,
|
|
15
|
+
"ctrl-w s": null,
|
|
16
|
+
"ctrl-w q": null,
|
|
17
|
+
"ctrl-w a": null,
|
|
18
|
+
"ctrl-w o": null
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"bindings": {
|
|
23
|
+
"ctrl-h": "workspace::ActivatePaneLeft",
|
|
24
|
+
"ctrl-j": "workspace::ActivatePaneDown",
|
|
25
|
+
"ctrl-k": "workspace::ActivatePaneUp",
|
|
26
|
+
"ctrl-l": "workspace::ActivatePaneRight"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"context": "VimControl && !menu",
|
|
31
|
+
"bindings": {
|
|
32
|
+
"ctrl-w h": null,
|
|
33
|
+
"ctrl-w j": null,
|
|
34
|
+
"ctrl-w k": null,
|
|
35
|
+
"ctrl-w l": null
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"context": "Workspace",
|
|
40
|
+
"bindings": {
|
|
41
|
+
"ctrl-s": null,
|
|
42
|
+
"ctrl-shift-w": null,
|
|
43
|
+
"ctrl-shift-t": null,
|
|
44
|
+
"ctrl-?": null,
|
|
45
|
+
"ctrl-~": null,
|
|
46
|
+
"ctrl-shift-e": null,
|
|
47
|
+
"ctrl-shift-g": null,
|
|
48
|
+
"ctrl-shift-f": null,
|
|
49
|
+
"ctrl-shift-o": null,
|
|
50
|
+
"ctrl-b": null,
|
|
51
|
+
"ctrl-alt-b": null
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"context": "FileFinder || (FileFinder > Picker > Editor)",
|
|
56
|
+
"bindings": {
|
|
57
|
+
"ctrl-p": null
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"context": "AgentPanel",
|
|
62
|
+
"bindings": {
|
|
63
|
+
"ctrl-n": null
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"context": "Terminal",
|
|
68
|
+
"bindings": {
|
|
69
|
+
"ctrl-p": ["terminal::SendKeystroke", "ctrl-p"],
|
|
70
|
+
"ctrl-n": ["terminal::SendKeystroke", "ctrl-n"]
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"context": "GitPanel",
|
|
75
|
+
"bindings": {
|
|
76
|
+
"p": "git::Push",
|
|
77
|
+
"l": "git::Pull",
|
|
78
|
+
"b": "git::Switch",
|
|
79
|
+
"c": "git::Commit",
|
|
80
|
+
"m": "git::GenerateCommitMessage",
|
|
81
|
+
"ctrl-j": "git_panel::FocusEditor",
|
|
82
|
+
"ctrl-k": "git_panel::FocusChanges"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"context": "ThreadsSidebar",
|
|
87
|
+
"bindings": {
|
|
88
|
+
"/": null
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"context": "ThreadsSidebar > Editor",
|
|
93
|
+
"bindings": {
|
|
94
|
+
"ctrl-j": "menu::Cancel",
|
|
95
|
+
"ctrl-k": "menu::Cancel",
|
|
96
|
+
"ctrl-h": "menu::Cancel",
|
|
97
|
+
"ctrl-l": "menu::Cancel",
|
|
98
|
+
"j": "menu::Cancel",
|
|
99
|
+
"k": "menu::Cancel",
|
|
100
|
+
"h": "menu::Cancel",
|
|
101
|
+
"l": "menu::Cancel"
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"context": "CommitEditor > Editor",
|
|
106
|
+
"bindings": {
|
|
107
|
+
"m": "git::GenerateCommitMessage",
|
|
108
|
+
"ctrl-k": "git_panel::FocusChanges"
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"context": "GitPanel > Editor",
|
|
113
|
+
"bindings": {
|
|
114
|
+
"ctrl-k": "git_panel::FocusChanges"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"context": "vim_mode == visual && !menu",
|
|
119
|
+
"bindings": {
|
|
120
|
+
"shift-s": "vim::PushAddSurrounds"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
]
|