From 044d5d663e9fb6ddcc858c829d9b542b613b1131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Tue, 25 Nov 2025 08:34:10 +0100 Subject: [PATCH] Initial commit --- .config/zed/settings.json | 22 ++ .editorconfig | 34 ++++ .gitconfig | 16 ++ .gitignore | 30 +++ .hushlogin | 0 .llmx/config.toml | 131 ++++++++++++ .nvmrc | 1 + .p10k.zsh | 193 ++++++++++++++++++ .python-version | 1 + .ruby-version | 1 + .zlogin | 14 ++ .zlogout | 0 .zprofile | 0 .zshenv | 0 .zshrc | 189 +++++++++++++++++ CLAUDE.md | 214 ++++++++++++++++++++ README.md | 416 ++++++++++++++++++++++++++++++++++++++ arty.yml | 105 ++++++++++ signature.txt | 10 + 19 files changed, 1377 insertions(+) create mode 100644 .config/zed/settings.json create mode 100755 .editorconfig create mode 100755 .gitconfig create mode 100755 .gitignore create mode 100644 .hushlogin create mode 100644 .llmx/config.toml 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/.config/zed/settings.json b/.config/zed/settings.json new file mode 100644 index 00000000..7de86075 --- /dev/null +++ b/.config/zed/settings.json @@ -0,0 +1,22 @@ +// Zed settings +// +// For information on how to configure Zed, see the Zed +// documentation: https://zed.dev/docs/configuring-zed +// +// To see all of Zed's default settings without changing your +// custom settings, run `zed: open default settings` from the +// command palette (cmd-shift-p / ctrl-shift-p) +{ + "terminal": { + "shell": { + "program": "/usr/bin/zsh" + } + }, + "ui_font_size": 16, + "buffer_font_size": 15, + "theme": { + "mode": "system", + "light": "One Light", + "dark": "One Dark" + } +} 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/.llmx/config.toml b/.llmx/config.toml new file mode 100644 index 00000000..b5970599 --- /dev/null +++ b/.llmx/config.toml @@ -0,0 +1,131 @@ +model_provider = "litellm" +# model = "anthropic/claude-sonnet-4-5-20250929" +model = "hosted_vllm/openai/qwen-2.5-7b" + +[projects."/home/valknar"] +trust_level = "trusted" + +[projects."/home/valknar/Projects/llmx"] +trust_level = "trusted" + +[projects."/home/valknar/Projects/docker-compose"] +trust_level = "trusted" + +[projects."/home/valknar/Projects/kit-ui"] +trust_level = "trusted" + +[projects."/home/valknar/Projects/image-ui"] +trust_level = "trusted" + +[projects."/home/valknar/bin"] +trust_level = "trusted" + +# ============================================================================== +# MCP SERVERS CONFIGURATION (10 servers) +# Last updated: 2025-11-24 +# Removed: sqlite, brave_search, filescope, in_memoria, rust_filesystem (broken/incompatible) +# ============================================================================== + +# ============================================================================== +# ESSENTIAL CORE SERVERS (3) +# ============================================================================== + +[mcp_servers.filesystem] +# TypeScript implementation - stable and battle-tested +command = "npx" +args = ["-y", "@modelcontextprotocol/server-filesystem", "/home/valknar"] +enabled = true +startup_timeout_sec = 10 + +[mcp_servers.git] +# Git operations - Python uvx (no NPM package available) +command = "uvx" +args = ["mcp-server-git"] +enabled = true +startup_timeout_sec = 10 + +[mcp_servers.playwright] +# Browser automation - most popular MCP server (826k weekly downloads) +command = "npx" +args = ["-y", "@playwright/mcp"] +enabled = true +startup_timeout_sec = 20 + +# ============================================================================== +# HIGHLY RECOMMENDED SERVERS (2) +# ============================================================================== + +[mcp_servers.duckduckgo] +# Web search - Privacy-focused, no API key required +command = "npx" +args = ["-y", "duckduckgo-mcp-server"] +enabled = true +startup_timeout_sec = 10 + +[mcp_servers.portainer] +# Docker container management (requires Portainer running) +command = "npx" +args = ["-y", "@portainer/portainer-mcp"] +enabled = false # Enable after configuring Portainer +startup_timeout_sec = 15 + +[mcp_servers.python_runner] +# Secure Python sandbox execution (Python uvx, requires Deno) +command = "uvx" +args = ["mcp-run-python", "stdio"] +enabled = true +startup_timeout_sec = 15 + +# ============================================================================== +# SPECIALIZED SERVERS (5) +# ============================================================================== + +[mcp_servers.commands] +# Shell command execution +command = "npx" +args = ["-y", "mcp-server-commands"] +enabled = true +startup_timeout_sec = 10 + +[mcp_servers.codemcp] +# Unified read, write, and command execution (Python uvx from GitHub) +command = "uvx" +args = ["--from", "git+https://github.com/ezyang/codemcp@prod", "codemcp"] +enabled = true +startup_timeout_sec = 60 + +[mcp_servers.anyquery] +# SQL interface to 40+ services (requires Go installation) +command = "anyquery" +args = ["mcp"] +enabled = false # Enable after: go install github.com/julien040/anyquery@latest +startup_timeout_sec = 20 + +[mcp_servers.openapi] +# Generic OpenAPI integration (Docker-based) +command = "docker" +args = ["run", "-i", "--rm", "snaggle/openapi-mcp"] +enabled = false # Configure --openapi-url for specific API +startup_timeout_sec = 20 + +# ============================================================================== +# AGGREGATORS (2) +# ============================================================================== + +[mcp_servers.pipedream] +# 2,500+ APIs with 8,000+ prebuilt tools (requires account) +url = "https://api.pipedream.com/mcp" +bearer_token_env_var = "PIPEDREAM_API_KEY" +enabled = false # Enable after creating Pipedream account +startup_timeout_sec = 20 + +# ============================================================================== +# ADDITIONAL CUSTOM SERVERS (1) +# ============================================================================== + +[mcp_servers.github_official] +# Official GitHub MCP server (Docker-based) +command = "docker" +args = ["run", "-i", "--rm", "-e", "GITHUB_TOKEN", "ghcr.io/github/github-mcp-server"] +enabled = false # Enable if you prefer native MCP over gh CLI +startup_timeout_sec = 20 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..9578ec5c --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,214 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/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 + +### Initialization System +Shell initialization is managed through `.init/init.sh`, which sources modular configuration in this order: +1. `.init/path.sh` - PATH environment setup for all language toolchains (Node, Python, Ruby, Rust, Go, Flatpak) +2. `.init/export.sh` - Environment variable exports +3. `.init/alias.sh` - Custom shell aliases (ri, g0-g2, rs, ss, yt) +4. `.init/source.sh` - Source language version managers (nvm, rbenv, pyenv) +5. `.init/functions.sh` - Custom shell functions for deployment and media processing +6. `.init/links.sh` - Symbolic link setup +7. `.init/eval.sh` - Commands requiring eval (rbenv init, pyenv init) +8. `.init/trap.sh` - Shell trap handlers +9. `.init/start.sh` - Startup commands +10. `.init/bin/` - Custom executable scripts + +### Arty Configuration +`arty.yml` defines the repository structure using Arty (artifact/repository manager): +- **references**: Git subrepositories to clone into specific paths +- **envs**: Environment profiles (dev/prod) for selective repository management +- Manages both development projects and language version managers (nvm, rbenv, pyenv, gvm) + +### Ansible Provisioning +`playbook.yml` is an Ansible playbook for system setup: +- Installs and configures language runtimes (Node, Python, Ruby, Rust, Go) +- Sets up Docker, PostgreSQL 18, and development tools +- Configures Zsh with Oh-My-Zsh and Powerlevel10k theme for user and root +- Manages system packages via apt + +Available Ansible tags: +- `base` - Base packages (make, build-essential, git, curl, wget, rsync, imagemagick, ffmpeg, yt-dlp, fzf) +- `node` - Node.js via nvm, corepack, and pnpm packages +- `python` - Python via pyenv, pip packages, and pre-commit setup +- `ruby` - Ruby via rbenv, bundler, and bundle install +- `rust` - Rust via rustup with required system packages +- `zsh` - Zsh shell configuration for user +- `oh-my-posh` - Oh-My-Posh prompt for root +- `postgres` - PostgreSQL 18 from official PGDG repository +- `docker` - Docker Engine with user group membership +- `flatpak` - Flatpak with Flathub repository +- `github` - GitHub CLI (gh) +- `fonts` - Font cache update + +### Git Selective Tracking +The `.gitignore` uses an inverted pattern (ignore everything, then selectively allow): +- Tracks only specific dotfiles and configuration files +- Allows `.github/`, `.vscode/` directories +- Excludes logs, databases, and temporary files +- **Note**: The `.init/` directory is NOT tracked in git - it exists locally only + +## 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**: git, pm2, gh, docker, language-specific plugins, zsh-autosuggestions, zsh-syntax-highlighting +- **Login Configuration**: `.zlogin` mounts HiDrive storage and creates symbolic links for Documents, Pictures, Videos, and Music directories from `/mnt/hidrive/users/valknar/` to `$HOME/` + +## Common Commands + +### Environment Setup +```bash +# Reinitialize shell environment +ri # alias for: source ~/.init/init.sh + +# Bootstrap system (run as user, prompts for sudo) +sudo -u $USER ansible-playbook -K playbook.yml + +# Run specific Ansible tags +ansible-playbook --tags node,python,ruby -K playbook.yml +``` + +### Arty Repository Management +```bash +# Debug Arty configuration +pnpm arty debug + +# Clone/update repositories based on environment +pnpm arty sync --env dev +``` + +### 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 +``` + +### Code Quality +```bash +# Python pre-commit hooks (configured in .pre-commit-config.yaml) +pre-commit run --all-files + +# Ruby style checking +rubocop + +# Node.js linting +pnpm eslint +``` + +### Utility Functions & Scripts + +Shell functions from `.init/functions.sh`: + +**Deployment functions** (internal use, deploy to remote server via rsync): +- `_site_deploy_jekyll ` - Build Jekyll site and deploy to remote +- `_site_deploy_nuxt ` - Build Nuxt site and deploy to remote +- `_site_deploy_static ` - Deploy static files to remote +- `_site_run_jekyll ` - Run Jekyll dev server with livereload +- `_site_run_nuxt ` - Run Nuxt dev server +- `_site_run_static ` - Serve static files locally on port 8000 + +**Media processing functions**: +- `batch_file_sequence ` - Rename files with sequence numbers +- `batch_image_webp` - Convert JPG/PNG images to WebP format +- `batch_video_x264` - Convert videos to x264 codec + +**Git/home management functions** (internal): +- `_home_push [message]` - Commit and push home repository changes +- `_home_pull` - Pull home repository (stashes/unstashes changes, handles `.last_pwd`) + +Shell scripts in `.init/bin/`: +- `artifact_github_download.sh [-n name] [-o output]` - Download GitHub Actions artifacts +- `mime_mp4_gif.sh [options] [output.gif]` - Advanced MP4 to animated GIF converter with keyframe extraction and interpolation algorithms +- `doc_bash_generate.sh [options] ` - Auto-generate README.md documentation with animated GIFs: + - Supports glob patterns for multiple executables + - Parses `--help` output to extract usage, options, and examples + - Records asciinema demos and converts to animated GIFs + - Custom demos via `.demo` files (place next to executable) + - Output formats: Markdown with collapsible sections, embedded GIFs, table of contents + - Dependencies: asciinema, agg (for GIF generation, optional with `--no-gif`) + - Example: `doc_bash_generate.sh -t "My Tools" -o docs/README.md *.sh` + +**CSS Color Utilities** (pure bash implementations using only `bc`): +- `css_color_palette.sh [options]` - Generate comprehensive color palettes with multiple harmony types: + - Palette types: monochromatic, analogous, complementary, split-complementary, triadic, tetradic + - Complete color scales: 50-950 (11 shades) following yamada-colors format + - Style variations: shades, tints, tones, all + - Light/dark mode support + - Output formats: YAML (default), JSON + - Interactive mode with colored terminal preview + - Example: `css_color_palette.sh "#3498db" -p triadic -o palette.json` + +- `css_color_filter.sh [options]` - Generate CSS filter values to transform black elements into any target color: + - Uses SPSA (Simultaneous Perturbation Stochastic Approximation) optimization + - Generates filter combinations: invert, sepia, saturate, hue-rotate, brightness, contrast + - Supports hex colors (#FF5733) or RGB (255,87,51) + - Interactive mode with accuracy metrics + - Clipboard support for quick copying + - Note: Takes 2-5 minutes per color due to optimization algorithm + - Example: `css_color_filter.sh "#FF5733" -c` (copies result to clipboard) + +## Projects Structure + +Projects are managed by Arty and cloned into `Projects/` or `repos/`: +- **butter-sh/** - Butter shell GitHub pages site +- **docker-compose/** - Docker compose configurations (both dev/prod envs) +- **pivoine.art/** - Jekyll-based art portfolio site +- **sexy.pivoine.art/** - Contains Rust package (`packages/buttplug/`) +- **node.js/** - Node.js applications: + - `awesome/` - Main Node.js app (dev/prod) + - `awesome-app/` - Companion app (dev only) + +Personal media directories (dev env only): +- **Bilder/** - Pictures (from home-pictures repo) +- **Videos/** - Videos (from home-videos repo) +- **Musik/** - Music (from home-music repo) + +## Package Management + +### Node.js +- **Package manager**: pnpm (enabled via corepack) +- **Global packages**: Installed to `~/node_modules/`, available via `~/node_modules/.bin/` +- **PM2**: Configured via `ecosystem.config.js` for GitHub Copilot language server +- **Dependencies**: playwright (dev dependency) + +### Python +- **Installer**: pip +- **Dependencies**: Listed in `requirements.txt` (currently: pre-commit) + +### Ruby +- **Bundler**: Gemfile specifies Jekyll 4.3 and rubocop + +## Important Notes + +- **Selective Git Tracking**: This repository uses an inverted `.gitignore` pattern - everything is ignored by default (`*`), then specific files/directories are explicitly allowed (`!CLAUDE.md`, `!.zshrc`, etc.). When adding new tracked files, you must explicitly allow them in `.gitignore`. The `.init/` directory is NOT tracked in git - it exists locally only for shell initialization. +- **Shell Initialization**: Shell must source `.init/init.sh` for full environment setup (automatically done in `.zshrc`). Use `ri` alias to reinitialize without restarting shell. +- **Language Runtimes**: All language versions are managed by version managers (nvm, rbenv, pyenv, gvm) and installed via Ansible playbook. Version files (`.nvmrc`, `.ruby-version`, `.python-version`) specify the versions. +- **Docker**: User must be in `docker` group (managed by Ansible). May require logout/login after Ansible provisioning. +- **Working Directory**: `.last_pwd` tracks the last working directory for shell navigation across sessions. +- **Arty Repository Manager**: `arty.yml` manages git subrepositories. Use `pnpm arty sync --env dev` to clone/update all dev repositories, or `--env prod` for production only. +- Always use arty to utlize docker in this project +- Always run `arty up -d CONTAINER(s)` instead `arty restart CONTAINER(S)` +- Always push with the valknarthing ssh key. +- Please make sure the ssh agent only takes one key to push. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100755 index 00000000..47031b2b --- /dev/null +++ b/README.md @@ -0,0 +1,416 @@ +
+ +
+ _    _____    __    __ __ _   _____    ____ _ _____
+| |  / /   |  / /   / //_// | / /   |  / __ ( ) ___/
+| | / / /| | / /   / ,<  /  |/ / /| | / /_/ //\__ \
+| |/ / ___ |/ /___/ /| |/ /|  / ___ |/ _, _/ ___/ /
+|___/_/  |_/_____/_/ |_/_/ |_/_/  |_/_/ |_| /____/
+
+    __________  ____  ____________
+   / ____/ __ \/ __ \/ ____/ ____/
+  / /_  / / / / /_/ / / __/ __/
+ / __/ / /_/ / _, _/ /_/ / /___
+/_/    \____/_/ |_|\____/_____/
+
+ +# ⚡🔥 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 │ +│ ⚔️ POSTGRES │ Version 18 database engine │ +└─────────────────────────────────────────────────┘ +``` + +--- + +## 🩸 QUICK START RITUAL 🩸 + +### **Summoning the Environment** + +```bash +# 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. Configure git +git config --global init.defaultBranch main +git config --global --add safe.directory /home/$USER + +# 3. Install essential packages using arty scripts +arty debian/install # Base packages (curl, zsh, fzf, davfs2, etc.) +arty rust/install # Rust toolchain via rustup +arty zed/install # Zed editor +arty claude/install # Claude CLI + +# 4. Sync shell configuration and version managers +arty sync + +# 5. Source the shell configuration +source ~/.zshrc +``` + +### **Available Installation Scripts** + +Arty provides installation scripts for various tools: + +```bash +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 rust/install # Rust toolchain via rustup +arty uv/install # uv Python package manager +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 +``` + +--- + +## 🎯 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 - 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: + +```bash +# 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 repository dependencies and installation scripts: + +```yaml +name: "Valknar's home" +version: '1.0.0' +description: "Valknar's home repository" +author: 'valknar@pivoine.art' +license: 'MIT' + +references: + # Custom scripts and binaries + - url: https://dev.pivoine.art/valknar/bin.git + into: bin + - url: https://dev.pivoine.art/valknar/home-llmx.git + into: .llmx + + # Version managers + - url: https://github.com/nvm-sh/nvm.git + into: .nvm + - url: https://github.com/rbenv/rbenv.git + into: .rbenv + - url: https://github.com/pyenv/pyenv.git + into: .pyenv + - url: https://github.com/moovweb/gvm.git + into: .gvm + + # Shell configuration + - 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 + +scripts: + debian/update: sudo sed -i 's/main.../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 + rust/install: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + 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 +``` + +### **Using Arty** + +```bash +# Sync all repositories defined in arty.yml +arty sync + +# Run installation scripts +arty debian/install +arty rust/install +arty zed/install + +# Update all references +arty update + +# Show configuration info +arty info +``` + +### **What Arty Manages:** +- ✅ **Version managers** (nvm, rbenv, pyenv, gvm) +- ✅ **Shell configuration** (Oh-My-Zsh, Powerlevel10k, plugins) +- ✅ **Custom binaries** (from valknarogg/bin repository) +- ✅ **Installation scripts** (system packages, development tools) + +### **Simplified Repository Management** + +The configuration has been streamlined to focus on essential tooling and version managers. Project-specific repositories should be managed separately in their respective locations (e.g., `~/Projects/`), while arty handles the core development environment setup. + +--- + +## 🔥 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 +git add -A && git commit -m "$(g2)" # Reuse last commit message +``` + +### **Media Processing** + +```bash +# 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** + +```bash +# 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** + +```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 +├── .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 (managed separately) +├── 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 +- **`.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 enforcement +- **`eslint.config.mts`** - JavaScript/TypeScript linting +- **`.prettierrc`** - Code formatting rules +- **`biome.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 management with installation scripts + +### **Personal** +- **`signature.txt`** - ASCII art email signature with contact information + +--- + +## 🔗 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` + +This provides seamless access to cloud-stored media and documents from your home directory. + +--- + +## ⚙️ 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. 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 +- [Ansible Documentation](https://docs.ansible.com/) +- [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 Documentation](https://github.com/butter-sh/butter-sh.github.io) +- [Butter.sh Ecosystem](https://butter.sh) + +--- + +## 🖤 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 ⚔️](#)** + +
\ No newline at end of file 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 + ───────────────────────────────────────────────────────────────────