initial commit
This commit is contained in:
65
CHECKLIST.md
Normal file
65
CHECKLIST.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# Dotfiles Checklist — Linux Mint 22.3
|
||||||
|
|
||||||
|
Planned structure (inspired by jonhoo, adapted for Cinnamon/apt):
|
||||||
|
|
||||||
|
```
|
||||||
|
configs/
|
||||||
|
├── CHECKLIST.md ← this file
|
||||||
|
├── shell/
|
||||||
|
│ ├── .bashrc ← interactive shell: prompt, aliases, history, completions
|
||||||
|
│ ├── .bash_profile ← login shell: sources .bashrc, sets PATH
|
||||||
|
│ └── .bash_aliases ← extracted aliases (sourced from .bashrc)
|
||||||
|
├── tmux/
|
||||||
|
│ └── .tmux.conf ← prefix, keybinds, catppuccin theme, tpm plugins
|
||||||
|
├── alacritty/
|
||||||
|
│ └── .config/alacritty/alacritty.toml ← font, colors, keybinds, window
|
||||||
|
├── git/
|
||||||
|
│ └── .gitconfig ← user, aliases, diff algorithm, merge tool
|
||||||
|
└── install/
|
||||||
|
├── bootstrap.sh ← run first: installs stow + calls all install scripts
|
||||||
|
├── apt-packages.sh ← base system packages via apt
|
||||||
|
├── rust.sh ← rustup + cargo tools (alacritty, bat, fd, ripgrep, etc.)
|
||||||
|
├── docker.sh ← docker engine + lazydocker
|
||||||
|
├── node.sh ← nvm + node LTS + pnpm
|
||||||
|
└── tools.sh ← misc: stow, fzf, starship, zoxide, etc.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
### Shell (`configs/shell/`)
|
||||||
|
- [ ] `.bashrc` — merge current custom bits (PS1, pnpm, nvm, java, jbang, deno paths) into a clean, commented version
|
||||||
|
- [ ] `.bash_profile` — source `.bashrc` for login shells, set XDG env vars
|
||||||
|
- [ ] `.bash_aliases` — ls, git, docker, cargo shortcuts
|
||||||
|
|
||||||
|
### Tmux (`configs/tmux/`)
|
||||||
|
- [ ] `.tmux.conf` — set prefix (Ctrl+S like jonhoo, or Ctrl+A), vi keys, catppuccin theme, tpm bootstrap, pane navigation
|
||||||
|
- tpm already in `~/.tmux/plugins/tpm`
|
||||||
|
- catppuccin already in `~/.tmux/plugins/catppuccin`
|
||||||
|
|
||||||
|
### Alacritty (`configs/alacritty/`)
|
||||||
|
- [ ] `alacritty.toml` — codify current setup (FiraMono Nerd Font Mono 15pt, maximized, no decorations, Alt+C/V)
|
||||||
|
- [ ] add catppuccin color scheme import
|
||||||
|
|
||||||
|
### Git (`configs/git/`)
|
||||||
|
- [ ] `.gitconfig` — user info, useful aliases (lg, s, f), patience diff, merge tool
|
||||||
|
|
||||||
|
### Install Scripts (`configs/install/`)
|
||||||
|
- [ ] `bootstrap.sh` — entry point: sudo apt update, calls sub-scripts, runs stow
|
||||||
|
- [ ] `apt-packages.sh` — git, curl, wget, build-essential, tmux, fzf, ripgrep, fd-find, bat, stow, jq, unzip
|
||||||
|
- [ ] `rust.sh` — check/install rustup, `rustup toolchain install stable`, cargo tools: `alacritty bat fd-find ripgrep cargo-watch`
|
||||||
|
- [ ] `docker.sh` — check/install docker engine via apt, add user to docker group, install lazydocker
|
||||||
|
- [ ] `node.sh` — check/install nvm, install node LTS, install pnpm
|
||||||
|
- [ ] `tools.sh` — starship prompt, zoxide (cd replacement), fzf shell integration
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tools already installed on this machine (skip install steps)
|
||||||
|
- tmux, alacritty, rustup, docker, lazydocker, git, curl
|
||||||
|
- nvm + node, pnpm, deno, jbang, Java (corretto-23)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
- Use `stow -Sv <dir>` to symlink a config group into `~`
|
||||||
|
- jonhoo reference configs are in `../jonhoo/` — check there for inspiration
|
||||||
|
- Keep catppuccin as the color theme (already in tmux, alacritty has FiraMono Nerd Font)
|
||||||
80
alacritty/.config/alacritty/alacritty.toml
Normal file
80
alacritty/.config/alacritty/alacritty.toml
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
# ─── window ───────────────────────────────────────────────────────────────────
|
||||||
|
[window]
|
||||||
|
startup_mode = "Maximized"
|
||||||
|
decorations = "None"
|
||||||
|
padding = { x = 8, y = 8 }
|
||||||
|
|
||||||
|
# ─── font ─────────────────────────────────────────────────────────────────────
|
||||||
|
[font]
|
||||||
|
size = 15.0
|
||||||
|
|
||||||
|
[font.normal]
|
||||||
|
family = "FiraMono Nerd Font Mono"
|
||||||
|
style = "Regular"
|
||||||
|
|
||||||
|
[font.bold]
|
||||||
|
family = "FiraMono Nerd Font Mono"
|
||||||
|
style = "Bold"
|
||||||
|
|
||||||
|
[font.italic]
|
||||||
|
family = "FiraMono Nerd Font Mono"
|
||||||
|
style = "Italic"
|
||||||
|
|
||||||
|
# ─── scrolling ────────────────────────────────────────────────────────────────
|
||||||
|
[scrolling]
|
||||||
|
history = 10000
|
||||||
|
multiplier = 3
|
||||||
|
|
||||||
|
# ─── selection ────────────────────────────────────────────────────────────────
|
||||||
|
[selection]
|
||||||
|
save_to_clipboard = false
|
||||||
|
|
||||||
|
# ─── cursor ───────────────────────────────────────────────────────────────────
|
||||||
|
[cursor]
|
||||||
|
style = { shape = "Block", blinking = "On" }
|
||||||
|
blink_interval = 500
|
||||||
|
|
||||||
|
# ─── colors: catppuccin mocha ─────────────────────────────────────────────────
|
||||||
|
[colors.primary]
|
||||||
|
background = "#1e1e2e"
|
||||||
|
foreground = "#cdd6f4"
|
||||||
|
|
||||||
|
[colors.cursor]
|
||||||
|
text = "#1e1e2e"
|
||||||
|
cursor = "#f5e0dc"
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = "#45475a"
|
||||||
|
red = "#f38ba8"
|
||||||
|
green = "#a6e3a1"
|
||||||
|
yellow = "#f9e2af"
|
||||||
|
blue = "#89b4fa"
|
||||||
|
magenta = "#f5c2e7"
|
||||||
|
cyan = "#94e2d5"
|
||||||
|
white = "#bac2de"
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = "#585b70"
|
||||||
|
red = "#f38ba8"
|
||||||
|
green = "#a6e3a1"
|
||||||
|
yellow = "#f9e2af"
|
||||||
|
blue = "#89b4fa"
|
||||||
|
magenta = "#f5c2e7"
|
||||||
|
cyan = "#94e2d5"
|
||||||
|
white = "#a6adc8"
|
||||||
|
|
||||||
|
# ─── keybindings ──────────────────────────────────────────────────────────────
|
||||||
|
[[keyboard.bindings]]
|
||||||
|
key = "V"
|
||||||
|
mods = "Alt"
|
||||||
|
action = "Paste"
|
||||||
|
|
||||||
|
[[keyboard.bindings]]
|
||||||
|
key = "C"
|
||||||
|
mods = "Alt"
|
||||||
|
action = "Copy"
|
||||||
|
|
||||||
|
[[keyboard.bindings]]
|
||||||
|
key = "Return"
|
||||||
|
mods = "Alt|Shift"
|
||||||
|
action = "ToggleFullscreen"
|
||||||
32
git/.gitconfig
Normal file
32
git/.gitconfig
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
[user]
|
||||||
|
name = stefiosif
|
||||||
|
email = si.iosifidis@gmail.com
|
||||||
|
|
||||||
|
[core]
|
||||||
|
editor = code --wait
|
||||||
|
autocrlf = input
|
||||||
|
excludesfile = ~/.gitignore_global
|
||||||
|
|
||||||
|
[init]
|
||||||
|
defaultBranch = main
|
||||||
|
|
||||||
|
[push]
|
||||||
|
default = current
|
||||||
|
autoSetupRemote = true
|
||||||
|
|
||||||
|
[pull]
|
||||||
|
rebase = true
|
||||||
|
|
||||||
|
[merge]
|
||||||
|
tool = code
|
||||||
|
conflictstyle = diff3
|
||||||
|
|
||||||
|
[diff]
|
||||||
|
algorithm = patience
|
||||||
|
colorMoved = default
|
||||||
|
|
||||||
|
[color]
|
||||||
|
ui = auto
|
||||||
|
|
||||||
|
[credential]
|
||||||
|
helper = store
|
||||||
22
git/.gitignore_global
Normal file
22
git/.gitignore_global
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# ─── OS ─── #
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
desktop.ini
|
||||||
|
|
||||||
|
# ─── editors ─── #
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# ─── rust ─── #
|
||||||
|
target/
|
||||||
|
|
||||||
|
# ─── node ─── #
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# ─── env / secrets ─── #
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
44
install/apt-packages.sh
Executable file
44
install/apt-packages.sh
Executable file
@@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "==> Installing base apt packages..."
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
|
||||||
|
PACKAGES=(
|
||||||
|
# essentials
|
||||||
|
build-essential
|
||||||
|
curl
|
||||||
|
wget
|
||||||
|
git
|
||||||
|
unzip
|
||||||
|
zip
|
||||||
|
stow
|
||||||
|
|
||||||
|
# terminal
|
||||||
|
tmux
|
||||||
|
|
||||||
|
# search / file tools
|
||||||
|
ripgrep
|
||||||
|
fd-find
|
||||||
|
tree
|
||||||
|
|
||||||
|
# network
|
||||||
|
openssh-client
|
||||||
|
rsync
|
||||||
|
|
||||||
|
# libs often needed for compiling things
|
||||||
|
pkg-config
|
||||||
|
libssl-dev
|
||||||
|
libfontconfig1-dev
|
||||||
|
)
|
||||||
|
|
||||||
|
sudo apt install -y "${PACKAGES[@]}"
|
||||||
|
|
||||||
|
if ! command -v fd &>/dev/null && command -v fdfind &>/dev/null; then
|
||||||
|
mkdir -p "$HOME/.local/bin"
|
||||||
|
ln -sf "$(which fdfind)" "$HOME/.local/bin/fd"
|
||||||
|
echo " linked fdfind -> fd"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> apt packages done."
|
||||||
49
install/bootstrap.sh
Executable file
49
install/bootstrap.sh
Executable file
@@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# bootstrap.sh — run this on a fresh Linux Mint install
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
DOTFILES_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
CONFIGS_DIR="$DOTFILES_DIR/configs"
|
||||||
|
|
||||||
|
echo "==> Dotfiles bootstrap"
|
||||||
|
echo " dotfiles: $DOTFILES_DIR"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# ─── install packages and tools ───────────────────────────────────────────────
|
||||||
|
bash "$CONFIGS_DIR/install/apt-packages.sh"
|
||||||
|
bash "$CONFIGS_DIR/install/rust.sh"
|
||||||
|
bash "$CONFIGS_DIR/install/docker.sh"
|
||||||
|
bash "$CONFIGS_DIR/install/node.sh"
|
||||||
|
bash "$CONFIGS_DIR/install/tools.sh"
|
||||||
|
bash "$CONFIGS_DIR/install/fonts.sh"
|
||||||
|
|
||||||
|
# ─── symlink configs with stow ────────────────────────────────────────────────
|
||||||
|
echo ""
|
||||||
|
echo "==> Symlinking configs with stow..."
|
||||||
|
|
||||||
|
cd "$CONFIGS_DIR"
|
||||||
|
|
||||||
|
for group in shell tmux alacritty git vscode; do
|
||||||
|
echo " stow $group -> ~"
|
||||||
|
stow -v --target="$HOME" "$group"
|
||||||
|
done
|
||||||
|
|
||||||
|
# ─── tmux plugins ─────────────────────────────────────────────────────────────
|
||||||
|
echo ""
|
||||||
|
echo "==> Installing tmux plugins (tpm)..."
|
||||||
|
if [ ! -d "$HOME/.tmux/plugins/tpm" ]; then
|
||||||
|
git clone https://github.com/tmux-plugins/tpm "$HOME/.tmux/plugins/tpm"
|
||||||
|
fi
|
||||||
|
# install plugins headlessly
|
||||||
|
"$HOME/.tmux/plugins/tpm/bin/install_plugins" || true
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==> Installing VSCode extensions..."
|
||||||
|
if command -v code &>/dev/null; then
|
||||||
|
grep -v '^#' "$CONFIGS_DIR/vscode/extensions.txt" | grep -v '^$' | xargs -L1 code --install-extension
|
||||||
|
else
|
||||||
|
echo " code not found, skipping extensions"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==> Done! Open a new terminal or run: source ~/.bashrc"
|
||||||
20
install/docker.sh
Executable file
20
install/docker.sh
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "==> Setting up Docker..."
|
||||||
|
|
||||||
|
if command -v docker &>/dev/null; then
|
||||||
|
echo " docker already installed: $(docker --version)"
|
||||||
|
else
|
||||||
|
echo " installing docker engine..."
|
||||||
|
# official docker install script (works on Ubuntu/Mint)
|
||||||
|
curl -fsSL https://get.docker.com | sudo sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
# add current user to docker group so we don't need sudo
|
||||||
|
if ! groups | grep -q docker; then
|
||||||
|
sudo usermod -aG docker "$USER"
|
||||||
|
echo " added $USER to docker group — log out and back in to apply"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Docker done."
|
||||||
27
install/fonts.sh
Executable file
27
install/fonts.sh
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "==> Installing fonts..."
|
||||||
|
|
||||||
|
FONTS_DIR="$HOME/.local/share/fonts"
|
||||||
|
mkdir -p "$FONTS_DIR"
|
||||||
|
|
||||||
|
# FiraCode Nerd Font (includes FiraMono Nerd Font Mono)
|
||||||
|
FIRA_VERSION="3.3.0"
|
||||||
|
FIRA_ZIP="FiraCode.zip"
|
||||||
|
FIRA_URL="https://github.com/ryanoasis/nerd-fonts/releases/download/v${FIRA_VERSION}/${FIRA_ZIP}"
|
||||||
|
|
||||||
|
if fc-list | grep -qi "FiraCode Nerd Font"; then
|
||||||
|
echo " FiraCode Nerd Font already installed, skipping"
|
||||||
|
else
|
||||||
|
echo " downloading FiraCode Nerd Font v${FIRA_VERSION}..."
|
||||||
|
TMP_DIR=$(mktemp -d)
|
||||||
|
curl -fsSL "$FIRA_URL" -o "$TMP_DIR/$FIRA_ZIP"
|
||||||
|
unzip -q "$TMP_DIR/$FIRA_ZIP" -d "$TMP_DIR/fira"
|
||||||
|
cp "$TMP_DIR"/fira/*.ttf "$FONTS_DIR/"
|
||||||
|
rm -rf "$TMP_DIR"
|
||||||
|
fc-cache -f "$FONTS_DIR"
|
||||||
|
echo " FiraCode Nerd Font installed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Fonts done."
|
||||||
29
install/node.sh
Executable file
29
install/node.sh
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "==> Setting up Node.js..."
|
||||||
|
|
||||||
|
export NVM_DIR="$HOME/.nvm"
|
||||||
|
|
||||||
|
if [ -d "$NVM_DIR" ]; then
|
||||||
|
echo " nvm already installed, loading..."
|
||||||
|
. "$NVM_DIR/nvm.sh"
|
||||||
|
else
|
||||||
|
echo " installing nvm..."
|
||||||
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
||||||
|
. "$NVM_DIR/nvm.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " installing node LTS..."
|
||||||
|
nvm install --lts
|
||||||
|
nvm use --lts
|
||||||
|
nvm alias default node
|
||||||
|
|
||||||
|
echo "==> Installing pnpm..."
|
||||||
|
if command -v pnpm &>/dev/null; then
|
||||||
|
echo " pnpm already installed: $(pnpm --version)"
|
||||||
|
else
|
||||||
|
npm install -g pnpm
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Node done."
|
||||||
38
install/rust.sh
Executable file
38
install/rust.sh
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "==> Setting up Rust..."
|
||||||
|
|
||||||
|
if command -v rustup &>/dev/null; then
|
||||||
|
echo " rustup already installed, updating..."
|
||||||
|
rustup update stable
|
||||||
|
else
|
||||||
|
echo " installing rustup..."
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path
|
||||||
|
source "$HOME/.cargo/env"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rustup toolchain install stable
|
||||||
|
rustup component add clippy rustfmt rust-analyzer
|
||||||
|
|
||||||
|
echo "==> Installing cargo tools..."
|
||||||
|
|
||||||
|
CARGO_TOOLS=(
|
||||||
|
cargo-watch # watch for changes and re-run
|
||||||
|
cargo-expand # expand macros
|
||||||
|
cargo-nextest # faster test runner
|
||||||
|
cargo-flamegraph # CPU profiling / flamegraphs
|
||||||
|
cargo-deny # lint deps (licenses, duplicates, advisories)
|
||||||
|
cargo-mutants # mutation testing
|
||||||
|
cargo-audit # check deps for known vulnerabilities
|
||||||
|
)
|
||||||
|
|
||||||
|
for tool in "${CARGO_TOOLS[@]}"; do
|
||||||
|
if cargo install --list | grep -q "^${tool} "; then
|
||||||
|
echo " $tool already installed, skipping"
|
||||||
|
else
|
||||||
|
cargo install "$tool"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "==> Rust done."
|
||||||
11
install/tools.sh
Executable file
11
install/tools.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "==> Installing extra tools..."
|
||||||
|
|
||||||
|
# ─── stow ─────────────────────────────────────────────────────────────────────
|
||||||
|
if ! command -v stow &>/dev/null; then
|
||||||
|
sudo apt install -y stow
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Extra tools done."
|
||||||
22
shell/.bash_aliases
Normal file
22
shell/.bash_aliases
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# ─── navigation ───────────────────────────────────────────────────────────────
|
||||||
|
alias ..='cd ..'
|
||||||
|
alias ...='cd ../..'
|
||||||
|
alias ....='cd ../../..'
|
||||||
|
|
||||||
|
# ─── ls ───────────────────────────────────────────────────────────────────────
|
||||||
|
alias ls='ls --color=auto'
|
||||||
|
alias ll='ls -alF'
|
||||||
|
alias la='ls -A'
|
||||||
|
alias l='ls -CF'
|
||||||
|
|
||||||
|
# ─── grep ─────────────────────────────────────────────────────────────────────
|
||||||
|
alias grep='grep --color=auto'
|
||||||
|
|
||||||
|
# ─── system ───────────────────────────────────────────────────────────────────
|
||||||
|
alias update='sudo apt update && sudo apt upgrade -y'
|
||||||
|
alias install='sudo apt install'
|
||||||
|
alias search='apt search'
|
||||||
|
|
||||||
|
# ─── misc ─────────────────────────────────────────────────────────────────────
|
||||||
|
alias reload='source ~/.bashrc'
|
||||||
|
alias path='echo $PATH | tr ":" "\n"'
|
||||||
13
shell/.bash_profile
Normal file
13
shell/.bash_profile
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# ~/.bash_profile — login shell
|
||||||
|
# source .bashrc for interactive login shells
|
||||||
|
[ -n "$BASH_VERSION" ] && [ -f "$HOME/.bashrc" ] && . "$HOME/.bashrc"
|
||||||
|
|
||||||
|
# ─── XDG ──────────────────────────────────────────────────────────────────────
|
||||||
|
export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
|
export XDG_DATA_HOME="$HOME/.local/share"
|
||||||
|
export XDG_CACHE_HOME="$HOME/.cache"
|
||||||
|
|
||||||
|
# ─── default apps ─────────────────────────────────────────────────────────────
|
||||||
|
export EDITOR="code --wait" # change to nvim if you switch editors
|
||||||
|
export VISUAL="$EDITOR"
|
||||||
|
export BROWSER="google-chrome"
|
||||||
73
shell/.bashrc
Normal file
73
shell/.bashrc
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
# ~/.bashrc — interactive shell config
|
||||||
|
# not interactive? bail out
|
||||||
|
case $- in *i*) ;; *) return ;; esac
|
||||||
|
|
||||||
|
# ─── system defaults ──────────────────────────────────────────────────────────
|
||||||
|
[ -f /etc/bash.bashrc ] && source /etc/bash.bashrc
|
||||||
|
|
||||||
|
# ─── history ──────────────────────────────────────────────────────────────────
|
||||||
|
HISTCONTROL=ignoreboth
|
||||||
|
HISTSIZE=10000
|
||||||
|
HISTFILESIZE=20000
|
||||||
|
HISTIGNORE="clear:bg:fg:cd:cd -:cd ..:exit:date:ls:l:ll:* --help"
|
||||||
|
shopt -s histappend
|
||||||
|
shopt -s checkwinsize
|
||||||
|
|
||||||
|
# ─── prompt ───────────────────────────────────────────────────────────────────
|
||||||
|
# green user, blue path — simple and readable
|
||||||
|
PS1='\[\e[1;32m\]\u\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '
|
||||||
|
|
||||||
|
# ─── colors ───────────────────────────────────────────────────────────────────
|
||||||
|
if [ -x /usr/bin/dircolors ]; then
|
||||||
|
eval "$(dircolors -b ~/.dircolors 2>/dev/null || dircolors -b)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ─── aliases ──────────────────────────────────────────────────────────────────
|
||||||
|
[ -f ~/.bash_aliases ] && source ~/.bash_aliases
|
||||||
|
|
||||||
|
# ─── completions ──────────────────────────────────────────────────────────────
|
||||||
|
if ! shopt -oq posix; then
|
||||||
|
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
||||||
|
. /usr/share/bash-completion/bash_completion
|
||||||
|
elif [ -f /etc/bash_completion ]; then
|
||||||
|
. /etc/bash_completion
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ─── fzf ──────────────────────────────────────────────────────────────────────
|
||||||
|
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
|
||||||
|
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --border"
|
||||||
|
|
||||||
|
# ─── less ─────────────────────────────────────────────────────────────────────
|
||||||
|
export LESS="-R --use-color"
|
||||||
|
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
|
||||||
|
|
||||||
|
# ─── rust / cargo ─────────────────────────────────────────────────────────────
|
||||||
|
[ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env"
|
||||||
|
|
||||||
|
# ─── node / nvm ───────────────────────────────────────────────────────────────
|
||||||
|
export NVM_DIR="$HOME/.nvm"
|
||||||
|
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
||||||
|
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"
|
||||||
|
|
||||||
|
# ─── pnpm ─────────────────────────────────────────────────────────────────────
|
||||||
|
export PNPM_HOME="$HOME/.local/share/pnpm"
|
||||||
|
case ":$PATH:" in
|
||||||
|
*":$PNPM_HOME:"*) ;;
|
||||||
|
*) export PATH="$PNPM_HOME:$PATH" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# ─── deno ─────────────────────────────────────────────────────────────────────
|
||||||
|
[ -f "$HOME/.deno/env" ] && . "$HOME/.deno/env"
|
||||||
|
|
||||||
|
# ─── java ─────────────────────────────────────────────────────────────────────
|
||||||
|
export JAVA_HOME="$HOME/.jdks/corretto-23.0.2"
|
||||||
|
export PATH="$JAVA_HOME/bin:$PATH"
|
||||||
|
|
||||||
|
# ─── jbang ────────────────────────────────────────────────────────────────────
|
||||||
|
export PATH="$HOME/.jbang/bin:$PATH"
|
||||||
|
alias j!=jbang
|
||||||
|
|
||||||
|
# ─── local bin ────────────────────────────────────────────────────────────────
|
||||||
|
[ -d "$HOME/.local/bin" ] && export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
[ -d "$HOME/bin" ] && export PATH="$HOME/bin:$PATH"
|
||||||
19
tmux/.tmux.conf
Normal file
19
tmux/.tmux.conf
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# ─── plugins ──────────────────────────────────────────────────────────────────
|
||||||
|
set -g @plugin 'tmux-plugins/tpm'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||||
|
|
||||||
|
# ─── mouse ────────────────────────────────────────────────────────────────────
|
||||||
|
set -g mouse on
|
||||||
|
|
||||||
|
# ─── navigation ───────────────────────────────────────────────────────────────
|
||||||
|
bind -n C-n next-window
|
||||||
|
bind -n C-p previous-window
|
||||||
|
|
||||||
|
# ─── catppuccin ───────────────────────────────────────────────────────────────
|
||||||
|
set -g @plugin 'catppuccin/tmux'
|
||||||
|
set -g @catppuccin_flavour 'mocha'
|
||||||
|
set -g @catppuccin_window_text " #W"
|
||||||
|
set -g @catppuccin_window_current_text " #W"
|
||||||
|
|
||||||
|
# ─── initialize tpm (keep at bottom) ──────────────────────────────────────────
|
||||||
|
run '~/.tmux/plugins/tpm/tpm'
|
||||||
37
vscode/.config/Code/User/keybindings.json
Normal file
37
vscode/.config/Code/User/keybindings.json
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
// VSCode keybindings
|
||||||
|
[
|
||||||
|
// navigate back/forward with Alt+Left/Right (like browser)
|
||||||
|
{
|
||||||
|
"key": "alt+left",
|
||||||
|
"command": "workbench.action.navigateBack",
|
||||||
|
"when": "canNavigateBack"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+alt+-",
|
||||||
|
"command": "-workbench.action.navigateBack",
|
||||||
|
"when": "canNavigateBack"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "alt+right",
|
||||||
|
"command": "workbench.action.navigateForward",
|
||||||
|
"when": "canNavigateForward"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+-",
|
||||||
|
"command": "-workbench.action.navigateForward",
|
||||||
|
"when": "canNavigateForward"
|
||||||
|
},
|
||||||
|
// shift+enter in terminal sends a line continuation
|
||||||
|
{
|
||||||
|
"key": "shift+enter",
|
||||||
|
"command": "workbench.action.terminal.sendSequence",
|
||||||
|
"args": { "text": "\\\r\n" },
|
||||||
|
"when": "terminalFocus"
|
||||||
|
},
|
||||||
|
// disable default inlay hint escape binding
|
||||||
|
{
|
||||||
|
"key": "escape",
|
||||||
|
"command": "-inlayHints.stopReadingLineWithHint",
|
||||||
|
"when": "isReadingLineWithInlayHints"
|
||||||
|
}
|
||||||
|
]
|
||||||
58
vscode/.config/Code/User/settings.json
Normal file
58
vscode/.config/Code/User/settings.json
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"workbench.colorTheme": "ZED One Theme Dark",
|
||||||
|
"workbench.startupEditor": "none",
|
||||||
|
"workbench.editor.splitInGroupLayout": "vertical",
|
||||||
|
"workbench.editor.wrapTabs": true,
|
||||||
|
|
||||||
|
// editor
|
||||||
|
"editor.fontFamily": "'IBM Plex Mono', 'FiraCode', 'DejaVu Sans Mono', monospace",
|
||||||
|
"editor.fontWeight": "500",
|
||||||
|
"editor.fontSize": 17,
|
||||||
|
"editor.minimap.enabled": false,
|
||||||
|
"editor.inlayHints.enabled": "on",
|
||||||
|
|
||||||
|
// terminal
|
||||||
|
"terminal.integrated.fontSize": 15.5,
|
||||||
|
"debug.console.fontSize": 15.5,
|
||||||
|
|
||||||
|
// git
|
||||||
|
"git.enableSmartCommit": true,
|
||||||
|
"git.autofetch": true,
|
||||||
|
"git.confirmSync": false,
|
||||||
|
"git.openRepositoryInParentFolders": "always",
|
||||||
|
|
||||||
|
// rust
|
||||||
|
"rust-analyzer.checkOnSave": true,
|
||||||
|
|
||||||
|
// svelte
|
||||||
|
"svelte.enable-ts-plugin": true,
|
||||||
|
|
||||||
|
// claude code
|
||||||
|
"claudeCode.preferredLocation": "panel",
|
||||||
|
"claudeCode.useTerminal": true,
|
||||||
|
|
||||||
|
// misc
|
||||||
|
"extensions.ignoreRecommendations": true,
|
||||||
|
"explorer.confirmDelete": false,
|
||||||
|
"explorer.confirmDragAndDrop": false,
|
||||||
|
"diffEditor.ignoreTrimWhitespace": false,
|
||||||
|
"security.workspace.trust.untrustedFiles": "open",
|
||||||
|
"lldb.suppressUpdateNotifications": true,
|
||||||
|
"dotenv.enableAutocloaking": false,
|
||||||
|
"liveServer.settings.donotShowInfoMsg": true,
|
||||||
|
"liveServer.settings.donotVerifyTags": true,
|
||||||
|
|
||||||
|
"files.associations": {
|
||||||
|
".env*": "dotenv"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorLens.enabledDiagnosticLevels": ["error", "warning", "info", "hint"],
|
||||||
|
|
||||||
|
"[html]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
|
||||||
|
"editor.tokenColorCustomizations": {
|
||||||
|
"textMateRules": []
|
||||||
|
}
|
||||||
|
}
|
||||||
57
vscode/extensions.txt
Normal file
57
vscode/extensions.txt
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# VSCode extensions
|
||||||
|
# Install all with: cat extensions.txt | xargs -L1 code --install-extension
|
||||||
|
|
||||||
|
# AI
|
||||||
|
anthropic.claude-code
|
||||||
|
github.copilot-chat
|
||||||
|
|
||||||
|
# themes
|
||||||
|
arrrrny.zed-one-theme
|
||||||
|
drewxs.tokyo-night-dark
|
||||||
|
enkia.tokyo-night
|
||||||
|
|
||||||
|
# rust
|
||||||
|
rust-lang.rust-analyzer
|
||||||
|
tauri-apps.tauri-vscode
|
||||||
|
vadimcn.vscode-lldb
|
||||||
|
fill-labs.dependi
|
||||||
|
|
||||||
|
# web / js / ts
|
||||||
|
bradlc.vscode-tailwindcss
|
||||||
|
dbaeumer.vscode-eslint
|
||||||
|
esbenp.prettier-vscode
|
||||||
|
svelte.svelte-vscode
|
||||||
|
vue.volar
|
||||||
|
yoavbls.pretty-ts-errors
|
||||||
|
ritwickdey.liveserver
|
||||||
|
|
||||||
|
# c / c++
|
||||||
|
llvm-vs-code-extensions.vscode-clangd
|
||||||
|
ms-vscode.cpptools
|
||||||
|
ms-vscode.cpptools-extension-pack
|
||||||
|
ms-vscode.cpp-devtools
|
||||||
|
|
||||||
|
# python
|
||||||
|
ms-python.python
|
||||||
|
ms-python.debugpy
|
||||||
|
ms-python.vscode-pylance
|
||||||
|
ms-python.vscode-python-envs
|
||||||
|
|
||||||
|
# devops / infra
|
||||||
|
github.vscode-github-actions
|
||||||
|
ms-vscode-remote.remote-ssh
|
||||||
|
ms-vscode-remote.remote-ssh-edit
|
||||||
|
ms-vscode.remote-explorer
|
||||||
|
|
||||||
|
# data / config
|
||||||
|
dotenv.dotenv-vscode
|
||||||
|
redhat.vscode-yaml
|
||||||
|
tamasfe.even-better-toml
|
||||||
|
nefrob.vscode-just-syntax
|
||||||
|
|
||||||
|
# misc
|
||||||
|
humao.rest-client
|
||||||
|
usernamehw.errorlens
|
||||||
|
wayou.vscode-todo-highlight
|
||||||
|
yzhang.markdown-all-in-one
|
||||||
|
sidthesloth.html5-boilerplate
|
||||||
Reference in New Issue
Block a user