commit 034dec0ae1ac7fccf158d2a19b1b11b60ba94e5c Author: Stephan Reinwald Date: Sun Feb 23 20:56:38 2025 +0100 initial commit diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..9ca6ad6 --- /dev/null +++ b/.bashrc @@ -0,0 +1,165 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +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 + +. "$HOME/.local/bin/env" + +# Navigation shortcuts +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' +alias .....='cd ../../../..' +alias ~='cd ~' +alias -- -='cd -' + +# Git shortcuts +alias g='git' +alias gs='git status' +alias ga='git add' +alias gc='git commit' +alias gp='git push' +alias gl='git pull' +alias gd='git diff' +alias gco='git checkout' +alias gb='git branch' + +# System shortcuts +alias cls='clear' +alias h='history' +alias j='jobs -l' +alias path='echo -e ${PATH//:/\\n}' +alias now='date +"%T"' +alias nowdate='date +"%d-%m-%Y"' + +# Enhanced ls commands +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' +alias lsd='ls -l | grep "^d"' +alias lsize='ls -lSrh' +alias ltime='ls -ltrh' + +# Directory shortcuts +alias projects='cd ~/Projects' +alias downloads='cd ~/Downloads' +alias desktop='cd ~/Desktop' +alias docs='cd ~/Documents' + +# System monitoring +alias mem='free -h' +alias cpu='top -o %CPU' +alias ports='netstat -tulanp' diff --git a/.tmux.conf b/.tmux.conf new file mode 100644 index 0000000..bef71e2 --- /dev/null +++ b/.tmux.conf @@ -0,0 +1,15 @@ +# Switch panes with alt + arrows + +bind -n M-Left select-pane -L +bind -n M-Right select-pane -R +bind -n M-Up select-pane -U +bind -n M-Down select-pane -D + +# enable mouse mode +set -g mouse on + +set -g base-index 1 +setw -g pane-base-index 1 + +# don't rename windows automatically +set-option -g allow-rename off diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..9feb256 --- /dev/null +++ b/.vimrc @@ -0,0 +1,100 @@ +" Don't try to be vi compatible +set nocompatible + +" Helps force plugins to load correctly when it is turned back on below +filetype off + +" TODO: Load plugins here (pathogen or vundle) + +" Turn on syntax highlighting +syntax on + +" For plugins to load correctly +filetype plugin indent on + +" TODO: Pick a leader key +" let mapleader = "," + +" Security +set modelines=0 + +" Show line numbers +set number + +" Show file stats +set ruler + +" Blink cursor on error instead of beeping (grr) +set visualbell + +" Encoding +set encoding=utf-8 + +" Whitespace +set wrap +set textwidth=79 +set formatoptions=tcqrn1 +set tabstop=2 +set shiftwidth=2 +set softtabstop=2 +set expandtab +set noshiftround + +" Cursor motion +set scrolloff=3 +set backspace=indent,eol,start +set matchpairs+=<:> " use % to jump between pairs +runtime! macros/matchit.vim + +" Move up/down editor lines +nnoremap j gj +nnoremap k gk + +" Allow hidden buffers +set hidden + +" Rendering +set ttyfast + +" Status bar +set laststatus=2 + +" Last line +set showmode +set showcmd + +" Searching +nnoremap / /\v +vnoremap / /\v +set hlsearch +set incsearch +set ignorecase +set smartcase +set showmatch +map :let @/='' " clear search + +" Remap help key. +inoremap :set invfullscreena +nnoremap :set invfullscreen +vnoremap :set invfullscreen + +" Textmate holdouts + +" Formatting +map q gqip + +" Visualize tabs and newlines +set listchars=tab:▸\ ,eol:¬ +" Uncomment this to enable by default: +" set list " To enable by default +" Or use your leader key + l to toggle on/off +map l :set list! " Toggle tabs and EOL + +" Color scheme (terminal) +set t_Co=256 +set background=dark +let g:solarized_termcolors=256 +let g:solarized_termtrans=1 +" put https://raw.github.com/altercation/vim-colors-solarized/master/colors/solarized.vim +" in ~/.vim/colors/ and uncomment: +" colorscheme solarized diff --git a/remote_setup.sh b/remote_setup.sh new file mode 100644 index 0000000..d4c6742 --- /dev/null +++ b/remote_setup.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# List the packages that your custom environment requires. +REQUIRED_PACKAGES=(neovim tmux) + +# Array to record packages that the script installs. +installed_by_script=() + +# Function to ensure required packages are installed. +ensure_packages() { + local to_install=() + for pkg in "${REQUIRED_PACKAGES[@]}"; do + # Check if the package is installed. + if ! dpkg -s "$pkg" >/dev/null 2>&1; then + to_install+=("$pkg") + fi + done + if [ ${#to_install[@]} -gt 0 ]; then + echo "Installing missing packages: ${to_install[*]}" + sudo apt update && sudo apt install -y "${to_install[@]}" + # Record these packages for later removal. + installed_by_script+=("${to_install[@]}") + fi +} + +# Function to remove only the packages that were installed by the script. +cleanup_packages() { + if [ ${#installed_by_script[@]} -gt 0 ]; then + echo "Removing packages installed by the script: ${installed_by_script[*]}" + sudo apt remove -y "${installed_by_script[@]}" + sudo apt autoremove -y + fi +} + +# Create a temporary directory for your custom dotfiles. +DOTFILES_DIR=$(mktemp -d) + +# Set up a trap that will run when the session ends (EXIT signal). +# This trap cleans up the temporary dotfiles directory and removes the packages we installed. +trap 'cleanup_packages; rm -rf "$DOTFILES_DIR"' EXIT + +# Clone your dotfiles repository into the temporary directory. +git clone https://github.com/yourusername/dotfiles.git "$DOTFILES_DIR" + +# Ensure that any required packages are installed. +ensure_packages + +# Optionally, override default commands to use your custom configurations. +alias vim="vim -u $DOTFILES_DIR/.vimrc" +alias tmux="tmux -f $DOTFILES_DIR/.tmux.conf" + +# Launch a new interactive bash session that uses your custom bashrc. +exec bash --rcfile "$DOTFILES_DIR/.bashrc"