chore: linting

This commit is contained in:
2025-10-13 14:14:45 +03:00
parent 88a2b3dadf
commit 7b6e95c4ab
89 changed files with 1556 additions and 706 deletions

View File

@@ -13,6 +13,7 @@ max_line_length = 80
[*.md] [*.md]
max_line_length = 120 max_line_length = 120
trim_trailing_whitespace = false
[*.lua] [*.lua]
max_line_length = 90 max_line_length = 90
@@ -24,10 +25,6 @@ indent_size = 4
indent_style = tab indent_style = tab
indent_size = 1 indent_size = 1
[*.plist]
indent_size = 1
indent_style = tab
[{local/bin/*,**/*.sh,**/zshrc,config/*,scripts/*}] [{local/bin/*,**/*.sh,**/zshrc,config/*,scripts/*}]
indent_size = 2 indent_size = 2
tab_width = 2 tab_width = 2
@@ -38,7 +35,8 @@ space_redirects = true
keep_padding = false keep_padding = false
function_next_line = true # --func-next-line function_next_line = true # --func-next-line
[config/git/config] [{*.plist,config/git/**,**/config/git/**}]
indent_size = 1
indent_style = tab indent_style = tab
# Ignore the entire "third_party" directory when calling shfmt on directories, # Ignore the entire "third_party" directory when calling shfmt on directories,
@@ -47,3 +45,7 @@ indent_style = tab
# the ignore logic is applied only when the --apply-ignore flag is given. # the ignore logic is applied only when the --apply-ignore flag is given.
[{tools/**,local/bin/asdf/**,config/cheat/cheatsheets/**,config/tmux/plugins/**}] [{tools/**,local/bin/asdf/**,config/cheat/cheatsheets/**,config/tmux/plugins/**}]
ignore = true ignore = true
[plan]
trim_trailing_whitespace = false
max_line_length = off

4
.gitignore vendored
View File

@@ -9,6 +9,7 @@
.env .env
.idea .idea
.nfs* .nfs*
.scannerwork
.vscode .vscode
Brewfile.lock.json Brewfile.lock.json
antidote_plugins.zsh antidote_plugins.zsh
@@ -51,3 +52,6 @@ local/bin/yabai
local/man/yabai.1 local/man/yabai.1
config/op/plugins/used_items/gh.json config/op/plugins/used_items/gh.json
config/zed/settings.json config/zed/settings.json
*.tmp.*
config/op/plugins/gh.json
config/fish/fish_variables.*

2
.gitmodules vendored
View File

@@ -71,7 +71,7 @@
[submodule "tmux/tmux-dark-notify"] [submodule "tmux/tmux-dark-notify"]
path = config/tmux/plugins/tmux-dark-notify path = config/tmux/plugins/tmux-dark-notify
url = https://github.com/erikw/tmux-dark-notify.git url = https://github.com/ivuorinen/tmux-dark-notify.git
ignore = dirty ignore = dirty
[submodule "antidote"] [submodule "antidote"]

View File

@@ -1,6 +1,7 @@
# vim: ft=gitignore # vim: ft=gitignore
.mypy_cache/* .mypy_cache/*
Brewfile.lock.json Brewfile.lock.json
base/plan
config/cheat/cheatsheets/community config/cheat/cheatsheets/community
config/cheat/cheatsheets/tldr config/cheat/cheatsheets/tldr
config/fzf/* config/fzf/*

1
.serena/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/cache

View File

@@ -0,0 +1,67 @@
# Areas for Improvement
## Code Quality Enhancements
### 1. Configuration Management
- **Inconsistent indentation**: Mixed tabs/spaces across config files
- **Line length management**: Need consistent enforcement of limits
- **Template standardization**: Memory files need consistent formatting template
### 2. Linting Configuration Improvements
- **Shellcheck exclusions**: Add proper ignore patterns for submodules
- **EditorConfig refinement**: Some rules too strict for generated/third-party content
- **Prettier ignore patterns**: Better exclusion of binary/generated files
### 3. Testing Infrastructure
- **Bats test errors**: Tests failing due to missing `rm` command in PATH
- **Test coverage**: Limited test coverage for shell functions
- **CI/CD integration**: Need automated linting in GitHub Actions
### 4. Documentation Gaps
- **Onboarding docs**: Missing clear setup instructions for new contributors
- **Troubleshooting guide**: Need common error resolution steps
- **Architecture overview**: Missing high-level system architecture
## Performance & Maintenance
### 5. Submodule Management
- **Large submodules**: Some submodules contain unnecessary files
- **Update frequency**: Need systematic submodule update process
- **Dependency tracking**: Better documentation of submodule purposes
### 6. Cross-Platform Considerations
- **Darwin-specific paths**: Some hardcoded macOS paths could be parameterized
- **Shell compatibility**: More testing across bash/zsh/fish environments
- **Tool availability**: Better fallbacks when optional tools missing
### 7. Security & Privacy
- **Secret management**: Better examples for secret configuration
- **Permission handling**: Some scripts could use more restrictive permissions
- **Audit trail**: Track configuration changes and their impact
## Development Workflow
### 8. Automation Opportunities
- **Auto-formatting**: Pre-commit hooks for consistent formatting
- **Dependency updates**: Automated updates for package.json dependencies
- **Health checks**: Scripts to validate configuration integrity
### 9. Error Handling
- **Graceful degradation**: Better fallbacks when tools unavailable
- **Error messages**: More informative error output
- **Recovery procedures**: Automated recovery from common failures
### 10. Modularity
- **Configuration splitting**: Some large config files could be modularized
- **Feature flags**: Optional components for minimal installations
- **Host-specific configs**: Better organization of machine-specific settings

View File

@@ -0,0 +1,50 @@
# Code Style and Conventions
## EditorConfig Rules (.editorconfig)
- **Charset**: UTF-8
- **Line endings**: LF
- **Indent style**: Spaces (except for specific files)
- **Indent size**: 2 spaces (default)
- **Final newline**: Required
- **Trailing whitespace**: Trimmed
### Language-specific Rules
- **Fish scripts**: 4-space indent, 80 char line limit
- **PHP files**: 4-space indent
- **Markdown**: 120 char line limit
- **Lua**: 90 char line limit
- **Git files**: Tab indentation
- **Shell scripts**: 2-space indent with specific shfmt settings
## Prettier Configuration
- Extends `@ivuorinen/prettier-config`
- **Trailing commas**: Always
- **Markdown**: 120 char width, preserve prose wrapping
## ESLint Configuration
- Extends `@ivuorinen` base configuration
- Applied to JavaScript/TypeScript files
## Shell Script Standards (.shellcheckrc)
- External sources following enabled
- Disabled checks: SC2039, SC2166, SC2154, SC1091, SC2174, SC2016
- Must include shebang or `# shellcheck shell=bash`
## Formatting Tools
- **Shell scripts**: shfmt with specific rules
- **Markdown**: markdownlint + prettier
- **JavaScript/TypeScript**: prettier + eslint
- **YAML**: yamllint
## Naming Conventions
- **Shell functions**: Use `x-` prefix for cross-shell compatibility
- **Environment variables**: UPPERCASE with underscores
- **File names**: lowercase with hyphens for scripts
- **Directory structure**: lowercase, organized by tool/purpose

View File

@@ -0,0 +1,80 @@
# Critical Linting Errors That Must Be Fixed
## Current Status: BLOCKING Issues Identified
The linting system has revealed 150+ violations across multiple categories that must be addressed immediately.
## EditorConfig Violations (High Priority)
### Missing Final Newlines
- All `.serena/memories/*.md` files missing final newlines
- Multiple project configuration files affected
- This is a BLOCKING issue per user instructions
### Line Length Violations
- Fish shell configs exceed 80-character limit (`.editorconfig` enforced)
- Memory files have lines exceeding 120-character limit
- WezTerm configuration files have long lines
### Indentation Errors
- Git configuration using tabs instead of spaces
- WezTerm color scheme files using tabs vs spaces
- Perl scripts with inconsistent indentation
## Markdownlint Issues (Memory Files)
### Systematic Problems Across All Memory Files
- Missing blank lines around headings (MD022)
- Lists not surrounded by blank lines (MD032)
- Fenced code blocks not surrounded by blank lines (MD031)
- Trailing punctuation in headings (MD026)
- Missing language specification for fenced code blocks (MD040)
- Missing final newlines (MD047)
### Specific Files Affected
- `areas_for_improvement.md`: 20+ violations
- `code_style_conventions.md`: 15+ violations
- `critical_linting_errors.md`: 25+ violations
- `darwin_system_utilities.md`: 15+ violations
- `immediate_action_items.md`: 25+ violations
- `project_overview.md`: 15+ violations
- `project_structure.md`: 20+ violations
- `shellcheck_issues.md`: 15+ violations
- `suggested_commands.md`: 25+ violations
- `task_completion_checklist.md`: 10+ violations
## Prettier Formatting Issues
### JSON Configuration Files
- `.commitlintrc.json`, `.eslintrc.json`, `.luarc.json`
- `.releaserc.json`, `.github/renovate.json`
- Host-specific configurations in `config/` directory
### YAML Files
- `.mega-linter.yml` formatting inconsistencies
- Various configuration files needing formatting
## Immediate Action Required
1. **Fix memory files**: Apply markdown formatting rules
2. **Run auto-fixers**: `yarn fix` to address automatic fixes
3. **Manual corrections**: Address remaining EditorConfig violations
4. **Validation**: Ensure `yarn lint` passes completely
## Impact Assessment
These violations prevent:
- Successful CI/CD pipeline execution
- Code quality standards compliance
- Pre-commit hook success
- Project maintainability standards
Per user instructions: "Linting issues ARE NOT ACCEPTABLE" and "EditorConfig problems are blocking errors"

View File

@@ -0,0 +1,66 @@
# Darwin (macOS) System Utilities
## Available Command Paths
Based on the current system setup:
### Core System Commands
- `git`: `/opt/homebrew/bin/git` (Homebrew version)
- `find`: `/usr/bin/find` (system version)
- `cd`: shell built-in command
- `ls`: aliased to `eza -h -s=type --git --icons --group-directories-first`
- `grep`: aliased to `grep --color`
### Modern Alternatives (Rust-based)
- `fd`: `/Users/ivuorinen/.local/share/cargo/bin/fd` (modern find)
- `rg`: `/Users/ivuorinen/.local/share/cargo/bin/rg` (ripgrep for text search)
## Recommended Usage Patterns
### File Search
```bash
# Use fd instead of find when possible
fd "*.sh" # Find shell scripts
fd -t f -e lua # Find Lua files
find . -name "*.sh" # Fallback to system find
```
### Text Search
```bash
# Use rg (ripgrep) instead of grep when possible
rg "function.*bash" # Search for bash functions
rg -t shell "export" # Search in shell files only
grep "pattern" file.txt # Fallback to system grep
```
### Directory Navigation
```bash
# Use eza features via ls alias
ls # Shows icons, git status, grouped directories
ls -la # Long format with hidden files
cd /full/path # Always use full paths in scripts
```
## Path Configuration
The system is configured with these PATH priorities:
1. `~/.local/bin` (user scripts)
2. `~/.dotfiles/local/bin` (dotfiles scripts)
3. `~/.local/share/bob/nvim-bin` (Neovim)
4. `~/.local/share/cargo/bin` (Rust tools like fd, rg)
5. `/opt/homebrew/bin` (Homebrew packages)
6. `/usr/local/bin` (system packages)
## Shell Compatibility
The dotfiles support multiple shells through `config/shared.sh`:
- Functions prefixed with `x-` work across bash, zsh, and fish
- Path management handled automatically per shell
- Environment variables set appropriately per shell

View File

@@ -0,0 +1,114 @@
# Immediate Action Items - Priority Order
## HIGH PRIORITY (Must Fix Before Any Development)
### 1. Fix Memory File Formatting (BLOCKING)
```bash
# These files prevent any linting from passing:
- .serena/memories/code_style_conventions.md
- .serena/memories/darwin_system_utilities.md
- .serena/memories/project_overview.md
- .serena/memories/project_structure.md
- .serena/memories/suggested_commands.md
- .serena/memories/task_completion_checklist.md
# Issues: Missing final newlines, markdown formatting, line length
# Impact: Blocks all linting commands
```
### 2. Fix Fish Shell Line Length Violations (BLOCKING)
```bash
# Files exceeding 80-char limit:
config/fish/alias.fish (4 violations)
config/fish/exports.fish (15 violations)
# These are CRITICAL - Fish config has strict limits
# Must be fixed before any fish-related changes
```
### 3. Fix Git Configuration Indentation (BLOCKING)
```bash
# Files with tab/space mixing:
config/git/shared (40+ violations)
hosts/s/config/git/overrides/config
hosts/s/config/git/local.d/work-git
# Impact: Git configuration may not work correctly
```
## MEDIUM PRIORITY (Fix During Next Development Cycle)
### 4. Prettier Formatting Issues
```bash
# 17 files need prettier formatting:
yarn fix:prettier
# Most are JSON/YAML configuration files
```
### 5. WezTerm Color Scheme Indentation
```bash
# All files in config/wezterm/colors/ using tabs instead of spaces
# Affects terminal appearance configuration
```
### 6. Update Linting Configuration
```bash
# Add shellcheck exclusions for submodules:
# - tools/antidote/
# - config/tmux/plugins/
# - config/vim/extra/fzf/
# - config/cheat/cheatsheets/tldr/
```
## LOW PRIORITY (Future Improvements)
### 7. Test Infrastructure
```bash
# Fix bats test PATH issues
# Tests pass but show rm command not found errors
```
### 8. Documentation Updates
```bash
# Add troubleshooting section to AGENTS.md
# Create shellcheck exclusion documentation
```
## Immediate Commands to Run
### Step 1: Auto-fix What's Possible
```bash
yarn fix:prettier # Fix 17 files
yarn fix:markdown # Attempt markdown fixes
```
### Step 2: Manual Fixes Required
- Add final newlines to all memory files
- Wrap long lines in Fish configuration files
- Convert tabs to spaces in Git configuration files
### Step 3: Verify Progress
```bash
yarn lint:ec # Check EditorConfig compliance
yarn lint:markdown # Check markdown issues
yarn lint:prettier # Check remaining prettier issues
```
## Success Criteria
`yarn lint` passes without errors
✅ All EditorConfig violations resolved
✅ Memory files properly formatted
✅ Fish configuration under line limits
✅ Git configuration uses consistent indentation

View File

@@ -0,0 +1,61 @@
# .dotfiles Project Overview
## Purpose
This is a comprehensive personal dotfiles repository for managing development
environment configurations across macOS systems. The project uses **Dotbot** as
the primary installation framework to manage symlinks and setup configurations.
## Key Features
- Automated configuration management using Dotbot
- Support for multiple development tools and applications
- Host-specific configurations in `/hosts/` directory
- Comprehensive testing and linting setup with pre-commit hooks
- Cross-shell compatibility (bash, zsh, fish)
- Large collection of custom utility scripts in `local/bin/`
- Git submodules for external tools (dotbot, antidote, tmux plugins)
- Environment-specific configurations (secrets management)
## Recent Notable Changes (from git status)
- New everforest color theme configurations added
- Multiple temporary fish configuration files present
- Updates to various configuration files (.commitlintrc.json, .eslintrc.json, etc.)
- New x-pr-comments script and documentation added
- Various tmux plugin updates
- Husky configuration relocated from base/ to config/husky/
## Tech Stack
- **Shell**: Bash (primary), with Fish and Zsh support
- **Configuration Manager**: Dotbot with plugins (asdf, brew, include, pip)
- **Package Manager**: Yarn 1.22.22 (Node.js), Homebrew (macOS), pipx (Python)
- **Testing**: Bats test framework, custom test-all.sh script
- **Linting**: MegaLinter, Prettier, ESLint, Markdownlint, ShellCheck, EditorConfig
- **Automation**: Pre-commit hooks, GitHub Actions, Renovate
## Project Structure Highlights
- `/config/` - Main configuration directory (74+ subdirectories)
- `/local/bin/` - Custom utility scripts (100+ scripts with documentation)
- `/hosts/` - Host-specific configurations
- `/tools/` - Git submodules for external tools
- `/base/` - Base configuration files
- `/secrets/` - Secret management configurations
- `/scripts/` - Installation and setup scripts
- `/.github/` - GitHub Actions workflows and configurations
## Target System
- **Platform**: Darwin (macOS) - Version 24.6.0
- **Architecture**: Universal (Intel/Apple Silicon via Homebrew)
- **Dependencies**: Git, Homebrew, Yarn, various CLI tools managed via asdf/aqua
## Development Environment
- Node.js managed via nvm/asdf
- Go version specified (.go-version)
- Python version specified (.python-version)
- Package management via Yarn with lockfile
- TypeScript support for configuration files

View File

@@ -0,0 +1,116 @@
# Project Structure
## Root Directory
```text
.dotfiles/
├── install # Main installation script (Dotbot runner)
├── install.conf.yaml # Dotbot configuration
├── package.json # Node.js dependencies for linting/testing (Yarn managed)
├── AGENTS.md # Project documentation and guidelines
├── test-all.sh # Bats test runner
├── add-submodules.sh # Git submodule management
└── .serena/ # Claude Code/Serena analysis cache (new)
```
## Main Directories
### `config/` (74+ subdirectories)
Configuration files for development tools and applications:
- `git/` - Git configuration with delta integration and everforest theme
- `nvim/` - Neovim configuration with Lua plugins
- `tmux/` - Tmux configuration with multiple plugins (dark-notify, window-name, etc.)
- `fish/` - Fish shell configuration with completions and functions
- `zsh/` - Zsh configuration with antidote plugin manager
- `fzf/` - Fuzzy finder configuration with everforest theme
- `wezterm/` - WezTerm terminal configuration
- `homebrew/` - Homebrew environment configuration
- `starship.toml` - Starship prompt configuration
- `shared.sh` - Cross-shell compatibility functions
- `aerospace/`, `amethyst/`, `yabai/`, `skhd/` - Window managers
- `direnv/`, `asdf/`, `aqua/` - Development environment tools
- `gpg-tui/`, `op/`, `gh/` - Security and CLI tools
- Theme configurations: everforest color schemes across multiple tools
### `base/`
Dotfiles that get symlinked to home directory with `.` prefix:
- Contains traditional dotfiles like `.bashrc`, `.zshrc`, etc.
- `plan` - Planning/note-taking configuration
- `shellcheckrc` - ShellCheck rules
### `local/`
- `bin/` - 100+ custom scripts with comprehensive documentation
- Homegrown utilities (dfm, git tools, backup scripts, etc.)
- Sourced utilities (from skx/sysadmin-util, mvdan/dotfiles)
- Each script has corresponding .md documentation
- Recent additions: x-pr-comments for GitHub PR analysis
- `share/fonts/` - JetBrains Mono font files
- `man/` - Manual pages
### `ssh/`
SSH configuration files (mode 0600/0700)
- `shared.d/` - Shared SSH configurations for specific hosts
### `tools/` (Git submodules)
External tools and Dotbot plugins:
- `dotbot/` - Dotbot installation framework
- `dotbot-*` - Dotbot plugins (asdf, brew, include, pip)
- `antidote/` - Zsh plugin manager
- Various tmux plugins (continuum, resurrect, yank, etc.)
### `hosts/`
Host-specific configurations:
- `air/`, `s/`, `v/` - Individual host configurations
- Applied after main configuration
### `secrets/`
Secret and credential management configuration
### `scripts/`
Installation and setup automation scripts
### `.github/`
- GitHub Actions workflows
- Renovate configuration
- Issue templates and documentation
### Development Configuration Files
- `.editorconfig` - Editor configuration rules
- `.prettierrc.js` - Prettier formatting rules
- `.eslintrc.json` - ESLint linting rules
- `.commitlintrc.json` - Commit message linting
- `.shellcheckrc` - ShellCheck configuration
- `.mega-linter.yml` - MegaLinter configuration
- `.luarc.json` - Lua language server configuration
- `.nvmrc`, `.go-version`, `.python-version` - Version management
- Various ignore files (.gitignore, .prettierignore, .yamlignore, etc.)
## Testing Infrastructure
- `tests/` - Bats test files
- `test-all.sh` - Main test runner
- Pre-commit hooks for automated testing
- GitHub Actions for CI/CD
## Recent Structural Changes
- Husky configuration moved from `base/huskyrc` to `config/husky/init.sh`
- Addition of everforest theme configurations across multiple tools
- New .serena directory for AI analysis caching
- Multiple temporary fish configuration files (everforest themes)
- Enhanced git configuration with delta and everforest theming

View File

@@ -0,0 +1,62 @@
# ShellCheck Issues Analysis
## Critical Shell Script Problems
### Missing Shebangs (SC2148)
Multiple shell scripts missing proper shebang lines:
- `tools/antidote/tests/` - Test scripts
- `config/vim/*/test/lib/common.sh` - FZF test libraries
- `config/tmux/plugins/*/scripts/helpers.sh` - Plugin helper scripts
- Various submodule scripts
### Syntax Errors (SC1036, SC1088, SC1073)
- `config/vim/fzf/test/lib/common.sh` - Invalid ERB template syntax
- `config/cheat/cheatsheets/tldr/` - Markdown files incorrectly parsed as shell
- `tmux-sessionist/scripts/list_sessions.sh` - Brace parsing errors
### Variable Assignment Issues (SC1007, SC2155)
- `config/vim/extra/fzf/test/lib/common.sh` - Incorrect empty variable assignments
- Multiple tmux plugin scripts - Declare and assign should be separate
### Quoting Problems (SC2086, SC2006)
- Unquoted variable expansions in tmux plugin scripts
- Legacy backtick usage instead of $(...) syntax
- Missing quotes around variable expansions
## Third-Party Code Issues
### Submodule Problems
Most shellcheck errors are in **third-party submodules**:
- `tools/antidote/` - Zsh plugin manager
- `config/tmux/plugins/` - Tmux plugins
- `config/vim/extra/fzf/` - FZF integration
- `config/cheat/cheatsheets/tldr/` - Cheat sheet collection
### Recommendation
- These should be **excluded from shellcheck** via configuration
- Focus linting only on **project-owned scripts**
- Add shellcheck ignore patterns for submodule directories
## Project-Owned Script Issues
### Main Scripts Status
- `install` - ✅ Clean (no shellcheck errors)
- `test-all.sh` - ✅ Clean
- `add-submodules.sh` - ✅ Clean
- `config/shared.sh` - ✅ Clean
- Scripts in `local/bin/` - ✅ Mostly clean
### Minor Issues Found
- Some scripts could benefit from stricter quoting
- Consistent shebang usage across all scripts
- Consider adding `set -euo pipefail` to more scripts

View File

@@ -0,0 +1,121 @@
# Essential Commands for .dotfiles Development
## Installation & Setup
```bash
# Initial setup - install linting tools and dependencies
yarn install
# Install/update all dotfiles configurations
./install
# Update git submodules (multiple approaches)
git submodule update --remote --merge
git submodule update --init --recursive --force
bash add-submodules.sh
```
## Development Commands
```bash
# Linting (run all linters - ALWAYS fix all issues)
yarn lint
# Individual linting commands
yarn lint:markdown # Markdownlint
yarn lint:prettier # Prettier check
yarn lint:ec # EditorConfig checker
# Auto-fixing (use these BEFORE manual linting)
yarn fix # Fix all format issues
yarn fix:markdown # Fix markdown formatting
yarn fix:prettier # Fix prettier formatting
# Testing
yarn test # Run all Bats tests
bash test-all.sh # Alternative test runner
```
## Pre-commit Hooks (Comprehensive)
Current pre-commit configuration includes:
- **Security**: detect-aws-credentials, detect-private-key
- **File integrity**: check-case-conflict, check-merge-conflict, check-symlinks
- **Shell scripts**: shellcheck, shfmt (formatting)
- **YAML/JSON**: yamllint, check-yaml, check-toml, pretty-format-json
- **Markdown**: markdownlint with auto-fix
- **Lua**: stylua formatting for Neovim configs
- **Fish**: fish_syntax, fish_indent for shell configs
- **GitHub Actions**: actionlint validation
- **Renovate**: renovate-config-validator
- **General**: trailing-whitespace, end-of-file-fixer, mixed-line-ending
```bash
# Run pre-commit manually
pre-commit run --all-files
```
## Version Management
```bash
# Check current versions
node --version # Managed by nvm (.nvmrc: v20.18.1)
go version # Managed by asdf (.go-version)
python --version # Managed by asdf (.python-version)
```
## System Utilities (Darwin-specific)
```bash
# Modern CLI tools available
ls # aliased to eza with icons and git info
grep # aliased to grep --color
fd pattern # modern find alternative
rg pattern # ripgrep for text search
bat file # modern cat with syntax highlighting
```
## Project-specific Scripts (100+ available)
```bash
# Dotfiles management
bash local/bin/dfm install all
# Git utilities
git-dirty # Check for dirty git repositories
git-fsck-dirs # Run fsck on git directories
git-update-dirs # Update multiple git directories
# Development utilities
x-pr-comments <pr> # Analyze GitHub PR comments (NEW)
x-set-php-aliases # Generate PHP version aliases
x-env-list # List environment variables
x-open-ports # Check open network ports
# Backup utilities
x-backup-folder # Backup directories
x-backup-mysql-with-prefix # MySQL backup with prefix
```
## Configuration Management
```bash
# Load shell configurations
source config/shared.sh # Cross-shell compatibility functions
source x-set-php-aliases # PHP version management
# Host-specific configurations
# Automatically applied: hosts/{hostname}/
```
## Quality Assurance (CRITICAL)
**All linting errors are BLOCKING and must be fixed:**
- EditorConfig violations are considered blocking errors
- ShellCheck warnings must be addressed
- Prettier formatting must be consistent
- Markdownlint rules must be followed
- NEVER use --no-verify with git operations
- ALWAYS run autofixers before manual intervention

View File

@@ -0,0 +1,115 @@
# Task Completion Checklist
When completing any development task in this dotfiles repository, follow this
checklist to ensure compliance with project standards.
## Required Steps (BLOCKING)
### 1. Code Quality Checks
```bash
# Run all linting tools - MUST PASS with zero errors
yarn lint
# Individual checks if needed:
yarn lint:markdown # Markdownlint validation
yarn lint:prettier # Prettier formatting check
yarn lint:ec # EditorConfig compliance verification
```
### 2. Shell Script Validation (if applicable)
```bash
# All shell scripts must pass shellcheck without warnings
find . -path ./node_modules -prune -o -name '*.sh' -print0 | xargs -0 shellcheck
# For individual scripts:
shellcheck path/to/script.sh
```
### 3. Testing Infrastructure
```bash
# Run all tests - MUST PASS completely
yarn test
# OR alternative runner
bash test-all.sh
# For specific test categories:
# Bats tests in tests/ directory
# Individual script functionality tests
```
### 4. EditorConfig Compliance (CRITICAL)
- **BLOCKING REQUIREMENT**: EditorConfig violations prevent completion
- All code must follow `.editorconfig` rules exactly:
- UTF-8 charset
- LF line endings
- Final newline required
- Trailing whitespace removal
- Language-specific indentation (2-space default, 4-space for Fish)
- Use autofixers before attempting manual fixes
- Never modify linting configuration to bypass errors
## Auto-fixing Protocol
```bash
# ALWAYS run auto-fixers first, in this order:
yarn fix # Fix all auto-fixable issues
yarn fix:markdown # Fix markdown formatting violations
yarn fix:prettier # Fix code formatting issues
# Verify fixes applied correctly:
yarn lint # Should show reduced error count
```
## Pre-commit Hook Integration
Current pre-commit configuration enforces:
- Security checks (credentials, private keys)
- Shell script validation (shellcheck, shfmt)
- Markdown formatting (markdownlint with auto-fix)
- YAML/JSON validation and formatting
- Lua formatting (stylua for Neovim configs)
- Fish shell syntax validation
- GitHub Actions validation (actionlint)
- Renovate configuration validation
## Memory File Maintenance
When updating memory files:
1. Follow markdown best practices (blank lines around headings/lists)
2. Specify language for fenced code blocks
3. Ensure final newline exists
4. Respect line length limits (120 chars for markdown)
5. Use proper heading hierarchy
## Critical Success Criteria
✅ **REQUIRED FOR TASK COMPLETION:**
- `yarn lint` exits with code 0 (no errors)
- `yarn test` passes all test suites
- EditorConfig compliance verified
- No trailing whitespace or missing final newlines
- Shell scripts have proper shebangs and pass shellcheck
- All temporary/cache files cleaned up
❌ **BLOCKING ISSUES:**
- Any linting errors or warnings
- EditorConfig violations of any kind
- Test failures or incomplete test coverage
- Use of `--no-verify` flag with git operations
- Modified linting configurations to bypass errors
## Quality Assurance Notes
- **Use `which command`** to get full paths in scripts
- **Prefer modern tools**: `rg` over `grep`, `fd` over `find`, `bat` over `cat`
- **Test cross-shell compatibility**: bash, zsh, fish
- **Validate host-specific configurations** don't break general setup
- **Document any new utilities** in `local/bin/README.md`

90
.serena/project.yml Normal file
View File

@@ -0,0 +1,90 @@
# language of the project (csharp, python, rust, java, typescript, go, cpp, or ruby)
# * For C, use cpp
# * For JavaScript, use typescript
# Special requirements:
# * csharp: Requires the presence of a .sln file in the project folder.
language: bash
# whether to use the project's gitignore file to ignore files
# Added on 2025-04-07
ignore_all_files_in_gitignore: true
# list of additional paths to ignore
# same syntax as gitignore, so you can use * and **
# Was previously called `ignored_dirs`, please update your config if you are using that.
# Added (renamed) on 2025-04-07
ignored_paths:
- '*.swp'
- '*.tmp'
- '*.tmp.*'
- '.DS_Store'
- '.git/**'
- /config/cheat/cheatsheets/community/**
- /config/cheat/cheatsheets/pure-bash-bible/**
- /config/cheat/cheatsheets/tldr/**
- /config/fish/cheatsheets/community/**
- /config/fzf/**
- /config/nvim/snippets/**
- /config/nvim/spell/**
- /config/op/plugins/**
- /config/tmux/plugins/**
- /config/vim/extra/**
- /config/zsh/completions/**
- /config/zsh/plugins/**
- /local/man/fzf
- /local/share/fonts
- /tools/antidote
- /tools/dotbot
- /tools/dotbot-*/**
- node_modules/**
# whether the project is in read-only mode
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
# Added on 2025-04-18
read_only: false
# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
# Below is the complete list of tools for convenience.
# To make sure you have the latest list of tools, and to view their descriptions,
# execute `uv run scripts/print_tool_overview.py`.
#
# * `activate_project`: Activates a project by name.
# * `check_onboarding_performed`: Checks whether project onboarding was already performed.
# * `create_text_file`: Creates/overwrites a file in the project directory.
# * `delete_lines`: Deletes a range of lines within a file.
# * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
# * `execute_shell_command`: Executes a shell command.
# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
# * `initial_instructions`: Gets the initial instructions for the current project.
# Should only be used in settings where the system prompt cannot be set,
# e.g. in clients you have no control over, like Claude Desktop.
# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
# * `insert_at_line`: Inserts content at a given line in a file.
# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
# * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
# * `list_memories`: Lists memories in Serena's project-specific memory store.
# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
# * `read_file`: Reads a file within the project directory.
# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
# * `remove_project`: Removes a project from the Serena configuration.
# * `replace_lines`: Replaces a range of lines within a file with new content.
# * `replace_symbol_body`: Replaces the full definition of a symbol.
# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
# * `search_for_pattern`: Performs a search for a pattern in the project.
# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
# * `switch_modes`: Activates modes by providing a list of their names
# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
excluded_tools: []
# initial prompt for the project. It will always be given to the LLM upon activating the project
# (contrary to the memories, which are loaded on demand).
initial_prompt: ''
project_name: '.dotfiles'

View File

@@ -14,4 +14,3 @@ local/bin/antigen.zsh
local/bin/asdf local/bin/asdf
tools/antidote/* tools/antidote/*
tools/dotbot* tools/dotbot*

View File

@@ -41,7 +41,7 @@ git submodule add --name tmux/tmux-yank \
git submodule add --name tmux/tmux-current-pane-hostname \ git submodule add --name tmux/tmux-current-pane-hostname \
-f https://github.com/soyuka/tmux-current-pane-hostname.git config/tmux/plugins/tmux-current-pane-hostname -f https://github.com/soyuka/tmux-current-pane-hostname.git config/tmux/plugins/tmux-current-pane-hostname
git submodule add --name tmux/tmux-dark-notify \ git submodule add --name tmux/tmux-dark-notify \
-f https://github.com/erikw/tmux-dark-notify.git config/tmux/plugins/tmux-dark-notify -f https://github.com/ivuorinen/tmux-dark-notify.git config/tmux/plugins/tmux-dark-notify
# Takes submodules and sets them to ignore all changes # Takes submodules and sets them to ignore all changes
for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do

View File

@@ -12,5 +12,3 @@
~-.__| /_ - ~ ^| /- _ `..-' f: f: ~-.__| /_ - ~ ^| /- _ `..-' f: f:
| / | / ~-. `-. _||_||_ | / | / ~-. `-. _||_||_
|_____| |_____| ~ - . _ _ _ _ _> |_____| |_____| ~ - . _ _ _ _ _>

View File

@@ -4,4 +4,3 @@
# paths in source statements (since 0.8.0). # paths in source statements (since 0.8.0).
external-sources=true external-sources=true
includeAllWorkspaceSymbols=true includeAllWorkspaceSymbols=true

View File

@@ -69,5 +69,3 @@ Available format modifiers are:
'. For decimal conversions, applies the thousands grouping '. For decimal conversions, applies the thousands grouping
separator to the integer portion of the output according separator to the integer portion of the output according
to the current LC_NUMERIC file. to the current LC_NUMERIC file.

View File

@@ -56,11 +56,11 @@ TERM xterm*
RESET 0 # reset to "normal" color RESET 0 # reset to "normal" color
DIR 01;34 # directory DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
# numerical value, the color is as for the file pointed to.) # numerical value, the color is as for the file pointed to.)
MULTIHARDLINK 00 # regular file with more than one link MULTIHARDLINK 00 # regular file with more than one link
FIFO 40;33 # pipe FIFO 40;33 # pipe
SOCK 01;35 # socket SOCK 01;35 # socket
DOOR 01;35 # door DOOR 01;35 # door
BLK 40;33;01 # block device driver BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ... ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...

View File

@@ -10,4 +10,3 @@ prefix = [
exact = [ exact = [
"~/.dotfiles/.envrc" "~/.dotfiles/.envrc"
] ]

View File

@@ -1,5 +1,6 @@
### Do not edit. This was autogenerated by 'asdf direnv setup' ### ### Do not edit. This was autogenerated by 'asdf direnv setup' ###
# shellcheck shell=bash # shellcheck shell=bash
use_asdf() { use_asdf()
{
source_env "$(asdf direnv envrc "$@")" source_env "$(asdf direnv envrc "$@")"
} }

View File

@@ -6,9 +6,12 @@ alias vim='vim -u "$XDG_CONFIG_HOME/vim/vimrc"'
if type -q eza >/dev/null if type -q eza >/dev/null
function eza_git -d "Use eza and its git options if in a git repo" function eza_git -d "Use eza and its git options if in a git repo"
if git rev-parse --is-inside-work-tree &>/dev/null if git rev-parse --is-inside-work-tree &>/dev/null
eza --group-directories-first --icons=always --smart-group --git $argv eza --group-directories-first --icons=always \
--smart-group --git $argv
else else
eza --group-directories-first --icons=always --smart-group $argv eza --group-directories-first \
--icons=always \
--smart-group $argv
end end
end end
@@ -30,7 +33,9 @@ if type -q eza >/dev/null
end end
# Edit fish alias file # Edit fish alias file
function .a --wraps='nvim ~/.dotfiles/config/fish/alias.fish' --description 'edit alias.fish' function .a \
--wraps='nvim ~/.dotfiles/config/fish/alias.fish' \
--description 'edit alias.fish'
nvim ~/.dotfiles/config/fish/alias.fish $argv nvim ~/.dotfiles/config/fish/alias.fish $argv
end end
@@ -55,7 +60,9 @@ function .p --wraps='cd ~/Code/ivuorinen' --description 'cd ~/Code/ivuorinen'
end end
# shortcut to commit with a message # shortcut to commit with a message
function commit --wraps='git commit -a -m "chore: automated commit"' --description 'commit shortcut' function commit \
--wraps='git commit -a -m "chore: automated commit"' \
--description 'commit shortcut'
set -l commitMessage $argv set -l commitMessage $argv
git add . git add .
@@ -71,7 +78,8 @@ function commit --wraps='git commit -a -m "chore: automated commit"' --descripti
git commit -a -m "$commitMessage" git commit -a -m "$commitMessage"
end end
function configure_tide --description 'Configure tide with the lean style and my preferences' function configure_tide \
--description 'Configure tide with the lean style and my preferences'
tide configure \ tide configure \
--auto \ --auto \
--style=Lean \ --style=Lean \

View File

@@ -122,4 +122,3 @@ complete -c aqua -n '__fish_seen_subcommand_from root-dir' -f -l help -s h -d 's
complete -r -c aqua -n '__fish_aqua_no_subcommand' -a 'root-dir' -d 'Output the aqua root directory (AQUA_ROOT_DIR)' complete -r -c aqua -n '__fish_aqua_no_subcommand' -a 'root-dir' -d 'Output the aqua root directory (AQUA_ROOT_DIR)'
complete -c aqua -n '__fish_seen_subcommand_from help h' -f -l help -s h -d 'show help' complete -c aqua -n '__fish_seen_subcommand_from help h' -f -l help -s h -d 'show help'
complete -r -c aqua -n '__fish_aqua_no_subcommand' -a 'help h' -d 'Shows a list of commands or help for one command' complete -r -c aqua -n '__fish_aqua_no_subcommand' -a 'help h' -d 'Shows a list of commands or help for one command'

View File

@@ -173,4 +173,3 @@ complete -c git-profile -e
# The call to __git_profile_prepare_completions will setup __git_profile_comp_results # The call to __git_profile_prepare_completions will setup __git_profile_comp_results
# which provides the program's completion choices. # which provides the program's completion choices.
complete -c git-profile -n '__git_profile_prepare_completions' -f -a '$__git_profile_comp_results' complete -c git-profile -n '__git_profile_prepare_completions' -f -a '$__git_profile_comp_results'

View File

@@ -120,4 +120,3 @@ complete -c phpenv -f \
# Complete help options # Complete help options
complete -c phpenv -f -s h -l help -d "Show help" complete -c phpenv -f -s h -l help -d "Show help"

View File

@@ -35,4 +35,3 @@ if test -n "$PHPENV_GLOBAL_VERSION"; and not set -q PHPENV_INITIALIZED
end end
set -g PHPENV_INITIALIZED true set -g PHPENV_INITIALIZED true
end end

View File

@@ -48,19 +48,23 @@ test -z "$NVIM_UNDO_PATH" && set -x NVIM_UNDO_PATH "$NVIM_STATE/undo"
# Ansible configuration # Ansible configuration
set -q ANSIBLE_HOME; or set -x ANSIBLE_HOME "$XDG_CONFIG_HOME/ansible" set -q ANSIBLE_HOME; or set -x ANSIBLE_HOME "$XDG_CONFIG_HOME/ansible"
set -q ANSIBLE_CONFIG; or set -x ANSIBLE_CONFIG "$ANSIBLE_HOME/ansible.cfg" set -q ANSIBLE_CONFIG; or set -x ANSIBLE_CONFIG "$ANSIBLE_HOME/ansible.cfg"
set -q ANSIBLE_GALAXY_CACHE_DIR; or set -x ANSIBLE_GALAXY_CACHE_DIR "$XDG_CACHE_HOME/ansible/galaxy_cache" set -q ANSIBLE_GALAXY_CACHE_DIR; or \
set -x ANSIBLE_GALAXY_CACHE_DIR "$XDG_CACHE_HOME/ansible/galaxy_cache"
x-dc "$ANSIBLE_HOME" x-dc "$ANSIBLE_HOME"
x-dc "$ANSIBLE_GALAXY_CACHE_DIR" x-dc "$ANSIBLE_GALAXY_CACHE_DIR"
# AWS configuration # AWS configuration
set -q AWS_CONFIG_FILE; or set -x AWS_CONFIG_FILE "$XDG_STATE_HOME/aws/config" set -q AWS_CONFIG_FILE; or set -x AWS_CONFIG_FILE "$XDG_STATE_HOME/aws/config"
set -q AWS_SHARED_CREDENTIALS_FILE; or set -x AWS_SHARED_CREDENTIALS_FILE "$XDG_STATE_HOME/aws/credentials" set -q AWS_SHARED_CREDENTIALS_FILE; or \
set -q AWS_SESSION_TOKEN; or set -x AWS_SESSION_TOKEN "$XDG_STATE_HOME/aws/session_token" set -x AWS_SHARED_CREDENTIALS_FILE "$XDG_STATE_HOME/aws/credentials"
set -q AWS_SESSION_TOKEN; or \
set -x AWS_SESSION_TOKEN "$XDG_STATE_HOME/aws/session_token"
set -q AWS_DATA_PATH; or set -x AWS_DATA_PATH "$XDG_DATA_HOME/aws" set -q AWS_DATA_PATH; or set -x AWS_DATA_PATH "$XDG_DATA_HOME/aws"
set -q AWS_DEFAULT_OUTPUT; or set -x AWS_DEFAULT_OUTPUT table set -q AWS_DEFAULT_OUTPUT; or set -x AWS_DEFAULT_OUTPUT table
set -q AWS_CONFIGURE_KEYS; or set -x AWS_CONFIGURE_KEYS true set -q AWS_CONFIGURE_KEYS; or set -x AWS_CONFIGURE_KEYS true
set -q AWS_CONFIGURE_SESSION; or set -x AWS_CONFIGURE_SESSION true set -q AWS_CONFIGURE_SESSION; or set -x AWS_CONFIGURE_SESSION true
set -q AWS_CONFIGURE_SESSION_DURATION; or set -x AWS_CONFIGURE_SESSION_DURATION 7200 set -q AWS_CONFIGURE_SESSION_DURATION; or \
set -x AWS_CONFIGURE_SESSION_DURATION 7200
set -q AWS_CONFIGURE_SESSION_MFA; or set -x AWS_CONFIGURE_SESSION_MFA true set -q AWS_CONFIGURE_SESSION_MFA; or set -x AWS_CONFIGURE_SESSION_MFA true
set -q AWS_CONFIGURE_PROFILE; or set -x AWS_CONFIGURE_PROFILE true set -q AWS_CONFIGURE_PROFILE; or set -x AWS_CONFIGURE_PROFILE true
set -q AWS_CONFIGURE_PROMPT; or set -x AWS_CONFIGURE_PROMPT true set -q AWS_CONFIGURE_PROMPT; or set -x AWS_CONFIGURE_PROMPT true
@@ -70,7 +74,8 @@ set -q AWS_CONFIGURE_PROMPT_DEFAULT; or set -x AWS_CONFIGURE_PROMPT_DEFAULT true
set -q HOMEBREW_NO_ANALYTICS; or set -x HOMEBREW_NO_ANALYTICS true set -q HOMEBREW_NO_ANALYTICS; or set -x HOMEBREW_NO_ANALYTICS true
set -q HOMEBREW_NO_ENV_HINTS; or set -x HOMEBREW_NO_ENV_HINTS true set -q HOMEBREW_NO_ENV_HINTS; or set -x HOMEBREW_NO_ENV_HINTS true
set -q HOMEBREW_BUNDLE_MAS_SKIP; or set -x HOMEBREW_BUNDLE_MAS_SKIP true set -q HOMEBREW_BUNDLE_MAS_SKIP; or set -x HOMEBREW_BUNDLE_MAS_SKIP true
set -q HOMEBREW_BUNDLE_FILE; or set -x HOMEBREW_BUNDLE_FILE "$XDG_CONFIG_HOME/homebrew/Brewfile" set -q HOMEBREW_BUNDLE_FILE; or \
set -x HOMEBREW_BUNDLE_FILE "$XDG_CONFIG_HOME/homebrew/Brewfile"
# Composer configuration # Composer configuration
set -q COMPOSER_HOME; or set -x COMPOSER_HOME "$XDG_STATE_HOME/composer" set -q COMPOSER_HOME; or set -x COMPOSER_HOME "$XDG_STATE_HOME/composer"
@@ -96,7 +101,9 @@ set -q FNM_RESOLVE_ENGINES; or set -x FNM_RESOLVE_ENGINES true
# fzf configuration # fzf configuration
set -q FZF_BASE; or set -x FZF_BASE "$XDG_CONFIG_HOME/fzf" set -q FZF_BASE; or set -x FZF_BASE "$XDG_CONFIG_HOME/fzf"
set -q FZF_DEFAULT_OPTS; or set -x FZF_DEFAULT_OPTS '--height 40% --tmux bottom,70% --layout reverse --border top' set -q FZF_DEFAULT_OPTS; or \
set -x FZF_DEFAULT_OPTS \
'--height 40% --tmux bottom,40% --layout reverse --border top'
# GnuPG configuration # GnuPG configuration
set -q GNUPGHOME; or set -x GNUPGHOME "$XDG_DATA_HOME/gnupg" set -q GNUPGHOME; or set -x GNUPGHOME "$XDG_DATA_HOME/gnupg"
@@ -106,7 +113,8 @@ set -q GNUPGHOME; or set -x GNUPGHOME "$XDG_DATA_HOME/gnupg"
set -q GOBIN; or set -x GOBIN "$XDG_BIN_HOME" set -q GOBIN; or set -x GOBIN "$XDG_BIN_HOME"
set -q GOENV_ROOT; or set -x GOENV_ROOT "$XDG_DATA_HOME/goenv" set -q GOENV_ROOT; or set -x GOENV_ROOT "$XDG_DATA_HOME/goenv"
set -q GOENV_RC_FILE; or set -x GOENV_RC_FILE "$XDG_CONFIG_HOME/goenv/goenvrc.fish" set -q GOENV_RC_FILE; or \
set -x GOENV_RC_FILE "$XDG_CONFIG_HOME/goenv/goenvrc.fish"
# 1Password configuration # 1Password configuration
set -q OP_CACHE; or set -x OP_CACHE "$XDG_STATE_HOME/1password" set -q OP_CACHE; or set -x OP_CACHE "$XDG_STATE_HOME/1password"
@@ -134,19 +142,23 @@ set -q SCREENRC; or set -x SCREENRC "$XDG_CONFIG_HOME/misc/screenrc"
# Sonarlint configuration # Sonarlint configuration
set -q SONARLINT_HOME; or set -x SONARLINT_HOME "$XDG_DATA_HOME/sonarlint" set -q SONARLINT_HOME; or set -x SONARLINT_HOME "$XDG_DATA_HOME/sonarlint"
set -q SONARLINT_BIN; or set -x SONARLINT_BIN "$XDG_BIN_HOME" set -q SONARLINT_BIN; or set -x SONARLINT_BIN "$XDG_BIN_HOME"
set -q SONARLINT_USER_HOME; or set -x SONARLINT_USER_HOME "$XDG_DATA_HOME/sonarlint" set -q SONARLINT_USER_HOME; or \
set -x SONARLINT_USER_HOME "$XDG_DATA_HOME/sonarlint"
# Terraform configuration # Terraform configuration
set -q TF_DATA_DIR; or set -x TF_DATA_DIR "$XDG_STATE_HOME/terraform" set -q TF_DATA_DIR; or set -x TF_DATA_DIR "$XDG_STATE_HOME/terraform"
set -q TF_CLI_CONFIG_FILE; or set -x TF_CLI_CONFIG_FILE "$XDG_CONFIG_HOME/terraform/terraformrc" set -q TF_CLI_CONFIG_FILE; or \
set -q TF_PLUGIN_CACHE_DIR; or set -x TF_PLUGIN_CACHE_DIR "$XDG_CACHE_HOME/terraform/plugin-cache" set -x TF_CLI_CONFIG_FILE "$XDG_CONFIG_HOME/terraform/terraformrc"
set -q TF_PLUGIN_CACHE_DIR; or \
set -x TF_PLUGIN_CACHE_DIR "$XDG_CACHE_HOME/terraform/plugin-cache"
# tmux configuration # tmux configuration
set -q TMUX_TMPDIR; or set -x TMUX_TMPDIR "$XDG_STATE_HOME/tmux" set -q TMUX_TMPDIR; or set -x TMUX_TMPDIR "$XDG_STATE_HOME/tmux"
set -q TMUX_CONF_DIR; or set -x TMUX_CONF_DIR "$XDG_CONFIG_HOME/tmux" set -q TMUX_CONF_DIR; or set -x TMUX_CONF_DIR "$XDG_CONFIG_HOME/tmux"
set -q TMUX_PLUGINS; or set -x TMUX_PLUGINS "$TMUX_CONF_DIR/plugins" set -q TMUX_PLUGINS; or set -x TMUX_PLUGINS "$TMUX_CONF_DIR/plugins"
set -q TMUX_CONF; or set -x TMUX_CONF "$TMUX_CONF_DIR/tmux.conf" set -q TMUX_CONF; or set -x TMUX_CONF "$TMUX_CONF_DIR/tmux.conf"
set -q TMUX_PLUGIN_MANAGER_PATH; or set -x TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGINS" set -q TMUX_PLUGIN_MANAGER_PATH; or \
set -x TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGINS"
# Source tmux theme activation script for Fish shell # Source tmux theme activation script for Fish shell
if test -f "$DOTFILES/config/tmux/theme-activate.fish" if test -f "$DOTFILES/config/tmux/theme-activate.fish"
@@ -154,7 +166,8 @@ if test -f "$DOTFILES/config/tmux/theme-activate.fish"
end end
# tms configuration # tms configuration
set -q TMS_CONFIG_FILE; or set -x TMS_CONFIG_FILE "$XDG_CONFIG_HOME/tms/config.toml" set -q TMS_CONFIG_FILE; or \
set -x TMS_CONFIG_FILE "$XDG_CONFIG_HOME/tms/config.toml"
# wakatime configuration # wakatime configuration
set -q WAKATIME_HOME; or set -x WAKATIME_HOME "$XDG_STATE_HOME/wakatime" set -q WAKATIME_HOME; or set -x WAKATIME_HOME "$XDG_STATE_HOME/wakatime"
@@ -166,7 +179,8 @@ set -q _ZO_EXCLUDE_DIRS; or set -x _ZO_EXCLUDE_DIRS "$XDG_DATA_HOME"
# Miscellaneous configuration # Miscellaneous configuration
set -q CHEAT_USE_FZF; or set -x CHEAT_USE_FZF true set -q CHEAT_USE_FZF; or set -x CHEAT_USE_FZF true
set -q SQLITE_HISTORY; or set -x SQLITE_HISTORY "$XDG_CACHE_HOME/sqlite/sqlite_history" set -q SQLITE_HISTORY; or \
set -x SQLITE_HISTORY "$XDG_CACHE_HOME/sqlite/sqlite_history"
# Source additional configuration files if they exist # Source additional configuration files if they exist
if test -f "$DOTFILES/config/fish/exports-secret.fish" if test -f "$DOTFILES/config/fish/exports-secret.fish"
@@ -186,6 +200,8 @@ set -gx tide_prompt_transient_enabled true
set -gx tide_prompt_add_newline_before true set -gx tide_prompt_add_newline_before true
set -gx tide_prompt_min_cols 34 set -gx tide_prompt_min_cols 34
set -gx tide_prompt_pad_items false set -gx tide_prompt_pad_items false
set -gx tide_left_prompt_items context pwd git node python rustc java php pulumi ruby go gcloud newline character set -gx tide_left_prompt_items context pwd git node python rustc java php \
pulumi ruby go gcloud kubectl distrobox toolbox terraform aws nix_shell \
crystal elixir zig newline character
set -gx tide_right_prompt_items status jobs direnv set -gx tide_right_prompt_items status jobs direnv
set -gx tide_context_hostname_parts 1 set -gx tide_context_hostname_parts 1

View File

@@ -6,4 +6,3 @@ function _puffer_fish_expand_bang
commandline -i '!' commandline -i '!'
end end
end end

View File

@@ -1,4 +1,3 @@
function nvm function nvm
bass source $NVM_DIR/nvm.sh --no-use ';' nvm $argv bass source $NVM_DIR/nvm.sh --no-use ';' nvm $argv
end end

View File

@@ -56,7 +56,7 @@ function ___paths_plugin_handle_found_item -a testName outFlags
end end
set nameOut (string trim -- "$nameOut") set nameOut (string trim -- "$nameOut")
# do the tick # do the tick
if set -q _flag_k # is not color if set -q _flag_k # is not color
set nameOut "- $nameOut" set nameOut "- $nameOut"
else # is color else # is color
@@ -155,7 +155,7 @@ function paths --description "Reveal the executable matches in shell paths or fi
end end
end end
# check # check
set -l built (type --type $input 12&>/dev/null) set -l built (type --type $input 12&>/dev/null)
if test -n "$built" if test -n "$built"
and test "$built" = 'builtin' and test "$built" = 'builtin'

View File

@@ -1075,4 +1075,3 @@ function __phpenv_validate_extensions -a phpenv_extensions_string
return 1 return 1
end end
end end

View File

@@ -11,63 +11,63 @@
if [[ $- =~ i ]]; then if [[ $- =~ i ]]; then
# To use custom commands instead of find, override _fzf_compgen_{path,dir} # To use custom commands instead of find, override _fzf_compgen_{path,dir}
if ! declare -f _fzf_compgen_path > /dev/null; then if ! declare -f _fzf_compgen_path >/dev/null; then
_fzf_compgen_path() { _fzf_compgen_path() {
echo "$1" echo "$1"
command find -L "$1" \ command find -L "$1" \
-name .git -prune -o -name .hg -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \ -name .git -prune -o -name .hg -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \
-a -not -path "$1" -print 2> /dev/null | sed 's@^\./@@' -a -not -path "$1" -print 2>/dev/null | sed 's@^\./@@'
} }
fi
if ! declare -f _fzf_compgen_dir > /dev/null; then
_fzf_compgen_dir() {
command find -L "$1" \
-name .git -prune -o -name .hg -prune -o -name .svn -prune -o -type d \
-a -not -path "$1" -print 2> /dev/null | sed 's@^\./@@'
}
fi
###########################################################
# To redraw line after fzf closes (printf '\e[5n')
bind '"\e[0n": redraw-current-line' 2> /dev/null
__fzf_comprun() {
if [[ "$(type -t _fzf_comprun 2>&1)" = function ]]; then
_fzf_comprun "$@"
elif [[ -n "${TMUX_PANE-}" ]] && { [[ "${FZF_TMUX:-0}" != 0 ]] || [[ -n "${FZF_TMUX_OPTS-}" ]]; }; then
shift
fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- "$@"
else
shift
fzf "$@"
fi fi
}
__fzf_orig_completion() { if ! declare -f _fzf_compgen_dir >/dev/null; then
local l comp f cmd _fzf_compgen_dir() {
while read -r l; do command find -L "$1" \
if [[ "$l" =~ ^(.*\ -F)\ *([^ ]*).*\ ([^ ]*)$ ]]; then -name .git -prune -o -name .hg -prune -o -name .svn -prune -o -type d \
comp="${BASH_REMATCH[1]}" -a -not -path "$1" -print 2>/dev/null | sed 's@^\./@@'
f="${BASH_REMATCH[2]}" }
cmd="${BASH_REMATCH[3]}" fi
[[ "$f" = _fzf_* ]] && continue
printf -v "_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}" "%s" "${comp} %s ${cmd} #${f}" ###########################################################
if [[ "$l" = *" -o nospace "* ]] && [[ ! "${__fzf_nospace_commands-}" = *" $cmd "* ]]; then
__fzf_nospace_commands="${__fzf_nospace_commands-} $cmd " # To redraw line after fzf closes (printf '\e[5n')
fi bind '"\e[0n": redraw-current-line' 2>/dev/null
__fzf_comprun() {
if [[ "$(type -t _fzf_comprun 2>&1)" = function ]]; then
_fzf_comprun "$@"
elif [[ -n "${TMUX_PANE-}" ]] && { [[ "${FZF_TMUX:-0}" != 0 ]] || [[ -n "${FZF_TMUX_OPTS-}" ]]; }; then
shift
fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- "$@"
else
shift
fzf "$@"
fi fi
done }
}
_fzf_opts_completion() { __fzf_orig_completion() {
local cur prev opts local l comp f cmd
COMPREPLY=() while read -r l; do
cur="${COMP_WORDS[COMP_CWORD]}" if [[ "$l" =~ ^(.*\ -F)\ *([^ ]*).*\ ([^ ]*)$ ]]; then
prev="${COMP_WORDS[COMP_CWORD-1]}" comp="${BASH_REMATCH[1]}"
opts=" f="${BASH_REMATCH[2]}"
cmd="${BASH_REMATCH[3]}"
[[ "$f" = _fzf_* ]] && continue
printf -v "_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}" "%s" "${comp} %s ${cmd} #${f}"
if [[ "$l" = *" -o nospace "* ]] && [[ ! "${__fzf_nospace_commands-}" = *" $cmd "* ]]; then
__fzf_nospace_commands="${__fzf_nospace_commands-} $cmd "
fi
fi
done
}
_fzf_opts_completion() {
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD - 1]}"
opts="
-x --extended -x --extended
-e --exact -e --exact
--algo --algo
@@ -110,206 +110,206 @@ _fzf_opts_completion() {
--expect --expect
--sync" --sync"
case "${prev}" in case "${prev}" in
--tiebreak) --tiebreak)
COMPREPLY=( $(compgen -W "length begin end index" -- "$cur") ) COMPREPLY=($(compgen -W "length begin end index" -- "$cur"))
return 0 return 0
;; ;;
--color) --color)
COMPREPLY=( $(compgen -W "dark light 16 bw" -- "$cur") ) COMPREPLY=($(compgen -W "dark light 16 bw" -- "$cur"))
return 0 return 0
;; ;;
--history) --history)
COMPREPLY=() COMPREPLY=()
return 0 return 0
;; ;;
esac esac
if [[ "$cur" =~ ^-|\+ ]]; then if [[ "$cur" =~ ^-|\+ ]]; then
COMPREPLY=( $(compgen -W "${opts}" -- "$cur") ) COMPREPLY=($(compgen -W "${opts}" -- "$cur"))
return 0 return 0
fi
return 0
}
_fzf_handle_dynamic_completion() {
local cmd orig_var orig ret orig_cmd orig_complete
cmd="$1"
shift
orig_cmd="$1"
orig_var="_fzf_orig_completion_$cmd"
orig="${!orig_var-}"
orig="${orig##*#}"
if [[ -n "$orig" ]] && type "$orig" > /dev/null 2>&1; then
$orig "$@"
elif [[ -n "${_fzf_completion_loader-}" ]]; then
orig_complete=$(complete -p "$orig_cmd" 2> /dev/null)
_completion_loader "$@"
ret=$?
# _completion_loader may not have updated completion for the command
if [[ "$(complete -p "$orig_cmd" 2> /dev/null)" != "$orig_complete" ]]; then
__fzf_orig_completion < <(complete -p "$orig_cmd" 2> /dev/null)
if [[ "${__fzf_nospace_commands-}" = *" $orig_cmd "* ]]; then
eval "${orig_complete/ -F / -o nospace -F }"
else
eval "$orig_complete"
fi
fi fi
return $ret
fi
}
__fzf_generic_path_completion() { return 0
local cur base dir leftover matches trigger cmd }
cmd="${COMP_WORDS[0]}"
if [[ $cmd == \\* ]]; then
cmd="${cmd:1}"
fi
cmd="${cmd//[^A-Za-z0-9_=]/_}"
COMPREPLY=()
trigger=${FZF_COMPLETION_TRIGGER-'**'}
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ "$cur" == *"$trigger" ]]; then
base=${cur:0:${#cur}-${#trigger}}
eval "base=$base"
dir= _fzf_handle_dynamic_completion() {
[[ $base = *"/"* ]] && dir="$base" local cmd orig_var orig ret orig_cmd orig_complete
while true; do cmd="$1"
if [[ -z "$dir" ]] || [[ -d "$dir" ]]; then shift
leftover=${base/#"$dir"} orig_cmd="$1"
leftover=${leftover/#\/} orig_var="_fzf_orig_completion_$cmd"
[[ -z "$dir" ]] && dir='.' orig="${!orig_var-}"
[[ "$dir" != "/" ]] && dir="${dir/%\//}" orig="${orig##*#}"
matches=$(eval "$1 $(printf %q "$dir")" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-} $2" __fzf_comprun "$4" -q "$leftover" | while read -r item; do if [[ -n "$orig" ]] && type "$orig" >/dev/null 2>&1; then
printf "%q " "${item%$3}$3" $orig "$@"
done) elif [[ -n "${_fzf_completion_loader-}" ]]; then
matches=${matches% } orig_complete=$(complete -p "$orig_cmd" 2>/dev/null)
[[ -z "$3" ]] && [[ "${__fzf_nospace_commands-}" = *" ${COMP_WORDS[0]} "* ]] && matches="$matches " _completion_loader "$@"
if [[ -n "$matches" ]]; then ret=$?
COMPREPLY=( "$matches" ) # _completion_loader may not have updated completion for the command
if [[ "$(complete -p "$orig_cmd" 2>/dev/null)" != "$orig_complete" ]]; then
__fzf_orig_completion < <(complete -p "$orig_cmd" 2>/dev/null)
if [[ "${__fzf_nospace_commands-}" = *" $orig_cmd "* ]]; then
eval "${orig_complete/ -F / -o nospace -F }"
else else
COMPREPLY=( "$cur" ) eval "$orig_complete"
fi fi
printf '\e[5n'
return 0
fi fi
dir=$(dirname "$dir") return $ret
[[ "$dir" =~ /$ ]] || dir="$dir"/
done
else
shift
shift
shift
_fzf_handle_dynamic_completion "$cmd" "$@"
fi
}
_fzf_complete() {
# Split arguments around --
local args rest str_arg i sep
args=("$@")
sep=
for i in "${!args[@]}"; do
if [[ "${args[$i]}" = -- ]]; then
sep=$i
break
fi fi
done }
if [[ -n "$sep" ]]; then
str_arg=
rest=("${args[@]:$((sep + 1)):${#args[@]}}")
args=("${args[@]:0:$sep}")
else
str_arg=$1
args=()
shift
rest=("$@")
fi
local cur selected trigger cmd post __fzf_generic_path_completion() {
post="$(caller 0 | awk '{print $2}')_post" local cur base dir leftover matches trigger cmd
type -t "$post" > /dev/null 2>&1 || post=cat cmd="${COMP_WORDS[0]}"
if [[ $cmd == \\* ]]; then
cmd="${cmd:1}"
fi
cmd="${cmd//[^A-Za-z0-9_=]/_}"
COMPREPLY=()
trigger=${FZF_COMPLETION_TRIGGER-'**'}
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ "$cur" == *"$trigger" ]]; then
base=${cur:0:${#cur}-${#trigger}}
eval "base=$base"
cmd="${COMP_WORDS[0]//[^A-Za-z0-9_=]/_}" dir=
trigger=${FZF_COMPLETION_TRIGGER-'**'} [[ $base = *"/"* ]] && dir="$base"
cur="${COMP_WORDS[COMP_CWORD]}" while true; do
if [[ "$cur" == *"$trigger" ]]; then if [[ -z "$dir" ]] || [[ -d "$dir" ]]; then
cur=${cur:0:${#cur}-${#trigger}} leftover=${base/#"$dir"/}
leftover=${leftover/#\//}
selected=$(FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-} $str_arg" __fzf_comprun "${rest[0]}" "${args[@]}" -q "$cur" | $post | tr '\n' ' ') [[ -z "$dir" ]] && dir='.'
selected=${selected% } # Strip trailing space not to repeat "-o nospace" [[ "$dir" != "/" ]] && dir="${dir/%\//}"
if [[ -n "$selected" ]]; then matches=$(eval "$1 $(printf %q "$dir")" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-} $2" __fzf_comprun "$4" -q "$leftover" | while read -r item; do
COMPREPLY=("$selected") printf "%q " "${item%$3}$3"
done)
matches=${matches% }
[[ -z "$3" ]] && [[ "${__fzf_nospace_commands-}" = *" ${COMP_WORDS[0]} "* ]] && matches="$matches "
if [[ -n "$matches" ]]; then
COMPREPLY=("$matches")
else
COMPREPLY=("$cur")
fi
printf '\e[5n'
return 0
fi
dir=$(dirname "$dir")
[[ "$dir" =~ /$ ]] || dir="$dir"/
done
else else
COMPREPLY=("$cur") shift
shift
shift
_fzf_handle_dynamic_completion "$cmd" "$@"
fi fi
printf '\e[5n' }
return 0
else
_fzf_handle_dynamic_completion "$cmd" "${rest[@]}"
fi
}
_fzf_path_completion() { _fzf_complete() {
__fzf_generic_path_completion _fzf_compgen_path "-m" "" "$@" # Split arguments around --
} local args rest str_arg i sep
args=("$@")
sep=
for i in "${!args[@]}"; do
if [[ "${args[$i]}" = -- ]]; then
sep=$i
break
fi
done
if [[ -n "$sep" ]]; then
str_arg=
rest=("${args[@]:$((sep + 1)):${#args[@]}}")
args=("${args[@]:0:$sep}")
else
str_arg=$1
args=()
shift
rest=("$@")
fi
# Deprecated. No file only completion. local cur selected trigger cmd post
_fzf_file_completion() { post="$(caller 0 | awk '{print $2}')_post"
_fzf_path_completion "$@" type -t "$post" >/dev/null 2>&1 || post=cat
}
_fzf_dir_completion() { cmd="${COMP_WORDS[0]//[^A-Za-z0-9_=]/_}"
__fzf_generic_path_completion _fzf_compgen_dir "" "/" "$@" trigger=${FZF_COMPLETION_TRIGGER-'**'}
} cur="${COMP_WORDS[COMP_CWORD]}"
if [[ "$cur" == *"$trigger" ]]; then
cur=${cur:0:${#cur}-${#trigger}}
_fzf_complete_kill() { selected=$(FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-} $str_arg" __fzf_comprun "${rest[0]}" "${args[@]}" -q "$cur" | $post | tr '\n' ' ')
_fzf_proc_completion "$@" selected=${selected% } # Strip trailing space not to repeat "-o nospace"
} if [[ -n "$selected" ]]; then
COMPREPLY=("$selected")
else
COMPREPLY=("$cur")
fi
printf '\e[5n'
return 0
else
_fzf_handle_dynamic_completion "$cmd" "${rest[@]}"
fi
}
_fzf_proc_completion() { _fzf_path_completion() {
_fzf_complete -m --header-lines=1 --preview 'echo {}' --preview-window down:3:wrap --min-height 15 -- "$@" < <( __fzf_generic_path_completion _fzf_compgen_path "-m" "" "$@"
command ps -eo user,pid,ppid,start,time,command 2> /dev/null || }
command ps -eo user,pid,ppid,time,args # For BusyBox
)
}
_fzf_proc_completion_post() { # Deprecated. No file only completion.
awk '{print $2}' _fzf_file_completion() {
} _fzf_path_completion "$@"
}
_fzf_host_completion() { _fzf_dir_completion() {
_fzf_complete +m -- "$@" < <( __fzf_generic_path_completion _fzf_compgen_dir "" "/" "$@"
command cat <(command tail -n +1 ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2> /dev/null | command grep -i '^\s*host\(name\)\? ' | awk '{for (i = 2; i <= NF; i++) print $1 " " $i}' | command grep -v '[*?%]') \ }
_fzf_complete_kill() {
_fzf_proc_completion "$@"
}
_fzf_proc_completion() {
_fzf_complete -m --header-lines=1 --preview 'echo {}' --preview-window down:3:wrap --min-height 15 -- "$@" < <(
command ps -eo user,pid,ppid,start,time,command 2>/dev/null ||
command ps -eo user,pid,ppid,time,args # For BusyBox
)
}
_fzf_proc_completion_post() {
awk '{print $2}'
}
_fzf_host_completion() {
_fzf_complete +m -- "$@" < <(
command cat <(command tail -n +1 ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2>/dev/null | command grep -i '^\s*host\(name\)\? ' | awk '{for (i = 2; i <= NF; i++) print $1 " " $i}' | command grep -v '[*?%]') \
<(command grep -oE '^[[a-z0-9.,:-]+' ~/.ssh/known_hosts | tr ',' '\n' | tr -d '[' | awk '{ print $1 " " $1 }') \ <(command grep -oE '^[[a-z0-9.,:-]+' ~/.ssh/known_hosts | tr ',' '\n' | tr -d '[' | awk '{ print $1 " " $1 }') \
<(command grep -v '^\s*\(#\|$\)' /etc/hosts | command grep -Fv '0.0.0.0') | <(command grep -v '^\s*\(#\|$\)' /etc/hosts | command grep -Fv '0.0.0.0') |
awk '{if (length($2) > 0) {print $2}}' | sort -u awk '{if (length($2) > 0) {print $2}}' | sort -u
) )
} }
_fzf_var_completion() { _fzf_var_completion() {
_fzf_complete -m -- "$@" < <( _fzf_complete -m -- "$@" < <(
declare -xp | sed -En 's|^declare [^ ]+ ([^=]+).*|\1|p' declare -xp | sed -En 's|^declare [^ ]+ ([^=]+).*|\1|p'
) )
} }
_fzf_alias_completion() { _fzf_alias_completion() {
_fzf_complete -m -- "$@" < <( _fzf_complete -m -- "$@" < <(
alias | sed -En 's|^alias ([^=]+).*|\1|p' alias | sed -En 's|^alias ([^=]+).*|\1|p'
) )
} }
# fzf options # fzf options
complete -o default -F _fzf_opts_completion fzf complete -o default -F _fzf_opts_completion fzf
# fzf-tmux is a thin fzf wrapper that has only a few more options than fzf # fzf-tmux is a thin fzf wrapper that has only a few more options than fzf
# itself. As a quick improvement we take fzf's completion. Adding the few extra # itself. As a quick improvement we take fzf's completion. Adding the few extra
# fzf-tmux specific options (like `-w WIDTH`) are left as a future patch. # fzf-tmux specific options (like `-w WIDTH`) are left as a future patch.
complete -o default -F _fzf_opts_completion fzf-tmux complete -o default -F _fzf_opts_completion fzf-tmux
d_cmds="${FZF_COMPLETION_DIR_COMMANDS:-cd pushd rmdir}" d_cmds="${FZF_COMPLETION_DIR_COMMANDS:-cd pushd rmdir}"
a_cmds=" a_cmds="
awk bat cat diff diff3 awk bat cat diff diff3
emacs emacsclient ex file ftp g++ gcc gvim head hg hx java emacs emacsclient ex file ftp g++ gcc gvim head hg hx java
javac ld less more mvim nvim patch perl python ruby javac ld less more mvim nvim patch perl python ruby
@@ -319,64 +319,64 @@ a_cmds="
ln ls mv open rm rsync scp ln ls mv open rm rsync scp
svn tar unzip zip" svn tar unzip zip"
# Preserve existing completion # Preserve existing completion
__fzf_orig_completion < <(complete -p $d_cmds $a_cmds 2> /dev/null) __fzf_orig_completion < <(complete -p $d_cmds $a_cmds 2>/dev/null)
if type _completion_loader > /dev/null 2>&1; then if type _completion_loader >/dev/null 2>&1; then
_fzf_completion_loader=1 _fzf_completion_loader=1
fi
__fzf_defc() {
local cmd func opts orig_var orig def
cmd="$1"
func="$2"
opts="$3"
orig_var="_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}"
orig="${!orig_var-}"
if [[ -n "$orig" ]]; then
printf -v def "$orig" "$func"
eval "$def"
else
complete -F "$func" $opts "$cmd"
fi fi
}
# Anything __fzf_defc() {
for cmd in $a_cmds; do local cmd func opts orig_var orig def
__fzf_defc "$cmd" _fzf_path_completion "-o default -o bashdefault" cmd="$1"
done func="$2"
opts="$3"
orig_var="_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}"
orig="${!orig_var-}"
if [[ -n "$orig" ]]; then
printf -v def "$orig" "$func"
eval "$def"
else
complete -F "$func" $opts "$cmd"
fi
}
# Directory # Anything
for cmd in $d_cmds; do for cmd in $a_cmds; do
__fzf_defc "$cmd" _fzf_dir_completion "-o nospace -o dirnames" __fzf_defc "$cmd" _fzf_path_completion "-o default -o bashdefault"
done
unset cmd d_cmds a_cmds
_fzf_setup_completion() {
local kind fn cmd
kind=$1
fn=_fzf_${1}_completion
if [[ $# -lt 2 ]] || ! type -t "$fn" > /dev/null; then
echo "usage: ${FUNCNAME[0]} path|dir|var|alias|host|proc COMMANDS..."
return 1
fi
shift
__fzf_orig_completion < <(complete -p "$@" 2> /dev/null)
for cmd in "$@"; do
case "$kind" in
dir) __fzf_defc "$cmd" "$fn" "-o nospace -o dirnames" ;;
var) __fzf_defc "$cmd" "$fn" "-o default -o nospace -v" ;;
alias) __fzf_defc "$cmd" "$fn" "-a" ;;
*) __fzf_defc "$cmd" "$fn" "-o default -o bashdefault" ;;
esac
done done
}
# Environment variables / Aliases / Hosts / Process # Directory
_fzf_setup_completion 'var' export unset printenv for cmd in $d_cmds; do
_fzf_setup_completion 'alias' unalias __fzf_defc "$cmd" _fzf_dir_completion "-o nospace -o dirnames"
_fzf_setup_completion 'host' ssh telnet done
_fzf_setup_completion 'proc' kill
unset cmd d_cmds a_cmds
_fzf_setup_completion() {
local kind fn cmd
kind=$1
fn=_fzf_${1}_completion
if [[ $# -lt 2 ]] || ! type -t "$fn" >/dev/null; then
echo "usage: ${FUNCNAME[0]} path|dir|var|alias|host|proc COMMANDS..."
return 1
fi
shift
__fzf_orig_completion < <(complete -p "$@" 2>/dev/null)
for cmd in "$@"; do
case "$kind" in
dir) __fzf_defc "$cmd" "$fn" "-o nospace -o dirnames" ;;
var) __fzf_defc "$cmd" "$fn" "-o default -o nospace -v" ;;
alias) __fzf_defc "$cmd" "$fn" "-a" ;;
*) __fzf_defc "$cmd" "$fn" "-o default -o bashdefault" ;;
esac
done
}
# Environment variables / Aliases / Hosts / Process
_fzf_setup_completion 'var' export unset printenv
_fzf_setup_completion 'alias' unalias
_fzf_setup_completion 'host' ssh telnet
_fzf_setup_completion 'proc' kill
fi fi

7
config/fzf/everforest.sh Normal file
View File

@@ -0,0 +1,7 @@
# Everforest theme for fzf
# Generated from template - do not edit manually
export FZF_DEFAULT_OPTS=" \
--color=bg+:#374247,bg:#2f383e,spinner:#83c092,hl:#a7c080 \
--color=fg:#d3c6aa,header:#a7c080,info:#dbbc7f,pointer:#83c092 \
--color=marker:#83c092,fg+:#d3c6aa,prompt:#dbbc7f,hl+:#a7c080"

View File

@@ -4,7 +4,7 @@
# Auto-completion # Auto-completion
# --------------- # ---------------
# shellcheck source=completion.bash # shellcheck source=completion.bash
[[ $- == *i* ]] && source "$HOME/.dotfiles/config/fzf/completion.bash" 2> /dev/null [[ $- == *i* ]] && source "$HOME/.dotfiles/config/fzf/completion.bash" 2>/dev/null
# Key bindings # Key bindings
# ------------ # ------------

View File

@@ -23,81 +23,84 @@ __fzf_select__() {
eval "$cmd" | eval "$cmd" |
FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) "$@" | FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) "$@" |
while read -r item; do while read -r item; do
printf '%q ' "$item" # escape special chars printf '%q ' "$item" # escape special chars
done done
} }
if [[ $- =~ i ]]; then if [[ $- =~ i ]]; then
__fzfcmd() { __fzfcmd() {
[[ -n "${TMUX_PANE-}" ]] && { [[ "${FZF_TMUX:-0}" != 0 ]] || [[ -n "${FZF_TMUX_OPTS-}" ]]; } && [[ -n "${TMUX_PANE-}" ]] && { [[ "${FZF_TMUX:-0}" != 0 ]] || [[ -n "${FZF_TMUX_OPTS-}" ]]; } &&
echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- " || echo "fzf" echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- " || echo "fzf"
} }
fzf-file-widget() { fzf-file-widget() {
local selected="$(__fzf_select__ "$@")" local selected="$(__fzf_select__ "$@")"
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$selected${READLINE_LINE:$READLINE_POINT}" READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$selected${READLINE_LINE:$READLINE_POINT}"
READLINE_POINT=$(( READLINE_POINT + ${#selected} )) READLINE_POINT=$((READLINE_POINT + ${#selected}))
} }
__fzf_cd__() { __fzf_cd__() {
local cmd opts dir local cmd opts dir
cmd="${FZF_ALT_C_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \ cmd="${FZF_ALT_C_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \
-o -type d -print 2> /dev/null | cut -b3-"}" -o -type d -print 2> /dev/null | cut -b3-"}"
opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse ${FZF_DEFAULT_OPTS-} ${FZF_ALT_C_OPTS-} +m" opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse ${FZF_DEFAULT_OPTS-} ${FZF_ALT_C_OPTS-} +m"
dir=$(set +o pipefail; eval "$cmd" | FZF_DEFAULT_OPTS="$opts" $(__fzfcmd)) && printf 'builtin cd -- %q' "$dir" dir=$(
} set +o pipefail
eval "$cmd" | FZF_DEFAULT_OPTS="$opts" $(__fzfcmd)
) && printf 'builtin cd -- %q' "$dir"
}
__fzf_history__() { __fzf_history__() {
local output opts script local output opts script
opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} -n2..,.. --scheme=history --bind=ctrl-r:toggle-sort ${FZF_CTRL_R_OPTS-} +m --read0" opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} -n2..,.. --scheme=history --bind=ctrl-r:toggle-sort ${FZF_CTRL_R_OPTS-} +m --read0"
script='BEGIN { getc; $/ = "\n\t"; $HISTCOUNT = $ENV{last_hist} + 1 } s/^[ *]//; print $HISTCOUNT - $. . "\t$_" if !$seen{$_}++' script='BEGIN { getc; $/ = "\n\t"; $HISTCOUNT = $ENV{last_hist} + 1 } s/^[ *]//; print $HISTCOUNT - $. . "\t$_" if !$seen{$_}++'
output=$( output=$(
set +o pipefail set +o pipefail
builtin fc -lnr -2147483648 | builtin fc -lnr -2147483648 |
last_hist=$(HISTTIMEFORMAT='' builtin history 1) perl -n -l0 -e "$script" | last_hist=$(HISTTIMEFORMAT='' builtin history 1) perl -n -l0 -e "$script" |
FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) --query "$READLINE_LINE" FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) --query "$READLINE_LINE"
) || return ) || return
READLINE_LINE=${output#*$'\t'} READLINE_LINE=${output#*$'\t'}
if [[ -z "$READLINE_POINT" ]]; then if [[ -z "$READLINE_POINT" ]]; then
echo "$READLINE_LINE" echo "$READLINE_LINE"
else
READLINE_POINT=0x7fffffff
fi
}
# Required to refresh the prompt after fzf
bind -m emacs-standard '"\er": redraw-current-line'
bind -m vi-command '"\C-z": emacs-editing-mode'
bind -m vi-insert '"\C-z": emacs-editing-mode'
bind -m emacs-standard '"\C-z": vi-editing-mode'
if ((BASH_VERSINFO[0] < 4)); then
# CTRL-T - Paste the selected file path into the command line
bind -m emacs-standard '"\C-t": " \C-b\C-k \C-u`__fzf_select__`\e\C-e\er\C-a\C-y\C-h\C-e\e \C-y\ey\C-x\C-x\C-f"'
bind -m vi-command '"\C-t": "\C-z\C-t\C-z"'
bind -m vi-insert '"\C-t": "\C-z\C-t\C-z"'
# CTRL-R - Paste the selected command from history into the command line
bind -m emacs-standard '"\C-r": "\C-e \C-u\C-y\ey\C-u"$(__fzf_history__)"\e\C-e\er"'
bind -m vi-command '"\C-r": "\C-z\C-r\C-z"'
bind -m vi-insert '"\C-r": "\C-z\C-r\C-z"'
else else
READLINE_POINT=0x7fffffff # CTRL-T - Paste the selected file path into the command line
bind -m emacs-standard -x '"\C-t": fzf-file-widget'
bind -m vi-command -x '"\C-t": fzf-file-widget'
bind -m vi-insert -x '"\C-t": fzf-file-widget'
# CTRL-R - Paste the selected command from history into the command line
bind -m emacs-standard -x '"\C-r": __fzf_history__'
bind -m vi-command -x '"\C-r": __fzf_history__'
bind -m vi-insert -x '"\C-r": __fzf_history__'
fi fi
}
# Required to refresh the prompt after fzf # ALT-C - cd into the selected directory
bind -m emacs-standard '"\er": redraw-current-line' bind -m emacs-standard '"\ec": " \C-b\C-k \C-u`__fzf_cd__`\e\C-e\er\C-m\C-y\C-h\e \C-y\ey\C-x\C-x\C-d"'
bind -m vi-command '"\ec": "\C-z\ec\C-z"'
bind -m vi-command '"\C-z": emacs-editing-mode' bind -m vi-insert '"\ec": "\C-z\ec\C-z"'
bind -m vi-insert '"\C-z": emacs-editing-mode'
bind -m emacs-standard '"\C-z": vi-editing-mode'
if (( BASH_VERSINFO[0] < 4 )); then
# CTRL-T - Paste the selected file path into the command line
bind -m emacs-standard '"\C-t": " \C-b\C-k \C-u`__fzf_select__`\e\C-e\er\C-a\C-y\C-h\C-e\e \C-y\ey\C-x\C-x\C-f"'
bind -m vi-command '"\C-t": "\C-z\C-t\C-z"'
bind -m vi-insert '"\C-t": "\C-z\C-t\C-z"'
# CTRL-R - Paste the selected command from history into the command line
bind -m emacs-standard '"\C-r": "\C-e \C-u\C-y\ey\C-u"$(__fzf_history__)"\e\C-e\er"'
bind -m vi-command '"\C-r": "\C-z\C-r\C-z"'
bind -m vi-insert '"\C-r": "\C-z\C-r\C-z"'
else
# CTRL-T - Paste the selected file path into the command line
bind -m emacs-standard -x '"\C-t": fzf-file-widget'
bind -m vi-command -x '"\C-t": fzf-file-widget'
bind -m vi-insert -x '"\C-t": fzf-file-widget'
# CTRL-R - Paste the selected command from history into the command line
bind -m emacs-standard -x '"\C-r": __fzf_history__'
bind -m vi-command -x '"\C-r": __fzf_history__'
bind -m vi-insert -x '"\C-r": __fzf_history__'
fi
# ALT-C - cd into the selected directory
bind -m emacs-standard '"\ec": " \C-b\C-k \C-u`__fzf_cd__`\e\C-e\er\C-m\C-y\C-h\e \C-y\ey\C-x\C-x\C-d"'
bind -m vi-command '"\ec": "\C-z\ec\C-z"'
bind -m vi-insert '"\ec": "\C-z\ec\C-z"'
fi fi

View File

@@ -63,3 +63,5 @@
old = red bold old = red bold
new = green bold new = green bold
whitespace = red reverse whitespace = red reverse
[coderabbit]
machineId = cli/2d3277ec1da346c4b30b26d0fb373d8c

View File

@@ -51,4 +51,3 @@
# dotfiles special config # dotfiles special config
[includeIf "hasconfig:remote.*.url:https://github.com/ivuorinen/dotfiles.git"] [includeIf "hasconfig:remote.*.url:https://github.com/ivuorinen/dotfiles.git"]
path = ~/.dotfiles/config/git/special/dotfiles ; path = ~/.dotfiles/config/git/special/dotfiles ;

View File

@@ -1,4 +1,3 @@
set -gx GOENV_PATH_ORDER front set -gx GOENV_PATH_ORDER front
set -gx GOENV_PREPEND_GOPATH true set -gx GOENV_PREPEND_GOPATH true
set -gx GOENV_AUTO_INSTALL true set -gx GOENV_AUTO_INSTALL true

View File

@@ -29,4 +29,3 @@
# outdir = "~/.gnupg/out" # outdir = "~/.gnupg/out"
# outfile = "{type}_{query}.{ext}" # outfile = "{type}_{query}.{ext}"
# default_key = "0xA1B2C3XY" # default_key = "0xA1B2C3XY"

View File

@@ -8,4 +8,3 @@ export HOMEBREW_AUTOREMOVE=true
export HOMEBREW_AUTO_UPDATE_SECS=86400 export HOMEBREW_AUTO_UPDATE_SECS=86400
export HOMEBREW_CLEANUP_MAX_AGE_DAYS=30 export HOMEBREW_CLEANUP_MAX_AGE_DAYS=30
export HOMEBREW_NO_ENV_HINTS=1 export HOMEBREW_NO_ENV_HINTS=1

0
base/huskyrc → config/husky/init.sh Normal file → Executable file
View File

View File

@@ -226,4 +226,4 @@ if has('gui_running')
set guifont=JetBrainsMono:h14 set guifont=JetBrainsMono:h14
endif endif
" vim: set filetype=vim : " vim: set filetype=vim :

View File

@@ -110,4 +110,3 @@ Irssi::signal_add(
'message kick' => \&msg_kick 'message kick' => \&msg_kick
} }
); );

View File

@@ -13,4 +13,3 @@ termcapinfo xterm* ti@:te@
# Some settings for screen + vim # Some settings for screen + vim
term xterm-256color term xterm-256color
maptimeout 10 maptimeout 10

0
config/nbrc Normal file → Executable file
View File

View File

@@ -21,4 +21,3 @@ max_line_length = off
[*.lua] [*.lua]
max_line_length = 90 max_line_length = 90

View File

@@ -1,3 +1,2 @@
spell/* spell/*
!spell/.gitkeep !spell/.gitkeep

View File

@@ -8,4 +8,3 @@ collapse_simple_statement = "Always"
[sort_requires] [sort_requires]
enabled = true enabled = true

View File

@@ -65,6 +65,6 @@ vim.schedule(function()
end) end)
-- xiyaowong/transparent.nvim -- xiyaowong/transparent.nvim
-- vim.g.transparent_enabled = true vim.g.transparent_enabled = true
-- vim: ts=2 sts=2 sw=2 et -- vim: ts=2 sts=2 sw=2 et

View File

@@ -56,9 +56,12 @@ return {
opts = { opts = {
snippets = { preset = 'luasnip' }, snippets = { preset = 'luasnip' },
-- 'default' for mappings similar to built-in completion -- 'default' for mappings similar to built-in completion
-- 'super-tab' for mappings similar to vscode (tab to accept, arrow keys to navigate) -- 'super-tab' for mappings similar to vscode (tab to accept,
-- 'enter' for mappings similar to 'super-tab' but with 'enter' to accept -- arrow keys to navigate)
-- see the "default configuration" section below for full documentation on how to -- 'enter' for mappings similar to 'super-tab' but with 'enter' to
-- accept
-- see the "default configuration" section below for
-- documentation on how to
-- define your own keymap. -- define your own keymap.
keymap = { keymap = {
preset = 'default', preset = 'default',

View File

@@ -11,6 +11,27 @@ return {
end, end,
}, },
{
'ivuorinen/nvim-shellspec',
ft = 'shellspec',
config = function()
require('shellspec').setup {
auto_format = true,
indent_size = 2,
indent_comments = true,
}
end,
},
{
'pablos123/shellcheck.nvim',
config = function()
require('shellcheck-nvim').setup {
shellcheck_options = { '-x' },
}
end,
},
-- Go development plugin for Vim -- Go development plugin for Vim
-- https://github.com/fatih/vim-go -- https://github.com/fatih/vim-go
{ {

View File

@@ -16,7 +16,8 @@ return {
}, },
opts = { opts = {
lsp = { lsp = {
-- override markdown rendering so that **cmp** and other plugins use **Treesitter** -- override markdown rendering so that **cmp** and other plugins
-- use **Treesitter**
override = { override = {
['vim.lsp.util.convert_input_to_markdown_lines'] = true, ['vim.lsp.util.convert_input_to_markdown_lines'] = true,
['vim.lsp.util.stylize_markdown'] = true, ['vim.lsp.util.stylize_markdown'] = true,

View File

@@ -54,7 +54,9 @@ return {
event_handlers = { event_handlers = {
{ {
event = 'file_opened', event = 'file_opened',
handler = function(_) require('neo-tree.command').execute { action = 'close' } end, handler = function(_)
require('neo-tree.command').execute { action = 'close' }
end,
}, },
}, },
default_component_configs = { default_component_configs = {

View File

@@ -6,9 +6,9 @@ return {
priority = 1000, -- make sure to load this before all the other start plugins priority = 1000, -- make sure to load this before all the other start plugins
config = function() config = function()
require('everforest').setup { require('everforest').setup {
background = 'soft', -- hard, medium, soft background = 'medium', -- hard, medium, soft
transparent_background_level = 0, -- 0, 1, 2 transparent_background_level = 2, -- 0, 1, 2
sign_column_background = 'none', -- none, dimmed, normal sign_column_background = 'grey', -- none, grey
disable_italic_comments = false, disable_italic_comments = false,
diagnostic_virtual_text = 'coloured', -- coloured, gray, underline, none diagnostic_virtual_text = 'coloured', -- coloured, gray, underline, none
diagnostic_line_highlight = true, diagnostic_line_highlight = true,
@@ -27,26 +27,6 @@ return {
end, end,
}, },
-- {
-- 'rose-pine/neovim',
-- name = 'rose-pine',
-- opts = {
-- dim_inactive_windows = false,
-- extend_background_behind_borders = true,
-- styles = {
-- bold = true,
-- italic = true,
-- transparency = true,
-- },
-- enable = {
-- terminal = true,
-- legacy_highlights = true, -- Improve compatibility for previous versions of Neovim
-- migrations = true, -- Handle deprecated options automatically
-- },
-- },
-- config = function() vim.cmd 'colorscheme rose-pine' end,
-- },
-- Automatic dark mode -- Automatic dark mode
-- https://github.com/f-person/auto-dark-mode.nvim -- https://github.com/f-person/auto-dark-mode.nvim
{ {
@@ -80,35 +60,37 @@ return {
-- Remove all background colors to make nvim transparent -- Remove all background colors to make nvim transparent
-- https://github.com/xiyaowong/nvim-transparent -- https://github.com/xiyaowong/nvim-transparent
-- { {
-- 'xiyaowong/nvim-transparent', 'xiyaowong/nvim-transparent',
-- lazy = false, lazy = false,
-- enabled = false, enabled = true,
-- config = function() config = function()
-- local t = require 'transparent' local t = require 'transparent'
-- t.setup { t.setup {
-- extra_groups = { extra_groups = {
-- 'NormalNC', 'NormalNC',
-- 'NormalFloat', 'NormalFloat',
-- 'FloatTitle', 'EndOfBuffer',
-- 'FloatBorder', 'FloatTitle',
-- 'NotifyDEBUGBorder', 'FloatBorder',
-- 'NotifyERRORBorder', 'NotifyDEBUGBorder',
-- 'NotifyINFOBorder', 'NotifyERRORBorder',
-- 'NotifyINFOBorder73', 'NotifyINFOBorder',
-- 'NotifyINFOBorder75', 'NotifyINFOBorder73',
-- 'NotifyINFOBorder101', 'NotifyINFOBorder75',
-- 'NotifyTRACEBorder', 'NotifyINFOBorder101',
-- 'NotifyWARNBorder', 'NotifyTRACEBorder',
-- 'TelescopeBorder', 'NotifyWARNBorder',
-- 'TelescopePromptBorder', 'NotifyBackground',
-- 'TelescopeResultsBorder', 'TelescopeBorder',
-- 'TelescopePreviewBorder', 'TelescopePromptBorder',
-- }, 'TelescopeResultsBorder',
-- } 'TelescopePreviewBorder',
-- t.clear_prefix 'NeoTree' },
-- end, }
-- }, t.clear_prefix 'NeoTree'
end,
},
-- Display a character as the colorcolumn -- Display a character as the colorcolumn
-- https://github.com/lukas-reineke/virt-column.nvim -- https://github.com/lukas-reineke/virt-column.nvim

View File

@@ -199,7 +199,7 @@
"progress bar": { "progress bar": {
"body": [ "body": [
"for _ in {1..100}; do", "for _ in {1..100}; do",
"\tprintf \"🬋\"", "\tprintf \"\ud83e\udf0b\"",
"\tsleep 0.5", "\tsleep 0.5",
"done" "done"
], ],
@@ -242,7 +242,7 @@
"spinner": { "spinner": {
"body": [ "body": [
"# spinner with 20s timeout", "# spinner with 20s timeout",
"spinner=\"⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏\"", "spinner=\"\u280b\u2819\u2839\u2838\u283c\u2834\u2826\u2827\u2807\u280f\"",
"for i in {1..100}; do", "for i in {1..100}; do",
"\tpos=\\$((i % \\${#spinner}))", "\tpos=\\$((i % \\${#spinner}))",
"\tprintf \"\\r%s\" \"\\${spinner:\\$pos:1}\"", "\tprintf \"\\r%s\" \"\\${spinner:\\$pos:1}\"",

View File

@@ -1,6 +1,8 @@
{ {
"account_id": "S5Z2DMNFKJEZBPCWRHRWC4DCGI", "account_id": "S5Z2DMNFKJEZBPCWRHRWC4DCGI",
"entrypoint": ["gh"], "entrypoint": [
"gh"
],
"credentials": [ "credentials": [
{ {
"plugin": "github", "plugin": "github",

View File

@@ -102,4 +102,3 @@ ctrl + alt - k : \
ctrl + alt - l : \ ctrl + alt - l : \
yabai -m window --resize right:50:0; \ yabai -m window --resize right:50:0; \
yabai -m window --resize left:50:0 yabai -m window --resize left:50:0

View File

@@ -152,4 +152,3 @@ format = "[$virtualenv]($style) "
[username] [username]
format = "[$user]($style) " format = "[$user]($style) "

View File

@@ -1,2 +1 @@
plugin_cache_dir = "$HOME/.cache/terraform/plugin-cache" plugin_cache_dir = "$HOME/.cache/terraform/plugin-cache"

View File

@@ -1,93 +1,46 @@
# set-option -g status-style 'fg=#cad3f5,bg=default' # Everforest dark theme for tmux
# set-window-option -g window-status-style 'fg=#cad3f5,bg=default dim' # Generated from template - do not edit manually
# set-window-option -g window-status-current-style 'fg=#04a5e5,bg=default'
# set-window-option -g window-status-activity-style 'fg=#cad3f5,bg=default nodim'
# set-window-option -g window-status-bell-style 'fg=#cad3f5,bg=default'
# set -g message-style 'fg=#c6a0f6 bg=#24273a bold'
## COLORSCHEME: everforest dark medium # Enable proper color support
set -g @everforest_bg_dim '#efebd4 ' set -g default-terminal "tmux-256color"
set -g @everforest_bg0 '#fdf6e3 ' set -as terminal-features ",*:RGB"
set -g @everforest_bg1 '#f6f0d9'
set -g @everforest_bg2 '#efebd4'
set -g @everforest_bg3 '#e6e2cc'
set -g @everforest_bg4 '#e0dcc7'
set -g @everforest_bg5 '#bdc3af'
set -g @everforest_bg_visual '#eaedc8'
set -g @everforest_bg_red '#fbe3da'
set -g @everforest_bg_green '#f0f1d2'
set -g @everforest_bg_blue '#e9f0e9'
set -g @everforest_bg_yellow '#faedcd'
set -g @everforest_fg '#5c6a72' set -g pane-border-style "bg=default,fg=#859289"
set -g @everforest_red '#f85552' set -g pane-active-border-style "bg=default,fg=#a7c080"
set -g @everforest_orange '#f57d26'
set -g @everforest_yellow '#dfa000'
set -g @everforest_green '#8da101'
set -g @everforest_aqua '#35a77c'
set -g @everforest_blue '#3a94c5'
set -g @everforest_purple '#df69ba'
set -g @everforest_grey0 '#a6b0a0'
set -g @everforest_grey1 '#939f91'
set -g @everforest_grey2 '#829181'
set -g @everforest_statusline1 '#93b259'
set -g @everforest_statusline2 '#708089'
set -g @everforest_statusline3 '#e66868'
set-option -g status "on" # Window tabs
set -g status-interval 2 set -g window-style "bg=default,fg=default,dim"
set -g window-status-style "bg=default,fg=default,dim"
set -g window-status-current-style "bg=default,fg=#d3c6aa"
set -g window-status-activity-style "bg=default,fg=#dbbc7f,nodim"
set -g window-status-bell-style "bg=default,fg=yellow,nodim"
set -g window-status-last-style "bg=default,fg=#a7c080"
set -g window-status-format " #I:#W "
set-option -g status-fg '#5c6a72' # fg (No idea why I can't use variables here) # Messages
set-option -g status-bg '#fdf6e4' # bg0 set -g message-style "bg=default,fg=#d3c6aa"
set -g message-command-style "bg=default,fg=#d3c6aa"
set-option -g mode-style fg='#{@everforest_purple}',bg='#{@everforest_bg_red}' # fg=purple, bg=bg_visual # Status bar
set -g status-style "bg=default,fg=default"
set -g status-left " #[default]"
set -g status-right " #[fg=#a7c080]#S@#[fg=#859289]#h #[fg=#7fbbb3]%H:%M #[fg=#dbbc7f]%d.%m "
set -g status-left-style "bg=default,fg=white"
set -g status-right-style "bg=default,fg=white"
# default statusbar colors set -g menu-style "bg=default,fg=white"
set-option -g status-style fg='#{@everforest_fg}',bg='#{@everforest_bg_dim}',default # fg=fg bg=bg_dim set -g menu-selected-style "bg=default,fg=#a7c080"
set -g menu-border-style "fg=#a7c080"
set -g menu-border-lines "single"
# ---- Windows ---- set -g popup-style "bg=default,fg=white"
# default window title colors set -g popup-border-style "fg=#a7c080"
set-window-option -g window-status-style fg='#{@everforest_bg5}',bg='#{@everforest_bg0}' # fg=yellow bg=bg0 set -g popup-border-lines "single"
# default window with an activity alert set -g display-panes-colour "blue"
set-window-option -g window-status-activity-style 'bg=#{@everforest_bg1},fg=#{@everforest_bg3}' # bg=bg1, fg=fg3 set -g display-panes-active-colour "red"
set -g display-panes-time 1000 # milliseconds
# active window title colors
set-window-option -g window-status-current-style fg='#{@everforest_fg}',bg='#{@everforest_bg_green}' # fg=fg bg=bg_green
# ---- Pane ----
# pane borders
set-option -g pane-border-style fg='#{@everforest_bg1}' # fg=bg1
set-option -g pane-active-border-style 'fg=#{@everforest_blue}' # fg=blue
# pane number display
set-option -g display-panes-active-colour '#3a9c53' # blue
set-option -g display-panes-colour '#f57d26' # orange
# ---- Command ----
# message info
set-option -g message-style fg='#{@everforest_statusline3}',bg='#{@everforest_bg_dim}' # fg=statusline3 bg=bg_dim
# writing commands inactive
set-option -g message-command-style 'fg=#{@everforest_bg3},bg=#{@everforest_bg1}' # bg=fg3, fg=bg1
# ---- Miscellaneous ----
# clock
set-window-option -g clock-mode-colour '#3a9c53' #blue
# bell
set-window-option -g window-status-bell-style fg='#{@everforest_bg0}',bg='#{@everforest_statusline3}' # fg=bg, bg=statusline3
# ---- Formatting ----
set-option -g status-left-style none
set -g status-left-length 60
set -g status-left '#[fg=#{@everforest_bg_dim},bg=#{@everforest_green},bold] #S #[fg=#{@everforest_green},bg=#{@everforest_bg2},nobold]#[fg=#{@everforest_green},bg=#{@everforest_bg2},bold] #(whoami) #[fg=#{@everforest_bg2},bg=#{@everforest_bg0},nobold]'
set-option -g status-right-style none
set -g status-right-length 150
set -g status-right '#[fg=#{@everforest_bg2}]#[fg=#{@everforest_fg},bg=#{@everforest_bg2}] #[fg=#{@everforest_fg},bg=#{@everforest_bg2}]%Y-%m-%d  %H:%M #[fg=#{@everforest_aqua},bg=#{@everforest_bg2},bold]#[fg=#{@everforest_bg_dim},bg=#{@everforest_aqua},bold] #h '
set -g window-status-separator '#[fg=#{@everforest_grey2},bg=#{@everforest_bg0}] '
set -g window-status-format "#[fg=#{@everforest_grey0},bg=#{@everforest_bg0}] #I  #[fg=#{@everforest_grey0},bg=#{@everforest_bg0}]#W "
set -g window-status-current-format "#[fg=#{@everforest_bg0},bg=#{@everforest_bg_green}]#[fg=#{@everforest_fg},bg=#{@everforest_bg_green}] #I  #[fg=#{@everforest_fg},bg=#{@everforest_bg_green},bold]#W #[fg=#{@everforest_bg_green},bg=#{@everforest_bg0},nobold]"
set -g pane-border-indicators "arrows"
set -g pane-border-lines "single"
set -g clock-mode-style "24"

View File

@@ -1,93 +1,6 @@
# set-option -g status-style 'fg=#4c4f69,bg=default' set-option -g status-style 'fg=#4c4f69,bg=default'
# set-window-option -g window-status-style 'fg=#4c4f69,bg=default dim' set-window-option -g window-status-style 'fg=#4c4f69,bg=default dim'
# set-window-option -g window-status-current-style 'fg=#8839ef,bg=default' set-window-option -g window-status-current-style 'fg=#8839ef,bg=default'
# set-window-option -g window-status-activity-style 'fg=#4c4f69,bg=default nodim' set-window-option -g window-status-activity-style 'fg=#4c4f69,bg=default nodim'
# set-window-option -g window-status-bell-style 'fg=#4c4f69,bg=default' set-window-option -g window-status-bell-style 'fg=#4c4f69,bg=default'
# set -g message-style 'fg=#8839ef bg=#e6e9ef bold' # fg magenta, bg black set -g message-style 'fg=#8839ef bg=#e6e9ef bold' # fg magenta, bg black
## COLORSCHEME: everforest light medium
set -g @everforest_bg_dim '#e5dfc5'
set -g @everforest_bg0 '#f3ead3'
set -g @everforest_bg1 '#eae4ca'
set -g @everforest_bg2 '#e5dfc5'
set -g @everforest_bg3 '#ddd8be'
set -g @everforest_bg4 '#d8d3ba'
set -g @everforest_bg5 '#b9c0ab'
set -g @everforest_bg_visual '#e1e4b0'
set -g @everforest_bg_red '#f4dbd0'
set -g @everforest_bg_green '#e5e6c5'
set -g @everforest_bg_blue '#e1e7dd'
set -g @everforest_bg_yellow '#f1e4c5'
set -g @everforest_fg '#5c6a72'
set -g @everforest_red '#f85552'
set -g @everforest_orange '#f57d26'
set -g @everforest_yellow '#dfa000'
set -g @everforest_green '#8da101'
set -g @everforest_aqua '#35a77c'
set -g @everforest_blue '#3a94c5'
set -g @everforest_purple '#df69ba'
set -g @everforest_grey0 '#a6b0a0'
set -g @everforest_grey1 '#939f91'
set -g @everforest_grey2 '#829181'
set -g @everforest_statusline1 '#93b259'
set -g @everforest_statusline2 '#708089'
set -g @everforest_statusline3 '#e66868'
set-option -g status "on"
set -g status-interval 2
set-option -g status-fg '#5c6a72' # fg (No idea why I can't use variables here)
set-option -g status-bg '#f3ead3' # bg0
set-option -g mode-style fg='#{@everforest_purple}',bg='#{@everforest_bg_red}' # fg=purple, bg=bg_visual
# default statusbar colors
set-option -g status-style fg='#{@everforest_fg}',bg='#{@everforest_bg_dim}',default # fg=fg bg=bg_dim
# ---- Windows ----
# default window title colors
set-window-option -g window-status-style fg='#{@everforest_bg5}',bg='#{@everforest_bg0}' # fg=yellow bg=bg0
# default window with an activity alert
set-window-option -g window-status-activity-style 'bg=#{@everforest_bg1},fg=#{@everforest_bg3}' # bg=bg1, fg=fg3
# active window title colors
set-window-option -g window-status-current-style fg='#{@everforest_fg}',bg='#{@everforest_bg_green}' # fg=fg bg=bg_green
# ---- Pane ----
# pane borders
set-option -g pane-border-style fg='#{@everforest_bg1}' # fg=bg1
set-option -g pane-active-border-style 'fg=#{@everforest_blue}' # fg=blue
# pane number display
set-option -g display-panes-active-colour '#3a9c53' # blue
set-option -g display-panes-colour '#f57d26' # orange
# ---- Command ----
# message info
set-option -g message-style fg='#{@everforest_statusline3}',bg='#{@everforest_bg_dim}' # fg=statusline3 bg=bg_dim
# writing commands inactive
set-option -g message-command-style 'fg=#{@everforest_bg3},bg=#{@everforest_bg1}' # bg=fg3, fg=bg1
# ---- Miscellaneous ----
# clock
set-window-option -g clock-mode-colour '#3a9c53' #blue
# bell
set-window-option -g window-status-bell-style fg='#{@everforest_bg0}',bg='#{@everforest_statusline3}' # fg=bg, bg=statusline3
# ---- Formatting ----
set-option -g status-left-style none
set -g status-left-length 60
set -g status-left '#[fg=#{@everforest_bg_dim},bg=#{@everforest_green},bold] #S #[fg=#{@everforest_green},bg=#{@everforest_bg2},nobold]#[fg=#{@everforest_green},bg=#{@everforest_bg2},bold] #(whoami) #[fg=#{@everforest_bg2},bg=#{@everforest_bg0},nobold]'
set-option -g status-right-style none
set -g status-right-length 150
set -g status-right '#[fg=#{@everforest_bg2}]#[fg=#{@everforest_fg},bg=#{@everforest_bg2}] #[fg=#{@everforest_fg},bg=#{@everforest_bg2}]%Y-%m-%d  %H:%M #[fg=#{@everforest_aqua},bg=#{@everforest_bg2},bold]#[fg=#{@everforest_bg_dim},bg=#{@everforest_aqua},bold] #h '
set -g window-status-separator '#[fg=#{@everforest_grey2},bg=#{@everforest_bg0}] '
set -g window-status-format "#[fg=#{@everforest_grey0},bg=#{@everforest_bg0}] #I  #[fg=#{@everforest_grey0},bg=#{@everforest_bg0}]#W "
set -g window-status-current-format "#[fg=#{@everforest_bg0},bg=#{@everforest_bg_green}]#[fg=#{@everforest_fg},bg=#{@everforest_bg_green}] #I  #[fg=#{@everforest_fg},bg=#{@everforest_bg_green},bold]#W #[fg=#{@everforest_bg_green},bg=#{@everforest_bg0},nobold]"

View File

@@ -51,8 +51,8 @@ if-shell '[ "$DEBUG" = "1" ]' 'set -g debug-file ~/.cache/tmux-debug.log'
# │ Theme │ # │ Theme │
# ╰──────────────────────────────────────────────────────────╯ # ╰──────────────────────────────────────────────────────────╯
set -g pane-active-border-style "fg=#7aa2f7" set -g pane-active-border-style "bg=default,fg=#7aa2f7"
set -g pane-border-style "fg=#31748f" set -g pane-border-style "bg=default,fg=#31748f"
set -g status-style "bg=default" set -g status-style "bg=default"
set -g status-justify "left" set -g status-justify "left"
set -g status-left '' set -g status-left ''
@@ -190,4 +190,4 @@ run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-fzf-url/fzf-url.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-resurrect/resurrect.tmux" run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-resurrect/resurrect.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-continuum/continuum.tmux" run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-continuum/continuum.tmux"
# run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-dark-notify/main.tmux" run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-dark-notify/main.tmux"

View File

@@ -4,7 +4,7 @@
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped # Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported. # absolute path. No other format is supported.
# #
XDG_DESKTOP_DIR="$HOME/Desktop" XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads" XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/" XDG_TEMPLATES_DIR="$HOME/"

View File

@@ -1 +1 @@
en_US en_US

View File

@@ -1,24 +1,24 @@
[colors] [colors]
ansi = [ ansi = [
'#475258', '#475258',
'#e67e80', '#e67e80',
'#a7c080', '#a7c080',
'#dbbc7f', '#dbbc7f',
'#7fbbb3', '#7fbbb3',
'#d699b6', '#d699b6',
'#83c092', '#83c092',
'#d3c6aa', '#d3c6aa',
] ]
background = '#2d353b' background = '#2d353b'
brights = [ brights = [
'#475258', '#475258',
'#e67e80', '#e67e80',
'#a7c080', '#a7c080',
'#dbbc7f', '#dbbc7f',
'#7fbbb3', '#7fbbb3',
'#d699b6', '#d699b6',
'#83c092', '#83c092',
'#d3c6aa', '#d3c6aa',
] ]
cursor_bg = '#d3c6aa' cursor_bg = '#d3c6aa'
cursor_border = '#d3c6aa' cursor_border = '#d3c6aa'

View File

@@ -1,24 +1,24 @@
[colors] [colors]
ansi = [ ansi = [
'#5c6a72', '#5c6a72',
'#f85552', '#f85552',
'#8da101', '#8da101',
'#dfa000', '#dfa000',
'#3a94c5', '#3a94c5',
'#df69ba', '#df69ba',
'#35a77c', '#35a77c',
'#e0dcc7', '#e0dcc7',
] ]
background = '#fdf6e3' background = '#fdf6e3'
brights = [ brights = [
'#5c6a72', '#5c6a72',
'#f85552', '#f85552',
'#8da101', '#8da101',
'#dfa000', '#dfa000',
'#3a94c5', '#3a94c5',
'#df69ba', '#df69ba',
'#35a77c', '#35a77c',
'#e0dcc7', '#e0dcc7',
] ]
cursor_bg = '#5c6a72' cursor_bg = '#5c6a72'
cursor_border = '#5c6a72' cursor_border = '#5c6a72'

View File

@@ -12,6 +12,10 @@ config.color_scheme_dirs = {
-- Font and font size -- Font and font size
config.font_size = 16 config.font_size = 16
config.font = wezterm.font_with_fallback { config.font = wezterm.font_with_fallback {
{
family = 'Monaspace Argon NF',
weight = 'Regular',
},
{ {
family = 'Operator Mono', family = 'Operator Mono',
weight = 'Book', weight = 'Book',
@@ -22,7 +26,20 @@ config.font = wezterm.font_with_fallback {
'Symbols Nerd Font Mono', 'Symbols Nerd Font Mono',
} }
config.font_shaper = 'Harfbuzz' config.font_shaper = 'Harfbuzz'
config.harfbuzz_features = { 'calt=1', 'clig=1', 'liga=1' } config.harfbuzz_features = {
'calt=1',
'clig=1',
'liga=1',
'ss01=1',
'ss02=1',
'ss03=1',
'ss04=1',
'ss05=1',
'ss06=1',
'ss07=1',
'ss08=1',
'ss09=1',
}
config.selection_word_boundary = ' \t\n{[}]()"\'`,;:' config.selection_word_boundary = ' \t\n{[}]()"\'`,;:'

View File

@@ -29,4 +29,3 @@ rules:
allow-non-breakable-inline-mappings: true allow-non-breakable-inline-mappings: true
max: 120 max: 120
truthy: disable truthy: disable

View File

@@ -24,4 +24,3 @@ load-nvmrc() {
add-zsh-hook chpwd load-nvmrc add-zsh-hook chpwd load-nvmrc
load-nvmrc load-nvmrc

View File

@@ -25,9 +25,9 @@ git submodule update --init --recursive "${DOTBOT_DIR}"
if [ "${DOTBOT_HOST}" != "" ]; then if [ "${DOTBOT_HOST}" != "" ]; then
DOTBOT_HOST_CONFIG="${BASEDIR}/hosts/${DOTBOT_HOST}/${CONFIG}" DOTBOT_HOST_CONFIG="${BASEDIR}/hosts/${DOTBOT_HOST}/${CONFIG}"
echo "-> Trying if host config can be found: ${DOTBOT_HOST_CONFIG}" echo "-> Trying if host config can be found: ${DOTBOT_HOST_CONFIG}"
[ -r "$DOTBOT_HOST_CONFIG" ] && [ -f "$DOTBOT_HOST_CONFIG" ] \ [ -r "$DOTBOT_HOST_CONFIG" ] && [ -f "$DOTBOT_HOST_CONFIG" ] &&
&& echo "(!) Found $DOTBOT_HOST_CONFIG" \ echo "(!) Found $DOTBOT_HOST_CONFIG" &&
&& "$DOTBOT_BIN_PATH" \ "$DOTBOT_BIN_PATH" \
-d "$BASEDIR" \ -d "$BASEDIR" \
--plugin-dir=tools/dotbot-asdf \ --plugin-dir=tools/dotbot-asdf \
--plugin-dir=tools/dotbot-brew \ --plugin-dir=tools/dotbot-brew \

View File

@@ -77,11 +77,11 @@ Examples:
$BIN Update all git repositories $BIN Update all git repositories
$BIN --verbose Update with detailed output $BIN --verbose Update with detailed output
$BIN --exclude node_modules --exclude vendor $BIN --exclude node_modules --exclude vendor
Update repositories but skip node_modules Update repositories but skip node_modules
and vendor dirs and vendor dirs
$BIN --cleanup Update and clean up merged branches $BIN --cleanup Update and clean up merged branches
$BIN --config ~/.gitupdate.conf $BIN --config ~/.gitupdate.conf
Use options from config file Use options from config file
EOF EOF
exit 0 exit 0
} }

View File

@@ -28,9 +28,9 @@ versions, Git tags, branch tags, and commit SHAs with simple commands.
2. Make it executable: `chmod +x x-gh-get-latest-version` 2. Make it executable: `chmod +x x-gh-get-latest-version`
3. Optionally set up a GitHub token as an environment variable: 3. Optionally set up a GitHub token as an environment variable:
```bash ```bash
export GITHUB_TOKEN="your_personal_access_token" export GITHUB_TOKEN="your_personal_access_token"
``` ```
## Usage ## Usage

View File

@@ -19,9 +19,9 @@ to test the connectivity of a remote host and your route to it.
=head1 AUTHOR =head1 AUTHOR
Steve Steve
-- --
http://www.steve.org.uk/ http://www.steve.org.uk/
=cut =cut
@@ -214,7 +214,7 @@ sub parsedOptions
exit exit
if ( if (
!GetOptions( "help" => \$vars{ 'help' }, !GetOptions( "help" => \$vars{ 'help' },
"verbose" => \$vars{ 'verbose' }, "verbose" => \$vars{ 'verbose' },
"forever" => \$vars{ 'loop' }, "forever" => \$vars{ 'loop' },
"loop" => \$vars{ 'loop' }, "loop" => \$vars{ 'loop' },
@@ -226,4 +226,3 @@ sub parsedOptions
return (%vars); return (%vars);
} }

View File

@@ -1,7 +1,7 @@
# This is the official list of project authors for copyright purposes. # This is the official list of project authors for copyright purposes.
# This file is distinct from the CONTRIBUTORS.txt file. # This file is distinct from the CONTRIBUTORS.txt file.
# See the latter for an explanation. # See the latter for an explanation.
# #
# Names should be added to this file as: # Names should be added to this file as:
# Name or Organization <email address> # Name or Organization <email address>

View File

@@ -18,7 +18,7 @@ with others.
The OFL allows the licensed fonts to be used, studied, modified and The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded, fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives, names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The however, cannot be released under any other type of license. The

0
scripts/install-cheat-purebashbible.sh Normal file → Executable file
View File

View File

@@ -1,3 +1,2 @@
Host github.com Host github.com
User git User git

View File

@@ -2,4 +2,3 @@ Host lakka
User viir User viir
HostName lakka.kapsi.fi HostName lakka.kapsi.fi
IdentityFile ~/.ssh/id_rsa IdentityFile ~/.ssh/id_rsa

View File

@@ -5,9 +5,9 @@ set -euo pipefail
if [ -x "node_modules/bats/bin/bats" ]; then if [ -x "node_modules/bats/bin/bats" ]; then
git ls-files '*.bats' -z | xargs -0 node_modules/bats/bin/bats git ls-files '*.bats' -z | xargs -0 node_modules/bats/bin/bats
elif command -v npx >/dev/null; then elif command -v npx > /dev/null; then
git ls-files '*.bats' -z | xargs -0 npx --yes bats git ls-files '*.bats' -z | xargs -0 npx --yes bats
elif command -v bats >/dev/null; then elif command -v bats > /dev/null; then
git ls-files '*.bats' -z | xargs -0 bats git ls-files '*.bats' -z | xargs -0 bats
else else
echo "bats not installed. Run 'yarn install' first." >&2 echo "bats not installed. Run 'yarn install' first." >&2

0
tests/dfm.bats Normal file → Executable file
View File

0
tests/x-gh-get-latest-version.bats Normal file → Executable file
View File

0
tests/x-localip.bats Normal file → Executable file
View File

0
tests/x-mkd.bats Normal file → Executable file
View File

0
tests/x-path.bats Normal file → Executable file
View File