Compare commits

..

No commits in common. "main" and "init-lua" have entirely different histories.

22 changed files with 212 additions and 963 deletions

View file

@ -1,67 +0,0 @@
name: setup-nix
inputs:
system:
type: string
required: true
sandbox:
type: string
default: "true"
runs:
using: composite
steps:
- name: reclaim space (linux)
if: runner.os == 'Linux'
uses: wimpysworld/nothing-but-nix@main
with:
hatchet-protocol: rampage
- name: reclaim space (darwin)
if: runner.os == 'macOS'
shell: bash
run: |
echo "::group::disk space (before)"
sudo df -h
echo "::endgroup::"
echo "::group::disable mds"
sudo mdutil -i off -a || echo "mdutil failed"
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist \
|| echo "launchctl unload failed"
echo "::endgroup::"
echo "Background space expansion started. /nix will grow as space becomes available."
sudo rm -rf \
/Applications/Xcode_* \
/Library/Developer/CoreSimulator \
/Library/Frameworks \
/Users/runner/.dotnet \
/Users/runner/.rustup \
/Users/runner/Library/Android \
/Users/runner/Library/Caches \
/Users/runner/Library/Developer/CoreSimulator \
/Users/runner/hostedtoolcache &
- name: install nix
uses: cachix/install-nix-action@v31
with:
# Putting build-dir in /nix is a workaround for https://github.com/wimpysworld/nothing-but-nix/issues/18
extra_nix_config: |
build-dir = /nix/build
sandbox = ${{ inputs.sandbox }}
system = ${{ inputs.system }}
- name: create build-dir
shell: bash
run: sudo mkdir -p /nix/build
- name: post setup-nix
if: runner.os == 'macOS'
uses: srz-zumix/post-run-action@v2
with:
shell: bash -e {0}
post-run: |
echo "::group::disk space (after)"
sudo df -h
echo "::endgroup::"

View file

@ -1,135 +0,0 @@
name: Nix
on:
push:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
strategy:
fail-fast: false
matrix:
system:
- x86_64-linux
- aarch64-linux
- x86_64-darwin
runs-on: ${{ matrix.system == 'x86_64-linux' && 'ubuntu-24.04'
|| matrix.system == 'aarch64-linux' && 'ubuntu-24.04-arm'
|| matrix.system == 'x86_64-darwin' && 'macos-latest' }}
steps:
- uses: actions/checkout@v4
- name: setup nix
uses: ./.github/actions/setup-nix
with:
system: ${{ matrix.system }}
- name: Login to tailscale
uses: tailscale/github-action@v3.2.3
with:
oauth-client-id: ${{ secrets.TS_OAUTH_CLIENT_ID }}
oauth-secret: ${{ secrets.TS_OAUTH_SECRET }}
hostname: ${{ matrix.system == 'x86_64-linux' && 'github-actions-x86-64-linux'
|| matrix.system == 'aarch64-linux' && 'github-actions-aarch64-linux'
|| matrix.system == 'x86_64-darwin' && 'github-actions-x86-64-darwin' }}
tags: tag:ci
# - name: Install and start Tailscale
# run: |
# # Start tailscaled daemon in background using nix shell
# nix profile add nixpkgs#tailscale
# sudo tailscaled --state=mem: &
# # Wait for daemon to be ready
# sleep 10
# # Connect using OAuth
# HOSTNAME="${{ matrix.system == 'x86_64-linux' && 'github-actions-x86-64-linux'
# || matrix.system == 'aarch64-linux' && 'github-actions-aarch64-linux'
# || matrix.system == 'x86_64-darwin' && 'github-actions-x86-64-darwin' }}"
# tailscale up \
# --authkey="${{ secrets.TS_OAUTH_SECRET }}?preauthorized=true&ephemeral=true" \
# --hostname="$HOSTNAME" \
# --advertise-tags="tag:ci" \
# --accept-routes
- name: Tailscale status
run: tailscale status || true
- name: Check if Attic endpoint is reachable
id: check_attic
run: |
if curl --connect-timeout 20 --silent --head http://wallfacer.curl-boga.ts.net:7080 | grep "200 OK"; then
echo "Attic endpoint is reachable"
echo "reachable=true" >> $GITHUB_OUTPUT
else
echo "Attic endpoint is not reachable"
echo "reachable=false" >> $GITHUB_OUTPUT
fi
- name: Curl the cache
run: |
curl --connect-timeout 20 --silent http://wallfacer.curl-boga.ts.net:7080/main/nix-cache-info || echo "Cache endpoint not reachable"
- name: Setup Attic cache
if: steps.check_attic.outputs.reachable == 'true'
uses: ryanccn/attic-action@v0.3.1
with:
endpoint: http://wallfacer.curl-boga.ts.net:7080
cache: main
token: ${{ secrets.ATTIC_TOKEN }}
- name: Check the flake
run: nix flake check --accept-flake-config
- name: Build the Neovim Configuration
run: nix build --accept-flake-config . -j3
timeout-minutes: 300
continue-on-error: true
- name: Print out the size of /nix/store
run: du -sh /nix/store
- name: Get the init.lua path
if: matrix.system == 'x86_64-linux'
run: |
init_path=$(grep "init=" result/bin/nixvim-print-init | awk -F'=' '{print $2}')
cp $init_path init.lua
- name: Upload the artifact
uses: actions/upload-artifact@v4
if: matrix.system == 'x86_64-linux'
with:
name: neovim-configuration
path: init.lua
- name: Publish the init.lua to an orphan github branch
if: matrix.system == 'x86_64-linux'
run: |
git config --global user.name github-actions
git config --global user.email github-actions@github.com
git checkout --orphan init-lua
git rm -rf .
git add init.lua
git commit -m "Publish init.lua"
git push --force origin init-lua
git checkout main # switch back to main branch for graceful job ending
check-formatting:
runs-on: ubuntu-24.04
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Install nix
uses: cachix/install-nix-action@v16
- name: Check formatting (dont update)
run: nix shell nixpkgs#alejandra -c alejandra -c .

1
.gitignore vendored
View file

@ -1 +0,0 @@
result

21
LICENSE
View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2025 Osman F Bayram
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1,6 +0,0 @@
This is my neovim configuration. I am using [nix](https://github.com/nixos/nix) and [nixvim](https://github.com/nix-community/nixvim) to generate the neovim configuration.
I am also pushing the generated neovim configuration in another branch using github actions. You can see my generated init.lua file [here](https://github.com/osbm/osbm-nvim/blob/init-lua/init.lua).

View file

@ -1,8 +0,0 @@
{
colorschemes = {
catppuccin = {
enable = true;
settings.flavor = "mocha";
};
};
}

View file

@ -1,64 +0,0 @@
{pkgs, ...}: {
imports = [
./colorscheme.nix
./options.nix
./plugins
];
config = {
# Use <Space> as leader key
globals.mapleader = " ";
globals.maplocalleader = " ";
# Set 'vi' and 'vim' aliases to nixvim
viAlias = true;
vimAlias = true;
# Setup clipboard support
clipboard = {
# Use xsel as clipboard provider
# providers.xsel.enable = true;
# Sync system clipboard
register = "unnamedplus";
};
extraPackages = with pkgs; [
nix-inspect
nixd
git
git-lfs
cloc
ripgrep
lazygit
black
fd
ripgrep
];
keymaps = [
{
mode = "n";
key = "<leader>gg";
action = "<cmd>LazyGit<CR>";
options = {
desc = "LazyGit (root dir)";
};
}
];
extraPlugins = with pkgs.vimPlugins; [
lazygit-nvim
];
extraConfigLua = ''
require("telescope").load_extension("lazygit")
'';
performance = {
byteCompileLua = {
enable = true;
nvimRuntime = true;
configs = true;
plugins = true;
};
};
};
}

View file

@ -1,49 +0,0 @@
{
opts = {
# Enable relative line numbers
number = true;
relativenumber = true;
# show spaces tabs and trailing spaces
list = true;
listchars = "tab:» ,trail:·,multispace:·,lead: ,nbsp:";
# Tab options
tabstop =
2; # Number of spaces a <Tab> in the text stands for (local to buffer)
shiftwidth =
2; # Number of spaces used for each step of (auto)indent (local to buffer)
softtabstop =
0; # If non-zero, number of spaces to insert for a <Tab> (local to buffer)
expandtab = true; # Expand <Tab> to spaces in Insert mode (local to buffer)
autoindent = true; # Do clever autoindenting
# TODO: i want to see 4 spaces when i press tab in python and 2 spaces in nix using setlocal
# is it possible for me to set this per language?
# folding
foldmethod = "expr";
foldexpr = "nvim_treesitter#foldexpr()";
foldlevel = 99; # Folds with a level higher than this number will be closed
foldcolumn = "1";
foldenable = true;
foldlevelstart = -1;
fillchars = {
horiz = "";
horizup = "";
horizdown = "";
vert = "";
vertleft = "";
vertright = "";
verthoriz = "";
eob = " ";
diff = "";
fold = " ";
foldopen = "";
foldclose = "";
msgsep = "";
};
};
}

View file

@ -1,23 +0,0 @@
{
plugins.avante = {
lazyLoad.settings.event = ["DeferredUIEnter"];
settings = {
# provider = "ollama";
# provider = "claude";
providers = {
# claude = {
# endpoint = "https://api.anthropic.com";
# extra_request_body = {
# max_tokens = 4096;
# temperature = 0;
# };
# model = "claude-3-5-sonnet-20240620";
# };
ollama = {
endpoint = "http://localhost:11434";
model = "qwen2.5-coder:32b";
};
};
};
};
}

View file

@ -1,36 +0,0 @@
{
plugins.blink-cmp = {
settings = {
# snippets = {
# preset = "luasnip";
# };
sources = {
default = [
"lsp"
"path"
"buffer"
"copilot"
];
providers = {
copilot = {
async = true;
module = "blink-copilot";
name = "copilot";
score_offset = 100;
# Optional configurations
opts = {
max_completions = 3;
max_attempts = 4;
kind = "Copilot";
debounce = 750;
auto_refresh = {
backward = true;
forward = true;
};
};
};
};
};
};
};
}

View file

@ -1,31 +0,0 @@
{
plugins.cmp = {
autoEnableSources = true;
settings = {
sources = [
# LSP source
{
name = "nvim_lsp";
}
# For path completion
{
name = "path";
}
# For buffer completion
{
name = "buffer";
keyword_length = 5;
}
# For command line completion
{name = "cmdline";}
];
mapping = {
# <CR> means enter
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<C-n>" = "cmp.mapping.select_next_item()";
"<C-p>" = "cmp.mapping.select_prev_item()";
"<C-e>" = "cmp.mapping.close()";
};
};
};
}

View file

@ -1,6 +0,0 @@
{
plugins.comment.settings = {
toggler.line = "<C-_>";
opleader.line = "<C-_>";
};
}

View file

@ -1,81 +0,0 @@
{lib, ...}: {
imports =
lib.mapAttrsToList (name: _path: ./. + "/${name}")
(lib.filterAttrs (filename: kind:
filename != "default.nix" && (kind == "regular" || kind == "directory"))
(builtins.readDir ./.));
plugins = {
# todo comments highlighter
todo-comments.enable = true;
# a statusline plugin
lualine.enable = true;
# syntax highlighting
treesitter.enable = true;
# completion plugin
cmp.enable = false;
# blink completion plugin
blink-cmp.enable = true;
# Extensible UI for Neovim notifications and LSP progress messages.
fidget.enable = true;
# A navigation plugin that uses lsp symbols to provide a breadcrumb trail
navic.enable = true; # TODO: not seeing the output rn
# fast create folders and files
oil.enable = true;
# a file explorer
telescope.enable = true;
# vim exercises
vim-be-good.enable = true;
# Provides Nerd Font icons
web-devicons.enable = true;
# better ui experience
noice.enable = true;
# an introduction plugin
mini.enable = true; # TODO look more into the mini plugin
# cursor animation
smear-cursor.enable = false;
# add buffer tab plugin
bufferline.enable = true;
# git integration
gitsigns.enable = true;
# commenting related plugin
comment.enable = true;
# lsp support
lsp.enable = true;
# gives me hardtime about my bad habits
hardtime.enable = false; # TODO: enable when I get used to my new keyboard
# tip pop-up
which-key.enable = true;
# ai support
avante.enable = true;
# lazy loading provider
lz-n.enable = true;
# oil git status shower
oil-git-status.enable = true;
# blink copilot
blink-copilot.enable = true;
};
}

View file

@ -1,5 +0,0 @@
{
plugins.gitsigns.settings = {
current_line_blame = true;
};
}

View file

@ -1,25 +0,0 @@
{
lib,
pkgs,
self,
...
}: {
plugins.lsp.servers = {
astro.enable = true;
dockerls.enable = true;
nixd = {
enable = true;
settings = let
flake = ''(builtins.getFlake "${self}")'';
in {
nixpkgs.expr = "import ${flake}.inputs.nixpkgs { }";
formatting.command = ["${lib.getExe pkgs.nixfmt-rfc-style}"];
};
};
pyright.enable = true;
typos_lsp = {
enable = true;
extraOptions.init_options.diagnosticSeverity = "Hint";
};
};
}

View file

@ -1,40 +0,0 @@
{
config,
lib,
...
}: {
plugins.mini = {
modules = {
starter = {
header = ''
_ _
___ ___| |__ _ __ ___ __| | _____ __
/ _ \/ __| '_ \| '_ ` _ \ / _` |/ _ \ \ / /
| (_) \__ \ |_) | | | | | || (_| | __/\ V /
\___/|___/_.__/|_| |_| |_(_)__,_|\___| \_/
'';
# this items and content_hooks are copied from khanelivim config
# but i want to understand them
items = {
"__unkeyed-1.builtin_actions".__raw = "require('mini.starter').sections.builtin_actions()";
"__unkeyed-2.recent_files_current_directory".__raw = "require('mini.starter').sections.recent_files(10, true)";
"__unkeyed-3.recent_files".__raw = "require('mini.starter').sections.recent_files(10, false)";
"__unkeyed-4.sessions".__raw = lib.mkIf (config.plugins.mini.enable
&& lib.hasAttr "sessions" config.plugins.mini.modules)
"require('mini.starter').sections.sessions(5, true)";
__unkeyed-5 = lib.mkIf config.plugins.persistence.enable {
name = "Restore session";
action.__raw = "[[lua require('persistence').load()]]";
section = "Session";
};
};
content_hooks = {
"__unkeyed-1.adding_bullet".__raw = "require('mini.starter').gen_hook.adding_bullet()";
"__unkeyed-2.indexing".__raw = "require('mini.starter').gen_hook.indexing('all', { 'Builtin actions' })";
"__unkeyed-3.padding".__raw = "require('mini.starter').gen_hook.aligning('center', 'center')";
};
};
};
};
}

View file

@ -1,25 +0,0 @@
{
config,
lib,
...
}: {
plugins.oil.settings = {
view_options = {
show_hidden = true;
};
win_options = {
signcolumn = "yes:2";
};
};
# add this keymaps only if oil plugin is enabled
keymaps = lib.mkIf config.plugins.oil.enable [
{
action = "<cmd>Oil<CR>";
key = "-";
options = {
silent = true;
# TODO what does silent do?
};
}
];
}

View file

@ -1,21 +0,0 @@
{
plugins.treesitter = {
folding = true; # i dont like the way it starts neovim with everything folded
settings = {
ensure_installed = [
"python"
"astro"
"just"
"dockerfile"
"json"
"yaml"
"lua"
"nix"
"c"
"markdown"
# TODO: add mdx
];
highlight = {enable = true;};
};
};
}

View file

@ -1,8 +0,0 @@
{
plugins.which-key.settings = {
delay = 500;
win = {
border = "single";
};
};
}

240
flake.lock generated
View file

@ -1,240 +0,0 @@
{
"nodes": {
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1760948891,
"narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"ixx": {
"inputs": {
"flake-utils": [
"nixvim",
"nuschtosSearch",
"flake-utils"
],
"nixpkgs": [
"nixvim",
"nuschtosSearch",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754860581,
"narHash": "sha256-EM0IE63OHxXCOpDHXaTyHIOk2cNvMCGPqLt/IdtVxgk=",
"owner": "NuschtOS",
"repo": "ixx",
"rev": "babfe85a876162c4acc9ab6fb4483df88fa1f281",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"ref": "v0.1.1",
"repo": "ixx",
"type": "github"
}
},
"nix-formatter-pack": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"nmd": "nmd",
"nmt": "nmt"
},
"locked": {
"lastModified": 1756744433,
"narHash": "sha256-6BSEvkprwEQDQQgW5UH/1GkBPGM8M9+qX6o9ePslr6E=",
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"rev": "63b748033a3fa0af80f8ed908521122e48858c30",
"type": "github"
},
"original": {
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1761373498,
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1761656231,
"narHash": "sha256-EiED5k6gXTWoAIS8yQqi5mAX6ojnzpHwAQTS3ykeYMg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e99366c665bdd53b7b500ccdc5226675cfc51f45",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_2",
"nuschtosSearch": "nuschtosSearch",
"systems": "systems_2"
},
"locked": {
"lastModified": 1761744315,
"narHash": "sha256-OknzyEoI+VEYgk/FWMyx3tvjb/MPPyqS+G/aemDz51w=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "6233fc6b2c3f203d8a5970f4a2c1df5777902717",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixvim",
"type": "github"
}
},
"nmd": {
"flake": false,
"locked": {
"lastModified": 1666190571,
"narHash": "sha256-Z1hc7M9X6L+H83o9vOprijpzhTfOBjd0KmUTnpHAVjA=",
"owner": "rycee",
"repo": "nmd",
"rev": "b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169",
"type": "gitlab"
},
"original": {
"owner": "rycee",
"repo": "nmd",
"type": "gitlab"
}
},
"nmt": {
"flake": false,
"locked": {
"lastModified": 1648075362,
"narHash": "sha256-u36WgzoA84dMVsGXzml4wZ5ckGgfnvS0ryzo/3zn/Pc=",
"owner": "rycee",
"repo": "nmt",
"rev": "d83601002c99b78c89ea80e5e6ba21addcfe12ae",
"type": "gitlab"
},
"original": {
"owner": "rycee",
"repo": "nmt",
"type": "gitlab"
}
},
"nuschtosSearch": {
"inputs": {
"flake-utils": "flake-utils",
"ixx": "ixx",
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1761730856,
"narHash": "sha256-t1i5p/vSWwueZSC0Z2BImxx3BjoUDNKyC2mk24krcMY=",
"owner": "NuschtOS",
"repo": "search",
"rev": "e29de6db0cb3182e9aee75a3b1fd1919d995d85b",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"repo": "search",
"type": "github"
}
},
"root": {
"inputs": {
"nix-formatter-pack": "nix-formatter-pack",
"nixpkgs": "nixpkgs",
"nixvim": "nixvim"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View file

@ -1,71 +0,0 @@
{
description = "My custom neovim configuration that has been mixed and matched from various sources";
nixConfig = {
extra-substituters = [
"https://nix-community.cachix.org"
];
extra-trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
};
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# https://gerschtli.github.io/nix-formatter-pack/nix-formatter-pack-options.html
nix-formatter-pack = {
url = "github:Gerschtli/nix-formatter-pack";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim.url = "github:nix-community/nixvim";
};
outputs = {
self,
nixpkgs,
nixvim,
nix-formatter-pack,
...
}: let
forAllSystems = nixpkgs.lib.genAttrs [
"aarch64-linux"
"i686-linux"
"x86_64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
in {
formatter = forAllSystems (system:
nix-formatter-pack.lib.mkFormatter {
pkgs = nixpkgs.legacyPackages.${system};
config.tools = {
deadnix.enable = true;
alejandra.enable = true;
statix.enable = true;
};
});
packages = forAllSystems (system: let
pkgs = import nixpkgs {inherit system;};
mkNixvim = specialArgs:
nixvim.legacyPackages.${system}.makeNixvimWithModule {
inherit pkgs;
module = ./config;
extraSpecialArgs =
specialArgs
// {
inherit pkgs self;
};
};
in rec {
default = mkNixvim {};
lite = mkNixvim {withLSP = false;};
default-print-init = default.config.build.printInitPackage;
lite-print-init = lite.config.build.printInitPackage;
default-init = default.config.build.initSource;
lite-init = lite.config.build.initSource;
});
};
}

212
init.lua Normal file
View file

@ -0,0 +1,212 @@
-- Ignore the user lua configuration
vim.opt.runtimepath:remove(vim.fn.stdpath("config")) -- ~/.config/nvim
vim.opt.runtimepath:remove(vim.fn.stdpath("config") .. "/after") -- ~/.config/nvim/after
-- Nixvim's internal module table
-- Can be used to share code throughout init.lua
local _M = {}
-- Set up options {{{
do
local nixvim_options = {
autoindent = true,
clipboard = "unnamedplus",
expandtab = true,
list = true,
listchars = "tab:» ,trail:·,multispace:·,lead: ,nbsp:⎕",
number = true,
relativenumber = true,
shiftwidth = 2,
softtabstop = 0,
tabstop = 2,
termguicolors = true,
}
for k, v in pairs(nixvim_options) do
vim.opt[k] = v
end
end
-- }}}
require("gruvbox").setup({})
vim.cmd([[let $BAT_THEME = 'gruvbox'
colorscheme gruvbox
]])
require("nvim-web-devicons").setup({})
require("mini.starter").setup({
content_hooks = {
require("mini.starter").gen_hook.adding_bullet(),
require("mini.starter").gen_hook.indexing("all", { "Builtin actions" }),
require("mini.starter").gen_hook.aligning("center", "center"),
},
header = " _ _\n ___ ___| |__ _ __ ___ __| | _____ __\n / _ \\/ __| '_ \\| '_ ` _ \\ / _` |/ _ \\ \\ / /\n| (_) \\__ \\ |_) | | | | | || (_| | __/\\ V /\n \\___/|___/_.__/|_| |_| |_(_)__,_|\\___| \\_/\n",
items = {
require("mini.starter").sections.builtin_actions(),
require("mini.starter").sections.recent_files(10, true),
require("mini.starter").sections.recent_files(10, false),
},
})
-- LSP {{{
do
local __lspServers = {
{ extraOptions = { init_options = { diagnosticSeverity = "Hint" } }, name = "typos_lsp" },
{ name = "pyright" },
{
extraOptions = {
settings = {
nixd = {
formatting = {
command = {
"/nix/store/8dy4rqc44frv0wi4k6akn0a2znmj7bym-nixfmt-unstable-2025-04-04/bin/nixfmt",
},
},
nixpkgs = {
expr = 'import (builtins.getFlake "/nix/store/gv8kpbbakfkw91b3xkr0xgkhwzmnqq6r-source").inputs.nixpkgs { }',
},
},
},
},
name = "nixd",
},
{ name = "dockerls" },
{ name = "astro" },
}
-- Adding lspOnAttach function to nixvim module lua table so other plugins can hook into it.
_M.lspOnAttach = function(client, bufnr) end
local __lspCapabilities = function()
capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = vim.tbl_deep_extend("force", capabilities, require("cmp_nvim_lsp").default_capabilities())
return capabilities
end
local __setup = {
on_attach = _M.lspOnAttach,
capabilities = __lspCapabilities(),
}
for i, server in ipairs(__lspServers) do
if type(server) == "string" then
require("lspconfig")[server].setup(__setup)
else
local options = server.extraOptions
if options == nil then
options = __setup
else
options = vim.tbl_extend("keep", options, __setup)
end
require("lspconfig")[server.name].setup(options)
end
end
end
-- }}}
local cmp = require("cmp")
cmp.setup({
mapping = {
["<C-e>"] = cmp.mapping.close(),
["<C-n>"] = cmp.mapping.select_next_item(),
["<C-p>"] = cmp.mapping.select_prev_item(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
},
sources = {
{ name = "nvim_lsp" },
{ name = "path" },
{ keyword_length = 5, name = "buffer" },
{ name = "cmdline" },
},
})
vim.opt.runtimepath:prepend(vim.fs.joinpath(vim.fn.stdpath("data"), "site"))
require("nvim-treesitter.configs").setup({
ensure_installed = { "python", "astro", "just", "dockerfile", "json", "yaml", "lua", "nix", "c", "markdown" },
highlight = { enable = true },
parser_install_dir = vim.fs.joinpath(vim.fn.stdpath("data"), "site"),
})
require("todo-comments").setup({})
require("telescope").setup({})
local __telescopeExtensions = {}
for i, extension in ipairs(__telescopeExtensions) do
require("telescope").load_extension(extension)
end
require("smear_cursor").setup({})
require("oil").setup({ view_options = { show_hidden = true } })
require("noice").setup({})
require("nvim-navic").setup({})
require("lualine").setup({})
require("gitsigns").setup({ current_line_blame = true })
require("fidget").setup({})
require("Comment").setup({ opleader = { line = "<C-_>" }, toggler = { line = "<C-_>" } })
require("bufferline").setup({})
-- Set up keybinds {{{
do
local __nixvim_binds = { { action = "<cmd>Oil<CR>", key = "-", mode = "", options = { silent = true } } }
for i, map in ipairs(__nixvim_binds) do
vim.keymap.set(map.mode, map.key, map.action, map.options)
end
end
-- }}}
-- Set up autogroups {{
do
local __nixvim_autogroups = { nixvim_binds_LspAttach = { clear = true } }
for group_name, options in pairs(__nixvim_autogroups) do
vim.api.nvim_create_augroup(group_name, options)
end
end
-- }}
-- Set up autocommands {{
do
local __nixvim_autocommands = {
{
callback = function(args)
do
local __nixvim_binds = {}
for i, map in ipairs(__nixvim_binds) do
local options = vim.tbl_extend("keep", map.options or {}, { buffer = args.buf })
vim.keymap.set(map.mode, map.key, map.action, options)
end
end
end,
desc = "Load keymaps for LspAttach",
event = "LspAttach",
group = "nixvim_binds_LspAttach",
},
}
for _, autocmd in ipairs(__nixvim_autocommands) do
vim.api.nvim_create_autocmd(autocmd.event, {
group = autocmd.group,
pattern = autocmd.pattern,
buffer = autocmd.buffer,
desc = autocmd.desc,
callback = autocmd.callback,
command = autocmd.command,
once = autocmd.once,
nested = autocmd.nested,
})
end
end
-- }}