Initial commit

This commit is contained in:
2025-11-25 08:37:43 +01:00
commit c99904674c
17 changed files with 1023 additions and 0 deletions

34
.editorconfig Executable file
View File

@@ -0,0 +1,34 @@
# EditorConfig is awesome: https://editorconfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
indent_size = 2
# Matches multiple files with brace expansion notation
# Set default charset
[*.{js,py}]
charset = utf-8
# 4 space indentation
[*.py]
indent_style = space
indent_size = 4
# Tab indentation (no size specified)
[Makefile]
indent_style = tab
# Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2
# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

16
.gitconfig Executable file
View File

@@ -0,0 +1,16 @@
[user]
name = Sebastian Krüger
email = valknar@pivoine.art
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[core]
editor = nano
[init]
defaultBranch = main
[alias]
squash-all = "!f(){ git reset $(git commit-tree \"HEAD^{tree}\" \"$@\");};f"
[push]
autoSetupRemote = true

30
.gitignore vendored Executable file
View File

@@ -0,0 +1,30 @@
# Ignore everything
*
# But not these files.
!CLAUDE.md
!.gitignore
!.gitconfig
!.gitmodules
!README.md
!.editorconfig
!.nvmrc
!.ruby-version
!.python-version
!.p10k.zsh
!.zprofile
!.zlogout
!.zlogin
!.zshrc
!.zshenv
!.hushlogin
!arty.yml
!signature.txt
# Ignore so we won't commit these in the allowed dirctories.
.DS_Store
*.log*
*.db*
*.vscdb*
*.sqlite*
*.bnk*

0
.hushlogin Normal file
View File

1
.nvmrc Normal file
View File

@@ -0,0 +1 @@
v20.19.1

193
.p10k.zsh Normal file
View File

@@ -0,0 +1,193 @@
# Generated by Powerlevel10k configuration wizard on 2025-09-04 at 02:33 CEST.
# Based on romkatv/powerlevel10k/config/p10k-pure.zsh, checksum 07533.
# Wizard options: nerdfont-v3 + powerline, small icons, pure, snazzy, 24h time, 1 line,
# compact, instant_prompt=verbose.
# Type `p10k configure` to generate another config.
#
# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure).
#
# Differences from Pure:
#
# - Git:
# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state.
# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`).
#
# Apart from the differences listed above, the replication of Pure prompt is exact. This includes
# even the questionable parts. For example, just like in Pure, there is no indication of Git status
# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt
# doesn't fit on one line, it wraps around with no attempt to shorten it.
#
# If you like the general style of Pure but not particularly attached to all its quirks, type
# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking
# advantage of Powerlevel10k features that aren't present in Pure.
# Temporarily change options.
'builtin' 'local' '-a' 'p10k_config_opts'
[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
() {
emulate -L zsh -o extended_glob
# Unset all configuration options.
unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'
# Zsh >= 5.1 is required.
[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
# Prompt colors.
local grey='242'
local red='#FF5C57'
local yellow='#F3F99D'
local blue='#57C7FF'
local magenta='#FF6AC1'
local cyan='#9AEDFE'
local white='#F1F1F0'
# Left prompt segments.
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
context # user@host
dir # current directory
vcs # git status
command_execution_time # previous command duration
# virtualenv # python virtual environment
prompt_char # prompt symbol
)
# Right prompt segments.
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
# command_execution_time # previous command duration
# virtualenv # python virtual environment
# context # user@host
time # current time
)
# Basic style options that define the overall prompt look.
typeset -g POWERLEVEL9K_BACKGROUND= # transparent background
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol
typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons
# Add an empty line before each prompt except the first. This doesn't emulate the bug
# in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar.
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false
# Magenta prompt symbol if the last command succeeded.
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$magenta
# Red prompt symbol if the last command failed.
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red
# Default prompt symbol.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION=''
# Prompt symbol in command vi mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION=''
# Prompt symbol in visual vi mode is the same as in command mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION=''
# Prompt symbol in overwrite vi mode is the same as in command mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false
# Grey Python Virtual Environment.
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey
# Don't show Python version.
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
# Blue current directory.
typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue
# Context format when root: user@host. The first part white, the rest grey.
typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$white}%n%f%F{$grey}@%m%f"
# Context format when not root: user@host. The whole thing grey.
typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$grey}%n@%m%f"
# Don't show context unless root or in SSH.
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION=
# Show previous command duration only if it's >= 5s.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=5
# Don't show fractional seconds. Thus, 7s rather than 7.3s.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
# Duration format: 1d 2h 3m 4s.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
# Yellow previous command duration.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow
# Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones.
typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey
# Disable async loading indicator to make directories that aren't Git repositories
# indistinguishable from large Git repositories without known state.
typeset -g POWERLEVEL9K_VCS_LOADING_TEXT=
# Don't wait for Git status even for a millisecond, so that prompt always updates
# asynchronously when Git state changes.
typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0
# Cyan ahead/behind arrows.
typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan
# Don't show remote branch, current tag or stashes.
typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind)
# Don't show the branch icon.
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
# When in detached HEAD state, show @commit where branch normally goes.
typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@'
# Don't show staged, unstaged, untracked indicators.
typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON=
# Show '*' when there are staged, unstaged or untracked files.
typeset -g POWERLEVEL9K_VCS_DIRTY_ICON='*'
# Show '⇣' if local branch is behind remote.
typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣'
# Show '⇡' if local branch is ahead of remote.
typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡'
# Don't show the number of commits next to the ahead/behind arrows.
typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1
# Remove space between '⇣' and '⇡' and all trailing spaces.
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }'
# Grey current time.
typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey
# Format for the current time: 09:51:02. See `man 3 strftime`.
typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
# If set to true, time will update when you hit enter. This way prompts for the past
# commands will contain the start times of their commands rather than the end times of
# their preceding commands.
typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
# Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
# when accepting a command line. Supported values:
#
# - off: Don't change prompt when accepting a command line.
# - always: Trim down prompt when accepting a command line.
# - same-dir: Trim down prompt when accepting a command line unless this is the first command
# typed after changing current working directory.
typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off
# Instant prompt mode.
#
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
# it incompatible with your zsh configuration files.
# - quiet: Enable instant prompt and don't print warnings when detecting console output
# during zsh initialization. Choose this if you've read and understood
# https://github.com/romkatv/powerlevel10k#instant-prompt.
# - verbose: Enable instant prompt and print a warning when detecting console output during
# zsh initialization. Choose this if you've never tried instant prompt, haven't
# seen the warning, or if you are unsure what this all means.
typeset -g POWERLEVEL9K_INSTANT_PROMPT=off
# Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
# For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
# can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
# really need it.
typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=off
# If p10k is already loaded, reload configuration.
# This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
(( ! $+functions[p10k] )) || p10k reload
}
# Tell `p10k configure` which file it should overwrite.
typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a}
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
'builtin' 'unset' 'p10k_config_opts'

1
.python-version Normal file
View File

@@ -0,0 +1 @@
3.10.17

1
.ruby-version Normal file
View File

@@ -0,0 +1 @@
3.4.1

14
.zlogin Executable file
View File

@@ -0,0 +1,14 @@
HIDRIVE=/mnt/hidrive
HIDRIVE_VALKNAR="$HIDRIVE/users/valknar"
mount "$HIDRIVE" 2>/dev/null
ln -s "$HIDRIVE_VALKNAR/Documents" "$HOME/Documents" 2>/dev/null
ln -s "$HIDRIVE_VALKNAR/Pictures" "$HOME/Pictures" 2>/dev/null
ln -s "$HIDRIVE_VALKNAR/Videos" "$HOME/Videos" 2>/dev/null
ln -s "$HIDRIVE_VALKNAR/Music" "$HOME/Music" 2>/dev/null
xdg-user-dirs-update --set DOCUMENTS "$HOME/Documents"
xdg-user-dirs-update --set PICTURES "$HOME/Pictures"
xdg-user-dirs-update --set VIDEOS "$HOME/Videos"
xdg-user-dirs-update --set MUSIC "$HOME/Music"

0
.zlogout Executable file
View File

0
.zprofile Executable file
View File

0
.zshenv Normal file
View File

189
.zshrc Normal file
View File

@@ -0,0 +1,189 @@
if [ -d "$HOME/bin" ]; then
export PATH="$HOME/bin:$PATH"
fi
if [ -d "$HOME/.local/bin" ]; then
export PATH="$HOME/.local/bin:$PATH"
fi
if [ -d "$HOME/.rbenv/bin" ]; then
export PATH="$PATH:$HOME/.rbenv/bin"
fi
if [ -d "$HOME/.pyenv/bin" ]; then
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
fi
if [ -d "$HOME/.cargo/bin" ]; then
export PATH="$PATH:$HOME/.cargo/bin"
fi
if [ -d "/usr/local/go/bin" ]; then
export PATH="$PATH:/usr/local/go/bin"
fi
if [ -d "$HOME/go/bin" ]; then
export PATH="$PATH:$HOME/go/bin"
fi
if [ -d "$HOME/node_modules/.bin" ]; then
export PATH="$PATH:$HOME/node_modules/.bin"
fi
# Source .env file early to export environment variables
if [ -f "$HOME/.env" ] ; then
set -a
source "$HOME/.env"
set +a
fi
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
if [ -s "$NVM_DIR/nvm.sh" ] ; then
. "$NVM_DIR/nvm.sh"
fi
if [ -s "$NVM_DIR/bash_completion" ] ; then
. "$NVM_DIR/bash_completion"
fi
if [ -s "$HOME/.rvm/scripts/rvm" ] ; then
. "$HOME/.rvm/scripts/rvm"
fi
if [ -s "$HOME/.cargo/env" ] ; then
. "$HOME/.cargo/env"
fi
if command -v oh-my-posh 2>&1 >/dev/null; then
eval "$(! oh-my-posh init zsh --config=~/worker.omp.json)"
fi
if command -v rbenv 2>&1 >/dev/null; then
eval "$(rbenv init - --no-rehash zsh)"
fi
if command -v pyenv 2>&1 >/dev/null; then
eval "$(pyenv init --path)"
fi
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH
# Path to your Oh My Zsh installation.
export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time Oh My Zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="powerlevel10k/powerlevel10k"
# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load
# a theme from this variable instead of looking in $ZSH/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"
# Uncomment one of the following lines to change the auto-update behavior
# zstyle ':omz:update' mode disabled # disable automatic updates
# zstyle ':omz:update' mode auto # update automatically without asking
# zstyle ':omz:update' mode reminder # just remind me to update when it's time
# Uncomment the following line to change how often to auto-update (in days).
# zstyle ':omz:update' frequency 13
# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS="true"
# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"
# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"
# Uncomment the following line to display red dots whilst waiting for completion.
# You can also set it to another string to have that shown instead of the default red dots.
# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f"
# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765)
# COMPLETION_WAITING_DOTS="true"
# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"
# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(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)
[[ ! -f $ZSH/oh-my-zsh.sh ]] || source $ZSH/oh-my-zsh.sh
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='nvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch $(uname -m)"
# Set personal aliases, overriding those provided by Oh My Zsh libs,
# plugins, and themes. Aliases can be placed here, though Oh My Zsh
# users are encouraged to define aliases within a top-level file in
# the $ZSH_CUSTOM folder, with .zsh extension. Examples:
# - $ZSH_CUSTOM/aliases.zsh
# - $ZSH_CUSTOM/macos.zsh
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

111
CLAUDE.md Normal file
View File

@@ -0,0 +1,111 @@
# CLAUDE.md
This file provides guidance to Claude Code when working with code in this repository.
## Overview
This is a personal home directory repository managed as a git repository with selective tracking via `.gitignore`. The repository tracks dotfiles and configuration for a Debian development environment supporting Node.js, Python, Ruby, Rust, and Go development.
## Key Architecture
### Arty Configuration
`arty.yml` defines the repository structure using Arty (artifact/repository manager):
- **references**: Git subrepositories to clone into specific paths
- **scripts**: Installation and setup commands
- Manages version managers (nvm, rbenv, pyenv, gvm) and shell configuration
### Git Selective Tracking
The `.gitignore` uses an inverted pattern (ignore everything, then selectively allow):
- Tracks only specific dotfiles and configuration files
- Excludes logs, databases, and temporary files
## Development Environment
### Language Version Management
- **Node.js**: Managed by nvm, version specified in `.nvmrc`
- **Ruby**: Managed by rbenv, version in `.ruby-version`
- **Python**: Managed by pyenv, version in `.python-version`
- **Rust**: Via rustup (`.cargo/`, `.rustup/`)
- **Go**: Via gvm (`.gvm/`)
### Shell Environment
- **Shell**: Zsh with Oh-My-Zsh framework
- **Theme**: Powerlevel10k (`.p10k.zsh`)
- **Plugins**: zsh-autosuggestions, zsh-syntax-highlighting
- **Login Configuration**: `.zlogin` mounts HiDrive storage and creates symbolic links
## Common Commands
### Environment Setup
```bash
# Sync all dependencies (version managers, shell config, etc.)
arty sync
# Install system packages
arty debian/update && arty debian/install
# Install language runtimes
arty node/install # Node.js via nvm
arty ruby/install # Ruby via rbenv
arty python/install # Python via pyenv
arty rust/install # Rust via rustup
# Install global packages
arty npm/install # npm, pnpm, llmx
arty gem/install # bundler
```
### Arty Scripts (from arty.yml)
```bash
arty debian/update # Enable non-free repos
arty debian/install # System packages
arty docker/install # Docker Engine
arty rust/install # Rust toolchain
arty node/install # Node.js (uses nvm)
arty ruby/install # Ruby (uses rbenv)
arty python/install # Python (uses pyenv)
arty uv/install # uv Python package manager
arty zed/install # Zed editor
arty claude/install # Claude CLI
arty mattermost/install
arty joplin/install
arty yq/install
arty spotify/install
arty npm/install # npm, pnpm, @valknarthing/llmx
arty gem/install # bundler
```
### Git Workflow
```bash
# Stage all changes and check if clean
g0 # alias for: git add . && git diff --quiet && git diff --cached --quiet
# Reset to single commit
g1 # alias for: git reset $(git commit-tree "HEAD^{tree}" -m "A new start")
# Get last commit message
g2 # alias for: git log --format=%B -n 1 HEAD | head -n 1
```
## Repository References (managed by arty)
From `arty.yml`:
- `bin/` - Custom scripts and executables
- `.llmx/` - LLM configuration
- `.nvm/` - Node Version Manager
- `.gvm/` - Go Version Manager
- `.rbenv/` - Ruby Version Manager (includes ruby-build plugin)
- `.pyenv/` - Python Version Manager
- `.oh-my-zsh/` - Oh-My-Zsh framework
- `custom/themes/powerlevel10k/` - Powerlevel10k theme
- `custom/plugins/zsh-autosuggestions/`
- `custom/plugins/zsh-syntax-highlighting/`
## Important Notes
- **Selective Git Tracking**: This repository uses an inverted `.gitignore` pattern - everything is ignored by default (`*`), then specific files are explicitly allowed.
- **Arty Repository Manager**: `arty.yml` manages git subrepositories. Use `arty sync` to clone/update all dependencies.
- **Docker**: Use arty to manage docker in this project. Run `arty up -d CONTAINER(s)` instead of `arty restart CONTAINER(S)`.
- **SSH**: Always push with the valknarthing ssh key. Ensure the ssh agent only has one key loaded.

318
README.md Executable file
View File

@@ -0,0 +1,318 @@
<div align="center">
<pre>
_ _____ __ __ __ _ _____ ____ _ _____
| | / / | / / / //_// | / / | / __ ( ) ___/
| | / / /| | / / / ,< / |/ / /| | / /_/ //\__ \
| |/ / ___ |/ /___/ /| |/ /| / ___ |/ _, _/ ___/ /
|___/_/ |_/_____/_/ |_/_/ |_/_/ |_/_/ |_| /____/
__________ ____ ____________
/ ____/ __ \/ __ \/ ____/ ____/
/ /_ / / / / /_/ / / __/ __/
/ __/ / /_/ / _, _/ /_/ / /___
/_/ \____/_/ |_|\____/_____/
</pre>
# WHERE CODE MEETS CHAOS
[![Debian](https://img.shields.io/badge/Debian-Trixie-A81D33?style=for-the-badge&logo=debian&logoColor=white)](https://www.debian.org/)
[![Powered by Metal](https://img.shields.io/badge/POWERED%20BY-METAL-FF0000?style=for-the-badge)](https://www.slayer.net/)
[![Built with Blood](https://img.shields.io/badge/BUILT%20WITH-BLOOD%20%26%20SWEAT-8B0000?style=for-the-badge)](/)
[![License: MIT](https://img.shields.io/badge/License-MIT-990000?style=for-the-badge)](LICENSE)
**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.*
</div>
---
## 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 |
+-----------------------------------------------------+
```
---
## QUICK START RITUAL
### Summoning the Environment
```bash
# 1. Clone this unholy repository
git init && git remote add origin git@dev.pivoine.art:valknar/home.git
git fetch && git reset --hard origin/main
git branch --set-upstream-to=origin/main main
# 2. Configure git
git config --global init.defaultBranch main
git config --global --add safe.directory /home/$USER
# 3. Sync all dependencies (version managers, shell config, etc.)
arty sync
# 4. Install system packages
arty debian/update && arty debian/install
# 5. Install development tools
arty rust/install
arty node/install
arty ruby/install
arty python/install
# 6. Install global packages
arty npm/install
arty gem/install
# 7. Source the shell configuration
source ~/.zshrc
```
---
## 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](https://github.com/butter-sh/butter-sh.github.io) ecosystem.
### Available Scripts
```bash
# System setup
arty debian/update # Enable non-free repos and update sources
arty debian/install # curl, zsh, fzf, davfs2, krusader, make, imagemagick, ffmpeg, yt-dlp, thunderbird, etc.
arty debian/remove # Remove pulseaudio-module-bluetooth
# Development tools
arty docker/install # Docker Engine with user group
arty rust/install # Rust toolchain via rustup
arty node/install # Node.js via nvm
arty ruby/install # Ruby via rbenv
arty python/install # Python via pyenv
arty uv/install # uv Python package manager
# Applications
arty zed/install # Zed code editor
arty claude/install # Claude AI CLI
arty spotify/install # Spotify desktop client
arty mattermost/install # Mattermost desktop client
arty joplin/install # Joplin note-taking app
arty yq/install # yq YAML processor
# Package managers
arty npm/install # npm, pnpm, @valknarthing/llmx
arty gem/install # bundler
```
### What Arty Manages
- **Version managers** (nvm, rbenv, pyenv, gvm)
- **Shell configuration** (Oh-My-Zsh, Powerlevel10k, plugins)
- **Custom binaries** (from valknar/bin repository)
- **LLM configuration** (from home-llmx repository)
---
## COMMAND LINE BRUTALITY
### Git Operations
```bash
g0 # Stage all changes and verify clean state
g1 # Nuclear reset to single commit
g2 # Show last commit message
```
### Development Servers
```bash
# Serve current directory on port 8000
ss
# Download YouTube video as MP3
yt "https://youtube.com/watch?v=..."
```
### Rsync Power
```bash
# Sync to remote with sudo
rs /local/path/ user@host:/remote/path/
```
---
## ENVIRONMENT STRUCTURE
```
~/
+-- bin/ # Custom scripts and executables
+-- .llmx/ # LLM configuration (Claude, etc.)
+-- .nvm/ # Node Version Manager
+-- .rbenv/ # Ruby Version Manager
| +-- plugins/ruby-build/
+-- .pyenv/ # Python Version Manager
+-- .gvm/ # Go Version Manager
+-- .oh-my-zsh/ # Oh-My-Zsh framework
| +-- custom/
| +-- themes/
| | +-- powerlevel10k/
| +-- plugins/
| +-- zsh-autosuggestions/
| +-- zsh-syntax-highlighting/
+-- Projects/ # Development projects
+-- Documents/ # -> /mnt/hidrive/users/valknar/Documents
+-- Pictures/ # -> /mnt/hidrive/users/valknar/Pictures
+-- Videos/ # -> /mnt/hidrive/users/valknar/Videos
+-- Music/ # -> /mnt/hidrive/users/valknar/Music
```
---
## DOTFILE HIGHLIGHTS
### Shell Configuration
- **`.zshrc`** - Oh-My-Zsh with Powerlevel10k theme
- **`.zlogin`** - Login script (mounts HiDrive, creates symbolic links)
- **`.p10k.zsh`** - Powerlevel10k configuration
### Version Files
- **`.nvmrc`** - Node.js version
- **`.ruby-version`** - Ruby version
- **`.python-version`** - Python version
### Git Configuration
- **`.gitignore`** - INVERTED PATTERN (ignore all, allow specific files)
- **`.gitconfig`** - Git user configuration
### Orchestration
- **`arty.yml`** - Repository and dependency management with installation scripts
### Personal
- **`signature.txt`** - ASCII art email signature
---
## HIDRIVE INTEGRATION
The `.zlogin` script automatically:
- **Mounts HiDrive** storage at `/mnt/hidrive` on shell login
- **Creates symbolic links** from HiDrive to home directory:
- `~/Documents` -> `/mnt/hidrive/users/valknar/Documents`
- `~/Pictures` -> `/mnt/hidrive/users/valknar/Pictures`
- `~/Videos` -> `/mnt/hidrive/users/valknar/Videos`
- `~/Music` -> `/mnt/hidrive/users/valknar/Music`
---
## GIT SELECTIVE TRACKING
This repository uses an **inverted `.gitignore`** pattern:
```gitignore
# Ignore everything
*
# Allow specific files
!CLAUDE.md
!README.md
!.gitignore
!.zshrc
!.zlogin
!arty.yml
...
```
**Why?** To track only essential dotfiles and configurations while ignoring cache, logs, and user data.
---
## SHELL PLUGIN POWER
**Oh-My-Zsh Plugins Loaded:**
```
git sudo ssh rsync docker docker-compose
nvm rbenv pyenv
zsh-autosuggestions zsh-syntax-highlighting
```
---
## USEFUL RESOURCES
### System & Shell
- [Oh-My-Zsh](https://ohmyz.sh/)
- [Powerlevel10k](https://github.com/romkatv/powerlevel10k)
### Language Managers
- [nvm](https://github.com/nvm-sh/nvm) - Node Version Manager
- [rbenv](https://github.com/rbenv/rbenv) - Ruby Version Manager
- [pyenv](https://github.com/pyenv/pyenv) - Python Version Manager
- [gvm](https://github.com/moovweb/gvm) - Go Version Manager
- [rustup](https://rustup.rs/) - Rust Toolchain Manager
### Orchestration
- [Arty.sh / Butter.sh Ecosystem](https://github.com/butter-sh/butter-sh.github.io)
---
## LICENSE
MIT License - Do whatever the hell you want with it.
---
<div align="center">
<pre>
=================================================================
__________ ____ ______ _________
/ ____/ __ \/ __ \/ ____/ / _/ ___/
/ / / / / / / / / __/ / / \__ \
/ /___/ /_/ / /_/ / /___ _/ / ___/ /
\____/\____/_____/_____/ /___//____/
______________ _______ ____ ____ ___ ______ __
/_ __/ ____/ |/ / __ \/ __ \/ __ \/ | / __ \ \/ /
/ / / __/ / /|_/ / /_/ / / / / /_/ / /| | / /_/ /\ /
/ / / /___/ / / / ____/ /_/ / _, _/ ___ |/ _, _/ / /
/_/ /_____/_/ /_/_/ \____/_/ |_/_/ |_/_/ |_| /_/
__ __________________ __ _________
/ |/ / ____/_ __/ | / / / _/ ___/
/ /|_/ / __/ / / / /| | / / / / \__ \
/ / / / /___ / / / ___ |/ /___ _/ / ___/ /
/_/ /_/_____/ /_/ /_/ |_/_____/ /___//____/
______________________ _ _____ __
/ ____/_ __/ ____/ __ \/ | / / | / /
/ __/ / / / __/ / /_/ / |/ / /| | / /
/ /___ / / / /___/ _, _/ /| / ___ |/ /___
/_____/ /_/ /_____/_/ |_/_/ |_/_/ |_/_____/
=================================================================
FORGED BY VALKNAR
valknar@pivoine.art
Powered by Debian | Fueled by Metal
</pre>
**[BACK TO THE TOP](#)**
</div>

105
arty.yml Normal file
View File

@@ -0,0 +1,105 @@
name: "Valknar's home"
version: "1.0.0"
description: "Valknar's home repository"
author: "valknar@pivoine.art"
license: "MIT"
notes: |
# Valknar's Home Repository
This is a **personal development environment** configuration managed with `arty`.
## Quick Start
```bash
# Install all dependencies
arty deps
# Update system packages
arty debian/update && arty debian/install
# Install development tools
arty node/install
arty rust/install
arty python/install
```
## Key Features
- **Shell Configuration**: Zsh with Oh-My-Zsh and Powerlevel10k theme
- **Version Managers**: nvm (Node), rbenv (Ruby), pyenv (Python), gvm (Go)
- **Development Tools**: Docker, Rust, Node.js, Python, Ruby
- **Utilities**: Custom scripts in `bin/` directory
## Important Commands
1. **System Setup** - Run Ansible playbook for complete setup
2. **Environment Variables** - Loaded from `.init/export.sh`
3. **Custom Functions** - Available in `.init/functions.sh`
## Links
- [Repository](ssh://git@dev.pivoine.art:2222/valknar/bin.git)
- [Documentation](https://docs.pivoine.art)
## Notes
- Always use `arty` to manage Docker containers
- Run `arty up -d CONTAINER` instead of `arty restart CONTAINER`
- Push with the `valknarthing` SSH key
- Ensure SSH agent has only one key for pushing
references:
- url: https://dev.pivoine.art/valknar/bin.git
into: bin
- url: https://dev.pivoine.art/valknar/home-llmx.git
into: .llmx
- url: https://github.com/nvm-sh/nvm.git
into: .nvm
- url: https://github.com/moovweb/gvm.git
into: .gvm
- url: https://github.com/rbenv/rbenv.git
into: .rbenv
- url: https://github.com/rbenv/ruby-build.git
into: .rbenv/plugins/ruby-build
- url: https://github.com/pyenv/pyenv.git
into: .pyenv
- url: https://github.com/ohmyzsh/ohmyzsh.git
into: .oh-my-zsh
- url: https://github.com/romkatv/powerlevel10k.git
into: .oh-my-zsh/custom/themes/powerlevel10k
- url: https://github.com/zsh-users/zsh-autosuggestions.git
into: .oh-my-zsh/custom/plugins/zsh-autosuggestions
- url: https://github.com/zsh-users/zsh-syntax-highlighting.git
into: .oh-my-zsh/custom/plugins/zsh-syntax-highlighting
scripts:
debian/update: sudo sed -i 's/main non-free-firmware/main contrib non-free non-free-firmware/g' /etc/apt/sources.list && sudo apt update
debian/install:
sudo apt install curl zsh fzf davfs2 krusader make imagemagick ffmpeg yt-dlp
thunderbird pkg-config blueman libffi-dev zlib1g-dev libyaml-dev libssl-dev tree firmware-linux-nonfree firmware-realtek
debian/remove: sudo apt remove pulseaudio-module-bluetooth
docker/install: curl -fsSL -o- https://get.docker.com | sudo sh && sudo usermod -aG docker $USER
rust/install: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
node/install: nvm install
ruby/install: rbenv install
python/install: pyenv install
uv/install: curl -LsSf https://astral.sh/uv/install.sh | sh
zed/install: curl -f https://zed.dev/install.sh | sh
claude/install: curl -fsSL https://claude.ai/install.sh | bash
mattermost/install:
curl -fsS -o- https://deb.packages.mattermost.com/setup-repo.sh | sudo bash
&& sudo apt install mattermost-desktop
joplin/install: wget -O -
https://raw.githubusercontent.com/laurent22/joplin/dev/Joplin_install_and_update.sh | bash
yq/install:
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
-O /usr/local/bin/yq && chmod +x /usr/local/bin/yq
spotify/install:
curl -sS https://download.spotify.com/debian/pubkey_C85668DF69375001.gpg |
sudo gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/spotify.gpg && echo "deb
https://repository.spotify.com stable non-free" | sudo tee
/etc/apt/sources.list.d/spotify.list && sudo apt-get update && sudo apt-get
install spotify-client
npm/install: npm i -g npm pnpm @valknarthing/llmx
gem/install: gem install bundler

10
signature.txt Normal file
View File

@@ -0,0 +1,10 @@
██╗ ██╗ █████╗ ██╗ ██╗ ██╗███╗ ██╗ █████╗ ██████╗
██║ ██║██╔══██╗██║ ██║ ██╔╝████╗ ██║██╔══██╗██╔══██╗
██║ ██║███████║██║ █████╔╝ ██╔██╗ ██║███████║██████╔╝
╚██╗ ██╔╝██╔══██║██║ ██╔═██╗ ██║╚██╗██║██╔══██║██╔══██╗
╚████╔╝ ██║ ██║███████╗██║ ██╗██║ ╚████║██║ ██║██║ ██║
╚═══╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝
───────────────────────────────────────────────────────────────────
valknar@pivoine.art │ (+49) 174 8188918 │ https://pivoine.art
───────────────────────────────────────────────────────────────────