commit
10c555735f
13 changed files with 748 additions and 0 deletions
@ -0,0 +1,182 @@ |
|||||||
|
# ZSH Configuration |
||||||
|
|
||||||
|
A modular ZSH configuration designed to be portable, easy to maintain, and friendly to both Linux and macOS. |
||||||
|
|
||||||
|
The main idea is simple: keep the top-level shell startup files small, then split aliases, functions, exports, prompt setup, keybindings, and OS-specific behavior into separate files. |
||||||
|
|
||||||
|
## Layout |
||||||
|
|
||||||
|
| File | Purpose | |
||||||
|
|---|---| |
||||||
|
| `zshrc` | Main interactive shell configuration. Sources the modular config files. | |
||||||
|
| `zprofile` | Login shell configuration. Sources `zshrc` where appropriate. | |
||||||
|
| `aliases.zsh` | Shell aliases. | |
||||||
|
| `functions.zsh` | Utility function definitions. | |
||||||
|
| `exports.zsh` | Cross-platform environment variables and PATH setup. | |
||||||
|
| `initializations.zsh` | Tool initialization code, such as language managers or runtime setup. | |
||||||
|
| `keybinds.zsh` | Custom ZSH keybindings. | |
||||||
|
| `ps1.zsh` | Prompt configuration. | |
||||||
|
| `macrc` | macOS-specific configuration, especially Homebrew paths and macOS-only tools. | |
||||||
|
| `scripts/` | Helper scripts used by this configuration. | |
||||||
|
|
||||||
|
## Installation |
||||||
|
|
||||||
|
Clone the repository: |
||||||
|
|
||||||
|
```sh |
||||||
|
git clone git.xchg.sh:angrygoats/zsh-v2.git ~/zsh-v2 |
||||||
|
``` |
||||||
|
|
||||||
|
Back up any existing ZSH files: |
||||||
|
|
||||||
|
```sh |
||||||
|
mv ~/.zshrc ~/.zshrc.backup 2>/dev/null || true |
||||||
|
mv ~/.zprofile ~/.zprofile.backup 2>/dev/null || true |
||||||
|
``` |
||||||
|
|
||||||
|
Symlink the main files: |
||||||
|
|
||||||
|
```sh |
||||||
|
ln -s ~/zsh-v2/zshrc ~/.zshrc |
||||||
|
ln -s ~/zsh-v2/zprofile ~/.zprofile |
||||||
|
``` |
||||||
|
|
||||||
|
Reload your shell: |
||||||
|
|
||||||
|
```sh |
||||||
|
source ~/.zshrc |
||||||
|
``` |
||||||
|
|
||||||
|
## Private Configuration |
||||||
|
|
||||||
|
Private or machine-local values should not be committed to this repository. |
||||||
|
|
||||||
|
The following files are automatically sourced if present: |
||||||
|
|
||||||
|
```text |
||||||
|
$HOME/.bash_private |
||||||
|
$HOME/.private |
||||||
|
$HOME/.zsh_private |
||||||
|
``` |
||||||
|
|
||||||
|
Use these for secrets, tokens, private exports, work-specific paths, or anything machine-specific that should not live in Git. |
||||||
|
|
||||||
|
## OS-Specific Configuration |
||||||
|
|
||||||
|
macOS-specific configuration belongs in: |
||||||
|
|
||||||
|
```text |
||||||
|
$HOME/.macrc |
||||||
|
``` |
||||||
|
|
||||||
|
This is the right place for Homebrew paths, macOS-only tools, GUI application CLI paths, and Apple Silicon versus Intel Homebrew differences. |
||||||
|
|
||||||
|
Linux-specific configuration can be placed in a Linux-specific file if needed. |
||||||
|
|
||||||
|
## PATH Management |
||||||
|
|
||||||
|
This configuration uses ZSH’s `path` array where possible instead of repeatedly prepending strings to `$PATH`. |
||||||
|
|
||||||
|
At the end of shell initialization, PATH entries should be deduplicated with: |
||||||
|
|
||||||
|
```zsh |
||||||
|
typeset -U path PATH |
||||||
|
``` |
||||||
|
|
||||||
|
This keeps path ordering predictable while avoiding duplicate entries. |
||||||
|
|
||||||
|
## Git Completion |
||||||
|
|
||||||
|
Git completion support is installed automatically on first run into: |
||||||
|
|
||||||
|
```text |
||||||
|
$HOME/.zsh |
||||||
|
``` |
||||||
|
|
||||||
|
The setup downloads: |
||||||
|
|
||||||
|
```text |
||||||
|
git-completion.bash |
||||||
|
_git |
||||||
|
``` |
||||||
|
|
||||||
|
from the official Git repository. |
||||||
|
|
||||||
|
If the download fails, manually place both completion files in `$HOME/.zsh` and reload the shell. |
||||||
|
|
||||||
|
## Syntax Highlighting |
||||||
|
|
||||||
|
If the installed ZSH version is new enough, `zsh-syntax-highlighting` is automatically cloned into: |
||||||
|
|
||||||
|
```text |
||||||
|
$HOME/.zsh/zsh-syntax-highlighting |
||||||
|
``` |
||||||
|
|
||||||
|
It is sourced last, which is required for `zsh-syntax-highlighting` to work correctly with most ZSH configurations. |
||||||
|
|
||||||
|
## Rust |
||||||
|
|
||||||
|
Rust is initialized from: |
||||||
|
|
||||||
|
```text |
||||||
|
$HOME/.cargo/env |
||||||
|
``` |
||||||
|
|
||||||
|
if that file exists. |
||||||
|
|
||||||
|
This exposes standard Rust tooling such as: |
||||||
|
|
||||||
|
```text |
||||||
|
cargo |
||||||
|
rustc |
||||||
|
rustfmt |
||||||
|
clippy |
||||||
|
rust-analyzer |
||||||
|
``` |
||||||
|
|
||||||
|
when installed through `rustup`. |
||||||
|
|
||||||
|
## Go |
||||||
|
|
||||||
|
If Go is installed, this configuration sets: |
||||||
|
|
||||||
|
```zsh |
||||||
|
GOPATH=$HOME/.go |
||||||
|
``` |
||||||
|
|
||||||
|
and adds the Go binary directory to `PATH`. |
||||||
|
|
||||||
|
## macOS Notes |
||||||
|
|
||||||
|
On macOS, machine-specific Homebrew setup should live in `macrc`, not in the shared cross-platform exports file. |
||||||
|
|
||||||
|
Common macOS tools configured there include: |
||||||
|
|
||||||
|
```text |
||||||
|
Homebrew |
||||||
|
LLVM / clangd / clang-format |
||||||
|
OpenSSL |
||||||
|
OpenJDK |
||||||
|
Qt |
||||||
|
Tcl/Tk |
||||||
|
Ghostty |
||||||
|
Sublime Text CLI |
||||||
|
``` |
||||||
|
|
||||||
|
The Sublime Text CLI symlink should be created once per machine, not on every shell startup: |
||||||
|
|
||||||
|
```sh |
||||||
|
sudo mkdir -p /usr/local/bin |
||||||
|
sudo ln -sf "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl |
||||||
|
``` |
||||||
|
|
||||||
|
## Design Goals |
||||||
|
|
||||||
|
This configuration aims to be: |
||||||
|
|
||||||
|
- Modular |
||||||
|
- Portable across Linux and macOS |
||||||
|
- Safe to version-control |
||||||
|
- Friendly to private machine-local overrides |
||||||
|
- Predictable about `PATH` ordering |
||||||
|
- Minimal enough to debug when something goes wrong |
||||||
@ -0,0 +1,63 @@ |
|||||||
|
# Alias |
||||||
|
if [[ "$OS_TYPE" != "gnu-linux" ]]; then |
||||||
|
alias python='python3' |
||||||
|
fi |
||||||
|
|
||||||
|
# rlwrap provides readline wrapping for programs. |
||||||
|
# This alias makes the SBCL REPL usable. |
||||||
|
alias sbcl='rlwrap sbcl' |
||||||
|
|
||||||
|
# Useful git aliases |
||||||
|
alias gita='git add' |
||||||
|
alias gitap='git add -p' |
||||||
|
alias gitc='git commit' |
||||||
|
alias gitp='git push' |
||||||
|
alias gits='git status' |
||||||
|
alias gitd='git diff' |
||||||
|
|
||||||
|
alias k8='kubectl' |
||||||
|
|
||||||
|
# Good overrides |
||||||
|
|
||||||
|
alias ls='ls --color=auto' |
||||||
|
alias grep='grep --colour=auto' |
||||||
|
alias egrep='egrep --colour=auto' |
||||||
|
alias fgrep='fgrep --colour=auto' |
||||||
|
|
||||||
|
# Don't nuke the computer |
||||||
|
alias rm='rm -i' |
||||||
|
|
||||||
|
# Confirm before overwriting |
||||||
|
alias cp='cp -i' |
||||||
|
|
||||||
|
# Default free to sizes in megabytes |
||||||
|
alias free='free -m' |
||||||
|
|
||||||
|
# Better ls - lists more information for each file |
||||||
|
alias ll='ls -lh' |
||||||
|
|
||||||
|
# Less is a better more |
||||||
|
alias more=less |
||||||
|
|
||||||
|
# df in human readable sizes |
||||||
|
alias df='df -h' |
||||||
|
|
||||||
|
# I use Neovim |
||||||
|
if [ -x "$(command -v nvim)" ]; then |
||||||
|
alias vim=nvim |
||||||
|
fi |
||||||
|
|
||||||
|
# Human readable ls for the current directory |
||||||
|
if [[ "$OS_TYPE" != "gnu-linux" ]]; then |
||||||
|
# OS X lt |
||||||
|
alias lt='du -sh * | sort -h' |
||||||
|
else |
||||||
|
alias lt='ls --human-readable --size -1 -S --classify' |
||||||
|
fi |
||||||
|
|
||||||
|
|
||||||
|
# Count files in the current directory |
||||||
|
alias count='find . -type f | wc -l' |
||||||
|
|
||||||
|
# Generate sha1 hashes on the fly |
||||||
|
alias sha1='openssl sha1' |
||||||
@ -0,0 +1,76 @@ |
|||||||
|
#!/bin/zsh |
||||||
|
|
||||||
|
# ------------------------- |
||||||
|
# Editor |
||||||
|
# ------------------------- |
||||||
|
if command -v vim >/dev/null 2>&1; then |
||||||
|
export EDITOR=vim |
||||||
|
else |
||||||
|
export EDITOR=vi |
||||||
|
fi |
||||||
|
|
||||||
|
# ------------------------- |
||||||
|
# C / C++ compiler defaults |
||||||
|
# ------------------------- |
||||||
|
if command -v clang >/dev/null 2>&1; then |
||||||
|
export CC="$(command -v clang)" |
||||||
|
elif command -v gcc >/dev/null 2>&1; then |
||||||
|
export CC="$(command -v gcc)" |
||||||
|
fi |
||||||
|
|
||||||
|
if command -v clang++ >/dev/null 2>&1; then |
||||||
|
export CXX="$(command -v clang++)" |
||||||
|
elif command -v g++ >/dev/null 2>&1; then |
||||||
|
export CXX="$(command -v g++)" |
||||||
|
fi |
||||||
|
|
||||||
|
# ------------------------- |
||||||
|
# History |
||||||
|
# ------------------------- |
||||||
|
# Note: HISTCONTROL is bash-specific, but harmless. |
||||||
|
# ZSH history dedupe should usually be configured with setopt elsewhere. |
||||||
|
export HISTCONTROL=ignoredups |
||||||
|
|
||||||
|
# ------------------------- |
||||||
|
# User paths |
||||||
|
# ------------------------- |
||||||
|
path=("$HOME/bin" $path) |
||||||
|
path=("$HOME/.local/bin" $path) |
||||||
|
|
||||||
|
# ------------------------- |
||||||
|
# Go |
||||||
|
# ------------------------- |
||||||
|
if command -v go >/dev/null 2>&1; then |
||||||
|
export GOPATH="$HOME/.go" |
||||||
|
path=("$(go env GOPATH)/bin" $path) |
||||||
|
fi |
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "linux-gnu"* ]]; then |
||||||
|
# If the Go install guide was followed for Linux, |
||||||
|
# /usr/local/go will contain the go binary. |
||||||
|
[[ -d "/usr/local/go/bin" ]] && path=("/usr/local/go/bin" $path) |
||||||
|
fi |
||||||
|
|
||||||
|
# ------------------------- |
||||||
|
# Ruby / RVM |
||||||
|
# ------------------------- |
||||||
|
if [[ -d "$HOME/.rvm/bin" ]]; then |
||||||
|
path=("$HOME/.rvm/bin" $path) |
||||||
|
fi |
||||||
|
|
||||||
|
# ----------------------------- |
||||||
|
# Rust / Cargo - Let rustup win |
||||||
|
# ----------------------------- |
||||||
|
if [[ -f "$HOME/.cargo/env" ]]; then |
||||||
|
. "$HOME/.cargo/env" |
||||||
|
fi |
||||||
|
|
||||||
|
if [[ -d "$HOME/.cargo/bin" ]]; then |
||||||
|
path=("$HOME/.cargo/bin" $path) |
||||||
|
fi |
||||||
|
# ------------------------- |
||||||
|
# OpenSSL fallback |
||||||
|
# ------------------------- |
||||||
|
if command -v openssl >/dev/null 2>&1; then |
||||||
|
export OPENSSL_BIN="$(command -v openssl)" |
||||||
|
fi |
||||||
@ -0,0 +1,12 @@ |
|||||||
|
#!/usr/zsh |
||||||
|
|
||||||
|
parse_git_branch() { |
||||||
|
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /' |
||||||
|
} |
||||||
|
|
||||||
|
# If you ever needed weather... |
||||||
|
weather() { |
||||||
|
curl wttr.in |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,19 @@ |
|||||||
|
#!/bin/zsh |
||||||
|
|
||||||
|
if [[ "$OSTYPE" == linux-gnu* ]]; then |
||||||
|
export PATH="/usr/local/bin:$PATH" |
||||||
|
export PYENV_ROOT="$HOME/.pyenv" |
||||||
|
|
||||||
|
[[ -d "$PYENV_ROOT/bin" ]] && export PATH="$PYENV_ROOT/bin:$PATH" |
||||||
|
|
||||||
|
if command -v pyenv >/dev/null 2>&1; then |
||||||
|
eval "$(pyenv init -)" |
||||||
|
|
||||||
|
if pyenv commands | grep -qx "virtualenv-init"; then |
||||||
|
eval "$(pyenv virtualenv-init -)" |
||||||
|
fi |
||||||
|
fi |
||||||
|
fi |
||||||
|
|
||||||
|
# RVM configuration |
||||||
|
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" |
||||||
@ -0,0 +1,3 @@ |
|||||||
|
if command -v setxkbmap >/dev/null 2>&1 && [[ "$XDG_SESSION_TYPE" == "x11" ]]; then |
||||||
|
setxkbmap -option caps:escape |
||||||
|
fi |
||||||
@ -0,0 +1,51 @@ |
|||||||
|
#!/bin/zsh |
||||||
|
|
||||||
|
# ------------------------- |
||||||
|
# macOS-specific setup |
||||||
|
# ------------------------- |
||||||
|
|
||||||
|
# Prefer Apple Silicon Homebrew, fall back to Intel Homebrew. |
||||||
|
if [[ -d "/opt/homebrew" ]]; then |
||||||
|
export HOMEBREW_PREFIX="/opt/homebrew" |
||||||
|
elif [[ -d "/usr/local/Homebrew" || -d "/usr/local/Cellar" ]]; then |
||||||
|
export HOMEBREW_PREFIX="/usr/local" |
||||||
|
fi |
||||||
|
|
||||||
|
if [[ -n "$HOMEBREW_PREFIX" ]]; then |
||||||
|
[[ -d "$HOMEBREW_PREFIX/bin" ]] && path=("$HOMEBREW_PREFIX/bin" $path) |
||||||
|
[[ -d "$HOMEBREW_PREFIX/sbin" ]] && path=("$HOMEBREW_PREFIX/sbin" $path) |
||||||
|
|
||||||
|
# LLVM / clangd / clang-format |
||||||
|
if [[ -d "$HOMEBREW_PREFIX/opt/llvm/bin" ]]; then |
||||||
|
path=("$HOMEBREW_PREFIX/opt/llvm/bin" $path) |
||||||
|
export LDFLAGS="-L$HOMEBREW_PREFIX/opt/llvm/lib ${LDFLAGS:-}" |
||||||
|
export CPPFLAGS="-I$HOMEBREW_PREFIX/opt/llvm/include ${CPPFLAGS:-}" |
||||||
|
fi |
||||||
|
|
||||||
|
# OpenSSL |
||||||
|
if [[ -d "$HOMEBREW_PREFIX/opt/openssl@3" ]]; then |
||||||
|
export OPENSSL_ROOT_DIR="$HOMEBREW_PREFIX/opt/openssl@3" |
||||||
|
export LDFLAGS="-L$OPENSSL_ROOT_DIR/lib ${LDFLAGS:-}" |
||||||
|
export CPPFLAGS="-I$OPENSSL_ROOT_DIR/include ${CPPFLAGS:-}" |
||||||
|
export PKG_CONFIG_PATH="$OPENSSL_ROOT_DIR/lib/pkgconfig:${PKG_CONFIG_PATH:-}" |
||||||
|
elif [[ -d "$HOMEBREW_PREFIX/opt/openssl" ]]; then |
||||||
|
export OPENSSL_ROOT_DIR="$HOMEBREW_PREFIX/opt/openssl" |
||||||
|
export LDFLAGS="-L$OPENSSL_ROOT_DIR/lib ${LDFLAGS:-}" |
||||||
|
export CPPFLAGS="-I$OPENSSL_ROOT_DIR/include ${CPPFLAGS:-}" |
||||||
|
export PKG_CONFIG_PATH="$OPENSSL_ROOT_DIR/lib/pkgconfig:${PKG_CONFIG_PATH:-}" |
||||||
|
fi |
||||||
|
|
||||||
|
# OpenJDK |
||||||
|
[[ -d "$HOMEBREW_PREFIX/opt/openjdk/bin" ]] && path=("$HOMEBREW_PREFIX/opt/openjdk/bin" $path) |
||||||
|
|
||||||
|
# Qt |
||||||
|
[[ -d "$HOMEBREW_PREFIX/opt/qt/bin" ]] && path=("$HOMEBREW_PREFIX/opt/qt/bin" $path) |
||||||
|
|
||||||
|
# Tcl/Tk |
||||||
|
[[ -d "$HOMEBREW_PREFIX/opt/tcl-tk/bin" ]] && path=("$HOMEBREW_PREFIX/opt/tcl-tk/bin" $path) |
||||||
|
fi |
||||||
|
|
||||||
|
# Ghostty CLI |
||||||
|
if [[ -d "/Applications/Ghostty.app/Contents/MacOS" ]]; then |
||||||
|
path=("/Applications/Ghostty.app/Contents/MacOS" $path) |
||||||
|
fi |
||||||
@ -0,0 +1,10 @@ |
|||||||
|
#!/bin/zsh |
||||||
|
|
||||||
|
setopt prompt_subst |
||||||
|
autoload -Uz vcs_info |
||||||
|
precmd () { vcs_info } |
||||||
|
|
||||||
|
# Format = [<branch>] |
||||||
|
zstyle ':vcs_info:*' formats ' %F{green}[%b]%f' |
||||||
|
|
||||||
|
PS1='%B%n@%m%b %F{blue}%2~%f${vcs_info_msg_0_} %B⇨%b ' |
||||||
@ -0,0 +1,109 @@ |
|||||||
|
#! /usr/bin/env bash |
||||||
|
|
||||||
|
name=$1 |
||||||
|
cmake_version=$2 |
||||||
|
c_standard=$3 |
||||||
|
|
||||||
|
# Finds the directory of this script |
||||||
|
if [[ "$OS_TYPE" == "linux-gnu" ]]; then |
||||||
|
script_dir=$(cd "$( dirname "`readlink -f ${BASH_SOURCE[0]}`")" && pwd) |
||||||
|
else |
||||||
|
script_dir=$(cd "$( dirname "`greadlink -f ${BASH_SOURCE[0]}`")" && pwd) |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -z $name ] |
||||||
|
then |
||||||
|
echo "Name must be specified" |
||||||
|
echo "" |
||||||
|
echo "./cgen.sh <name> [cmake version] [C Standard]" |
||||||
|
exit -1 |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -z $cmake_version ] |
||||||
|
then |
||||||
|
echo "No CMake version supplied...defaulting to 3.15" |
||||||
|
cmake_version="3.15" |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -z $c_standard ] |
||||||
|
then |
||||||
|
echo "No C Standard supplied...defaulting to 11" |
||||||
|
c_standard="11" |
||||||
|
fi |
||||||
|
|
||||||
|
mkdir $name |
||||||
|
mkdir $name/src |
||||||
|
mkdir $name/include |
||||||
|
|
||||||
|
cmake_config=$name/CMakeLists.txt |
||||||
|
|
||||||
|
touch $cmake_config |
||||||
|
|
||||||
|
echo "cmake_minimum_required(VERSION $cmake_version)" >> $cmake_config |
||||||
|
echo "project($name)" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "set (CMAKE_C_STANDARD $c_standard)" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "# Output to bin and lib" >> $cmake_config |
||||||
|
echo "set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY \${CMAKE_BINARY_DIR}/lib)" >> $cmake_config |
||||||
|
echo "set(CMAKE_LIBRARY_OUTPUT_DIRECTORY \${CMAKE_BINARY_DIR}/lib)" >> $cmake_config |
||||||
|
echo "set(CMAKE_RUNTIME_OUTPUT_DIRECTORY \${CMAKE_BINARY_DIR}/bin)" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "# The following lines enable compile_commands.json and dump it in the root of the project" >> $cmake_config |
||||||
|
echo "# This is needed for clangd and lsp to work" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "set(CMAKE_EXPORT_COMPILE_COMMANDS ON)" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "if(EXISTS \"\${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json\")" >> $cmake_config |
||||||
|
echo " execute_process(COMMAND \${CMAKE_COMMAND} -E copy_if_different" >> $cmake_config |
||||||
|
echo " \${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json" >> $cmake_config |
||||||
|
echo " \${CMAKE_CURRENT_SOURCE_DIR}/compile_commands.json" >> $cmake_config |
||||||
|
echo " )" >> $cmake_config |
||||||
|
echo "endif()" >> $cmake_config |
||||||
|
echo "#-------- END COMPILE_COMMANDS.JSON SECTION --------#" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "file(GLOB SOURCE \${PROJECT_SOURCE_DIR}/src/*.c)" >> $cmake_config |
||||||
|
echo "file(GLOB INCLUDE \${PROJECT_SOURCE_DIR}/include/*.h)" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "include_directories(\${PROJECT_SOURCE_DIR}/include)" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "# Controls debug printing based on the compiled binary mode - check with #ifdef DEBUG_BUILD" >> $cmake_config |
||||||
|
echo "IF(CMAKE_BUILD_TYPE MATCHES DEBUG)" >> $cmake_config |
||||||
|
echo "message(\"-- Configuring debug build...\")" >> $cmake_config |
||||||
|
echo "add_compile_definitions(DEBUG_BUILD)" >> $cmake_config |
||||||
|
echo "ENDIF(CMAKE_BUILD_TYPE MATCHES DEBUG)" >> $cmake_config |
||||||
|
echo "" >> $cmake_config |
||||||
|
echo "add_executable(\${PROJECT_NAME} \${SOURCE} \${INCLUDE})" >> $cmake_config |
||||||
|
|
||||||
|
|
||||||
|
echo "Copying .clang-format..." |
||||||
|
cp $script_dir/cgen_etc/clang_format_template $name/.clang-format |
||||||
|
|
||||||
|
echo "Copying .gitignore..." |
||||||
|
cp $script_dir/cgen_etc/gitignore_template $name/.gitignore |
||||||
|
|
||||||
|
sample_file=$name/src/main.c |
||||||
|
|
||||||
|
echo "#include <stdio.h>" >> $sample_file |
||||||
|
echo "" >> $sample_file |
||||||
|
echo "" >> $sample_file |
||||||
|
echo "int main(int argc, char **argv)" >> $sample_file |
||||||
|
echo "{" >> $sample_file |
||||||
|
echo " printf(\"Hello, world!\\n\");" >> $sample_file |
||||||
|
echo " return 0;" >> $sample_file |
||||||
|
echo "}" >> $sample_file |
||||||
|
echo "" >> $sample_file |
||||||
|
|
||||||
|
git --version 2>&1 >/dev/null |
||||||
|
GIT_IS_AVAILABLE=$? |
||||||
|
|
||||||
|
if [ $GIT_IS_AVAILABLE -eq 0 ] |
||||||
|
then |
||||||
|
git init $name |
||||||
|
fi |
||||||
|
|
||||||
|
echo "Created project $name." |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
AlignAfterOpenBracket: Align |
||||||
|
AlignConsecutiveMacros: 'true' |
||||||
|
AlignConsecutiveAssignments: 'true' |
||||||
|
AlignConsecutiveDeclarations: 'true' |
||||||
|
AlignTrailingComments: 'true' |
||||||
|
BreakBeforeBraces: Allman |
||||||
|
IndentCaseLabels: 'true' |
||||||
|
IndentWidth: '4' |
||||||
|
Language: Cpp |
||||||
|
PointerAlignment: Right |
||||||
|
SortIncludes: 'true' |
||||||
|
SpaceBeforeParens: ControlStatements |
||||||
|
SpaceBeforeRangeBasedForLoopColon: 'true' |
||||||
|
SpaceInEmptyParentheses: 'false' |
||||||
|
UseTab: Never |
||||||
|
ColumnLimit: 80 |
||||||
@ -0,0 +1,97 @@ |
|||||||
|
# Prerequisites |
||||||
|
*.d |
||||||
|
|
||||||
|
# Object files |
||||||
|
*.o |
||||||
|
*.ko |
||||||
|
*.obj |
||||||
|
*.elf |
||||||
|
|
||||||
|
# Linker output |
||||||
|
*.ilk |
||||||
|
*.map |
||||||
|
*.exp |
||||||
|
|
||||||
|
# Precompiled Headers |
||||||
|
*.gch |
||||||
|
*.pch |
||||||
|
|
||||||
|
# Libraries |
||||||
|
*.lib |
||||||
|
*.a |
||||||
|
*.la |
||||||
|
*.lo |
||||||
|
|
||||||
|
# Shared objects (inc. Windows DLLs) |
||||||
|
*.dll |
||||||
|
*.so |
||||||
|
*.so.* |
||||||
|
*.dylib |
||||||
|
|
||||||
|
# Executables |
||||||
|
*.exe |
||||||
|
*.out |
||||||
|
*.app |
||||||
|
*.i*86 |
||||||
|
*.x86_64 |
||||||
|
*.hex |
||||||
|
|
||||||
|
# Debug files |
||||||
|
*.dSYM/ |
||||||
|
*.su |
||||||
|
*.idb |
||||||
|
*.pdb |
||||||
|
|
||||||
|
# Kernel Module Compile Results |
||||||
|
*.mod* |
||||||
|
*.cmd |
||||||
|
.tmp_versions/ |
||||||
|
modules.order |
||||||
|
Module.symvers |
||||||
|
Mkfile.old |
||||||
|
dkms.conf |
||||||
|
|
||||||
|
# VSCode |
||||||
|
|
||||||
|
.vscode/* |
||||||
|
!.vscode/settings.json |
||||||
|
!.vscode/tasks.json |
||||||
|
!.vscode/launch.json |
||||||
|
!.vscode/extensions.json |
||||||
|
*.code-workspace |
||||||
|
|
||||||
|
# Vim |
||||||
|
|
||||||
|
# Swap |
||||||
|
[._]*.s[a-v][a-z] |
||||||
|
!*.svg # comment out if you don't need vector files |
||||||
|
[._]*.sw[a-p] |
||||||
|
[._]s[a-rt-v][a-z] |
||||||
|
[._]ss[a-gi-z] |
||||||
|
[._]sw[a-p] |
||||||
|
|
||||||
|
# Session |
||||||
|
Session.vim |
||||||
|
Sessionx.vim |
||||||
|
|
||||||
|
# Temporary |
||||||
|
.netrwhist |
||||||
|
*~ |
||||||
|
# Auto-generated tag files |
||||||
|
tags |
||||||
|
# Persistent undo |
||||||
|
[._]*.un~ |
||||||
|
|
||||||
|
# CMake |
||||||
|
|
||||||
|
CMakeLists.txt.user |
||||||
|
CMakeCache.txt |
||||||
|
CMakeFiles |
||||||
|
CMakeScripts |
||||||
|
Testing |
||||||
|
Makefile |
||||||
|
cmake_install.cmake |
||||||
|
install_manifest.txt |
||||||
|
compile_commands.json |
||||||
|
CTestTestfile.cmake |
||||||
|
_deps |
||||||
@ -0,0 +1,108 @@ |
|||||||
|
#!/bin/zsh |
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "linux-gnu" ]]; then |
||||||
|
symlink_dir=$(cd "$( dirname "`readlink -f ${(%):-%N}`" )" && pwd) |
||||||
|
else |
||||||
|
# OS X is not a fan of `readlink -f` |
||||||
|
symlink_dir=$(cd "$( dirname "`readlink ${(%):-%N}`" )" && pwd) |
||||||
|
fi |
||||||
|
|
||||||
|
# Store private information (exports, keys, etc) in .bash_private. |
||||||
|
if [[ -f $HOME/.bash_private ]]; then |
||||||
|
source $HOME/.bash_private |
||||||
|
fi |
||||||
|
|
||||||
|
# Or alternatively .private... |
||||||
|
if [[ -f $HOME/.private ]]; then |
||||||
|
source $HOME/.private |
||||||
|
fi |
||||||
|
|
||||||
|
# Or alternatively .zsh_private... |
||||||
|
if [[ -f $HOME/.zsh_private ]]; then |
||||||
|
source $HOME/.zsh_private |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -f $HOME/.inputrc ]; then |
||||||
|
source $HOME/.inputrc |
||||||
|
fi |
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then |
||||||
|
if [ -f $HOME/.macrc ]; then |
||||||
|
source $HOME/.macrc |
||||||
|
fi |
||||||
|
fi |
||||||
|
|
||||||
|
# Set up projects and gopath folder properly for the export in the export section. |
||||||
|
|
||||||
|
if [[ ! -d $HOME/projects ]]; then |
||||||
|
echo "Making $HOME/projects" |
||||||
|
mkdir -p $HOME/projects |
||||||
|
fi |
||||||
|
|
||||||
|
if [[ -x go ]]; then |
||||||
|
echo "Making $HOME/.go" |
||||||
|
mkdir -p $HOME/.go |
||||||
|
fi |
||||||
|
|
||||||
|
|
||||||
|
# Install zsh completion in ~/.zsh if it doesn't exist |
||||||
|
if [[ ! -d $HOME/.zsh ]]; then |
||||||
|
echo "Installing zsh git completion scripts" |
||||||
|
mkdir -p $HOME/.zsh |
||||||
|
pushd |
||||||
|
|
||||||
|
cd $HOME/.zsh |
||||||
|
|
||||||
|
curl -o git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash |
||||||
|
curl -o _git https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh |
||||||
|
|
||||||
|
popd |
||||||
|
fi |
||||||
|
|
||||||
|
autoload -U is-at-least |
||||||
|
|
||||||
|
# Install zsh-syntax-highlighting if it doesn't exist |
||||||
|
if is-at-least 4.3.11; then |
||||||
|
if [[ ! -d $HOME/.zsh/zsh-syntax-highlighting ]]; then |
||||||
|
echo "Installing zsh syntax highlighting" |
||||||
|
pushd |
||||||
|
|
||||||
|
cd $HOME/.zsh |
||||||
|
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git |
||||||
|
|
||||||
|
popd |
||||||
|
fi |
||||||
|
else |
||||||
|
echo "ZSH syntax highlighting requires ZSH >= 4.3.11 (current: $ZSH_VERSION)." |
||||||
|
fi |
||||||
|
|
||||||
|
zstyle ':completion:*:*:git:*' script $HOME/.zsh/git-completion.bash |
||||||
|
fpath=(~/.zsh $fpath) |
||||||
|
|
||||||
|
autoload -Uz compinit && compinit |
||||||
|
|
||||||
|
|
||||||
|
# Pull in other configurations |
||||||
|
source $symlink_dir/aliases.zsh |
||||||
|
source $symlink_dir/functions.zsh |
||||||
|
source $symlink_dir/exports.zsh |
||||||
|
source $symlink_dir/initializations.zsh |
||||||
|
source $symlink_dir/ps1.zsh |
||||||
|
source $symlink_dir/keybinds.zsh |
||||||
|
|
||||||
|
# ZSH syntax highlighting must be sourced last |
||||||
|
source $HOME/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh |
||||||
|
|
||||||
|
# Created by `userpath` on 2022-09-05 23:32:41 |
||||||
|
export PATH="$PATH:$HOME/.local/bin" |
||||||
|
|
||||||
|
# ghcup config - Haskell |
||||||
|
[ -f "/home/taylor/.ghcup/env" ] && source "/home/taylor/.ghcup/env" # ghcup-env |
||||||
|
|
||||||
|
# Ocaml |
||||||
|
test -r $HOME/.opam/opam-init/init.sh && . $HOME/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true |
||||||
|
|
||||||
|
# ------------------------- |
||||||
|
# Deduplicate PATH |
||||||
|
# ------------------------- |
||||||
|
typeset -U path PATH |
||||||
Loading…
Reference in new issue