@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 CHANGED
@@ -1,59 +1,28 @@
1
1
  # setup-ubuntu
2
2
 
3
- ## Publishing
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
- ```bash
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
- gh workflow run publish.yaml -f bump=patch
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
- Use `minor` or `major` instead of `patch` when it fits. Then approve the staged package.
13
+ ## After Installation
53
14
 
54
- ```bash
55
- vp pm stage list
56
- vp pm stage approve <stage-id>
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
- You can also approve on npmjs.com under Staged Packages. The Release workflow creates the GitHub release on its weekly run. Run `gh workflow run release.yaml` to do it now.
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,3 @@
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fae108ae1f7e47ffc3a5f5b63e5b3055a5dbdd44ac6cd36ae3f228beae6fd2fb
3
+ size 92016
@@ -0,0 +1,3 @@
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d382359a98fb8695633bfa34d4c668b2326d329ccda0d1d85e652398031b2eac
3
+ size 92188
@@ -0,0 +1,3 @@
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:406035ccf5b2ffeb3951a54d09b2601250032b82f949b812a13b056b8ca5fb97
3
+ size 95120
@@ -0,0 +1,3 @@
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0416c5043eb3288176fe3daa4765c1bf5033b7f7d491cbc0caa727f55d27d00d
3
+ size 94056
@@ -0,0 +1,3 @@
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6a5e27ddce66bffc208be5dc3363ce3c58902de0cb50327decacde2d08508f88
3
+ size 95256
@@ -0,0 +1,3 @@
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3ad4c5bd48a4fed1d95cdaa538c6caf7b6f65706197d03a62cb644cc7f128624
3
+ size 93004
@@ -0,0 +1,3 @@
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:442da90baae7fc1a497245b148564857e89b72e95ebacfa943381cf2b0d3b0c8
3
+ size 6060664
@@ -0,0 +1,3 @@
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d19edb42e101b16b0c5bc121d6943b88d87357db34f0acce6e458942eaa6b2d3
3
+ size 5525104
@@ -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
@@ -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
+ ]