diff --git a/.tmux.conf b/.tmux.conf new file mode 100644 index 0000000..261b422 --- /dev/null +++ b/.tmux.conf @@ -0,0 +1,73 @@ +# ================================ +# tmux configuration +# ================================ + +# General +set -g default-terminal "screen-256color" +set -g escape-time 0 +set -g history-limit 10000 +set -g mouse on + +# Prefix key +unbind C-b +set -g prefix C-a +bind C-a send-prefix + +# Reload config +bind r source-file ~/.tmux.conf \; display-message "Config reloaded!" + +# Window navigation +bind -n C-h select-pane -L +bind -n C-j select-pane -D +bind -n C-k select-pane -U +bind -n C-l select-pane -R + +# Pane splitting +bind | split-window -h -c "#{pane_current_path}" +bind - split-window -v -c "#{pane_current_path}" +unbind '"' +unbind % + +# Pane resizing +bind -r H resize-pane -L 5 +bind -r J resize-pane -D 5 +bind -r K resize-pane -U 5 +bind -r L resize-pane -R 5 + +# Window creation +bind c new-window -c "#{pane_current_path}" + +# Copy mode +setw -g mode-keys vi +bind -T copy-mode-vi v send-keys -X begin-selection +bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy" +bind -T copy-mode-vi r send-keys -X rectangle-toggle + +# Status bar +set -g status-position bottom +set -g status-bg black +set -g status-fg white +set -g status-left-length 40 +set -g status-right-length 50 + +set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P" +set -g status-right "#[fg=cyan]%d %b %R" + +# Window status +setw -g window-status-current-style fg=black,bg=green +setw -g window-status-style fg=white,bg=black + +# Pane borders +set -g pane-border-style fg=black +set -g pane-active-border-style fg=green + +# Activity monitoring +setw -g monitor-activity on +set -g visual-activity on + +# Start windows and panes at 1 +set -g base-index 1 +setw -g pane-base-index 1 + +# Renumber windows when a window is closed +set -g renumber-windows on \ No newline at end of file diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..2e385d9 --- /dev/null +++ b/.zshrc @@ -0,0 +1,73 @@ +# ================================ +# zsh configuration +# ================================ + +# History +HISTFILE=~/.zsh_history +HISTSIZE=10000 +SAVEHIST=10000 +setopt HIST_IGNORE_DUPS +setopt HIST_IGNORE_ALL_DUPS +setopt HIST_IGNORE_SPACE +setopt HIST_FIND_NO_DUPS +setopt HIST_REDUCE_BLANKS +setopt SHARE_HISTORY + +# Directory navigation +setopt AUTO_CD +setopt AUTO_PUSHD +setopt PUSHD_IGNORE_DUPS + +# Completion +autoload -Uz compinit +compinit +setopt AUTO_MENU +setopt COMPLETE_ALIASES + +# Key bindings +bindkey -e +bindkey '^R' history-incremental-search-backward + +# Prompt +autoload -U colors && colors +PROMPT='%{$fg[cyan]%}%n@%m%{$reset_color%}:%{$fg[yellow]%}%~%{$reset_color%}$ ' + +# Aliases +alias ll='ls -la' +alias la='ls -a' +alias l='ls -CF' +alias grep='grep --color=auto' +alias ..='cd ..' +alias ...='cd ../..' + +# Git aliases +alias g='git' +alias gs='git status' +alias ga='git add' +alias gc='git commit' +alias gp='git push' +alias gl='git log --oneline' +alias gd='git diff' + +# Tmux aliases +alias t='tmux' +alias ta='tmux attach' +alias tl='tmux list-sessions' + +# Functions +mkcd() { + mkdir -p "$1" && cd "$1" +} + +# Load local zshrc if exists +[[ -f ~/.zshrc.local ]] && source ~/.zshrc.local + +# Environment variables +export EDITOR=nvim +export VISUAL=nvim +export PAGER=less +export LESS='-R' + +# Path additions +export PATH="$PATH:$HOME/.local/bin" +export PATH="$PATH:$HOME/bin" \ No newline at end of file diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..daf8466 --- /dev/null +++ b/install.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +# ================================ +# Dotfiles installation script +# ================================ + +DOTFILES_DIR="$HOME/git/dotfiles" + +echo "Setting up dotfiles..." + +# Function to create symlink +create_symlink() { + local source="$1" + local target="$2" + + if [ -L "$target" ]; then + echo "Removing existing symlink: $target" + rm "$target" + elif [ -f "$target" ]; then + echo "Backing up existing file: $target -> $target.backup" + mv "$target" "$target.backup" + fi + + echo "Creating symlink: $source -> $target" + ln -s "$source" "$target" +} + +# Zsh configuration +if [ -f "$DOTFILES_DIR/.zshrc" ]; then + create_symlink "$DOTFILES_DIR/.zshrc" "$HOME/.zshrc" +fi + +# Tmux configuration +if [ -f "$DOTFILES_DIR/.tmux.conf" ]; then + create_symlink "$DOTFILES_DIR/.tmux.conf" "$HOME/.tmux.conf" +fi + +# Neovim configuration +if [ -d "$DOTFILES_DIR/nvim" ]; then + mkdir -p "$HOME/.config" + if [ -L "$HOME/.config/nvim" ]; then + echo "Removing existing symlink: $HOME/.config/nvim" + rm "$HOME/.config/nvim" + elif [ -d "$HOME/.config/nvim" ]; then + echo "Backing up existing directory: $HOME/.config/nvim -> $HOME/.config/nvim.backup" + mv "$HOME/.config/nvim" "$HOME/.config/nvim.backup" + fi + create_symlink "$DOTFILES_DIR/nvim" "$HOME/.config/nvim" +fi + +echo "Dotfiles setup complete!" +echo "" +echo "To apply changes:" +echo " - For zsh: source ~/.zshrc or restart your terminal" +echo " - For tmux: tmux source-file ~/.tmux.conf (if running) or restart tmux" +echo " - For nvim: restart nvim" \ No newline at end of file