From 7cd1ffbad58bde76970bf953527901b0de098a0d Mon Sep 17 00:00:00 2001 From: 1jamesthompson1 <1jamesthompson1@gmail.com> Date: Wed, 24 Sep 2025 20:07:54 +1200 Subject: [PATCH] Add setup script --- .bashrc | 1 + .vimrc | 112 +++++++++++++++++++++++++++++++++++++------------------ setup.sh | 45 ++++++++++++++++++++++ 3 files changed, 122 insertions(+), 36 deletions(-) create mode 100644 setup.sh diff --git a/.bashrc b/.bashrc index 12ad836..d4e8886 100644 --- a/.bashrc +++ b/.bashrc @@ -79,6 +79,7 @@ fi if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi + alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' # enable programmable completion features (you don't need to enable diff --git a/.vimrc b/.vimrc index 87afcb1..bc2ceed 100644 --- a/.vimrc +++ b/.vimrc @@ -1,53 +1,93 @@ +" ======================================== +" Basic Vim configuration for Debian/Ubuntu +" Maintainer: Your Name +" Date: 2025-09-23 +" ======================================== -" An example for a vimrc file. -" -" Maintainer: Bram Moolenaar -" Last change: 2019 Dec 17 -" -" To use it, copy it to -" for Unix: ~/.vimrc -" for Amiga: s:.vimrc -" for MS-Windows: $VIM\_vimrc -" for Haiku: ~/config/settings/vim/vimrc -" for OpenVMS: sys$login:.vimrc - -" When started as "evim", evim.vim will already have done these settings, bail -" out. +" Bail out if running as evim if v:progname =~? "evim" finish endif -" Get the defaults that most users want. +" Load Vim defaults source $VIMRUNTIME/defaults.vim -if has("vms") - set nobackup " do not keep a backup file, use versions instead -else - set backup " keep a backup file (restore to previous version) - if has('persistent_undo') - set undofile " keep an undo file (undo changes after closing) - endif +" ---------------------------- +" Swap, backup, and undo setup +" ---------------------------- +" Directories for swap, backup, and undo files +let s:vim_dir = $HOME . '/.vim' +let &directory = s:vim_dir . '/swap//' +let &backupdir = s:vim_dir . '/backup//' +let &undodir = s:vim_dir . '/undo//' + +" Create directories if they don't exist +if !isdirectory(s:vim_dir . '/swap') + call mkdir(s:vim_dir . '/swap', 'p') +endif +if !isdirectory(s:vim_dir . '/backup') + call mkdir(s:vim_dir . '/backup', 'p') +endif +if !isdirectory(s:vim_dir . '/undo') + call mkdir(s:vim_dir . '/undo', 'p') endif -if &t_Co > 2 || has("gui_running") - " Switch on highlighting the last used search pattern. - set hlsearch -endif +" Enable swap, backup, and persistent undo +set swapfile +set backup +set undofile -" Put these in an autocmd group, so that we can delete them easily. +" ---------------------------- +" Visual & editing enhancements +" ---------------------------- +" Line numbers and cursor line +set number +set cursorline + +" Highlight search matches +set hlsearch +set incsearch + +" Matching brackets/parentheses +set showmatch + +" Tabs and indentation +set tabstop=4 +set shiftwidth=4 +set expandtab + +" Syntax highlighting and colors +syntax on +set termguicolors +set background=dark + +" Command history +set history=1000 +set viminfo='1000,<1000,s100 + +" Search case handling +set ignorecase +set smartcase + +" Enable mouse support +set mouse=a + +" ---------------------------- +" Filetype-specific settings +" ---------------------------- augroup vimrcEx - au! - - " For all text files set 'textwidth' to 78 characters. + autocmd! + " Text files: wrap at 78 characters autocmd FileType text setlocal textwidth=78 augroup END -" Add optional packages. -" -" The matchit plugin makes the % command work better, but it is not backwards -" compatible. -" The ! means the package won't be loaded right away but when plugins are -" loaded during initialization. +" ---------------------------- +" Optional plugins +" ---------------------------- +" matchit: improves % for matching tags/brackets if has('syntax') && has('eval') packadd! matchit endif + +" Done + diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..1411f50 --- /dev/null +++ b/setup.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo ">>> Bootstrapping new Debian-like machine..." + +# 1. Update package list and install essentials +echo ">>> Installing bash, tmux, and vim..." +sudo apt update +sudo apt install -y bash tmux vim git curl + +# 2. Clone your dotfiles (bare repo style) +if [ ! -d "$HOME/.dotfiles" ]; then + echo ">>> Cloning dotfiles repo..." + git clone --bare https://gitea.james-server.duckdns.org/james/dotfiles $HOME/.dotfiles +else + echo ">>> Dotfiles repo already exists." +fi + + +# 3. Checkout dotfiles +dotfiles() { + /usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME" "$@" +} +echo ">>> Checking out dotfiles..." +if ! dotfiles checkout; then + echo ">>> Conflicts detected! Backing up existing dotfiles..." + mkdir -p $HOME/.dotfiles-backup + dotfiles checkout 2>&1 | grep -E "\s+\." | awk '{print $1}' | \ + xargs -I{} mv {} $HOME/.dotfiles-backup/{} + dotfiles checkout +fi + +dotfiles config --local status.showUntrackedFiles no + +# 4. setup tmux +mkdir -p ~/.tmux/plugins +if [ ! -d ~/.tmux/plugins/tpm ]; then + echo ">>> Installing Tmux Plugin Manager..." + git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm +fi + + + +echo ">>> Done! Bash, tmux, vim, and dotfiles are ready." +