mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-05-28 18:39:31 +02:00
Compare commits
170 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 51bea5b6ac | |||
| 7c286099b6 | |||
| c2512dc7d9 | |||
| 6a12b600a1 | |||
| 26f4f86ad8 | |||
| 495ed3f938 | |||
| ce49423247 | |||
| 3d4a2d4879 | |||
| c56690d09e | |||
| 86161aeb0c | |||
| 81bc4f64f6 | |||
| d3a2c49822 | |||
| 788f3ecd0c | |||
| 08d64425de | |||
| 762896ddb9 | |||
| 93c7507874 | |||
| a80bb7bd63 | |||
| 8053a2cb8e | |||
| f4697b5eca | |||
| 6ee2cb48cb | |||
| 5f87926bd6 | |||
| b053027899 | |||
| 9febf86f71 | |||
| 93a399e498 | |||
| d34debd3d3 | |||
| 0920e8b567 | |||
| 74a9106917 | |||
| bf1e77e88f | |||
| 07b4f981d1 | |||
| 7731b1f8af | |||
| 4ceec21c14 | |||
| 3bde6d23d9 | |||
| 5d7360294a | |||
| a29f6a2eda | |||
| ae9c127b5c | |||
| 77ca37eab1 | |||
| 306741c2a7 | |||
| 4098b0282e | |||
| 3a6a75c703 | |||
| 319cf87196 | |||
| c3ed6aa4e8 | |||
| c8e76ceff8 | |||
| 04818c5d50 | |||
| fb1d8118e3 | |||
| 551020e0e8 | |||
| 6cfc3c3154 | |||
| addf85e3b4 | |||
| 67c4aa8c7c | |||
| 910b9f322d | |||
| 6885c48513 | |||
| 05bcbab429 | |||
| 63bdadbda2 | |||
| f398c44307 | |||
| d2590d3653 | |||
| 8033e0c61f | |||
| 895ca585be | |||
| 87b2965e1f | |||
| f373f5ee5b | |||
| 914239487c | |||
| f77637d0c0 | |||
| c681e984a0 | |||
| 4fd5c4c374 | |||
| 8207ccbdff | |||
| cf7b5a5be7 | |||
| 8b4e922e5b | |||
| 7f6759ce06 | |||
| 0d569116d2 | |||
| 59f194f05b | |||
| 680e894fb2 | |||
| 73567c3e0d | |||
| ee3e35872a | |||
| d02f3dd7d3 | |||
| 7650a77193 | |||
| 59608f38db | |||
| 3283e990b2 | |||
| df3805c0d4 | |||
| 6c8469bb42 | |||
| f5444150ef | |||
| f26424a344 | |||
| 54d1d559a0 | |||
| 84ab80c752 | |||
| d72bc84265 | |||
| 73363d5ca8 | |||
| 0c23a823c6 | |||
| 6a03dddcbd | |||
| 4db8d0d2cb | |||
| 64a5b6fedd | |||
| 325496cfb3 | |||
| 1992c52352 | |||
| afce99cf38 | |||
| 7576007eb9 | |||
| 3e3365f51f | |||
| be9be72aff | |||
| 2f777ff38f | |||
| b143a89443 | |||
| 94e4598681 | |||
| ce99c3e2d3 | |||
| 4b5a7b1be7 | |||
| f6aa45aa00 | |||
| 3dbc94c3de | |||
| 424b000ab5 | |||
| e38d1936ca | |||
| b9c76b8f22 | |||
| 193b5f3558 | |||
| 023d3fd4e9 | |||
| 57a868228c | |||
| cface0caba | |||
| 28a4fb9a26 | |||
| 74c70653af | |||
| 5cc1583bd6 | |||
| c4fb878d28 | |||
| 2a5a196591 | |||
| a5295500f1 | |||
| 850a7b2c43 | |||
| 7e7f5a796e | |||
| 120dd53a7f | |||
| f539b686bb | |||
| 76ba6eff91 | |||
| f173ae37c0 | |||
| aaa6b77b15 | |||
| 5897019585 | |||
| 6218bb2280 | |||
| 4e552f9b5c | |||
| 195c5cab86 | |||
| 186356854b | |||
| 112ce70ca8 | |||
| 6aad61db73 | |||
| 69b4d96915 | |||
| c12fb46228 | |||
| f9e29233cc | |||
| 5a6cf1b475 | |||
| c15e89e54f | |||
| e948b0bd68 | |||
| e57fc9d479 | |||
| 7ea1e6ae16 | |||
| 4211d18ad1 | |||
| 91ab18fc55 | |||
| 69f77fecca | |||
| f9596089b3 | |||
| 02dce24f61 | |||
| 91e4ab8ef7 | |||
| 1222bb25d0 | |||
| a52f48fbbe | |||
| 6a8e4c24d9 | |||
| 8caece291d | |||
| 3c27adbb95 | |||
| 68c3c8436d | |||
| e5c464fa41 | |||
| 3a826d60f6 | |||
| e3115813a1 | |||
| 6fdc5e7fb9 | |||
| 11cf7738ca | |||
| 91112b9283 | |||
| a47df016af | |||
| 5ffba4685a | |||
| 9fb6e95d72 | |||
| faedc72f24 | |||
| 74ed0135aa | |||
| cde42a295f | |||
| 62b1495c76 | |||
| 2f4aabc197 | |||
| f9fc7cae9c | |||
| 3e834c5b62 | |||
| e814f64228 | |||
| 1092ed997a | |||
| a7ee0b3b5d | |||
| bc967093ff | |||
| 23ff53dcac | |||
| f9d0efd425 | |||
| 1a9ca02329 |
+219
@@ -9,3 +9,222 @@ core*
|
|||||||
!core/
|
!core/
|
||||||
!core.nix
|
!core.nix
|
||||||
!coredns*
|
!coredns*
|
||||||
|
|
||||||
|
# =============== Python.gitignore ===========================
|
||||||
|
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[codz]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
share/python-wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
MANIFEST
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.nox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
*.py.cover
|
||||||
|
.hypothesis/
|
||||||
|
.pytest_cache/
|
||||||
|
cover/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
db.sqlite3
|
||||||
|
db.sqlite3-journal
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
.pybuilder/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Jupyter Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# IPython
|
||||||
|
profile_default/
|
||||||
|
ipython_config.py
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
# For a library or package, you might want to ignore these files since the code is
|
||||||
|
# intended to run in multiple environments; otherwise, check them in:
|
||||||
|
# .python-version
|
||||||
|
|
||||||
|
# pipenv
|
||||||
|
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||||
|
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||||
|
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||||
|
# install all needed dependencies.
|
||||||
|
# Pipfile.lock
|
||||||
|
|
||||||
|
# UV
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
||||||
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||||
|
# commonly ignored for libraries.
|
||||||
|
# uv.lock
|
||||||
|
|
||||||
|
# poetry
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||||
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||||
|
# commonly ignored for libraries.
|
||||||
|
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||||
|
# poetry.lock
|
||||||
|
# poetry.toml
|
||||||
|
|
||||||
|
# pdm
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||||
|
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
||||||
|
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
||||||
|
# pdm.lock
|
||||||
|
# pdm.toml
|
||||||
|
.pdm-python
|
||||||
|
.pdm-build/
|
||||||
|
|
||||||
|
# pixi
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
||||||
|
# pixi.lock
|
||||||
|
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
||||||
|
# in the .venv directory. It is recommended not to include this directory in version control.
|
||||||
|
.pixi
|
||||||
|
|
||||||
|
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||||
|
__pypackages__/
|
||||||
|
|
||||||
|
# Celery stuff
|
||||||
|
celerybeat-schedule
|
||||||
|
celerybeat.pid
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
*.rdb
|
||||||
|
*.aof
|
||||||
|
*.pid
|
||||||
|
|
||||||
|
# RabbitMQ
|
||||||
|
mnesia/
|
||||||
|
rabbitmq/
|
||||||
|
rabbitmq-data/
|
||||||
|
|
||||||
|
# ActiveMQ
|
||||||
|
activemq-data/
|
||||||
|
|
||||||
|
# SageMath parsed files
|
||||||
|
*.sage.py
|
||||||
|
|
||||||
|
# Environments
|
||||||
|
.env
|
||||||
|
.envrc
|
||||||
|
.venv
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env.bak/
|
||||||
|
venv.bak/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
.spyproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# mkdocs documentation
|
||||||
|
/site
|
||||||
|
|
||||||
|
# mypy
|
||||||
|
.mypy_cache/
|
||||||
|
.dmypy.json
|
||||||
|
dmypy.json
|
||||||
|
|
||||||
|
# Pyre type checker
|
||||||
|
.pyre/
|
||||||
|
|
||||||
|
# pytype static type analyzer
|
||||||
|
.pytype/
|
||||||
|
|
||||||
|
# Cython debug symbols
|
||||||
|
cython_debug/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||||
|
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||||
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||||
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
|
# .idea/
|
||||||
|
|
||||||
|
# Abstra
|
||||||
|
# Abstra is an AI-powered process automation framework.
|
||||||
|
# Ignore directories containing user credentials, local state, and settings.
|
||||||
|
# Learn more at https://abstra.io/docs
|
||||||
|
.abstra/
|
||||||
|
|
||||||
|
# Visual Studio Code
|
||||||
|
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
||||||
|
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
||||||
|
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
||||||
|
# you could uncomment the following to ignore the entire vscode folder
|
||||||
|
# .vscode/
|
||||||
|
|
||||||
|
# Ruff stuff:
|
||||||
|
.ruff_cache/
|
||||||
|
|
||||||
|
# PyPI configuration file
|
||||||
|
.pypirc
|
||||||
|
|
||||||
|
# Marimo
|
||||||
|
marimo/_static/
|
||||||
|
marimo/_lsp/
|
||||||
|
__marimo__/
|
||||||
|
|
||||||
|
# Streamlit
|
||||||
|
.streamlit/secrets.toml
|
||||||
|
|||||||
@@ -0,0 +1,204 @@
|
|||||||
|
# AGENTS.md - Guidelines for AI Coding Agents
|
||||||
|
|
||||||
|
This file defines the default operating guide for AI agents working in this Nix Flake repository.
|
||||||
|
Keep changes minimal, verifiable, and safe for multi-host deployments.
|
||||||
|
|
||||||
|
## Scope and Repository Model
|
||||||
|
|
||||||
|
This repository manages:
|
||||||
|
|
||||||
|
- NixOS hosts (desktop + servers)
|
||||||
|
- macOS hosts via nix-darwin
|
||||||
|
- Home Manager profiles shared across platforms
|
||||||
|
- Remote deployments via colmena
|
||||||
|
|
||||||
|
High-level layout:
|
||||||
|
|
||||||
|
```text
|
||||||
|
.
|
||||||
|
├── flake.nix # Flake entry; outputs composed in ./outputs
|
||||||
|
├── Justfile # Primary command entrypoint (uses nushell)
|
||||||
|
├── outputs/
|
||||||
|
│ ├── default.nix
|
||||||
|
│ ├── x86_64-linux/
|
||||||
|
│ ├── aarch64-linux/
|
||||||
|
│ └── aarch64-darwin/
|
||||||
|
├── modules/ # NixOS + darwin modules
|
||||||
|
├── home/ # Home Manager modules
|
||||||
|
├── hosts/ # Host-specific config
|
||||||
|
├── vars/ # Shared variables
|
||||||
|
├── lib/ # Helper functions
|
||||||
|
├── agents/ # Reusable cross-project agent files and installer
|
||||||
|
└── secrets/ # Agenix secret definitions
|
||||||
|
```
|
||||||
|
|
||||||
|
## Ground Rules for Agents
|
||||||
|
|
||||||
|
- Prefer `just` tasks over ad-hoc commands when an equivalent task exists.
|
||||||
|
- Make the smallest reasonable change; avoid drive-by refactors.
|
||||||
|
- Do not commit secrets, generated credentials, or private keys.
|
||||||
|
- Preserve platform guards (`[linux]`, `[macos]`) and host naming conventions.
|
||||||
|
- Run formatting and evaluation checks for touched areas before finishing.
|
||||||
|
|
||||||
|
## Quick Start Workflow (Recommended)
|
||||||
|
|
||||||
|
1. Inspect context:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
just --list
|
||||||
|
rg -n "<symbol-or-option>" modules home hosts outputs
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Implement the change.
|
||||||
|
3. Format:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
just fmt
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Validate:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
just test
|
||||||
|
```
|
||||||
|
|
||||||
|
5. If deployment behavior changed, provide the exact `just` command the user should run (do not run
|
||||||
|
remote deploys unless explicitly requested).
|
||||||
|
|
||||||
|
## Canonical Commands
|
||||||
|
|
||||||
|
### Core quality loop
|
||||||
|
|
||||||
|
```bash
|
||||||
|
just fmt # format Nix files
|
||||||
|
just test # run eval tests: nix eval .#evalTests ...
|
||||||
|
nix flake check # run flake checks + pre-commit style checks
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dependency/input updates
|
||||||
|
|
||||||
|
```bash
|
||||||
|
just up # update all inputs and commit lock file
|
||||||
|
just upp <input> # update one input and commit lock file
|
||||||
|
just up-nix # update nixpkgs-related inputs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Local deploy commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
just local # deploy config for current hostname
|
||||||
|
just local debug # same with verbose/debug mode
|
||||||
|
just niri # deploy "<hostname>-niri" on Linux
|
||||||
|
just niri debug # debug mode
|
||||||
|
```
|
||||||
|
|
||||||
|
### Remote deploy commands (colmena)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
just col <tag> # deploy nodes matching tag
|
||||||
|
just lab # deploy all kubevirt nodes
|
||||||
|
just k3s-prod # deploy k3s production nodes
|
||||||
|
just k3s-test # deploy k3s test nodes
|
||||||
|
```
|
||||||
|
|
||||||
|
### Useful direct commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix eval .#evalTests --show-trace --print-build-logs --verbose
|
||||||
|
nix build .#nixosConfigurations.<host>.config.system.build.toplevel
|
||||||
|
nixos-rebuild switch --flake .#<hostname>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test Structure and Expectations
|
||||||
|
|
||||||
|
Eval tests live under:
|
||||||
|
|
||||||
|
- `outputs/x86_64-linux/tests/`
|
||||||
|
- `outputs/aarch64-linux/tests/`
|
||||||
|
- `outputs/aarch64-darwin/tests/`
|
||||||
|
|
||||||
|
Typical test pair:
|
||||||
|
|
||||||
|
- `expr.nix`
|
||||||
|
- `expected.nix`
|
||||||
|
|
||||||
|
Agent expectations:
|
||||||
|
|
||||||
|
- If logic changes affect shared modules, run `just test`.
|
||||||
|
- If only docs/comments changed, tests may be skipped, but say so explicitly.
|
||||||
|
- If tests cannot run, report why and include the exact failing command.
|
||||||
|
|
||||||
|
## Formatting and Style
|
||||||
|
|
||||||
|
### Formatting tools
|
||||||
|
|
||||||
|
- Nix: `nixfmt` (RFC style, width 100)
|
||||||
|
- Non-Nix: `prettier` (see `.prettierrc.yaml`)
|
||||||
|
- Spelling: `typos` (see `.typos.toml`)
|
||||||
|
|
||||||
|
### Nix style conventions
|
||||||
|
|
||||||
|
- Files use `kebab-case.nix`.
|
||||||
|
- Prefer `inherit (...)` for attribute imports.
|
||||||
|
- Prefer `lib.mkIf`, `lib.optional`, `lib.optionals` for conditional config.
|
||||||
|
- Use `lib.mkDefault` for defaults and `lib.mkForce` only when necessary.
|
||||||
|
- Keep module options documented with `description`.
|
||||||
|
|
||||||
|
Module pattern:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.myFeature = {
|
||||||
|
enable = lib.mkEnableOption "my feature";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.myFeature.enable {
|
||||||
|
# ...
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Platform Notes
|
||||||
|
|
||||||
|
- `Justfile` uses `nu` (`set shell := ["nu", "-c"]`).
|
||||||
|
- Some tasks exist only on Linux or macOS via `[linux]` / `[macos]` guards.
|
||||||
|
- `just local` has different implementations per platform:
|
||||||
|
- Linux: `nixos-switch`
|
||||||
|
- macOS: `darwin-build` + `darwin-switch`
|
||||||
|
|
||||||
|
## Secrets and Safety
|
||||||
|
|
||||||
|
- Secrets are managed with agenix and an external private secrets repo.
|
||||||
|
- Never inline secret values in Nix files, tests, or docs.
|
||||||
|
- Do not run broad remote deploy commands unless requested.
|
||||||
|
- Prefer build/eval validation first, deploy second.
|
||||||
|
|
||||||
|
## Change Review Checklist (for agents)
|
||||||
|
|
||||||
|
Before finishing, verify:
|
||||||
|
|
||||||
|
1. Change is scoped to requested behavior.
|
||||||
|
2. `just fmt` applied (or not needed, stated explicitly).
|
||||||
|
3. `just test` run for config changes (or limitation explained).
|
||||||
|
4. No secrets or machine-specific artifacts added.
|
||||||
|
5. User-facing summary includes what changed and what was validated.
|
||||||
|
|
||||||
|
## Common Pitfalls
|
||||||
|
|
||||||
|
- Editing host-specific files when the change belongs in shared module layers (`modules/` or
|
||||||
|
`home/`).
|
||||||
|
- Forgetting to update both Linux and darwin paths when touching shared abstractions.
|
||||||
|
- Running deployment commands to validate syntax when `nix eval`/`nix build` would be safer.
|
||||||
|
- Introducing hardcoded usernames/paths instead of using `myvars` and existing abstractions.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [README.md](./README.md)
|
||||||
|
- [agents/README.md](./agents/README.md)
|
||||||
|
- [Justfile](./Justfile)
|
||||||
|
- [outputs/README.md](./outputs/README.md)
|
||||||
|
- [hosts/README.md](./hosts/README.md)
|
||||||
|
- [home/README.md](./home/README.md)
|
||||||
|
- [modules/README.md](./modules/README.md)
|
||||||
|
- [secrets/README.md](./secrets/README.md)
|
||||||
@@ -44,14 +44,14 @@ history:
|
|||||||
repl:
|
repl:
|
||||||
nix repl -f flake:nixpkgs
|
nix repl -f flake:nixpkgs
|
||||||
|
|
||||||
# remove all generations older than 7 days
|
# remove all old generations
|
||||||
# on darwin, you may need to switch to root user to run this command
|
# on darwin, you may need to switch to root user to run this command
|
||||||
[group('nix')]
|
[group('nix')]
|
||||||
clean:
|
clean:
|
||||||
# Wipe out NixOS's history
|
# Wipe out NixOS's history
|
||||||
sudo nix profile wipe-history --profile /nix/var/nix/profiles/system --older-than 7d
|
sudo nix profile wipe-history --profile /nix/var/nix/profiles/system
|
||||||
# Wipe out home-manager's history
|
# Wipe out home-manager's history
|
||||||
nix profile wipe-history --profile $"($env.XDG_STATE_HOME)/nix/profiles/home-manager" --older-than 7d
|
nix profile wipe-history --profile $"($env.XDG_STATE_HOME)/nix/profiles/home-manager"
|
||||||
|
|
||||||
# Garbage collect all unused nix store entries
|
# Garbage collect all unused nix store entries
|
||||||
[group('nix')]
|
[group('nix')]
|
||||||
@@ -74,6 +74,12 @@ shell:
|
|||||||
shell:
|
shell:
|
||||||
nix shell nixpkgs#git nixpkgs#neovim
|
nix shell nixpkgs#git nixpkgs#neovim
|
||||||
|
|
||||||
|
# upgrade determinate nix
|
||||||
|
[macos]
|
||||||
|
[group('nix')]
|
||||||
|
nix-upgrade:
|
||||||
|
sudo determinate-nixd upgrade
|
||||||
|
|
||||||
[group('nix')]
|
[group('nix')]
|
||||||
fmt:
|
fmt:
|
||||||
# format the nix files in this repo
|
# format the nix files in this repo
|
||||||
@@ -328,25 +334,26 @@ list-systemd:
|
|||||||
|
|
||||||
# =================================================
|
# =================================================
|
||||||
#
|
#
|
||||||
# Nixpkgs Review via Github Action
|
# GitHub CLI + Nixpkgs Review via Github Action
|
||||||
# https://github.com/ryan4yin/nixpkgs-review-gha
|
# https://github.com/ryan4yin/nixpkgs-review-gha
|
||||||
#
|
#
|
||||||
# =================================================
|
# =================================================
|
||||||
|
|
||||||
|
[group('github')]
|
||||||
|
gh-login:
|
||||||
|
gh auth login -h github.com --skip-ssh-key --git-protocol ssh
|
||||||
|
|
||||||
# Run nixpkgs-review for PR
|
# Run nixpkgs-review for PR
|
||||||
[linux]
|
|
||||||
[group('nixpkgs')]
|
[group('nixpkgs')]
|
||||||
pkg-review pr:
|
pkg-review pr:
|
||||||
gh workflow run review.yml --repo ryan4yin/nixpkgs-review-gha -f x86_64-darwin=no -f post-result=true -f pr={{pr}}
|
gh workflow run review.yml --repo ryan4yin/nixpkgs-review-gha -f x86_64-darwin=no -f post-result=true -f pr={{pr}}
|
||||||
|
|
||||||
# Run package tests for PR
|
# Run package tests for PR
|
||||||
[linux]
|
|
||||||
[group('nixpkgs')]
|
[group('nixpkgs')]
|
||||||
pkg-test pr pname:
|
pkg-test pr pname:
|
||||||
gh workflow run review.yml --repo ryan4yin/nixpkgs-review-gha -f x86_64-darwin=no -f post-result=true -f pr={{pr}} -f extra-args="-p {{pname}}.passthru.tests"
|
gh workflow run review.yml --repo ryan4yin/nixpkgs-review-gha -f x86_64-darwin=no -f post-result=true -f pr={{pr}} -f extra-args="-p {{pname}}.passthru.tests"
|
||||||
|
|
||||||
# View the summary of a workflow
|
# View the summary of a workflow
|
||||||
[linux]
|
|
||||||
[group('nixpkgs')]
|
[group('nixpkgs')]
|
||||||
pkg-summary:
|
pkg-summary:
|
||||||
gh workflow view review.yml --repo ryan4yin/nixpkgs-review-gha
|
gh workflow view review.yml --repo ryan4yin/nixpkgs-review-gha
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ You don't have to go through the pain I've experienced again! Check out my
|
|||||||
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] |
|
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] |
|
||||||
| **Shell** | [Nushell][Nushell] + [Starship][Starship] |
|
| **Shell** | [Nushell][Nushell] + [Starship][Starship] |
|
||||||
| **Media Player** | [mpv][mpv] |
|
| **Media Player** | [mpv][mpv] |
|
||||||
| **Text Editor** | [Neovim][Neovim] |
|
| **Editors / IDE** | [Helix][Helix] (primary), [Neovim][Neovim] (backup) — [configuration & usage](./home/base/core/editors/) |
|
||||||
| **Fonts** | [Nerd fonts][Nerd fonts] |
|
| **Fonts** | [Nerd fonts][Nerd fonts] |
|
||||||
| **Image Viewer** | [imv][imv] |
|
| **Image Viewer** | [imv][imv] |
|
||||||
| **Screenshot Software** | Niri's builtin function |
|
| **Screenshot Software** | Niri's builtin function |
|
||||||
@@ -85,9 +85,14 @@ Wallpapers: https://github.com/ryan4yin/wallpapers
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Neovim
|
## Editors / IDE
|
||||||
|
|
||||||
See [./home/base/tui/editors/neovim/](./home/base/tui/editors/neovim/) for details.
|
- **Terminal editors:** [./home/base/core/editors/](./home/base/core/editors/) — Helix / Neovim,
|
||||||
|
`$EDITOR`, docs.
|
||||||
|
- **VS Code (GUI, Home Manager on NixOS):**
|
||||||
|
[./home/linux/gui/base/editors.nix](./home/linux/gui/base/editors.nix).
|
||||||
|
- **LLM coding agents:** [./agents](./agents/) — rules, installers, CLI snippets; see
|
||||||
|
[./agents/README.md](./agents/README.md).
|
||||||
|
|
||||||
## Secrets Management
|
## Secrets Management
|
||||||
|
|
||||||
@@ -177,6 +182,7 @@ Other dotfiles that inspired me:
|
|||||||
[Btop]: https://github.com/aristocratos/btop
|
[Btop]: https://github.com/aristocratos/btop
|
||||||
[mpv]: https://github.com/mpv-player/mpv
|
[mpv]: https://github.com/mpv-player/mpv
|
||||||
[Zellij]: https://github.com/zellij-org/zellij
|
[Zellij]: https://github.com/zellij-org/zellij
|
||||||
|
[Helix]: https://github.com/helix-editor/helix
|
||||||
[Neovim]: https://github.com/neovim/neovim
|
[Neovim]: https://github.com/neovim/neovim
|
||||||
[AstroNvim]: https://github.com/AstroNvim/AstroNvim
|
[AstroNvim]: https://github.com/AstroNvim/AstroNvim
|
||||||
[imv]: https://sr.ht/~exec64/imv/
|
[imv]: https://sr.ht/~exec64/imv/
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
# RULES - Global Agent Baseline
|
||||||
|
|
||||||
|
This file defines the cross-project baseline for AI coding agents. It focuses on safety, boundaries,
|
||||||
|
and portable behavior.
|
||||||
|
|
||||||
|
## 1) Instruction Priority
|
||||||
|
|
||||||
|
Apply instructions in this order:
|
||||||
|
|
||||||
|
1. Runtime system/developer instructions
|
||||||
|
2. User task request
|
||||||
|
3. Project-local policy (`AGENTS.md`, `CLAUDE.md`, repo docs)
|
||||||
|
4. This global RULES
|
||||||
|
|
||||||
|
If rules conflict, follow the higher-priority source and state the conflict briefly.
|
||||||
|
|
||||||
|
## 2) Hard Safety Boundaries (MUST NOT)
|
||||||
|
|
||||||
|
- MUST NOT read/write outside the approved workspace.
|
||||||
|
- MUST NOT perform broad operations on the entire home directory.
|
||||||
|
- MUST NOT mutate remote Git state unless explicitly requested.
|
||||||
|
- Examples: `git push`, creating/updating remote PRs/Issues via `gh`.
|
||||||
|
- MUST NOT auto-run remote-mutating commands unless explicitly requested.
|
||||||
|
- Examples: `kubectl apply/delete`, `helm upgrade`, `terraform apply`, remote `ssh` mutation.
|
||||||
|
- MUST NOT use destructive/force/delete options EVEN if explicitly requested.
|
||||||
|
- Examples: `--force`, `rm -rf`, `git reset --hard`, `gh repo delete`, `terraform destroy`
|
||||||
|
- MUST NOT expose or commit secrets (tokens, keys, kubeconfig credentials, passwords).
|
||||||
|
|
||||||
|
## 3) Security and Secrets Handling
|
||||||
|
|
||||||
|
- Never write secret literals into tracked files.
|
||||||
|
- Use environment variables, secret managers, or placeholders.
|
||||||
|
- Redact sensitive output in logs and summaries.
|
||||||
|
- For infra/IaC changes, prefer plan/eval/check before apply/switch.
|
||||||
|
|
||||||
|
## 4) Scope Discipline
|
||||||
|
|
||||||
|
- Keep changes strictly within requested scope.
|
||||||
|
- Do not refactor unrelated areas unless user asks.
|
||||||
|
- Preserve backward compatibility unless a breaking change is explicitly requested.
|
||||||
|
|
||||||
|
## 5) Change Hygiene
|
||||||
|
|
||||||
|
- Keep diffs minimal and reviewable.
|
||||||
|
- Group logically related edits together.
|
||||||
|
- Do not revert user/unrelated changes unless explicitly asked.
|
||||||
|
- Do not claim verification you did not run.
|
||||||
|
|
||||||
|
## 6) Tooling Defaults
|
||||||
|
|
||||||
|
- Prefer structural search tools first for code find/replace (`ast-grep`/`jq`/`yq`), then text tools
|
||||||
|
(`rg`, `fd`).
|
||||||
|
- Prefer project task runners (`just`, `make`, `task`, `npm scripts`, etc.) over ad-hoc commands
|
||||||
|
when equivalent.
|
||||||
|
- If a required command is not already available, use only `nix run`, `flake.nix`/`shell.nix` or
|
||||||
|
`uv`/`pnpm` to provide it.
|
||||||
|
- If that is still insufficient, stop and ask the user to prepare the environment instead of using
|
||||||
|
any other installation method.
|
||||||
|
- Use `gh` CLI for GitHub operations, especially code/PR/issue search and inspection.
|
||||||
|
|
||||||
|
## 7) Environment Defaults
|
||||||
|
|
||||||
|
- Primary OS: NixOS.
|
||||||
|
- Shell: default to `nushell`, `bash` also exists.
|
||||||
|
|
||||||
|
## 8) Script Engineering Principles
|
||||||
|
|
||||||
|
Treat scripts as interruptible jobs that must be diagnosable and safe to rerun:
|
||||||
|
|
||||||
|
- Split workflows into explicit stages; allow running a selected stage via flags/arguments.
|
||||||
|
- Make reruns idempotent; persist progress after each stage and support resume.
|
||||||
|
- Cache external data with invalidation strategy to speed retries and improve reproducibility.
|
||||||
|
- For HTTP flows, separate transport success from business success; support retry/backoff.
|
||||||
|
- Provide independent verification commands/checks for key outputs (counts, samples, invariants).
|
||||||
|
|
||||||
|
## 9) Communication Defaults
|
||||||
|
|
||||||
|
- Respond in the language the user is currently using, prefer English & Chinese.
|
||||||
|
- Code, commands, identifiers, and code comments: English.
|
||||||
|
- Be concise, concrete, and action-oriented.
|
||||||
|
|
||||||
|
## 10) Project Overlay
|
||||||
|
|
||||||
|
Project-local policy may add stricter constraints (build/test/deploy/style/ownership/environment).
|
||||||
|
It must not weaken this baseline.
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# agents
|
||||||
|
|
||||||
|
Reusable, symlink-first agent resources shared across projects.
|
||||||
|
|
||||||
|
This directory is the canonical source for baseline agent rules and supporting command references.
|
||||||
|
The primary workflow is to symlink files from here into each agent runtime/config location.
|
||||||
|
|
||||||
|
## What this directory contains
|
||||||
|
|
||||||
|
- `AGENTS.md`: global baseline rules for coding agents.
|
||||||
|
- `permissions.md`: permission policies for agent tool access.
|
||||||
|
- `install-rules.py`: installs the baseline by creating symlinks in supported agent config dirs.
|
||||||
|
- `install-cli.md`: curated CLI install/update command snippets.
|
||||||
|
- `install-skills.md`: curated `npx skills` command snippets.
|
||||||
|
|
||||||
|
## Core workflow
|
||||||
|
|
||||||
|
1. Maintain shared rules in `agents/AGENTS.md`.
|
||||||
|
2. Define permission policies in `agents/permissions.md`.
|
||||||
|
3. Run `install-rules.py` to refresh symlinks in local agent homes.
|
||||||
|
4. Use `install-cli.md` and `install-skills.md` as reference snippets when needed.
|
||||||
|
|
||||||
|
## Install baseline rules (symlink-based)
|
||||||
|
|
||||||
|
Run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 agents/install-rules.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Current targets:
|
||||||
|
|
||||||
|
- Codex: `AGENTS.md` -> `${CODEX_HOME:-~/.codex}/AGENTS.md`
|
||||||
|
- OpenCode: `AGENTS.md` -> `${XDG_CONFIG_HOME:-~/.config}/opencode/AGENTS.md`
|
||||||
|
- Claude Code: `AGENTS.md` -> `~/.claude/CLAUDE.md`
|
||||||
|
|
||||||
|
Behavior:
|
||||||
|
|
||||||
|
- Each target is handled independently.
|
||||||
|
- Missing destination directories are skipped.
|
||||||
|
- Existing destination file/symlink is replaced with a symlink to this repo source file.
|
||||||
|
|
||||||
|
## About `install-cli.md` and `install-skills.md`
|
||||||
|
|
||||||
|
Use them as snippet libraries:
|
||||||
|
|
||||||
|
- review the commands
|
||||||
|
- select what you need
|
||||||
|
- run selected commands manually
|
||||||
|
|
||||||
|
## Conventions
|
||||||
|
|
||||||
|
- Keep files portable and reviewable.
|
||||||
|
- Keep secrets and machine-specific credentials out of this directory.
|
||||||
|
- Keep guidance generic enough to reuse across multiple agent environments.
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Maintain one reusable source of truth for agent setup that stays simple to sync and easy to evolve.
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# Agent CLI Commands
|
||||||
|
|
||||||
|
Reference commands for installing and updating agent CLIs. Run only the commands you need.
|
||||||
|
|
||||||
|
## Install CLIs
|
||||||
|
|
||||||
|
Installed via Nix:
|
||||||
|
|
||||||
|
- codex
|
||||||
|
- cursor-cli
|
||||||
|
- claude-code
|
||||||
|
- opencode
|
||||||
|
|
||||||
|
Install Manually:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# kimi-cli
|
||||||
|
uv tool install --python 3.13 kimi-cli
|
||||||
|
uv tool upgrade kimi-cli --no-cache
|
||||||
|
```
|
||||||
|
|
||||||
|
## Optional tooling
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# context7: up-to-date docs and code examples for LLMs and agents
|
||||||
|
npx ctx7 setup
|
||||||
|
```
|
||||||
|
|
||||||
|
## Update npm-installed agent tools
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm update -g
|
||||||
|
```
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def install_one(target_dir: Path, source_file: Path, target_name: str) -> None:
|
||||||
|
if not target_dir.exists():
|
||||||
|
print(f"skipped {target_dir} (not found)")
|
||||||
|
return
|
||||||
|
|
||||||
|
target_file = target_dir / target_name
|
||||||
|
|
||||||
|
if target_file.exists() or target_file.is_symlink():
|
||||||
|
target_file.unlink()
|
||||||
|
|
||||||
|
target_file.symlink_to(source_file)
|
||||||
|
print(f"linked {target_file} -> {source_file}")
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
script_dir = Path(__file__).resolve().parent
|
||||||
|
agents_file = script_dir / "AGENTS.md"
|
||||||
|
|
||||||
|
if not agents_file.is_file():
|
||||||
|
print(f"Missing source file: {agents_file}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
codex_dir = Path(os.environ.get("CODEX_HOME", "~/.codex")).expanduser()
|
||||||
|
xdg_config_home = Path(os.environ.get("XDG_CONFIG_HOME", "~/.config")).expanduser()
|
||||||
|
opencode_dir = xdg_config_home / "opencode"
|
||||||
|
claude_dir = Path("~/.claude").expanduser()
|
||||||
|
install_one(codex_dir, agents_file, "AGENTS.md")
|
||||||
|
install_one(opencode_dir, agents_file, "AGENTS.md")
|
||||||
|
install_one(claude_dir, agents_file, "CLAUDE.md")
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
# Agent Skills Commands
|
||||||
|
|
||||||
|
Reference commands for listing, installing, and updating skills via `npx skills`. Run only the
|
||||||
|
commands you need.
|
||||||
|
|
||||||
|
## Inspect and update installed skills
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# list all installed skills (project + global)
|
||||||
|
npx skills list
|
||||||
|
|
||||||
|
# list only global skills
|
||||||
|
npx skills ls -g
|
||||||
|
|
||||||
|
# check for updates
|
||||||
|
npx skills check
|
||||||
|
|
||||||
|
# update all installed skills
|
||||||
|
npx skills update
|
||||||
|
|
||||||
|
# remove from global scope
|
||||||
|
npx skills remove --global web-design-guidelines
|
||||||
|
```
|
||||||
|
|
||||||
|
## Discover skills from repositories
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# list skills in a repository
|
||||||
|
npx skills add vercel-labs/agent-skills --list
|
||||||
|
```
|
||||||
|
|
||||||
|
## Install commonly used skill packs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# superpowers
|
||||||
|
npx skills add -g obra/superpowers --agent '*' --skill '*'
|
||||||
|
|
||||||
|
# github skills
|
||||||
|
npx skills add -g github/awesome-copilot --agent '*' --skill 'git-commit' --skill 'gh-cli'
|
||||||
|
|
||||||
|
# find skills
|
||||||
|
npx skills add -g vercel-labs/skills --agent '*'
|
||||||
|
|
||||||
|
# anthropic skills
|
||||||
|
npx skills add -g anthropics/skills --agent '*' --skill 'skill-creator' --skill 'pdf'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Optional packs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx skills add -g pbakaus/impeccable --agent '*' --skill '*'
|
||||||
|
|
||||||
|
npx skills add -g coreyhaines31/marketingskills --agent '*' --skill '*'
|
||||||
|
|
||||||
|
npx skills add -g phuryn/pm-skills --agent '*' --skill '*'
|
||||||
|
```
|
||||||
|
|
||||||
|
References:
|
||||||
|
|
||||||
|
- https://github.com/vercel-labs/skills
|
||||||
|
- https://github.com/pbakaus/impeccable
|
||||||
|
- https://github.com/coreyhaines31/marketingskills
|
||||||
|
- https://github.com/phuryn/pm-skills
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
# Permissions Configuration
|
||||||
|
|
||||||
|
This document records the current permission requirements for AI agents operating in this
|
||||||
|
repository.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
| Environment | Policy |
|
||||||
|
| ------------------------ | ------------------------------------------- |
|
||||||
|
| **Personal workstation** | Restrictive - protect user's daily workflow |
|
||||||
|
| **Homelab VMs** | Permissive - agents have full autonomy |
|
||||||
|
|
||||||
|
The permissions below apply to **personal workstation** only. For homelab VMs, almost everything is
|
||||||
|
allowed except destructive operations on production systems.
|
||||||
|
|
||||||
|
## Default Policy
|
||||||
|
|
||||||
|
| Tool | Permission |
|
||||||
|
| ---------------- | ---------- |
|
||||||
|
| `*` (all others) | ask |
|
||||||
|
|
||||||
|
## File Read Permissions
|
||||||
|
|
||||||
|
| Pattern | Permission |
|
||||||
|
| --------------- | ---------- |
|
||||||
|
| `*` (all files) | allow |
|
||||||
|
| `*.env` | deny |
|
||||||
|
| `*.env.*` | deny |
|
||||||
|
| `*.env.example` | allow |
|
||||||
|
| `*.pem` | deny |
|
||||||
|
| `*.key` | deny |
|
||||||
|
| `*kubeconfig*` | deny |
|
||||||
|
| `.ssh/**` | deny |
|
||||||
|
| `.aws/**` | deny |
|
||||||
|
| `.kube/**` | deny |
|
||||||
|
| `.gnupg/**` | deny |
|
||||||
|
|
||||||
|
## Always Allowed Tools
|
||||||
|
|
||||||
|
These tools run without prompting:
|
||||||
|
|
||||||
|
- `glob`
|
||||||
|
- `grep`
|
||||||
|
- `lsp`
|
||||||
|
- `question`
|
||||||
|
- `skill`
|
||||||
|
- `todowrite`
|
||||||
|
- `webfetch`
|
||||||
|
- `websearch`
|
||||||
|
- `codesearch`
|
||||||
|
- `edit` (covers `write` and `apply_patch`)
|
||||||
|
|
||||||
|
## Bash Command Permissions
|
||||||
|
|
||||||
|
### Always Allowed (Read-only operations)
|
||||||
|
|
||||||
|
**Git:**
|
||||||
|
|
||||||
|
- `git status`, `git diff`, `git log`, `git show`, `git branch`, `git remote`
|
||||||
|
|
||||||
|
**Kubernetes:**
|
||||||
|
|
||||||
|
- `kubectl get`, `kubectl describe`, `kubectl logs`, `kubectl top`
|
||||||
|
- `kubectl api-resources`, `kubectl api-versions`
|
||||||
|
- `kubectl config view`, `kubectl config get-contexts`
|
||||||
|
- `kubectl explain`
|
||||||
|
- `kubectl kustomize`, `kustomize build`, `kustomize version`
|
||||||
|
|
||||||
|
**Terraform:**
|
||||||
|
|
||||||
|
- `terraform plan`, `terraform show`, `terraform state list`, `terraform state show`
|
||||||
|
- `terraform output`, `terraform version`, `terraform providers`, `terraform fmt`
|
||||||
|
|
||||||
|
**GitHub CLI:**
|
||||||
|
|
||||||
|
- `gh repo view/list`, `gh issue view/list`, `gh pr view/list/diff/checks`
|
||||||
|
- `gh api`, `gh search`, `gh gist list/view`
|
||||||
|
- `gh release view/list`, `gh workflow list/view`, `gh run list/view`
|
||||||
|
- `gh status`, `gh auth status`
|
||||||
|
|
||||||
|
**Helm:**
|
||||||
|
|
||||||
|
- `helm list`, `helm get`, `helm show`, `helm search`
|
||||||
|
- `helm repo list`, `helm status`, `helm version`, `helm template`
|
||||||
|
|
||||||
|
**Google Cloud:**
|
||||||
|
|
||||||
|
- `gcloud * list`, `gcloud * describe`, `gcloud * get-iam-policy`
|
||||||
|
- `gcloud config list`, `gcloud auth list`, `gcloud version`
|
||||||
|
|
||||||
|
**Nix:**
|
||||||
|
|
||||||
|
- `nix eval`, `nix build`, `nix flake show`, `nix flake metadata`
|
||||||
|
- `nix flake check`, `nix flake lock`
|
||||||
|
- `nix profile list`, `nix profile history`
|
||||||
|
- `nix store verify`, `nix store ls`, `nix store path-info`
|
||||||
|
- `nix search`, `nix doctor`, `nix --version`
|
||||||
|
- `nixos-rebuild build`, `darwin-rebuild build`
|
||||||
|
- `nom build`
|
||||||
|
|
||||||
|
**Just:**
|
||||||
|
|
||||||
|
- `just --list`, `just --show`, `just --dry-run`
|
||||||
|
|
||||||
|
**Linters & Formatters:**
|
||||||
|
|
||||||
|
- `statix check`, `deadnix`, `nixfmt --check`
|
||||||
|
- `shellcheck`, `hadolint`, `actionlint`
|
||||||
|
- `ruff check`, `clippy`, `prettier --check`
|
||||||
|
- `tokei`
|
||||||
|
|
||||||
|
**System diagnostics:**
|
||||||
|
|
||||||
|
- `systemctl status`, `systemctl list-units`, `systemctl show`
|
||||||
|
- `journalctl -u`, `journalctl --since`
|
||||||
|
- `lspci`, `lsusb`, `lsblk`, `df`, `free`, `uptime`, `uname -a`
|
||||||
|
- `sensors`, `lsof`
|
||||||
|
|
||||||
|
**Git (extended):**
|
||||||
|
|
||||||
|
- `git tag`, `git blame`, `git reflog`, `git stash list`
|
||||||
|
- `git lfs status`, `git lfs ls-files`
|
||||||
|
|
||||||
|
**Development tools:**
|
||||||
|
|
||||||
|
- `go version`, `go env`, `go list`, `go doc`, `go vet`
|
||||||
|
- `cargo --version`, `cargo tree`, `cargo metadata`
|
||||||
|
- `python3 --version`, `python3 -m py_compile`
|
||||||
|
- `node --version`, `pnpm list`, `uv pip list`
|
||||||
|
|
||||||
|
**General utilities:**
|
||||||
|
|
||||||
|
- `rg`, `fd`, `cp`, `mv`, `chmod`
|
||||||
|
- `ls`, `cat`, `head`, `tail`, `wc`, `find`, `which`
|
||||||
|
- `echo`, `pwd`, `date`, `env`, `printenv`
|
||||||
|
- `file`, `stat`, `du`, `tree`, `bat`, `eza`
|
||||||
|
- `jq`, `yq`, `tldr`
|
||||||
|
- `mkdir`, `rmdir`, `grep`
|
||||||
|
|
||||||
|
### Requires Confirmation
|
||||||
|
|
||||||
|
| Command | Permission |
|
||||||
|
| ---------- | ---------- |
|
||||||
|
| `rm *` | ask |
|
||||||
|
| `rm -rf *` | ask |
|
||||||
|
|
||||||
|
### Always Denied
|
||||||
|
|
||||||
|
| Command | Permission |
|
||||||
|
| -------- | ---------- |
|
||||||
|
| `sudo *` | deny |
|
||||||
|
|
||||||
|
## Homelab VM Permissions
|
||||||
|
|
||||||
|
For agents running in dedicated homelab VMs, permissions are significantly relaxed:
|
||||||
|
|
||||||
|
| Category | Permission |
|
||||||
|
| -------------------- | --------------------- |
|
||||||
|
| `bash` | allow (most commands) |
|
||||||
|
| `edit` | allow |
|
||||||
|
| `write` | allow |
|
||||||
|
| `task` | allow |
|
||||||
|
| `external_directory` | allow |
|
||||||
|
| `rm` | allow |
|
||||||
|
|
||||||
|
**Still restricted in homelab VMs:**
|
||||||
|
|
||||||
|
- Production cluster destructive operations (`kubectl delete`, `helm uninstall`)
|
||||||
|
- Infrastructure teardown (`terraform destroy`)
|
||||||
|
- Secret exposure in logs
|
||||||
|
|
||||||
|
## Other Tool Permissions
|
||||||
|
|
||||||
|
| Tool | Permission |
|
||||||
|
| -------------------- | ---------- |
|
||||||
|
| `edit` | allow |
|
||||||
|
| `task` | ask |
|
||||||
|
| `external_directory` | ask |
|
||||||
|
| `doom_loop` | deny |
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
- **Default policy**: All tools `ask` — only explicitly whitelisted tools auto-allow
|
||||||
|
- **File operations**: `read`, `glob`, `grep`, `edit`, `write` all allowed in workspace
|
||||||
|
- **Nix operations**: Build/eval/flake commands auto-allowed (writes to store only)
|
||||||
|
- **Linting & formatting**: All check commands auto-allowed
|
||||||
|
- **System diagnostics**: Read-only system info auto-allowed
|
||||||
|
- **Sensitive files**: Credentials, keys, and cloud configs are blocked
|
||||||
|
- **Bash commands**: Read-only ops auto-allowed; `rm` requires confirmation; `sudo` blocked
|
||||||
|
- **Scope control**: `task` and `external_directory` require approval
|
||||||
Generated
+337
-379
File diff suppressed because it is too large
Load Diff
@@ -16,11 +16,13 @@
|
|||||||
nixConfig = {
|
nixConfig = {
|
||||||
# substituers will be appended to the default substituters when fetching packages
|
# substituers will be appended to the default substituters when fetching packages
|
||||||
extra-substituters = [
|
extra-substituters = [
|
||||||
|
"https://cache.numtide.com"
|
||||||
# "https://nix-gaming.cachix.org"
|
# "https://nix-gaming.cachix.org"
|
||||||
# "https://nixpkgs-wayland.cachix.org"
|
# "https://nixpkgs-wayland.cachix.org"
|
||||||
# "https://install.determinate.systems"
|
# "https://install.determinate.systems"
|
||||||
];
|
];
|
||||||
extra-trusted-public-keys = [
|
extra-trusted-public-keys = [
|
||||||
|
"niks3.numtide.com-1:DTx8wZduET09hRmMtKdQDxNNthLQETkc/yaX7M4qK0g="
|
||||||
# "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
|
# "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
|
||||||
# "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
|
# "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
|
||||||
# "cache.flakehub.com-3:hJuILl5sVK4iKm86JzgdXW12Y2Hwd5G07qKtHTOcDCM="
|
# "cache.flakehub.com-3:hJuILl5sVK4iKm86JzgdXW12Y2Hwd5G07qKtHTOcDCM="
|
||||||
@@ -65,6 +67,11 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nixvim = {
|
||||||
|
url = "github:nix-community/nixvim";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
# https://github.com/catppuccin/nix
|
# https://github.com/catppuccin/nix
|
||||||
catppuccin = {
|
catppuccin = {
|
||||||
url = "github:catppuccin/nix";
|
url = "github:catppuccin/nix";
|
||||||
@@ -72,7 +79,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
lanzaboote = {
|
lanzaboote = {
|
||||||
url = "github:nix-community/lanzaboote/v0.4.3";
|
url = "github:nix-community/lanzaboote/v1.0.0";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -95,7 +102,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
disko = {
|
disko = {
|
||||||
url = "github:nix-community/disko/v1.11.0";
|
url = "github:nix-community/disko/v1.13.0";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -120,27 +127,19 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
ghostty = {
|
|
||||||
url = "github:ghostty-org/ghostty/tip"; # Latest Continuous Release
|
|
||||||
};
|
|
||||||
|
|
||||||
blender-bin = {
|
blender-bin = {
|
||||||
url = "github:edolstra/nix-warez?dir=blender";
|
url = "github:edolstra/nix-warez?dir=blender";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
nixos-apple-silicon = {
|
nixos-apple-silicon = {
|
||||||
# asahi-6.17.7-2
|
# asahi-6.18.9
|
||||||
url = "github:nix-community/nixos-apple-silicon";
|
url = "github:nix-community/nixos-apple-silicon";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
helix = {
|
# AI coding agents
|
||||||
# Helix with steel as plugin system
|
llm-agents.url = "github:numtide/llm-agents.nix";
|
||||||
# https://github.com/helix-editor/helix/pull/8675
|
|
||||||
url = "github:mattwparas/helix/steel-event-system";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# -------------- Gaming ---------------------
|
# -------------- Gaming ---------------------
|
||||||
|
|
||||||
@@ -148,10 +147,6 @@
|
|||||||
url = "github:fufexan/nix-gaming";
|
url = "github:fufexan/nix-gaming";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
aagl = {
|
|
||||||
url = "github:ezKEa/aagl-gtk-on-nix/release-25.11";
|
|
||||||
# inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
######################## Some non-flake repositories #########################################
|
######################## Some non-flake repositories #########################################
|
||||||
|
|
||||||
@@ -184,8 +179,5 @@
|
|||||||
url = "github:ryan4yin/nur-packages";
|
url = "github:ryan4yin/nur-packages";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
# for waydroid
|
|
||||||
# nur-ataraxiasjel.url = "github:AtaraxiaSjel/nur";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,20 +15,21 @@ let
|
|||||||
pname = "wechat";
|
pname = "wechat";
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/we/wechat/package.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/we/wechat/package.nix
|
||||||
sources = {
|
sources = {
|
||||||
|
# use https://web.archive.org/save to archive the Linux versions
|
||||||
|
# add `if_` at the end of timestamps to avoid toolbar insertion
|
||||||
|
# for a more complicated guide, see https://en.wikipedia.org/wiki/Help:Using_the_Wayback_Machine
|
||||||
aarch64-linux = {
|
aarch64-linux = {
|
||||||
version = "4.1.0.13";
|
version = "4.1.1.4";
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
# url = "https://web.archive.org/web/20251209092116if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_arm64.AppImage";
|
url = "https://web.archive.org/web/20260311102559if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_arm64.AppImage";
|
||||||
url = "https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_arm64.AppImage";
|
hash = "sha256-YlWJxT62tXDaNwYVpsPMC5elFH8fsbI1HjTQn6ePiPo=";
|
||||||
hash = "sha256-/d5crM6IGd0k0fSlBSQx4TpIVX/8iib+an0VMkWMNdw=";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
x86_64-linux = {
|
x86_64-linux = {
|
||||||
version = "4.1.0.13";
|
version = "4.1.1.4";
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
# url = "https://web.archive.org/web/20251219062558if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage";
|
url = "https://web.archive.org/web/20260311102439if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage";
|
||||||
url = "https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage";
|
hash = "sha256-XxAvFnlljqurGPDgRr+DnuCKbdVvgXBPh02DLHY3Oz8=";
|
||||||
hash = "sha256-+r5Ebu40GVGG2m2lmCFQ/JkiDsN/u7XEtnLrB98602w=";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ in
|
|||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
(_: super: {
|
(_: super: {
|
||||||
nixpaks = {
|
nixpaks = {
|
||||||
qq = wrapper pkgs-master ./qq.nix;
|
qq = wrapper super ./qq.nix;
|
||||||
telegram-desktop = wrapper super ./telegram-desktop.nix;
|
telegram-desktop = wrapper super ./telegram-desktop.nix;
|
||||||
firefox = wrapper super ./firefox.nix;
|
firefox = wrapper super ./firefox.nix;
|
||||||
};
|
};
|
||||||
|
|||||||
+9
-1
@@ -15,7 +15,7 @@ home/
|
|||||||
│ │ ├── terminal/ # Terminal emulators (Kitty, Alacritty, etc.)
|
│ │ ├── terminal/ # Terminal emulators (Kitty, Alacritty, etc.)
|
||||||
│ │ └── ...
|
│ │ └── ...
|
||||||
│ ├── tui/ # Terminal/TUI applications
|
│ ├── tui/ # Terminal/TUI applications
|
||||||
│ │ ├── editors/ # TUI editors and related tools
|
│ │ ├── editors/ # Heavy editor/tooling pkgs only (`packages.nix`; core editors live under `core/editors`)
|
||||||
│ │ ├── encryption/ # GPG, password-store, etc.
|
│ │ ├── encryption/ # GPG, password-store, etc.
|
||||||
│ │ └── ...
|
│ │ └── ...
|
||||||
│ └── home.nix # Main home manager entry point
|
│ └── home.nix # Main home manager entry point
|
||||||
@@ -26,6 +26,9 @@ home/
|
|||||||
│ │ └── ...
|
│ │ └── ...
|
||||||
│ ├── editors/ # Linux-specific editors
|
│ ├── editors/ # Linux-specific editors
|
||||||
│ └── ...
|
│ └── ...
|
||||||
|
├── hosts/ # Host-specific home manager entry modules
|
||||||
|
│ ├── linux/ # Linux host home modules (ai, shoukei, k3s-*, etc.)
|
||||||
|
│ └── darwin/ # macOS host home modules (fern, frieren)
|
||||||
└── darwin/ # macOS-specific home manager configurations
|
└── darwin/ # macOS-specific home manager configurations
|
||||||
├── aerospace/ # macOS window manager
|
├── aerospace/ # macOS window manager
|
||||||
├── proxy/ # Proxy configurations
|
├── proxy/ # Proxy configurations
|
||||||
@@ -46,3 +49,8 @@ home/
|
|||||||
3. **darwin**: macOS-specific configuration
|
3. **darwin**: macOS-specific configuration
|
||||||
- macOS applications and services
|
- macOS applications and services
|
||||||
- Platform-specific integrations (Aerospace, Squirrel, etc.)
|
- Platform-specific integrations (Aerospace, Squirrel, etc.)
|
||||||
|
|
||||||
|
4. **hosts**: Host entry modules for Home Manager
|
||||||
|
- Each output should reference only one host home module file
|
||||||
|
- Host modules are responsible for importing shared stacks (`home/linux/*` or `home/darwin`) and
|
||||||
|
applying host overrides
|
||||||
|
|||||||
+2
-4
@@ -10,9 +10,7 @@ systems.
|
|||||||
- **core/**: Essential cross-platform configurations
|
- **core/**: Essential cross-platform configurations
|
||||||
- **core.nix**: Minimal home-manager configuration
|
- **core.nix**: Minimal home-manager configuration
|
||||||
- **shells/**: Shell configurations (bash, zsh, fish, nu)
|
- **shells/**: Shell configurations (bash, zsh, fish, nu)
|
||||||
- **editors/**: Text editor configurations
|
- **editors/**: Helix + Neovim (Home Manager) and usage docs (`README.md` per editor)
|
||||||
- **neovim/**: Neovim with custom plugins and settings
|
|
||||||
- **helix/**: Helix editor configuration
|
|
||||||
- **btop.nix**: System monitoring tools
|
- **btop.nix**: System monitoring tools
|
||||||
- **git.nix**: Git configuration and aliases
|
- **git.nix**: Git configuration and aliases
|
||||||
- **npm.nix**: Node.js package management
|
- **npm.nix**: Node.js package management
|
||||||
@@ -39,7 +37,7 @@ systems.
|
|||||||
- **cloud/**: Cloud development tools (Terraform, etc.)
|
- **cloud/**: Cloud development tools (Terraform, etc.)
|
||||||
- **container.nix**: Container tools (Docker, Podman)
|
- **container.nix**: Container tools (Docker, Podman)
|
||||||
- **dev-tools.nix**: Terminal-based development tools
|
- **dev-tools.nix**: Terminal-based development tools
|
||||||
- **editors/**: Terminal editor configurations
|
- **editors/**: Extra terminal editor Nix (see `core/editors/` for docs and baseline enables)
|
||||||
- **encryption/**: Encryption and security tools
|
- **encryption/**: Encryption and security tools
|
||||||
- **gpg/**: GPG key management
|
- **gpg/**: GPG key management
|
||||||
- **password-store/**: Password management with pass
|
- **password-store/**: Password management with pass
|
||||||
|
|||||||
@@ -71,5 +71,3 @@ Linting is distinct from Formatting because:
|
|||||||
|
|
||||||
Formatters and Linters process each file independently, they do not need to know about other files
|
Formatters and Linters process each file independently, they do not need to know about other files
|
||||||
in the project.
|
in the project.
|
||||||
|
|
||||||
- [ ]
|
|
||||||
@@ -1,10 +1,26 @@
|
|||||||
# Editors
|
# Editors
|
||||||
|
|
||||||
This directory contains editor configurations that are shared across different environments.
|
Shared editor configuration and **usage notes** for terminal-focused editing.
|
||||||
|
|
||||||
## Available Editors
|
## Roles
|
||||||
|
|
||||||
- **neovim/**: Neovim configuration with AstroNvim
|
- **Helix** (`helix/`): Primary TUI editor — batteries-included, small attack surface. `$EDITOR` /
|
||||||
- **helix/**: Helix editor configuration
|
`$VISUAL` default to `hx` (`session-env.nix`).
|
||||||
|
- **Neovim** (`neovim/`): Backup editor — classic vim-style workflow and `:help` when needed. For
|
||||||
|
privileged edits (`sudoedit`) and other security-sensitive inputs, `$SUDO_EDITOR` is
|
||||||
|
`nvim --clean`; use that explicitly when `$EDITOR` must avoid user config/plugins.
|
||||||
|
|
||||||
These configurations are designed to work across both terminal and GUI environments.
|
Terminal layout and files: **Zellij** and **Yazi** live under `core/zellij/` and `core/yazi.nix`
|
||||||
|
(not in this folder).
|
||||||
|
|
||||||
|
## Docs
|
||||||
|
|
||||||
|
- [`helix/README.md`](./helix/README.md) — Helix basics, cheatsheet, official doc links, Helix vs
|
||||||
|
Neovim notes.
|
||||||
|
- [`neovim/README.md`](./neovim/README.md) — Vim/Neovim basics, cheatsheet, and official doc links.
|
||||||
|
|
||||||
|
Nix modules in `helix/` and `neovim/` enable each editor via Home Manager. Language servers and
|
||||||
|
other heavy editor-related packages are listed in
|
||||||
|
[`../../tui/editors/`](../../tui/editors/README.md) (imported from `home/base/tui`).
|
||||||
|
|
||||||
|
Editor terminology (LSP, tree-sitter): [`Glossary.md`](./Glossary.md).
|
||||||
|
|||||||
@@ -0,0 +1,209 @@
|
|||||||
|
# Helix (primary) — Kakoune-style usage
|
||||||
|
|
||||||
|
Neovim is powerful and has a very active community. This config still enables Neovim as a **backup**
|
||||||
|
editor (vim-style muscle memory, `:help`, and occasional plugin workflows).
|
||||||
|
|
||||||
|
Helix is the **primary** TUI editor here: opinionated, batteries-included (LSP, tree-sitter, picker,
|
||||||
|
multi-cursor, surround), and a smaller moving part than a large Neovim plugin stack.
|
||||||
|
|
||||||
|
## Tips
|
||||||
|
|
||||||
|
1. This flake sets `$EDITOR` / `$VISUAL` to **`hx`** by default. For security-sensitive edits
|
||||||
|
(privileged files, unfamiliar binaries, secrets), prefer **`nvim --clean`** — `$SUDO_EDITOR` uses
|
||||||
|
it so `sudoedit` stays minimal; invoke it yourself in other trust-boundary cases.
|
||||||
|
1. Helix is **selection-first** (like Kakoune): extend a selection, then run an action (`d`, `c`,
|
||||||
|
`y`, …). A lone cursor is a zero-width selection.
|
||||||
|
1. Read the official docs before reinventing workflows:
|
||||||
|
1. <https://docs.helix-editor.com/> — documentation home (links to usage, keymap, configuration).
|
||||||
|
1. <https://docs.helix-editor.com/usage.html> — modes, buffers, motions overview.
|
||||||
|
1. <https://docs.helix-editor.com/keymap.html> — full default keybindings.
|
||||||
|
1. <https://docs.helix-editor.com/commands.html> — typable commands (`:` prompt).
|
||||||
|
1. <https://docs.helix-editor.com/configuration.html> — `config.toml`, themes, remaps.
|
||||||
|
1. <https://github.com/helix-editor/helix/wiki> — install tips, language servers, FAQ.
|
||||||
|
1. Prefer **Zellij** for shells and panes; use **Helix** for buffers and text.
|
||||||
|
1. On large codebases, navigation is often **by picker** (`Space f`, symbols, workspace search) or
|
||||||
|
**by LSP** (`g` goto mode), complementing motion-based editing.
|
||||||
|
1. After **git** operations (`checkout`, `merge`, `pull`, `rebase`) or whenever many files changed
|
||||||
|
on disk, run **`:reload-all`** (alias **`:rla`**) so every open buffer is refreshed from disk in
|
||||||
|
one step — much faster than revisiting each file or restarting Helix.
|
||||||
|
|
||||||
|
## Tutorial
|
||||||
|
|
||||||
|
Run `:tutor` inside Helix, or `hx --tutor` from the shell
|
||||||
|
([tutor source](https://github.com/helix-editor/helix/blob/master/runtime/tutor)).
|
||||||
|
|
||||||
|
## Helix cheatsheet (common keys)
|
||||||
|
|
||||||
|
> Full reference: <https://docs.helix-editor.com/keymap.html>
|
||||||
|
> Typable commands: <https://docs.helix-editor.com/commands.html>
|
||||||
|
|
||||||
|
### Terminal related
|
||||||
|
|
||||||
|
Zellij shortcuts used often (same idea as in the Neovim notes):
|
||||||
|
|
||||||
|
| Action | Zellij shortcut |
|
||||||
|
| ------------------------- | --------------- |
|
||||||
|
| Floating terminal | `Ctrl + p + w` |
|
||||||
|
| Horizontal split terminal | `Ctrl + p + d` |
|
||||||
|
| Vertical split terminal | `Ctrl + p + n` |
|
||||||
|
|
||||||
|
In Helix, `|` / `!` and variants pipe or insert shell output on selections (see **Changes**).
|
||||||
|
|
||||||
|
This flake’s Helix Home Manager module keeps **almost all default keys**; the only remap is
|
||||||
|
**`Ctrl+Shift+o`** → jump backward, because Zellij uses **`Ctrl+o`** for Session (see
|
||||||
|
`home/base/core/editors/helix/default.nix`). For other Zellij clashes, use **locked mode**
|
||||||
|
(`Ctrl+g`), **`:`** commands, or the built-in **`Space`** menu.
|
||||||
|
|
||||||
|
### Command mode (`:`)
|
||||||
|
|
||||||
|
> <https://docs.helix-editor.com/commands.html>
|
||||||
|
|
||||||
|
| Action | Command examples |
|
||||||
|
| ---------------------- | -------------------------------------------------------------------- |
|
||||||
|
| Write / write all | `:w` / `:wa` |
|
||||||
|
| Quit view / quit all | `:q` / `:qa` — add `!` to discard changes |
|
||||||
|
| Write and quit | `:wq`, `:x` |
|
||||||
|
| Write all and quit all | `:wqa`, `:xa` |
|
||||||
|
| Open file | `:open path`, `:e path` |
|
||||||
|
| Next / previous buffer | `:bn` / `:bp` (also `gn` / `gp` in normal) |
|
||||||
|
| Close buffer | `:bc` (add `!` to force) |
|
||||||
|
| Reload from disk | `:reload` (current buffer); `:reload-all` / **`:rla`** (all buffers) |
|
||||||
|
| Change directory / pwd | `:cd` / `:pwd` |
|
||||||
|
| Split open file | `:vs path`, `:hs path` |
|
||||||
|
|
||||||
|
### Movement (normal mode)
|
||||||
|
|
||||||
|
| Action | Keys / notes |
|
||||||
|
| --------------------- | --------------------------------------------------- |
|
||||||
|
| Arrow keys | `h` `j` `k` `l` |
|
||||||
|
| Words | `w` `b` `e` — `W` `B` `E` for WORD-style |
|
||||||
|
| Find char / till char | `f` `F` `t` `T` (not limited to current line) |
|
||||||
|
| Line / file | `Home` / `End`; `gg` start or goto line; `G` line |
|
||||||
|
| Half / full page | `Ctrl-u` / `Ctrl-d`; `Ctrl-b` / `Ctrl-f` |
|
||||||
|
| Jumplist | `Ctrl-o` back, `Ctrl-i` forward; `Ctrl-s` save spot |
|
||||||
|
|
||||||
|
### Selection & changes
|
||||||
|
|
||||||
|
| Action | Keys / notes |
|
||||||
|
| ---------------------- | ----------------------------------------------------------------- |
|
||||||
|
| Extend selections | `v` select mode; motions extend instead of moving |
|
||||||
|
| Line selection | `x` extend line; `X` line bounds |
|
||||||
|
| Select all / regex | `%`; `s` regex in selections; `S` split on regex |
|
||||||
|
| Undo / redo | `u` / `U` |
|
||||||
|
| Delete / change / yank | `d` / `c` / `y` — acts on selection |
|
||||||
|
| Paste | `p` / `P`; registers `"` … |
|
||||||
|
| Insert | `i` `a` `I` `A` `o` `O` |
|
||||||
|
| Indent / format | `>` / `<`; `=` format (LSP) |
|
||||||
|
| Case | `~` toggle; lower/upper case via grave / `Alt-grave` (see keymap) |
|
||||||
|
| Join lines | `J`; `Alt-J` join keeping space |
|
||||||
|
|
||||||
|
### Search
|
||||||
|
|
||||||
|
| Action | Keys |
|
||||||
|
| -------------------- | ---------------------------------------- |
|
||||||
|
| Search / reverse | `/` / `?` |
|
||||||
|
| Next / prev match | `n` / `N` |
|
||||||
|
| Selection as pattern | `*` (word bounds); `Alt-*` raw selection |
|
||||||
|
|
||||||
|
Use **extend mode** (`v`) with `n` / `N` to add matches to multi-cursors
|
||||||
|
([keymap](https://docs.helix-editor.com/keymap.html#select--extend-mode)).
|
||||||
|
|
||||||
|
### Replace / multi-occur edits
|
||||||
|
|
||||||
|
Helix has no vim-style `:%s` with preview. Typical patterns:
|
||||||
|
|
||||||
|
- Select matches with `s` or search, then `c` to change all selections at once.
|
||||||
|
- Workspace-wide search: `Space /` (global search picker).
|
||||||
|
- Heavy refactors: external tools or another pane (see **Differences** below).
|
||||||
|
|
||||||
|
### Goto mode (`g` then …)
|
||||||
|
|
||||||
|
| Action | Keys (after `g`) |
|
||||||
|
| -------------------- | ---------------- |
|
||||||
|
| File start / end | `g` / `e` |
|
||||||
|
| Line start / end | `h` / `l` |
|
||||||
|
| File / URL | `f` |
|
||||||
|
| First non-whitespace | `s` |
|
||||||
|
| Definition / refs | `d` / `r` (LSP) |
|
||||||
|
| Type / impl | `y` / `i` (LSP) |
|
||||||
|
| Next / prev buffer | `n` / `p` |
|
||||||
|
|
||||||
|
Also: `gd` / `gD` definition/declaration-style jumps where bound.
|
||||||
|
|
||||||
|
### Match mode (`m` …)
|
||||||
|
|
||||||
|
Surround and textobjects: see <https://docs.helix-editor.com/surround.html> and
|
||||||
|
<https://docs.helix-editor.com/textobjects.html>. Matching bracket: `mm` (tree-sitter).
|
||||||
|
|
||||||
|
### Window mode (`Ctrl-w` then …)
|
||||||
|
|
||||||
|
| Action | Keys |
|
||||||
|
| ---------------- | --------------- |
|
||||||
|
| Next window | `w` |
|
||||||
|
| Vertical split | `v` |
|
||||||
|
| Horizontal split | `s` |
|
||||||
|
| Focus splits | `h` `j` `k` `l` |
|
||||||
|
| Close / only | `q` / `o` |
|
||||||
|
|
||||||
|
### Space mode (`Space` then …)
|
||||||
|
|
||||||
|
| Action | Keys |
|
||||||
|
| -------------------- | ------------------ |
|
||||||
|
| File picker (roots) | `f` |
|
||||||
|
| File picker (cwd) | `F` |
|
||||||
|
| Buffer picker | `b` |
|
||||||
|
| Global search | `/` |
|
||||||
|
| Command palette | `?` |
|
||||||
|
| Hover docs (LSP) | `k` |
|
||||||
|
| Symbols / workspace | `s` / `S` |
|
||||||
|
| Diagnostics | `d` / `D` |
|
||||||
|
| Clipboard yank/paste | `y` / `p` variants |
|
||||||
|
|
||||||
|
Picker movement: <https://docs.helix-editor.com/pickers.html>.
|
||||||
|
|
||||||
|
### Minor modes from normal
|
||||||
|
|
||||||
|
| Mode | Key |
|
||||||
|
| ----------- | --------- |
|
||||||
|
| Command | `:` |
|
||||||
|
| View scroll | `z` / `Z` |
|
||||||
|
| Goto | `g` |
|
||||||
|
| Match | `m` |
|
||||||
|
| Window | `Ctrl-w` |
|
||||||
|
|
||||||
|
Some bindings need an **LSP** or **tree-sitter** grammar; see notes on the keymap page.
|
||||||
|
|
||||||
|
## Differences between Neovim and Helix
|
||||||
|
|
||||||
|
1. Selecting first, then action.
|
||||||
|
1. Helix: delete 2 words: move/select with `w` … then `d`. You see the selection before the
|
||||||
|
action.
|
||||||
|
2. Neovim: delete 2 words: `d` then `2w`. No visual feedback before the action runs.
|
||||||
|
1. Helix — modern built-in features: LSP, tree-sitter, fuzzy finder, multi-cursors, surround, and
|
||||||
|
more.
|
||||||
|
1. The same is available in Neovim, but usually via plugins you choose and maintain.
|
||||||
|
1. Helix is built in Rust from scratch: smaller codebase, modern defaults. No VimScript, no Lua in
|
||||||
|
user config.
|
||||||
|
1. Neovim carries Vim heritage (VimScript) and Lua-heavy customization.
|
||||||
|
1. Neovim has a huge plugin ecosystem.
|
||||||
|
1. Helix is newer; a stable plugin system is still evolving:
|
||||||
|
<https://github.com/helix-editor/helix/pull/8675>
|
||||||
|
1. Neovim has an integrated terminal (similar in spirit to VS Code’s).
|
||||||
|
1. Helix does not ship one; use Zellij / tmux / terminal features instead.
|
||||||
|
1. <https://github.com/helix-editor/helix/issues/1976#issuecomment-1091074719>
|
||||||
|
1. <https://github.com/helix-editor/helix/pull/4649>
|
||||||
|
1. Helix has no built-in tree panel; pair with **Yazi**, ranger, or Broot and open files from there.
|
||||||
|
1. A tree view may arrive with plugins later; many users rely on the file picker instead.
|
||||||
|
1. Global substitution is weaker in Helix; run replacements in another pane (Zellij) or an external
|
||||||
|
tool when needed.
|
||||||
|
1. <https://github.com/helix-editor/helix/issues/196>
|
||||||
|
1. Neovim’s `:s` with preview remains strong for interactive refactors; external tools (e.g.
|
||||||
|
<https://github.com/ms-jpq/sad>) can fill gaps in Helix-centric flows.
|
||||||
|
1. Complexity vs batteries-included tradeoffs:
|
||||||
|
<https://github.com/helix-editor/helix/discussions/6356>
|
||||||
|
|
||||||
|
Using **Helix** (and Neovim when useful) inside **Yazi** and **Zellij** keeps editing, files, and
|
||||||
|
panes explicit and scriptable — different from a single IDE window, but very composable.
|
||||||
|
|
||||||
|
Helix nudges you away from reproducing VS Code/JetBrains inside one process; Neovim remains there
|
||||||
|
when you want that depth.
|
||||||
@@ -1,4 +1,120 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
programs.helix.enable = true;
|
programs.helix = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.helix;
|
||||||
|
settings = {
|
||||||
|
editor = {
|
||||||
|
# Display & cursor
|
||||||
|
line-number = "relative";
|
||||||
|
cursorline = true;
|
||||||
|
color-modes = true;
|
||||||
|
scrolloff = 8;
|
||||||
|
|
||||||
|
# use system clipboard by default
|
||||||
|
default-yank-register = "+";
|
||||||
|
# Wrap long lines to the viewport (word-wrap style; does not insert hard line endings)
|
||||||
|
soft-wrap = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Completion / formatting
|
||||||
|
auto-format = true;
|
||||||
|
preview-completion-insert = true;
|
||||||
|
completion-timeout = 5;
|
||||||
|
idle-timeout = 200;
|
||||||
|
end-of-line-diagnostics = "hint";
|
||||||
|
|
||||||
|
# Save to disk on focus loss and after idle (helps LSP see disk changes)
|
||||||
|
auto-save = {
|
||||||
|
focus-lost = true;
|
||||||
|
after-delay = {
|
||||||
|
enable = true;
|
||||||
|
timeout = 2000;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# LSP: inlay hints, signature help, progress / messages in status area
|
||||||
|
lsp = {
|
||||||
|
display-messages = true;
|
||||||
|
display-progress-messages = true;
|
||||||
|
display-inlay-hints = true;
|
||||||
|
auto-signature-help = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline-diagnostics = {
|
||||||
|
cursor-line = "hint";
|
||||||
|
other-lines = "disable";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Buffers tab strip, menu borders, status line layout
|
||||||
|
bufferline = "multiple";
|
||||||
|
popup-border = "menu";
|
||||||
|
statusline = {
|
||||||
|
left = [
|
||||||
|
"mode"
|
||||||
|
"spinner"
|
||||||
|
"version-control"
|
||||||
|
"file-name"
|
||||||
|
"read-only-indicator"
|
||||||
|
"file-modification-indicator"
|
||||||
|
];
|
||||||
|
center = [ ];
|
||||||
|
right = [
|
||||||
|
"workspace-diagnostics"
|
||||||
|
"diagnostics"
|
||||||
|
"selections"
|
||||||
|
"position"
|
||||||
|
"position-percentage"
|
||||||
|
"file-type"
|
||||||
|
"file-encoding"
|
||||||
|
"file-line-ending"
|
||||||
|
];
|
||||||
|
separator = "│";
|
||||||
|
diagnostics = [
|
||||||
|
"error"
|
||||||
|
"warning"
|
||||||
|
"info"
|
||||||
|
];
|
||||||
|
workspace-diagnostics = [
|
||||||
|
"error"
|
||||||
|
"warning"
|
||||||
|
];
|
||||||
|
mode = {
|
||||||
|
normal = "NORMAL";
|
||||||
|
insert = "INSERT";
|
||||||
|
select = "SELECT";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Show dotfiles in picker (project-wide ignores still apply)
|
||||||
|
file-picker.hidden = false;
|
||||||
|
|
||||||
|
cursor-shape = {
|
||||||
|
insert = "bar";
|
||||||
|
normal = "block";
|
||||||
|
select = "underline";
|
||||||
|
};
|
||||||
|
indent-guides.render = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
keys.normal = {
|
||||||
|
space.space = ":reload-all";
|
||||||
|
esc = [
|
||||||
|
"collapse_selection"
|
||||||
|
"keep_primary_selection"
|
||||||
|
];
|
||||||
|
space.w = ":w";
|
||||||
|
space.q = ":q";
|
||||||
|
|
||||||
|
# useful vim keybindings
|
||||||
|
"$" = "goto_line_end";
|
||||||
|
"0" = "goto_line_start";
|
||||||
|
|
||||||
|
# Ctrl+o opens Zellij Session
|
||||||
|
"C-S-o" = "jump_backward";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,180 @@
|
|||||||
|
# Neovim (backup) — vim-style usage
|
||||||
|
|
||||||
|
Primary day-to-day editing is **Helix**; this file is the **vim/Neovim** quick reference and doc
|
||||||
|
pointers for when you reach for Neovim as a backup.
|
||||||
|
|
||||||
|
## Tips
|
||||||
|
|
||||||
|
1. Many motions already exist in vim — check vim/Neovim docs before adding plugins or reinventing
|
||||||
|
wheels.
|
||||||
|
1. For deeper skill, read the official docs:
|
||||||
|
1. <https://vimhelp.org/> — vim help.
|
||||||
|
1. <https://neovim.io/doc/user/> — Neovim user manual.
|
||||||
|
1. Prefer **Zellij** for shells and panes; use **Helix** or **Neovim** for buffers and text.
|
||||||
|
1. Two powerful navigation modes on large codebases:
|
||||||
|
1. **By path** — when you know the tree layout.
|
||||||
|
1. **By content** — when you know what the code says.
|
||||||
|
|
||||||
|
## Tutorial
|
||||||
|
|
||||||
|
Type `:tutor` (or `:Tutor` in Neovim) for the built-in vim tutorial.
|
||||||
|
|
||||||
|
## Vim cheatsheet (common keys)
|
||||||
|
|
||||||
|
> For a fuller reference: <https://vimhelp.org/quickref.txt.html>
|
||||||
|
|
||||||
|
Emacs Evil, Neovim, and vim share the motions below.
|
||||||
|
|
||||||
|
### Terminal related
|
||||||
|
|
||||||
|
Zellij shortcuts used often:
|
||||||
|
|
||||||
|
| Action | Zellij shortcut |
|
||||||
|
| ------------------------- | --------------- |
|
||||||
|
| Floating terminal | `Ctrl + p + w` |
|
||||||
|
| Horizontal split terminal | `Ctrl + p + d` |
|
||||||
|
| Vertical split terminal | `Ctrl + p + n` |
|
||||||
|
| Run a shell command | `!xxx` |
|
||||||
|
|
||||||
|
### File management
|
||||||
|
|
||||||
|
> <https://neovim.io/doc/user/usr_22.html>
|
||||||
|
> <https://vimhelp.org/editing.txt.html>
|
||||||
|
|
||||||
|
| Action | Command |
|
||||||
|
| ----------------------------- | -------------------------------------------- |
|
||||||
|
| Save selection to a file | `:w filename` (shows `:'<,'>w filename`) |
|
||||||
|
| Save and close current buffer | `:wq` |
|
||||||
|
| Save all buffers | `:wa` |
|
||||||
|
| Save and close all buffers | `:wqa` |
|
||||||
|
| Edit a file | `:e filename` (or `:e <TAB>` for completion) |
|
||||||
|
| Browse files | `:Ex` or `:e .` |
|
||||||
|
| Discard changes and reload | `:e!` |
|
||||||
|
|
||||||
|
### Motion
|
||||||
|
|
||||||
|
> <https://vimhelp.org/motion.txt.html>
|
||||||
|
|
||||||
|
| Action | Command |
|
||||||
|
| ----------------------------------- | --------------------------------------- |
|
||||||
|
| Start / end of buffer | `gg` / `G` |
|
||||||
|
| Go to line 5 | `5gg` / `5G` |
|
||||||
|
| Left / down / up / right | `h` `j` `k` `l` (counts like `5j` work) |
|
||||||
|
| Jump to matchpairs `()`, `{}`, `[]` | `%` |
|
||||||
|
| Start / end of line | `0` / `$` |
|
||||||
|
| Sentence forward / backward | `(` / `)` |
|
||||||
|
| Paragraph forward / backward | `{` / `}` |
|
||||||
|
| Section forward / backward | `[[` / `]]` |
|
||||||
|
| Jump to marks | `'` + mark (Neovim may prompt) |
|
||||||
|
|
||||||
|
Text objects:
|
||||||
|
|
||||||
|
- **Sentence**: ends at `.` `!` `?` plus line end or space/tab.
|
||||||
|
- **Paragraph**: ends at a blank line.
|
||||||
|
- **Section**: between section headers; `[[` / `]]` often stop at `{` in column 1 (handy in
|
||||||
|
C/Go/Java).
|
||||||
|
|
||||||
|
### Text manipulation
|
||||||
|
|
||||||
|
Basics:
|
||||||
|
|
||||||
|
| Action | Command |
|
||||||
|
| ----------------------------- | ------------------------------ |
|
||||||
|
| Delete character under cursor | `x` |
|
||||||
|
| Put (paste) | `p` |
|
||||||
|
| Delete operator + motion | `d` |
|
||||||
|
| Undo word (insert) | `CTRL-w` |
|
||||||
|
| Undo line (insert) | `CTRL-u` |
|
||||||
|
| Undo change | `u` |
|
||||||
|
| Redo | `Ctrl-r` |
|
||||||
|
| Repeat previous insert | `Ctrl-a` |
|
||||||
|
| Repeat last change | `.` |
|
||||||
|
| Toggle case | `~` |
|
||||||
|
| Uppercase (visual) | `U` |
|
||||||
|
| Lowercase (visual) | `u` |
|
||||||
|
| Align selection | `:center` / `:left` / `:right` |
|
||||||
|
|
||||||
|
Misc:
|
||||||
|
|
||||||
|
| Action | Shortcut |
|
||||||
|
| ------------------------ | ----------- |
|
||||||
|
| Character-wise visual | `v` |
|
||||||
|
| Line-wise visual | `V` |
|
||||||
|
| Block visual | `<Ctrl-v>` |
|
||||||
|
| Fold close / open | `zc` / `zo` |
|
||||||
|
| Go to definition | `gd` |
|
||||||
|
| Go to references | `gD` |
|
||||||
|
| Comment line (if mapped) | e.g. `gcc` |
|
||||||
|
|
||||||
|
| Action | Command |
|
||||||
|
| ----------------------------------- | -------------- |
|
||||||
|
| Sort lines | `:sort` |
|
||||||
|
| Join lines | `:join` or `J` |
|
||||||
|
| Join without spaces | `:join!` |
|
||||||
|
| Insert at line start / end | `I` / `A` |
|
||||||
|
| Delete to end of line | `D` |
|
||||||
|
| Change to end of line (into insert) | `C` |
|
||||||
|
|
||||||
|
Advanced patterns:
|
||||||
|
|
||||||
|
- Append to many lines: `:normal A<text>` (often after visual-block `Ctrl-v`).
|
||||||
|
- Neovim may pad short lines with spaces when block-appending past EOL.
|
||||||
|
- Delete last character on many lines: `:normal $x` over a visual selection.
|
||||||
|
- Delete last word on many lines: `:normal $bD`.
|
||||||
|
|
||||||
|
### Search
|
||||||
|
|
||||||
|
| Action | Command |
|
||||||
|
| --------------------------------- | ------- |
|
||||||
|
| Search forward / backward | `/` `?` |
|
||||||
|
| Repeat search same / opposite dir | `n` `N` |
|
||||||
|
|
||||||
|
### Find and replace
|
||||||
|
|
||||||
|
| Action | Command |
|
||||||
|
| ------------------- | ---------------------------------- |
|
||||||
|
| In visual selection | `:s/old/new/g` |
|
||||||
|
| Current line | same |
|
||||||
|
| Whole buffer | `:%s/old/new/g` |
|
||||||
|
| Regex example | `:%s@\vhttp://(\w+)@https://\1@gc` |
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
- `\v` — “very magic”, less backslash noise in the pattern.
|
||||||
|
- `\1` — first capture group.
|
||||||
|
|
||||||
|
### Specific line ranges
|
||||||
|
|
||||||
|
| Action | Command examples |
|
||||||
|
| --------------------- | ------------------------------------ |
|
||||||
|
| Lines 10–end | `:10,$s/old/new/g` or `:10,$s@^@#@g` |
|
||||||
|
| Lines 10–20 | `:10,20s/old/new/g` |
|
||||||
|
| Strip trailing spaces | `:%s/\s\+$//g` |
|
||||||
|
|
||||||
|
Flags: `g` all matches in range, `c` confirm each, `i` ignore case.
|
||||||
|
|
||||||
|
### Buffers, windows, tabs
|
||||||
|
|
||||||
|
> <https://neovim.io/doc/user/usr_08.html>
|
||||||
|
> <https://vimhelp.org/windows.txt.html>
|
||||||
|
|
||||||
|
- **Buffer** — in-memory text for a file.
|
||||||
|
- **Window** — viewport on a buffer.
|
||||||
|
- **Tab page** — layout of windows.
|
||||||
|
|
||||||
|
| Action | Command |
|
||||||
|
| ------------------ | ------------------------------ |
|
||||||
|
| Horizontal split | `:sp` or `:sp filename` |
|
||||||
|
| Vertical split | `:vs` or `:vs filename` |
|
||||||
|
| Next / prev window | `Ctrl-w w` or `Ctrl-w h/j/k/l` |
|
||||||
|
| List buffers | `:ls` |
|
||||||
|
| Next / prev buffer | `]b` / `[b` or `:bn` / `:bp` |
|
||||||
|
| New tab | `:tabnew` |
|
||||||
|
| Next / prev tab | `gt` / `gT` |
|
||||||
|
|
||||||
|
### History
|
||||||
|
|
||||||
|
| Action | Command |
|
||||||
|
| --------------- | ------- |
|
||||||
|
| Command history | `q:` |
|
||||||
|
| Search history | `q/` |
|
||||||
@@ -1,11 +1,96 @@
|
|||||||
{ pkgs, ... }:
|
{ config, nixvim, ... }:
|
||||||
{
|
{
|
||||||
programs = {
|
|
||||||
neovim = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
viAlias = true;
|
imports = [ nixvim.homeModules.nixvim ];
|
||||||
vimAlias = true;
|
home.shellAliases = {
|
||||||
|
|
||||||
|
vi = "nvim";
|
||||||
|
vim = "nvim";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.nixvim = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
clipboard.providers.wl-copy.enable = true;
|
||||||
|
|
||||||
|
opts = {
|
||||||
|
number = true;
|
||||||
|
relativenumber = true;
|
||||||
|
cursorline = true;
|
||||||
|
signcolumn = "auto";
|
||||||
|
clipboard = "unnamedplus";
|
||||||
|
scrolloff = 8;
|
||||||
|
swapfile = false;
|
||||||
|
title = true;
|
||||||
|
titlelen = 20;
|
||||||
|
smartindent = false;
|
||||||
|
mouse = "a";
|
||||||
|
undofile = true;
|
||||||
|
ignorecase = true;
|
||||||
|
smartcase = true;
|
||||||
|
splitbelow = true;
|
||||||
|
splitright = true;
|
||||||
|
updatetime = 300;
|
||||||
|
wrap = true;
|
||||||
|
linebreak = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
colorschemes.catppuccin = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
transparent_background = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
plugins.lsp.servers = {
|
||||||
|
nixd.enable = true;
|
||||||
|
"rust_analyzer" = {
|
||||||
|
enable = true;
|
||||||
|
installCargo = false;
|
||||||
|
installRustc = false;
|
||||||
|
};
|
||||||
|
gopls.enable = true;
|
||||||
|
pyright.enable = true;
|
||||||
|
bashls.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
plugins.treesitter = {
|
||||||
|
enable = true;
|
||||||
|
grammarPackages = with config.programs.nixvim.plugins.treesitter.package.builtGrammars; [
|
||||||
|
bash
|
||||||
|
json
|
||||||
|
lua
|
||||||
|
make
|
||||||
|
markdown
|
||||||
|
nix
|
||||||
|
regex
|
||||||
|
rust
|
||||||
|
go
|
||||||
|
python
|
||||||
|
toml
|
||||||
|
vim
|
||||||
|
vimdoc
|
||||||
|
xml
|
||||||
|
yaml
|
||||||
|
nu
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
plugins.neo-tree = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
filesystem = {
|
||||||
|
filtered_items = {
|
||||||
|
visible = true;
|
||||||
|
hide_dotfiles = false;
|
||||||
|
hide_gitignored = false;
|
||||||
|
};
|
||||||
|
follow_current_file = {
|
||||||
|
enabled = true;
|
||||||
|
leave_dirs_open = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Default interactive editor is Helix (`hx`). For trust-boundary edits (e.g. `sudoedit`,
|
||||||
|
# secrets, unfamiliar payloads), prefer `nvim --clean` — wired via `SUDO_EDITOR`.
|
||||||
|
{
|
||||||
|
home.sessionVariables = {
|
||||||
|
EDITOR = "hx";
|
||||||
|
VISUAL = "hx";
|
||||||
|
SUDO_EDITOR = "nvim --clean";
|
||||||
|
};
|
||||||
|
}
|
||||||
+2
-19
@@ -16,30 +16,13 @@
|
|||||||
|
|
||||||
# GitHub CLI tool
|
# GitHub CLI tool
|
||||||
# https://cli.github.com/manual/
|
# https://cli.github.com/manual/
|
||||||
programs.gh = {
|
programs.gh.enable = true;
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
git_protocol = "ssh";
|
|
||||||
prompt = "enabled";
|
|
||||||
aliases = {
|
|
||||||
co = "pr checkout";
|
|
||||||
pv = "pr view";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
hosts = {
|
|
||||||
"github.com" = {
|
|
||||||
"users" = {
|
|
||||||
"ryan4yin" = null;
|
|
||||||
};
|
|
||||||
"user" = "ryan4yin";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
lfs.enable = true;
|
lfs.enable = true;
|
||||||
|
|
||||||
|
signing.format = "openpgp";
|
||||||
# signing = {
|
# signing = {
|
||||||
# key = "xxx";
|
# key = "xxx";
|
||||||
# signByDefault = true;
|
# signByDefault = true;
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
{ config, ... }:
|
{ config, ... }:
|
||||||
{
|
{
|
||||||
# make `npm install -g <pkg>` happey
|
# 1. make `npm install -g <pkg>` happey
|
||||||
#
|
# 2. set min-release-age for security
|
||||||
# mainly used to install npm packages that updates frequently
|
|
||||||
# such as gemini-cli, claude-code, etc.
|
|
||||||
home.file.".npmrc".text = ''
|
home.file.".npmrc".text = ''
|
||||||
prefix=${config.home.homeDirectory}/.npm
|
prefix=${config.home.homeDirectory}/.npm
|
||||||
|
min-release-age=7
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-13
@@ -2,18 +2,6 @@ _: {
|
|||||||
# use mirror for pip install
|
# use mirror for pip install
|
||||||
xdg.configFile."pip/pip.conf".text = ''
|
xdg.configFile."pip/pip.conf".text = ''
|
||||||
[global]
|
[global]
|
||||||
index-url = https://mirror.nju.edu.cn/pypi/web/simple
|
index-url = https://mirrors.bfsu.edu.cn/pypi/web/simple
|
||||||
format = columns
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# xdg.configFile."pip/pip.conf".text = ''
|
|
||||||
# [global]
|
|
||||||
# index-url = https://mirror.nju.edu.cn/pypi/web/simple
|
|
||||||
# format = columns
|
|
||||||
# '';
|
|
||||||
|
|
||||||
# xdg.configFile."pip/pip.conf".text = ''
|
|
||||||
# [global]
|
|
||||||
# index-url = https://mirrors.bfsu.edu.cn/pypi/web/simple
|
|
||||||
# '';
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,9 +78,9 @@ $env.config.recursion_limit = 50
|
|||||||
$env.config.edit_mode = "vi"
|
$env.config.edit_mode = "vi"
|
||||||
|
|
||||||
# Command that will be used to edit the current line buffer with Ctrl+O.
|
# Command that will be used to edit the current line buffer with Ctrl+O.
|
||||||
# If unset, uses $env.VISUAL and then $env.EDITOR
|
# If unset, uses $env.VISUAL and then $env.EDITOR ($EDITOR is `hx` via session-env).
|
||||||
#
|
#
|
||||||
$env.config.buffer_editor = ["nvim", "--clean"]
|
$env.config.buffer_editor = ["hx"]
|
||||||
|
|
||||||
# cursor_shape_* (string)
|
# cursor_shape_* (string)
|
||||||
# -----------------------
|
# -----------------------
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
# Changing working directory when exiting Yazi
|
# Changing working directory when exiting Yazi
|
||||||
enableBashIntegration = true;
|
enableBashIntegration = true;
|
||||||
enableNushellIntegration = true;
|
enableNushellIntegration = true;
|
||||||
|
shellWrapperName = "yy";
|
||||||
settings = {
|
settings = {
|
||||||
mgr = {
|
mgr = {
|
||||||
show_hidden = true;
|
show_hidden = true;
|
||||||
|
|||||||
+11
-10
@@ -1,19 +1,20 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, llm-agents, ... }:
|
||||||
{
|
{
|
||||||
home.packages =
|
home.packages =
|
||||||
with pkgs;
|
with pkgs;
|
||||||
[
|
[
|
||||||
mitmproxy # http/https proxy tool
|
mitmproxy # http/https proxy tool
|
||||||
wireshark # network analyzer
|
wireshark # network analyzer
|
||||||
|
|
||||||
# IDEs
|
|
||||||
# jetbrains.idea-community
|
|
||||||
|
|
||||||
# AI cli tools
|
|
||||||
k8sgpt
|
|
||||||
kubectl-ai # an ai helper opensourced by google
|
|
||||||
]
|
]
|
||||||
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
# AI Agent Tools
|
||||||
insomnia # REST client
|
++ (with llm-agents.packages.${pkgs.stdenv.hostPlatform.system}; [
|
||||||
|
# Agents
|
||||||
|
codex
|
||||||
|
cursor-cli
|
||||||
|
claude-code
|
||||||
|
opencode
|
||||||
|
|
||||||
|
# Utilities
|
||||||
|
rtk # CLI proxy that reduces LLM token consumption
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,11 @@
|
|||||||
shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
|
shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
colors-dark = {
|
||||||
|
alpha = 0.93; # background transparency
|
||||||
|
blur = true; # requires foot >= 1.26 and compositor support (e.g. niri v26.04+)
|
||||||
|
};
|
||||||
|
|
||||||
mouse = {
|
mouse = {
|
||||||
hide-when-typing = "yes";
|
hide-when-typing = "yes";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
ghostty,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
###########################################################
|
###########################################################
|
||||||
@@ -16,7 +15,6 @@
|
|||||||
pkgs.hello # pkgs.ghostty is currently broken on darwin
|
pkgs.hello # pkgs.ghostty is currently broken on darwin
|
||||||
else
|
else
|
||||||
pkgs.ghostty; # the stable version
|
pkgs.ghostty; # the stable version
|
||||||
# package = ghostty.packages.${pkgs.stdenv.hostPlatform.system}.default; # the latest version
|
|
||||||
enableBashIntegration = false;
|
enableBashIntegration = false;
|
||||||
installBatSyntax = false;
|
installBatSyntax = false;
|
||||||
# installVimSyntax = true;
|
# installVimSyntax = true;
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
macos_show_window_title_in = "none";
|
macos_show_window_title_in = "none";
|
||||||
|
|
||||||
background_opacity = "0.93";
|
background_opacity = "0.93";
|
||||||
|
background_blur = 1; # requires kitty >= 0.46.2 and compositor support (e.g. niri v26.04+)
|
||||||
macos_option_as_alt = true; # Option key acts as Alt on macOS
|
macos_option_as_alt = true; # Option key acts as Alt on macOS
|
||||||
enable_audio_bell = false;
|
enable_audio_bell = false;
|
||||||
tab_bar_edge = "top"; # tab bar on top
|
tab_bar_edge = "top"; # tab bar on top
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
go-containerregistry # provides `crane` & `gcrane`, it's similar to skopeo
|
go-containerregistry # provides `crane` & `gcrane`, it's similar to skopeo
|
||||||
|
|
||||||
kubectl
|
kubectl
|
||||||
|
kustomize
|
||||||
|
kubeconform # FAST Kubernetes manifests validator, with support for Custom Resources
|
||||||
kubectx # kubectx & kubens
|
kubectx # kubectx & kubens
|
||||||
kubie # same as kubectl-ctx, but per-shell (won’t touch kubeconfig).
|
kubie # same as kubectl-ctx, but per-shell (won’t touch kubeconfig).
|
||||||
kubectl-view-secret # kubectl view-secret
|
kubectl-view-secret # kubectl view-secret
|
||||||
@@ -27,7 +29,7 @@
|
|||||||
kubevirt # virtctl
|
kubevirt # virtctl
|
||||||
pkgs-2505.kubernetes-helm
|
pkgs-2505.kubernetes-helm
|
||||||
fluxcd
|
fluxcd
|
||||||
argocd
|
# argocd
|
||||||
|
|
||||||
ko # build go project to container image
|
ko # build go project to container image
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
|
pkgs-patched,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
@@ -20,7 +21,7 @@
|
|||||||
tokei # count lines of code, alternative to cloc
|
tokei # count lines of code, alternative to cloc
|
||||||
|
|
||||||
# db related
|
# db related
|
||||||
mycli
|
# mycli
|
||||||
pgcli
|
pgcli
|
||||||
mongosh
|
mongosh
|
||||||
sqlite
|
sqlite
|
||||||
@@ -30,6 +31,8 @@
|
|||||||
|
|
||||||
# ai related
|
# ai related
|
||||||
python313Packages.huggingface-hub # huggingface-cli
|
python313Packages.huggingface-hub # huggingface-cli
|
||||||
|
pkgs-patched.python313Packages.modelscope
|
||||||
|
yt-dlp # youtube/bilibili/soundcloud/... video/music downloader
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
devbox
|
devbox
|
||||||
|
|||||||
@@ -1,214 +1,10 @@
|
|||||||
# Editors
|
# Editor tooling packages (heavy dependencies)
|
||||||
|
|
||||||
My editors:
|
This directory intentionally holds **only** [`packages.nix`](./packages.nix): language servers,
|
||||||
|
formatters, compilers, and other editor-adjacent tools that pull in a large closure.
|
||||||
|
|
||||||
1. Neovim
|
Editor programs, keymaps, `$EDITOR` defaults, and usage docs live under
|
||||||
2. Helix
|
[`../../core/editors/`](../../core/editors/README.md) (Helix, Neovim backup, glossary, cheatsheets).
|
||||||
|
|
||||||
And `Zellij` for a smooth and stable terminal experience.
|
[`default.nix`](./default.nix) imports `./packages.nix` so `home/base/tui` can keep pulling in
|
||||||
|
tooling without mixing it into `core/editors`.
|
||||||
## Tips
|
|
||||||
|
|
||||||
1. Many useful keys are already provided by vim, check vim/neovim's docs before you install a new
|
|
||||||
plugin / reinvent the wheel.
|
|
||||||
1. After using Emacs/Neovim more skillfully, I strongly recommend that you read the official
|
|
||||||
documentation of Neovim/vim:
|
|
||||||
1. <https://vimhelp.org/>: The official vim documentation.
|
|
||||||
1. <https://neovim.io/doc/user/>: Neovim's official user documentation.
|
|
||||||
1. Use Zellij for terminal related operations, and use Neovim/Helix for editing.
|
|
||||||
1. As for Emacs, Use its GUI version & terminal emulator `vterm` for terminal related operations.
|
|
||||||
1. Two powerful file search & jump tools:
|
|
||||||
1. Tree-view plugins are beginner-friendly and intuitive, but they're not very efficient.
|
|
||||||
1. **Search by the file path**: Useful when you're familiar with the project structure, especially
|
|
||||||
on a large project.
|
|
||||||
1. **Search by the content**: Useful when you're familiar with the code.
|
|
||||||
|
|
||||||
## Tutorial
|
|
||||||
|
|
||||||
Type `:tutor`(`:Tutor` in Neovim) to learn the basics usage of vim/neovim.
|
|
||||||
|
|
||||||
## VIM's Cheetsheet
|
|
||||||
|
|
||||||
> Here only record my commonly used keys, to see **a more comprehensive cheetsheet**:
|
|
||||||
> <https://vimhelp.org/quickref.txt.html>
|
|
||||||
|
|
||||||
Both Emacs-Evil & Neovim are compatible with vim, sothe key-bindings described here are common in
|
|
||||||
both Emacs-Evil, Neovim & vim.
|
|
||||||
|
|
||||||
### Terminal Related
|
|
||||||
|
|
||||||
I mainly use Zellij for terminal related operations, here is its terminal shortcuts I use frequently
|
|
||||||
now:
|
|
||||||
|
|
||||||
| Action | Zellij's Shortcut |
|
|
||||||
| ------------------------- | ----------------- |
|
|
||||||
| Floating Terminal | `Ctrl + p + w` |
|
|
||||||
| Horizontal Split Terminal | `Ctrl + p + d` |
|
|
||||||
| Vertical Split Terminal | `Ctrl + p + n` |
|
|
||||||
| Execute a command | `!xxx` |
|
|
||||||
|
|
||||||
### File Management
|
|
||||||
|
|
||||||
> <https://neovim.io/doc/user/usr_22.html>
|
|
||||||
|
|
||||||
> <https://vimhelp.org/editing.txt.html>
|
|
||||||
|
|
||||||
| Action | |
|
|
||||||
| ----------------------------------- | ------------------------------------------------ |
|
|
||||||
| Save selected text to a file | `:w filename` (Will show `:'<,'>w filename`) |
|
|
||||||
| Save and close the current buffer | `:wq` |
|
|
||||||
| Save all buffers | `:wa` |
|
|
||||||
| Save and close all buffers | `:wqa` |
|
|
||||||
| Edit a file | `:e filename`(or `:e <TAB>` to show a file list) |
|
|
||||||
| Browse the file list | `:Ex` or `:e .` |
|
|
||||||
| Discard changes and reread the file | `:e!` |
|
|
||||||
|
|
||||||
### Motion
|
|
||||||
|
|
||||||
> https://vimhelp.org/motion.txt.html
|
|
||||||
|
|
||||||
| Action | Command |
|
|
||||||
| --------------------------------------------------- | -------------------------------------------------- |
|
|
||||||
| Move to the start/end of the buffer | `gg`/`G` |
|
|
||||||
| Move the line number 5 | `5gg` / `5G` |
|
|
||||||
| Move left/down/up/right | h/j/k/l or `5h`/`5j`/`5k`/`5l` or `Ctr-n`/`Ctrl-p` |
|
|
||||||
| Move to the matchpairs, default to `()`, `{}`, `[]` | `%` |
|
|
||||||
| Move to the start/end of the line | `0` / `$` |
|
|
||||||
| Move a sentence forward/backward | `(` / `)` |
|
|
||||||
| Move a paragraph forward/backward | `{` / `}` |
|
|
||||||
| Move a section forward/backward | `[[` / `]]` |
|
|
||||||
| Jump to various positions | `'` + some other keys(neovim has prompt) |
|
|
||||||
|
|
||||||
Text Objects:
|
|
||||||
|
|
||||||
- **sentence**: text ending at a '.', '!' or '?' followed by either the end of a line, or by a space
|
|
||||||
or tab.
|
|
||||||
- **paragraph**: text ending at a blank line.
|
|
||||||
- **section**: text starting with a section header and ending at the start of the next section
|
|
||||||
header (or at the end of the file). - The "`]]`" and "`[[`" commands stop at the '`{`' in the
|
|
||||||
first column. This is useful to find the start of a function in a C/Go/Java/... program.
|
|
||||||
|
|
||||||
### Text Manipulation
|
|
||||||
|
|
||||||
Basics:
|
|
||||||
|
|
||||||
| Action | |
|
|
||||||
| --------------------------------------- | -------------------------- |
|
|
||||||
| Delete the current character | `x` |
|
|
||||||
| Paste the copied text | `p` |
|
|
||||||
| Delete the selection | `d` |
|
|
||||||
| Undo the last word | `CTRL-w`(in insert mode) |
|
|
||||||
| Undo the last line | `CTRL-u`(in insert mode) |
|
|
||||||
| Undo the last change | `u` |
|
|
||||||
| Redo the last change | `Ctrl + r` |
|
|
||||||
| Inserts the text of the previous insert | `Ctrl + a` |
|
|
||||||
| Repeat the last command | `.` |
|
|
||||||
| Toggle text's case | `~` |
|
|
||||||
| Convert to uppercase | `U` (visual mode) |
|
|
||||||
| Convert to lowercase | `u` (visual mode) |
|
|
||||||
| Align the selected content | `:center`/`:left`/`:right` |
|
|
||||||
|
|
||||||
Misc:
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ----------------------------- | ---------------------------------------- |
|
|
||||||
| Toggle visual mode | `v` (lower case v) |
|
|
||||||
| Select the current line | `V` (upper case v) |
|
|
||||||
| Toggle visual block mode | `<Ctrl> + v` (select a block vertically) |
|
|
||||||
| Fold the current code block | `zc` |
|
|
||||||
| Unfold the current code block | `zo` |
|
|
||||||
| Jump to Definition | `gd` |
|
|
||||||
| Jump to References | `gD` |
|
|
||||||
| (Un)Comment the current line | `gcc` |
|
|
||||||
|
|
||||||
| Action | |
|
|
||||||
| ------------------------------------------------------------------------- | -------------- |
|
|
||||||
| Sort the selected lines | `:sort` |
|
|
||||||
| Join Selection of Lines With Space | `:join` or `J` |
|
|
||||||
| Join without spaces | `:join!` |
|
|
||||||
| Enter Insert mode at the start/end of the line | `I` / `A` |
|
|
||||||
| Delete from the cursor to the end of the line | `D` |
|
|
||||||
| Delete from the cursor to the end of the line, and then enter insert mode | `C` |
|
|
||||||
|
|
||||||
Advance Techs:
|
|
||||||
|
|
||||||
- Add at the end of multiple lines: `:normal A<text>`
|
|
||||||
|
|
||||||
- Execublock: `:A<text>`
|
|
||||||
- visual block mode(ctrl + v)
|
|
||||||
- Append text at the end of each line in the selected block
|
|
||||||
- If position exceeds line end, neovim adds spaces automatically
|
|
||||||
|
|
||||||
- Delete the last char of multivle lines: `:normal $x`
|
|
||||||
|
|
||||||
- Execute `$x` on each line
|
|
||||||
- visual mode(v)
|
|
||||||
- `$` moves cursor to the end of line
|
|
||||||
- `x` deletes the character under the cursor
|
|
||||||
|
|
||||||
- Delete the last word of multiple lines: `:normal $bD`
|
|
||||||
- Execute `$bD` on each line
|
|
||||||
- visual mode(v)
|
|
||||||
- `$` moves cursor to the end of line
|
|
||||||
- `b` moves cursor to the beginning of the last word
|
|
||||||
|
|
||||||
### Search
|
|
||||||
|
|
||||||
| Action | Command |
|
|
||||||
| ----------------------------------------------------- | --------- |
|
|
||||||
| Search forward/backword for a pattern | `/` / `?` |
|
|
||||||
| Repeat the last search in the same/opposite direction | `n` / `N` |
|
|
||||||
|
|
||||||
### Find and Replace
|
|
||||||
|
|
||||||
| Action | Command |
|
|
||||||
| -------------------------------- | ----------------------------------- |
|
|
||||||
| Replace in selected area | `:s/old/new/g` |
|
|
||||||
| Replace in current line | Same as above |
|
|
||||||
| Replace all the lines | `:% s/old/new/g` |
|
|
||||||
| Replace all the lines with regex | `:% s@\vhttp://(\w+)@https://\1@gc` |
|
|
||||||
|
|
||||||
1. `\v` means means that in the regex pattern after it can be used without backslash
|
|
||||||
escaping(similar to python's raw string).
|
|
||||||
2. `\1` means the first matched group in the pattern.
|
|
||||||
|
|
||||||
### Replace in the specific lines
|
|
||||||
|
|
||||||
| Action | Command |
|
|
||||||
| ----------------------------------------- | -------------------------------------- |
|
|
||||||
| From the 10th line to the end of the file | `:10,$ s/old/new/g` or `:10,$ s@^@#@g` |
|
|
||||||
| From the 10th line to the 20th line | `:10,20 s/old/new/g` |
|
|
||||||
| Remove the trailing spaces | `:% s/\s\+$//g` |
|
|
||||||
|
|
||||||
The postfix(flags) in the above commands:
|
|
||||||
|
|
||||||
1. `g` means replace all the matched strings in the current line/file.
|
|
||||||
2. `c` means ask for confirmation before replacing.
|
|
||||||
3. `i` means ignore case.
|
|
||||||
|
|
||||||
### Buffers, Windows and Tabs
|
|
||||||
|
|
||||||
> <https://neovim.io/doc/user/usr_08.html>
|
|
||||||
|
|
||||||
> <https://vimhelp.org/windows.txt.html>
|
|
||||||
|
|
||||||
- A buffer is the in-memory text of a file.
|
|
||||||
- A window is a viewport on a buffer.
|
|
||||||
- A tab page is a collection of windows.
|
|
||||||
|
|
||||||
| Action | Command |
|
|
||||||
| ----------------------------------- | ----------------------------------- |
|
|
||||||
| Split the window horizontally | `:sp[lit]` or `:sp filename` |
|
|
||||||
| Split the window horizontally | `:vs[plit]` or `:vs filename` |
|
|
||||||
| Switch to the next/previous window | `Ctrl-w + w` or `Ctrl-w + h/j/k/l` |
|
|
||||||
| Show all buffers | `:ls` |
|
|
||||||
| show next/previous buffer | `]b`/`[b` or `:bn[ext]` / `bp[rev]` |
|
|
||||||
| New Tab(New Workspace in DoomEmacs) | `:tabnew` |
|
|
||||||
| Next/Previews Tab | `gt`/`gy` |
|
|
||||||
|
|
||||||
### History
|
|
||||||
|
|
||||||
| Action | Command |
|
|
||||||
| ------------------------ | ------- |
|
|
||||||
| Show the command history | `q:` |
|
|
||||||
| Show the search history | `q/` |
|
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
# Structured Editing
|
|
||||||
|
|
||||||
## S-expression data(Lisp)
|
|
||||||
|
|
||||||
- paredit/[lispy](https://github.com/doomemacs/doomemacs/tree/master/modules/editor/lispy): too
|
|
||||||
complex.
|
|
||||||
- [evil-cleverparens](https://github.com/emacs-evil/evil-cleverparens): simple and useful.
|
|
||||||
- [parinfer(par-in-fer)](https://shaunlebron.github.io/parinfer/): modern, simple, elegant and
|
|
||||||
useful, but works not well with some other completion plugins...
|
|
||||||
- to make parinfer works, you should disable sexp & smartparens in any lisp mode.
|
|
||||||
|
|
||||||
Some plugins:
|
|
||||||
|
|
||||||
- Neovim
|
|
||||||
- [parinfer-rust](https://github.com/eraserhd/parinfer-rust)
|
|
||||||
- <https://github.com/Olical/conjure>
|
|
||||||
- Helix
|
|
||||||
- [parinfer #4090 - Helix](https://github.com/helix-editor/helix/discussions/4090)
|
|
||||||
|
|
||||||
## Other Languages
|
|
||||||
|
|
||||||
1. treesitter
|
|
||||||
1. ...
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{ mylib, ... }:
|
# Editor-related language servers and heavy tooling — kept out of `core/editors`.
|
||||||
{
|
{
|
||||||
imports = mylib.scanPaths ./.;
|
imports = [ ./packages.nix ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
# Helix Editor
|
|
||||||
|
|
||||||
Neovim is really powerful, and have a very active community. I use it as my main editor, and I'm
|
|
||||||
very happy with it. I use it for everything, from writing code to writing this document.
|
|
||||||
|
|
||||||
But its configuration is a bit complex, and finding the right plugins, writing configurations, and
|
|
||||||
keeping everything up to date is not easy.
|
|
||||||
|
|
||||||
That's why I'm interested in Helix, Helix is similar to Neovim, but it's more opinionated, and it's
|
|
||||||
batteries included. Whether I'll switch my main editor to Helix or not, it gives me a lot of ideas
|
|
||||||
on how to improve my Neovim workflow.
|
|
||||||
|
|
||||||
## Tutorial
|
|
||||||
|
|
||||||
Use `:tutor` in helix to start the tutorial.
|
|
||||||
|
|
||||||
## Differences between Neovim and Helixer
|
|
||||||
|
|
||||||
1. Selecting first, then action.
|
|
||||||
1. Helix: delete 2 word: `2w` then `x`. You can always see what you're selecting before you apply
|
|
||||||
the action.
|
|
||||||
2. Neovim: delete 2 word: `d`. then `2w`. No visual feedback before you apply the action.
|
|
||||||
1. Helix - Modern builtin features: LSP, tree-sitter, fuzzy finder, multi cursors, surround and
|
|
||||||
more.
|
|
||||||
1. They're all available in Neovim too, but you need to find and use the right plugins manually,
|
|
||||||
which takes time and effort.
|
|
||||||
1. Helix is built in Rust from scratch. The result is a much smaller codebase and a modern set of
|
|
||||||
defaults. No VimScript. No Lua.
|
|
||||||
1. Neovim contains a lot of VimScript, and lua is too dynamic, it's hard to debug.
|
|
||||||
1. Personally I'm glad to take a look at a Rust codebase, but not a VimScript/Lua codebase.
|
|
||||||
1. Neovim have a very activate plugin ecosystem, and it's easy to find plugins for almost
|
|
||||||
everything.
|
|
||||||
1. Helix is still new, and it even don't have a stable plugin system yet. A PR to add a plugin
|
|
||||||
system is still envolving: <https://github.com/helix-editor/helix/pull/8675>
|
|
||||||
1. Neovim has integrated terminal, and it's very powerful. It's quite similar to VSCode's integrated
|
|
||||||
terminal. I use it a lot.
|
|
||||||
1. Helix doesn't have a integrated terminal yet, as it's complicated to implement. Users are
|
|
||||||
recommended to use tmux/Zellij or Wezterm/Kitty to implement this feature instead.
|
|
||||||
1. <https://github.com/helix-editor/helix/issues/1976#issuecomment-1091074719>
|
|
||||||
1. <https://github.com/helix-editor/helix/pull/4649>
|
|
||||||
1. **My Neovim often gets stuck when I switch to
|
|
||||||
[toggleterm.nvim](https://github.com/akinsho/toggleterm.nvim), this Helix issue made me
|
|
||||||
consider to switch from this Neovim plugin to Zellij**.
|
|
||||||
1. Helix do not have a tree-view panel, it's recommended to use Yazi/ranger/Broot instead, and open
|
|
||||||
Helix in them.
|
|
||||||
1. a tree-view plugin may be added after the plugin system is stable, but no one knows when it
|
|
||||||
will be.
|
|
||||||
2. and some Helix users stated that they don't need a tree-view plugin, Helix's file picker is
|
|
||||||
useful and good enough.
|
|
||||||
1. It seems Helix lacks a global substitution command, you should run it in another window(via wm or
|
|
||||||
Zellij).
|
|
||||||
1. <https://github.com/helix-editor/helix/issues/196>
|
|
||||||
1. Neovim's substitution command allow you to preview the changes before you apply it, and it's
|
|
||||||
very useful. if I switch to Helix, I'll need to find some other tools with similar
|
|
||||||
feature(such as https://github.com/ms-jpq/sad).
|
|
||||||
1. Complexity and Maintenance Costs vs Batteries Included:
|
|
||||||
<https://github.com/helix-editor/helix/discussions/6356>
|
|
||||||
|
|
||||||
I think Use Helix/Neovim within a terminal file manager(Yazi/ranger/Broot) and Zellij is a good
|
|
||||||
idea. It's quite different from the workflow I migrated from VSCode/JetBrains before, I'm very
|
|
||||||
interested in it.
|
|
||||||
|
|
||||||
In Neovim I can make the workflow similar to VSCode/JetBrains by using some plugins, but Helix
|
|
||||||
forces me to get out of my comfort zone, and try something new.
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
helix,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
helixPackages = helix.packages.${pkgs.stdenv.hostPlatform.system};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# to make steel work, we need to git clone this repo to your home directory.
|
|
||||||
home.sessionVariables.HELIX_STEEL_CONFIG = "${config.home.homeDirectory}/nix-config/home/base/tui/editors/helix/steel";
|
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
steel
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.helix = {
|
|
||||||
enable = true;
|
|
||||||
# enable steel as the plugin system
|
|
||||||
# https://github.com/helix-editor/helix/pull/8675
|
|
||||||
# https://github.com/mattwparas/helix/blob/steel-event-system/STEEL.md
|
|
||||||
package = helixPackages.default.overrideAttrs (prevAttrs: {
|
|
||||||
cargoBuildFeatures = prevAttrs.cargoBuildFeatures or [ ] ++ [ "steel" ];
|
|
||||||
});
|
|
||||||
settings = {
|
|
||||||
editor = {
|
|
||||||
line-number = "relative";
|
|
||||||
cursorline = true;
|
|
||||||
color-modes = true;
|
|
||||||
lsp.display-messages = true;
|
|
||||||
cursor-shape = {
|
|
||||||
insert = "bar";
|
|
||||||
normal = "block";
|
|
||||||
select = "underline";
|
|
||||||
};
|
|
||||||
indent-guides.render = true;
|
|
||||||
};
|
|
||||||
keys.normal = {
|
|
||||||
space = {
|
|
||||||
space = "file_picker";
|
|
||||||
w = ":w";
|
|
||||||
q = ":q";
|
|
||||||
};
|
|
||||||
esc = [
|
|
||||||
"collapse_selection"
|
|
||||||
"keep_primary_selection"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
;; The helix.scm module will be loaded first before anything else,
|
|
||||||
;; the runtime will require this module, and any functions exported
|
|
||||||
;; will now be available to be used as typed commands, e.g. :git-add :open-helix-scm
|
|
||||||
|
|
||||||
(require "helix/editor.scm")
|
|
||||||
(require (prefix-in helix. "helix/commands.scm"))
|
|
||||||
(require (prefix-in helix.static. "helix/static.scm"))
|
|
||||||
|
|
||||||
(provide shell git-add open-helix-scm open-init-scm)
|
|
||||||
|
|
||||||
(define (current-path)
|
|
||||||
(let* ([focus (editor-focus)]
|
|
||||||
[focus-doc-id (editor->doc-id focus)])
|
|
||||||
(editor-document->path focus-doc-id)))
|
|
||||||
|
|
||||||
;;@doc
|
|
||||||
;; Specialized shell implementation, where % is a wildcard for the current file
|
|
||||||
(define (shell . args)
|
|
||||||
(helix.run-shell-command
|
|
||||||
(string-join
|
|
||||||
;; Replace the % with the current file
|
|
||||||
(map (lambda (x) (if (equal? x "%") (current-path) x)) args)
|
|
||||||
" ")))
|
|
||||||
|
|
||||||
;;@doc
|
|
||||||
;; Adds the current file to git
|
|
||||||
(define (git-add)
|
|
||||||
(shell "git" "add" "%"))
|
|
||||||
|
|
||||||
;;@doc
|
|
||||||
;; Open the helix.scm file
|
|
||||||
(define (open-helix-scm)
|
|
||||||
(helix.open (helix.static.get-helix-scm-path)))
|
|
||||||
|
|
||||||
;;@doc
|
|
||||||
;; Opens the init.scm file
|
|
||||||
(define (open-init-scm)
|
|
||||||
(helix.open (helix.static.get-init-scm-path)))
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
;; The init.scm file is run at the top level, immediately after the helix.scm module is required.
|
|
||||||
;; The helix context is available here, so you can interact with the editor.
|
|
||||||
|
|
||||||
;; configure the LSP for steel
|
|
||||||
(require "helix/configuration.scm")
|
|
||||||
(define-lsp "steel-language-server" (command "steel-language-server") (args '()))
|
|
||||||
(define-language "scheme"
|
|
||||||
(language-servers '("steel-language-server")))
|
|
||||||
|
|
||||||
;; show splash screen - when you open with no argument
|
|
||||||
(require "mattwparas-helix-package/splash.scm")
|
|
||||||
(when (equal? (command-line) '("hx"))
|
|
||||||
(show-splash))
|
|
||||||
|
|
||||||
;; Terminal & shell
|
|
||||||
(require "steel-pty/term.scm")
|
|
||||||
(set-default-shell! "nu")
|
|
||||||
|
|
||||||
;; File Watcher
|
|
||||||
(require "helix-file-watcher/file-watcher.scm")
|
|
||||||
(spawn-watcher)
|
|
||||||
|
|
||||||
;; File Tree
|
|
||||||
(require "mattwparas-helix-package/cogs/file-tree.scm")
|
|
||||||
@@ -1,190 +0,0 @@
|
|||||||
# Neovim Editor
|
|
||||||
|
|
||||||
My Neovim config based on [AstroNvim](https://github.com/AstroNvim/AstroNvim). For more details,
|
|
||||||
visit the [AstroNvim website](https://astronvim.com/).
|
|
||||||
|
|
||||||
This document outlines neovim's configuration structure and various shortcuts/commands for efficient
|
|
||||||
usage.
|
|
||||||
|
|
||||||
## Screenshots
|
|
||||||
|
|
||||||
 
|
|
||||||
|
|
||||||
## Configuration Structure
|
|
||||||
|
|
||||||
| Description | Standard Location | My Location |
|
|
||||||
| ------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------- |
|
|
||||||
| Neovim's config | `~/.config/nvim` | AstroNvim's github repository, referenced as a flake input in this flake. |
|
|
||||||
| AstroNvim's user configuration | `$XDG_CONFIG_HOME/astronvim/lua/user` | [./astronvim_user/](./astronvim_user/) |
|
|
||||||
| Plugins installation directory (lazy.nvim) | `~/.local/share/nvim/` | The same as standard location, generated and managed by lazy.nvim. |
|
|
||||||
| LSP servers, DAP servers, linters, and formatters | `~/.local/share/nvim/mason/`(by mason.nvim) | [./default.nix](./default.nix), installed by nix. |
|
|
||||||
|
|
||||||
## Update/Clean Plugins
|
|
||||||
|
|
||||||
Note that lazy.nvim will not automatically update plugins, so you need to update them manually.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
:Lazy update
|
|
||||||
```
|
|
||||||
|
|
||||||
Remove all unused plugins:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
:Lazy clean
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
> via `Justfile` located at the root of this repo.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# testing
|
|
||||||
just nvim-test
|
|
||||||
|
|
||||||
# clear test data
|
|
||||||
just nvim-clear
|
|
||||||
```
|
|
||||||
|
|
||||||
## Cheetsheet
|
|
||||||
|
|
||||||
Here is the cheetsheet related to my Neovim configs. Please read vim's common cheetsheet at
|
|
||||||
[../README.md](../README.md) before reading the following.
|
|
||||||
|
|
||||||
### Incremental Selection
|
|
||||||
|
|
||||||
Provided by nvim-treesitter.
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ----------------- | -------------- |
|
|
||||||
| init selection | `<Ctrl-space>` |
|
|
||||||
| node incremental | `<Ctrl-space>` |
|
|
||||||
| scope incremental | `<Alt-Space>` |
|
|
||||||
| node decremental | `Backspace` |
|
|
||||||
|
|
||||||
### Search and Jump
|
|
||||||
|
|
||||||
Provided by [flash.nvim](https://github.com/folke/flash.nvim), it's a intelligent search and jump
|
|
||||||
plugin.
|
|
||||||
|
|
||||||
1. It enhances the default search and jump behavior of neovim.(search with prefix `/`)
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ----------------- | ------------------------------------------------------------------------------------------------------------ |
|
|
||||||
| Search | `/`(normal search), `s`(disable all code highlight, only highlight matches) |
|
|
||||||
| Treesitter Search | `yR`,`dR`, `cR`, `vR`, `ctrl+v+R`(around your matches, all the surrounding Treesitter nodes will be labeled) |
|
|
||||||
| Remote Flash | `yr`, `dr`, `cr`, (around your matches, all the surrounding Treesitter nodes will be labeled) |
|
|
||||||
|
|
||||||
### Commands & Shortcuts
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ----------------------------- | -------------- |
|
|
||||||
| Open file explorer | `<Space> + e` |
|
|
||||||
| Focus Neotree to current file | `<Space> + o` |
|
|
||||||
| Toggle line wrap | `<Space> + uw` |
|
|
||||||
| Show line diagnostics | `gl` |
|
|
||||||
| Show function/variable info | `K` |
|
|
||||||
| References of a symbol | `gr` |
|
|
||||||
| Next tab | `]b` |
|
|
||||||
| Previous tab | `[b` |
|
|
||||||
|
|
||||||
### Window Navigation
|
|
||||||
|
|
||||||
- Switch between windows: `<Ctrl> + h/j/k/l`
|
|
||||||
- Resize windows: `<Ctrl> + Up/Down/Left/Right` (`<Ctrl-w> + -/+/</>`)
|
|
||||||
- Note: On macOS, conflicts with system shortcuts
|
|
||||||
- Disable in System Preferences -> Keyboard -> Shortcuts -> Mission Control
|
|
||||||
|
|
||||||
### Splitting and Buffers
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ---------------- | ------------- |
|
|
||||||
| Horizontal Split | `\` |
|
|
||||||
| Vertical Split | `\|` |
|
|
||||||
| Close Buffer | `<Space> + c` |
|
|
||||||
|
|
||||||
### Editing and Formatting
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ----------------------------------------------------- | -------------- |
|
|
||||||
| Toggle buffer auto formatting | `<Space> + uf` |
|
|
||||||
| Format Document | `<Space> + lf` |
|
|
||||||
| Code Actions | `<Space> + la` |
|
|
||||||
| Rename | `<Space> + lr` |
|
|
||||||
| Opening LSP symbols | `<Space> + lS` |
|
|
||||||
| Comment Line(support multiple lines) | `<Space> + /` |
|
|
||||||
| Open filepath/URL at cursor(neovim's builtin command) | `gx` |
|
|
||||||
| Find files by name (fzf) | `<Space> + ff` |
|
|
||||||
| Find files by name (include hidden files) | `<Space> + fF` |
|
|
||||||
| Grep string in files (ripgrep) | `<Space> + fw` |
|
|
||||||
| Grep string in files (include hidden files) | `<Space> + fW` |
|
|
||||||
|
|
||||||
### Git
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| -------------------------- | --------------- |
|
|
||||||
| Git Commits (repository) | `:<Space> + gc` |
|
|
||||||
| Git Commits (current file) | `:<Space> + gC` |
|
|
||||||
| Git Branches | `:<Space> + gb` |
|
|
||||||
| Git Status | `:<Space> + gt` |
|
|
||||||
|
|
||||||
### Sessions
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ------------------------------ | -------------- |
|
|
||||||
| Save Session | `<Space> + Ss` |
|
|
||||||
| Last Session | `<Space> + Sl` |
|
|
||||||
| Delete Session | `<Space> + Sd` |
|
|
||||||
| Search Session | `<Space> + Sf` |
|
|
||||||
| Load Current Directory Session | `<Space> + S.` |
|
|
||||||
|
|
||||||
### Debugging
|
|
||||||
|
|
||||||
Press `<Space> + D` to view available bindings and options.
|
|
||||||
|
|
||||||
### Search and Replace Globally
|
|
||||||
|
|
||||||
| Description | Shortcut |
|
|
||||||
| ------------------------------------------ | -------------- |
|
|
||||||
| Open spectre.nvim search and replace panel | `<Space> + ss` |
|
|
||||||
|
|
||||||
Search and replace via cli(fd + sad + delta):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
fd "\\.nix$" . | sad '<pattern>' '<replacement>' | delta
|
|
||||||
```
|
|
||||||
|
|
||||||
### Surrounding Characters
|
|
||||||
|
|
||||||
Provided by mini.surround plugin.
|
|
||||||
|
|
||||||
- Prefix `gz`
|
|
||||||
|
|
||||||
| Action | Shortcut | Description |
|
|
||||||
| ------------------------------ | -------- | ----------------------------------------------- |
|
|
||||||
| Add surrounding characters | `gzaiw'` | Add `'` around the word under cursor |
|
|
||||||
| Delete surrounding characters | `gzd'` | Delete `'` around the word under cursor |
|
|
||||||
| Replace surrounding characters | `gzr'"` | Replace `'` by `"` around the word under cursor |
|
|
||||||
| Highlight surrounding | `gzh'` | Highlight `'` around the word under cursor |
|
|
||||||
|
|
||||||
### Text Manipulation
|
|
||||||
|
|
||||||
| Action | |
|
|
||||||
| -------------------------------------- | ------------- |
|
|
||||||
| Join with LSP intelligence(treesj) | `<Space> + j` |
|
|
||||||
| Split Line into Multiple Lines(treesj) | `<Space> + s` |
|
|
||||||
|
|
||||||
### Miscellaneous
|
|
||||||
|
|
||||||
| Action | |
|
|
||||||
| --------------------------------- | --------------- |
|
|
||||||
| Show all Yank History | `:<Space> + yh` |
|
|
||||||
| Show undo history | `:<Space> + uh` |
|
|
||||||
| Show the path of the current file | `:!echo $%` |
|
|
||||||
|
|
||||||
## Additional Resources
|
|
||||||
|
|
||||||
For more detailed information and advanced usage, refer to:
|
|
||||||
|
|
||||||
1. [AstroNvim walkthrough](https://astronvim.com/Basic%20Usage/walkthrough)
|
|
||||||
2. [./astronvim_user/mapping.lua](./astronvim_user/mappings.lua)
|
|
||||||
3. All the plugins' documentations
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
###############################################################################
|
|
||||||
#
|
|
||||||
# AstroNvim's configuration and all its dependencies(lsp, formatter, etc.)
|
|
||||||
#
|
|
||||||
#e#############################################################################
|
|
||||||
let
|
|
||||||
shellAliases = {
|
|
||||||
v = "nvim";
|
|
||||||
vdiff = "nvim -d";
|
|
||||||
};
|
|
||||||
# the path to nvim directory
|
|
||||||
# to make this symlink work, we need to git clone this repo to your home directory.
|
|
||||||
configPath = "${config.home.homeDirectory}/nix-config/home/base/tui/editors/neovim/nvim";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
xdg.configFile."nvim".source = config.lib.file.mkOutOfStoreSymlink configPath;
|
|
||||||
# Disable catppuccin to avoid conflict with my non-nix config.
|
|
||||||
catppuccin.nvim.enable = false;
|
|
||||||
|
|
||||||
home.shellAliases = shellAliases;
|
|
||||||
programs.nushell.shellAliases = shellAliases;
|
|
||||||
|
|
||||||
programs.neovim = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.neovim-unwrapped;
|
|
||||||
|
|
||||||
# defaultEditor = true; # set EDITOR at system-wide level
|
|
||||||
viAlias = true;
|
|
||||||
vimAlias = true;
|
|
||||||
|
|
||||||
# These environment variables are needed to build and run binaries
|
|
||||||
# with external package managers like mason.nvim.
|
|
||||||
#
|
|
||||||
# LD_LIBRARY_PATH is also needed to run the non-FHS binaries downloaded by mason.nvim.
|
|
||||||
# it will be set by nix-ld, so we do not need to set it here again.
|
|
||||||
extraWrapperArgs = with pkgs; [
|
|
||||||
# LIBRARY_PATH is used by gcc before compilation to search directories
|
|
||||||
# containing static and shared libraries that need to be linked to your program.
|
|
||||||
"--suffix"
|
|
||||||
"LIBRARY_PATH"
|
|
||||||
":"
|
|
||||||
"${lib.makeLibraryPath [
|
|
||||||
stdenv.cc.cc
|
|
||||||
zlib
|
|
||||||
]}"
|
|
||||||
|
|
||||||
# PKG_CONFIG_PATH is used by pkg-config before compilation to search directories
|
|
||||||
# containing .pc files that describe the libraries that need to be linked to your program.
|
|
||||||
"--suffix"
|
|
||||||
"PKG_CONFIG_PATH"
|
|
||||||
":"
|
|
||||||
"${lib.makeSearchPathOutput "dev" "lib/pkgconfig" [
|
|
||||||
stdenv.cc.cc
|
|
||||||
zlib
|
|
||||||
]}"
|
|
||||||
];
|
|
||||||
|
|
||||||
# Currently we use lazy.nvim as neovim's package manager, so comment this one.
|
|
||||||
#
|
|
||||||
# NOTE: These plugins will not be used by astronvim by default!
|
|
||||||
# We should install packages that will compile locally or download FHS binaries via Nix!
|
|
||||||
# and use lazy.nvim's `dir` option to specify the package directory in nix store.
|
|
||||||
# so that these plugins can work on NixOS.
|
|
||||||
#
|
|
||||||
# related project:
|
|
||||||
# https://github.com/b-src/lazy-nix-helper.nvim
|
|
||||||
plugins = with pkgs.vimPlugins; [
|
|
||||||
# search all the plugins using https://search.nixos.org/packages
|
|
||||||
telescope-fzf-native-nvim
|
|
||||||
|
|
||||||
nvim-treesitter.withAllGrammars
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"neodev": {
|
|
||||||
"library": {
|
|
||||||
"enabled": true,
|
|
||||||
"plugins": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"neoconf": {
|
|
||||||
"plugins": {
|
|
||||||
"lua_ls": {
|
|
||||||
"enabled": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lspconfig": {
|
|
||||||
"lua_ls": {
|
|
||||||
"Lua.format.enable": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
column_width = 120
|
|
||||||
line_endings = "Unix"
|
|
||||||
indent_type = "Spaces"
|
|
||||||
indent_width = 2
|
|
||||||
quote_style = "AutoPreferDouble"
|
|
||||||
call_parentheses = "None"
|
|
||||||
collapse_simple_statement = "Always"
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
-- This file simply bootstraps the installation of Lazy.nvim and then calls other files for execution
|
|
||||||
-- This file doesn't necessarily need to be touched, BE CAUTIOUS editing this file and proceed at your own risk.
|
|
||||||
local lazypath = vim.env.LAZY or vim.fn.stdpath "data" .. "/lazy/lazy.nvim"
|
|
||||||
if not (vim.env.LAZY or (vim.uv or vim.loop).fs_stat(lazypath)) then
|
|
||||||
-- stylua: ignore
|
|
||||||
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
|
|
||||||
end
|
|
||||||
vim.opt.rtp:prepend(lazypath)
|
|
||||||
|
|
||||||
-- validate that lazy is available
|
|
||||||
if not pcall(require, "lazy") then
|
|
||||||
-- stylua: ignore
|
|
||||||
vim.api.nvim_echo({ { ("Unable to load lazy from: %s\n"):format(lazypath), "ErrorMsg" }, { "Press any key to exit...", "MoreMsg" } }, true, {})
|
|
||||||
vim.fn.getchar()
|
|
||||||
vim.cmd.quit()
|
|
||||||
end
|
|
||||||
|
|
||||||
require "lazy_setup"
|
|
||||||
require "polish"
|
|
||||||
@@ -1,141 +0,0 @@
|
|||||||
{
|
|
||||||
"AstroNvim": { "branch": "main", "commit": "c5e610f614e74c9dd9bf11760c4d0ad2c98c0abe" },
|
|
||||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
|
||||||
"LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" },
|
|
||||||
"aerial.nvim": { "branch": "master", "commit": "3284a2cb858ba009c79da87d5e010ccee3c99c4d" },
|
|
||||||
"alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" },
|
|
||||||
"astrocommunity": { "branch": "main", "commit": "2db3ee2ce37f9e2bc9e6ea2c3e2e6292ca4d33bf" },
|
|
||||||
"astrocore": { "branch": "main", "commit": "44a3dc0bf1591022b2a6bc89dccdfac1be17bec9" },
|
|
||||||
"astrolsp": { "branch": "main", "commit": "909fbe64f3f87d089ff3777751261544557117cc" },
|
|
||||||
"astrotheme": { "branch": "main", "commit": "f12dcf64b1f9a05839c3ac2146f550f43bae9dab" },
|
|
||||||
"astroui": { "branch": "main", "commit": "e923a84c488d879a260fc9cfb2dc27dd870fb6ac" },
|
|
||||||
"autosave.nvim": { "branch": "main", "commit": "348f72cf0241e3e736e3396c4834def2f8ef8d10" },
|
|
||||||
"avante.nvim": { "branch": "main", "commit": "508cc4c22c78d565d270df8dec5449db07800296" },
|
|
||||||
"catppuccin": { "branch": "main", "commit": "fa42eb5e26819ef58884257d5ae95dd0552b9a66" },
|
|
||||||
"clangd_extensions.nvim": {
|
|
||||||
"branch": "main",
|
|
||||||
"commit": "db28f29be928d18cbfb86fbfb9f83f584f658feb"
|
|
||||||
},
|
|
||||||
"cmake-tools.nvim": { "branch": "master", "commit": "17244215b1a96e4b2a83a16abd6719197f270f96" },
|
|
||||||
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
|
||||||
"cmp-conjure": { "branch": "master", "commit": "8c9a88efedc0e5bf3165baa6af8a407afe29daf6" },
|
|
||||||
"cmp-dap": { "branch": "master", "commit": "ea92773e84c0ad3288c3bc5e452ac91559669087" },
|
|
||||||
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" },
|
|
||||||
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
|
||||||
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
|
||||||
"conjure": { "branch": "main", "commit": "5f15eb0322b5530eefb16457c061e7c2ccd7cf13" },
|
|
||||||
"crates.nvim": { "branch": "main", "commit": "5d8b1bef686db0fabe5f1bb593744b617e8f1405" },
|
|
||||||
"deno-nvim": { "branch": "master", "commit": "5a2f9205df5539c4a0696e73893bf8d1b0cae406" },
|
|
||||||
"dressing.nvim": { "branch": "master", "commit": "3a45525bb182730fe462325c99395529308f431e" },
|
|
||||||
"flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" },
|
|
||||||
"flit.nvim": { "branch": "main", "commit": "1ef72de6a02458d31b10039372c8a15ab8989e0d" },
|
|
||||||
"friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" },
|
|
||||||
"fzf-lua": { "branch": "main", "commit": "a4404dee0a65d3c2e2b292206d10b16567d088c9" },
|
|
||||||
"gitsigns.nvim": { "branch": "main", "commit": "7010000889bfb6c26065e0b0f7f1e6aa9163edd9" },
|
|
||||||
"gopher.nvim": { "branch": "main", "commit": "de585144ebde9f0516fb9b542dd42e90c7835b59" },
|
|
||||||
"goto-preview": { "branch": "main", "commit": "d1faf6ea992b5bcaaaf2c682e1aba3131a01143e" },
|
|
||||||
"guess-indent.nvim": { "branch": "main", "commit": "6cd61f7a600bb756e558627cd2e740302c58e32d" },
|
|
||||||
"heirline.nvim": { "branch": "master", "commit": "fae936abb5e0345b85c3a03ecf38525b0828b992" },
|
|
||||||
"indent-blankline.nvim": {
|
|
||||||
"branch": "master",
|
|
||||||
"commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba"
|
|
||||||
},
|
|
||||||
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
|
|
||||||
"lazydev.nvim": { "branch": "main", "commit": "f59bd14a852ca43db38e3662395354cb2a9b13e0" },
|
|
||||||
"leap.nvim": { "branch": "main", "commit": "10c14af4ddfb34dbd7721f0bfb2b4d91f0558907" },
|
|
||||||
"lsp_signature.nvim": {
|
|
||||||
"branch": "master",
|
|
||||||
"commit": "2923666d092300e6d03c8d895991d0bef43f1613"
|
|
||||||
},
|
|
||||||
"lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" },
|
|
||||||
"luarocks.nvim": { "branch": "main", "commit": "1db9093915eb16ba2473cfb8d343ace5ee04130a" },
|
|
||||||
"markdown-preview.nvim": {
|
|
||||||
"branch": "main",
|
|
||||||
"commit": "462ce41af003f5cdadab856f3a42dc27e39b89c8"
|
|
||||||
},
|
|
||||||
"mason-lspconfig.nvim": {
|
|
||||||
"branch": "main",
|
|
||||||
"commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245"
|
|
||||||
},
|
|
||||||
"mason-null-ls.nvim": { "branch": "main", "commit": "2b8433f76598397fcc97318d410e0c4f7a4bea6a" },
|
|
||||||
"mason-nvim-dap.nvim": { "branch": "main", "commit": "4c2cdc69d69fe00c15ae8648f7e954d99e5de3ea" },
|
|
||||||
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
|
|
||||||
"mini.ai": { "branch": "main", "commit": "d172ada7b0281044a06cb9a625a862553c457b6f" },
|
|
||||||
"mini.bufremove": { "branch": "main", "commit": "285bdac9596ee7375db50c0f76ed04336dcd2685" },
|
|
||||||
"mini.surround": { "branch": "main", "commit": "1a2b59c77a0c4713a5bd8972da322f842f4821b1" },
|
|
||||||
"neo-tree.nvim": { "branch": "main", "commit": "f481de16a0eb59c985abac8985e3f2e2f75b4875" },
|
|
||||||
"neoconf.nvim": { "branch": "main", "commit": "f630568a4d04154803886f21ca60923f12709f0f" },
|
|
||||||
"nfnl": { "branch": "main", "commit": "143b595069d98d47b26b80f0e0375420673de4af" },
|
|
||||||
"none-ls.nvim": { "branch": "main", "commit": "a117163db44c256d53c3be8717f3e1a2a28e6299" },
|
|
||||||
"nui.nvim": { "branch": "main", "commit": "a0fd35fcbb4cb479366f1dc5f20145fd718a3733" },
|
|
||||||
"nvim-autopairs": { "branch": "master", "commit": "68f0e5c3dab23261a945272032ee6700af86227a" },
|
|
||||||
"nvim-cmp": { "branch": "main", "commit": "1e1900b0769324a9675ef85b38f99cca29e203b3" },
|
|
||||||
"nvim-colorizer.lua": {
|
|
||||||
"branch": "master",
|
|
||||||
"commit": "517df88cf2afb36652830df2c655df2da416a0ae"
|
|
||||||
},
|
|
||||||
"nvim-dap": { "branch": "master", "commit": "6a5bba0ddea5d419a783e170c20988046376090d" },
|
|
||||||
"nvim-dap-go": { "branch": "main", "commit": "8763ced35b19c8dc526e04a70ab07c34e11ad064" },
|
|
||||||
"nvim-dap-python": { "branch": "master", "commit": "261ce649d05bc455a29f9636dc03f8cdaa7e0e2c" },
|
|
||||||
"nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" },
|
|
||||||
"nvim-jdtls": { "branch": "master", "commit": "4d77ff02063cf88963d5cf10683ab1fd15d072de" },
|
|
||||||
"nvim-lsp-file-operations": {
|
|
||||||
"branch": "master",
|
|
||||||
"commit": "9744b738183a5adca0f916527922078a965515ed"
|
|
||||||
},
|
|
||||||
"nvim-lspconfig": { "branch": "master", "commit": "185b2af444b27d6541c02d662b5b68190e5cf0c4" },
|
|
||||||
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
|
|
||||||
"nvim-notify": { "branch": "master", "commit": "a3020c2cf4dfc4c4f390c4a21e84e35e46cf5d17" },
|
|
||||||
"nvim-scrollbar": { "branch": "main", "commit": "5b103ef0fd2e8b9b4be3878ed38d224522192c6c" },
|
|
||||||
"nvim-spectre": { "branch": "master", "commit": "72f56f7585903cd7bf92c665351aa585e150af0f" },
|
|
||||||
"nvim-spider": { "branch": "main", "commit": "d4bdc45eac425e77108f068bd0706ff3ac20be7f" },
|
|
||||||
"nvim-treesitter": { "branch": "master", "commit": "f8aaf5ce4e27cd20de917946b2ae5c968a2c2858" },
|
|
||||||
"nvim-treesitter-textobjects": {
|
|
||||||
"branch": "master",
|
|
||||||
"commit": "9937e5e356e5b227ec56d83d0a9d0a0f6bc9cad4"
|
|
||||||
},
|
|
||||||
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
|
|
||||||
"nvim-ts-context-commentstring": {
|
|
||||||
"branch": "main",
|
|
||||||
"commit": "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f"
|
|
||||||
},
|
|
||||||
"nvim-ufo": { "branch": "main", "commit": "61463090a4f55f5d080236ea62f09d1cd8976ff3" },
|
|
||||||
"nvim-vtsls": { "branch": "main", "commit": "60b493e641d3674c030c660cabe7a2a3f7a914be" },
|
|
||||||
"nvim-web-devicons": { "branch": "master", "commit": "4c3a5848ee0b09ecdea73adcd2a689190aeb728c" },
|
|
||||||
"nvim-window-picker": { "branch": "main", "commit": "6382540b2ae5de6c793d4aa2e3fe6dbb518505ec" },
|
|
||||||
"orgmode": { "branch": "master", "commit": "b6d14eb0a1553a0ef4114346d67605de82d0f7fb" },
|
|
||||||
"package-info.nvim": { "branch": "master", "commit": "4f1b8287dde221153ec9f2acd46e8237d2d0881e" },
|
|
||||||
"parinfer-rust": { "branch": "master", "commit": "afe6b1176cd805c000713e23b654fbf4b9f4b156" },
|
|
||||||
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
|
|
||||||
"presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" },
|
|
||||||
"promise-async": { "branch": "main", "commit": "38a4575da9497326badd3995e768b4ccf0bb153e" },
|
|
||||||
"refactoring.nvim": { "branch": "master", "commit": "74b608dfee827c2372250519d433cc21cb083407" },
|
|
||||||
"render-markdown.nvim": {
|
|
||||||
"branch": "main",
|
|
||||||
"commit": "c809fc129f842a7055c672593d24be6346bcc673"
|
|
||||||
},
|
|
||||||
"resession.nvim": { "branch": "master", "commit": "cc819b0489938d03e4f3532a583354f0287c015b" },
|
|
||||||
"rustaceanvim": { "branch": "master", "commit": "322224d00a731d75eed6b700d38e460fd30f6e3c" },
|
|
||||||
"schemastore.nvim": { "branch": "main", "commit": "e4f80f37cd11ed58a6e914cc30850749f021b6a7" },
|
|
||||||
"sentiment.nvim": { "branch": "main", "commit": "54a6db15b630eccfa98c32a76baf90f21c6f1e40" },
|
|
||||||
"smart-splits.nvim": { "branch": "master", "commit": "ddb23c1a1cf1507bda487cda7f6e4690965ef9f5" },
|
|
||||||
"telescope-fzf-native.nvim": {
|
|
||||||
"branch": "main",
|
|
||||||
"commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55"
|
|
||||||
},
|
|
||||||
"telescope-undo.nvim": { "branch": "main", "commit": "928d0c2dc9606e01e2cc547196f48d2eaecf58e5" },
|
|
||||||
"telescope.nvim": { "branch": "0.1.x", "commit": "a17d611a0e111836a1db5295f04945df407c5135" },
|
|
||||||
"todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" },
|
|
||||||
"tree-sitter-nu": { "branch": "main", "commit": "d62bb4a0c78e9476a6dd0081761444f6870252ed" },
|
|
||||||
"treesj": { "branch": "main", "commit": "3b4a2bc42738a63de17e7485d4cc5e49970ddbcc" },
|
|
||||||
"tsc.nvim": { "branch": "main", "commit": "8c1b4ec6a48d038a79ced8674cb15e7db6dd8ef0" },
|
|
||||||
"venv-selector.nvim": {
|
|
||||||
"branch": "regexp",
|
|
||||||
"commit": "c677caa1030808a9f90092e522de7cc20c1390dd"
|
|
||||||
},
|
|
||||||
"vim-illuminate": { "branch": "master", "commit": "19cb21f513fc2b02f0c66be70107741e837516a1" },
|
|
||||||
"vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" },
|
|
||||||
"vim-wakatime": { "branch": "master", "commit": "f39c4a201ae350aaba713b59d4a4fdd88e0811aa" },
|
|
||||||
"which-key.nvim": { "branch": "main", "commit": "fcbf4eea17cb299c02557d576f0d568878e354a4" },
|
|
||||||
"yanky.nvim": { "branch": "main", "commit": "04775cc6e10ef038c397c407bc17f00a2f52b378" }
|
|
||||||
}
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
-- AstroCommunity: import any community modules here
|
|
||||||
-- We import this file in `lazy_setup.lua` before the `plugins/` folder.
|
|
||||||
-- This guarantees that the specs are processed before any user plugins.
|
|
||||||
|
|
||||||
---@type LazySpec
|
|
||||||
return {
|
|
||||||
"AstroNvim/astrocommunity",
|
|
||||||
-- Motion
|
|
||||||
{ import = "astrocommunity.motion.mini-surround" },
|
|
||||||
-- https://github.com/echasnovski/mini.ai
|
|
||||||
{ import = "astrocommunity.motion.mini-ai" },
|
|
||||||
{ import = "astrocommunity.motion.flash-nvim" },
|
|
||||||
-- Highly experimental plugin that completely replaces
|
|
||||||
-- the UI for messages, cmdline and the popupmenu.
|
|
||||||
-- { import = "astrocommunity.utility.noice-nvim" },
|
|
||||||
{ import = "astrocommunity.media.vim-wakatime" },
|
|
||||||
{ import = "astrocommunity.motion.leap-nvim" },
|
|
||||||
{ import = "astrocommunity.motion.flit-nvim" },
|
|
||||||
{ import = "astrocommunity.scrolling.nvim-scrollbar" },
|
|
||||||
{ import = "astrocommunity.editing-support.todo-comments-nvim" },
|
|
||||||
-- Language Support
|
|
||||||
---- Frontend & NodeJS
|
|
||||||
{ import = "astrocommunity.pack.typescript-all-in-one" },
|
|
||||||
{ import = "astrocommunity.pack.tailwindcss" },
|
|
||||||
{ import = "astrocommunity.pack.html-css" },
|
|
||||||
{ import = "astrocommunity.pack.prisma" },
|
|
||||||
{ import = "astrocommunity.pack.vue" },
|
|
||||||
---- Configuration Language
|
|
||||||
{ import = "astrocommunity.pack.markdown" },
|
|
||||||
{ import = "astrocommunity.pack.json" },
|
|
||||||
{ import = "astrocommunity.pack.yaml" },
|
|
||||||
{ import = "astrocommunity.pack.toml" },
|
|
||||||
---- Backend / System
|
|
||||||
{ import = "astrocommunity.pack.lua" },
|
|
||||||
{ import = "astrocommunity.pack.go" },
|
|
||||||
{ import = "astrocommunity.pack.rust" },
|
|
||||||
{ import = "astrocommunity.pack.python" },
|
|
||||||
{ import = "astrocommunity.pack.java" },
|
|
||||||
{ import = "astrocommunity.pack.cmake" },
|
|
||||||
{ import = "astrocommunity.pack.cpp" },
|
|
||||||
-- { import = "astrocommunity.pack.nix" }, -- manually add config for nix, comment this one.
|
|
||||||
{ import = "astrocommunity.pack.proto" },
|
|
||||||
|
|
||||||
---- Operation & Cloud Native
|
|
||||||
{ import = "astrocommunity.pack.terraform" },
|
|
||||||
{ import = "astrocommunity.pack.bash" },
|
|
||||||
{ import = "astrocommunity.pack.docker" },
|
|
||||||
{ import = "astrocommunity.pack.helm" },
|
|
||||||
|
|
||||||
-- colorscheme
|
|
||||||
{ import = "astrocommunity.colorscheme.catppuccin" },
|
|
||||||
|
|
||||||
-- Lua implementation of CamelCaseMotion, with extra consideration of punctuation.
|
|
||||||
{ import = "astrocommunity.motion.nvim-spider" },
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
require("lazy").setup({
|
|
||||||
{
|
|
||||||
"AstroNvim/AstroNvim",
|
|
||||||
version = "^4", -- Remove version tracking to elect for nightly AstroNvim
|
|
||||||
import = "astronvim.plugins",
|
|
||||||
opts = { -- AstroNvim options must be set here with the `import` key
|
|
||||||
mapleader = " ", -- This ensures the leader key must be configured before Lazy is set up
|
|
||||||
maplocalleader = ",", -- This ensures the localleader key must be configured before Lazy is set up
|
|
||||||
icons_enabled = true, -- Set to false to disable icons (if no Nerd Font is available)
|
|
||||||
pin_plugins = nil, -- Default will pin plugins when tracking `version` of AstroNvim, set to true/false to override
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{ import = "community" },
|
|
||||||
{ import = "plugins" },
|
|
||||||
} --[[@as LazySpec]], {
|
|
||||||
-- Configure any other `lazy.nvim` configuration options here
|
|
||||||
-- https://github.com/folke/lazy.nvim?tab=readme-ov-file#%EF%B8%8F-configuration
|
|
||||||
|
|
||||||
-- try to load one of these colorschemes when starting an installation during startup
|
|
||||||
install = { colorscheme = { "catppuccin" }, },
|
|
||||||
ui = { backdrop = 100 },
|
|
||||||
performance = {
|
|
||||||
rtp = {
|
|
||||||
-- disable some rtp plugins, add more to your liking
|
|
||||||
disabled_plugins = {
|
|
||||||
"gzip",
|
|
||||||
"netrwPlugin",
|
|
||||||
"tarPlugin",
|
|
||||||
"tohtml",
|
|
||||||
"zipPlugin",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
} --[[@as LazyConfig]])
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
-- AstroCore provides a central place to modify mappings, vim options, autocommands, and more!
|
|
||||||
-- Configuration documentation can be found with `:h astrocore`
|
|
||||||
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
|
|
||||||
-- as this provides autocomplete and documentation while editing
|
|
||||||
|
|
||||||
---@type LazySpec
|
|
||||||
return {
|
|
||||||
"AstroNvim/astrocore",
|
|
||||||
---@type AstroCoreOpts
|
|
||||||
opts = {
|
|
||||||
-- Configure core features of AstroNvim
|
|
||||||
features = {
|
|
||||||
large_buf = { size = 1024 * 500, lines = 10000 }, -- set global limits for large files for disabling features like treesitter
|
|
||||||
autopairs = true, -- enable autopairs at start
|
|
||||||
cmp = true, -- enable completion at start
|
|
||||||
diagnostics_mode = 3, -- diagnostic mode on start (0 = off, 1 = no signs/virtual text, 2 = no virtual text, 3 = on)
|
|
||||||
highlighturl = true, -- highlight URLs at start
|
|
||||||
notifications = true, -- enable notifications at start
|
|
||||||
},
|
|
||||||
-- Diagnostics configuration (for vim.diagnostics.config({...})) when diagnostics are on
|
|
||||||
diagnostics = {
|
|
||||||
virtual_text = true,
|
|
||||||
underline = true,
|
|
||||||
},
|
|
||||||
-- vim options can be configured here
|
|
||||||
options = {
|
|
||||||
opt = { -- vim.opt.<key>
|
|
||||||
relativenumber = true, -- Show relative numberline
|
|
||||||
signcolumn = "auto", -- Show sign column when used only
|
|
||||||
spell = false, -- Spell checking
|
|
||||||
swapfile = false, -- Swapfile
|
|
||||||
smartindent = false, -- fix https://github.com/ryan4yin/nix-config/issues/4
|
|
||||||
title = true, -- Set the title of window to `filename [+=-] (path) - NVIM`
|
|
||||||
-- The percentage of 'columns' to use for the title
|
|
||||||
-- When the title is longer, only the end of the path name is shown.
|
|
||||||
titlelen = 20,
|
|
||||||
},
|
|
||||||
g = { -- vim.g.<key>
|
|
||||||
-- configure global vim variables (vim.g)
|
|
||||||
-- NOTE: `mapLeader` and `maplocalLeader` must be set in the AstroNvim opts or before `lazy.setup`
|
|
||||||
-- This can be found in the `lua/lazy_setup.lua` file
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- Mappings can be configured through AstroCore as well.
|
|
||||||
-- https://docs.astronvim.com/recipes/mappings/
|
|
||||||
-- NOTE: keycodes follow the casing in the vimdocs. For example, `<Leader>` must be capitalized
|
|
||||||
mappings = {
|
|
||||||
-- first key is the mode
|
|
||||||
n = {
|
|
||||||
-- second key is the lefthand side of the map
|
|
||||||
|
|
||||||
-- second key is the lefthand side of the map
|
|
||||||
-- mappings seen under group name "Buffer"
|
|
||||||
["<Leader>bn"] = { "<cmd>tabnew<cr>", desc = "New tab" },
|
|
||||||
-- quick save
|
|
||||||
-- ["<C-s>"] = { ":w!<cr>", desc = "Save File" },
|
|
||||||
|
|
||||||
-- Terminal
|
|
||||||
-- NOTE: https://neovim.io/doc/user/builtin.html#jobstart()
|
|
||||||
-- 1. If {cmd} is a List it runs directly (no 'shell')
|
|
||||||
-- 2. If {cmd} is a String it runs in the 'shell'
|
|
||||||
-- search and replace globally
|
|
||||||
["<Leader>ss"] = { '<cmd>lua require("spectre").toggle()<CR>', desc = "Toggle Spectre" },
|
|
||||||
["<Leader>sw"] = {
|
|
||||||
'<cmd>lua require("spectre").open_visual({select_word=true})<CR>',
|
|
||||||
desc = "Search current word",
|
|
||||||
},
|
|
||||||
["<Leader>sp"] = {
|
|
||||||
'<cmd>lua require("spectre").open_file_search({select_word=true})<CR>',
|
|
||||||
desc = "Search on current file",
|
|
||||||
},
|
|
||||||
|
|
||||||
-- yank_history
|
|
||||||
["<Leader>yh"] = {
|
|
||||||
function() require("telescope").extensions.yank_history.yank_history() end,
|
|
||||||
desc = "Preview Yank History",
|
|
||||||
},
|
|
||||||
|
|
||||||
-- undo history
|
|
||||||
["<Leader>uh"] = { "<cmd>Telescope undo<cr>", desc = "Telescope undo" },
|
|
||||||
|
|
||||||
-- implementation/definition preview
|
|
||||||
["gpd"] = { "<cmd>lua require('goto-preview').goto_preview_definition()<CR>", desc = "goto_preview_definition" },
|
|
||||||
["gpt"] = {
|
|
||||||
"<cmd>lua require('goto-preview').goto_preview_type_definition()<CR>",
|
|
||||||
desc = "goto_preview_type_definition",
|
|
||||||
},
|
|
||||||
["gpi"] = {
|
|
||||||
"<cmd>lua require('goto-preview').goto_preview_implementation()<CR>",
|
|
||||||
desc = "goto_preview_implementation",
|
|
||||||
},
|
|
||||||
["gP"] = { "<cmd>lua require('goto-preview').close_all_win()<CR>", desc = "close_all_win" },
|
|
||||||
["gpr"] = { "<cmd>lua require('goto-preview').goto_preview_references()<CR>", desc = "goto_preview_references" },
|
|
||||||
},
|
|
||||||
t = {
|
|
||||||
-- setting a mapping to false will disable it
|
|
||||||
-- ["<esc>"] = false,
|
|
||||||
},
|
|
||||||
-- Visual mode
|
|
||||||
v = {
|
|
||||||
-- search and replace globally
|
|
||||||
["<Leader>sw"] = { '<esc><cmd>lua require("spectre").open_visual()<CR>', desc = "Search current word" },
|
|
||||||
},
|
|
||||||
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,228 +0,0 @@
|
|||||||
-- AstroLSP allows you to customize the features in AstroNvim's LSP configuration engine
|
|
||||||
-- Configuration documentation can be found with `:h astrolsp`
|
|
||||||
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
|
|
||||||
-- as this provides autocomplete and documentation while editing
|
|
||||||
|
|
||||||
---@type LazySpec
|
|
||||||
return {
|
|
||||||
"AstroNvim/astrolsp",
|
|
||||||
---@type AstroLSPOpts
|
|
||||||
opts = {
|
|
||||||
-- Configuration table of features provided by AstroLSP
|
|
||||||
features = {
|
|
||||||
autoformat = true, -- enable or disable auto formatting on start
|
|
||||||
codelens = true, -- enable/disable codelens refresh on start
|
|
||||||
inlay_hints = true, -- enable/disable inlay hints on start
|
|
||||||
semantic_tokens = true, -- enable/disable semantic token highlighting
|
|
||||||
},
|
|
||||||
-- customize lsp formatting options
|
|
||||||
formatting = {
|
|
||||||
-- control auto formatting on save
|
|
||||||
format_on_save = {
|
|
||||||
enabled = true, -- enable or disable format on save globally
|
|
||||||
allow_filetypes = { -- enable format on save for specified filetypes only
|
|
||||||
"go",
|
|
||||||
"jsonnet",
|
|
||||||
"rust",
|
|
||||||
"terraform",
|
|
||||||
"nu",
|
|
||||||
},
|
|
||||||
ignore_filetypes = { -- disable format on save for specified filetypes
|
|
||||||
-- "python",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
disabled = { -- disable formatting capabilities for the listed language servers
|
|
||||||
-- disable lua_ls formatting capability if you want to use StyLua to format your lua code
|
|
||||||
-- "lua_ls",
|
|
||||||
},
|
|
||||||
timeout_ms = 1000, -- default format timeout
|
|
||||||
-- filter = function(client) -- fully override the default formatting function
|
|
||||||
-- return true
|
|
||||||
-- end
|
|
||||||
},
|
|
||||||
-- enable servers that you already have installed without mason
|
|
||||||
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
|
|
||||||
servers = {
|
|
||||||
---- Data & Configuration Languages
|
|
||||||
"jsonls", -- json language server
|
|
||||||
"jsonnet_ls", -- jsonnet language server
|
|
||||||
"yamlls", -- yaml language server
|
|
||||||
"taplo", -- toml language server
|
|
||||||
"dagger", -- cuelsp - cue language server
|
|
||||||
"terraformls", -- terraform hcl
|
|
||||||
"marksman", -- markdown ls
|
|
||||||
"nickel_ls", -- nickel language server
|
|
||||||
-- "nil_ls", -- nix language server
|
|
||||||
"nixd", -- another nix language server
|
|
||||||
"buf_ls", -- protocol buffer language server
|
|
||||||
"dockerls", -- dockerfile
|
|
||||||
"cmake", -- cmake language server
|
|
||||||
"sqls", -- sql language server
|
|
||||||
|
|
||||||
---- General Purpose Languages
|
|
||||||
"clangd", -- c/c++
|
|
||||||
"gopls", -- go
|
|
||||||
"jdtls", -- java language server, provides only basic features
|
|
||||||
"rust_analyzer", -- rust
|
|
||||||
"pyright", -- python
|
|
||||||
"ruff", -- extremely fast Python linter and code transformation
|
|
||||||
-- "julials", -- julia language server
|
|
||||||
-- "zls", -- zig language server
|
|
||||||
"lua_ls", -- lua
|
|
||||||
"bashls", -- bash
|
|
||||||
"nushell", -- nushell language server
|
|
||||||
|
|
||||||
---- Web Development
|
|
||||||
"ts_ls", -- typescript/javascript language server
|
|
||||||
"tailwindcss", -- tailwindcss language server
|
|
||||||
"html", -- html language server
|
|
||||||
"cssls", -- css language server
|
|
||||||
"prismals", -- prisma language server
|
|
||||||
"volar", -- vue language server
|
|
||||||
|
|
||||||
---- Lisp Like
|
|
||||||
"scheme_langserver", -- scheme language server
|
|
||||||
"elixirls", -- elixir language server
|
|
||||||
-- "clojure_lsp", -- clojure language server"
|
|
||||||
|
|
||||||
---- Circuit Design
|
|
||||||
"verible", -- verilog language server
|
|
||||||
},
|
|
||||||
-- customize language server configuration options passed to `lspconfig`
|
|
||||||
---@diagnostic disable: missing-fields
|
|
||||||
config = {
|
|
||||||
-- the offset_encoding of clangd will confilicts whit null-ls
|
|
||||||
-- so we need to manually set it to utf-8
|
|
||||||
clangd = {
|
|
||||||
capabilities = {
|
|
||||||
offsetEncoding = "utf-8",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
scheme_langserver = {
|
|
||||||
filetypes = { "scheme", "scm" },
|
|
||||||
single_file_support = true,
|
|
||||||
},
|
|
||||||
rust_analyzer = {
|
|
||||||
settings = {
|
|
||||||
-- Make the rust-analyzer use its own profile,
|
|
||||||
-- so you can run cargo build without that being blocked while rust-analyzer runs.
|
|
||||||
["rust-analyzer"] = {
|
|
||||||
cargo = {
|
|
||||||
extraEnv = { CARGO_PROFILE_RUST_ANALYZER_INHERITS = "dev" },
|
|
||||||
extraArgs = { "--profile", "rust-analyzer" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- customize how language servers are attached
|
|
||||||
handlers = {
|
|
||||||
-- a function without a key is simply the default handler, functions take two parameters, the server name and the configured options table for that server
|
|
||||||
-- function(server, opts) require("lspconfig")[server].setup(opts) end
|
|
||||||
|
|
||||||
-- the key is the server that is being setup with `lspconfig`
|
|
||||||
-- rust_analyzer = false, -- setting a handler to false will disable the set up of that language server
|
|
||||||
-- pyright = function(_, opts) require("lspconfig").pyright.setup(opts) end -- or a custom handler function can be passed
|
|
||||||
},
|
|
||||||
-- Configure buffer local auto commands to add when attaching a language server
|
|
||||||
autocmds = {
|
|
||||||
-- first key is the `augroup` to add the auto commands to (:h augroup)
|
|
||||||
lsp_document_highlight = {
|
|
||||||
-- Optional condition to create/delete auto command group
|
|
||||||
-- can either be a string of a client capability or a function of `fun(client, bufnr): boolean`
|
|
||||||
-- condition will be resolved for each client on each execution and if it ever fails for all clients,
|
|
||||||
-- the auto commands will be deleted for that buffer
|
|
||||||
cond = "textDocument/documentHighlight",
|
|
||||||
-- cond = function(client, bufnr) return client.name == "lua_ls" end,
|
|
||||||
-- list of auto commands to set
|
|
||||||
{
|
|
||||||
-- events to trigger
|
|
||||||
event = { "CursorHold", "CursorHoldI" },
|
|
||||||
-- the rest of the autocmd options (:h nvim_create_autocmd)
|
|
||||||
desc = "Document Highlighting",
|
|
||||||
callback = function() vim.lsp.buf.document_highlight() end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
event = { "CursorMoved", "CursorMovedI", "BufLeave" },
|
|
||||||
desc = "Document Highlighting Clear",
|
|
||||||
callback = function() vim.lsp.buf.clear_references() end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- mappings to be set up on attaching of a language server
|
|
||||||
mappings = {
|
|
||||||
n = {
|
|
||||||
gl = { function() vim.diagnostic.open_float() end, desc = "Hover diagnostics" },
|
|
||||||
|
|
||||||
-- a `cond` key can provided as the string of a server capability to be required to attach, or a function with `client` and `bufnr` parameters from the `on_attach` that returns a boolean
|
|
||||||
-- gD = {
|
|
||||||
-- function() vim.lsp.buf.declaration() end,
|
|
||||||
-- desc = "Declaration of current symbol",
|
|
||||||
-- cond = "textDocument/declaration",
|
|
||||||
-- },
|
|
||||||
-- ["<Leader>uY"] = {
|
|
||||||
-- function() require("astrolsp.toggles").buffer_semantic_tokens() end,
|
|
||||||
-- desc = "Toggle LSP semantic highlight (buffer)",
|
|
||||||
-- cond = function(client) return client.server_capabilities.semanticTokensProvider and vim.lsp.semantic_tokens end,
|
|
||||||
-- },
|
|
||||||
|
|
||||||
-- refactoring
|
|
||||||
["<Leader>ri"] = {
|
|
||||||
function() require("refactoring").refactor "Inline Variable" end,
|
|
||||||
desc = "Inverse of extract variable",
|
|
||||||
},
|
|
||||||
["<Leader>rb"] = { function() require("refactoring").refactor "Extract Block" end, desc = "Extract Block" },
|
|
||||||
["<Leader>rbf"] = {
|
|
||||||
function() require("refactoring").refactor "Extract Block To File" end,
|
|
||||||
desc = "Extract Block To File",
|
|
||||||
},
|
|
||||||
["<Leader>rr"] = {
|
|
||||||
function() require("telescope").extensions.refactoring.refactors() end,
|
|
||||||
desc = "Prompt for a refactor to apply",
|
|
||||||
},
|
|
||||||
["<Leader>rp"] = {
|
|
||||||
function() require("refactoring").debug.printf { below = false } end,
|
|
||||||
desc = "Insert print statement to mark the calling of a function",
|
|
||||||
},
|
|
||||||
["<Leader>rv"] = {
|
|
||||||
function() require("refactoring").debug.print_var() end,
|
|
||||||
desc = "Insert print statement to print a variable",
|
|
||||||
},
|
|
||||||
["<Leader>rc"] = {
|
|
||||||
function() require("refactoring").debug.cleanup {} end,
|
|
||||||
desc = "Cleanup of all generated print statements",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- visual mode(what's the difference between v and x???)
|
|
||||||
x = {
|
|
||||||
-- refactoring
|
|
||||||
["<Leader>ri"] = {
|
|
||||||
function() require("refactoring").refactor "Inline Variable" end,
|
|
||||||
desc = "Inverse of extract variable",
|
|
||||||
},
|
|
||||||
["<Leader>re"] = {
|
|
||||||
function() require("refactoring").refactor "Extract Function" end,
|
|
||||||
desc = "Extracts the selected code to a separate function",
|
|
||||||
},
|
|
||||||
["<Leader>rf"] = {
|
|
||||||
function() require("refactoring").refactor "Extract Function To File" end,
|
|
||||||
desc = "Extract Function To File",
|
|
||||||
},
|
|
||||||
["<Leader>rv"] = {
|
|
||||||
function() require("refactoring").refactor "Extract Variable" end,
|
|
||||||
desc = "Extracts occurrences of a selected expression to its own variable",
|
|
||||||
},
|
|
||||||
["<Leader>rr"] = {
|
|
||||||
function() require("telescope").extensions.refactoring.refactors() end,
|
|
||||||
desc = "Prompt for a refactor to apply",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- A custom `on_attach` function to be run after the default `on_attach` function
|
|
||||||
-- takes two parameters `client` and `bufnr` (`:h lspconfig-setup`)
|
|
||||||
on_attach = function(client, bufnr)
|
|
||||||
-- this would disable semanticTokensProvider for all clients
|
|
||||||
-- client.server_capabilities.semanticTokensProvider = nil
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
-- AstroUI provides the basis for configuring the AstroNvim User Interface
|
|
||||||
-- Configuration documentation can be found with `:h astroui`
|
|
||||||
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
|
|
||||||
-- as this provides autocomplete and documentation while editing
|
|
||||||
|
|
||||||
---@type LazySpec
|
|
||||||
return {
|
|
||||||
"AstroNvim/astroui",
|
|
||||||
---@type AstroUIOpts
|
|
||||||
opts = {
|
|
||||||
-- change colorscheme
|
|
||||||
-- colorscheme = "astrodark",
|
|
||||||
colorscheme = "catppuccin",
|
|
||||||
-- AstroUI allows you to easily modify highlight groups easily for any and all colorschemes
|
|
||||||
highlights = {
|
|
||||||
init = { -- this table overrides highlights in all themes
|
|
||||||
-- Normal = { bg = "#000000" },
|
|
||||||
},
|
|
||||||
astrotheme = { -- a table of overrides/changes when applying the astrotheme theme
|
|
||||||
-- Normal = { bg = "#000000" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- Icons can be configured throughout the interface
|
|
||||||
icons = {
|
|
||||||
-- configure the loading of the lsp in the status line
|
|
||||||
LSPLoading1 = "⠋",
|
|
||||||
LSPLoading2 = "⠙",
|
|
||||||
LSPLoading3 = "⠹",
|
|
||||||
LSPLoading4 = "⠸",
|
|
||||||
LSPLoading5 = "⠼",
|
|
||||||
LSPLoading6 = "⠴",
|
|
||||||
LSPLoading7 = "⠦",
|
|
||||||
LSPLoading8 = "⠧",
|
|
||||||
LSPLoading9 = "⠇",
|
|
||||||
LSPLoading10 = "⠏",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
return {
|
|
||||||
"0x00-ketsu/autosave.nvim",
|
|
||||||
-- lazy-loading on events
|
|
||||||
event = { "InsertLeave", "TextChanged" },
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.prompt_style = "stdout" -- notify or stdout
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,157 +0,0 @@
|
|||||||
local prefix = "<Leader>A"
|
|
||||||
return {
|
|
||||||
"yetone/avante.nvim",
|
|
||||||
event = "User AstroFile", -- load on file open because Avante manages it's own bindings
|
|
||||||
cmd = {
|
|
||||||
"AvanteAsk",
|
|
||||||
"AvanteBuild",
|
|
||||||
"AvanteEdit",
|
|
||||||
"AvanteRefresh",
|
|
||||||
"AvanteSwitchProvider",
|
|
||||||
"AvanteShowRepoMap",
|
|
||||||
"AvanteModels",
|
|
||||||
"AvanteChat",
|
|
||||||
"AvanteChatNew",
|
|
||||||
"AvanteToggle",
|
|
||||||
"AvanteClear",
|
|
||||||
"AvanteFocus",
|
|
||||||
"AvanteStop",
|
|
||||||
},
|
|
||||||
version = false, -- Never set this value to "*"! Never!
|
|
||||||
opts = {
|
|
||||||
provider = "openrouter_claude_4",
|
|
||||||
cursor_applying_provider = "openrouter_claude_4",
|
|
||||||
behaviour = {
|
|
||||||
-- auto_suggestions = true,
|
|
||||||
enable_cursor_planning_mode = true, -- enable cursor planning mode!
|
|
||||||
},
|
|
||||||
-- WARNING: Since auto-suggestions are a high-frequency operation and therefore expensive,
|
|
||||||
-- currently designating it as `copilot` provider is dangerous because: https://github.com/yetone/avante.nvim/issues/1048
|
|
||||||
-- Of course, you can reduce the request frequency by increasing `suggestion.debounce`.
|
|
||||||
auto_suggestions_provider = "ollama",
|
|
||||||
suggestion = {
|
|
||||||
debounce = 750, -- wait for x ms before suggestion
|
|
||||||
throttle = 1200, -- wait for at least x ms before the next suggestion
|
|
||||||
},
|
|
||||||
web_search_engine = {
|
|
||||||
provider = "google", -- tavily, serpapi, searchapi, google, kagi, brave, or searxng
|
|
||||||
proxy = nil, -- proxy support, e.g., http://127.0.0.1:7890
|
|
||||||
},
|
|
||||||
|
|
||||||
providers = {
|
|
||||||
ollama = {
|
|
||||||
endpoint = "http://192.168.5.100:11434", -- Note that there is no /v1 at the end.
|
|
||||||
model = "modelscope.cn/unsloth/Qwen3-30B-A3B-GGUF",
|
|
||||||
-- model = "modelscope.cn/unsloth/Qwen3-32B-GGUF",
|
|
||||||
},
|
|
||||||
-- ==============================================
|
|
||||||
-- https://aistudio.google.com/prompts/new_chat
|
|
||||||
-- ==============================================
|
|
||||||
gemini = {
|
|
||||||
api_key_name = "GEMINI_API_KEY",
|
|
||||||
model = "gemini-2.5-pro-preview-06-05",
|
|
||||||
timeout = 30000, -- Timeout in milliseconds, increase this for reasoning models
|
|
||||||
temperature = 0,
|
|
||||||
max_completion_tokens = 8192, -- Increase this to include reasoning tokens (for reasoning models)
|
|
||||||
--reasoning_effort = "medium", -- low|medium|high, only used for reasoning models
|
|
||||||
},
|
|
||||||
-- ==============================================
|
|
||||||
-- https://openrouter.ai/rankings
|
|
||||||
-- ==============================================
|
|
||||||
openrouter_claude_4 = {
|
|
||||||
__inherited_from = "openai",
|
|
||||||
endpoint = "https://openrouter.ai/api/v1",
|
|
||||||
api_key_name = "OPENROUTER_API_KEY",
|
|
||||||
model = "anthropic/claude-sonnet-4",
|
|
||||||
},
|
|
||||||
-- ==============================================
|
|
||||||
-- https://bailian.console.aliyun.com/?tab=model
|
|
||||||
-- ==============================================
|
|
||||||
aliyun_qwen3 = {
|
|
||||||
__inherited_from = "openai",
|
|
||||||
api_key_name = "DASHSCOPE_API_KEY",
|
|
||||||
endpoint = "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|
||||||
-- model = "qwen-coder-plus-latest",
|
|
||||||
model = "qwen3-235b-a22b",
|
|
||||||
-- disable_tools = true,
|
|
||||||
},
|
|
||||||
aliyun_dpr1 = {
|
|
||||||
__inherited_from = "openai",
|
|
||||||
api_key_name = "DASHSCOPE_API_KEY",
|
|
||||||
endpoint = "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|
||||||
model = "deepseek-r1-0528",
|
|
||||||
disable_tools = true,
|
|
||||||
},
|
|
||||||
-- ==============================================
|
|
||||||
-- https://console.volcengine.com/ark/region:ark+cn-beijing/model?feature=&vendor=DeepSeek&view=VENDOR_VIEW
|
|
||||||
-- ==============================================
|
|
||||||
ark_dpr1 = {
|
|
||||||
__inherited_from = "openai",
|
|
||||||
api_key_name = "ARK_API_KEY",
|
|
||||||
endpoint = "https://ark.cn-beijing.volces.com/api/v3",
|
|
||||||
model = "deepseek-r1-250528",
|
|
||||||
-- disable_tools = true,
|
|
||||||
},
|
|
||||||
-- ==============================================
|
|
||||||
-- https://cloud.siliconflow.cn/models
|
|
||||||
-- ==============================================
|
|
||||||
sflow_dpr1 = {
|
|
||||||
__inherited_from = "openai",
|
|
||||||
api_key_name = "SILICONFLOW_API_KEY",
|
|
||||||
endpoint = "https://api.siliconflow.cn/v1",
|
|
||||||
model = "Pro/deepseek-ai/DeepSeek-R1",
|
|
||||||
-- disable_tools = true,
|
|
||||||
},
|
|
||||||
-- ==============================================
|
|
||||||
-- https://platform.deepseek.com/usage
|
|
||||||
-- ==============================================
|
|
||||||
dp_coder = {
|
|
||||||
__inherited_from = "openai",
|
|
||||||
api_key_name = "DEEPSEEK_API_KEY",
|
|
||||||
endpoint = "https://api.deepseek.com",
|
|
||||||
model = "deepseek-coder",
|
|
||||||
},
|
|
||||||
-- deepseek chat v3
|
|
||||||
dp_chat = {
|
|
||||||
__inherited_from = "openai",
|
|
||||||
api_key_name = "DEEPSEEK_API_KEY",
|
|
||||||
endpoint = "https://api.deepseek.com",
|
|
||||||
model = "deepseek-chat",
|
|
||||||
-- disable_tools = true,
|
|
||||||
},
|
|
||||||
-- deepseek r1
|
|
||||||
dp_r1 = {
|
|
||||||
__inherited_from = "openai",
|
|
||||||
api_key_name = "DEEPSEEK_API_KEY",
|
|
||||||
endpoint = "https://api.deepseek.com",
|
|
||||||
model = "deepseek-reasoner",
|
|
||||||
-- disable_tools = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
|
|
||||||
build = "make",
|
|
||||||
-- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows
|
|
||||||
dependencies = {
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
{ "stevearc/dressing.nvim", optional = true },
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
"MunifTanjim/nui.nvim",
|
|
||||||
{ "AstroNvim/astrocore", opts = function(_, opts) opts.mappings.n[prefix] = { desc = " Avante" } end },
|
|
||||||
--- The below dependencies are optional,
|
|
||||||
-- "echasnovski/mini.pick", -- for file_selector provider mini.pick
|
|
||||||
"nvim-telescope/telescope.nvim", -- for file_selector provider telescope
|
|
||||||
"hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
|
|
||||||
"ibhagwan/fzf-lua", -- for file_selector provider fzf
|
|
||||||
"nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
|
|
||||||
-- "zbirenbaum/copilot.lua", -- for providers='copilot'
|
|
||||||
{
|
|
||||||
-- Make sure to set this up properly if you have lazy=true
|
|
||||||
"MeanderingProgrammer/render-markdown.nvim",
|
|
||||||
opts = {
|
|
||||||
file_types = { "markdown", "Avante" },
|
|
||||||
},
|
|
||||||
ft = { "markdown", "Avante" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
return {
|
|
||||||
"catppuccin/nvim",
|
|
||||||
name = "catppuccin",
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.flavour = "mocha" -- latte, frappe, macchiato, mocha
|
|
||||||
opts.transparent_background = true -- setting the background color.
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
return {
|
|
||||||
"Olical/conjure",
|
|
||||||
ft = { "clojure", "fennel", "python", "scheme" }, -- etc
|
|
||||||
-- [Optional] cmp-conjure for cmp
|
|
||||||
dependencies = {
|
|
||||||
{
|
|
||||||
"PaterJason/cmp-conjure",
|
|
||||||
config = function()
|
|
||||||
local cmp = require "cmp"
|
|
||||||
local config = cmp.get_config()
|
|
||||||
table.insert(config.sources, {
|
|
||||||
name = "buffer",
|
|
||||||
option = {
|
|
||||||
sources = {
|
|
||||||
{ name = "conjure" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
cmp.setup(config)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
config = function(_, opts)
|
|
||||||
require("conjure.main").main()
|
|
||||||
require("conjure.mapping")["on-filetype"]()
|
|
||||||
end,
|
|
||||||
init = function()
|
|
||||||
-- Set configuration options here
|
|
||||||
vim.g["conjure#debug"] = true
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
return { "folke/flash.nvim", vscode = false }
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
-- implementation/definition preview
|
|
||||||
return {
|
|
||||||
"rmagatti/goto-preview",
|
|
||||||
config = function() require("goto-preview").setup {} end,
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
-- markdown preview
|
|
||||||
return {
|
|
||||||
"0x00-ketsu/markdown-preview.nvim",
|
|
||||||
ft = { "md", "markdown", "mkd", "mkdn", "mdwn", "mdown", "mdtxt", "mdtext", "rmd", "wiki" },
|
|
||||||
config = function()
|
|
||||||
require("markdown-preview").setup {
|
|
||||||
-- your configuration comes here
|
|
||||||
-- or leave it empty to use the default settings
|
|
||||||
-- refer to the setup section below
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
-- Customize Mason plugins
|
|
||||||
--
|
|
||||||
-- NOTE: Issue - mason.nvim does not support NixOS:
|
|
||||||
-- https://github.com/williamboman/mason.nvim/issues/428
|
|
||||||
|
|
||||||
---@type LazySpec
|
|
||||||
return {
|
|
||||||
-- use mason-lspconfig to configure LSP installations
|
|
||||||
{
|
|
||||||
"williamboman/mason-lspconfig.nvim",
|
|
||||||
-- mason is unusable on NixOS, disable it.
|
|
||||||
-- ensure_installed nothing
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.ensure_installed = nil
|
|
||||||
opts.automatic_installation = false
|
|
||||||
end,
|
|
||||||
|
|
||||||
-- overrides `require("mason-lspconfig").setup(...)`
|
|
||||||
-- opts = function(_, opts)
|
|
||||||
-- -- add more things to the ensure_installed table protecting against community packs modifying it
|
|
||||||
-- opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, {
|
|
||||||
-- "lua_ls",
|
|
||||||
-- -- add more arguments for adding more language servers
|
|
||||||
-- })
|
|
||||||
-- end,
|
|
||||||
},
|
|
||||||
-- use mason-null-ls to configure Formatters/Linter installation for null-ls sources
|
|
||||||
{
|
|
||||||
"jay-babu/mason-null-ls.nvim",
|
|
||||||
-- mason is unusable on NixOS, disable it.
|
|
||||||
-- ensure_installed nothing
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.ensure_installed = nil
|
|
||||||
opts.automatic_installation = false
|
|
||||||
end,
|
|
||||||
|
|
||||||
-- -- overrides `require("mason-null-ls").setup(...)`
|
|
||||||
-- opts = function(_, opts)
|
|
||||||
-- -- add more things to the ensure_installed table protecting against community packs modifying it
|
|
||||||
-- opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, {
|
|
||||||
-- "prettier",
|
|
||||||
-- "stylua",
|
|
||||||
-- -- add more arguments for adding more null-ls sources
|
|
||||||
-- })
|
|
||||||
-- end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
-- https://docs.astronvim.com/recipes/dap/
|
|
||||||
"jay-babu/mason-nvim-dap.nvim",
|
|
||||||
-- mason is unusable on NixOS, disable it.
|
|
||||||
-- ensure_installed nothing
|
|
||||||
-- opts = function(_, opts)
|
|
||||||
-- opts.ensure_installed = nil
|
|
||||||
-- opts.automatic_installation = false
|
|
||||||
-- end,
|
|
||||||
|
|
||||||
-- overrides `require("mason-nvim-dap").setup(...)`
|
|
||||||
-- opts = function(_, opts)
|
|
||||||
-- -- add more things to the ensure_installed table protecting against community packs modifying it
|
|
||||||
-- opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, {
|
|
||||||
-- "python",
|
|
||||||
-- -- add more arguments for adding more debuggers
|
|
||||||
-- })
|
|
||||||
-- end,
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"williamboman/mason.nvim",
|
|
||||||
opts = function(_, opts)
|
|
||||||
-- Where Mason should put its bin location in your PATH. Can be one of:
|
|
||||||
-- - "prepend" (default, Mason's bin location is put first in PATH)
|
|
||||||
-- - "append" (Mason's bin location is put at the end of PATH)
|
|
||||||
-- - "skip" (doesn't modify PATH)
|
|
||||||
---@type '"prepend"' | '"append"' | '"skip"'
|
|
||||||
opts.PATH = "append" -- use mason's package only when no other package is found
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
-- File explorer(Custom configs)
|
|
||||||
return {
|
|
||||||
"nvim-neo-tree/neo-tree.nvim",
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.filesystem.filtered_items = {
|
|
||||||
visible = true, -- visible by default
|
|
||||||
hide_dotfiles = false,
|
|
||||||
hide_gitignored = false,
|
|
||||||
}
|
|
||||||
opts.filesystem.follow_current_file = {
|
|
||||||
enabled = true, -- This will find and focus the file in the active buffer every time
|
|
||||||
leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal`
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
-- full signature help, docs and completion for the nvim lua API.
|
|
||||||
return { "folke/neodev.nvim", opts = {} }
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
return { "Olical/nfnl", ft = "fennel" }
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-- Customize None-ls sources
|
|
||||||
|
|
||||||
---@type LazySpec
|
|
||||||
return {
|
|
||||||
"nvimtools/none-ls.nvim",
|
|
||||||
opts = function(_, config)
|
|
||||||
-- config variable is the default configuration table for the setup function call
|
|
||||||
local null_ls = require "null-ls"
|
|
||||||
local code_actions = null_ls.builtins.code_actions
|
|
||||||
local diagnostics = null_ls.builtins.diagnostics
|
|
||||||
local formatting = null_ls.builtins.formatting
|
|
||||||
local hover = null_ls.builtins.hover
|
|
||||||
local completion = null_ls.builtins.completion
|
|
||||||
|
|
||||||
-- Check supported formatters and linters
|
|
||||||
-- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/formatting
|
|
||||||
-- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics
|
|
||||||
config.sources = {
|
|
||||||
-- Common Code Actions
|
|
||||||
code_actions.gitsigns,
|
|
||||||
-- common refactoring actions based off the Refactoring book by Martin Fowler
|
|
||||||
code_actions.refactoring,
|
|
||||||
code_actions.gomodifytags, -- Go - modify struct field tags
|
|
||||||
code_actions.impl, -- Go - generate interface method stubs
|
|
||||||
code_actions.proselint, -- English prose linter
|
|
||||||
code_actions.statix, -- Lints and suggestions for Nix.
|
|
||||||
|
|
||||||
-- Diagnostic
|
|
||||||
diagnostics.actionlint, -- GitHub Actions workflow syntax checking
|
|
||||||
diagnostics.buf, -- check text in current buffer
|
|
||||||
diagnostics.checkmake, -- check Makefiles
|
|
||||||
diagnostics.deadnix, -- Scan Nix files for dead code.
|
|
||||||
|
|
||||||
-- Formatting
|
|
||||||
formatting.prettier, -- js/ts/vue/css/html/json/... formatter
|
|
||||||
diagnostics.hadolint, -- Dockerfile linter
|
|
||||||
formatting.black, -- Python formatter
|
|
||||||
formatting.goimports, -- Go formatter
|
|
||||||
formatting.shfmt, -- Shell formatter
|
|
||||||
formatting.terraform_fmt, -- Terraform formatter
|
|
||||||
formatting.stylua, -- Lua formatter
|
|
||||||
-- formatting.alejandra, -- Nix formatter
|
|
||||||
formatting.sqlfluff.with { -- SQL formatter
|
|
||||||
extra_args = { "--dialect", "postgres" }, -- change to your dialect
|
|
||||||
},
|
|
||||||
formatting.nginx_beautifier, -- Nginx formatter
|
|
||||||
formatting.verible_verilog_format, -- Verilog formatter
|
|
||||||
formatting.emacs_scheme_mode, -- using emacs in batch mode to format scheme files.
|
|
||||||
formatting.fnlfmt, -- Format Fennel code
|
|
||||||
}
|
|
||||||
return config -- return final config table
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
-- The plugin offers the abilibty to search and replace.
|
|
||||||
return {
|
|
||||||
"nvim-pack/nvim-spectre",
|
|
||||||
dependencies = {
|
|
||||||
{ "nvim-lua/plenary.nvim" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
return {
|
|
||||||
'nvim-orgmode/orgmode',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
ft = { 'org' },
|
|
||||||
config = function()
|
|
||||||
-- Setup orgmode
|
|
||||||
require('orgmode').setup({
|
|
||||||
org_agenda_files = "~/org/**/*",
|
|
||||||
org_default_notes_file = "~/org/refile.org",
|
|
||||||
})
|
|
||||||
|
|
||||||
-- NOTE: If you are using nvim-treesitter with ~ensure_installed = "all"~ option
|
|
||||||
-- add ~org~ to ignore_install
|
|
||||||
require('nvim-treesitter.configs').setup({
|
|
||||||
ensure_installed = 'all',
|
|
||||||
ignore_install = { 'org' },
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
return {
|
|
||||||
"eraserhd/parinfer-rust",
|
|
||||||
build = "cargo build --release",
|
|
||||||
ft = { "scm", "scheme" },
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
-- The plugin offers the alibity to refactor code.
|
|
||||||
return {
|
|
||||||
"ThePrimeagen/refactoring.nvim",
|
|
||||||
dependencies = {
|
|
||||||
{ "nvim-lua/plenary.nvim" },
|
|
||||||
{ "nvim-treesitter/nvim-treesitter" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
-- Enhanced matchparen.vim plugin for Neovim to highlight the outer pair.
|
|
||||||
return {
|
|
||||||
"utilyre/sentiment.nvim",
|
|
||||||
version = "*",
|
|
||||||
event = "VeryLazy", -- keep for lazy loading
|
|
||||||
opts = {
|
|
||||||
-- config
|
|
||||||
},
|
|
||||||
init = function()
|
|
||||||
-- `matchparen.vim` needs to be disabled manually in case of lazy loading
|
|
||||||
vim.g.loaded_matchparen = 1
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
return {
|
|
||||||
"nvim-telescope/telescope.nvim",
|
|
||||||
branch = "0.1.x",
|
|
||||||
dependencies = { "nvim-lua/plenary.nvim" },
|
|
||||||
init = function()
|
|
||||||
-- 1. Disable highlighting for certain filetypes
|
|
||||||
-- 2. Ignore files larger than a certain filesize
|
|
||||||
local previewers = require "telescope.previewers"
|
|
||||||
|
|
||||||
local _bad = { ".*%.csv", ".*%.min.js" } -- Put all filetypes that slow you down in this array
|
|
||||||
local filesize_threshold = 300 * 1024 -- 300KB
|
|
||||||
local bad_files = function(filepath)
|
|
||||||
for _, v in ipairs(_bad) do
|
|
||||||
if filepath:match(v) then return false end
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
local new_maker = function(filepath, bufnr, opts)
|
|
||||||
opts = opts or {}
|
|
||||||
if opts.use_ft_detect == nil then opts.use_ft_detect = true end
|
|
||||||
|
|
||||||
-- 1. Check if the file is in the bad_files array, and if so, don't highlight it
|
|
||||||
opts.use_ft_detect = opts.use_ft_detect == false and false or bad_files(filepath)
|
|
||||||
|
|
||||||
-- 2. Check the file size, and ignore it if it's too big(preview nothing).
|
|
||||||
filepath = vim.fn.expand(filepath)
|
|
||||||
vim.loop.fs_stat(filepath, function(_, stat)
|
|
||||||
if not stat then return end
|
|
||||||
if stat.size > filesize_threshold then
|
|
||||||
return
|
|
||||||
else
|
|
||||||
previewers.buffer_previewer_maker(filepath, bufnr, opts)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Load Extensions
|
|
||||||
require("telescope").load_extension "refactoring"
|
|
||||||
require("telescope").load_extension "yank_history"
|
|
||||||
require("telescope").load_extension "undo"
|
|
||||||
end
|
|
||||||
|
|
||||||
require("telescope").setup {
|
|
||||||
defaults = {
|
|
||||||
buffer_previewer_maker = new_maker,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
-- disable toggleterm.nvim, zellij's terminal is far better than neovim's one
|
|
||||||
return { "akinsho/toggleterm.nvim", enabled = false }
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
-- Customize Treesitter
|
|
||||||
|
|
||||||
---@type LazySpec
|
|
||||||
return {
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
dependencies = {
|
|
||||||
-- NOTE: additional parser
|
|
||||||
{ "nushell/tree-sitter-nu" }, -- nushell scripts
|
|
||||||
},
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.incremental_selection = {
|
|
||||||
enable = true,
|
|
||||||
keymaps = {
|
|
||||||
init_selection = "<C-space>", -- Ctrl + Space
|
|
||||||
node_incremental = "<C-space>",
|
|
||||||
scope_incremental = "<A-space>", -- Alt + Space
|
|
||||||
node_decremental = "<bs>", -- Backspace
|
|
||||||
},
|
|
||||||
}
|
|
||||||
opts.ignore_install = { "gotmpl", "wing" }
|
|
||||||
|
|
||||||
-- add more things to the ensure_installed table protecting against community packs modifying it
|
|
||||||
-- https://github.com/nvim-treesitter/nvim-treesitter/tree/master
|
|
||||||
opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, {
|
|
||||||
-- please add only the tree-sitters that are not available in nixpkgs here
|
|
||||||
|
|
||||||
"just",
|
|
||||||
"kdl",
|
|
||||||
"csv",
|
|
||||||
"xml",
|
|
||||||
|
|
||||||
---- Misc
|
|
||||||
"diff",
|
|
||||||
"git_config",
|
|
||||||
"git_rebase",
|
|
||||||
"gitignore",
|
|
||||||
"gitcommit",
|
|
||||||
"gitattributes",
|
|
||||||
"ssh_config",
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
-- joining blocks of code into oneline, or splitting one line into multiple lines.
|
|
||||||
return {
|
|
||||||
"Wansmer/treesj",
|
|
||||||
keys = { "<space>m", "<space>j", "<space>s" },
|
|
||||||
dependencies = { "nvim-treesitter/nvim-treesitter" },
|
|
||||||
config = function()
|
|
||||||
require("treesj").setup { --[[ your config ]]
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
-- Undo tree
|
|
||||||
return { "debugloop/telescope-undo.nvim" }
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
-- You can also add or configure plugins by creating files in this `plugins/` folder
|
|
||||||
-- Here are some examples:
|
|
||||||
|
|
||||||
---@type LazySpec
|
|
||||||
return {
|
|
||||||
|
|
||||||
-- == Examples of Adding Plugins ==
|
|
||||||
|
|
||||||
"andweeb/presence.nvim",
|
|
||||||
{
|
|
||||||
"ray-x/lsp_signature.nvim",
|
|
||||||
event = "BufRead",
|
|
||||||
config = function() require("lsp_signature").setup() end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- == Examples of Overriding Plugins ==
|
|
||||||
|
|
||||||
-- customize alpha options
|
|
||||||
{
|
|
||||||
"goolord/alpha-nvim",
|
|
||||||
opts = function(_, opts)
|
|
||||||
-- customize the dashboard header
|
|
||||||
opts.section.header.val = {
|
|
||||||
" █████ ███████ ████████ ██████ ██████",
|
|
||||||
"██ ██ ██ ██ ██ ██ ██ ██",
|
|
||||||
"███████ ███████ ██ ██████ ██ ██",
|
|
||||||
"██ ██ ██ ██ ██ ██ ██ ██",
|
|
||||||
"██ ██ ███████ ██ ██ ██ ██████",
|
|
||||||
" ",
|
|
||||||
" ███ ██ ██ ██ ██ ███ ███",
|
|
||||||
" ████ ██ ██ ██ ██ ████ ████",
|
|
||||||
" ██ ██ ██ ██ ██ ██ ██ ████ ██",
|
|
||||||
" ██ ██ ██ ██ ██ ██ ██ ██ ██",
|
|
||||||
" ██ ████ ████ ██ ██ ██",
|
|
||||||
}
|
|
||||||
return opts
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- You can disable default plugins as follows:
|
|
||||||
{ "max397574/better-escape.nvim", enabled = false },
|
|
||||||
|
|
||||||
-- You can also easily customize additional setup of plugins that is outside of the plugin's setup call
|
|
||||||
-- {
|
|
||||||
-- "L3MON4D3/LuaSnip",
|
|
||||||
-- config = function(plugin, opts)
|
|
||||||
-- require "astronvim.plugins.configs.luasnip"(plugin, opts) -- include the default astronvim config that calls the setup call
|
|
||||||
-- -- add more custom luasnip configuration such as filetype extend or custom snippets
|
|
||||||
-- local luasnip = require "luasnip"
|
|
||||||
-- luasnip.filetype_extend("javascript", { "javascriptreact" })
|
|
||||||
-- end,
|
|
||||||
-- },
|
|
||||||
|
|
||||||
{
|
|
||||||
"windwp/nvim-autopairs",
|
|
||||||
config = function(plugin, opts)
|
|
||||||
require "astronvim.plugins.configs.nvim-autopairs"(plugin, opts) -- include the default astronvim config that calls the setup call
|
|
||||||
-- add more custom autopairs configuration such as custom rules
|
|
||||||
local npairs = require "nvim-autopairs"
|
|
||||||
local Rule = require "nvim-autopairs.rule"
|
|
||||||
local cond = require "nvim-autopairs.conds"
|
|
||||||
npairs.add_rules(
|
|
||||||
{
|
|
||||||
Rule("$", "$", { "tex", "latex" })
|
|
||||||
-- don't add a pair if the next character is %
|
|
||||||
:with_pair(cond.not_after_regex "%%")
|
|
||||||
-- don't add a pair if the previous character is xxx
|
|
||||||
:with_pair(
|
|
||||||
cond.not_before_regex("xxx", 3)
|
|
||||||
)
|
|
||||||
-- don't move right when repeat character
|
|
||||||
:with_move(cond.none())
|
|
||||||
-- don't delete if the next character is xx
|
|
||||||
:with_del(cond.not_after_regex "xx")
|
|
||||||
-- disable adding a newline when you press <cr>
|
|
||||||
:with_cr(cond.none()),
|
|
||||||
},
|
|
||||||
-- disable for .vim files, but it work for another filetypes
|
|
||||||
Rule("a", "a", "-vim")
|
|
||||||
)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
-- clipboard manager
|
|
||||||
return {
|
|
||||||
"gbprod/yanky.nvim",
|
|
||||||
opts = function()
|
|
||||||
local mapping = require "yanky.telescope.mapping"
|
|
||||||
local mappings = mapping.get_defaults()
|
|
||||||
mappings.i["<c-p>"] = nil
|
|
||||||
return {
|
|
||||||
highlight = { timer = 200 },
|
|
||||||
picker = {
|
|
||||||
telescope = {
|
|
||||||
use_default_mappings = false,
|
|
||||||
mappings = mappings,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"y",
|
|
||||||
"<Plug>(YankyYank)",
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Yank text",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"p",
|
|
||||||
"<Plug>(YankyPutAfter)",
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Put yanked text after cursor",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"P",
|
|
||||||
"<Plug>(YankyPutBefore)",
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Put yanked text before cursor",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gp",
|
|
||||||
"<Plug>(YankyGPutAfter)",
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Put yanked text after selection",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gP",
|
|
||||||
"<Plug>(YankyGPutBefore)",
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Put yanked text before selection",
|
|
||||||
},
|
|
||||||
{ "[y", "<Plug>(YankyCycleForward)", desc = "Cycle forward through yank history" },
|
|
||||||
{ "]y", "<Plug>(YankyCycleBackward)", desc = "Cycle backward through yank history" },
|
|
||||||
{ "]p", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put indented after cursor (linewise)" },
|
|
||||||
{ "[p", "<Plug>(YankyPutIndentBeforeLinewise)", desc = "Put indented before cursor (linewise)" },
|
|
||||||
{ "]P", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put indented after cursor (linewise)" },
|
|
||||||
{ "[P", "<Plug>(YankyPutIndentBeforeLinewise)", desc = "Put indented before cursor (linewise)" },
|
|
||||||
{ ">p", "<Plug>(YankyPutIndentAfterShiftRight)", desc = "Put and indent right" },
|
|
||||||
{ "<p", "<Plug>(YankyPutIndentAfterShiftLeft)", desc = "Put and indent left" },
|
|
||||||
{ ">P", "<Plug>(YankyPutIndentBeforeShiftRight)", desc = "Put before and indent right" },
|
|
||||||
{ "<P", "<Plug>(YankyPutIndentBeforeShiftLeft)", desc = "Put before and indent left" },
|
|
||||||
{ "=p", "<Plug>(YankyPutAfterFilter)", desc = "Put after applying a filter" },
|
|
||||||
{ "=P", "<Plug>(YankyPutBeforeFilter)", desc = "Put before applying a filter" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
-- This will run last in the setup process and is a good place to configure
|
|
||||||
-- things like custom filetypes. This just pure lua so anything that doesn't
|
|
||||||
-- fit in the normal config locations above can go here
|
|
||||||
|
|
||||||
-- Set up custom filetypes
|
|
||||||
-- vim.filetype.add {
|
|
||||||
-- extension = {
|
|
||||||
-- foo = "fooscript",
|
|
||||||
-- },
|
|
||||||
-- filename = {
|
|
||||||
-- ["Foofile"] = "fooscript",
|
|
||||||
-- },
|
|
||||||
-- pattern = {
|
|
||||||
-- ["~/%.config/foo/.*"] = "fooscript",
|
|
||||||
-- },
|
|
||||||
-- }
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
base: lua51
|
|
||||||
|
|
||||||
globals:
|
|
||||||
vim:
|
|
||||||
any: true
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
std = "neovim"
|
|
||||||
|
|
||||||
[rules]
|
|
||||||
global_usage = "allow"
|
|
||||||
if_same_then_else = "allow"
|
|
||||||
incorrect_standard_library_use = "allow"
|
|
||||||
mixed_table = "allow"
|
|
||||||
multiple_statements = "allow"
|
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
jsonnet
|
jsonnet
|
||||||
jsonnet-language-server
|
jsonnet-language-server
|
||||||
taplo # TOML language server / formatter / validator
|
taplo # TOML language server / formatter / validator
|
||||||
nodePackages.yaml-language-server
|
yaml-language-server
|
||||||
actionlint # GitHub Actions linter
|
actionlint # GitHub Actions linter
|
||||||
|
|
||||||
#-- dockerfile
|
#-- dockerfile
|
||||||
@@ -60,18 +60,17 @@
|
|||||||
# llvmPackages.clang-unwrapped
|
# llvmPackages.clang-unwrapped
|
||||||
clang-tools
|
clang-tools
|
||||||
lldb
|
lldb
|
||||||
vscode-extensions.vadimcn.vscode-lldb.adapter # codelldb - debugger
|
|
||||||
|
|
||||||
#-- python
|
#-- python
|
||||||
|
uv # python project package manager
|
||||||
|
pipx # Install and Run Python Applications in Isolated Environments
|
||||||
(python313.withPackages (
|
(python313.withPackages (
|
||||||
ps: with ps; [
|
ps: with ps; [
|
||||||
# python language server
|
# python language server
|
||||||
pyright
|
pyright
|
||||||
ruff
|
ruff
|
||||||
|
|
||||||
pipx # Install and Run Python Applications in Isolated Environments
|
|
||||||
black # python formatter
|
black # python formatter
|
||||||
uv # python project package manager
|
|
||||||
|
|
||||||
# my commonly used python packages
|
# my commonly used python packages
|
||||||
jupyter
|
jupyter
|
||||||
@@ -101,7 +100,7 @@
|
|||||||
gomodifytags
|
gomodifytags
|
||||||
iferr # generate error handling code for go
|
iferr # generate error handling code for go
|
||||||
impl # generate function implementation for go
|
impl # generate function implementation for go
|
||||||
gotools # contains tools like: godoc, goimports, etc.
|
# gotools # contains tools like: godoc, goimports, etc.
|
||||||
gopls # go language server
|
gopls # go language server
|
||||||
delve # go debugger
|
delve # go debugger
|
||||||
|
|
||||||
@@ -120,18 +119,20 @@
|
|||||||
lua-language-server
|
lua-language-server
|
||||||
|
|
||||||
#-- bash
|
#-- bash
|
||||||
nodePackages.bash-language-server
|
bash-language-server
|
||||||
shellcheck
|
shellcheck
|
||||||
shfmt
|
shfmt
|
||||||
]
|
]
|
||||||
#-*- Web Development -*-#
|
#-*- Web Development -*-#
|
||||||
++ [
|
++ [
|
||||||
nodePackages.nodejs
|
nodejs_24
|
||||||
nodePackages.typescript
|
pnpm
|
||||||
nodePackages.typescript-language-server
|
typescript
|
||||||
|
typescript-language-server
|
||||||
|
bun
|
||||||
# HTML/CSS/JSON/ESLint language servers extracted from vscode
|
# HTML/CSS/JSON/ESLint language servers extracted from vscode
|
||||||
nodePackages.vscode-langservers-extracted
|
vscode-langservers-extracted
|
||||||
nodePackages."@tailwindcss/language-server"
|
tailwindcss-language-server
|
||||||
emmet-ls
|
emmet-ls
|
||||||
]
|
]
|
||||||
# -*- Lisp like Languages -*-#
|
# -*- Lisp like Languages -*-#
|
||||||
@@ -152,7 +153,7 @@
|
|||||||
verible
|
verible
|
||||||
|
|
||||||
#-- Optional Requirements:
|
#-- Optional Requirements:
|
||||||
nodePackages.prettier # common code formatter
|
prettier # common code formatter
|
||||||
fzf
|
fzf
|
||||||
gdu # disk usage analyzer, required by AstroNvim
|
gdu # disk usage analyzer, required by AstroNvim
|
||||||
(ripgrep.override { withPCRE2 = true; }) # recursively searches directories for a regex pattern
|
(ripgrep.override { withPCRE2 = true; }) # recursively searches directories for a regex pattern
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ in
|
|||||||
# NOTE: Saving the password and OTP together runs counter to the purpose of secondary verification!
|
# NOTE: Saving the password and OTP together runs counter to the purpose of secondary verification!
|
||||||
# exts.pass-otp
|
# exts.pass-otp
|
||||||
|
|
||||||
exts.pass-import # a generic importer tool from other password managers
|
# exts.pass-import # a generic importer tool from other password managers
|
||||||
exts.pass-update # an easy flow for updating passwords
|
exts.pass-update # an easy flow for updating passwords
|
||||||
]);
|
]);
|
||||||
# See the “Environment variables” section of pass(1) and the extension man pages for more information about the available keys.
|
# See the “Environment variables” section of pass(1) and the extension man pages for more information about the available keys.
|
||||||
|
|||||||
@@ -13,26 +13,32 @@
|
|||||||
source /etc/agenix/alias-for-work.nushell
|
source /etc/agenix/alias-for-work.nushell
|
||||||
|
|
||||||
$env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"
|
$env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"
|
||||||
# using claude-code with kimi k2
|
$env.CLAUDE_CODE_ATTRIBUTION_HEADER = "0"
|
||||||
|
# using claude-code with kimi llm
|
||||||
# https://platform.moonshot.cn/docs/guide/agent-support
|
# https://platform.moonshot.cn/docs/guide/agent-support
|
||||||
# $env.ANTHROPIC_BASE_URL = "https://api.moonshot.cn/anthropic/"
|
# $env.ANTHROPIC_BASE_URL = "https://api.moonshot.cn/anthropic/"
|
||||||
# $env.ANTHROPIC_AUTH_TOKEN = $env.MOONSHOT_API_KEY
|
# $env.ANTHROPIC_AUTH_TOKEN = $env.MOONSHOT_API_KEY
|
||||||
# $env.ANTHROPIC_MODEL = "kimi-k2-thinking"
|
# $env.ANTHROPIC_DEFAULT_OPUS_MODEL = "kimi-k2.5"
|
||||||
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "kimi-k2-thinking-turbo"
|
# $env.ANTHROPIC_DEFAULT_SONNET_MODEL = "kimi-k2.5"
|
||||||
|
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "kimi-k2.5"
|
||||||
|
|
||||||
# using claude-code with glm llm
|
# using claude-code with glm llm
|
||||||
# https://docs.bigmodel.cn/cn/coding-plan/tool/claude
|
# https://docs.bigmodel.cn/cn/coding-plan/tool/claude
|
||||||
$env.ANTHROPIC_BASE_URL = "https://open.bigmodel.cn/api/anthropic"
|
# $env.ANTHROPIC_BASE_URL = "https://open.bigmodel.cn/api/anthropic"
|
||||||
$env.ANTHROPIC_AUTH_TOKEN = $env.ZAI_API_KEY
|
# $env.ANTHROPIC_AUTH_TOKEN = $env.ZAI_API_KEY
|
||||||
$env.ANTHROPIC_MODEL = "glm-4.7"
|
# $env.ANTHROPIC_DEFAULT_OPUS_MODEL = "glm-5.1"
|
||||||
$env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "glm-4.5-air"
|
# $env.ANTHROPIC_DEFAULT_SONNET_MODEL = "glm-5-turbo"
|
||||||
|
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "glm-4.5-air"
|
||||||
|
|
||||||
|
# using claude-code with minimax llm
|
||||||
|
# https://platform.minimax.io/docs/token-plan/claude-code
|
||||||
|
# $env.ANTHROPIC_BASE_URL = "https://api.minimax.io/anthropic"
|
||||||
|
# $env.ANTHROPIC_AUTH_TOKEN = $env.MINIMAX_API_KEY
|
||||||
|
# $env.ANTHROPIC_MODEL = "MiniMax-M2.7"
|
||||||
|
# $env.ANTHROPIC_DEFAULT_OPUS_MODEL = "MiniMax-M2.7"
|
||||||
|
# $env.ANTHROPIC_DEFAULT_SONNET_MODEL = "MiniMax-M2.7"
|
||||||
|
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "MiniMax-M2.7"
|
||||||
|
|
||||||
# using claude-code with qwen llm
|
|
||||||
# https://bailian.console.aliyun.com/?tab=doc#/doc/?type=model&url=2949529
|
|
||||||
# $env.ANTHROPIC_BASE_URL = "https://dashscope.aliyuncs.com/apps/anthropic"
|
|
||||||
# $env.ANTHROPIC_AUTH_TOKEN = $env.DASHSCOPE_API_KEY
|
|
||||||
# $env.ANTHROPIC_MODEL = "qwen-plus" # 千万别用 qwen-max, 价格
|
|
||||||
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "qwen-turbo"
|
|
||||||
|
|
||||||
# Directories in this constant are searched by the
|
# Directories in this constant are searched by the
|
||||||
# `use` and `source` commands.
|
# `use` and `source` commands.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ config, lib, ... }:
|
||||||
let
|
let
|
||||||
envExtra = ''
|
envExtra = ''
|
||||||
export PATH="$PATH:/opt/homebrew/bin:/usr/local/bin"
|
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
|
||||||
'';
|
'';
|
||||||
# copied from the content generated by `conda init bash`
|
# copied from the content generated by `conda init bash`
|
||||||
initContent = ''
|
initContent = ''
|
||||||
@@ -34,6 +34,7 @@ in
|
|||||||
};
|
};
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
dotDir = "${config.xdg.configHome}/zsh";
|
||||||
inherit envExtra initContent;
|
inherit envExtra initContent;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Host Home Modules
|
||||||
|
|
||||||
|
This directory contains host-specific Home Manager entry modules.
|
||||||
|
|
||||||
|
## Layout
|
||||||
|
|
||||||
|
- `home/hosts/linux/*.nix`: Linux host home modules
|
||||||
|
- `home/hosts/darwin/*.nix`: macOS host home modules
|
||||||
|
|
||||||
|
## Conventions
|
||||||
|
|
||||||
|
1. Each host output should reference only one file under `home/hosts/...`.
|
||||||
|
2. Shared home module imports should be handled in the host file itself.
|
||||||
|
- Linux hosts usually import `../../linux/core.nix` or `../../linux/gui.nix`.
|
||||||
|
- Darwin hosts import `../../darwin`.
|
||||||
|
3. Host-specific overrides (SSH keys, desktop toggles, host-local config links) live in the same
|
||||||
|
host file.
|
||||||
@@ -3,6 +3,8 @@ let
|
|||||||
hostName = "fern";
|
hostName = "fern";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
imports = [ ../../darwin ];
|
||||||
|
|
||||||
programs.ssh.matchBlocks."github.com".identityFile =
|
programs.ssh.matchBlocks."github.com".identityFile =
|
||||||
"${config.home.homeDirectory}/.ssh/${hostName}";
|
"${config.home.homeDirectory}/.ssh/${hostName}";
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,8 @@ let
|
|||||||
hostName = "frieren";
|
hostName = "frieren";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
imports = [ ../../darwin ];
|
||||||
|
|
||||||
programs.ssh.matchBlocks."github.com".identityFile =
|
programs.ssh.matchBlocks."github.com".identityFile =
|
||||||
"${config.home.homeDirectory}/.ssh/${hostName}";
|
"${config.home.homeDirectory}/.ssh/${hostName}";
|
||||||
}
|
}
|
||||||
@@ -4,9 +4,13 @@ let
|
|||||||
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
imports = [ ../../linux/gui.nix ];
|
||||||
|
|
||||||
programs.ssh.matchBlocks."github.com".identityFile =
|
programs.ssh.matchBlocks."github.com".identityFile =
|
||||||
"${config.home.homeDirectory}/.ssh/${hostName}";
|
"${config.home.homeDirectory}/.ssh/${hostName}";
|
||||||
|
|
||||||
|
modules.desktop.gaming.enable = false;
|
||||||
|
modules.desktop.niri.enable = true;
|
||||||
modules.desktop.nvidia.enable = false;
|
modules.desktop.nvidia.enable = false;
|
||||||
|
|
||||||
xdg.configFile."niri/niri-hardware.kdl".source =
|
xdg.configFile."niri/niri-hardware.kdl".source =
|
||||||
@@ -3,8 +3,12 @@ let
|
|||||||
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
imports = [ ../../linux/gui.nix ];
|
||||||
|
|
||||||
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/idols-ai";
|
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/idols-ai";
|
||||||
|
|
||||||
|
modules.desktop.gaming.enable = true;
|
||||||
|
modules.desktop.niri.enable = true;
|
||||||
modules.desktop.nvidia.enable = true;
|
modules.desktop.nvidia.enable = true;
|
||||||
|
|
||||||
xdg.configFile."niri/niri-hardware.kdl".source =
|
xdg.configFile."niri/niri-hardware.kdl".source =
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
programs.gh.enable = true;
|
||||||
|
programs.git.enable = true;
|
||||||
|
|
||||||
|
programs.zellij.enable = true;
|
||||||
|
programs.bash.enable = true;
|
||||||
|
programs.nushell.enable = true;
|
||||||
|
|
||||||
|
programs.starship = {
|
||||||
|
enable = true;
|
||||||
|
enableBashIntegration = true;
|
||||||
|
enableNushellIntegration = true;
|
||||||
|
};
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
viAlias = true;
|
||||||
|
vimAlias = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.stateVersion = "25.11";
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
imports = [ ./idols-aquamarine.nix ];
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
imports = [ ./idols-aquamarine.nix ];
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
imports = [ ../../linux/core.nix ];
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
imports = [ ../../linux/core.nix ];
|
||||||
|
}
|
||||||
@@ -21,6 +21,16 @@
|
|||||||
|
|
||||||
# this app consumes a lot of storage, so do not install it currently
|
# this app consumes a lot of storage, so do not install it currently
|
||||||
# kicad # 3d printing, electrical engineering
|
# kicad # 3d printing, electrical engineering
|
||||||
|
|
||||||
|
# Astronomy
|
||||||
|
stellarium # See what you can see with your eyes, binoculars or a small telescope.
|
||||||
|
celestia # Real-time 3D simulation of space, travel throughout the solar system.
|
||||||
|
|
||||||
|
# office
|
||||||
|
libreoffice-qt-still
|
||||||
|
hunspell # spell check for libreoffice
|
||||||
|
hunspellDicts.en_US # USA English
|
||||||
|
hyphenDicts.en_GB # British English
|
||||||
]
|
]
|
||||||
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
||||||
# https://github.com/edolstra/nix-warez/blob/master/blender/flake.nix
|
# https://github.com/edolstra/nix-warez/blob/master/blender/flake.nix
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
# misc
|
# misc
|
||||||
"_JAVA_AWT_WM_NONREPARENTING" = "1";
|
"_JAVA_AWT_WM_NONREPARENTING" = "1";
|
||||||
"QT_WAYLAND_DISABLE_WINDOWDECORATION" = "1";
|
"QT_WAYLAND_DISABLE_WINDOWDECORATION" = "1";
|
||||||
"QT_QPA_PLATFORM" = "wayland";
|
|
||||||
"SDL_VIDEODRIVER" = "wayland";
|
"SDL_VIDEODRIVER" = "wayland";
|
||||||
"GDK_BACKEND" = "wayland";
|
"GDK_BACKEND" = "wayland";
|
||||||
"XDG_SESSION_TYPE" = "wayland";
|
"XDG_SESSION_TYPE" = "wayland";
|
||||||
|
|||||||
@@ -1,60 +1,19 @@
|
|||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
|
||||||
pkgs-master,
|
pkgs-master,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
|
||||||
vscodeCliArgs = [
|
|
||||||
# https://code.visualstudio.com/docs/configure/settings-sync#_recommended-configure-the-keyring-to-use-with-vs-code
|
|
||||||
# For use with any package that implements the Secret Service API
|
|
||||||
# (for example gnome-keyring, kwallet5, KeepassXC)
|
|
||||||
"--password-store=gnome-libsecret"
|
|
||||||
];
|
|
||||||
|
|
||||||
code-cursor = pkgs-master.code-cursor;
|
|
||||||
# (pkgs-master.code-cursor.override {
|
|
||||||
# commandLineArgs = lib.concatStringsSep " " vscodeCliArgs;
|
|
||||||
# }).overrideAttrs
|
|
||||||
# (oldAttrs: rec {
|
|
||||||
# pname = "cursor";
|
|
||||||
# version = "2.1.36";
|
|
||||||
# src =
|
|
||||||
# with pkgs-master;
|
|
||||||
# appimageTools.extract {
|
|
||||||
# inherit pname version;
|
|
||||||
# src =
|
|
||||||
# let
|
|
||||||
# sources = {
|
|
||||||
# x86_64-linux = fetchurl {
|
|
||||||
# # curl -s https://api2.cursor.sh/updates/api/download/stable/linux-x64/cursor | jq
|
|
||||||
# url = "https://downloads.cursor.com/production/9cd7c8b6cebcbccc1242df211dee45a4b6fe15e4/linux/x64/Cursor-2.1.36-x86_64.AppImage";
|
|
||||||
# hash = "sha256-aaprRB2BAaUCHj7m5aGacCBHisjN2pVZ+Ca3u1ifxBA=";
|
|
||||||
# };
|
|
||||||
# aarch64-linux = fetchurl {
|
|
||||||
# # curl -s https://api2.cursor.sh/updates/api/download/stable/linux-arm64/cursor | jq
|
|
||||||
# url = "https://downloads.cursor.com/production/9cd7c8b6cebcbccc1242df211dee45a4b6fe15e4/linux/arm64/Cursor-2.1.36-aarch64.AppImage";
|
|
||||||
# hash = "sha256-S2vFYBI6m0zjBJEDbk7gc6/zFiKWyhM73OUm1xsNx6Q=";
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
# in
|
|
||||||
# sources.${stdenv.hostPlatform.system};
|
|
||||||
# };
|
|
||||||
# sourceRoot = "${pname}-${version}-extracted/usr/share/cursor";
|
|
||||||
# });
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
home.packages = [
|
|
||||||
pkgs.zed-editor
|
|
||||||
pkgs-master.code-cursor
|
|
||||||
pkgs-master.antigravity-fhs
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.vscode = {
|
programs.vscode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs-master.vscode.override {
|
package = pkgs-master.vscode.override {
|
||||||
commandLineArgs = vscodeCliArgs;
|
commandLineArgs = [
|
||||||
|
# https://code.visualstudio.com/docs/configure/settings-sync#_recommended-configure-the-keyring-to-use-with-vs-code
|
||||||
|
# For use with any package that implements the Secret Service API
|
||||||
|
# (for example gnome-keyring, kwallet5, KeepassXC)
|
||||||
|
"--password-store=gnome-libsecret"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
{
|
{
|
||||||
|
catppuccin.fcitx5.enable = false;
|
||||||
xdg.configFile = {
|
xdg.configFile = {
|
||||||
"fcitx5/profile" = {
|
"fcitx5/profile" = {
|
||||||
source = ./profile;
|
source = ./profile;
|
||||||
@@ -27,6 +28,9 @@
|
|||||||
# ctrl-i / F7 - convert to takakana
|
# ctrl-i / F7 - convert to takakana
|
||||||
# ctrl-u / F6 - convert to hiragana
|
# ctrl-u / F6 - convert to hiragana
|
||||||
fcitx5-mozc-ut # Moze with UT dictionary
|
fcitx5-mozc-ut # Moze with UT dictionary
|
||||||
|
|
||||||
|
# Korean
|
||||||
|
fcitx5-hangul
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,12 @@ Name=mozc
|
|||||||
# Layout
|
# Layout
|
||||||
Layout=
|
Layout=
|
||||||
|
|
||||||
|
[Groups/1/Items/3]
|
||||||
|
# Name
|
||||||
|
Name=hangul
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
[GroupOrder]
|
[GroupOrder]
|
||||||
0=Default
|
0=Default
|
||||||
1=Intl
|
1=Intl
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ in
|
|||||||
bbe
|
bbe
|
||||||
])
|
])
|
||||||
++ (with pkgs-x64; [
|
++ (with pkgs-x64; [
|
||||||
# a game launcher - great for epic games and gog games
|
# Heroic Games Launcher - primarily for Epic Games & GOG
|
||||||
|
# https://heroicgameslauncher.com/
|
||||||
(heroic.override {
|
(heroic.override {
|
||||||
extraPkgs = _pkgs: [
|
extraPkgs = _pkgs: [
|
||||||
pkgs.gamescope # aarch64
|
pkgs.gamescope # aarch64
|
||||||
@@ -53,7 +54,9 @@ in
|
|||||||
})
|
})
|
||||||
]);
|
]);
|
||||||
|
|
||||||
# a GUI game launcher for Steam/GoG/Epic
|
# Game launchers for Epic/GOG/Ubisoft/etc. (use Steam + DWProton for common games)
|
||||||
|
|
||||||
|
# a GUI game launcher for Steam/GoG/Epic/Ubisoft
|
||||||
# https://lutris.net/games?ordering=-popularity
|
# https://lutris.net/games?ordering=-popularity
|
||||||
programs.lutris = {
|
programs.lutris = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -62,9 +65,8 @@ in
|
|||||||
protonPackages = [ pkgs-x64.proton-ge-bin ];
|
protonPackages = [ pkgs-x64.proton-ge-bin ];
|
||||||
winePackages = with pkgs-x64; [
|
winePackages = with pkgs-x64; [
|
||||||
wineWow64Packages.full
|
wineWow64Packages.full
|
||||||
wineWowPackages.stagingFull
|
|
||||||
];
|
];
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs-x64; [
|
||||||
winetricks
|
winetricks
|
||||||
gamescope
|
gamescope
|
||||||
gamemode
|
gamemode
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
general {
|
general {
|
||||||
lock_cmd = noctalia-shell ipc call lockScreen lock # avoid starting multiple instances
|
lock_cmd = noctalia-shell ipc call lockScreen lock # avoid starting multiple instances
|
||||||
before_sleep_cmd = loginctl lock-session # lock before suspend
|
before_sleep_cmd = noctalia-shell ipc call lockScreen lock # lock before suspend
|
||||||
# after_sleep_cmd = hyprctl dispatch dpms on # resume dpms after suspend
|
# after_sleep_cmd = hyprctl dispatch dpms on # resume dpms after suspend
|
||||||
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests
|
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests
|
||||||
}
|
}
|
||||||
@@ -13,11 +13,11 @@ listener {
|
|||||||
on-resume = brightnessctl --restore --device=kbd_backlight # turn on keyboard backlight.
|
on-resume = brightnessctl --restore --device=kbd_backlight # turn on keyboard backlight.
|
||||||
}
|
}
|
||||||
|
|
||||||
# listener {
|
listener {
|
||||||
# timeout = 600 # 10min.
|
timeout = 600 # 10min.
|
||||||
# on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||||
# on-resume = brightnessctl -r # monitor backlight restore.
|
on-resume = brightnessctl -r # monitor backlight restore.
|
||||||
# }
|
}
|
||||||
|
|
||||||
listener {
|
listener {
|
||||||
timeout = 1200 # 20 minutes
|
timeout = 1200 # 20 minutes
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user