From c99904674c78a30f66772b7a9ba6ddca62844e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Tue, 25 Nov 2025 08:37:43 +0100 Subject: [PATCH] Initial commit --- .editorconfig | 34 ++++++ .gitconfig | 16 +++ .gitignore | 30 +++++ .hushlogin | 0 .nvmrc | 1 + .p10k.zsh | 193 +++++++++++++++++++++++++++++ .python-version | 1 + .ruby-version | 1 + .zlogin | 14 +++ .zlogout | 0 .zprofile | 0 .zshenv | 0 .zshrc | 189 ++++++++++++++++++++++++++++ CLAUDE.md | 111 +++++++++++++++++ README.md | 318 ++++++++++++++++++++++++++++++++++++++++++++++++ arty.yml | 105 ++++++++++++++++ signature.txt | 10 ++ 17 files changed, 1023 insertions(+) create mode 100755 .editorconfig create mode 100755 .gitconfig create mode 100755 .gitignore create mode 100644 .hushlogin create mode 100644 .nvmrc create mode 100644 .p10k.zsh create mode 100644 .python-version create mode 100644 .ruby-version create mode 100755 .zlogin create mode 100755 .zlogout create mode 100755 .zprofile create mode 100644 .zshenv create mode 100644 .zshrc create mode 100644 CLAUDE.md create mode 100755 README.md create mode 100644 arty.yml create mode 100644 signature.txt diff --git a/.editorconfig b/.editorconfig new file mode 100755 index 00000000..fea95f20 --- /dev/null +++ b/.editorconfig @@ -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 diff --git a/.gitconfig b/.gitconfig new file mode 100755 index 00000000..171aee8e --- /dev/null +++ b/.gitconfig @@ -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 diff --git a/.gitignore b/.gitignore new file mode 100755 index 00000000..75cda34d --- /dev/null +++ b/.gitignore @@ -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* diff --git a/.hushlogin b/.hushlogin new file mode 100644 index 00000000..e69de29b diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..f62f0b29 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v20.19.1 diff --git a/.p10k.zsh b/.p10k.zsh new file mode 100644 index 00000000..b9a4ffba --- /dev/null +++ b/.p10k.zsh @@ -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' diff --git a/.python-version b/.python-version new file mode 100644 index 00000000..1d4830ee --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.10.17 diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 00000000..47b322c9 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +3.4.1 diff --git a/.zlogin b/.zlogin new file mode 100755 index 00000000..f86d5fba --- /dev/null +++ b/.zlogin @@ -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" diff --git a/.zlogout b/.zlogout new file mode 100755 index 00000000..e69de29b diff --git a/.zprofile b/.zprofile new file mode 100755 index 00000000..e69de29b diff --git a/.zshenv b/.zshenv new file mode 100644 index 00000000..e69de29b diff --git a/.zshrc b/.zshrc new file mode 100644 index 00000000..089d7915 --- /dev/null +++ b/.zshrc @@ -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 diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..9cce917c --- /dev/null +++ b/CLAUDE.md @@ -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. diff --git a/README.md b/README.md new file mode 100755 index 00000000..e650f737 --- /dev/null +++ b/README.md @@ -0,0 +1,318 @@ +
+ +
+ _    _____    __    __ __ _   _____    ____ _ _____
+| |  / /   |  / /   / //_// | / /   |  / __ ( ) ___/
+| | / / /| | / /   / ,<  /  |/ / /| | / /_/ //\__ \
+| |/ / ___ |/ /___/ /| |/ /|  / ___ |/ _, _/ ___/ /
+|___/_/  |_/_____/_/ |_/_/ |_/_/  |_/_/ |_| /____/
+
+    __________  ____  ____________
+   / ____/ __ \/ __ \/ ____/ ____/
+  / /_  / / / / /_/ / / __/ __/
+ / __/ / /_/ / _, _/ /_/ / /___
+/_/    \____/_/ |_|\____/_____/
+
+ +# 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.* + +
+ +--- + +## 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. + +--- + +
+ +
+=================================================================
+
+__________  ____  ______   _________
+  / ____/ __ \/ __ \/ ____/  /  _/ ___/
+ / /   / / / / / / / __/     / / \__ \
+/ /___/ /_/ / /_/ / /___   _/ / ___/ /
+\____/\____/_____/_____/  /___//____/
+
+  ______________  _______  ____  ____  ___    ______  __
+ /_  __/ ____/  |/  / __ \/ __ \/ __ \/   |  / __ \ \/ /
+  / / / __/ / /|_/ / /_/ / / / / /_/ / /| | / /_/ /\  /
+ / / / /___/ /  / / ____/ /_/ / _, _/ ___ |/ _, _/ / /
+/_/ /_____/_/  /_/_/    \____/_/ |_/_/  |_/_/ |_| /_/
+
+    __  __________________    __       _________
+   /  |/  / ____/_  __/   |  / /      /  _/ ___/
+  / /|_/ / __/   / / / /| | / /       / / \__ \
+ / /  / / /___  / / / ___ |/ /___   _/ / ___/ /
+/_/  /_/_____/ /_/ /_/  |_/_____/  /___//____/
+
+    ______________________  _   _____    __
+   / ____/_  __/ ____/ __ \/ | / /   |  / /
+  / __/   / / / __/ / /_/ /  |/ / /| | / /
+ / /___  / / / /___/ _, _/ /|  / ___ |/ /___
+/_____/ /_/ /_____/_/ |_/_/ |_/_/  |_/_____/
+
+=================================================================
+
+FORGED BY VALKNAR
+valknar@pivoine.art
+Powered by Debian | Fueled by Metal
+
+
+ +**[BACK TO THE TOP](#)** + +
diff --git a/arty.yml b/arty.yml new file mode 100644 index 00000000..605b13d0 --- /dev/null +++ b/arty.yml @@ -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 diff --git a/signature.txt b/signature.txt new file mode 100644 index 00000000..0f6524a7 --- /dev/null +++ b/signature.txt @@ -0,0 +1,10 @@ + + ██╗ ██╗ █████╗ ██╗ ██╗ ██╗███╗ ██╗ █████╗ ██████╗ + ██║ ██║██╔══██╗██║ ██║ ██╔╝████╗ ██║██╔══██╗██╔══██╗ + ██║ ██║███████║██║ █████╔╝ ██╔██╗ ██║███████║██████╔╝ + ╚██╗ ██╔╝██╔══██║██║ ██╔═██╗ ██║╚██╗██║██╔══██║██╔══██╗ + ╚████╔╝ ██║ ██║███████╗██║ ██╗██║ ╚████║██║ ██║██║ ██║ + ╚═══╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝ + ─────────────────────────────────────────────────────────────────── + valknar@pivoine.art │ (+49) 174 8188918 │ https://pivoine.art + ───────────────────────────────────────────────────────────────────