dotfiles-tui 0.0.5
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.
- checksums.yaml +7 -0
- data/.env.example +4 -0
- data/.gitattributes +1 -0
- data/.github/workflows/publish-gem.yml +36 -0
- data/.gitignore +316 -0
- data/.shellcheckrc +1 -0
- data/.stow-local-ignore +23 -0
- data/.vscode/settings.json +2 -0
- data/Configs/aerospace/.config/aerospace/aerospace.toml +265 -0
- data/Configs/alacritty/.config/alacritty/alacritty.toml +31 -0
- data/Configs/conda/.condarc +1 -0
- data/Configs/continue/.continue/.continueignore +0 -0
- data/Configs/continue/.continue/.continuerc.json +3 -0
- data/Configs/continue/.continue/config.json +48 -0
- data/Configs/docker/.docker/completion/completion.zsh +3 -0
- data/Configs/editorconfig/.editorconfig +16 -0
- data/Configs/fzf/.fzf/completion/completion.zsh +8 -0
- data/Configs/git/.config/gitconfig/core +83 -0
- data/Configs/git/.config/gitconfig/home +20 -0
- data/Configs/git/.config/gitconfig/template.txt +7 -0
- data/Configs/git/.config/gitconfig/work +23 -0
- data/Configs/git/.gitconfig +25 -0
- data/Configs/gpg/.gnupg/.#lk0x000000015060b4e0.macBook.pro.24088 +2 -0
- data/Configs/gpg/.gnupg/gpg-agent.conf +3 -0
- data/Configs/gpg/.gnupg/openpgp-revocs.d/DE999E2ACEAE3E8EAD660459688CB4D444FB1024.rev +28 -0
- data/Configs/gpg/.gnupg/private-keys-v1.d/0FF407C984AC03CCC60D924C5B315977DF45D5D0.key +7 -0
- data/Configs/gpg/.gnupg/private-keys-v1.d/2B711D7C4A8BE25322C9966B73E6842F7E64CD38.key +7 -0
- data/Configs/gpg/.gnupg/pubring.kbx +0 -0
- data/Configs/gpg/.gnupg/trustdb.gpg +0 -0
- data/Configs/kitty/.config/kitty/current-theme.conf +80 -0
- data/Configs/kitty/.config/kitty/kitty.conf +93 -0
- data/Configs/nvim/.config/nvim/.stylua.toml +6 -0
- data/Configs/nvim/.config/nvim/README.md +9 -0
- data/Configs/nvim/.config/nvim/init.lua +37 -0
- data/Configs/nvim/.config/nvim/lazy-lock.json +29 -0
- data/Configs/nvim/.config/nvim/lua/chadrc.lua +17 -0
- data/Configs/nvim/.config/nvim/lua/configs/conform.lua +15 -0
- data/Configs/nvim/.config/nvim/lua/configs/lazy.lua +47 -0
- data/Configs/nvim/.config/nvim/lua/configs/lspconfig.lua +24 -0
- data/Configs/nvim/.config/nvim/lua/configs/null_ls.lua +27 -0
- data/Configs/nvim/.config/nvim/lua/mappings.lua +10 -0
- data/Configs/nvim/.config/nvim/lua/options.lua +6 -0
- data/Configs/nvim/.config/nvim/lua/plugins/init.lua +25 -0
- data/Configs/oh-my-posh/.config/oh-my-posh/theme/config.json +71 -0
- data/Configs/pip/.config/pip/pip.conf +3 -0
- data/Configs/python/.pythonrc +25 -0
- data/Configs/starship/.config/starship/starship.toml +134 -0
- data/Configs/starship/.config/starship/themes/frappe.toml +27 -0
- data/Configs/starship/.config/starship/themes/latte.toml +27 -0
- data/Configs/starship/.config/starship/themes/macchiato.toml +27 -0
- data/Configs/starship/.config/starship/themes/mocha.toml +27 -0
- data/Configs/tmux/.tmux.conf +21 -0
- data/Configs/wezterm/.config/wezterm/core/colors.lua +10 -0
- data/Configs/wezterm/.config/wezterm/core/font.lua +5 -0
- data/Configs/wezterm/.config/wezterm/core/helper.lua +22 -0
- data/Configs/wezterm/.config/wezterm/core/init.lua +20 -0
- data/Configs/wezterm/.config/wezterm/core/keybindings/init.lua +16 -0
- data/Configs/wezterm/.config/wezterm/core/keybindings/macos.lua +106 -0
- data/Configs/wezterm/.config/wezterm/core/keybindings/windows.lua +99 -0
- data/Configs/wezterm/.config/wezterm/core/launch.lua +41 -0
- data/Configs/wezterm/.config/wezterm/core/maximized.lua +5 -0
- data/Configs/wezterm/.config/wezterm/core/mousebindings.lua +23 -0
- data/Configs/wezterm/.config/wezterm/core/tab_title.lua +26 -0
- data/Configs/wezterm/.config/wezterm/core/window.lua +8 -0
- data/Configs/wezterm/.config/wezterm/wezterm.lua +83 -0
- data/Configs/zellij/.config/zellij/config.kdl +410 -0
- data/Configs/zellij/.config/zellij/layouts/default.kdl +159 -0
- data/Configs/zellij/.config/zellij/plugins/room.wasm +0 -0
- data/Configs/zellij/.config/zellij/plugins/zjstatus.wasm +0 -0
- data/Configs/zsh/.hushlogin +0 -0
- data/Configs/zsh/.localrc +42 -0
- data/Configs/zsh/.profile +3 -0
- data/Configs/zsh/.shellcheckrc +1 -0
- data/Configs/zsh/.zprofile +3 -0
- data/Configs/zsh/.zsh/autoload/backup_restore +84 -0
- data/Configs/zsh/.zsh/autoload/cat +8 -0
- data/Configs/zsh/.zsh/autoload/change_wallpaper +1 -0
- data/Configs/zsh/.zsh/autoload/clean_dstore +6 -0
- data/Configs/zsh/.zsh/autoload/clean_pycache +6 -0
- data/Configs/zsh/.zsh/autoload/convert_mkv_to_mp4 +14 -0
- data/Configs/zsh/.zsh/autoload/create_macos_installer +26 -0
- data/Configs/zsh/.zsh/autoload/download +71 -0
- data/Configs/zsh/.zsh/autoload/fail +2 -0
- data/Configs/zsh/.zsh/autoload/flush_dns +6 -0
- data/Configs/zsh/.zsh/autoload/info +1 -0
- data/Configs/zsh/.zsh/autoload/ls +8 -0
- data/Configs/zsh/.zsh/autoload/reset_beyond_compare +15 -0
- data/Configs/zsh/.zsh/autoload/reset_final_cut_pro +5 -0
- data/Configs/zsh/.zsh/autoload/reset_launch_pad +3 -0
- data/Configs/zsh/.zsh/autoload/reset_open_list +3 -0
- data/Configs/zsh/.zsh/autoload/speedup_terminal +6 -0
- data/Configs/zsh/.zsh/autoload/start_aria2_server +1 -0
- data/Configs/zsh/.zsh/autoload/success +1 -0
- data/Configs/zsh/.zsh/autoload/update_system +19 -0
- data/Configs/zsh/.zsh/autoload/user +1 -0
- data/Configs/zsh/.zsh/autoload/vim +9 -0
- data/Configs/zsh/.zsh/autoload/warn +1 -0
- data/Configs/zsh/.zsh/completion/aliases.zsh +3 -0
- data/Configs/zsh/.zsh/completion/completion.zsh +33 -0
- data/Configs/zsh/.zsh/completion/config.zsh +118 -0
- data/Configs/zsh/.zsh/completion/exports.zsh +108 -0
- data/Configs/zsh/.zsh/completion/fpath.zsh +8 -0
- data/Configs/zsh/.zsh_history +283 -0
- data/Configs/zsh/.zshenv +2 -0
- data/Configs/zsh/.zshrc +54 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +87 -0
- data/Hooks/adguard/pre.rb +7 -0
- data/Hooks/aerospace/pre.rb +8 -0
- data/Hooks/aide/post.rb +7 -0
- data/Hooks/aide/pre.rb +7 -0
- data/Hooks/alacritty/pre.rb +7 -0
- data/Hooks/alfred/pre.rb +7 -0
- data/Hooks/atuin/post.rb +27 -0
- data/Hooks/atuin/pre.rb +7 -0
- data/Hooks/bartender/pre.rb +7 -0
- data/Hooks/bun/pre.rb +7 -0
- data/Hooks/carapace/pre.rb +7 -0
- data/Hooks/cargo/pre.rb +7 -0
- data/Hooks/choosy/pre.rb +7 -0
- data/Hooks/controld/pre.rb +7 -0
- data/Hooks/core/common.rb +36 -0
- data/Hooks/core/final.rb +23 -0
- data/Hooks/core/lib/configurator.rb +593 -0
- data/Hooks/core/lib/display.rb +120 -0
- data/Hooks/core/lib/hook_config.rb +96 -0
- data/Hooks/core/lib/hook_context.rb +124 -0
- data/Hooks/core/lib/hooks.rb +45 -0
- data/Hooks/core/lib/logger.rb +23 -0
- data/Hooks/core/lib/menu.rb +70 -0
- data/Hooks/core/lib/spinner.rb +50 -0
- data/Hooks/core/lib/system.rb +78 -0
- data/Hooks/core/lib/tweaks.rb +59 -0
- data/Hooks/core/library.rb +3 -0
- data/Hooks/core/pre.rb +17 -0
- data/Hooks/ctrld/pre.rb +7 -0
- data/Hooks/deskpad/pre.rb +7 -0
- data/Hooks/fonts/pre.rb +60 -0
- data/Hooks/ghostty/pre.rb +10 -0
- data/Hooks/git/post.rb +20 -0
- data/Hooks/git/pre.rb +7 -0
- data/Hooks/gpg/post.rb +16 -0
- data/Hooks/gpg/pre.rb +7 -0
- data/Hooks/ice-hidemenubar/pre.rb +7 -0
- data/Hooks/iterm/IC Green PPL.itermcolors +344 -0
- data/Hooks/iterm/chalkboard.webp +0 -0
- data/Hooks/iterm/com.googlecode.iterm2.plist +2371 -0
- data/Hooks/iterm/post.rb +7 -0
- data/Hooks/iterm/pre.rb +7 -0
- data/Hooks/jujutsu/post.rb +13 -0
- data/Hooks/jujutsu/pre.rb +7 -0
- data/Hooks/keka/pre.rb +7 -0
- data/Hooks/kitty/pre.rb +7 -0
- data/Hooks/lazyvim/pre.rb +7 -0
- data/Hooks/lima/pre.rb +7 -0
- data/Hooks/little-snitch/pre.rb +7 -0
- data/Hooks/microsoft-edge/pre.rb +7 -0
- data/Hooks/mos/pre.rb +7 -0
- data/Hooks/nvchad/pre.rb +7 -0
- data/Hooks/oh-my-posh/config.json +58 -0
- data/Hooks/oh-my-posh/post.rb +7 -0
- data/Hooks/oh-my-posh/pre.rb +7 -0
- data/Hooks/pearcleaner/pre.rb +7 -0
- data/Hooks/pycharm/pre.rb +7 -0
- data/Hooks/raindropio/pre.rb +7 -0
- data/Hooks/rectangle/RectangleConfig.json +258 -0
- data/Hooks/rectangle/com.knollsoft.Rectangle.plist +0 -0
- data/Hooks/rectangle/post.rb +22 -0
- data/Hooks/rectangle/pre.rb +7 -0
- data/Hooks/slack/pre.rb +7 -0
- data/Hooks/soundsource/pre.rb +7 -0
- data/Hooks/ssh/post.rb +8 -0
- data/Hooks/starship/pre.rb +7 -0
- data/Hooks/sublime_text/post.rb +25 -0
- data/Hooks/sublime_text/pre.rb +7 -0
- data/Hooks/swiftformat-for-xcode/pre.rb +7 -0
- data/Hooks/syncthing/pre.rb +7 -0
- data/Hooks/synology/pre.rb +7 -0
- data/Hooks/tailscale/pre.rb +7 -0
- data/Hooks/tmux/post.rb +7 -0
- data/Hooks/tmux/pre.rb +7 -0
- data/Hooks/topnotch/pre.rb +7 -0
- data/Hooks/transmission/pre.rb +7 -0
- data/Hooks/vscode/extensions.txt +16 -0
- data/Hooks/vscode/keybindings.json +26 -0
- data/Hooks/vscode/post.rb +29 -0
- data/Hooks/vscode/pre.rb +9 -0
- data/Hooks/vscode/settings.json +139 -0
- data/Hooks/vscode/style.css +29 -0
- data/Hooks/wezterm/pre.rb +7 -0
- data/Hooks/wins/pre.rb +7 -0
- data/Hooks/zed/pre.rb +7 -0
- data/Hooks/zellij/post.rb +7 -0
- data/Hooks/zellij/pre.rb +7 -0
- data/Hooks/zoxide/pre.rb +7 -0
- data/Hooks/zsh/pre.rb +19 -0
- data/LICENSE +21 -0
- data/README.md +100 -0
- data/bin/dotfiles-tui +6 -0
- data/bootstrap.rb +186 -0
- data/dotfiles-tui.gemspec +47 -0
- data/lib/dotfiles_tui/version.rb +5 -0
- data/lib/dotfiles_tui.rb +15 -0
- metadata +275 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"key": "ctrl+shift+e",
|
|
4
|
+
"command": "workbench.view.explorer"
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"key": "ctrl+shift+g",
|
|
8
|
+
"command": "workbench.view.scm"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"key": "ctrl+shift+f",
|
|
12
|
+
"command": "workbench.action.findInFiles"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"key": "ctrl+shift+x",
|
|
16
|
+
"command": "workbench.view.extensions"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"key": "ctrl+shift+t",
|
|
20
|
+
"command": "workbench.view.extension.test"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"key": "ctrl+shift+d",
|
|
24
|
+
"command": "workbench.view.debug"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
require_relative '../core/common'
|
|
5
|
+
|
|
6
|
+
Bootstrap::Hooks.run('vscode', stage: :post) do |hook|
|
|
7
|
+
code_binary = `command -v code`.strip
|
|
8
|
+
next if code_binary.empty?
|
|
9
|
+
|
|
10
|
+
extensions_file = hook.hook_path('extensions.txt')
|
|
11
|
+
if File.exist?(extensions_file)
|
|
12
|
+
File.read(extensions_file).split.each do |extension|
|
|
13
|
+
next if extension.strip.empty?
|
|
14
|
+
|
|
15
|
+
hook.run("#{code_binary} --install-extension #{extension.strip} --force", allow_failure: true)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
user_dir = File.join(Dir.home, 'Library', 'Application Support', 'Code', 'User')
|
|
20
|
+
FileUtils.mkdir_p(user_dir)
|
|
21
|
+
|
|
22
|
+
%w[keybindings.json settings.json style.css].each do |file_name|
|
|
23
|
+
source = hook.hook_path(file_name)
|
|
24
|
+
next unless File.exist?(source)
|
|
25
|
+
|
|
26
|
+
destination = File.join(user_dir, file_name)
|
|
27
|
+
hook.copy(source, destination)
|
|
28
|
+
end
|
|
29
|
+
end
|
data/Hooks/vscode/pre.rb
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
require_relative '../core/common'
|
|
5
|
+
|
|
6
|
+
Bootstrap::Hooks.run('vscode', stage: :pre) do |hook|
|
|
7
|
+
user_dir = File.join(Dir.home, 'Library', 'Application Support', 'Code', 'User')
|
|
8
|
+
FileUtils.mkdir_p(user_dir)
|
|
9
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"vscode_custom_css.statusbar": false,
|
|
3
|
+
"vscode_custom_css.imports": [
|
|
4
|
+
"file:///Users/narender/Library/Application Support/Code/User/style.css"
|
|
5
|
+
],
|
|
6
|
+
"[css]": {
|
|
7
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
8
|
+
},
|
|
9
|
+
"[html]": {
|
|
10
|
+
"editor.defaultFormatter": "vscode.html-language-features"
|
|
11
|
+
},
|
|
12
|
+
"[jsonc]": {
|
|
13
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
14
|
+
},
|
|
15
|
+
"[typescriptreact]": {
|
|
16
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
17
|
+
},
|
|
18
|
+
"breadcrumbs.enabled": false,
|
|
19
|
+
"chat.editor.fontSize": 14,
|
|
20
|
+
"chat.editor.wordWrap": "on",
|
|
21
|
+
"diffEditor.hideUnchangedRegions.enabled": true,
|
|
22
|
+
"diffEditor.ignoreTrimWhitespace": false,
|
|
23
|
+
"editor.bracketPairColorization.enabled": false,
|
|
24
|
+
"editor.folding": true,
|
|
25
|
+
"editor.foldingStrategy": "auto",
|
|
26
|
+
"editor.fontFamily": "Cascadia Code, Consolas, 'Courier New', monospace",
|
|
27
|
+
"editor.fontLigatures": true,
|
|
28
|
+
"editor.fontSize": 14,
|
|
29
|
+
"editor.fontWeight": "400",
|
|
30
|
+
"editor.formatOnSave": true,
|
|
31
|
+
"editor.glyphMargin": false,
|
|
32
|
+
"editor.guides.highlightActiveBracketPair": true,
|
|
33
|
+
"editor.guides.indentation": false,
|
|
34
|
+
"editor.hideCursorInOverviewRuler": true,
|
|
35
|
+
"editor.inlineSuggest.enabled": true,
|
|
36
|
+
"editor.lightbulb.enabled": "off",
|
|
37
|
+
"editor.lineNumbers": "on",
|
|
38
|
+
"editor.linkedEditing": true,
|
|
39
|
+
"editor.matchBrackets": "never",
|
|
40
|
+
"editor.minimap.autohide": true,
|
|
41
|
+
"editor.minimap.maxColumn": 80,
|
|
42
|
+
"editor.minimap.renderCharacters": false,
|
|
43
|
+
"editor.multiCursorModifier": "alt",
|
|
44
|
+
"editor.occurrencesHighlight": "off",
|
|
45
|
+
"editor.overviewRulerBorder": false,
|
|
46
|
+
"editor.padding.top": 10,
|
|
47
|
+
"editor.renderWhitespace": "none",
|
|
48
|
+
"editor.scrollbar.horizontal": "hidden",
|
|
49
|
+
"editor.scrollbar.vertical": "auto",
|
|
50
|
+
"editor.scrollbar.verticalScrollbarSize": 0,
|
|
51
|
+
"editor.showFoldingControls": "mouseover",
|
|
52
|
+
"editor.suggestSelection": "first",
|
|
53
|
+
"explorer.compactFolders": false,
|
|
54
|
+
"explorer.fileNesting.enabled": true,
|
|
55
|
+
"explorer.fileNesting.expand": false,
|
|
56
|
+
"explorer.openEditors.visible": 1,
|
|
57
|
+
"files.autoSave": "afterDelay",
|
|
58
|
+
"files.autoSaveDelay": 10000,
|
|
59
|
+
"files.exclude": {
|
|
60
|
+
"/.classpath": true,
|
|
61
|
+
"/.factorypath": true,
|
|
62
|
+
"/.project": true,
|
|
63
|
+
"/.settings": true
|
|
64
|
+
},
|
|
65
|
+
"files.watcherExclude": {
|
|
66
|
+
"/.git/objects/": true,
|
|
67
|
+
"/node_modules/": true
|
|
68
|
+
},
|
|
69
|
+
"git.autofetch": true,
|
|
70
|
+
"redhat.telemetry.enabled": false,
|
|
71
|
+
"scm.diffDecorations": "none",
|
|
72
|
+
"scm.showIncomingChanges": "always",
|
|
73
|
+
"scm.showOutgoingChanges": "always",
|
|
74
|
+
"terminal.integrated.cursorStyle": "block",
|
|
75
|
+
"terminal.integrated.defaultLocation": "view",
|
|
76
|
+
"terminal.integrated.defaultProfile.windows": "PowerShell",
|
|
77
|
+
"terminal.integrated.env.windows": {},
|
|
78
|
+
"terminal.integrated.fontFamily": "FiraCode Nerd Font, Consolas, 'Courier New', monospace",
|
|
79
|
+
"terminal.integrated.fontSize": 14,
|
|
80
|
+
"terminal.integrated.fontWeight": "500",
|
|
81
|
+
"terminal.integrated.gpuAcceleration": "on",
|
|
82
|
+
"terminal.integrated.lineHeight": 1.1,
|
|
83
|
+
"terminal.integrated.persistentSessionReviveProcess": "onExitAndWindowClose",
|
|
84
|
+
"terminal.integrated.profiles.windows": {
|
|
85
|
+
"Command Prompt": {
|
|
86
|
+
"args": [],
|
|
87
|
+
"icon": "terminal-powershell",
|
|
88
|
+
"path": [
|
|
89
|
+
"${env:windir}\\Sysnative\\powershell",
|
|
90
|
+
"${env:windir}\\System32\\powershell.exe"
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
"Git Bash": {
|
|
94
|
+
"source": "Git Bash"
|
|
95
|
+
},
|
|
96
|
+
"PowerShell": {
|
|
97
|
+
"icon": "terminal-powershell",
|
|
98
|
+
"source": "PowerShell"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"terminal.integrated.scrollback": 10000,
|
|
102
|
+
"terminal.integrated.shellIntegration.decorationsEnabled": "never",
|
|
103
|
+
"terminal.integrated.tabs.enabled": true,
|
|
104
|
+
"terminal.integrated.tabs.location": "right",
|
|
105
|
+
"window.autoDetectColorScheme": true,
|
|
106
|
+
"window.commandCenter": true,
|
|
107
|
+
"window.density.editorTabHeight": "compact",
|
|
108
|
+
"window.newWindowDimensions": "inherit",
|
|
109
|
+
"window.zoomPerWindow": true,
|
|
110
|
+
"workbench.activityBar.location": "hidden",
|
|
111
|
+
"workbench.colorCustomizations": {
|
|
112
|
+
"[mono-cl]": {
|
|
113
|
+
"editorLineNumber.foreground": "#4b4b4b"
|
|
114
|
+
},
|
|
115
|
+
"[Violaceous (rainglow)]": {
|
|
116
|
+
"editorGutter.background": "#242038",
|
|
117
|
+
"terminal.background": "#242038",
|
|
118
|
+
"titleBar.activeBackground": "#242038",
|
|
119
|
+
"titleBar.activeForeground": "#ffffff"
|
|
120
|
+
},
|
|
121
|
+
"window.titleBarStyle": ""
|
|
122
|
+
},
|
|
123
|
+
"workbench.colorTheme": "Catppuccin Mocha",
|
|
124
|
+
"workbench.editor.enablePreview": true,
|
|
125
|
+
"workbench.iconTheme": "catppuccin-mocha",
|
|
126
|
+
"workbench.layoutControl.enabled": false,
|
|
127
|
+
"workbench.layoutControl.type": "both",
|
|
128
|
+
"workbench.panel.defaultLocation": "bottom",
|
|
129
|
+
"workbench.preferredDarkColorTheme": "Catppuccin Mocha",
|
|
130
|
+
"workbench.preferredHighContrastLightColorTheme": "Catppuccin Mocha",
|
|
131
|
+
"workbench.preferredLightColorTheme": "Catppuccin Mocha",
|
|
132
|
+
"workbench.productIconTheme": "fluent-icons",
|
|
133
|
+
"workbench.reduceMotion": "on",
|
|
134
|
+
"workbench.sideBar.location": "left",
|
|
135
|
+
"workbench.startupEditor": "none",
|
|
136
|
+
"workbench.statusBar.visible": false,
|
|
137
|
+
"workbench.tree.renderIndentGuides": "none",
|
|
138
|
+
"workbench.view.alwaysShowHeaderActions": true
|
|
139
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
.quick-input-widget {
|
|
2
|
+
position: fixed !important;
|
|
3
|
+
top: 45% !important;
|
|
4
|
+
left: 65% !important;
|
|
5
|
+
transform: translate(-50%, -50%) !important;
|
|
6
|
+
width: 50% !important;
|
|
7
|
+
background-color: #0ff !important; /* Neon blue background */
|
|
8
|
+
box-shadow: 0 0 10px #0ff, 0 0 20px #0ff, 0 0 30px #0ff, 0 0 40px #0ff !important; /* Neon blue glow */
|
|
9
|
+
color: #000 !important; /* Text color */
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* Adjust the color of the items in the input widget list */
|
|
13
|
+
.quick-input-widget .quick-input-list .monaco-list-row {
|
|
14
|
+
color: #fff !important; /* White text color for better readability */
|
|
15
|
+
background-color: #333 !important; /* Dark background for contrast */
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* Adjust the color of the selected item */
|
|
19
|
+
.quick-input-widget .quick-input-list .monaco-list-row.focused {
|
|
20
|
+
background-color: #555 !important; /* Slightly lighter background for the selected item */
|
|
21
|
+
color: #0ff !important; /* Neon blue text color for the selected item */
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.activity-bar .monaco-action-bar .actions-container {
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-direction: column-reverse;
|
|
27
|
+
height: 100%;
|
|
28
|
+
justify-content: flex-end;
|
|
29
|
+
}
|
data/Hooks/wins/pre.rb
ADDED
data/Hooks/zed/pre.rb
ADDED
data/Hooks/zellij/pre.rb
ADDED
data/Hooks/zoxide/pre.rb
ADDED
data/Hooks/zsh/pre.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../core/common'
|
|
4
|
+
|
|
5
|
+
Bootstrap::Hooks.run('zsh', stage: :pre) do |hook|
|
|
6
|
+
zap_dir = File.join(Dir.home, '.local', 'share', 'zap')
|
|
7
|
+
unless Dir.exist?(zap_dir)
|
|
8
|
+
hook.run('curl -s https://raw.githubusercontent.com/zap-zsh/zap/master/install.zsh | zsh -s -- --branch release-v1', allow_failure: true)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
zap_script = File.join(ENV.fetch('XDG_DATA_HOME', File.join(Dir.home, '.local', 'share')), 'zap', 'zap.zsh')
|
|
12
|
+
if File.exist?(zap_script) && File.exist?(File.join(Dir.home, '.zshrc'))
|
|
13
|
+
hook.remove_path(File.join(Dir.home, '.zshrc'))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
%w[.zprofile .profile .zshenv .zsh_history].each do |file|
|
|
17
|
+
hook.remove_path(File.join(Dir.home, file))
|
|
18
|
+
end
|
|
19
|
+
end
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Narender
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Dotfiles TUI
|
|
2
|
+
|
|
3
|
+
A beautiful, interactive terminal UI for managing dotfiles, installing packages, and bootstrapping your development environment.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### From RubyGems (Recommended)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
gem install dotfiles-tui
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### From Source
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
git clone https://github.com/yourusername/dotfiles.git
|
|
17
|
+
cd dotfiles/dotfiles.ruby
|
|
18
|
+
gem build dotfiles-tui.gemspec
|
|
19
|
+
gem install ./dotfiles-tui-0.0.1.gem
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
Simply run the command to launch the interactive menu:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
dotfiles-tui
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Command-line Options
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
dotfiles-tui [options]
|
|
34
|
+
|
|
35
|
+
Options:
|
|
36
|
+
-a, --all Run all tasks (Link → Install → Link)
|
|
37
|
+
-l, --link Run stow for linking
|
|
38
|
+
-u, --unlink Run stow for unlinking
|
|
39
|
+
-c, --cask Run cask installer
|
|
40
|
+
-f, --formula Run formula installer
|
|
41
|
+
-m, --mos Install Mac App Store Apps
|
|
42
|
+
-d, --dry-run Run in dry-run mode (no changes)
|
|
43
|
+
--secrets-path PATH Path to secrets directory (default: ~/Documents/Secrets)
|
|
44
|
+
-h, --help Display help message
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Examples
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Interactive mode (default)
|
|
51
|
+
dotfiles-tui
|
|
52
|
+
|
|
53
|
+
# Install formulae only
|
|
54
|
+
dotfiles-tui --formula
|
|
55
|
+
|
|
56
|
+
# Dry run to see what would happen
|
|
57
|
+
dotfiles-tui --all --dry-run
|
|
58
|
+
|
|
59
|
+
# Link configs with custom secrets path
|
|
60
|
+
dotfiles-tui --link --secrets-path ~/my-secrets
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Features
|
|
64
|
+
|
|
65
|
+
- 🎨 **Beautiful TUI** with animated spinners and clean output
|
|
66
|
+
- 📦 **Smart Installation** - skips already installed packages
|
|
67
|
+
- 🔗 **Intelligent Linking** - detects existing symlinks
|
|
68
|
+
- 🔐 **Secrets Management** - inject private configs from external directory
|
|
69
|
+
- ⚡ **Fast** - optimized to skip redundant operations
|
|
70
|
+
- 🧪 **Dry Run Mode** - preview changes before applying
|
|
71
|
+
|
|
72
|
+
## Requirements
|
|
73
|
+
|
|
74
|
+
- Ruby >= 2.7.0
|
|
75
|
+
- macOS (for Homebrew features)
|
|
76
|
+
- GNU Stow (auto-installed if missing)
|
|
77
|
+
|
|
78
|
+
## Development
|
|
79
|
+
|
|
80
|
+
### Building Locally
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
gem build dotfiles-tui.gemspec
|
|
84
|
+
gem install ./dotfiles-tui-0.0.1.gem
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Publishing
|
|
88
|
+
|
|
89
|
+
The gem is automatically published to RubyGems when you push a version tag:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Update version in lib/dotfiles_tui/version.rb
|
|
93
|
+
# Commit changes
|
|
94
|
+
git tag v0.0.1
|
|
95
|
+
git push origin v0.0.1
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## License
|
|
99
|
+
|
|
100
|
+
MIT License - see [LICENSE](LICENSE) for details
|
data/bin/dotfiles-tui
ADDED
data/bootstrap.rb
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# frozen_string_literal: true
|
|
4
|
+
|
|
5
|
+
# Set up the Bundler environment
|
|
6
|
+
require 'bundler/setup'
|
|
7
|
+
require 'optparse'
|
|
8
|
+
|
|
9
|
+
require_relative './Hooks/core/common'
|
|
10
|
+
require_relative './Hooks/core/library'
|
|
11
|
+
|
|
12
|
+
# Load .env file if it exists
|
|
13
|
+
env_file = File.join(File.expand_path(__dir__), '.env')
|
|
14
|
+
if File.exist?(env_file)
|
|
15
|
+
File.foreach(env_file) do |line|
|
|
16
|
+
next if line.strip.start_with?('#') || line.strip.empty?
|
|
17
|
+
|
|
18
|
+
key, value = line.strip.split('=', 2)
|
|
19
|
+
ENV[key] = value if key && value
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
module Bootstrap
|
|
25
|
+
SCRIPT_DIR = File.expand_path(__dir__)
|
|
26
|
+
HOOKS_DIR = File.join(SCRIPT_DIR, 'Hooks')
|
|
27
|
+
CONFIGS_DIR = File.join(SCRIPT_DIR, 'Configs')
|
|
28
|
+
CORE_DIR = File.join(HOOKS_DIR, 'core')
|
|
29
|
+
|
|
30
|
+
ENV['SCRIPT_DIR'] = SCRIPT_DIR
|
|
31
|
+
ENV['HOOKS_DIR'] = HOOKS_DIR
|
|
32
|
+
ENV['CONFIGS_DIR'] = CONFIGS_DIR
|
|
33
|
+
ENV['CORE_DIR'] = CORE_DIR
|
|
34
|
+
|
|
35
|
+
class CLI
|
|
36
|
+
attr_reader :options
|
|
37
|
+
|
|
38
|
+
def initialize
|
|
39
|
+
@options = {
|
|
40
|
+
link: false,
|
|
41
|
+
unlink: false,
|
|
42
|
+
cask: false,
|
|
43
|
+
formula: false,
|
|
44
|
+
mos: false,
|
|
45
|
+
dry_run: false,
|
|
46
|
+
all: false,
|
|
47
|
+
secrets_path: File.join(Dir.home, 'Documents', 'Secrets')
|
|
48
|
+
}
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def run
|
|
52
|
+
parse_arguments
|
|
53
|
+
validate_options
|
|
54
|
+
execute
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
def display_help
|
|
60
|
+
puts <<~HELP
|
|
61
|
+
Usage: bootstrap.rb [options]
|
|
62
|
+
Options:
|
|
63
|
+
-a, --all Run all tasks (Link -> Install -> Link)
|
|
64
|
+
-l, --link Run stow for linking
|
|
65
|
+
-u, --unlink Run stow for unlinking
|
|
66
|
+
-c, --cask Run cask installer
|
|
67
|
+
-f, --formula Run formula installer
|
|
68
|
+
-m, --mos Install Mac App Store Apps
|
|
69
|
+
-d, --dry-run Run in dry-run mode (no changes)
|
|
70
|
+
--secrets-path PATH Path to secrets directory (default: ~/Documents/Secrets)
|
|
71
|
+
-h, --help Display this help message
|
|
72
|
+
HELP
|
|
73
|
+
exit
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def parse_arguments
|
|
77
|
+
OptionParser.new do |opts|
|
|
78
|
+
opts.banner = 'Usage: bootstrap.rb [options]'
|
|
79
|
+
|
|
80
|
+
opts.on('-a', '--all', 'Run all tasks') { @options[:all] = true }
|
|
81
|
+
opts.on('-l', '--link', 'Run stow for linking') { @options[:link] = true }
|
|
82
|
+
opts.on('-u', '--unlink', 'Run stow for unlinking') { @options[:unlink] = true }
|
|
83
|
+
opts.on('-c', '--cask', 'Run cask installer') { @options[:cask] = true }
|
|
84
|
+
opts.on('-f', '--formula', 'Run formula installer') { @options[:formula] = true }
|
|
85
|
+
opts.on('-m', '--mos', 'Install Mac App Store Apps') { @options[:mos] = true }
|
|
86
|
+
opts.on('-d', '--dry-run', 'Run in dry-run mode') { @options[:dry_run] = true }
|
|
87
|
+
opts.on('--secrets-path PATH', 'Path to secrets directory') { |path| @options[:secrets_path] = path }
|
|
88
|
+
opts.on('-h', '--help', 'Display help') { display_help }
|
|
89
|
+
|
|
90
|
+
opts.parse!
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def validate_options
|
|
95
|
+
# If no options provided, show interactive menu
|
|
96
|
+
unless @options.values.any? { |v| v == true } # Check if any boolean flag is set
|
|
97
|
+
require_relative 'Hooks/core/lib/menu'
|
|
98
|
+
|
|
99
|
+
menu_options = [
|
|
100
|
+
{ label: 'Install Everything (Recommended)', value: :all },
|
|
101
|
+
{ label: 'Link Configs Only', value: :link },
|
|
102
|
+
{ label: 'Install Formulae', value: :formula },
|
|
103
|
+
{ label: 'Install Casks', value: :cask },
|
|
104
|
+
{ label: 'Install App Store Apps', value: :mos },
|
|
105
|
+
{ label: 'Unlink Configs', value: :unlink },
|
|
106
|
+
{ label: 'Dry Run (Test All)', value: :dry_run },
|
|
107
|
+
{ label: 'Exit', value: :exit }
|
|
108
|
+
]
|
|
109
|
+
|
|
110
|
+
selection = Bootstrap::Menu.new(menu_options).show
|
|
111
|
+
|
|
112
|
+
if selection == :exit
|
|
113
|
+
exit
|
|
114
|
+
elsif selection == :dry_run
|
|
115
|
+
@options[:dry_run] = true
|
|
116
|
+
@options[:all] = true
|
|
117
|
+
else
|
|
118
|
+
@options[selection] = true
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
if @options[:all]
|
|
123
|
+
return
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
if @options[:link] && @options[:unlink]
|
|
127
|
+
abort 'Error: Cannot specify --link and --unlink together.'
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
if @options[:cask] && @options[:unlink]
|
|
131
|
+
abort 'Error: Cannot specify --cask and --unlink together.'
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
if @options[:formula] && @options[:unlink]
|
|
135
|
+
abort 'Error: Cannot specify --formula and --unlink together.'
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def execute
|
|
140
|
+
Bootstrap::Logger.init
|
|
141
|
+
configurator = Bootstrap::Configurator.new(dry_run: @options[:dry_run])
|
|
142
|
+
run_all = @options[:all]
|
|
143
|
+
|
|
144
|
+
# 0. Inject Secrets
|
|
145
|
+
if run_all || @options[:link]
|
|
146
|
+
configurator.inject_secrets(@options[:secrets_path])
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# 1. Prerequisites & Install
|
|
150
|
+
if run_all || @options[:formula] || @options[:cask] || @options[:mos]
|
|
151
|
+
Bootstrap::Display.header('Installing prerequisites')
|
|
152
|
+
configurator.pre_requisite
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# 2. Install Formulae
|
|
156
|
+
if run_all || @options[:formula]
|
|
157
|
+
configurator.install_brew_formulas
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# 3. Install Casks
|
|
161
|
+
if run_all || @options[:cask]
|
|
162
|
+
configurator.install_brew_casks
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# 4. Install MOS Apps
|
|
166
|
+
if run_all || @options[:mos]
|
|
167
|
+
configurator.install_mas_apps
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# 5. Unlink (only if explicitly requested)
|
|
171
|
+
if @options[:unlink]
|
|
172
|
+
configurator.unlink_configs
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# 6. Link (Final)
|
|
176
|
+
if run_all || @options[:link]
|
|
177
|
+
Bootstrap::Display.header('Linking Configs')
|
|
178
|
+
configurator.link_configs
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
Bootstrap::Display.success('All tasks completed successfully!')
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
Bootstrap::CLI.new.run
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'lib/dotfiles_tui/version'
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = 'dotfiles-tui'
|
|
7
|
+
spec.version = DotfilesTui::VERSION
|
|
8
|
+
spec.authors = ['Narender']
|
|
9
|
+
spec.email = ['narender@slrsoft.com']
|
|
10
|
+
|
|
11
|
+
spec.summary = 'A TUI-based dotfiles bootstrap and management tool'
|
|
12
|
+
spec.description = 'Interactive terminal UI for managing dotfiles, installing packages via Homebrew, and linking configurations with GNU Stow'
|
|
13
|
+
spec.homepage = 'https://github.com/mr-narender/dotfiles-tui'
|
|
14
|
+
spec.license = 'MIT'
|
|
15
|
+
spec.required_ruby_version = '>= 2.6.0'
|
|
16
|
+
|
|
17
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
18
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
|
19
|
+
spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/main/CHANGELOG.md"
|
|
20
|
+
|
|
21
|
+
# Specify which files should be added to the gem when it is released.
|
|
22
|
+
# Use git to get all tracked files, which respects .gitignore
|
|
23
|
+
spec.files = if Dir.exist?('.git')
|
|
24
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
|
25
|
+
f.match(%r{^(test|spec|features)/}) ||
|
|
26
|
+
f.include?('_Conflict') ||
|
|
27
|
+
f.start_with?('config/') ||
|
|
28
|
+
f == 'config'
|
|
29
|
+
end
|
|
30
|
+
else
|
|
31
|
+
Dir.glob('{bin,lib,Hooks,Configs}/**/*', File::FNM_DOTMATCH).reject do |f|
|
|
32
|
+
File.directory?(f) ||
|
|
33
|
+
f.include?('.DS_Store') ||
|
|
34
|
+
f.include?('_Conflict')
|
|
35
|
+
end + %w[bootstrap.rb Gemfile Gemfile.lock README.md LICENSE]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
spec.bindir = 'bin'
|
|
39
|
+
spec.executables = ['dotfiles-tui']
|
|
40
|
+
spec.require_paths = ['lib']
|
|
41
|
+
|
|
42
|
+
# Runtime dependencies
|
|
43
|
+
spec.add_dependency 'childprocess', '~> 4.1'
|
|
44
|
+
|
|
45
|
+
# Development dependencies
|
|
46
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
|
47
|
+
end
|