From 32151368ef2e53594f036399fb57baf662b3ffe2 Mon Sep 17 00:00:00 2001 From: ForeverPyrite Date: Tue, 5 Aug 2025 02:17:08 -0500 Subject: [PATCH] First real commit, for testing purposes. Will add README.md and clean up obviously AI code later. --- .gitignore | 2 + alacritty/.config/alacritty/alacritty.toml | 14 ++ bash/.bash_aliases | 34 +++ bash/.bash_logout | 7 + bash/.bashrc | 144 +++++++++++ btop/.config/btop/btop.conf | 212 ++++++++++++++++ .../btop/themes/catppuccin_mocha.theme | 83 +++++++ fish/.config/fish/conf.d/aliases.fish | 49 ++++ fish/.config/fish/conf.d/functions.fish | 18 ++ fish/.config/fish/conf.d/rustup.fish | 1 + fish/.config/fish/config.fish | 37 +++ fish/.config/fish/fish_variables | 32 +++ .../functions/fish_user_key_bindings.fish | 3 + install.sh | 230 ++++++++++++++++++ nvim/.config/nvim | 1 + starship/.config/starship.toml | 50 ++++ tmux/.tmux.conf | 46 ++++ 17 files changed, 963 insertions(+) create mode 100644 .gitignore create mode 100644 alacritty/.config/alacritty/alacritty.toml create mode 100644 bash/.bash_aliases create mode 100644 bash/.bash_logout create mode 100644 bash/.bashrc create mode 100644 btop/.config/btop/btop.conf create mode 100644 btop/.config/btop/themes/catppuccin_mocha.theme create mode 100644 fish/.config/fish/conf.d/aliases.fish create mode 100644 fish/.config/fish/conf.d/functions.fish create mode 100644 fish/.config/fish/conf.d/rustup.fish create mode 100644 fish/.config/fish/config.fish create mode 100644 fish/.config/fish/fish_variables create mode 100644 fish/.config/fish/functions/fish_user_key_bindings.fish create mode 100755 install.sh create mode 160000 nvim/.config/nvim create mode 100644 starship/.config/starship.toml create mode 100644 tmux/.tmux.conf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..64919bb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# This is for some silly goofy ssh keys I have going on to push to the repo. +.github* diff --git a/alacritty/.config/alacritty/alacritty.toml b/alacritty/.config/alacritty/alacritty.toml new file mode 100644 index 0000000..cd96fda --- /dev/null +++ b/alacritty/.config/alacritty/alacritty.toml @@ -0,0 +1,14 @@ + +[font] +normal = { family = "Hack Nerd Font", style = "Regular" } +bold = { family = "Hack Nerd Font", style = "Bold" } +italic = { family = "Hack Nerd Font", style = "Italic" } +size = 11.0 + +[window] +decorations = "full" +opacity = 0.95 + +[shell] +program = "/usr/bin/fish" +args = ["-l"] diff --git a/bash/.bash_aliases b/bash/.bash_aliases new file mode 100644 index 0000000..9d9ca96 --- /dev/null +++ b/bash/.bash_aliases @@ -0,0 +1,34 @@ + + + + +# Including this from .bashrc because maybe I'll remember it exists and find a use for it if I put it here. +# 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$//'\'')"' + +### Actually mine ### + +# Rust drop-ins +alias cat="bat --paging=never" +alias grep="rg" +alias ls="eza --icons --group-directories-first" + +# More eza aliases +# ll: long list, all files, show git status +alias ll="eza -l -a --git --icons --group-directories-first" + +# la: list all files (including dotfiles) +alias la="eza -a --icons --group-directories-first" + +# lt: tree view +alias lt="eza --tree --level=2 --long --git --icons" + +# If docker is actually installed on the host... +if command docker -v &> /dev/null; then + alias dc="docker compose" + alias dcb="dc build" + alias dcu="dc up -d" + alias dcl="dc logs -f" + alias dcf="dcu && dcl" # Think "docker compose full", yes all of this is peak laziness but this is probably my most used command. +fi diff --git a/bash/.bash_logout b/bash/.bash_logout new file mode 100644 index 0000000..de4f5f7 --- /dev/null +++ b/bash/.bash_logout @@ -0,0 +1,7 @@ +# ~/.bash_logout: executed by bash(1) when login shell exits. + +# when leaving the console clear the screen to increase privacy + +if [ "$SHLVL" = 1 ]; then + [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q +fi diff --git a/bash/.bashrc b/bash/.bashrc new file mode 100644 index 0000000..addee36 --- /dev/null +++ b/bash/.bashrc @@ -0,0 +1,144 @@ +# ~/.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 + +# wait if we are running interactive literally just use fish lmao (assuming it's installed, ofc) +if ! command -v fish &> /dev/null; then + # 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/.cargo/env" + + + # impl Bash for FZF + export FZF_DEFAULT_OPTS='--tmux' + eval "$(fzf --bash)" + + # impl Bash for Autin + eval "$(atuin init bash)" + + # impl Bash for Zoxide where T = FZF + export _ZO_FZF_OPTS='--tmux' + export _ZO_DOCTOR=0 # Since starship should be last ig + eval "$(zoxide init --cmd cd bash)" + + + # theming? Who needs that. OH WAIT IT'S WRITTEN IN RUST!? HELL YEAH!!! + eval "$(starship init bash)" + + [ -f ~/.fzf.bash ] && source ~/.fzf.bash + +else + # I assume this will be a weird thing where you have to exit exit since it's not the login shell? + exec fish +fi diff --git a/btop/.config/btop/btop.conf b/btop/.config/btop/btop.conf new file mode 100644 index 0000000..67f3346 --- /dev/null +++ b/btop/.config/btop/btop.conf @@ -0,0 +1,212 @@ +#? Config file for btop v. 1.2.13 + +#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. +#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" +color_theme = "/root/.config/btop/themes/catppuccin_mocha.theme" + +#* If the theme set background should be shown, set to False if you want terminal background transparency. +theme_background = True + +#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. +truecolor = True + +#* Set to true to force tty mode regardless if a real tty has been detected or not. +#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. +force_tty = False + +#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. +#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. +#* Use whitespace " " as separator between different presets. +#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" +presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" + +#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. +#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. +vim_keys = False + +#* Rounded corners on boxes, is ignored if TTY mode is ON. +rounded_corners = True + +#* Default symbols to use for graph creation, "braille", "block" or "tty". +#* "braille" offers the highest resolution but might not be included in all fonts. +#* "block" has half the resolution of braille but uses more common characters. +#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. +#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. +graph_symbol = "braille" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_cpu = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_mem = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_net = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_proc = "default" + +#* Manually set which boxes to show. Available values are "cpu mem net proc", separate values with whitespace. +shown_boxes = "cpu mem net proc" + +#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. +update_ms = 2000 + +#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", +#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. +proc_sorting = "cpu lazy" + +#* Reverse sorting order, True or False. +proc_reversed = False + +#* Show processes as a tree. +proc_tree = False + +#* Use the cpu graph colors in the process list. +proc_colors = True + +#* Use a darkening gradient in the process list. +proc_gradient = True + +#* If process cpu usage should be of the core it's running on or usage of the total available cpu power. +proc_per_core = False + +#* Show process memory as bytes instead of percent. +proc_mem_bytes = True + +#* Show cpu graph for each process. +proc_cpu_graphs = True + +#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) +proc_info_smaps = False + +#* Show proc box on left side of screen instead of right. +proc_left = False + +#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). +proc_filter_kernel = False + +#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_upper = "total" + +#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_lower = "total" + +#* Toggles if the lower CPU graph should be inverted. +cpu_invert_lower = True + +#* Set to True to completely disable the lower CPU graph. +cpu_single_graph = False + +#* Show cpu box at bottom of screen instead of top. +cpu_bottom = False + +#* Shows the system uptime in the CPU box. +show_uptime = True + +#* Show cpu temperature. +check_temp = True + +#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. +cpu_sensor = "Auto" + +#* Show temperatures for cpu cores also if check_temp is True and sensors has been found. +show_coretemp = True + +#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. +#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. +#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. +#* Example: "4:0 5:1 6:3" +cpu_core_map = "" + +#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". +temp_scale = "celsius" + +#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. +base_10_sizes = False + +#* Show CPU frequency. +show_cpu_freq = True + +#* Draw a clock at top of screen, formatting according to strftime, empty string to disable. +#* Special formatting: /host = hostname | /user = username | /uptime = system uptime +clock_format = "%X" + +#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. +background_update = True + +#* Custom cpu model name, empty string to disable. +custom_cpu_name = "" + +#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". +#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". +disks_filter = "" + +#* Show graphs instead of meters for memory values. +mem_graphs = True + +#* Show mem box below net box instead of above. +mem_below_net = False + +#* Count ZFS ARC in cached and available memory. +zfs_arc_cached = True + +#* If swap memory should be shown in memory box. +show_swap = True + +#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. +swap_disk = True + +#* If mem box should be split to also show disks info. +show_disks = True + +#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. +only_physical = True + +#* Read disks list from /etc/fstab. This also disables only_physical. +use_fstab = True + +#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) +zfs_hide_datasets = False + +#* Set to true to show available disk space for privileged users. +disk_free_priv = False + +#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. +show_io_stat = True + +#* Toggles io mode for disks, showing big graphs for disk read/write speeds. +io_mode = False + +#* Set to True to show combined read/write io graphs in io mode. +io_graph_combined = False + +#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". +#* Example: "/mnt/media:100 /:20 /boot:1". +io_graph_speeds = "" + +#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. +net_download = 100 + +net_upload = 100 + +#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. +net_auto = True + +#* Sync the auto scaling for download and upload to whichever currently has the highest scale. +net_sync = True + +#* Starts with the Network Interface specified here. +net_iface = "" + +#* Show battery stats in top right if battery is present. +show_battery = True + +#* Which battery to use if multiple are present. "Auto" for auto detection. +selected_battery = "Auto" + +#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". +#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. +log_level = "WARNING" \ No newline at end of file diff --git a/btop/.config/btop/themes/catppuccin_mocha.theme b/btop/.config/btop/themes/catppuccin_mocha.theme new file mode 100644 index 0000000..0809c23 --- /dev/null +++ b/btop/.config/btop/themes/catppuccin_mocha.theme @@ -0,0 +1,83 @@ +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#1e1e2e" + +# Main text color +theme[main_fg]="#cdd6f4" + +# Title color for boxes +theme[title]="#cdd6f4" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#89b4fa" + +# Background color of selected item in processes box +theme[selected_bg]="#45475a" + +# Foreground color of selected item in processes box +theme[selected_fg]="#89b4fa" + +# Color of inactive/disabled text +theme[inactive_fg]="#7f849c" + +# Color of text appearing on top of graphs, i.e uptime and current network graph scaling +theme[graph_text]="#f5e0dc" + +# Background color of the percentage meters +theme[meter_bg]="#45475a" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#f5e0dc" + +# CPU, Memory, Network, Proc box outline colors +theme[cpu_box]="#cba6f7" #Mauve +theme[mem_box]="#a6e3a1" #Green +theme[net_box]="#eba0ac" #Maroon +theme[proc_box]="#89b4fa" #Blue + +# Box divider line and small boxes line color +theme[div_line]="#6c7086" + +# Temperature graph color (Green -> Yellow -> Red) +theme[temp_start]="#a6e3a1" +theme[temp_mid]="#f9e2af" +theme[temp_end]="#f38ba8" + +# CPU graph colors (Teal -> Lavender) +theme[cpu_start]="#94e2d5" +theme[cpu_mid]="#74c7ec" +theme[cpu_end]="#b4befe" + +# Mem/Disk free meter (Mauve -> Lavender -> Blue) +theme[free_start]="#cba6f7" +theme[free_mid]="#b4befe" +theme[free_end]="#89b4fa" + +# Mem/Disk cached meter (Sapphire -> Lavender) +theme[cached_start]="#74c7ec" +theme[cached_mid]="#89b4fa" +theme[cached_end]="#b4befe" + +# Mem/Disk available meter (Peach -> Red) +theme[available_start]="#fab387" +theme[available_mid]="#eba0ac" +theme[available_end]="#f38ba8" + +# Mem/Disk used meter (Green -> Sky) +theme[used_start]="#a6e3a1" +theme[used_mid]="#94e2d5" +theme[used_end]="#89dceb" + +# Download graph colors (Peach -> Red) +theme[download_start]="#fab387" +theme[download_mid]="#eba0ac" +theme[download_end]="#f38ba8" + +# Upload graph colors (Green -> Sky) +theme[upload_start]="#a6e3a1" +theme[upload_mid]="#94e2d5" +theme[upload_end]="#89dceb" + +# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve) +theme[process_start]="#74c7ec" +theme[process_mid]="#b4befe" +theme[process_end]="#cba6f7" diff --git a/fish/.config/fish/conf.d/aliases.fish b/fish/.config/fish/conf.d/aliases.fish new file mode 100644 index 0000000..8a4adac --- /dev/null +++ b/fish/.config/fish/conf.d/aliases.fish @@ -0,0 +1,49 @@ +# ~/.config/fish/conf.d/aliases.fish + +# ------------------------------------------------------------------------------ +# Core "Rust-first" Command Replacements +# ------------------------------------------------------------------------------ +# These override the standard Unix commands with our modern alternatives. +# Note: Fish syntax doesn't use '=' for aliases. + +alias cat "bat --paging=never" # Use bat to view files +alias grep "rg" # Use ripgrep for searching +alias ls "eza --icons --group-directories-first" # The new default `ls` +alias find "fd" # fd-find. you're smart, you'll figure it out + +# ------------------------------------------------------------------------------ +# Enhanced `eza` Aliases +# ------------------------------------------------------------------------------ +# Common shortcuts for different views. + +# ll: long list, all files, show git status +alias ll "eza -l -a --git --icons --group-directories-first" + +# la: list all files (including dotfiles) +alias la "eza -a --icons --group-directories-first" + +# lt: tree view +alias lt "eza --tree --level=2 --long --git --icons" + + +# ------------------------------------------------------------------------------ +# Context-Aware Aliases (Docker) +# ------------------------------------------------------------------------------ +# These aliases are only defined if the `docker` command is available. + +if command -v docker &> /dev/null + # Simple aliases for docker-compose + alias dc "docker compose" + alias dcb "docker compose build" + alias dcu "docker compose up -d" + alias dcl "docker compose logs -f" + + # Your "full" command is better as a function for clarity + # You can put this in functions.fish or define it right here! + function dcf + echo "==> Running 'docker compose up -d'..." + docker compose up -d + echo "==> Tailing logs with 'docker compose logs -f'..." + docker compose logs -f + end +end diff --git a/fish/.config/fish/conf.d/functions.fish b/fish/.config/fish/conf.d/functions.fish new file mode 100644 index 0000000..622ef32 --- /dev/null +++ b/fish/.config/fish/conf.d/functions.fish @@ -0,0 +1,18 @@ + + +# Sends a desktop notification after a command completes. +# Usage: long_running_command; alert +# Derived from the alias in the default .bashrc that I was interested in, probably will still never think to use it though lol +function alert + # $status contains the exit code of the last command + set -l last_status $status + + # Get the last command from history. Much cleaner than `history | tail | sed`. + set -l last_cmd (history --max=1) + + if test $last_status -eq 0 + notify-send --urgency=low --icon=terminal "✅ Command Succeeded" "$last_cmd" + else + notify-send --urgency=critical --icon=error "❌ Command Failed (Exit Code: $last_status)" "$last_cmd" + end +end diff --git a/fish/.config/fish/conf.d/rustup.fish b/fish/.config/fish/conf.d/rustup.fish new file mode 100644 index 0000000..e4cb363 --- /dev/null +++ b/fish/.config/fish/conf.d/rustup.fish @@ -0,0 +1 @@ +source "$HOME/.cargo/env.fish" diff --git a/fish/.config/fish/config.fish b/fish/.config/fish/config.fish new file mode 100644 index 0000000..c56a38f --- /dev/null +++ b/fish/.config/fish/config.fish @@ -0,0 +1,37 @@ +# ~/.config/fish/config.fish + +# --- Environment Variables --- +# Set a default editor (used by many command-line tools) +set -x EDITOR nvim + +# --- PATH Configuration --- +# Add Cargo's bin directory to the path +fish_add_path "$HOME/.cargo/bin" + +# --- Tool Initialization --- +# Starship Prompt +starship init fish | source + +# Zoxide (replaces cd) +set -x FZF_DEFAULT_OPTS --tmux +zoxide init fish | source + +# Autin (rip unencrypted .bash_history) +atuin init fish | source + +# FZF Keybindings +# This sources the file installed by `fzf --all` +if test -f "$HOME/.fzf.fish" + source "$HOME/.fzf.fish" +end + + +# --- ALIASES (The "Rust-first" way) --- +# Use 'alias' for simple command replacements. +# Note the syntax is 'alias new_command "old_command with args"' + +alias ls 'eza --icons --group-directories-first' # a more feature-rich ls +alias ll 'eza -l --icons --group-directories-first' +alias la 'eza -la --icons --group-directories-first' +alias cat 'bat --paging=never' # bat is a better cat +alias grep 'rg' # ripgrep is a better grep diff --git a/fish/.config/fish/fish_variables b/fish/.config/fish/fish_variables new file mode 100644 index 0000000..2022fba --- /dev/null +++ b/fish/.config/fish/fish_variables @@ -0,0 +1,32 @@ +# This file contains fish universal variable definitions. +# VERSION: 3.0 +SETUVAR __fish_initialized:3800 +SETUVAR fish_color_autosuggestion:555\x1ebrblack +SETUVAR fish_color_cancel:\x2dr +SETUVAR fish_color_command:blue +SETUVAR fish_color_comment:red +SETUVAR fish_color_cwd:green +SETUVAR fish_color_cwd_root:red +SETUVAR fish_color_end:green +SETUVAR fish_color_error:brred +SETUVAR fish_color_escape:brcyan +SETUVAR fish_color_history_current:\x2d\x2dbold +SETUVAR fish_color_host:normal +SETUVAR fish_color_host_remote:yellow +SETUVAR fish_color_normal:normal +SETUVAR fish_color_operator:brcyan +SETUVAR fish_color_param:cyan +SETUVAR fish_color_quote:yellow +SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold +SETUVAR fish_color_search_match:white\x1e\x2d\x2dbackground\x3dbrblack +SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack +SETUVAR fish_color_status:red +SETUVAR fish_color_user:brgreen +SETUVAR fish_color_valid_path:\x2d\x2dunderline +SETUVAR fish_key_bindings:fish_default_key_bindings +SETUVAR fish_pager_color_completion:normal +SETUVAR fish_pager_color_description:B3A06D\x1eyellow\x1e\x2di +SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline +SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan +SETUVAR fish_pager_color_selected_background:\x2dr +SETUVAR fish_user_paths:/home/foreverpyrite/\x2ecargo/bin\x1e/root/\x2ecargo/bin\x1e/root/\x2efzf/bin\x1e/home/foreverpyrite/\x2efzf/bin diff --git a/fish/.config/fish/functions/fish_user_key_bindings.fish b/fish/.config/fish/functions/fish_user_key_bindings.fish new file mode 100644 index 0000000..18b4fc9 --- /dev/null +++ b/fish/.config/fish/functions/fish_user_key_bindings.fish @@ -0,0 +1,3 @@ +function fish_user_key_bindings + fzf --fish | source +end diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..0cd42ff --- /dev/null +++ b/install.sh @@ -0,0 +1,230 @@ +#!/bin/bash +# +# Dotfiles Bootstrap Script +# +# This script automates the setup of a high-performance, Rust-powered +# command-line environment. It uses a hybrid sequential/parallel approach. +# +# Flags: +# --extended: Performs a "desktop" setup: installs GUI fonts and changes the default shell. +# --docker: Installs Docker Engine. + +set -e # Exit immediately if a command exits with a non-zero status. + +# --- Helper Functions for Logging --- +info() { echo -e "\033[1;34m==> $1\033[0m"; } +success() { echo -e "\033[1;32m✅ $1\033[0m"; } +warn() { echo -e "\033[1;33m⚠️ $1\033[0m"; } + +# --- Argument Parsing & Environment Setup --- +EXTENDED_INSTALL=false +DOCKER_INSTALL=false +[[ " $* " =~ " --extended " ]] && EXTENDED_INSTALL=true +[[ " $* " =~ " --docker " ]] && DOCKER_INSTALL=true + +# Phased installation package lists +PREREQ_PACKAGES=(git stow) +SYSTEM_PACKAGES=(curl tmux btop fish) +RUST_PACKAGES=( + eza + bat + ripgrep + zoxide + starship + bob-nvim + atuin + dua-cli + cargo-cache +) + +# Global variables for system context +SUDO_CMD="" +PM="" +OS_ID="" + +# --- Prerequisite Functions (Unchanged) --- +detect_os_and_pm() { + info "Detecting OS and Package Manager..." + if [ -f /etc/os-release ]; then + . /etc/os-release + OS_ID=$ID + fi + + if [[ "$(uname)" == "Darwin" ]]; then + PM="brew" + elif command -v apt-get &>/dev/null; then + PM="apt-get" + elif command -v dnf &>/dev/null; then + PM="dnf" + elif command -v pacman &>/dev/null; then + PM="pacman" + else + warn "Could not detect a supported package manager (apt-get, dnf, pacman, brew)." + exit 1 + fi + info "Detected OS: ${OS_ID:-macOS}, Package Manager: $PM" +} + +check_and_setup_sudo() { + info "Checking for root privileges and sudo..." + if [[ "$(id -u)" -eq 0 ]]; then + info "Running as root. 'sudo' is not required." + SUDO_CMD="" + if ! command -v sudo &>/dev/null; then + info "Sudo not found. Installing it for future convenience..." + case "$PM" in + apt-get) apt-get update && apt-get install -y sudo ;; + dnf) dnf install -y sudo ;; + pacman) pacman -S --noconfirm sudo ;; + esac + fi + else + if ! command -v sudo &>/dev/null; then + warn "This script requires 'sudo' to be installed for non-root users." + exit 1 + fi + SUDO_CMD="sudo" + info "Running as non-root user. Using 'sudo' for privileged operations." + fi +} + +install_build_tools() { + info "Installing essential build tools for Rust..." + case "$PM" in + apt-get) $SUDO_CMD apt-get install -y build-essential ;; + dnf) $SUDO_CMD dnf groupinstall -y "Development Tools" ;; + pacman) $SUDO_CMD pacman -S --noconfirm --needed base-devel ;; + esac +} + +install_rust_toolchain() { + if command -v cargo &>/dev/null; then info "Rust toolchain is already installed."; else + info "Installing Rust and Cargo via rustup..." + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + fi + export PATH="$HOME/.cargo/bin:$PATH" +} + +deploy_dotfiles() { + info "Cloning and deploying dotfiles..." + local dotfiles_repo="https://github.com/ForeverPyrite/dotfiles.git" + local dotfiles_dir="$HOME/dotfiles" + if [ ! -d "$dotfiles_dir" ]; then git clone "$dotfiles_repo" "$dotfiles_dir"; else info "Dotfiles directory already exists. Skipping clone."; fi + info "Backing up any conflicting default config files..." + local conflict_files=("$HOME/.bashrc" "$HOME/.profile" "$HOME/.bash_logout") + for file in "${conflict_files[@]}"; do + if [ -f "$file" ] && [ ! -L "$file" ]; then + mv "$file" "$file.bak" + info " -> Moved $file to $file.bak" + fi + done + info "Running 'stow' to link configurations..." + cd "$dotfiles_dir" + for dir in */; do [ -d "$dir" ] && stow "${dir%/}"; done + cd - >/dev/null + success "Dotfiles have been deployed." +} + +# --- Parallel Installation Function --- +run_parallel_installs() { + info "Handing off to Tmux for parallel tool installation..." + local session_name="dotfiles" + + # --- Command Definitions --- + local cargo_cmd="export PATH='$HOME/.cargo/bin:$PATH'; for pkg in ${RUST_PACKAGES[@]}; do cargo install --locked \$pkg; done && bob use stable && \ + sudo ln -s ~/.local/share/bob/nvim-bob/nvim /usr/bin/nvim && \ + cargo cache -a -y && \ + echo '✅ Cargo packages installed, Neovim set up, and cache cleaned.'" + local fzf_cmd="git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && ~/.fzf/install --all && echo '✅ fzf installed.'" + local tpm_cmd="git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && echo '✅ Tmux Plugin Manager installed.'" + + # --- Create Layout & Send Commands --- + # This robust method creates the entire layout first, then sends commands to the numbered panes. + tmux start-server + # Pane 0 + tmux new-session -d -s "$session_name" + # Pane 1 + tmux split-window -h -t "$session_name:1.1" + # Pane 2 + tmux split-window -v -t "$session_name:1.2" + + # Send commands to their respective panes + tmux send-keys -t "$session_name:1.1" "$cargo_cmd" C-m + tmux send-keys -t "$session_name:1.2" "$tpm_cmd" C-m + tmux send-keys -t "$session_name:1.3" "$fzf_cmd" C-m + + # Handle optional installs in new windows + if [ "$DOCKER_INSTALL" = true ]; then + tmux new-window -t "$session_name" -n "Docker" + local docker_cmd="curl -fsSL https://get.docker.com | $SUDO_CMD sh && echo '✅ Docker installed.'" + tmux send-keys -t "$session_name:Docker" "$docker_cmd" C-m + fi + if [ "$EXTENDED_INSTALL" = true ]; then + tmux new-window -t "$session_name" -n "Desktop" + + # Pane 1: Font Installation (your existing command) + local font_cmd="mkdir -p ~/.local/share/fonts && curl -fLo f.tar.xz https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/Hack.tar.xz && tar -xf f.tar.xz -C ~/.local/share/fonts && rm f.tar.xz && fc-cache -fv && echo '✅ Fonts installed.'" + tmux send-keys -t "$session_name:Desktop.1" "$font_cmd" C-m + + # Split the window for the next commands + tmux split-window -h -t "$session_name:Desktop.1" + tmux split-window -v -t "$session_name:Desktop.2" + + # Pane 2: Change Shell (your existing command) + local shell_cmd="FISH_PATH=\$(which fish); if ! grep -q \"\$FISH_PATH\" /etc/shells; then echo \"\$FISH_PATH\" | $SUDO_CMD tee -a /etc/shells; fi; $SUDO_CMD chsh -s \"\$FISH_PATH\" \"$USER\" && echo '✅ Shell changed.'" + tmux send-keys -t "$session_name:Desktop.2" "$shell_cmd" C-m + warn "The 'chsh' command inside tmux may require your password to complete." + + # Pane 3: Install Alacritty + local alacritty_install_cmd + case "$PM" in + brew) alacritty_install_cmd="brew install --cask ${GUI_PACKAGES[*]}" ;; + apt-get) alacritty_install_cmd="$SUDO_CMD apt-get install -y ${GUI_PACKAGES[*]}" ;; + dnf) alacritty_install_cmd="$SUDO_CMD dnf install -y ${GUI_PACKAGES[*]}" ;; + pacman) alacritty_install_cmd="$SUDO_CMD pacman -S --noconfirm ${GUI_PACKAGES[*]}" ;; + esac + alacritty_install_cmd+=" && echo '✅ Alacritty installed.'" + tmux send-keys -t "$session_name:Desktop.3" "$alacritty_install_cmd" C-m + fi + success "Tmux session '$session_name' created. Attach with: tmux a -t $session_name" +} + +# --- Main Execution --- +# Phase 0: System Detection & Prerequisite Installation +detect_os_and_pm +check_and_setup_sudo +info "Phase 0: Installing prerequisites (git, stow)..." +case "$PM" in +brew) brew install "${PREREQ_PACKAGES[@]}" ;; +apt-get) $SUDO_CMD apt-get update && $SUDO_CMD apt-get install -y "${PREREQ_PACKAGES[@]}" ;; +dnf) + if [[ "$OS_ID" == "ol" || "$OS_ID" == "almalinux" || "$OS_ID" == "rockylinux" || "$OS_ID" == "centos" ]]; then $SUDO_CMD dnf install -y epel-release --nogpgcheck; fi + $SUDO_CMD dnf install -y "${PREREQ_PACKAGES[@]}" + ;; +pacman) $SUDO_CMD pacman -Syu --noconfirm "${PREREQ_PACKAGES[@]}" ;; +esac +success "Prerequisites installed." + +# Phase 1: Deploy Configurations +deploy_dotfiles + +# Phase 2: Core System Installation +info "Phase 2: Installing core system tools..." +case "$PM" in +brew) brew install "${SYSTEM_PACKAGES[@]}" ;; apt-get) $SUDO_CMD apt-get install -y "${SYSTEM_PACKAGES[@]}" ;; +dnf) $SUDO_CMD dnf install -y "${SYSTEM_PACKAGES[@]}" ;; pacman) $SUDO_CMD pacman -S --noconfirm "${SYSTEM_PACKAGES[@]}" ;; +esac +install_build_tools +install_rust_toolchain +success "Core system tools installed." + +# Phase 3: Parallel Tool Installation +run_parallel_installs + +# --- Final Message --- +echo "" +info "--------------------------------------------------------" +success "Bootstrap script finished!" +info "Monitor the rest of the installation inside tmux: tmux a -t dotfiles_setup" +info "Log out and log back in to apply all changes, especially the new shell." +info "--------------------------------------------------------" diff --git a/nvim/.config/nvim b/nvim/.config/nvim new file mode 160000 index 0000000..803bc18 --- /dev/null +++ b/nvim/.config/nvim @@ -0,0 +1 @@ +Subproject commit 803bc181d7c0d6d5eeba9274d9be49b287294d99 diff --git a/starship/.config/starship.toml b/starship/.config/starship.toml new file mode 100644 index 0000000..5099d5e --- /dev/null +++ b/starship/.config/starship.toml @@ -0,0 +1,50 @@ +# Get editor completions based on the config schema +"$schema" = 'https://starship.rs/config-schema.json' + +# Sets user-defined palette +# Palettes must be defined _after_ this line +palette = "catppuccin_mocha" + +# Starship modules +[character] +# Note the use of Catppuccin color 'peach' +success_symbol = "[[󰄛](green) ❯](peach)" +error_symbol = "[[󰄛](red) ❯](peach)" +vimcmd_symbol = "[󰄛 ❮](subtext1)" # For use with zsh-vi-mode + +[git_branch] +style = "bold mauve" + +[directory] +truncation_length = 4 +style = "bold lavender" + +# Palette definitions +[palettes.catppuccin_mocha] +rosewater = "#f5e0dc" +flamingo = "#f2cdcd" +pink = "#f5c2e7" +mauve = "#cba6f7" +red = "#f38ba8" +maroon = "#eba0ac" +peach = "#fab387" +yellow = "#f9e2af" +green = "#a6e3a1" +teal = "#94e2d5" +sky = "#89dceb" +sapphire = "#74c7ec" +blue = "#89b4fa" +lavender = "#b4befe" +text = "#cdd6f4" +subtext1 = "#bac2de" +subtext0 = "#a6adc8" +overlay2 = "#9399b2" +overlay1 = "#7f849c" +overlay0 = "#6c7086" +surface2 = "#585b70" +surface1 = "#45475a" +surface0 = "#313244" +base = "#1e1e2e" +mantle = "#181825" +crust = "#11111b" + diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf new file mode 100644 index 0000000..8e033ff --- /dev/null +++ b/tmux/.tmux.conf @@ -0,0 +1,46 @@ +# ~/.tmux.conf + +# --- General Settings --- +# Set the main prefix to C-a +set-option -g prefix C-a + +# Set a secondary, "legacy" prefix to C-b for an easier transition +set-option -g prefix2 C-b + +# Still unbind the default C-b binding for the "send-prefix" command, +# as we want our primary prefix (C-a) to handle that. +unbind C-b +bind-key C-a send-prefix + +# Start windows and panes at 1, not 0 +set -g base-index 1 +setw -g pane-base-index 1 + +# Enable mouse mode (scrolling, pane selection) +set -g mouse on + +# --- Keybindings --- +# More intuitive split keys (current path is preserved) +bind | split-window -h -c "#{pane_current_path}" +bind - split-window -v -c "#{pane_current_path}" +unbind '"' +unbind % + +# Quick pane navigation with Alt + Arrow keys +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 + +# --- Plugins with TPM --- +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-sensible' # Sensible default settings +set -g @plugin 'catppuccin/tmux' # Your theme + +# --- Theme Configuration (Optional) --- +set -g @catppuccin_flavour 'mocha' + +# --- Initialize TPM (MUST BE LAST) --- +run '~/.tmux/plugins/tpm/tpm' + +