Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.zip filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
89 changes: 76 additions & 13 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,37 @@
RECURSIVE_START
Recognize that all repositories are nix flake based and often use each other as inputs. Sometimes the options and configuration for one repository will be in another as an input which can be found in the flake.nix file of the repo that calls another as an input.

common input names as they link to repos:
- gigdot & dotfiles refer to @gignsky/dotfiles
- wrap, wrapd, wrapper, & tarballer refer to @gignsky/wrap
- nufetch & neofetch refer to @gignsky/nufetch
- gigvim refers to @gignsky/gigvim

Below are rules that must ALWAYS be followed:
1. All progression steps should be displayed as NEW comments with checkbox lists of tasks to be completed, to be checked off via a comment edit while adding a timestamp as well as legnth of time taken to progress to this point and notes about the task, including links to relevant commits, PRs, or issues, etc...
2. Original prompt for agents should be preserved as a comment at the beginning of a PR or issue as well as in the description of the copilot's initial commit on a new PR
3. Make every effort to make every ai agent call as effective as possible in order to preserve as many premium requests as possible
4. ALWAYS attempt to verify that changes compile, often this is as simple as running `nix flake check` or `nix build` in the repository, if the checks fail, continue iterating until they pass
5. Document as much as possible in markdown files either in the docs/ dir or in logical places alongside files and in files

In all sessions, the order of operations is as follows:
0. Read all of these operations and understand them before continuing
0.a. Create a new comment in the issue or PR that reflects this order of operations with checkboxes and edit the comment marking the checkboxes as you progress
0.a.NOTE: Refer to rule #1
0.b. Analyze all repository's copilot-instructions looking specifically for the RECURSIVE block described in step x+4, find the diff between these versions, determine the most recent / logical state of the block and immediately replace the block in the active repos instructions with it
1. Analyze the active repos' .github/ folder and its contents for repo specific instructions
2. Analyze the other repo's .github/ fiolder and its contents for general ecosystem updates since last checked
3. Analyze the @gignsky/dotfiles .github/ cortana chatbot markdown file and understand the way in which your are supposed to interact based off of that file
4. Analyze the active repo and ALL its elements and compare and contrast with the active repo's .github/copilot-instructions.md file
5. Based off of information gathered in the previous steps please analyze the expected and actual state of ci/cd in the current repository and make note that the ci/cd pipeline for the current repository exists within the copilot-instructions
6. Update the instructions file to include updated information based off of data gathered in steps 1-5
7. Step 7 (here) should be replaced with 7..x where x equals the total number of steps that cortana determines are neccary to complete the request from the all powerful lord gig minus seven. Steps continue at item x+1 below.
x+1. Testing pipeline should start here, at a minimum a `nix flake check` needs to pass before this item can be marked completed, if this can't be done then detailed error messages should be left in the comments
x+2. Testing pipeline continues, if changes to the repository would have an effect on the flake outputs the changed outputs themselves should be checked here in as many check boxes as is nececcary
x+3. After flake testing in items x+1 & x+2 (which can be multiple checkboxes and steps) Repeat steps 0-6 and then continue below on step x+4
x+4. All text between RECURSIVE_START & RECURSIVE_END should be placed at the top of each copilot-instructions.md file in every repository, at this point replace the version from step 0.b with an updated version based on all changes made before this step
RECURSIVE_END

# GigVim - Nix-based Neovim Configuration

GigVim is a Nix Flake-based Neovim configuration using the nvf (NeoVim Flake) framework. It provides a highly customizable and reproducible development environment with language support, plugins, and themes configured declaratively.
Expand Down Expand Up @@ -34,7 +68,10 @@ Always reference these instructions first and fallback to search or bash command
โ”œโ”€โ”€ full.nix # Full feature configuration (imports minimal.nix)
โ”œโ”€โ”€ minimal.nix # Base configuration with core imports
โ”œโ”€โ”€ .envrc # direnv configuration for automatic environment loading
โ””โ”€โ”€ .gitignore # Git ignore patterns
โ”œโ”€โ”€ .gitignore # Git ignore patterns
โ””โ”€โ”€ resources/ # Static resources (sounds, documentation, etc.)
โ”œโ”€โ”€ sounds/ # Audio files for plugins (minecraft sounds for beepboop.nvim)
โ””โ”€โ”€ zips/ # Archive storage
```

### Configuration Modules
Expand All @@ -46,8 +83,12 @@ Always reference these instructions first and fallback to search or bash command
โ”‚ โ”œโ”€โ”€ default.nix # Plugin imports and core plugin settings
โ”‚ โ”œโ”€โ”€ core/ # Essential plugins
โ”‚ โ””โ”€โ”€ optional/ # Optional plugin configurations
โ”‚ โ”œโ”€โ”€ TEMPLATE-external-plugin.nix # Template for adding external plugins
โ”‚ โ”œโ”€โ”€ themery-nvim.nix # Theme switcher plugin
โ”‚ โ””โ”€โ”€ mini.nix # Mini.nvim plugin configuration
โ”œโ”€โ”€ lang/ # Language-specific configurations
โ”‚ โ”œโ”€โ”€ default.nix # Language imports
โ”‚ โ”œโ”€โ”€ default.nix # Language imports and global language settings
โ”‚ โ”œโ”€โ”€ bash.nix # Bash language support
โ”‚ โ”œโ”€โ”€ nix.nix # Nix language support (LSP: nil, formatter: nixfmt)
โ”‚ โ”œโ”€โ”€ rust.nix # Rust language support (LSP: rust-analyzer, formatter: rustfmt)
โ”‚ โ””โ”€โ”€ nu.nix # Nu shell support
Expand All @@ -62,15 +103,18 @@ Always reference these instructions first and fallback to search or bash command

### Default/Full Configuration (`nix build` or `nix build .#full`)
- Complete Neovim setup with all features enabled
- Language servers: nil (Nix), rust-analyzer (Rust)
- Formatters: nixfmt, rustfmt
- Plugins: telescope, blink-cmp, conform-nvim, luasnip, todo-comments, fzf-lua
- Features: LSP, treesitter, autocomplete, formatting, debugging support
- Language servers: nil (Nix), rust-analyzer (Rust), bash-language-server
- Formatters: nixfmt-rfc-style, rustfmt, shfmt
- Core plugins: telescope, blink-cmp, conform-nvim, luasnip, todo-comments, fzf-lua
- Optional plugins: themery-nvim (theme switcher)
- Features: LSP, treesitter, autocomplete, formatting, debugging support, theme switching
- Includes resources: minecraft sounds for audio feedback plugins

### Minimal Configuration (`nix build .#minimal`)
- Basic Neovim setup with essential features only
- Includes language support and core plugins
- Suitable for lightweight environments
- Includes core language support and essential plugins
- Includes mini.nvim plugin for lightweight functionality
- Suitable for lightweight environments and development shells

## Home Manager Integration

Expand Down Expand Up @@ -128,11 +172,27 @@ This automatically:
4. Rebuild and test: `nix build`

### Adding New Plugins
1. Add plugin configuration to `plugins/core/` or `plugins/optional/`
2. Import in `plugins/default.nix`
3. Configure plugin settings using nvf plugin options
1. For external plugins not in nixpkgs:
- Add the plugin source to flake.nix inputs with `flake = false`
- Use the TEMPLATE-external-plugin.nix as a reference
- Create configuration in `plugins/core/` or `plugins/optional/`
2. For plugins already in nvf:
- Check the nvf options documentation at https://notashelf.github.io/nvf/options.html
- Create configuration using `config.vim.*` options directly
- Still organize in appropriate plugin category folders
3. Import in `plugins/default.nix` or relevant configuration files
4. Rebuild and test the configuration

### Plugin Organization
Plugins are organized by functionality:
- `plugins/core/` - Essential plugins included in both minimal and full configurations
- `plugins/optional/` - Optional plugins included only in full configuration
- Consider organizing by categories like:
- `plugins/language/` - Language-specific plugins
- `plugins/ui/` - Interface and appearance plugins
- `plugins/workflow/` - Productivity and workflow plugins
- `plugins/utility/` - General utility plugins

## Validation and Testing

### Manual Validation Steps
Expand Down Expand Up @@ -175,10 +235,13 @@ After making any changes, always perform these validation steps:

The configuration automatically includes these tools:
- `nil` - Nix language server
- `alejandra` - Nix formatter (alternative)
- `nixfmt-rfc-style` - Nix formatter (RFC 166 compliant)
- `alejandra` - Alternative Nix formatter (legacy, being phased out)
- `tree-sitter` - Syntax highlighting
- `rust-analyzer` - Rust language server
- `rustfmt` - Rust formatter
- `bash-language-server` - Bash LSP support
- `shfmt` - Shell script formatter

## Build Time Expectations

Expand All @@ -190,4 +253,4 @@ The configuration automatically includes these tools:
- `nix develop` (first time): 15-30 minutes
- `nix develop` (incremental): 1-2 minutes

Always set timeouts to at least double these estimates to account for network variability and system performance differences.
Always set timeouts to at least double these estimates to account for network variability and system performance differences.
11 changes: 11 additions & 0 deletions config/core/debugger.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Debugging configuration
# Extracted from lang/default.nix to make it configurable
{
config.vim.debugger.nvim-dap = {
enable = false;
ui = {
enable = true;
autoStart = true;
};
};
}
7 changes: 6 additions & 1 deletion config/core/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@
imports = [
./options.nix
./brackets.nix
./line.nix
# ./line.nix # Removed - handled separately in minimal vs full
./theme.nix
./lsp.nix
./debugger.nix
./treesitter.nix
./snippets.nix
./languages.nix
];
}
10 changes: 10 additions & 0 deletions config/core/languages.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Global language configuration
# Extracted from lang/default.nix to make it configurable
{
config.vim.languages = {
enableFormat = true;
enableTreesitter = true;
enableExtraDiagnostics = false;
enableDAP = false;
};
}
15 changes: 15 additions & 0 deletions config/core/lsp.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Language Server Protocol (LSP) configuration
# Extracted from lang/default.nix to make it configurable
{
config.vim.lsp = {
enable = true;
formatOnSave = true;
inlayHints.enable = true;
lspkind.enable = true;
null-ls.enable = true;
nvim-docs-view.enable = true;
lightbulb.enable = true;
trouble.enable = true;
otter-nvim.enable = true;
};
}
12 changes: 12 additions & 0 deletions config/core/lualine.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Lualine Configuration for Minimal GigVim
# This file provides lualine statusline configuration for the minimal version
# The full version uses heirline instead of lualine for more advanced features
{ lib, ... }:
{
config.vim.statusline.lualine = {
enable = true;
theme = "gruvbox";
# Simplified configuration for minimal version
# For advanced statusline features, use the full version with heirline
};
}
11 changes: 11 additions & 0 deletions config/core/snippets.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Snippet configuration
# Extracted from lang/default.nix to make it configurable
{
config.vim.snippets.luasnip = {
enable = true;
providers = [
"nvim-lspconfig"
"nvim-treesitter"
];
};
}
11 changes: 11 additions & 0 deletions config/core/treesitter.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# TreeSitter configuration
# Extracted from lang/default.nix to make it configurable
{ pkgs, ... }:
{
config.vim.treesitter = {
enable = true;
addDefaultGrammars = true;
autotagHtml = true;
grammars = pkgs.vimPlugins.nvim-treesitter.allGrammars;
};
}
2 changes: 1 addition & 1 deletion config/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

config.vim.extraPackages = with pkgs; [
nil
alejandra
nixfmt-rfc-style
tree-sitter
];
}
Loading