Compare commits

...

13 Commits

Author SHA1 Message Date
673db9e2cc p10k update 2026-04-29 22:41:28 +08:00
4040adc7b2 vscode macos shell 2026-04-22 12:17:51 +08:00
95deaa4fda Merge branch 'master' of git.axenov.dev:anthony/dotfiles 2026-04-04 19:58:46 +08:00
d9c91162f5 .profile java_home 2026-04-04 19:58:38 +08:00
d64708126b docker-ips misc 2026-04-04 19:51:34 +08:00
110df8e08b Merge branch 'master' of git.axenov.dev:anthony/dotfiles 2026-04-04 19:47:36 +08:00
4b4e3ac97c vscode misc 2026-04-04 19:41:54 +08:00
a3914f5474 fix xcompose 2026-04-04 19:39:33 +08:00
4a1a5abb96 shell for mac 2026-03-26 10:57:56 +08:00
f4f2db7de1 gitconfig update 2026-03-26 00:22:48 +08:00
1705e95a43 p10k update 2026-03-26 00:22:35 +08:00
f06be8c133 agents skills 2026-03-18 19:45:59 +08:00
f642e96112 misc 2026-03-18 19:45:11 +08:00
15 changed files with 535 additions and 91 deletions

View File

@@ -0,0 +1,141 @@
---
name: bash-script
description: Write robust bash scripts with proper error handling. Use when the user says "write a script", "bash script", "shell script", "automate this", "create a backup script", or asks to script a task.
allowed-tools: Read, Write, Edit, Bash, Glob
---
# Bash Script
Write robust, maintainable bash scripts with proper error handling.
## Instructions
1. Understand the task requirements
2. Design the script structure
3. Write with safety options and error handling
4. Test and validate
## Script template
```bash
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
# Description: Brief description of what this script does
# Usage: ./script.sh [options]
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
# Default values
VERBOSE="${VERBOSE:-false}"
usage() {
cat <<EOF
usage: ${SCRIPT_NAME} [options] <argument>
Description of what the script does.
Options:
-h, --help Show this help message
-v, --verbose Enable verbose output
Examples:
${SCRIPT_NAME} input.txt
${SCRIPT_NAME} --verbose /path/to/file
EOF
}
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" >&2
}
error() {
log "ERROR: $*"
exit 1
}
cleanup() {
# Remove temp files, restore state, etc.
rm -f "${TEMP_FILE:-}"
}
trap cleanup EXIT
main() {
# Parse arguments
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help) usage; exit 0 ;;
-v|--verbose) VERBOSE=true; shift ;;
--) shift; break ;;
-*) error "Unknown option: $1" ;;
*) break ;;
esac
done
[[ $# -lt 1 ]] && { usage; exit 1; }
local input="$1"
[[ -f "$input" ]] || error "File not found: $input"
# Main logic here
log "Processing $input"
}
main "$@"
```
## Safety options explained
| Option | Purpose |
| ----------------- | ----------------------------------- |
| `set -e` | Exit on error |
| `set -u` | Error on undefined variables |
| `set -o pipefail` | Pipeline fails if any command fails |
| `IFS=$'\n\t'` | Safer word splitting |
## Best practices
- MUST use `set -euo pipefail` at script start
- MUST quote all variables: `"$var"` not `$var`
- MUST use `[[` for conditionals (not `[`)
- MUST use `$()` for command substitution (not backticks)
- Use `readonly` for constants
- Use `local` for function variables
- Use `trap` for cleanup
- Use `mktemp` for temp files
## Common patterns
```bash
# Check if command exists
command -v docker &>/dev/null || error "docker not found"
# Default value
name="${1:-default}"
# Read file line by line
while IFS= read -r line; do
echo "$line"
done < "$file"
# Process arguments
for arg in "$@"; do
echo "$arg"
done
# Temp file with cleanup
TEMP_FILE="$(mktemp)"
trap 'rm -f "$TEMP_FILE"' EXIT
```
## Rules
- MUST include `set -euo pipefail`
- MUST quote all variable expansions
- MUST include usage function for scripts with arguments
- MUST use trap for cleanup of temp files
- Never use `eval` with user input
- Never assume current directory
- Always use absolute paths for cron scripts

100
.agents/skills/git/SKILL.md Normal file
View File

@@ -0,0 +1,100 @@
---
name: git
description: Git operations with conventional commits. Use for staging, committing, pushing, PRs, merges. Auto-splits commits by type/scope. Security scans for secrets.
version: 1.0.0
---
# Git Operations
Execute git workflows via `git-manager` subagent to isolate verbose output.
Activate `context-engineering` skill.
**IMPORTANT:**
- Sacrifice grammar for the sake of concision.
- Ensure token efficiency while maintaining high quality.
- Pass these rules to subagents.
## Arguments
- `cm`: Stage files & create commits
- `cp`: Stage files, create commits and push
- `pr`: Create Pull Request [to-branch] [from-branch]
- `to-branch`: Target branch (default: main)
- `from-branch`: Source branch (default: current branch)
- `merge`: Merge [to-branch] [from-branch]
- `to-branch`: Target branch (default: main)
- `from-branch`: Source branch (default: current branch)
## Quick Reference
| Task | Reference |
|------|-----------|
| Commit | `references/workflow-commit.md` |
| Push | `references/workflow-push.md` |
| Pull Request | `references/workflow-pr.md` |
| Merge | `references/workflow-merge.md` |
| Standards | `references/commit-standards.md` |
| Safety | `references/safety-protocols.md` |
| Branches | `references/branch-management.md` |
| GitHub CLI | `references/gh-cli-guide.md` |
## Core Workflow
### Step 1: Stage + Analyze
```bash
git add -A && git diff --cached --stat && git diff --cached --name-only
```
### Step 2: Security Check
Scan for secrets before commit:
```bash
git diff --cached | grep -iE "(api[_-\]?key|token|password|secret|credential)"
```
**If secrets found:** STOP, warn user, suggest `.gitignore`.
### Step 3: Split Decision
**NOTE:**
- Search for related issues on GitHub and add to body.
- Only use `feat`, `fix`, or `perf` prefixes for files in `.claude` directory (do not use `docs`).
**Split commits if:**
- Different types mixed (feat + fix, code + docs)
- Multiple scopes (auth + payments)
- Config/deps + code mixed
- FILES > 10 unrelated
**Single commit if:**
- Same type/scope, FILES ≤ 3, LINES ≤ 50
### Step 4: Commit
```bash
git commit -m "type(scope): description"
```
## Output Format
```
✓ staged: N files (+X/-Y lines)
✓ security: passed
✓ commit: HASH type(scope): description
✓ pushed: yes/no
```
## Error Handling
| Error | Action |
|-------|--------|
| Secrets detected | Block commit, show files |
| No changes | Exit cleanly |
| Push rejected | Suggest `git pull --rebase` |
| Merge conflicts | Suggest manual resolution |
## References
- `references/workflow-commit.md` - Commit workflow with split logic
- `references/workflow-push.md` - Push workflow with error handling
- `references/workflow-pr.md` - PR creation with remote diff analysis
- `references/workflow-merge.md` - Branch merge workflow
- `references/commit-standards.md` - Conventional commit format rules
- `references/safety-protocols.md` - Secret detection, branch protection
- `references/branch-management.md` - Naming, lifecycle, strategies
- `references/gh-cli-guide.md` - GitHub CLI commands reference

View File

@@ -0,0 +1,75 @@
---
name: linux-admin
cluster: linux
description: "Ubuntu Server 24.04 LTS: apt, user management, disk/filesystem, sysctl, log management"
tags: ["linux","ubuntu","admin","system"]
dependencies: []
composes: []
similar_to: []
called_by: []
authorization_required: false
scope: general
model_hint: claude-sonnet
embedding_hint: "linux ubuntu server administration apt package system admin"
---
# linux-admin
## Purpose
This skill provides tools for administering Ubuntu Server 24.04 LTS, focusing on package management with apt, user account creation and modification, disk and filesystem operations, kernel parameter tuning via sysctl, and log management.
## When to use
Use this skill for server setup, maintenance, or troubleshooting on Ubuntu 24.04, such as deploying applications, securing user access, optimizing system performance, or analyzing logs in production environments.
## Key Capabilities
- **Package Management (apt)**: Update repositories, install/uninstall packages, and manage dependencies using `apt` with flags like `-y` for non-interactive mode.
- **User Management**: Create, modify, or delete users with commands like `useradd`, `usermod`, and `userdel`, including options for home directories and shells.
- **Disk/Filesystem**: Partition disks with `fdisk`, format filesystems using `mkfs`, and mount/unmount with `mount` and `umount`, supporting formats like ext4.
- **Sysctl**: Adjust kernel parameters dynamically, e.g., for networking or security, by editing `/etc/sysctl.conf` and applying with `sysctl -p`.
- **Log Management**: Query and filter system logs using `journalctl`, with options like `--since` for time-based searches and persistent storage in `/var/log`.
## Usage Patterns
Invoke this skill via shell commands in scripts or AI prompts. Always prefix commands with `sudo` for root privileges. Example 1: To install a package and add a user, use a sequence like: `sudo apt update; sudo apt install nginx -y; sudo useradd webuser -m`. Example 2: For disk management and log check, run: `sudo fdisk /dev/sda; sudo mkfs.ext4 /dev/sda1; sudo mount /dev/sda1 /mnt; sudo journalctl -u nginx --since "1 hour ago"`.
## Common Commands/API
- **Apt Example**: Update and install a package:
```
sudo apt update
sudo apt install vim -y
```
- **User Management Example**: Add a user with home directory:
```
sudo useradd newuser -m -s /bin/bash
sudo passwd newuser
```
- **Disk/Filesystem Example**: Create and mount a filesystem:
```
sudo fdisk -l /dev/sdb # List partitions
sudo mkfs.ext4 /dev/sdb1
sudo mount /dev/sdb1 /mnt/data
```
- **Sysctl Example**: Set a kernel parameter:
```
echo "net.core.somaxconn=1024" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
```
- **Log Management Example**: Filter logs for a service:
```
sudo journalctl -u apache2 --since yesterday
sudo journalctl -p err # Show only errors
```
## Integration Notes
Run commands in a Bash environment on Ubuntu 24.04\. For remote access, use SSH; no API keys required for core functions, but if integrating with external tools like monitoring APIs, set env vars like `$LINUX_API_KEY` for authentication. Ensure the AI agent prefixes commands with `sudo` and handles output parsing, e.g., check for `apt` success via exit codes.
## Error Handling
Check command exit codes immediately; for example, after `sudo apt install package`, verify with `if [ $? -ne 0 ]; then echo "Installation failed"; fi`. Parse errors from stdout/stderr, e.g., `apt` errors like "E: Unable to locate package" indicate missing repos—run `sudo apt update` first. For sysctl, if a parameter fails, check `/var/log/syslog` for details. Use `try-catch` in scripts:
```
command_output=$(sudo apt update 2>&1)
if [[ $command_output == *"ERROR"* ]]; then echo "Handle error"; fi
```
## Graph Relationships
- Related to: linux cluster skills like "networking" for firewall integration.
- Depends on: None directly, but assumes base Ubuntu setup.
- Conflicts with: None specified.

2
.gitignore vendored
View File

@@ -1,3 +1,4 @@
.DS_Store
*.backup *.backup
*.bak *.bak
*.log *.log
@@ -5,3 +6,4 @@
*.tmp *.tmp
*.tmp* *.tmp*
*.vscdb *.vscdb
.DS_Store

View File

@@ -17,6 +17,11 @@ stow -v git -D
Target (`-t`) defaults to the parent of `pwd`, so if you clone this repo not in `$HOME` then you MUST explicitly provide `-t ~` or `-t $HOME` every time. Target (`-t`) defaults to the parent of `pwd`, so if you clone this repo not in `$HOME` then you MUST explicitly provide `-t ~` or `-t $HOME` every time.
Root-specific packages:
* `keyd` => `sudo stow keyd -t /`
* `docker` => `sudo stow docker -t /`
## Documentation and sources ## Documentation and sources
* <https://www.gnu.org/software/stow/manual/stow.html> * <https://www.gnu.org/software/stow/manual/stow.html>

View File

@@ -1,3 +1,7 @@
[user]
name = Anthony Axenov
email = anthonyaxenov@gmail.com
signingKey = F7CCD4EC
[core] [core]
editor = nano editor = nano
autocrlf = input autocrlf = input
@@ -25,3 +29,4 @@
path = ~/.git_aliases.local path = ~/.git_aliases.local
[include] [include]
path = ~/.gitconfig.local ; use this file to store other personal settings and aliases path = ~/.gitconfig.local ; use this file to store other personal settings and aliases

View File

@@ -0,0 +1,5 @@
[ids]
0c45:8006
[main]
# заготовка

View File

@@ -12,6 +12,7 @@ alias g='git'
alias c='composer' alias c='composer'
alias hosts="sudo nano /etc/hosts" alias hosts="sudo nano /etc/hosts"
alias shrug="echo '¯\_(ツ)_/¯' | xclip -selection c" alias shrug="echo '¯\_(ツ)_/¯' | xclip -selection c"
alias py="python"
alias up='cd ..' alias up='cd ..'
alias back='cd -' alias back='cd -'
@@ -33,8 +34,8 @@ alias ll='ls -palFh --color=auto'
alias mkdir='mkdir -pv' alias mkdir='mkdir -pv'
alias where='whereis' # zsh builtin alias where='whereis' # zsh builtin
alias ps='ps auxf' # alias ps='ps auxf'
alias psg='ps aux | grep -v grep | grep -i -e VSZ -e' # alias psg='ps aux | grep -v grep | grep -i -e VSZ -e'
alias wine='LANG=ru_RU.utf8 wine' alias wine='LANG=ru_RU.utf8 wine'
alias wine64='LANG=ru_RU.utf8 wine64' alias wine64='LANG=ru_RU.utf8 wine64'

View File

@@ -1,8 +1,8 @@
# Generated by Powerlevel10k configuration wizard on 2025-04-10 at 13:49 +08. # Generated by Powerlevel10k configuration wizard on 2026-04-29 at 22:33 +08.
# Based on romkatv/powerlevel10k/config/p10k-rainbow.zsh, checksum 24045. # Based on romkatv/powerlevel10k/config/p10k-rainbow.zsh, checksum 24045.
# Wizard options: nerdfont-complete + powerline, small icons, rainbow, unicode, # Wizard options: nerdfont-complete + powerline, small icons, rainbow, unicode,
# 24h time, angled separators, sharp heads, flat tails, 2 lines, dotted, no frame, # 24h time, round separators, round heads, round tails, 2 lines, solid, no frame,
# lightest-ornaments, sparse, many icons, concise, instant_prompt=verbose. # darkest-ornaments, sparse, many icons, concise, instant_prompt=verbose.
# Type `p10k configure` to generate another config. # Type `p10k configure` to generate another config.
# #
# Config for Powerlevel10k with powerline prompt style with colorful background. # Config for Powerlevel10k with powerline prompt style with colorful background.
@@ -32,7 +32,7 @@
# The list of segments shown on the left. Fill it with the most important segments. # The list of segments shown on the left. Fill it with the most important segments.
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
# =========================[ Line #1 ]========================= # =========================[ Line #1 ]=========================
# os_icon # os identifier os_icon # os identifier
dir # current directory dir # current directory
vcs # git status vcs # git status
# =========================[ Line #2 ]========================= # =========================[ Line #2 ]=========================
@@ -53,11 +53,11 @@
# asdf # asdf version manager (https://github.com/asdf-vm/asdf) # asdf # asdf version manager (https://github.com/asdf-vm/asdf)
virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html)
anaconda # conda environment (https://conda.io/) anaconda # conda environment (https://conda.io/)
# pyenv # python environment (https://github.com/pyenv/pyenv) pyenv # python environment (https://github.com/pyenv/pyenv)
goenv # go environment (https://github.com/syndbg/goenv) goenv # go environment (https://github.com/syndbg/goenv)
# nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv)
# nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) nvm # node.js version from nvm (https://github.com/nvm-sh/nvm)
# nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) nodeenv # node.js environment (https://github.com/ekalinin/nodeenv)
# node_version # node.js version # node_version # node.js version
# go_version # go version (https://golang.org) # go_version # go version (https://golang.org)
# rust_version # rustc version (https://www.rust-lang.org) # rust_version # rustc version (https://www.rust-lang.org)
@@ -88,24 +88,26 @@
context # user@hostname context # user@hostname
# nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) # nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
# ranger # ranger shell (https://github.com/ranger/ranger) # ranger # ranger shell (https://github.com/ranger/ranger)
# yazi # yazi shell (https://github.com/sxyazi/yazi)
# nnn # nnn shell (https://github.com/jarun/nnn) # nnn # nnn shell (https://github.com/jarun/nnn)
# lf # lf shell (https://github.com/gokcehan/lf)
# xplr # xplr shell (https://github.com/sayanarijit/xplr) # xplr # xplr shell (https://github.com/sayanarijit/xplr)
vim_shell # vim shell indicator (:sh) # vim_shell # vim shell indicator (:sh)
midnight_commander # midnight commander shell (https://midnight-commander.org/) midnight_commander # midnight commander shell (https://midnight-commander.org/)
# nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) # nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
# chezmoi_shell # chezmoi shell (https://www.chezmoi.io/)
# vi_mode # vi mode (you don't need this if you've enabled prompt_char) # vi_mode # vi mode (you don't need this if you've enabled prompt_char)
# vpn_ip # virtual private network indicator # vpn_ip # virtual private network indicator
# load # CPU load # load # CPU load
# disk_usage # disk usage # disk_usage # disk usage
# ram # free RAM # ram # free RAM
# swap # used swap # swap # used swap
todo # todo items (https://github.com/todotxt/todo.txt-cli) # todo # todo items (https://github.com/todotxt/todo.txt-cli)
# timewarrior # timewarrior tracking status (https://timewarrior.net/) # timewarrior # timewarrior tracking status (https://timewarrior.net/)
# taskwarrior # taskwarrior task count (https://taskwarrior.org/) # taskwarrior # taskwarrior task count (https://taskwarrior.org/)
time # current time time # current time
# =========================[ Line #2 ]========================= # =========================[ Line #2 ]=========================
# newline newline
# status # exit code of the last command
# ip # ip address and bandwidth usage for a specified network interface # ip # ip address and bandwidth usage for a specified network interface
# public_ip # public IP address # public_ip # public IP address
# proxy # system-wide http/https/ftp proxy # proxy # system-wide http/https/ftp proxy
@@ -150,13 +152,13 @@
# '─'. The last two make it easier to see the alignment between left and right prompt and to # '─'. The last two make it easier to see the alignment between left and right prompt and to
# separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false
# for more compact prompt if using this option. # for more compact prompt if using this option.
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='·' typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=''
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND=
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND=
if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
# The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE
# ornaments defined above. # ornaments defined above.
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=244 typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=238
# Start filler from the edge of the screen if there are no left segments on the first line. # Start filler from the edge of the screen if there are no left segments on the first line.
typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
# End filler on the edge of the screen if there are no right segments on the first line. # End filler on the edge of the screen if there are no right segments on the first line.
@@ -164,21 +166,21 @@
fi fi
# Separator between same-color segments on the left. # Separator between same-color segments on the left.
typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B1' typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B5'
# Separator between same-color segments on the right. # Separator between same-color segments on the right.
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B3' typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B7'
# Separator between different-color segments on the left. # Separator between different-color segments on the left.
typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B4'
# Separator between different-color segments on the right. # Separator between different-color segments on the right.
typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B6'
# The right end of left prompt. # The right end of left prompt.
typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B4'
# The left end of right prompt. # The left end of right prompt.
typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B6'
# The left end of left prompt. # The left end of left prompt.
typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='' typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B6'
# The right end of right prompt. # The right end of right prompt.
typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='' typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B4'
# Left prompt terminator for lines without any segments. # Left prompt terminator for lines without any segments.
typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=
@@ -504,21 +506,21 @@
# Status on success. No content, just an icon. No need to show it if prompt_char is enabled as # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as
# it will signify success by turning green. # it will signify success by turning green.
typeset -g POWERLEVEL9K_STATUS_OK=true typeset -g POWERLEVEL9K_STATUS_OK=true
typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='' typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='0'
typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2
typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=22 typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=22
# Status when some part of a pipe command fails but the overall exit status is zero. It may look # Status when some part of a pipe command fails but the overall exit status is zero. It may look
# like this: 1|0. # like this: 1|0.
typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true
typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='' typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='0'
typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2
typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=0 typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=22
# Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as
# it will signify error by turning red. # it will signify error by turning red.
typeset -g POWERLEVEL9K_STATUS_ERROR=true typeset -g POWERLEVEL9K_STATUS_ERROR=true
typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='' typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION=''
typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3 typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3
typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1 typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1
@@ -526,7 +528,7 @@
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true
# Use terse signal names: "INT" instead of "SIGINT(2)". # Use terse signal names: "INT" instead of "SIGINT(2)".
typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='' typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION=''
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3 typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1 typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1

View File

@@ -16,13 +16,57 @@ fi
### AAA ########################################## ### AAA ##########################################
isMac() { uname -s | grep -q "Darwin"; }
isLinux() { uname -s | grep -q "Linux"; }
addPath() { [ -d "$1" ] && export PATH="$1:$PATH"; }
safeSource() { [ -s "$1" ] && source "$1" 2>/dev/null || true; }
export EDITOR="nano" export EDITOR="nano"
export NVM_DIR="$HOME/.nvm"
export GOPATH="$HOME/.go"
### MacBook section
if isMac; then
# brew software
if [ -d "/opt/homebrew/bin/" ]; then
# brew itself
eval "$(/opt/homebrew/bin/brew shellenv zsh)"
addPath "/opt/homebrew/bin/"
# java
export JAVA_HOME="/Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home"
# nvm (not nvim!)
safeSource "/opt/homebrew/opt/nvm/nvm.sh" # This loads nvm
safeSource "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion
fi
# jbtoolbox
addPath "$HOME/Library/Application Support/JetBrains/Toolbox/scripts"
# orbstack
safeSource "$HOME/.orbstack/shell/init.zsh"
fi
### MacBook section end
### Ubuntu section
if isLinux; then
# golang
export PATH="$PATH:/usr/local/go/bin"
# java
# export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64" # export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64" export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
export PATH="$JAVA_HOME/bin/:$PATH"
export PATH="$PATH:/opt/nvim/bin/" # nvim (not nvm!)
export PATH="$PATH:$HOME/.local/bin/" [ -d "/opt/nvim/bin/" ] && export PATH="$PATH:/opt/nvim/bin/"
export PATH="$PATH:$HOME/.local/share/JetBrains/Toolbox/scripts/"
# rust cargo
[ -f "$HOME/.cargo/env" ] && source "$HOME/.cargo/env"
# nvm (not nvim!)
safeSource "$NVM_DIR/nvm.sh" # This loads nvm
safeSource "$NVM_DIR/bash_completion" # This loads nvm bash_completion
if hash composer >/dev/null; then if hash composer >/dev/null; then
composer_home=$(composer config -g home 2>/dev/null) composer_home=$(composer config -g home 2>/dev/null)
@@ -34,23 +78,19 @@ fi
# export PHPBREW_RC_ENABLE=1 # export PHPBREW_RC_ENABLE=1
# [ -f $HOME/.phpbrew/bashrc ] && source $HOME/.phpbrew/bashrc # [ -f $HOME/.phpbrew/bashrc ] && source $HOME/.phpbrew/bashrc
# golang
export PATH="$PATH:/usr/local/go/bin"
export GOPATH="$HOME/.go"
# rust cargo
[ -f "$HOME/.cargo/env" ] && source "$HOME/.cargo/env"
# nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && source "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# The next line updates PATH for Yandex Cloud CLI. # The next line updates PATH for Yandex Cloud CLI.
[ -f "$HOME/yandex-cloud/path.bash.inc" ] && source "$HOME/yandex-cloud/path.bash.inc" safeSource "$HOME/yandex-cloud/path.bash.inc"
# The next line enables shell command completion for yc. # The next line enables shell command completion for yc.
[ -f "$HOME/yandex-cloud/completion.zsh.inc" ] && source "$HOME/yandex-cloud/completion.zsh.inc" safeSource "$HOME/yandex-cloud/completion.zsh.inc"
# misc # jbtoolbox
[[ -f "$HOME/.profile.local" ]] && source "$HOME/.profile.local" if [ -d "$HOME/.local/share/JetBrains/Toolbox/scripts/" ]; then
export PATH="$PATH:$HOME/.local/share/JetBrains/Toolbox/scripts/"
fi
fi
### Ubuntu section end
addPath "$JAVA_HOME/bin/"
safeSource "$HOME/.profile.local"

View File

@@ -6,13 +6,13 @@ if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]
fi fi
# If you come from bash you might have to change your $PATH. # If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH # export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH
# Path to your oh-my-zsh installation. # Path to your Oh My Zsh installation.
export ZSH="$HOME/.oh-my-zsh" export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load --- if set to "random", it will # 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, # 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 # to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="powerlevel10k/powerlevel10k" ZSH_THEME="powerlevel10k/powerlevel10k"
@@ -77,13 +77,43 @@ ZSH_THEME="powerlevel10k/powerlevel10k"
# Custom plugins may be added to $ZSH_CUSTOM/plugins/ # Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse) # Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup. # Add wisely, as too many plugins slow down shell startup.
plugins=(git docker docker-compose composer zsh-autosuggestions zsh-syntax-highlighting laravel) plugins=(git docker docker-compose composer zsh-autosuggestions zsh-syntax-highlighting)
source $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. # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh [[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh
### AAA
[[ -f ~/.bash_aliases ]] && source ~/.bash_aliases [[ -f ~/.bash_aliases ]] && source ~/.bash_aliases
# [[ -f ~/.bashrc.local ]] && source ~/.bashrc.local
[[ -f ~/.profile ]] && source ~/.profile [[ -f ~/.profile ]] && source ~/.profile

40
shell/README.md Normal file
View File

@@ -0,0 +1,40 @@
## Краткое описание файлов
- `.bashrc` — bash для интерактивного non-login: история, prompt, aliases, completion.
- `.zshrc` — zsh для интерактивного shell: плагины, тема, инициализация окружения.
- `.profile` — общие login-настройки: PATH, переменные, platform-specific config.
- `.bash_aliases` — набор пользовательских aliases для удобной навигации и команд.
- `.p10k.zsh` — конфигурация темы Powerlevel10k.
## Иерархия загрузки
```
ИНТЕРАКТИВНЫЙ ШЕЛЛ
├── bash
│ ├── .bashrc
│ │ ├── .bash_aliases
│ │ └── .profile
│ └── .profile
└── zsh
├── .zshrc
│ ├── .bash_aliases
│ ├── .profile
│ └── .p10k.zsh
└── .profile
```
## Загрузка по типам shell
```
LOGIN SHELL
├── bash: ~/.bash_profile → ~/.bash_login → ~/.profile
└── zsh: ~/.zprofile → ~/.zshrc
INTERACTIVE NON-LOGIN
├── bash: ~/.bashrc
└── zsh: ~/.zshrc
NON-INTERACTIVE
└── конфиги не загружаются автоматически
```

View File

@@ -1,27 +1,24 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
# TODO not ready yet if [[ "$1" == "-h" || "$1" == "--help" ]]; then
exit cat <<EOF
Usage: $(basename "$0") [-h] [name]
if [ "$1" ]; then Display IP addresses of Docker containers.
if [ "$1" = "-a" ]; then
docker ps -aq \ Options:
| xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \ -h, --help Show this help message
| sed -e 's#^/##' \
| column -t Arguments:
elif [ "$1" = "-c" ]; then name Container name to show specific IP
docker compose ps -q \
| xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \ EOF
| sed -e 's#^/##' \ exit 0
| column -t
else
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$1"
docker port "$1"
fi fi
if [[ -n "$1" ]]; then
docker ps -a --format "{{.ID}} {{.Names}} {{.Ports}}" --filter name="$1"
else else
docker ps -q \ docker ps -a --format "{{.ID}} {{.Names}} {{.Ports}}"
| xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \
| sed -e 's#^/##' \
| column -t
fi fi

View File

@@ -18,6 +18,7 @@ EOF
fi fi
# More details: https://jina.ai/reader/ # More details: https://jina.ai/reader/
#TODO: проверить https://defuddle.md/
url="$1"; shift url="$1"; shift
curl "https://r.jina.ai/$url" \ curl "https://r.jina.ai/$url" \

View File

@@ -5,7 +5,6 @@
"workbench.colorTheme": "Atom One Dark", "workbench.colorTheme": "Atom One Dark",
"workbench.preferredDarkColorTheme": "Atom One Dark", "workbench.preferredDarkColorTheme": "Atom One Dark",
"workbench.iconTheme": "material-icon-theme",
// "workbench.tree.indent": 10, // "workbench.tree.indent": 10,
"workbench.tree.renderIndentGuides": "always", "workbench.tree.renderIndentGuides": "always",
"workbench.view.alwaysShowHeaderActions": true, "workbench.view.alwaysShowHeaderActions": true,
@@ -138,7 +137,7 @@
// terminal // terminal
//---------------------------------------------------------------- //----------------------------------------------------------------
"terminal.integrated.fontFamily": "JetBrainsMono Nerd Font, MesloLGS NF, Ubuntu Mono", "terminal.integrated.fontFamily": "\"JetBrainsMono Nerd Font\", \"MesloLGS NF\", Ubuntu Mono",
"terminal.integrated.fontSize": 13, "terminal.integrated.fontSize": 13,
"terminal.integrated.cursorStyle": "line", "terminal.integrated.cursorStyle": "line",
"terminal.integrated.defaultProfile.linux": "zsh", "terminal.integrated.defaultProfile.linux": "zsh",
@@ -322,5 +321,6 @@
"git show" "git show"
], ],
"kilo-code.deniedCommands": [], "kilo-code.deniedCommands": [],
"chat.disableAIFeatures": true "chat.disableAIFeatures": true,
"terminal.external.osxExec": "zsh"
} }