_ _____ __ __ __ _ _____ ____ _ _____
| | / / | / / / //_// | / / | / __ ( ) ___/
| | / / /| | / / / ,< / |/ / /| | / /_/ //\__ \
| |/ / ___ |/ /___/ /| |/ /| / ___ |/ _, _/ ___/ /
|___/_/ |_/_____/_/ |_/_/ |_/_/ |_/_/ |_| /____/
__________ ____ ____________
/ ____/ __ \/ __ \/ ____/ ____/
/ /_ / / / / /_/ / / __/ __/
/ __/ / /_/ / _, _/ /_/ / /___
/_/ \____/_/ |_|\____/_____/
⚡🔥 WHERE CODE MEETS CHAOS 🔥⚡
My Debian home directory - forged in the fires of chaos, tempered with configuration files, and wielded with the fury of a thousand riffs.
This is where dotfiles headbang and shell scripts scream.
⚡ THE ARSENAL ⚡
🎸 WEAPONS OF MASS DEVELOPMENT
┌─────────────────────────────────────────────────┐
│ ⚔️ NODE.JS │ Managed by nvm │
│ ⚔️ PYTHON │ Managed by pyenv │
│ ⚔️ RUBY │ Managed by rbenv │
│ ⚔️ RUST │ Managed by rustup │
│ ⚔️ GO │ Managed by gvm │
│ ⚔️ DOCKER │ Containerized destruction │
│ ⚔️ POSTGRES │ Version 18 database engine │
└─────────────────────────────────────────────────┘
🔴 INITIALIZATION RITUAL 🔴
The .init/ System - Your Shell's Dark Ceremony
The .init/ directory is the beating heart of this environment. When your shell awakens, it performs a sacred ritual through ~/.init/init.sh, summoning power from these ancient scripts:
🗡️ THE SEVEN STAGES OF POWER
┌──────────────────────────────────────────────────────────────┐
│ 1. PATH.SH │ Forges the PATH to all binaries │
│ 2. EXPORT.SH │ Exports environment variables │
│ 3. ALIAS.SH │ Summons command shortcuts │
│ 4. SOURCE.SH │ Sources external power (nvm, cargo, etc) │
│ 5. FUNCTIONS.SH │ Unleashes custom shell functions │
│ 6. EVAL.SH │ Evaluates version managers (rbenv, etc) │
│ 7. START.SH │ Executes startup commands (ssh-add) │
└──────────────────────────────────────────────────────────────┘
📜 DETAILED BREAKDOWN OF EACH SCRIPT
1️⃣ path.sh - The Path of Destruction
Adds all binary directories to your $PATH:
~/bin- Your personal executables~/.local/bin- Local user binaries~/.rbenv/bin- Ruby version manager~/.pyenv/bin- Python version manager~/.cargo/bin- Rust binaries~/go/bin- Go binaries~/node_modules/.bin- Node.js binaries~/.init/bin- Custom init scripts~/Projects/kompose- Kompose tooling
2️⃣ export.sh - Environmental Warfare
export NVM_DIR="$HOME/.nvm" # Node Version Manager home
export REPOS_DIR="$HOME/repos" # Repository directory
export CHORE_CHORE="chore: chore" # Default commit message
3️⃣ alias.sh - Command Line Sorcery
ri # Reload init: source ~/.init/init.sh
g0 # Git stage all and check if clean
g1 # Git reset to single commit (nuclear option)
g2 # Get last commit message
rs # Rsync with sudo on remote
ss # Serve static files on port 8000
yt # Download YouTube as MP3
4️⃣ source.sh - External Power Summoning
Sources critical external scripts:
- NVM - Node Version Manager (
$NVM_DIR/nvm.sh) - RVM - Ruby Version Manager (commented out)
- Cargo - Rust environment (
~/.cargo/env) - Bash completion for NVM
5️⃣ functions.sh - The Grimoire of Bash
Custom functions for deployment and media manipulation:
Git Warfare:
_home_push- Commit and push changes_home_pull- Stash, pull, and pop changes
Deployment Spells:
_site_deploy_jekyll <site>- Build & deploy Jekyll site_site_deploy_nuxt <site>- Build & deploy Nuxt site_site_deploy_static <site>- Deploy static files
Media Alchemy:
batch_file_sequence <prefix> <ext>- Rename files with numbersbatch_image_webp- Convert all images to WebPbatch_video_x264- Convert videos to x264 codec_image_optimize <name>- Full image optimization pipeline_video_optimize <file>- Optimize video with ffmpeg
6️⃣ eval.sh - Version Manager Invocation
Initializes version managers through eval:
- oh-my-posh - Shell prompt theme engine
- rbenv - Ruby version manager
- pyenv - Python version manager
7️⃣ start.sh - The Final Awakening
Executes startup commands:
ssh-add- Adds SSH keys to the agent silently
🗂️ Additional Directories
.init/bin/- Custom executable scripts (e.g.,mime_mp4_gif.sh).init/hooks/- Reserved for shell hooks (currently empty)
🩸 QUICK START RITUAL 🩸
Summoning the Environment
# 1. Clone this unholy repository
git init && git remote add origin git@github.com:valknarogg/home.git
git fetch && git reset --hard origin/main
git branch --set-upstream-to=origin/main main
# 2. Install Ansible (if not already installed)
sudo apt install git ansible
# 3. Configure git
git config --global init.defaultBranch main
git config --global --add safe.directory /home/$USER
# 4. Unleash the Ansible playbook
sudo -u $USER ansible-playbook -K playbook.yml
Selective Provisioning
Run specific parts of the setup using tags:
# Install only Node.js environment
ansible-playbook --tags node -K playbook.yml
# Install Python + Ruby
ansible-playbook --tags python,ruby -K playbook.yml
# Install everything
ansible-playbook -K playbook.yml
🏷️ Available Tags:
base | node | python | ruby | rust | zsh | postgres | docker | fonts | flatpak | github | oh-my-posh
🎯 ARTY - REPOSITORY ORCHESTRATION 🎯
What is Arty?
Arty.sh is a bash-based dependency and repository manager that orchestrates git subrepositories like a conductor of chaos. It's part of the butter.sh ecosystem - a suite of bash development tools.
Installing Arty
Arty is already installed globally at /usr/local/bin/arty. If you need to install/update it:
# Clone butter.sh ecosystem
git clone https://github.com/butter-sh/butter-sh.github.io.git ~/Projects/butter-sh
# Install arty globally (requires sudo)
cd ~/Projects/butter-sh/projects/arty.sh
sudo ./arty.sh install
The arty.yml Configuration
The root ~/arty.yml defines your entire repository ecosystem:
name: "Valknar's home"
version: "1.0.0"
envs:
dev: # Development environment
prod: # Production environment
references:
# Project repositories
- url: git@github.com:valknarogg/pivoine.art.git
into: Projects/pivoine.art
env: dev
# Media repositories
- url: git@github.com:valknarogg/home-pictures.git
into: Bilder
env: dev
# Version managers
- url: https://github.com/nvm-sh/nvm.git
into: .nvm
# ... and many more
scripts:
debug: echo "$ARTY_BIN_DIR" && echo "$ARTY_LIBS_DIR"
Using Arty
# Sync all dev environment repositories
arty sync --env dev
# Sync production repositories only
arty sync --env prod
# Install dependencies from arty.yml
arty install
# Run custom scripts defined in arty.yml
arty debug
# Show dependency tree
arty deps
# Update a specific reference
arty update pivoine.art
What Arty Manages:
- ✅ Project repositories (pivoine.art, sexy.pivoine.art, etc.)
- ✅ Media repositories (Pictures, Videos, Music)
- ✅ Docker compose configurations
- ✅ Version managers (nvm, rbenv, pyenv, gvm)
- ✅ Oh-My-Zsh and plugins
- ✅ Shell scripts and binaries
Environment-Based Management
References can be tagged with env: dev or env: prod to control which repositories are synced in different environments. This allows you to:
- Keep heavy media files out of production servers
- Separate development projects from system utilities
- Maintain clean, minimal deployments
🔥 COMMAND LINE BRUTALITY 🔥
Git Operations
g0 # Stage all changes and verify clean state
g1 # Nuclear reset to single commit
g2 # Show last commit message
git add -A && git commit -m "$(g2)" # Reuse last commit message
Media Processing
# Convert all images in directory to WebP
batch_image_webp
# Rename files with sequence numbers
batch_file_sequence artwork webp
# Optimize video
_video_optimize input.mov
# Download YouTube video as MP3
yt "https://youtube.com/watch?v=..."
Development Servers
# Serve current directory on port 8000
ss
# Run Jekyll site with livereload
cd ~/Projects/pivoine.art && bundle exec jekyll serve --livereload
# Run Node.js dev server
cd ~/Projects/node.js/awesome && pnpm dev
Rsync Power
# Sync to remote with sudo
rs /local/path/ user@host:/remote/path/
📁 PROJECT STRUCTURE 📁
~/Projects/
├── butter-sh/ # Butter.sh ecosystem (arty, judge, myst, etc.)
├── docker-compose/ # Docker orchestration configs
├── pivoine.art/ # Jekyll art portfolio (main site)
├── docs.pivoine.art/ # Documentation site
├── sexy.pivoine.art/ # Rust + web project (includes buttplug package)
└── node.js/
├── awesome/ # GitHub Awesome lists browser
├── awesome-app/ # Awesome list application
├── email-pour-vous/ # Email templating project
└── webshot/ # Website screenshot tool
🛠️ DOTFILE HIGHLIGHTS 🛠️
Shell Configuration
.zshrc- Oh-My-Zsh with Powerlevel10k theme.p10k.zsh- Powerlevel10k configuration.bashrc- Bash configuration (fallback)
Version Files
.nvmrc- Node.js version.ruby-version- Ruby version.python-version- Python version
Code Quality
.pre-commit-config.yaml- Pre-commit hooks (Python).rubocop.yml- Ruby style enforcementeslint.config.mts- JavaScript/TypeScript linting.prettierrc- Code formatting rulesbiome.json- Fast linter/formatter
Package Management
requirements.txt- Python packages (pip)Gemfile- Ruby gems (bundler)
Git Configuration
.gitignore- INVERTED PATTERN (ignore all, allow specific files).gitconfig- Git user configuration
Orchestration
arty.yml- Repository and dependency managementplaybook.yml- Ansible system provisioning
⚙️ GIT SELECTIVE TRACKING ⚙️
This repository uses an inverted .gitignore pattern:
# Ignore everything
*
# Allow specific files
!CLAUDE.md
!README.md
!.gitignore
!.zshrc
!arty.yml
!playbook.yml
...
Why? To track only essential dotfiles and configurations while ignoring cache, logs, and user data. Your home directory becomes a git repository without the chaos.
Note: The .init/ directory is NOT tracked in git - it exists locally only for shell initialization. This keeps your shell configuration private and machine-specific.
🎸 SHELL PLUGIN POWER 🎸
Oh-My-Zsh Plugins Loaded:
git pm2 gh sudo ssh ruby rust python node github
rsync nvm rbenv pyenv docker docker-compose qrcode
zsh-autosuggestions zsh-syntax-highlighting
zsh-interactive-cd zsh-navigation-tools
🔗 USEFUL RESOURCES 🔗
System & Shell
Language Managers
- nvm - Node Version Manager
- rbenv - Ruby Version Manager
- pyenv - Python Version Manager
- gvm - Go Version Manager
- rustup - Rust Toolchain Manager
Orchestration
🖤 LICENSE 🖤
MIT License - Do whatever the hell you want with it.
═════════════════════════════════════════════════════════════════
__________ ____ ______ _________
/ ____/ __ \/ __ \/ ____/ / _/ ___/
/ / / / / / / / / __/ / / \__ \
/ /___/ /_/ / /_/ / /___ _/ / ___/ /
\____/\____/_____/_____/ /___//____/
______________ _______ ____ ____ ___ ______ __
/_ __/ ____/ |/ / __ \/ __ \/ __ \/ | / __ \ \/ /
/ / / __/ / /|_/ / /_/ / / / / /_/ / /| | / /_/ /\ /
/ / / /___/ / / / ____/ /_/ / _, _/ ___ |/ _, _/ / /
/_/ /_____/_/ /_/_/ \____/_/ |_/_/ |_/_/ |_| /_/
__ __________________ __ _________
/ |/ / ____/_ __/ | / / / _/ ___/
/ /|_/ / __/ / / / /| | / / / / \__ \
/ / / / /___ / / / ___ |/ /___ _/ / ___/ /
/_/ /_/_____/ /_/ /_/ |_/_____/ /___//____/
______________________ _ _____ __
/ ____/_ __/ ____/ __ \/ | / / | / /
/ __/ / / / __/ / /_/ / |/ / /| | / /
/ /___ / / / /___/ _, _/ /| / ___ |/ /___
/_____/ /_/ /_____/_/ |_/_/ |_/_/ |_/_____/
═════════════════════════════════════════════════════════════════
🔥⚡ FORGED BY VALKNAR ⚡🔥
valknar@pivoine.art
Powered by Debian | Fueled by Metal
🤘 🤘 🤘