Compare commits

...
Sign in to create a new pull request.

21 commits
main ... qemu

Author SHA1 Message Date
urec56
b7b151c136 Убрал лигатуры и редактирование звука микрофона прогами 2025-04-08 19:15:13 +03:00
urec56
cbaf6ae698 Исправил очепятку 2025-04-07 23:19:05 +03:00
urec56
343b699296 Исправил очепятку 2025-04-07 23:13:00 +03:00
urec56
821708d389 Исправил очепятку 2025-04-07 23:04:20 +03:00
urec56
19a9118e37 Офнул мусорные плагины 2025-04-07 22:51:15 +03:00
urec56
72dba3b490 Изменил конфиг nvim 2025-04-07 22:31:27 +03:00
urec56
09a6c3ef0b Актуализировал от буливея 2025-04-07 16:49:17 +03:00
urec56
0ff494dc51 Изменил переключение языка на альт + шифт 2025-02-27 15:18:18 +03:00
urec56
bd7eae43c9 Изменил полибар 2025-02-23 22:51:57 +03:00
urec56
a799a47b2f Система работает 2025-02-17 20:27:19 +03:00
urec56
2516b079c0 актуализировал ветку 2025-02-17 20:00:20 +03:00
urec56
7cfa44f867 Рабочий конфиг для виртуалки 2025-02-17 19:18:22 +03:00
urec56
f5ac3e28df Поменял бинд на vscodium 2025-02-17 14:24:06 +03:00
urec56
d64eede581 Добавил алиас на сборку мусора 2025-02-17 13:37:59 +03:00
urec56
32b8b8f7d4 Добавил поддержку протобафа и других инструментов в го 2025-02-17 13:02:20 +03:00
urec56
ca500f6164 Обновил версию ollama 2025-01-30 15:04:09 +03:00
urec56
b2b3c07262 добавил поддерку ollama 2025-01-29 21:09:01 +03:00
urec56
553bd11e70 Поменял алиасы, добавил инпут для ют-длп, убрал синхронизацию истории в разных сессиях zsh 2025-01-24 14:10:11 +03:00
urec56
7e7b94eece Починил rbs 2025-01-04 17:53:48 +03:00
urec56
1c670e3745 Добавил голенд 2025-01-04 17:47:41 +03:00
urec56
a30c7cf765 Фикс мпв 2025-01-04 17:28:09 +03:00
60 changed files with 3390 additions and 366 deletions

View file

@ -1,6 +1,3 @@
Эта ветка для моего пк сделана. Просто дотсы надо смотреть в ветке main
## Навигация
- [Бинды](#бинды)
@ -114,6 +111,7 @@
- [Копия man page для bspwm с доп инфой](./modules/home-manager/wm/bspwm/bspwm.md)
- [Описание плагинов для mpv](./modules/home-manager/mpv/README.md)
- [NeoVim config](./nvim/README.md)
## Проблемы

View file

@ -29,7 +29,7 @@
"x-scheme-handler/unknown" = [ "librewolf.desktop" ];
# Images
"image/*" = [ "qview.desktop" "imv.desktop" ];
"image/avif" = [ "qview.desktop" "imv.desktop" ];
"image/avif" = [ "imv.desktop" "qview.desktop" ];
"image/gif" = [ "qview.desktop" "imv.desktop" ];
"image/jpeg" = [ "qview.desktop" "imv.desktop" ]; # Обычный jpeg, прогрузка сверху вниз
"image/pjpeg" = [ "qview.desktop" "imv.desktop" ]; # Сначала размытый и постепенной лучше видно, для медленного инета
@ -60,25 +60,25 @@
"audio/x-mpegurl" = [ "mpv.desktop" ]; # Для .m3u. Это файл-плейлист
"audio/x-opus+ogg" = [ "mpv.desktop" ]; # What's this? Why not "audio/ogg" and "audio/opus"?
# Text
"text/*" = [ "nvim.desktop" "code.desktop" ]; # Надо ли заменять nvim и всё что ниже на NixVim?
"text/css" = [ "nvim.desktop" "code.desktop" ];
"text/csv" = [ "nvim.desktop" "code.desktop" ];
"text/html" = [ "nvim.desktop" "code.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"text/javascript" = [ "nvim.desktop" "code.desktop" ];
"text/markdown" = [ "nvim.desktop" "code.desktop" ];
"text/plain" = [ "nvim.desktop" "code.desktop" ];
"text/x-asm" = [ "nvim.desktop" "code.desktop" ];
"text/x-c" = [ "nvim.desktop" "code.desktop" ];
"text/x-python" = [ "nvim.desktop" "code.desktop" ];
"application/json" = [ "nvim.desktop" "code.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"application/x-sh" = [ "nvim.desktop" "code.desktop" ];
"application/x-shellscript" = [ "nvim.desktop" "code.desktop" ];
"application/xml" = [ "nvim.desktop" "code.desktop" ];
"application/yaml" = [ "nvim.desktop" "code.desktop" ];
"text/*" = [ "nvim.desktop" "codium.desktop" ]; # Надо ли заменять nvim и всё что ниже на NixVim?
"text/css" = [ "nvim.desktop" "codium.desktop" ];
"text/csv" = [ "nvim.desktop" "codium.desktop" ];
"text/html" = [ "nvim.desktop" "codium.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"text/javascript" = [ "nvim.desktop" "codium.desktop" ];
"text/markdown" = [ "nvim.desktop" "codium.desktop" ];
"text/plain" = [ "nvim.desktop" "codium.desktop" ];
"text/x-asm" = [ "nvim.desktop" "codium.desktop" ];
"text/x-c" = [ "nvim.desktop" "codium.desktop" ];
"text/x-python" = [ "nvim.desktop" "codium.desktop" ];
"application/json" = [ "nvim.desktop" "codium.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"application/x-sh" = [ "nvim.desktop" "codium.desktop" ];
"application/x-shellscript" = [ "nvim.desktop" "codium.desktop" ];
"application/xml" = [ "nvim.desktop" "codium.desktop" ];
"application/yaml" = [ "nvim.desktop" "codium.desktop" ];
# Мб потом добавить для docs варианты и разные виды архивов и ebook
# Other
"application/pdf" = [ "org.gnome.Evince.desktop" ];
"application/x-zerosize" = [ "nvim.desktop" "code.desktop" ]; # Файл нулевого размера
"application/x-zerosize" = [ "nvim.desktop" "codium.desktop" ]; # Файл нулевого размера
"application/zip" = [ "ark.desktop" ];
"application/x-bittorrent" = [ "qbittorrent.desktop" ];
"x-scheme-handler/magnet" = [ "qbittorrent.desktop" ];
@ -90,7 +90,7 @@
associations.added = { # Дополнительные приложения для нужного файла. Будет в меню "Открыть с помощью"
# Images
"image/*" = [ "qview.desktop" "imv.desktop" ];
"image/avif" = [ "qview.desktop" "imv.desktop" ];
"image/avif" = [ "imv.desktop" "qview.desktop" ];
"image/gif" = [ "qview.desktop" "imv.desktop" ];
"image/jpeg" = [ "qview.desktop" "imv.desktop" ]; # Обычный jpeg, прогрузка сверху вниз
"image/pjpeg" = [ "qview.desktop" "imv.desktop" ]; # Сначала размытый и постепенной лучше видно, для медленного инета
@ -101,21 +101,21 @@
"image/x-icon" = [ "qview.desktop" "imv.desktop" ];
"image/vnd.microsoft.icon" = [ "qview.desktop" "imv.desktop" ];
# Text
"text/*" = [ "nvim.desktop" "code.desktop" ]; # Надо ли заменять nvim и всё что ниже на NixVim?
"text/css" = [ "nvim.desktop" "code.desktop" ];
"text/csv" = [ "nvim.desktop" "code.desktop" ];
"text/html" = [ "nvim.desktop" "code.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"text/javascript" = [ "nvim.desktop" "code.desktop" ];
"text/markdown" = [ "nvim.desktop" "code.desktop" ];
"text/plain" = [ "nvim.desktop" "code.desktop" ];
"text/x-asm" = [ "nvim.desktop" "code.desktop" ];
"text/x-c" = [ "nvim.desktop" "code.desktop" ];
"text/x-python" = [ "nvim.desktop" "code.desktop" ];
"application/json" = [ "nvim.desktop" "code.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"application/x-sh" = [ "nvim.desktop" "code.desktop" ];
"application/x-shellscript" = [ "nvim.desktop" "code.desktop" ];
"application/xml" = [ "nvim.desktop" "code.desktop" ];
"application/yaml" = [ "nvim.desktop" "code.desktop" ];
"text/*" = [ "nvim.desktop" "codium.desktop" ]; # Надо ли заменять nvim и всё что ниже на NixVim?
"text/css" = [ "nvim.desktop" "codium.desktop" ];
"text/csv" = [ "nvim.desktop" "codium.desktop" ];
"text/html" = [ "nvim.desktop" "codium.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"text/javascript" = [ "nvim.desktop" "codium.desktop" ];
"text/markdown" = [ "nvim.desktop" "codium.desktop" ];
"text/plain" = [ "nvim.desktop" "codium.desktop" ];
"text/x-asm" = [ "nvim.desktop" "codium.desktop" ];
"text/x-c" = [ "nvim.desktop" "codium.desktop" ];
"text/x-python" = [ "nvim.desktop" "codium.desktop" ];
"application/json" = [ "nvim.desktop" "codium.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"application/x-sh" = [ "nvim.desktop" "codium.desktop" ];
"application/x-shellscript" = [ "nvim.desktop" "codium.desktop" ];
"application/xml" = [ "nvim.desktop" "codium.desktop" ];
"application/yaml" = [ "nvim.desktop" "codium.desktop" ];
};
};
}

View file

@ -5,22 +5,33 @@
shellAliases = let
flakeDir = "~/dots";
in {
rb = "sudo nixos-rebuild switch --flake ${flakeDir}"; # Применить новый конфиг
rbs = "sudo nixos-rebuild switch --impure --flake ${flakeDir}"; # Применить новый конфиг сразу
rbb = "sudo nixos-rebuild boot --impure --flake ${flakeDir}"; # Применить новый конфиг после ребута пк
# Можно назвать аналогом "sudo pacman -Su", не "Syu", репу не обновляет
upg = "sudo nixos-rebuild switch --upgrade --flake ${flakeDir}"; # Обновить пакеты, но не репозиторий во fleke.lock
upg = "sudo nixos-rebuild switch --impure --upgrade --flake ${flakeDir}"; # Обновить пакеты, но не репозиторий во fleke.lock
# Возможно это аналог "sudo pacman -Sy". Обновить репозиторий, чтоб потом на него обновиться? Пакеты не обновляет
upd = "nix flake update ${flakeDir}"; # Обновляет flake.lock на последние коммиты с гитхаба?
# Обновить все flake inputs до последних версий. Возможно это аналог "sudo pacman -Sy" на Arch Linux
# Если после upd дописать название инпута из flake.nix, то обновится только указанный инпут
# Например `upd nixpkgs2` для обновления анстабле репы
upd = "sudo nix flake update --flake ${flakeDir}";
# Garbage collector. Удалить все не используемые пакеты (например после обновы)
grb = "sudo nix-collect-garbage -d";
pkgs = "nvim ${flakeDir}/nixos/packages.nix";
vim = "nvim";
vi = "nvim";
v = "nvim";
t = "timer";
r = "ranger";
ff = "fastfetch";
yt = "cd /mnt/backups/Media/yt-dlp"; # Бекапить YouTube
qb = "cd /mnt/backups/Media/Music/Qobux/qdl"; # Бекапить музыку с Qobuz
g = "gitui";
f = "fastfetch";
yt = "cd /mnt/backups/Media/yt-dlp"; # Конфиги для бекапа YouTube
qb = "cd /mnt/backups/Media/Music/Qobuz/qdl"; # Бекапить музыку с Qobuz
html = "python3 /mnt/backups/html-library/generate_gallery.py --path"; # Html image gallery
};
# Всё, что в комментах ниже, лишнее. Я нашёл норм способ. Пишем "nix-prefetch-git link" и получаем всю инфу
@ -79,4 +90,4 @@
end
'';
};
}
}

279
flake.lock generated
View file

@ -5,11 +5,11 @@
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1708890466,
"narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=",
"lastModified": 1732200724,
"narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "665b3c6748534eb766c777298721cece9453fdae",
"rev": "153d52373b0fb2d343592871009a286ec8837aec",
"type": "github"
},
"original": {
@ -34,30 +34,14 @@
"type": "github"
}
},
"base16-foot": {
"flake": false,
"locked": {
"lastModified": 1696725948,
"narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=",
"owner": "tinted-theming",
"repo": "base16-foot",
"rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-foot",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1720809814,
"narHash": "sha256-numb3xigRGnr/deF7wdjBwVg7fpbTH7reFDkJ75AJkY=",
"lastModified": 1725860795,
"narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "34f41987bec14c0f3f6b2155c19787b1f6489625",
"rev": "7f795bf75d38e0eea9fed287264067ca187b88a9",
"type": "github"
},
"original": {
@ -66,46 +50,14 @@
"type": "github"
}
},
"base16-kitty": {
"flake": false,
"locked": {
"lastModified": 1665001328,
"narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=",
"owner": "kdrag0n",
"repo": "base16-kitty",
"rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805",
"type": "github"
},
"original": {
"owner": "kdrag0n",
"repo": "base16-kitty",
"type": "github"
}
},
"base16-tmux": {
"flake": false,
"locked": {
"lastModified": 1696725902,
"narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=",
"owner": "tinted-theming",
"repo": "base16-tmux",
"rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-tmux",
"type": "github"
}
},
"base16-vim": {
"flake": false,
"locked": {
"lastModified": 1716150083,
"narHash": "sha256-ZMhnNmw34ogE5rJZrjRv5MtG3WaqKd60ds2VXvT6hEc=",
"lastModified": 1731949548,
"narHash": "sha256-XIDexXM66sSh5j/x70e054BnUsviibUShW7XhbDGhYo=",
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "6e955d704d046b0dc3e5c2d68a2a6eeffd2b5d3d",
"rev": "61165b1632409bd55e530f3dbdd4477f011cadc6",
"type": "github"
},
"original": {
@ -117,11 +69,11 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
@ -130,6 +82,24 @@
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1741352980,
"narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": [
@ -138,11 +108,11 @@
]
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
@ -154,11 +124,11 @@
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1689549921,
"narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=",
"lastModified": 1731966426,
"narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84",
"rev": "106af9e2f715e2d828df706c386a685698f3223b",
"type": "github"
},
"original": {
@ -170,16 +140,16 @@
"gnome-shell": {
"flake": false,
"locked": {
"lastModified": 1713702291,
"narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=",
"lastModified": 1732369855,
"narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934",
"rev": "dadd58f630eeea41d645ee225a63f719390829dc",
"type": "github"
},
"original": {
"owner": "GNOME",
"ref": "46.1",
"ref": "47.2",
"repo": "gnome-shell",
"type": "github"
}
@ -191,11 +161,11 @@
]
},
"locked": {
"lastModified": 1725831139,
"narHash": "sha256-9syY5nEehCswE8AMcjpUO4T0iX9nrNbzq69Kqcs92L0=",
"lastModified": 1733484277,
"narHash": "sha256-i5ay20XsvpW91N4URET/nOc0VQWOAd4c4vbqYtcH8Rc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "8a175a89137fe798b33c476d4dae17dba5fb3fd3",
"rev": "d00c6f6d0ad16d598bf7e2956f52c1d9d5de3c3a",
"type": "github"
},
"original": {
@ -212,11 +182,11 @@
]
},
"locked": {
"lastModified": 1724435763,
"narHash": "sha256-UNky3lJNGQtUEXT2OY8gMxejakSWPTfWKvpFkpFlAfM=",
"lastModified": 1733085484,
"narHash": "sha256-dVmNuUajnU18oHzBQWZm1BQtANCHaqNuxTHZQ+GN0r8=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "c2cd2a52e02f1dfa1c88f95abeb89298d46023be",
"rev": "c1fee8d4a60b89cae12b288ba9dbc608ff298163",
"type": "github"
},
"original": {
@ -225,13 +195,79 @@
"type": "github"
}
},
"nix-gaming": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1741657497,
"narHash": "sha256-2X7d94f9QcRnBKz1jJQfumATe8w4gXjwRly150ERnek=",
"owner": "fufexan",
"repo": "nix-gaming",
"rev": "64a949349294543a48b3f946c9fca84332d1398b",
"type": "github"
},
"original": {
"owner": "fufexan",
"repo": "nix-gaming",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1725634671,
"narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=",
"lastModified": 1741678040,
"narHash": "sha256-rmBsz7BBcDwfvDkxnKHmolKceGJrr0nyz5PQYZg0kMk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3ee8818da146871cd570b164fc4f438f78479a50",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1740877520,
"narHash": "sha256-oiwv/ZK/2FhGxrCkQkB83i7GnWXPPLzoqFHpDD3uYpk=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "147dee35aab2193b174e4c0868bd80ead5ce755c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1733412085,
"narHash": "sha256-FillH0qdWDt/nlO6ED7h4cmN+G9uXwGjwmCnHs0QVYM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c",
"rev": "4dc2fc4e62dbf62b84132fe526356fbac7b03541",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs2": {
"locked": {
"lastModified": 1742669843,
"narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1e5b653dff12029333a6546c11e108ede13052eb",
"type": "github"
},
"original": {
@ -243,16 +279,16 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1725194671,
"narHash": "sha256-tLGCFEFTB5TaOKkpfw3iYT9dnk4awTP/q4w+ROpMfuw=",
"owner": "NixOS",
"lastModified": 1733392399,
"narHash": "sha256-kEsTJTUQfQFIJOcLYFt/RvNxIK653ZkTBIs4DG+cBns=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "b833ff01a0d694b910daca6e2ff4a3f26dee478c",
"rev": "d0797a04b81caeae77bcff10a9dde78bc17f5661",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
@ -260,7 +296,10 @@
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"nix-gaming": "nix-gaming",
"nixpkgs": "nixpkgs_2",
"nixpkgs-stable": "nixpkgs-stable",
"nixpkgs2": "nixpkgs2",
"stylix": "stylix"
}
},
@ -268,24 +307,26 @@
"inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-foot": "base16-foot",
"base16-helix": "base16-helix",
"base16-kitty": "base16-kitty",
"base16-tmux": "base16-tmux",
"base16-vim": "base16-vim",
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"gnome-shell": "gnome-shell",
"home-manager": "home-manager_2",
"nixpkgs": "nixpkgs_2",
"systems": "systems"
"nixpkgs": [
"nixpkgs"
],
"systems": "systems",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-tmux": "tinted-tmux"
},
"locked": {
"lastModified": 1725290973,
"narHash": "sha256-+jwXF9KI0HfvDgpsoJGvOdfOGGSKOrID1wQB79zjUbo=",
"lastModified": 1733510476,
"narHash": "sha256-RH/8yIuo+fNLCjQ6e1mnXwmmxymjvfWC9JcbDuIA8TM=",
"owner": "danth",
"repo": "stylix",
"rev": "ef81ad9e85e60420cc83d4642619c14b57139d33",
"rev": "e309d64fe7f203274a7913e1d2b74307d15ba122",
"type": "github"
},
"original": {
@ -308,6 +349,56 @@
"repo": "default",
"type": "github"
}
},
"tinted-foot": {
"flake": false,
"locked": {
"lastModified": 1726913040,
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
}
},
"tinted-kitty": {
"flake": false,
"locked": {
"lastModified": 1716423189,
"narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1729501581,
"narHash": "sha256-1ohEFMC23elnl39kxWnjzH1l2DFWWx4DhFNNYDTYt54=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "f0e7f7974a6441033eb0a172a0342e96722b4f14",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
}
},
"root": "root",

View file

@ -3,7 +3,11 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05";
# Вторая unstable ветка, которую я буду обновлять отдельно
# Нужна если я не хочу обновлять систему, но хочу обновить конкретный софт
# Просто задам этому софту репу pkgs2 и обновлю только её
nixpkgs2.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
home-manager = {
url = "github:nix-community/home-manager";
@ -12,34 +16,46 @@
stylix = {
url = "github:danth/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
# nixvim =
nix-gaming = { # Удобно ставить некоторые игры
url = "github:fufexan/nix-gaming";
# inputs.nixpkgs.follows = "nixpkgs";
};
# nix-gaming = { # Удобно ставить некоторые игры
# url = "github:fufexan/nix-gaming";
# inputs.nixpkgs.follows = "nixpkgs";
# };
};
outputs = { self, nixpkgs, ... }@inputs:
let
system = "x86_64-linux"; # Не понимаю зачем, если это в hardware.nix указывается
# pkgs = nixpkgs.legacyPackages.${system};
config = {
allowUnfree = true;
rocmSupport = true;
permittedInsecurePackages = [
"python-2.7.18.8"
"electron-25.9.0"
];
};
pkgs = import nixpkgs {
inherit system;
config = {
allowUnfree = true;
permittedInsecurePackages = [
"python-2.7.18.8"
"electron-25.9.0"
];
};
inherit config;
};
pkgs2 = import inputs.nixpkgs2 {
inherit system;
inherit config;
};
spkgs = import inputs.nixpkgs-stable {
inherit system;
inherit config;
};
in
{
nixosConfigurations = {
nixos = nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs;};
specialArgs = { inherit spkgs; inherit pkgs2; inherit inputs; };
inherit pkgs;
inherit system;
modules = [
@ -48,7 +64,6 @@
inputs.stylix.nixosModules.stylix
];
};
};
};
}

View file

@ -17,7 +17,7 @@
./terminal/zsh.nix
./mangohud.nix
./symlinks.nix
# ./symlinks.nix # На виртуалке закомментить
##############
## WM (X11) ##

View file

@ -21,7 +21,7 @@
tamasfe.even-better-toml # Fully-featured TOML support
ms-python.python # Python language support
golang.go # Rich Go language support
# mechatroner.rainbow-csv # Rainbow syntax higlighting for CSV and TSV files
mechatroner.rainbow-csv # Rainbow syntax higlighting for CSV and TSV files
# redhat.vscode-xml # XML Language Support by Red Hat
# dotjoshjohnson.xml # XML Tools
# bradlc.vscode-tailwindcss # Tailwind CSS tooling
@ -78,4 +78,4 @@
# }
# ];
};
}
}

View file

@ -3,10 +3,10 @@
F script-binding quality_menu/video_formats_toggle #! Stream Quality > Video
Alt+f script-binding quality_menu/audio_formats_toggle #! Stream Quality > Audio
#MBTN_LEFT ignore # don't do anything
#MBTN_LEFT_DBL cycle fullscreen # toggle fullscreen
#MBTN_RIGHT cycle pause # toggle pause/playback mode
MBTN_LEFT_DBL ignore
MBTN_LEFT cycle pause # don't do anything
MBTN_LEFT_DBL cycle fullscreen # toggle fullscreen
MBTN_RIGHT ignore # toggle pause/playback mode
#MBTN_LEFT_DBL ignore
# Разные виды нормализации громкости
#F1 af toggle "compand=attacks=0:decays=0:points=-80/-80|-30/-10|0/-10|20/-10:soft-knee=6" # Оглох нахуй

View file

@ -1,12 +1,13 @@
{ pkgs, ... }: {
{
programs.mpv.enable = true;
home = {
packages = with pkgs; [
yt-dlp # Смотреть онлайн видео через mpv
xclip # Буфер обмена на x11 для некоторых плагинов
#wl-clipboard # Буфер обмена на wayland для некоторых плагинов
];
# Решил нужные зависимости писать в packages.nix
# packages = with pkgs; [
# yt-dlp # Смотреть онлайн видео через mpv
# xclip # Буфер обмена на x11 для некоторых плагинов
# #wl-clipboard # Буфер обмена на wayland для некоторых плагинов
# ];
file = {
".config/mpv/mpv.conf".source = ./mpv.conf;
@ -16,4 +17,4 @@
".config/mpv/fonts".source = ./fonts;
};
};
}
}

View file

@ -1,4 +1,4 @@
{ pkgs, ... }: {
{ pkgs, spkgs, ... }: {
programs.ranger = { # Файловый менеджер в терминале
enable = true;
@ -14,7 +14,7 @@
lynx # Preview html pages
poppler # Preview PDF
djvulibre # Preview djvu
calibre # Preview ebooks (or epub-thumbnailer)
spkgs.calibre # Preview ebooks (or epub-thumbnailer)
catdoc # Preview XLS as csv conversion
exiftool # Information about media files
odt2txt # For OpenDocument text files

View file

@ -1,8 +1,8 @@
# Надо удалить оригинальный файл, прежде чем делать симлинк
# Некоторые проги клали хуй на симлинки и заменяют их своими файлами
# Таких прог я ебал рот и проклинал хуесосов разработчиков
# Некоторые проги забивают на симлинки и заменяют их своими файлами (например thunar)
# Тут уж ничего не поделать, придётся руками настраивать
# Если выдаёт ошибку про home-manager сервис при ребилде,
# Значит такой файл уже существует и симлинк туда кинуть нельзя
# значит такой файл уже существует и симлинк туда кинуть нельзя
# Для таких файлов я сделал каталог shit
# Я не уверен надо ли писать "config.lib.file.mkOutOfStoreSymlink"

View file

@ -13,7 +13,7 @@
# Плюс это https://github.com/ohmyzsh/ohmyzsh/wiki/Cheatsheet
shellAliases = let
flakeDir = "~/nixos-private-dots";
flakeDir = "~/nixos_dots";
in {
rbs = "sudo nixos-rebuild switch --impure --flake ${flakeDir}"; # Применить новый конфиг сразу
rbb = "sudo nixos-rebuild boot --impure --flake ${flakeDir}"; # Применить новый конфиг после ребута пк
@ -21,8 +21,13 @@
# Можно назвать аналогом "sudo pacman -Su", не "Syu", репу не обновляет
upg = "sudo nixos-rebuild switch --impure --upgrade --flake ${flakeDir}"; # Обновить пакеты, но не репозиторий во fleke.lock
# Возможно это аналог "sudo pacman -Sy". Обновить репозиторий, чтоб потом на него обновиться? Пакеты не обновляет
upd = "nix flake update ${flakeDir}"; # Обновляет flake.lock на последние коммиты с гитхаба?
# Обновить все flake inputs до последних версий. Возможно это аналог "sudo pacman -Sy" на Arch Linux
# Если после upd дописать название инпута из flake.nix, то обновится только указанный инпут
# Например `upd nixpkgs2` для обновления анстабле репы
upd = "sudo nix flake update --flake ${flakeDir}";
# Garbage collector. Удалить все не используемые пакеты (например после обновы)
grb = "sudo nix-collect-garbage -d";
pkgs = "nvim ${flakeDir}/nixos/packages.nix";
@ -32,64 +37,62 @@
t = "timer";
r = "ranger";
ff = "fastfetch";
g = "gitui";
f = "fastfetch";
yt = "cd /mnt/backups/Media/yt-dlp"; # Конфиги для бекапа YouTube
qb = "cd /mnt/backups/Media/Music/Qobuz/qdl"; # Бекапить музыку с Qobuz
html = "python3 /mnt/backups/html-library/generate_gallery.py --path"; # Html image gallery
pyenva = "nix-shell --run zsh /home/urec/nixos-private-dots/modules/home-manager/pyenv-shell.nix";
pyenva = "nix-shell --run zsh ${flakeDir}/modules/home-manager/pyenv-shell.nix";
nekoray = "sudo appimage-run /home/urec/Downloads/nekoray-3.26-2023-12-09-linux-x64.AppImage";
};
history = {
ignoreAllDups = true; # Удалять дубликаты из истории
ignoreSpace = true; # Не сохранять команду в истории, если перед ней стоит пробел
share = false; # Не синхронизировать историю в разных сессиях
};
# Environment variables that will be set for zsh session.
sessionVariables = {
HISTORY_SUBSTRING_SEARCH_FUZZY = "не работает блять"; # Нечёткий поиск для стрелок вверх/вниз.
};
# sessionVariables = {
# };
# Extra commands that should be added to .zshrc
initExtra = ''
source ${pkgs.zsh-you-should-use}/share/zsh/plugins/you-should-use/you-should-use.plugin.zsh
'';
historySubstringSearch.enable = true; # Чтоб вверх/вниз учитывал уже написанную команду
historySubstringSearch = {
enable = true; # Чтоб вверх/вниз учитывал уже написанную команду
searchUpKey = [
"^[[A"
"$terminfo[kcuu1]"
];
searchDownKey = [
"^[[B"
"$terminfo[kcud1]"
];
};
oh-my-zsh = { # https://github.com/ohmyzsh/ohmyzsh
enable = true;
plugins = [ # Комментирую то, в надобности чего не уверен, но показалось интересным. Можно удалить
# "alias-finder" # Напомнит, если у написанной команды есть алиас (нет, так что заменил пакетом)
"aliases" # "als" в терминале покажет все алиасы (нет). Можно добавить слово для фильтрации
# "aliases" # "als" в терминале покажет все алиасы (нет). Можно добавить слово для фильтрации
# "autoenv" # If a directory contains an .env file, it will automatically be executed when you cd into it (нет)
"bgnotify" # Оповещения для долгих комманд. Make sure you have "notify-send" or "kdialog" installed
# "bgnotify" # Оповещения для долгих комманд. Make sure you have "notify-send" or "kdialog" installed. Хуета. По кд булькает
"colored-man-pages" # Adds colors to man pages
#"command-not-found" # Скажет какой пакет скачать, если команда не найдена
"copypath" # В терминале "copypath" скопирует нынешний абсолютный путь. Можно "copypath файл или дироктория"
"dirhistory" # Лютая имба https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/dirhistory
"extract" # В терминале "extract filename" чтоб разархивировать файл. Одна команда на все архивы
"fzf" # https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/fzf
#"git" # Git aliases https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git
# "gitignore" # Use https://gitignore.io from the command line
#"golang" # Completions and aliases for golang
# "gpg-agent" # Enables GPG's gpg-agent if it is not running. Хз что это значит, мб пригодится
"httpie" # Completion for HTTPie, a command line HTTP client, a friendlier cURL replacement.
# "httpie" # Completion for HTTPie, a command line HTTP client, a friendlier cURL replacement.
# "isodate" # Completion for the ISO 8601, as well as some aliases for common Date commands.
# "kitty" # Aliases for kitty terminal
# "mise" # dev tools, env vars, task runner https://github.com/jdx/mise
# "npm" # Completion and aliases for npm
# "nvm" # Autocompletions for nvm — a Node.js version manager
# "pass" # Completion for the pass password manager
# "pip" # Completion for pip, the Python package manager
# "podman" # Autocompletion and aliases for podman.
#"python" # Aliases for useful Python commands
"rust" # Completion for rustc, rustup and cargo
"safe-paste" # Preventing any code from running while pasting, so you have a chance to review what was pasted
# "safe-paste" # Preventing any code from running while pasting, so you have a chance to review what was pasted
"ssh-agent" # Автостарт ssh-agent. Хз надо ли настраивать и если да, то как
# "starship" # А надо ли оно? Я для starship написал отдельно вкл интеграции в его файле настроек
# "systemadmin" # Adds a series of aliases and functions which make a System Administrator's life easier
# "systemd" # Many useful aliases for systemd
"timer" # Показывает время выполнения команды
"universalarchive" # Run "ua <format> <files>"" to compress <files> into an archive file using <format>
# "vi-mode" # https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/vi-mode
@ -99,14 +102,14 @@
];
extraConfig = ''
zstyle :omz:plugins:ssh-agent identities git-git.urec56.ru echoapps_gitlab_mail@urec56.ru wyrenereli_github
zstyle :omz:plugins:ssh-agent identities git-git.urec56.ru echoapps_gitlab_mail@urec56.ru wyrenereli_github urec56_github
'';
};
};
home.packages = with pkgs; [
zsh-autoenv # Плагина autoenv в oh-my-zsh не работает. Мб этот заработает
zsh-you-should-use # Напомнит, если у написанной команды есть алиас
# zsh-you-should-use # Напомнит, если у написанной команды есть алиас
zsh-nix-shell # zsh plugin that lets you use zsh in nix-shell shell
];
}
}

View file

@ -8,17 +8,14 @@
# Ниже настройки для основного монитора. Мб вместе с --primary надо
# И настройки для второго (правого) монитора
extraConfigEarly = ''
xrandr --output DisplayPort-2 --mode 2560x1440 --rate 144 --primary
xrandr --output DisplayPort-0 --mode 2560x1440 --rate 144 --left-of DisplayPort-2
xrandr --output Virtual-1 --mode 1920x1080 --rate 60
'';
# Эти команды выполняются в конце bspwmrc
extraConfig = ''
polybar --reload bspwm &
polybar --reload tray &
# for m in $(polybar --list-monitors | cut -d":" -f1); do
# MONITOR=$m polybar --reload bottom &
# done
for m in $(polybar --list-monitors | cut -d":" -f1); do
MONITOR=$m polybar --reload bspwm &
done
'';
startupPrograms = [
@ -27,15 +24,14 @@
"nm-applet"
"ksnip"
# "nekoray"
"obsidian"
"io.github.alainm23.planify"
# "spice-vdagent" # Для виртуалки
# "obsidian"
# "io.github.alainm23.planify"
"spice-vdagent" # На виртуалке раскомментить
# "discord"
"firefox"
"librewolf"
# "firefox"
# "librewolf"
];
monitors = let
workspaces = [ "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"];
in {
@ -66,7 +62,8 @@
state = "floating";
};
in { # А тут правила окон
"Screenkey" = { manage = false; };
# "Screenkey" = { manage = false; };
# "Screenkey" = floating;
"gcolor3" = floating;
"obs" = floating;
"steam" = floating;
@ -82,15 +79,10 @@
"qt6ct" = floating;
"ksnip" = floating1600x900;
# "ark" = floating1200x800; # Удалил, чтоб blowjob на экран не выдавало
"file-roller" = floating1200x800;
"file-roller" = floating;
"floating-terminal" = floating1200x800;
"pavucontrol" = floating900x600;
# blueman-манагер надо флоатинг
"discord" = { monitor = "^2"; desktop = "3"; };
"firefox" = { monitor = "^1"; desktop = "2"; };
"librewolf" = { monitor = "^1"; desktop = "1"; };
"obsidian" = { monitor = "^2"; desktop = "2"; };
"io.github.alainm23.planify" = { monitor = "^2"; desktop = "1"; };
};
settings = {

View file

@ -231,7 +231,7 @@ in { # Статус бар внизу
};
"bar/bspwm" = {
monitor = "DisplayPort-0";
monitor = "\${env:MONITOR:}";
bottom = true;
fixed-center = true;
@ -254,7 +254,7 @@ in { # Статус бар внизу
modules-left = "power cpu memory";
modules-center = "bspwm title";
modules-right = "alsa xkeyboard rofi time";
modules-right = "alsa tray xkeyboard rofi time";
wm-restack = "bspwm";

View file

@ -173,11 +173,11 @@ in {
# Explorer. Thunar file manager
super + e
dolphin
thunar
# IDE, text editor
super + i
code
codium
# Monitor of resources (btop)
super + m

View file

@ -1,9 +1,9 @@
{
imports = [
# ./env.nix # Мб не надо, ибо редачу через home.nix?
./filesystems.nix
# ./filesystems.nix # На виртуалке закомментить
./hardware.nix
./hibernate.nix
# ./hibernate.nix # На виртуалке закомментить
./locale.nix
./network.nix
./sound.nix

View file

@ -4,7 +4,7 @@
{ pkgs, ... }: {
hardware = { # Параметры для 24.05 и unstable могут сильно отличаться
amdgpu = {
opencl.enable = true; # # Enable OpenCL support using ROCM runtime library.
opencl.enable = true; # Enable OpenCL support using ROCM runtime library.
# amdvlk = { # Гавно лаганое, лучше radv юзать (radeon vulkan)
# enable = true; # Enable AMDVLK Vulkan driver.
# support32Bit.enable = true; # Enable 32-bit driver support.
@ -46,9 +46,20 @@
# HIP
# Most software has the HIP libraries hard-coded. You can work around it on NixOS by using:
# systemd.tmpfiles.rules = [
# systemd.tmpfiles.rules = [ # Legacy
# "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
# ];
systemd.tmpfiles.rules = let
rocmEnv = pkgs.symlinkJoin {
name = "rocm-combined";
paths = with pkgs.rocmPackages; [
rocblas
hipblas
clr
];
}; in [
"L+ /opt/rocm - - - - ${rocmEnv}"
];
boot.initrd.kernelModules = [ "amdgpu" ]; # Мб не обязательно

View file

@ -23,25 +23,21 @@
table.insert (default_access.rules,{
matches = {
{
{ "application.process.binary", "=", ".Discord-wrapped" }
},
{
{ "application.process.binary", "=", "chromium" }
},
{
{ "application.process.binary", "=", "librewolf" }
},
{
{ "application.process.binary", "=", "firefox" }
},
{
{ "application.process.binary", "=", "steam" }
},
{
{ "application.process.binary", "=", ".telegram-desktop-wrapped" }
{ "application.process.binary", "=", "*" }
}
},
default_permissions = "rx",
default_permissions = "r-x",
})
table.insert (default_access.rules,{
matches = {
{
{ "application.process.binary", "=", ".pavucontrol-wrapped" }
},
{
{ "application.process.binary", "=", ".easyeffects-wrapped" }
}
},
default_permissions = "rwx",
})
'';
};
@ -57,6 +53,7 @@
};
# Ниже настройки для минимальной задержки в играх (например osu!stable через wine)
# quantum — устанавливает размер буфера (чем меньше значение, тем ниже задержка, но выше нагрузка на процессор).
# Можно посчитать теоретическую задержку в секундах, поделив quantum на rate (48/48000 будет 1мс)
# Если со звуком есть проблемы (щелчки, прерывания), попробуйте увеличить значение (64, 128, 256) или просто удалить эту настройку
# По умолчанию я закомментировал настройку, чтоб у людей не было проблем
# "92-low-latency" = {
@ -66,4 +63,4 @@
# };
};
};
}
}

View file

@ -23,8 +23,8 @@
# Ширина символов одинаковая
monospace = { # default = DejaVu Sans Mono
package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];};
name = "JetBrainsMono Nerd Font Mono";
package = pkgs.nerd-fonts.jetbrains-mono;
name = "JetBrainsMonoNL Nerd Font Mono";
};
emoji = { # default = Noto Color Emoji
@ -34,7 +34,7 @@
# Без засечек
sansSerif = { # default = DejaVu Sans
package = pkgs.nerdfonts.override {fonts = ["Noto"];};
package = pkgs.nerd-fonts.noto;
name = "NotoSans Nerd Font";
};
@ -63,17 +63,16 @@
};
##################################################
## Хули блять у всех работают темы для qt ##
## Один я далбаёб проебал 3 дня ##
## Прочитал весь код ебаного stylix ##
## И нихуя не работает блять ##
## Так что поставлю руками грувбокс через qtct ##
##################################################
###################################################
## Тема qt через stylix у меня не работает ##
## Хотя в видео у других людей всё менялось ##
## Приходится руками ставить грувбокс через qtct ##
###################################################
# https://discourse.nixos.org/t/guide-to-installing-qt-theme/35523/2
qt = {
enable = true;
style = "kvantum";
platformTheme = "qt5ct";
};
}
}

View file

@ -35,15 +35,16 @@
# <target type='virtio' name='org.qemu.guest_agent.0'/>
# </channel>
# services = {
# openssh.enable = true; # Это ставится на виртуалку, чтоб к ней конект по ssh работал.
# spice-vdagentd.enable = true; # Clipboard sharing
# qemuGuest = {
# enable = true; # Fix resolution
# package = pkgs.qemu_full;
# };
# # Ниже я не включаю
# # spice-webdavd.enable = true; # VirtFS alternative for directory sharing
# };
# На виртуалке надо раскомментить
services = {
openssh.enable = true; # Это ставится на виртуалку, чтоб к ней конект по ssh работал.
spice-vdagentd.enable = true; # Clipboard sharing
qemuGuest = {
enable = true; # Fix resolution
package = pkgs.qemu_full;
};
# Ниже я не включаю
# spice-webdavd.enable = true; # VirtFS alternative for directory sharing
};
}

View file

@ -1,8 +1,3 @@
# Не совсем понял как менять тему в sddm. Но мне оно не надо. Оставлю ссылки
# https://www.reddit.com/r/NixOS/comments/14sb6s2/sddm_themes_finally_did_a_dumb_workaround/
# https://www.reddit.com/r/NixOS/comments/14dlvbr/sddm_theme/
{ pkgs, ... }: {
services.displayManager = {
@ -36,17 +31,34 @@
i3.enable = true; # i3-gaps доступен в стоке в новых версиях
};
# Fully disable DPMS and screen blanking
config = ''
Section "Extensions"
Option "DPMS" "false"
EndSection
Section "ServerFlags"
Option "BlankTime" "0"
EndSection
'';
xkb = {
layout = "us,ru";
variant = "";
options = "grp:caps_toggle"; # Менять язык на CapsLock
# На виртуалке удалить caps_toggle
options = "grp:alt_shift_toggle"; # Менять язык на alt + shift
};
displayManager.sessionCommands = ''
xsetroot -cursor_name left_ptr
'';
# Мб видеодрайвер можно не указывать
# https://discourse.nixos.org/t/amd-gpu-optimal-settings/27648/3
# videoDrivers = [ "nvidia" ]; # https://nixos.wiki/wiki/Nvidia
videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU
deviceSection = ''Option "TearFree" "True"'';
# На виртуалке надо закомментить
# videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU
# deviceSection = ''Option "TearFree" "True"'';
};
}

View file

@ -2,7 +2,7 @@
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ pkgs, inputs, ... }:
{ pkgs, pkgs2, spkgs, inputs, ... }:
let
username = "urec";
@ -46,14 +46,17 @@ in {
isNormalUser = true;
description = username;
extraGroups = [ "networkmanager" "wheel" "input" "libvirtd" "storage" "docker" "video" ];
# packages = with pkgs; [];
# packages = with pkgs; [
# clang-tools
# ];
};
};
home-manager = {
# also pass inputs to home-manager modules
useGlobalPkgs = true;
extraSpecialArgs = { inherit inputs; };
useUserPackages = true;
extraSpecialArgs = { inherit spkgs; inherit pkgs2; inherit inputs; };
users.${username} = import ./home.nix;
};
@ -64,14 +67,23 @@ in {
xdg.portal = {
enable = true;
configPackages = with pkgs; [
xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде
xdg-desktop-portal
# kdePackages.xdg-desktop-portal-kde
# xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде
];
extraPortals = with pkgs; [
xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде
xdg-desktop-portal
# kdePackages.xdg-desktop-portal-kde
# xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде
];
};
nix.settings.experimental-features = ["nix-command" "flakes"];
nix.settings = {
experimental-features = ["nix-command" "flakes"];
# For nix-gaming
substituters = ["https://nix-gaming.cachix.org"];
trusted-public-keys = ["nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="];
};
system.stateVersion = "24.05"; # Don't change it

View file

@ -19,6 +19,7 @@
#vscode # Мб надо в home.packages писать, чтоб расширения ставились без рута
#jetbrains-toolbox # Мб надо через home.packages писать
jetbrains.pycharm-professional
jetbrains.goland
vscodium
];
@ -34,6 +35,7 @@
#NIX_LD_LIBRARY_PATH = "/run/current-system/sw/share/nix-ld/lib";
#NIX_LD = "/run/current-system/sw/share/nix-ld/lib/ld.so";
LD_LIBRARY_PATH = "/run/current-system/sw/share/nix-ld/lib";
PATH = "$PATH:${config.home.homeDirectory}/go/bin";
};
stateVersion = "24.05"; # Don't change it
@ -42,8 +44,8 @@
gtk = lib.mkIf (pkgs.stdenv.hostPlatform.isLinux) {
# enable = true;
iconTheme = {
name = "Gruvbox-Plus-Dark"; # Имя каталога в /usr/share/icons/
package = pkgs.gruvbox-plus-icons; # Пакет иконок
name = "Papirus-Dark"; # Имя каталога в /usr/share/icons/
# package = pkgs.papirus-icon-theme; # Пакет иконок
};
};
@ -52,6 +54,11 @@
vscode.enable = false; # Руками ставлю. Не нравится stylix вариант
firefox.enable = false; # Руками ставлю и бекаплю каталог браузера
};
# iconTheme = {
# enable = true;
# package = pkgs.papirus-icon-theme;
# dark = "Papirus-Dark";
# };
};
##############################################

View file

@ -1,4 +1,4 @@
{ pkgs, ... }: {
{ pkgs, pkgs2, spkgs, inputs, ... }: {
# https://nixos.wiki/wiki/Fonts
fonts.packages = with pkgs; [
@ -7,7 +7,9 @@
noto-fonts-cjk-sans # Отображение иероглифов. Версия без засечек
noto-fonts-color-emoji
noto-fonts-monochrome-emoji
(nerdfonts.override {fonts = ["JetBrainsMono" "Noto" "CascadiaCode"];})
nerd-fonts.jetbrains-mono
nerd-fonts.noto
nerd-fonts.caskaydia-mono
carlito # Совместим с Calibri, разработан как его свободная альтернатива. Без засечек
terminus_font
inconsolata
@ -43,10 +45,49 @@
# fwupd.enable = true; # DBus service that allows applications to update firmware
# greenclip.enable = true; # https://github.com/erebe/greenclip (использую clipmenu вместо этого)
# fstrim.enable = true; # Чистит ssd для норм производительности. Пока не пользуюсь
# archisteamfarm = {}; # Фарм карточек стима афк. Простро раскомментить мало, надо настроить
# archisteamfarm = {}; # Фарм карточек стима афк. Просто раскомментить мало, надо настроить
ollama = let
pinPackage =
{
name,
commit,
sha256,
}:
(import (builtins.fetchTarball {
inherit sha256;
url = "https://github.com/NixOS/nixpkgs/archive/${commit}.tar.gz";
}) { system = pkgs.system; }).${name};
in {
enable = true;
acceleration = "rocm";
# Ollama Port 11434/tcp
host = "0.0.0.0";
port = 11434;
openFirewall = true;
# pin ollama v0.5.7 until nixpkgs update
# https://github.com/NixOS/nixpkgs/issues/375359
package = (pinPackage {
name = "ollama";
commit = "d0169965cf1ce1cd68e50a63eabff7c8b8959743";
sha256 = "sha256:1hh0p0p42yqrm69kqlxwzx30m7i7xqw9m8f224i3bm6wsj4dxm05";
});
rocmOverrideGfx = "10.3.0";
# additional environment variables
# environmentVariables = { HSA_OVERRIDE_GFX_VERSION="10.3.0"; };
};
};
programs = {
nix-ld = { # Позволяет нормально юзать либы для венва и тп
enable = true;
libraries = with pkgs; [
gcc
libGL
glib
libGLU.out
stdenv.cc.cc
];
};
zsh.enable = true;
mtr.enable = true; # Объединяет функции утилит traceroute и ping
gnupg.agent = {
@ -92,15 +133,6 @@
# Я хз надо ли оно мне. https://github.com/ValveSoftware/gamescope
# Подробносни тут https://ventureo.codeberg.page/source/linux-gaming.html#gamescope
gamescope.enable = true;
nix-ld = { # Позволяет нормально юзать либы для венва и тп
enable = true;
libraries = with pkgs; [
gcc
libGL
glib
libGLU.out
];
};
};
environment.systemPackages = with pkgs; [
@ -114,54 +146,85 @@
# Но я хочу на всю систему
# Python
python3 # Питухон ласт версии
# pylyzer # Fast static code analyzer & language server for Python
# ruff # Extremely fast Python linter
python3Full # Python last version
python3Packages.pip # Python package manager (nvim его не видит)
python3Packages.debugpy # Debug Adapter Protocol for Python
pyright # Python LSP
ruff # Extremely fast Python linter
# C
gcc # Компилятор C
rocmPackages.llvm.clang # Компилятор C
gnumake # Компилятор?
ccls # C lsp
# C/C++
clang-tools # Clangd? LSP
ccls # C/C++ LSP
clang # Компилятор
gcc # Компилятор
glibc # GNU C Library
gnumake # ?
cmake-language-server # CMake LSP
cmake # ?
# bear # Tool that generates a compilation database for clang tooling
# boost # Collection of C++ libraries
# Rust
rustup # Управление версиями языка Rust
rust-analyzer # Rust lsp
rustup # Управление версиями языка Rust (rustup default stable)
rust-analyzer # Rust LSP (rustup component add rust-analyzer)
# Golang
go # Go programming language
gopls # Golang lsp
templ # HTML SSR
# Frontend
# vscode-langservers-extracted # HTML/CSS/JSON/ESLint lsp
# typescript-language-server # JS/TS lsp
# htmx-lsp # HTMX lsp
# tailwindcss-language-server # Tailwind CSS lsp
# Мб emmet добавить потом. Но все lsp для него нонейм
gopls # Go LSP
delve # Go debugger
templ # A language for writing HTML user interfaces in Go.
golangci-lint # Fast linters Runner for Go
# Nix
nixd # Nix lsp
nixd # Nix LSP. Нет в mason
# alejandra # Nix formatter. Usage: alejandra file.nix
# Shell
shellcheck # Проверка shell скриптов на ошибки
bash-language-server # Bash lsp
# Lua
lua5_1 # Scripting language
luajit # JIT compiler for Lua
luajitPackages.luarocks # Package manager for lua
lua-language-server # Lua LSP
stylua # Lua formatter
# Database
# sqls # SQL lsp
# postgres-lsp # Postgres lsp
# Shell/Bash
bash-language-server # Basp LSP
shellcheck # Проверка shell скриптов на ошибки
shfmt # Shell parser and formatter
# SQL
sqls # SQL LSP
postgres-lsp # Postgres SQL
sqlfluff # SQL linter
# sql-formatter # SQL formatter
# Frontend
nodejs_23 # For npm
htmx-lsp # HTMX lsp
emmet-language-server # Emmet.io LSP
vscode-langservers-extracted # HTML/CSS/JSON/ESLint LSP
typescript-language-server # TypeScript LSP
tailwindcss-language-server # Tailwind LSP
# tailwindcss
# Protobuf
protols # LSP
# buf # LSP (крашит некоторые проекты в нвиме)
protobuf
protoc-gen-go
protoc-gen-go-grpc
# Other
hugo # Для моего блога
# lua-language-server # Lua lsp
# marksman # Markdown lsp
# taplo # TOML lsp
# vim-language-server # VimScript lsp
# yaml-language-server # YAML lsp
# dockerfile-language-server-nodejs # Dockerfiles
# zls # Zig lsp
# lemminx # XML lsp (юзает java)
yaml-language-server # YAML LSP
taplo # TOML LSP
vim-language-server # VimScript LSP
go-migrate # Database migrations. CLI and Golang library
postman # API Development Environment
# For nvim
tree-sitter # For nvim
ripgrep # For nvim
fd # For nvim
############
## Архивы ##
@ -178,14 +241,14 @@
## Terminal ##
##############
mdadm
cryptsetup
openssl
mdadm # Для создания рейд массивов
cryptsetup # Для шифрования дисков
pkgs2.openssl
wget
curl
git
xclip # Для работы буфера обмена
ffmpeg_7 # Обработка видео. Нужен всегда и везде
ffmpeg_7-full # Обработка видео. Нужен всегда и везде
imagemagick # Обработка изображений. Мб тоже нужен всегда
vips # В 4 раза быстрее imagemagick?
tree # Структура файлов в терминале
@ -202,10 +265,14 @@
# zscroll # A text scroller for use with panels and shells https://github.com/noctuid/zscroll
tokei # Количество строк кода на разных языках в каталоге
pass # Менеджер паролей в терминале
nvtopPackages.full # Htop like gpu monitor
amdgpu_top # Tool to display AMD GPU usage
btop # Монитор ресурсов в терминале
rocmPackages.rocm-smi # Чтоб в btop было gpu (не работает)
# rocmPackages_5.rocm-smi # Старая версия пакета выше. Хз какой надо
yt-dlp # Скачивать и смотреть медиа с разных сайтов
rocmPackages.rocblas # Для работы hip?
rocmPackages.hipblas # Для работы hip?
rocmPackages.clr # Для работы hip?
pkgs2.yt-dlp # Скачивать и смотреть медиа с разных сайтов
tasktimer # TUI task timer. Можно несколько таймеров с описанием запустить. В терминал tt
timer # A "sleep" with progress. Таймер на пельмени "timer 5m"
libqalculate # Advanced calculator library
@ -219,9 +286,10 @@
pwgen # Генератор паролей
lm_sensors # Сенсоры
httpie # interacting with APIs & HTTP servers
# mkvtoolnix-cli # Cross-platform tools for Matroska
# jq # Cli JSON processor
jq # Cli JSON processor
miller # Like awk, sed, cut, join, and sort for data formats such as CSV, TSV, JSON, JSON Lines, and positionally-indexed
# htmlq # Как jq, но для html. Извлекать конкретные элементы из html
# mkvtoolnix-cli # Cross-platform tools for Matroska
alacritty # Минималистичный терминал. Основной у меня
# kitty # Самый быстрый протокол отображения медиа, но ssh через жопу работает
@ -250,7 +318,6 @@
librewolf
firefox
chromium
# ff2mpv # Открывать видео из браузера в mpv плеере
lynx # Текстовый браузер в терминале. Без картинок
##########
@ -263,7 +330,7 @@
hunspell # Проверка орфографии для libreoffice
hunspellDicts.ru_RU # Словарь для проверки орфографии
hunspellDicts.en_US # Словарь для проверки орфографии
calibre # Работа с ebook. Иногда даёт thumbnail в файловом менеджере
spkgs.calibre # Работа с ebook. Иногда даёт thumbnail в файловом менеджере
drawio # Desktop application for creating diagrams. Вроде даёт thumbnail в ranger
xournalpp # Xournal++ is a handwriting Notetaking software with PDF annotation support
@ -277,15 +344,15 @@
xfce.exo # Мб надо, чтоб терминал открывать в каталоге
ffmpegthumbnailer # A lightweight video thumbnailer
gnome-epub-thumbnailer # Thumbnailer for EPub and MOBI books
nufraw-thumbnailer # Thumbnailer for .raw images from digital cameras
# nufraw-thumbnailer # Thumbnailer for .raw images from digital cameras
# mcomix # Comic book reader and image viewer. Thumbnailer for .crb comicbook archives (требует mupdf, который крашит систему)
f3d # Fast and minimalist 3D viewer using VTK. Thumbnailer for 3D files, including glTF, stl, step, ply, obj, fbx.
openscad # 3D model previews (stl, off, dxf, scad, csg). Этот именно для ranger, но мб пригодится и в других местах
kdePackages.dolphin # Долфин и софт для него
kdePackages.ffmpegthumbs
kdePackages.kdegraphics-thumbnailers
kdePackages.filelight
pkgs2.kdePackages.dolphin # Долфин и софт для него
pkgs2.kdePackages.ffmpegthumbs
pkgs2.kdePackages.kdegraphics-thumbnailers
pkgs2.kdePackages.filelight
##################
## File support ##
@ -296,12 +363,14 @@
kdePackages.qtsvg # SVG support
kdePackages.karchive # Plugin for Krita and OpenRaster images
webp-pixbuf-loader # .webp support (what's this?)
gdk-pixbuf.dev # Library for image loading and manipulation
libwebp # .webp support
libavif # AVIF format support
libheif # HEIF format support
# libheif # HEIF format support
libgsf # .odf support
libjxl # JPEG-XL format support
libraw # RAW format support
librsvg # Small library to render SVG images to Cairo surfaces
jxrlib # JPEG XR image support
poppler # PDF support
freetype # Font rendering engine
@ -327,18 +396,21 @@
## Social ##
############
(discord.override { # Discord
(pkgs2.discord.override { # Discord
# withOpenASAR = true; # Оптимизатор дискрода
withVencord = true; # Имба плагины # TODO: Настройки надо сделать декларативными
})
telegram-desktop
pkgs2.telegram-desktop
# revolt-desktop # FOSS аналог дискорда
###########
## Games ##
###########
# Чтоб не компилить wine, надо закомментить и сделать ребилд без игры.
# Потом раскомментить и сделать ребилд с игрой
# inputs.nix-gaming.packages.${pkgs.system}.osu-stable # osu!stable from nix-gaming
# steam # Мб не надо сюда писать, раз через programs.steam редачу
# heroic # A Native GOG, Epic, and Amazon Games Launcher for Linux, Windows and Mac
# lutris # Запускать игры не из стима
@ -348,8 +420,7 @@
steam-run # На всякий случай
mangohud # Фпс и нагрузку на пк показывает в играх
gamemode # Оптимизации линуха и игр
wineWowPackages.stable # support both 32- and 64-bit applications
wineWowPackages.stableFull
wineWowPackages.stableFull # support both 32- and 64-bit applications
# wineWowPackages.staging # Можно назвать бета версией вайна
winetricks # winetricks (all versions)
# wineWowPackages.waylandFull # native wayland support (unstable)
@ -377,10 +448,12 @@
## IDE ##
#########
neovim # Мб не надо писать, он у меня необычный, через nixvim flake
# vscode # Надо в home.packages писать, чтоб расширения ставились без рута
jetbrains-toolbox # Надо в home.packages писать. https://nixos.wiki/wiki/Jetbrains_Tools
helix # A Kakoune / Neovim inspired editor, written in Rust.
neovim
# Закинул в home.nix
# vscode
# jetbrains-toolbox
# zed-editor
###########
## Icons ##
@ -391,6 +464,7 @@
kdePackages.breeze-icons # qt6
papirus-icon-theme
material-icons
gruvbox-plus-icons
############
## Vulkan ##
@ -423,7 +497,7 @@
vial # GUI для qmk, если клавиатура поддерживает
fontconfig
zlib
google-fonts
# google-fonts
libva-utils # Проверяет работоспособность VAAPI?
clinfo # Проверяет работоспособность OpenCL?
libsecret # Хранить и получать аккаунты у приложений. Например для jetbrains toolbox
@ -433,8 +507,7 @@
weston # Для запуска wayland only apps на x11 (ещё есть cage, но он крашит систему при ребилде)
nix-index # Проверить как отображаются некоторые пакеты(например libz.so.1). Запускается nix-index, а потом nix-locate --top-level <Название пакета>
docker
docker-compose
# Для работы некоторых тем sddm
kdePackages.qt5compat
libsForQt5.qt5.qtgraphicaleffects

6
nvim/.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
tags
test.sh
.luarc.json
nvim
spell/

6
nvim/.stylua.toml Normal file
View file

@ -0,0 +1,6 @@
column_width = 160
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 4
quote_style = "AutoPreferSingle"
call_parentheses = "None"

259
nvim/README.md Normal file
View file

@ -0,0 +1,259 @@
[kickstart.nvim](https://github.com/nvim-lua/kickstart.nvim) fork
Тут будет лежать мой конфиг nvim. Я хочу, чтоб он был отдельно от nix конфигов, чтоб не надо было ничего ребилдить.
Первый запуск конфига может быть долгим. Не прерывай этот процесс, пока не появится меню плагин манагера
Для выбора варианта из автокомплита надо жать ctrl+y, а не enter. Это можно исправить в конфиге, но я решил оставить так, как советует разраб kickstart.nvim, потому что я часто был в ситуации, когда готовая ide даёт мне вариант, но он мне не нужен, я уже написал свой, и мне надо перейти на новую строку, я жму enter и получаю комплит, который мне не нужен, мне новая строка нужна была.
Вкладки как в vscode я решил не делать, тут есть более удобный инструмент для этого. Например два раза нажать пробел в нормал моде, откроется меню буферов, тоесть файлов, которые в данный момент открыты. Отображаются они в порядке последнего открытия. Ныне открытый файл там не отображается. Это аналог ctrl+tab в vscode. Можно легко и быстро переключаться между "вкладками". Если надо искать что-то среди файлов проекта, то можно нажать пробел sf, от слов search files. В целом пробел+s это поиск чего-то. Подсказки на экране скажут поиск чего будет происходить. Grep поиск это поиск по содержимому всех файлов проекта.
https://medium.com/@jogarcia/you-dont-need-tabs-in-neovim-c6ba5ee44e3e
Если будут проблемы с сессиями, то можно написать `:SessionDelete`. Для выхода из проекта лучше использовать `:qa`, а не `:q`, чтоб закрыть все буферы и не ломать сессии
Конфиг сделан для NixOS. Я не знаю работает ли он в других дистрибутивах.
Сайт с топами плагинов и тем - https://dotfyle.com/neovim/colorscheme/top
LSP list - https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt
Логи для форматтеров `~/.local/state/nvim/conform.log`
Логи для lsp `~/.local/state/nvim/lsp.log`
> ⚠️ **Warning**: Некоторых lsp в mason не существует и их надо качать отдельно. Или они не работают в NixOS, если их качать через mason. Такие lsp я настроил отдельно и скачал как пакет. Из конфига mason я их удалил. **Не скачай случайно эти lsp через mason руками, когда они уже настроены как отдельный пакет**. Это же касается форматтеров и линтеров. Их я стараюсь качать как системный пакет, а не через mason.
> ⚠️ **Warning**: Я вообще перестал качать что либо через mason, используя его только как поиск разных инструментов для нужного мне языка. Так что лучше ничего не качать через него.
## Установка
На новом пк руками делаю симлинк в `~/.config/nvim`.
```sh
ln -s ~/nixos-private-dots/nvim ~/.config/nvim
```
### Зависимости
Для работы этого конфига надо установить некоторые пакеты в систему. Часть из них я напишу ниже, часть находится в `packages.nix` в категории `программирование`
Это мне пришлось скачать для работы конфига на NixOS с нужными мне инструментами:
- `neovim`
- `git`
- `unzip`
- `ripgrep`
- `fd`
- `xclip` на X11 или `wl-clipboard` на Wayland
- `tree-sitter`
- `ueberzugpp`
- Любой nerd font
Пакеты для разных языков могут часть меняться, так что ищем в `packages.nix`
Чтоб понять есть ли проблемы с конфигом, может какие-то пакеты отсутствуют, можно запустить `:healthcheck`.
## Изменить в будущем
Сейчас я сделал в стоке везде табуляцию в 4 символа на таб. Не пробелы. Если захочу это исправить и сделать per language настройки, то это можно сделать по разному. Сейчас у меня lsp/formatter сами заменяют табы на пробелы при сохранении файла.
Use `:h ftplugin` together with `:h :setlocal`
В каталоге nvim надо сделать каталог `ftplugin` и в него добавлять файлы `filetype.lua`. Например для python будет `python.lua`. И там можно писать настройки для каждого отдельного языка:
```lua
vim.bo.tabstop = 4 -- size of a hard tabstop (ts).
vim.bo.shiftwidth = 4 -- size of an indentation (sw).
vim.bo.expandtab = true -- always uses spaces instead of tab characters (et).
vim.bo.softtabstop = 4 -- number of spaces a <Tab> counts for. When 0, feature is off (sts)
```
Если не хочется возиться с тонной файлов, то можно добавить это в init.vim (надо переписать для init.lua):
```vim
autocmd BufEnter *.py :setlocal tabstop=4 shiftwidth=4 expandtab
autocmd BufEnter *.js :setlocal tabstop=2 shiftwidth=2 expandtab
```
Per project можно использовать `.editorconfig` файл в корне проекта. Нвим должен работать с его настройками.
## Бинды
Тут будет список биндов, которых нет в стандартном NeoVim
### Мои бинды
Все бинды можно искать прям в neovim, если нажать `Space s k`, тоесть `S`earch `K`eymaps
Я не помню откуда эти бинды, может они есть в стоке, а может нет, но они полезные.
| Bind | Description |
|---------------------|---------------------------------------------------------|
| `K` | Hover documentation |
| `ctrl+o` | Go back |
| `ctrl+i` | Go forward (if you went backwards) |
| `p` | Paste from nvim register |
| `ctrl+shift+v` | Paste from system clipboard |
| `y` | Yank(copy) to nvim register |
| `space y` | Yank(copy) to system clipboard |
| `d` | Delete(copy) to nvim register |
| `space d` | Delete(copy) to system clipboard |
| `alt + up/down/j/k` | Move lines in visual mode |
| `[d` | Go to previous `D`iagnostic message |
| `]d` | Go to next `D`iagnostic message |
| `space e` | Show diagnostic `E`rror message |
| `space q` | Open diagnostic `Q`uickfix |
| `ctrl+l` | Перейти к следующему плейсхолдеру сниппета в insert mod |
Бинды в таблице ниже нажимаются без пробела перед ними. Просто бинд
| Bind | Description | File |
|-----------|----------------------------------------------------------------------------------------------------------------------------------|----------------|
| `esc esc` | Exit terminal mode (Or use `<C-\><C-n>` to exit terminal mode) | settings.lua |
| `esc` | Creal highlights on search when pressing Esc in normal mode | settings.lua |
| `gp` | `G`oto context (`p`arent) | treesitter.lua |
| `gd` | `G`oto `D`efinition | lsp.lua |
| `gr` | `G`oto `R`eferences | lsp.lua |
| `gI` | `G`oto `I`mplementation | lsp.lua |
| `gD` | `G`oto `D`eclaration. This is not Goto Definition, this is Goto Declaration. For example, in C this would take you to the header | lsp.lua |
| `gc` | Toggle Comment from mini-comment plugin | - |
| `\` | Toggle file tree | file-tree.lua |
Перед каждым из биндов в нижней таблице надо нажать `leader`, что есть `space`, пробел.
| Bind | Description | File |
|---------|---------------------------------------------------------------------------------------------------------------------------------------------------|----------------|
| `tt` | `T`oggle `T`erminal | terminal.lua |
| `gta` | `G`o `T`ag `A`dd. Add json tags for struct | golang.lua |
| `gtr` | `G`o `T`ag `R`emove. Remove json tags for struct | golang.lua |
| `gs` | `G`o fill `S`truct | golang.lua |
| `gc` | `G`o fill Switch `C`ase | golang.lua |
| `gp` | `G`o fix `P`lurals (change func foo(b int, a int, r int) -> func foo(b, a, r int)) | golang.lua |
| `ge` | `G`o if `E`rr | golang.lua |
| `gi` | `G`o `I`mports | golang.lua |
| `D` | Type `D`efinition. Jump to the typo of the word under your cursor. | lsp.lua |
| | Useful when you're not sure what type a variable is and you want to see the definition of its *type*, not where it was *defined*. | |
| `ds` | `D`ocument `S`ymbols. Fuzzy find all the symbols in your current document. Symbols are things like variables, funckions, types, etc. | lsp.lua |
| `ws` | `W`orkspace `S`ymbols. Fuzzy find all the symbols in your currend workspace. Similar to document symbols, except searches over you entire project | lsp.lua |
| `rn` | `R`e`n`ame. Rename the variable under your cursor. Most Language Servers support renaming across files, etc. | lsp.lua |
| `ca` | `C`ode `A`ction. Execute a code action, usually your cursor needs to be on top of an error or a suggestion from your LSP for this to activate | lsp.lua |
| `ss` | `S`earch Document `S`ymbols | lsp.lua |
| `sS` | `S`earch `S`elect Telescope | health.lua |
| `sh` | `S`earch `H`elp | health.lua |
| `sk` | `S`earch `K`eymaps | health.lua |
| `sf` | `S`earch `F`iles | health.lua |
| `sw` | `S`earch current `W`ord | health.lua |
| `sg` | `S`earch by `G`rep | health.lua |
| `sd` | `S`earch `D`iagnostics | health.lua |
| `sr` | `S`earch `R`esume | health.lua |
| `s.` | `S`earch Recent Files ("." for repeat) | health.lua |
| `space` | Find existing buffers. Аналог перелючения между вкладками | health.lua |
| `/` | Fuzzily search in current buffer | health.lua |
| `s/` | `S`earch `/` in Open Files. Live Grep in Open Files | health.lua |
| `sn` | `S`earch `N`eovim files. Shortcut for searching your Neovim configuration files | health.lua |
| `st` | `S`earch `T`hemes | health.lua |
| `q` | Open diagnostic `Q`uicfix list | settings.lua |
| `f` | `F`ormat buffer | autoformat.lua |
| `Sd` | `S`ession `D`elete | session.lua |
| `Sc` | `S`ession `C`reate | session.lua |
| `Backspace` | Session restore | session.lua |
### Git
Бинды начинаются с буквы `h`. Типо "Git `H`unk"
Без пробела
| Bind | Description | File |
|------|-------------------------------|--------------|
| `]c` | Jump to next git `C`hange | gitsigns.lua |
| `[c` | Jump to previous git `C`hange | gitsigns.lua |
Visual mode. С пробелом
| Bind | Description | File |
|------|------------------|--------------|
| `hs` | `S`tage git hunk | gitsigns.lua |
| `hr` | `R`eset git hunk | gitsigns.lua |
Normal mode. С пробелом
| Bind | Description | File |
|------|--------------------------------|--------------|
| `hs` | Git `S`tage hunk | gitsigns.lua |
| `hr` | Git `R`eset hunk | gitsigns.lua |
| `hS` | Git `S`tage buffer | gitsigns.lua |
| `hu` | Git `U`ndo stage hunk | gitsigns.lua |
| `hR` | Git `R`eset buffer | gitsigns.lua |
| `hp` | Git `P`review hunk | gitsigns.lua |
| `hb` | Git `B`lame line | gitsigns.lua |
| `hd` | Git `D`iff against index | gitsigns.lua |
| `hD` | Git `D`iff against last commit | gitsigns.lua |
| `td` | `T`oggle git show `B`lame line | gitsigns.lua |
| `tD` | `T`oggle git show `D`eleted | gitsigns.lua |
### Debug
Без пробела
| Bind | Description | File |
|------|--------------------------------|-----------|
| `F5` | Debug: Start/Continue | debug.lua |
| `F1` | Debug: Step Into | debug.lua |
| `F2` | Debug: Step Over | debug.lua |
| `F3` | Debug: Step Out | debug.lua |
| `F7` | Debug: See last session rusult | debug.lua |
С пробелом
| Bind | Description | File |
|------|----------------------------|-----------|
| `b` | Debug: Toggle `B`reakpoint | debug.lua |
| `B` | Debug: Set `B`reakpoint | debug.lua |
## Нюансы работы LSP/Linter/Formatter
Многие LSP в стоке имеют форматтирование кода. Иногда это бесит. Чтоб узнать какие LSP имеют форматирование в открытом в данный момент файле, можно использовать такую команду:
```lua
:lua for _, client in ipairs(vim.lsp.get_active_clients()) do print(client.name, client.server_capabilities.documentFormattingProvider) end
```
Чтоб выключить форматирование у LSP, можно заглянуть в `lsp.lua` и увидеть примеры кода. Например я выключил форматирование у `sqls` везде и у `html` в файлах `templ`. Если у всех выкл, но что-то форматирует, значит форматтер установлен отдельно.
Некоторые LSP/Linter/Formatter не могут просто взять и заработать на каком-то файле. Например для работы `tailwindcss lsp` обязательным условием является `конфиг файл tailwind` в каталоге проекта, иначе ничего не будет работать. Для многих lsp важно находить `root dir`, который определяется по наличию каталога `.git` в проекте, иначе никаких подсказок в коде не будет. Разные инструменты для работы с SQL зачастую требуют делать конект к базе данных, иначе ничего работать не будет. Тоесть с удобством написать тестовый SQL код вне проекта не получится.
Я постарался исправить это там, где возможно. Например мне пришлось использовать `sqls` вместо `postgres_lsp`, чтоб подсказки работали даже вне проекта. Но зачастую придётся создавать проект и настраивать его, чтоб получить полноценный опыт IDE
- `TailwindCSS` требует иметь свой config файл в директории проекта
- `TypeScript LSP` имеет [опциональные настройки](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt#ts_ls)
- `YAML LSP` имеет [опциональные настройки](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt#yamlls)
- `JSON LSP` имеет [опциональные настройки](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt#jsonls)
- `rust-analyzer` имеет много опциональных настроек
- Чтоб `sql` работал внутри `.go` файлов, sql запросы надо писать внутри \`` так `\`. Тоесть внутри \` с пробелом в начале и конце, а не просто строка.
- `sqlfluff` требует иметь `.sqlfluff` в директории проекта. Вот пример конфига:
```toml
[sqlfluff]
# Supported dialects https://docs.sqlfluff.com/en/stable/dialects.html
# Or run 'sqlfluff dialects'
dialect = postgres
# One of [raw|jinja|python|placeholder]
templater = raw
# See https://stackoverflow.com/questions/608196/why-should-i-capitalize-my-sql-keywords-is-there-a-good-reason
[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = upper
[sqlfluff:rules:capitalisation.identifiers]
capitalisation_policy = lower
[sqlfluff:rules:capitalisation.functions]
extended_capitalisation_policy = lower
[sqlfluff:rules:capitalisation.literals]
capitalisation_policy = lower
[sqlfluff:rules:capitalisation.types]
extended_capitalisation_policy = lower
```
## Остальное
Мб потом добавлю сюда используемые плагины и для каких языков оно настроено.
Learn Lua https://learnxinyminutes.com/lua/
After understanding a bit more about Lua, you can use `:help lua-guide` as a reference for how Neovim integrates Lua. (or HTML version): https://neovim.io/doc/user/lua-guide.html
Use "`<space>sh`" to `[s]`earch the `[h]`elp documentation,
If you experience any errors while trying to install kickstart, run `:checkhealth` for more info

24
nvim/doc/kickstart.txt Normal file
View file

@ -0,0 +1,24 @@
================================================================================
INTRODUCTION *kickstart.nvim*
Kickstart.nvim is a project to help you get started on your neovim journey.
*kickstart-is-not*
It is not:
- Complete framework for every plugin under the sun
- Place to add every plugin that could ever be useful
*kickstart-is*
It is:
- Somewhere that has a good start for the most common "IDE" type features:
- autocompletion
- goto-definition
- find references
- fuzzy finding
- and hinting at what more can be done :)
- A place to _kickstart_ your journey.
- You should fork this project and use/modify it so that it matches your
style and preferences. If you don't want to do that, there are probably
other projects that would fit much better for you (and that's great!)!
vim:tw=78:ts=8:ft=help:norl:

4
nvim/ftplugin/nix.lua Normal file
View file

@ -0,0 +1,4 @@
vim.bo.expandtab = true
vim.bo.tabstop = 2
vim.bo.shiftwidth = 2
vim.bo.softtabstop = 2

4
nvim/ftplugin/proto.lua Normal file
View file

@ -0,0 +1,4 @@
vim.bo.expandtab = true
vim.bo.tabstop = 2
vim.bo.shiftwidth = 2
vim.bo.softtabstop = 2

148
nvim/init.lua Normal file
View file

@ -0,0 +1,148 @@
-- [[ Базовые настройки. Не плагины ]]
require 'kickstart.settings'
require 'custom.terminal'
require 'custom.sessions'
-- [[ Install `lazy.nvim` plugin manager ]]
-- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info
-- git clone https://github.com/folke/lazy.nvim.git ~/.local/share/nvim/lazy/lazy.nvim
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
local out = vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath }
if vim.v.shell_error ~= 0 then
error('Error cloning lazy.nvim:\n' .. out)
end
end ---@diagnostic disable-next-line: undefined-field
vim.opt.rtp:prepend(lazypath)
-- [[ Configure and install plugins ]]
--
-- To check the current status of your plugins, run
-- :Lazy
--
-- You can press `?` in this menu for help. Use `:q` to close the window
--
-- To update plugins you can run
-- :Lazy update
--
-- NOTE: Here is where you install your plugins.
require('lazy').setup({
---------------------------------------------
-- Установлены из коробки в kickstart.nvim --
---------------------------------------------
-- Git integration for buffers
require 'kickstart.plugins.gitsigns',
-- Useful plugin to show you pending keybinds.
require 'kickstart.plugins.which-key',
-- Fuzzy Finder (files, lsp, etc)
require 'kickstart.plugins.telescope',
-- LSP Plugins
require 'kickstart.plugins.lsp',
-- Autoformat
require 'kickstart.plugins.autoformat',
-- Autocompletion
require 'kickstart.plugins.completion',
-- Themes
require 'kickstart.plugins.themes',
-- Highlight todo, notes, etc in comments
require 'kickstart.plugins.todo-comments',
-- Collection of various small independent plugins/modules
require 'kickstart.plugins.mini',
-- Highlight, edit, and navigate code
require 'kickstart.plugins.treesitter',
-- Debug your code via Debug Adapter Protocol
require 'kickstart.plugins.debug',
-- Add indentation guides even on blank lines
require 'kickstart.plugins.indent_line',
-- Linting
require 'kickstart.plugins.lint',
-- Autopairs
require 'kickstart.plugins.autopairs',
-- Browse the file system
require 'kickstart.plugins.file-tree',
-------------------------------------
-- Установил руками под свои нужды --
-------------------------------------
-- Supercharge your Rust experience in Neovim
require 'custom.plugins.rust',
-- Feature-Rich Go Plugin for Neovim
require 'custom.plugins.golang',
-- Plugins for git
require 'custom.plugins.git',
-- Plugins for color highlight
require 'custom.plugins.colorizer',
-- Autoformat markdown tables
{
'Kicamon/markdown-table-mode.nvim',
config = function()
require('markdown-table-mode').setup {
filetype = {
'*.md',
},
options = {
insert = true, -- when typing "|"
insert_leave = true, -- when leaving insert
pad_separator_line = false, -- add space in separator line
alig_style = 'default', -- default, left, center, right
},
}
end,
},
-- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
-- This is the easiest way to modularize your config.
--
-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
-- { import = 'custom.plugins' },
--
-- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec`
-- Or use telescope!
-- In normal mode type `<space>sh` then write `lazy.nvim-plugin`
-- you can continue same window with `<space>sr` which resumes last telescope search
}, {
ui = {
-- If you are using a Nerd Font: set icons to an empty table which will use the
-- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table
icons = vim.g.have_nerd_font and {} or {
cmd = '',
config = '🛠',
event = '📅',
ft = '📂',
init = '',
keys = '🗝',
plugin = '🔌',
runtime = '💻',
require = '🌙',
source = '📄',
start = '🚀',
task = '📌',
lazy = '💤 ',
},
},
})
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et

233
nvim/kickstart.md Normal file
View file

@ -0,0 +1,233 @@
# kickstart.nvim
## Introduction
A starting point for Neovim that is:
* Small
* Single-file
* Completely Documented
**NOT** a Neovim distribution, but instead a starting point for your configuration.
## Installation
### Install Neovim
Kickstart.nvim targets *only* the latest
['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest
['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim.
If you are experiencing issues, please make sure you have the latest versions.
### Install External Dependencies
External Requirements:
- Basic utils: `git`, `make`, `unzip`, C Compiler (`gcc`)
- [ripgrep](https://github.com/BurntSushi/ripgrep#installation)
- Clipboard tool (xclip/xsel/win32yank or other depending on platform)
- A [Nerd Font](https://www.nerdfonts.com/): optional, provides various icons
- if you have it set `vim.g.have_nerd_font` in `init.lua` to true
- Language Setup:
- If you want to write Typescript, you need `npm`
- If you want to write Golang, you will need `go`
- etc.
> **NOTE**
> See [Install Recipes](#Install-Recipes) for additional Windows and Linux specific notes
> and quick install snippets
### Install Kickstart
> **NOTE**
> [Backup](#FAQ) your previous configuration (if any exists)
Neovim's configurations are located under the following paths, depending on your OS:
| OS | PATH |
| :- | :--- |
| Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` |
| Windows (cmd)| `%localappdata%\nvim\` |
| Windows (powershell)| `$env:LOCALAPPDATA\nvim\` |
#### Recommended Step
[Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) this repo
so that you have your own copy that you can modify, then install by cloning the
fork to your machine using one of the commands below, depending on your OS.
> **NOTE**
> Your fork's url will be something like this:
> `https://github.com/<your_github_username>/kickstart.nvim.git`
You likely want to remove `lazy-lock.json` from your fork's `.gitignore` file
too - it's ignored in the kickstart repo to make maintenance easier, but it's
[recommmended to track it in version control](https://lazy.folke.io/usage/lockfile).
#### Clone kickstart.nvim
> **NOTE**
> If following the recommended step above (i.e., forking the repo), replace
> `nvim-lua` with `<your_github_username>` in the commands below
<details><summary> Linux and Mac </summary>
```sh
git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim
```
</details>
<details><summary> Windows </summary>
If you're using `cmd.exe`:
```
git clone https://github.com/nvim-lua/kickstart.nvim.git "%localappdata%\nvim"
```
If you're using `powershell.exe`
```
git clone https://github.com/nvim-lua/kickstart.nvim.git "${env:LOCALAPPDATA}\nvim"
```
</details>
### Post Installation
Start Neovim
```sh
nvim
```
That's it! Lazy will install all the plugins you have. Use `:Lazy` to view
current plugin status. Hit `q` to close the window.
Read through the `init.lua` file in your configuration folder for more
information about extending and exploring Neovim. That also includes
examples of adding popularly requested plugins.
### Getting Started
[The Only Video You Need to Get Started with Neovim](https://youtu.be/m8C0Cq9Uv9o)
### FAQ
* What should I do if I already have a pre-existing neovim configuration?
* You should back it up and then delete all associated files.
* This includes your existing init.lua and the neovim files in `~/.local`
which can be deleted with `rm -rf ~/.local/share/nvim/`
* Can I keep my existing configuration in parallel to kickstart?
* Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME`
to maintain multiple configurations. For example, you can install the kickstart
configuration in `~/.config/nvim-kickstart` and create an alias:
```
alias nvim-kickstart='NVIM_APPNAME="nvim-kickstart" nvim'
```
When you run Neovim using `nvim-kickstart` alias it will use the alternative
config directory and the matching local directory
`~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim
distribution that you would like to try out.
* What if I want to "uninstall" this configuration:
* See [lazy.nvim uninstall](https://lazy.folke.io/usage#-uninstalling) information
* Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files?
* The main purpose of kickstart is to serve as a teaching tool and a reference
configuration that someone can easily use to `git clone` as a basis for their own.
As you progress in learning Neovim and Lua, you might consider splitting `init.lua`
into smaller parts. A fork of kickstart that does this while maintaining the
same functionality is available here:
* [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim)
* Discussions on this topic can be found here:
* [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218)
* [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473)
### Install Recipes
Below you can find OS specific install instructions for Neovim and dependencies.
After installing all the dependencies continue with the [Install Kickstart](#Install-Kickstart) step.
#### Windows Installation
<details><summary>Windows with Microsoft C++ Build Tools and CMake</summary>
Installation may require installing build tools and updating the run command for `telescope-fzf-native`
See `telescope-fzf-native` documentation for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation)
This requires:
- Install CMake and the Microsoft C++ Build Tools on Windows
```lua
{'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' }
```
</details>
<details><summary>Windows with gcc/make using chocolatey</summary>
Alternatively, one can install gcc and make which don't require changing the config,
the easiest way is to use choco:
1. install [chocolatey](https://chocolatey.org/install)
either follow the instructions on the page or use winget,
run in cmd as **admin**:
```
winget install --accept-source-agreements chocolatey.chocolatey
```
2. install all requirements using choco, exit previous cmd and
open a new one so that choco path is set, and run in cmd as **admin**:
```
choco install -y neovim git ripgrep wget fd unzip gzip mingw make
```
</details>
<details><summary>WSL (Windows Subsystem for Linux)</summary>
```
wsl --install
wsl
sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip neovim
```
</details>
#### Linux Install
<details><summary>Ubuntu Install Steps</summary>
```
sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip neovim
```
</details>
<details><summary>Debian Install Steps</summary>
```
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip curl
# Now we install nvim
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz
sudo rm -rf /opt/nvim-linux64
sudo mkdir -p /opt/nvim-linux64
sudo chmod a+rX /opt/nvim-linux64
sudo tar -C /opt -xzf nvim-linux64.tar.gz
# make it available in /usr/local/bin, distro installs to /usr/bin
sudo ln -sf /opt/nvim-linux64/bin/nvim /usr/local/bin/
```
</details>
<details><summary>Fedora Install Steps</summary>
```
sudo dnf install -y gcc make git ripgrep fd-find unzip neovim
```
</details>
<details><summary>Arch Install Steps</summary>
```
sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim
```
</details>

58
nvim/lazy-lock.json Normal file
View file

@ -0,0 +1,58 @@
{
"LuaSnip": { "branch": "master", "commit": "c9b9a22904c97d0eb69ccb9bab76037838326817" },
"catppuccin": { "branch": "main", "commit": "5b5e3aef9ad7af84f463d17b5479f06b87d5c429" },
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" },
"cmp-nvim-lsp-signature-help": { "branch": "main", "commit": "031e6ba70b0ad5eee49fd2120ff7a2e325b17fa7" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"conform.nvim": { "branch": "master", "commit": "db8a4a9edb217067b1d7a2e0362c74bfe9cc944d" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"edge": { "branch": "master", "commit": "04b2e25fa08b81e071ad512bdec6e5af114b01b3" },
"everforest": { "branch": "master", "commit": "29d1f4f8b63dc91db277e977068f912939c8cae8" },
"fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" },
"friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" },
"gitsigns.nvim": { "branch": "main", "commit": "011dc6718bcebdf92a5336bb0da79189c3afe621" },
"go.nvim": { "branch": "master", "commit": "da15ca55705c57ca10de1fbc1f0b6d6327c13e55" },
"gruvbox-material": { "branch": "master", "commit": "146f40fd42cbef30fed69b4ef51329aeeaceb909" },
"gruvbox.nvim": { "branch": "main", "commit": "15958f5ee43e144856cd2084ce6c571bfdb44504" },
"guihua.lua": { "branch": "master", "commit": "d783191eaa75215beae0c80319fcce5e6b3beeda" },
"image.nvim": { "branch": "master", "commit": "6ffafab2e98b5bda46bf227055aa84b90add8cdc" },
"indent-blankline.nvim": { "branch": "master", "commit": "e10626f7fcd51ccd56d7ffc00883ba7e0aa28f78" },
"kanagawa.nvim": { "branch": "master", "commit": "cfd67b0e1eeaa04302b8c7eb072253d24bf22d84" },
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
"luvit-meta": { "branch": "main", "commit": "1df30b60b1b4aecfebc785aa98943db6c6989716" },
"markdown-table-mode.nvim": { "branch": "main", "commit": "fe207ea7cef615ccaf2c0f1257c58ffa0a50a9f5" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "09220b99d63d5363f219daa2785242ee5fddba7f" },
"mason-tool-installer.nvim": { "branch": "main", "commit": "5639d58a3d11ff7c05c8e31e159bfedae55d7961" },
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
"mini.nvim": { "branch": "main", "commit": "2d873a0eaa9f37b105c7751bb0a2e30eb448120d" },
"monokai-pro.nvim": { "branch": "master", "commit": "872f774303f79416000e8049630052f4124d9534" },
"neo-tree.nvim": { "branch": "main", "commit": "9b5d67119c46e3262ffe1508fe6d8540b79ad75d" },
"nightfox.nvim": { "branch": "main", "commit": "ba47d4b4c5ec308718641ba7402c143836f35aa9" },
"nordic.nvim": { "branch": "main", "commit": "62acfd4eb008153180670daf81874eb47dd37739" },
"nui.nvim": { "branch": "main", "commit": "8d3bce9764e627b62b07424e0df77f680d47ffdb" },
"nvim-autopairs": { "branch": "master", "commit": "68f0e5c3dab23261a945272032ee6700af86227a" },
"nvim-cmp": { "branch": "main", "commit": "1e1900b0769324a9675ef85b38f99cca29e203b3" },
"nvim-colorizer.lua": { "branch": "master", "commit": "517df88cf2afb36652830df2c655df2da416a0ae" },
"nvim-dap": { "branch": "master", "commit": "a720d4966f758ab22e8ec28812b6df90a53e0f02" },
"nvim-dap-go": { "branch": "main", "commit": "8763ced35b19c8dc526e04a70ab07c34e11ad064" },
"nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" },
"nvim-lint": { "branch": "master", "commit": "6e9dd545a1af204c4022a8fcd99727ea41ffdcc8" },
"nvim-lspconfig": { "branch": "master", "commit": "8a1529e46eef5efc86c34c8d9bdd313abc2ecba0" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-treesitter": { "branch": "master", "commit": "2586ea65faf45dcf1caf8d34510d50bb545c215a" },
"nvim-treesitter-context": { "branch": "master", "commit": "129fcc94fa986692926366e940a46f00d2a4abbe" },
"nvim-web-devicons": { "branch": "master", "commit": "d0cafff5c4347a604a07edf7bb9a91fda7eb577e" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"rose-pine": { "branch": "main", "commit": "7d1b5c7dcd274921f0f58e90a8bf935f6a95fbf3" },
"rustaceanvim": { "branch": "master", "commit": "2b0f0b7e03751cf8ed123322f9b02d8f73fa9df7" },
"sonokai": { "branch": "master", "commit": "9679341d4141ed81376f2bdf5e69b78dc348d212" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
"tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
}

View file

@ -0,0 +1,63 @@
-- A high-performance color highlighter
return {
{
'catgoose/nvim-colorizer.lua',
event = 'BufReadPre',
opts = { -- set to setup table
filetypes = { '*' }, -- Filetype options. Accepts table like `user_default_options`
buftypes = {}, -- Buftype options. Accepts table like `user_default_options`
-- Boolean | List of usercommands to enable. See User commands section.
user_commands = true, -- Enable all or some usercommands
lazy_load = false, -- Lazily schedule buffer highlighting setup function
user_default_options = {
names = true, -- "Name" codes like Blue or red. Added from `vim.api.nvim_get_color_map()`
names_opts = { -- options for mutating/filtering names.
lowercase = true, -- name:lower(), highlight `blue` and `red`
camelcase = true, -- name, highlight `Blue` and `Red`
uppercase = false, -- name:upper(), highlight `BLUE` and `RED`
strip_digits = false, -- ignore names with digits,
-- highlight `blue` and `red`, but not `blue3` and `red4`
},
-- Expects a table of color name to #RRGGBB value pairs. # is optional
-- Example: { cool = "#107dac", ["notcool"] = "ee9240" }
-- Set to false to disable, for example when setting filetype options
names_custom = false, -- Custom names to be highlighted: table|function|false
RGB = true, -- #RGB hex codes
RGBA = true, -- #RGBA hex codes
RRGGBB = true, -- #RRGGBB hex codes
RRGGBBAA = false, -- #RRGGBBAA hex codes
AARRGGBB = false, -- 0xAARRGGBB hex codes
rgb_fn = false, -- CSS rgb() and rgba() functions
hsl_fn = false, -- CSS hsl() and hsla() functions
css = false, -- Enable all CSS *features*:
-- names, RGB, RGBA, RRGGBB, RRGGBBAA, AARRGGBB, rgb_fn, hsl_fn
css_fn = false, -- Enable all CSS *functions*: rgb_fn, hsl_fn
-- Tailwind colors. boolean|'normal'|'lsp'|'both'. True sets to 'normal'
tailwind = false, -- Enable tailwind colors
tailwind_opts = { -- Options for highlighting tailwind names
update_names = false, -- When using tailwind = 'both', update tailwind names from LSP results. See tailwind section
},
-- parsers can contain values used in `user_default_options`
sass = { enable = false, parsers = { 'css' } }, -- Enable sass colors
-- Highlighting mode. 'background'|'foreground'|'virtualtext'
mode = 'background', -- Set the display mode
-- Virtualtext character to use
virtualtext = '',
-- Display virtualtext inline with color. boolean|'before'|'after'. True sets to 'after'
virtualtext_inline = false,
-- Virtualtext highlight mode: 'background'|'foreground'
virtualtext_mode = 'foreground',
-- update color values even if buffer is not focused
-- example use: cmp_menu, cmp_docs
always_update = false,
-- hooks to invert control of colorizer
hooks = {
-- called before line parsing. Accepts boolean or function that returns boolean
-- see hooks section below
disable_line_highlight = false,
},
},
},
},
}

View file

@ -0,0 +1,5 @@
return {
{
'sindrets/diffview.nvim',
},
}

View file

@ -0,0 +1,26 @@
-- Feature-Rich Go Plugin for Neovim
return {
{
'ray-x/go.nvim',
dependencies = { -- optional packages
'ray-x/guihua.lua',
'neovim/nvim-lspconfig',
'nvim-treesitter/nvim-treesitter',
},
config = function()
require('go').setup()
vim.keymap.set({ 'n' }, '<leader>gta', ':GoAddTag<CR>', { desc = '[G]o [T]ag [A]dd' })
vim.keymap.set({ 'n' }, '<leader>gtr', ':GoRmTag<CR>', { desc = '[G]o [T]ag [R]emove' })
vim.keymap.set({ 'n' }, '<leader>gs', ':GoFillStruct<CR>', { desc = '[G]o fill [S]truct' })
vim.keymap.set({ 'n' }, '<leader>gc', ':GoFillSwitch<CR>', { desc = '[G]o fill Switch [C]ase' })
-- Go Fix Plurals - change func foo(b int, a int, r int) -> func foo(b, a, r int)
vim.keymap.set({ 'n' }, '<leader>gp', ':GoFixPlurals<CR>', { desc = '[G]o fix [P]lurals' })
vim.keymap.set({ 'n' }, '<leader>ge', ':GoIfErr<CR>', { desc = '[G]o if [E]rr' })
vim.keymap.set({ 'n' }, '<leader>gi', ':GoImports<CR>', { desc = '[G]o [I]mports' })
end,
event = { 'CmdlineEnter' },
ft = { 'go', 'gomod' },
-- build = ':lua require("go.install").update_all_sync()' -- if you need to install/update all binaries
},
}

View file

@ -0,0 +1,9 @@
-- Supercharge your Rust experience in Neovim
return {
{
'mrcjkb/rustaceanvim',
version = '^5', -- Recommended
lazy = false, -- This plugin is already lazy
},
}

View file

@ -0,0 +1,115 @@
-- Add auto-sessions to mini.sessions plugin
-- Session names are generated dynamically based on the project directory and Git branch (if available)
-- Auto-save session on exit will only work if there is an active session in the project,
-- which can be set up, for example, via a custom key binding
-- When starting `nvim` with no arguments, will try to save session on exit
-- Whet starting `nvim .` (or another directory), will try to save session on exit
-- When starting `nvim some_file.txt` (or multiple files), won't do anything
-- Generate session name per project and per git branch for mini.sessions
local function get_git_branch()
local branch = vim.fn.systemlist('git branch --show-current')[1] or ''
return (vim.v.shell_error == 0 and branch ~= '') and branch or nil
end
local function session_name()
local cwd = vim.fn.getcwd() -- current working directory
local branch = get_git_branch()
local name = cwd
local sha = vim.fn.sha256(name)
if branch then
sha = sha .. '-' .. branch
end
return sha
end
-- Auto save session per project and per git branch on exit
local function should_save_session()
-- argc() returns the number of command line arguments
local argc = vim.fn.argc()
-- Case 1: nvim with no arguments
if argc == 0 then
return true
end
-- Case 2: nvim . (argument is a directory)
if argc == 1 then
local first_arg = vim.fn.argv(0) -- Get the first argument
return vim.fn.isdirectory(first_arg) == 1
end
return false
end
local function session_exist()
local session_dir = vim.fn.stdpath 'data' .. '/session/'
local session_path = session_dir .. session_name()
return vim.fn.filereadable(session_path) == 1
end
local function save_session()
if not should_save_session() then
return -- Do not save if there were files in the arguments
end
local name = session_name()
require('mini.sessions').write(name)
print('💾 Session Saved: ' .. name)
end
vim.api.nvim_create_autocmd('VimLeavePre', {
desc = 'Auto save session on exit if session exists',
callback = function()
if not session_exist() then
return -- Do not autosave session if there is no session in the project
end
save_session()
end,
})
-- Session restore
local function restore_session()
if not should_save_session() then
return
end
if not session_exist() then
return -- Do not restore session if there is no session in the project
end
local name = session_name()
require('mini.sessions').read(name)
print('💾 Session Restored: ' .. name)
end
vim.api.nvim_create_autocmd('User', {
pattern = 'VeryLazy', -- Lazy.nvim event
desc = 'Auto restore session after plugin load',
callback = function()
-- Adding a small delay for stability
vim.defer_fn(function()
restore_session()
end, 50)
end,
nested = true,
})
vim.keymap.set('n', '<Space><BS>', function()
restore_session()
end, { desc = 'Restore session' })
-- Session delete
vim.keymap.set('n', '<Space>Sd', function()
local name = session_name()
require('mini.sessions').delete(name)
print('💾 Session Deleted: ' .. name)
end, { desc = '[S]ession [D]elete' })
-- Session create
vim.keymap.set('n', '<Space>Sc', function()
save_session()
end, { desc = '[S]ession [C]reate' })

View file

@ -0,0 +1,56 @@
local state = {
floating = {
buf = -1,
win = -1,
},
}
local function create_floating_window(opts)
opts = opts or {}
local width = opts.width or math.floor(vim.o.columns * 0.8)
local height = opts.height or math.floor(vim.o.lines * 0.8)
-- Calculate the position to center the window
local col = math.floor((vim.o.columns - width) / 2)
local row = math.floor((vim.o.lines - height) / 2)
-- Create a buffer
local buf = nil
if vim.api.nvim_buf_is_valid(opts.buf) then
buf = opts.buf
else
buf = vim.api.nvim_create_buf(false, true) -- No file, scratch buffer
end
-- Define window configuration
local win_config = {
relative = 'editor',
width = width,
height = height,
col = col,
row = row,
style = 'minimal', -- No borders or extra UI elements
border = 'rounded',
}
-- Create the floating window
local win = vim.api.nvim_open_win(buf, true, win_config)
return { buf = buf, win = win }
end
local toggle_terminal = function()
if not vim.api.nvim_win_is_valid(state.floating.win) then
state.floating = create_floating_window { buf = state.floating.buf }
if vim.bo[state.floating.buf].buftype ~= 'terminal' then
vim.cmd.terminal()
end
else
vim.api.nvim_win_hide(state.floating.win)
end
end
-- Example usage:
-- Create a floating window with default dimensions
vim.api.nvim_create_user_command('Floaterminal', toggle_terminal, {})
vim.keymap.set({ 'n', 't' }, '<leader>tt', toggle_terminal, { desc = '[T]oggle [T]erminal' })

View file

@ -0,0 +1,52 @@
--[[
--
-- This file is not required for your own configuration,
-- but helps people determine if their system is setup correctly.
--
--]]
local check_version = function()
local verstr = tostring(vim.version())
if not vim.version.ge then
vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr))
return
end
if vim.version.ge(vim.version(), '0.10-dev') then
vim.health.ok(string.format("Neovim version is: '%s'", verstr))
else
vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr))
end
end
local check_external_reqs = function()
-- Basic utils: `git`, `make`, `unzip`
for _, exe in ipairs { 'git', 'make', 'unzip', 'rg' } do
local is_executable = vim.fn.executable(exe) == 1
if is_executable then
vim.health.ok(string.format("Found executable: '%s'", exe))
else
vim.health.warn(string.format("Could not find executable: '%s'", exe))
end
end
return true
end
return {
check = function()
vim.health.start 'kickstart.nvim'
vim.health.info [[NOTE: Not every warning is a 'must-fix' in `:checkhealth`
Fix only warnings for plugins and languages you intend to use.
Mason will give warnings for languages that are not installed.
You do not need to install, unless you want to use those languages!]]
local uv = vim.uv or vim.loop
vim.health.info('System Information: ' .. vim.inspect(uv.os_uname()))
check_version()
check_external_reqs()
end,
}

View file

@ -0,0 +1,85 @@
-- Autoformat
-- Timeout для форматирования пришлось задать в 5 секунд, потому что sqlfluff очень долго форматирует
return {
{
'stevearc/conform.nvim',
event = { 'BufWritePre' },
cmd = { 'ConformInfo' },
keys = {
{
'<leader>f',
function()
require('conform').format {
async = true,
lsp_format = 'fallback',
timeout_ms = 5000,
}
end,
mode = '',
desc = '[F]ormat buffer',
},
},
opts = {
notify_on_error = false,
format_on_save = function(bufnr)
-- Disable "format_on_save lsp_fallback" for languages that don't
-- have a well standardized coding style. You can add additional
-- languages here or re-enable it for the disabled ones.
local disable_filetypes = { c = true, cpp = true }
local lsp_format_opt
if disable_filetypes[vim.bo[bufnr].filetype] then
lsp_format_opt = 'never'
else
lsp_format_opt = 'fallback'
end
return {
timeout_ms = 5000,
lsp_format = lsp_format_opt,
}
end,
formatters_by_ft = {
lua = { 'stylua' },
go = { 'gofmt', 'injected' },
sql = { 'sqlfluff' },
-- ['*'] = { 'injected' }, -- enables injected-lang formatting for all filetypes
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
-- You can use 'stop_after_first' to run the first available formatter from the list
-- javascript = { "prettierd", "prettier", stop_after_first = true },
},
formatters = {
-- sql_formatter = {
-- -- prepend_args = { "-c", vim.fn.expand("~/.config/sql_formatter.json"),
-- args = function()
-- -- Создаём временный JSON-файл конфигурации
-- local config_path = vim.fn.tempname() .. ".json"
-- local config_content = vim.fn.json_encode({
-- tabWidth = 4,
-- })
-- local file = io.open(config_path, "w")
-- file:write(config_content)
-- file:close()
-- -- Возвращаем аргументы для форматтера с указанием конфигурационного файла
-- return { "-c", config_path }
-- end,
-- stdin = true,
-- },
sqlfluff = {
command = 'sqlfluff',
args = {
'format',
-- 'fix',
-- '--dialect',
-- 'postgres',
-- '--disable-progress-bar',
'-',
},
stdin = true,
},
},
},
},
}

View file

@ -0,0 +1,16 @@
-- autopairs
-- https://github.com/windwp/nvim-autopairs
return {
'windwp/nvim-autopairs',
event = 'InsertEnter',
-- Optional dependency
dependencies = { 'hrsh7th/nvim-cmp' },
config = function()
require('nvim-autopairs').setup {}
-- If you want to automatically add `(` after selecting a function or method
local cmp_autopairs = require 'nvim-autopairs.completion.cmp'
local cmp = require 'cmp'
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
end,
}

View file

@ -0,0 +1,135 @@
-- Autocompletion
return {
{
'hrsh7th/nvim-cmp',
event = 'InsertEnter',
dependencies = {
-- Snippet Engine & its associated nvim-cmp source
{
'L3MON4D3/LuaSnip',
build = (function()
-- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments.
-- Remove the below condition to re-enable on windows.
if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then
return
end
return 'make install_jsregexp'
end)(),
dependencies = {
-- `friendly-snippets` contains a variety of premade snippets.
-- See the README about individual language/framework/plugin snippets:
-- https://github.com/rafamadriz/friendly-snippets
{
'rafamadriz/friendly-snippets',
config = function()
require('luasnip.loaders.from_vscode').lazy_load()
end,
},
},
},
'saadparwaiz1/cmp_luasnip',
-- Adds other completion capabilities.
-- nvim-cmp does not ship with all sources by default. They are split
-- into multiple repos for maintenance purposes.
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-path',
'hrsh7th/cmp-nvim-lsp-signature-help',
},
config = function()
-- See `:help cmp`
local cmp = require 'cmp'
local luasnip = require 'luasnip'
luasnip.config.setup {}
cmp.setup {
preselect = cmp.PreselectMode.None,
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
completion = { completeopt = 'menu,menuone,noinsert' },
-- For an understanding of why these mappings were
-- chosen, you will need to read `:help ins-completion`
--
-- No, but seriously. Please read `:help ins-completion`, it is really good!
mapping = cmp.mapping.preset.insert {
-- (enabled by default in nvim-cmp)
-- Select the [n]ext item
-- ['<C-n>'] = cmp.mapping.select_next_item(),
-- Select the [p]revious item
-- ['<C-p>'] = cmp.mapping.select_prev_item(),
-- Accept ([y]es) the completion.
-- This will auto-import if your LSP supports it.
-- This will expand snippets if the LSP sent a snippet.
-- ['<C-y>'] = cmp.mapping.confirm { select = true },
-- If you prefer more traditional completion keymaps,
-- you can uncomment the following lines
-- ['<CR>'] = cmp.mapping.confirm { select = true },
['<Tab>'] = cmp.mapping.select_next_item(),
['<S-Tab>'] = cmp.mapping.select_prev_item(),
-- Allows Up arrow to fall back without interacting with cmp
['<Up>'] = cmp.mapping(function(fallback)
cmp.close()
fallback()
end, { 'i', 'c' }),
-- Allows Up arrow to fall back without interacting with cmp
['<Down>'] = cmp.mapping(function(fallback)
cmp.close()
fallback()
end, { 'i', 'c' }),
-- Scroll the documentation window [b]ack / [f]orward
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
-- Manually trigger a completion from nvim-cmp.
-- Generally you don't need this, because nvim-cmp will display
-- completions whenever it has completion options available.
['<C-Space>'] = cmp.mapping.complete {},
-- Think of <c-l> as moving to the right of your snippet expansion.
-- So if you have a snippet that's like:
-- function $name($args)
-- $body
-- end
--
-- <c-l> will move you to the right of each of the expansion locations.
-- <c-h> is similar, except moving you backwards.
['<C-l>'] = cmp.mapping(function()
if luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
end
end, { 'i', 's' }),
['<C-h>'] = cmp.mapping(function()
if luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
end
end, { 'i', 's' }),
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
},
sources = {
{
name = 'lazydev',
-- set group index to 0 to skip loading LuaLS completions as lazydev recommends it
group_index = 0,
},
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'path' },
{ name = 'nvim_lsp_signature_help' },
},
}
end,
},
}

View file

@ -0,0 +1,148 @@
-- debug.lua
--
-- Shows how to use the DAP plugin to debug your code.
--
-- Primarily focused on configuring the debugger for Go, but can
-- be extended to other languages as well. That's why it's called
-- kickstart.nvim and not kitchen-sink.nvim ;)
return {
-- NOTE: Yes, you can install new plugins here!
'mfussenegger/nvim-dap',
-- NOTE: And you can specify dependencies as well
dependencies = {
-- Creates a beautiful debugger UI
'rcarriga/nvim-dap-ui',
-- Required dependency for nvim-dap-ui
'nvim-neotest/nvim-nio',
-- Installs the debug adapters for you
'williamboman/mason.nvim',
'jay-babu/mason-nvim-dap.nvim',
-- Add your own debuggers here
'leoluz/nvim-dap-go',
},
keys = {
-- Basic debugging keymaps, feel free to change to your liking!
{
'<F5>',
function()
require('dap').continue()
end,
desc = 'Debug: Start/Continue',
},
{
'<F1>',
function()
require('dap').step_into()
end,
desc = 'Debug: Step Into',
},
{
'<F2>',
function()
require('dap').step_over()
end,
desc = 'Debug: Step Over',
},
{
'<F3>',
function()
require('dap').step_out()
end,
desc = 'Debug: Step Out',
},
{
'<leader>b',
function()
require('dap').toggle_breakpoint()
end,
desc = 'Debug: Toggle Breakpoint',
},
{
'<leader>B',
function()
require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ')
end,
desc = 'Debug: Set Breakpoint',
},
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
{
'<F7>',
function()
require('dapui').toggle()
end,
desc = 'Debug: See last session result.',
},
},
config = function()
local dap = require 'dap'
local dapui = require 'dapui'
require('mason-nvim-dap').setup {
-- Makes a best effort to setup the various debuggers with
-- reasonable debug configurations
-- automatic_installation = true,
-- You can provide additional configuration to the handlers,
-- see mason-nvim-dap README for more information
handlers = {},
-- You'll need to check that you have the required things installed
-- online, please don't ask me how to install them :)
ensure_installed = { -- Скачать через mason (не надо)
-- Update this to ensure that you have the debuggers for the langs you want
-- 'delve',
},
}
-- Dap UI setup
-- For more information, see |:help nvim-dap-ui|
dapui.setup {
-- Set icons to characters that are more likely to work in every terminal.
-- Feel free to remove or use ones that you like more! :)
-- Don't feel like these are good choices.
icons = { expanded = '', collapsed = '', current_frame = '*' },
controls = {
icons = {
pause = '',
play = '',
step_into = '',
step_over = '',
step_out = '',
step_back = 'b',
run_last = '▶▶',
terminate = '',
disconnect = '',
},
},
}
-- Change breakpoint icons
-- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' })
-- vim.api.nvim_set_hl(0, 'DapStop', { fg = '#ffcc00' })
-- local breakpoint_icons = vim.g.have_nerd_font
-- and { Breakpoint = '', BreakpointCondition = '', BreakpointRejected = '', LogPoint = '', Stopped = '' }
-- or { Breakpoint = '●', BreakpointCondition = '⊜', BreakpointRejected = '⊘', LogPoint = '◆', Stopped = '⭔' }
-- for type, icon in pairs(breakpoint_icons) do
-- local tp = 'Dap' .. type
-- local hl = (type == 'Stopped') and 'DapStop' or 'DapBreak'
-- vim.fn.sign_define(tp, { text = icon, texthl = hl, numhl = hl })
-- end
dap.listeners.after.event_initialized['dapui_config'] = dapui.open
dap.listeners.before.event_terminated['dapui_config'] = dapui.close
dap.listeners.before.event_exited['dapui_config'] = dapui.close
-- Install golang specific config
require('dap-go').setup {
delve = {
-- On Windows delve must be run attached or it crashes.
-- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring
detached = vim.fn.has 'win32' == 0,
},
}
end,
}

View file

@ -0,0 +1,40 @@
-- Neo-tree is a Neovim plugin to browse the file system
-- https://github.com/nvim-neo-tree/neo-tree.nvim
return {
{
'nvim-neo-tree/neo-tree.nvim',
version = '*',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
'MunifTanjim/nui.nvim',
{ -- Optional image support in preview window: See `# Preview Mode` for more information
'3rd/image.nvim',
build = false, -- so that it doesn't build the rock
opts = {
backend = 'ueberzug', -- or "kitty"
processor = 'magick_cli', -- or "magick_rock"
},
},
},
cmd = 'Neotree',
keys = {
{ '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true },
},
opts = {
filesystem = {
window = {
mappings = {
['\\'] = 'close_window',
},
},
filtered_items = {
visible = true, -- Show hidden files
-- hide_dotfiles = false,
-- hide_gitignored = true,
},
},
},
},
}

View file

@ -0,0 +1,79 @@
-- Adds git related signs to the gutter, as well as utilities for managing changes
-- NOTE: Plugins can also be added by using a table,
-- with the first argument being the link and the following
-- keys can be used to configure plugin behavior/loading/etc.
--
-- Use `opts = {}` to force a plugin to be loaded.
--
-- Here is a more advanced example where we pass configuration
-- options to `gitsigns.nvim`. This is equivalent to the following Lua:
-- require('gitsigns').setup({ ... })
--
-- See `:help gitsigns` to understand what the configuration keys do
return {
{
'lewis6991/gitsigns.nvim',
opts = {
signs = {
add = { text = '+' },
change = { text = '~' },
delete = { text = '_' },
topdelete = { text = '' },
changedelete = { text = '~' },
},
on_attach = function(bufnr)
local gitsigns = require 'gitsigns'
local function map(mode, l, r, opts)
opts = opts or {}
opts.buffer = bufnr
vim.keymap.set(mode, l, r, opts)
end
-- Navigation
map('n', ']c', function()
if vim.wo.diff then
vim.cmd.normal { ']c', bang = true }
else
gitsigns.nav_hunk 'next'
end
end, { desc = 'Jump to next git [c]hange' })
map('n', '[c', function()
if vim.wo.diff then
vim.cmd.normal { '[c', bang = true }
else
gitsigns.nav_hunk 'prev'
end
end, { desc = 'Jump to previous git [c]hange' })
-- Actions
-- visual mode
map('v', '<leader>hs', function()
gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' }
end, { desc = 'stage git hunk' })
map('v', '<leader>hr', function()
gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' }
end, { desc = 'reset git hunk' })
-- normal mode
map('n', '<leader>hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' })
map('n', '<leader>hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' })
map('n', '<leader>hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' })
map('n', '<leader>hu', gitsigns.undo_stage_hunk, { desc = 'git [u]ndo stage hunk' })
map('n', '<leader>hR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer' })
map('n', '<leader>hp', gitsigns.preview_hunk, { desc = 'git [p]review hunk' })
map('n', '<leader>hb', gitsigns.blame_line, { desc = 'git [b]lame line' })
map('n', '<leader>hd', gitsigns.diffthis, { desc = 'git [d]iff against index' })
map('n', '<leader>hD', function()
gitsigns.diffthis '@'
end, { desc = 'git [D]iff against last commit' })
-- Toggles
map('n', '<leader>tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' })
map('n', '<leader>tD', gitsigns.toggle_deleted, { desc = '[T]oggle git show [D]eleted' })
end,
},
},
}

View file

@ -0,0 +1,11 @@
-- Add indentation guides even on blank lines
return {
{
'lukas-reineke/indent-blankline.nvim',
-- Enable `lukas-reineke/indent-blankline.nvim`
-- See `:help ibl`
main = 'ibl',
opts = {},
},
}

View file

@ -0,0 +1,62 @@
return {
{ -- Linting
'mfussenegger/nvim-lint',
event = { 'BufReadPre', 'BufNewFile' },
config = function()
local lint = require 'lint'
lint.linters_by_ft = {
-- markdown = { 'markdownlint' },
sql = { 'sqlfluff' },
-- go = { 'golangcilint' },
-- proto = { 'buf_lint' }, -- Крашит
}
-- To allow other plugins to add linters to require('lint').linters_by_ft,
-- instead set linters_by_ft like this:
-- lint.linters_by_ft = lint.linters_by_ft or {}
-- lint.linters_by_ft['markdown'] = { 'markdownlint' }
--
-- However, note that this will enable a set of default linters,
-- which will cause errors unless these tools are available:
-- {
-- clojure = { "clj-kondo" },
-- dockerfile = { "hadolint" },
-- inko = { "inko" },
-- janet = { "janet" },
-- json = { "jsonlint" },
-- markdown = { "vale" },
-- rst = { "vale" },
-- ruby = { "ruby" },
-- terraform = { "tflint" },
-- text = { "vale" }
-- }
--
-- You can disable the default linters by setting their filetypes to nil:
-- lint.linters_by_ft['clojure'] = nil
-- lint.linters_by_ft['dockerfile'] = nil
-- lint.linters_by_ft['inko'] = nil
-- lint.linters_by_ft['janet'] = nil
-- lint.linters_by_ft['json'] = nil
-- lint.linters_by_ft['markdown'] = nil
-- lint.linters_by_ft['rst'] = nil
-- lint.linters_by_ft['ruby'] = nil
-- lint.linters_by_ft['terraform'] = nil
-- lint.linters_by_ft['text'] = nil
-- Create autocommand which carries out the actual linting
-- on the specified events.
local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
group = lint_augroup,
callback = function()
-- Only run the linter in buffers that you can modify in order to
-- avoid superfluous noise, notably within the handy LSP pop-ups that
-- describe the hovered symbol using Markdown.
if vim.opt_local.modifiable:get() then
lint.try_lint()
end
end,
})
end,
},
}

View file

@ -0,0 +1,338 @@
-- LSP Plugins
return {
{
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
'folke/lazydev.nvim',
ft = 'lua',
opts = {
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
},
},
},
{ 'Bilal2453/luvit-meta', lazy = true },
{
-- Main LSP Configuration
'neovim/nvim-lspconfig',
dependencies = {
-- Automatically install LSPs and related tools to stdpath for Neovim
{ 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants
'williamboman/mason-lspconfig.nvim',
'WhoIsSethDaniel/mason-tool-installer.nvim',
-- Useful status updates for LSP.
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
{ 'j-hui/fidget.nvim', opts = {} },
-- Allows extra capabilities provided by nvim-cmp
'hrsh7th/cmp-nvim-lsp',
},
config = function()
-- Brief aside: **What is LSP?**
--
-- LSP is an initialism you've probably heard, but might not understand what it is.
--
-- LSP stands for Language Server Protocol. It's a protocol that helps editors
-- and language tooling communicate in a standardized fashion.
--
-- In general, you have a "server" which is some tool built to understand a particular
-- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
-- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone
-- processes that communicate with some "client" - in this case, Neovim!
--
-- LSP provides Neovim with features like:
-- - Go to definition
-- - Find references
-- - Autocompletion
-- - Symbol Search
-- - and more!
--
-- Thus, Language Servers are external tools that must be installed separately from
-- Neovim. This is where `mason` and related plugins come into play.
--
-- If you're wondering about lsp vs treesitter, you can check out the wonderfully
-- and elegantly composed help section, `:help lsp-vs-treesitter`
-- This function gets run when an LSP attaches to a particular buffer.
-- That is to say, every time a new file is opened that is associated with
-- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
-- function will be executed to configure the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
callback = function(event)
-- NOTE: Remember that Lua is a real programming language, and as such it is possible
-- to define small helper and utility functions so you don't have to repeat yourself.
--
-- In this case, we create a function that lets us more easily define mappings specific
-- for LSP related items. It sets the mode, buffer and description for us each time.
local map = function(keys, func, desc, mode)
mode = mode or 'n'
vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
end
-- Jump to the definition of the word under your cursor.
-- This is where a variable was first declared, or where a function is defined, etc.
-- To jump back, press <C-t>.
map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
-- Find references for the word under your cursor.
map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
-- Jump to the implementation of the word under your cursor.
-- Useful when your language has ways of declaring types without an actual implementation.
map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
-- Jump to the type of the word under your cursor.
-- Useful when you're not sure what type a variable is and you want to see
-- the definition of its *type*, not where it was *defined*.
map('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
-- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc.
-- Было <leader>ds [D]ocument [S]ymbols
map('<leader>ss', require('telescope.builtin').lsp_document_symbols, 'Document [S]ymbols')
-- Fuzzy find all the symbols in your current workspace.
-- Similar to document symbols, except searches over your entire project.
map('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
-- Rename the variable under your cursor.
-- Most Language Servers support renaming across files, etc.
map('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
-- Execute a code action, usually your cursor needs to be on top of an error
-- or a suggestion from your LSP for this to activate.
map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction', { 'n', 'x' })
-- WARN: This is not Goto Definition, this is Goto Declaration.
-- For example, in C this would take you to the header.
map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
-- The following two autocommands are used to highlight references of the
-- word under your cursor when your cursor rests there for a little while.
-- See `:help CursorHold` for information about when this is executed
--
-- When you move your cursor, the highlights will be cleared (the second autocommand).
local client = vim.lsp.get_client_by_id(event.data.client_id)
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then
local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
buffer = event.buf,
group = highlight_augroup,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
buffer = event.buf,
group = highlight_augroup,
callback = vim.lsp.buf.clear_references,
})
vim.api.nvim_create_autocmd('LspDetach', {
group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
callback = function(event2)
vim.lsp.buf.clear_references()
vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf }
end,
})
end
-- The following code creates a keymap to toggle inlay hints in your
-- code, if the language server you are using supports them
--
-- This may be unwanted, since they displace some of your code
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
map('<leader>th', function()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf })
end, '[T]oggle Inlay [H]ints')
end
end,
})
-- Change diagnostic symbols in the sign column (gutter)
if vim.g.have_nerd_font then
local signs = { ERROR = '', WARN = '', INFO = '', HINT = '' }
local diagnostic_signs = {}
for type, icon in pairs(signs) do
diagnostic_signs[vim.diagnostic.severity[type]] = icon
end
vim.diagnostic.config { signs = { text = diagnostic_signs } }
end
-- LSP servers and clients are able to communicate to each other what features they support.
-- By default, Neovim doesn't support everything that is in the LSP specification.
-- When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities.
-- So, we create new capabilities with nvim cmp, and then broadcast that to the servers.
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
-- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
--
-- Add any additional override configuration in the following tables. Available keys are:
-- - cmd (table): Override the default command used to start the server
-- - filetypes (table): Override the default list of associated filetypes for the server
-- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
-- - on_attach (func): Функция, которая вызывается, когда LSP подключается к буферу
-- - settings (table): Override the default settings passed when initializing the server.
-- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
local servers =
{ -- WARN: Качает через mason. Может не работать в NixOS. Оставил для других OS на будущее
-- See `:help lspconfig-all` for a list of all the pre-configured LSPs
--
-- Some languages (like typescript) have entire language plugins that can be useful:
-- https://github.com/pmizio/typescript-tools.nvim
--
-- But for many setups, the LSP (`ts_ls`) will work just fine
-- taplo
}
-- local util = require 'lspconfig.util'
local lspconfig = require 'lspconfig'
-- require('lspconfig.configs').postgres_lsp = {
-- default_config = {
-- name = 'postgres_lsp',
-- cmd = { 'postgres_lsp' },
-- filetypes = { 'sql' },
-- single_file_support = true,
-- root_dir = util.root_pattern 'root-file.txt',
-- },
-- }
-- SQL
-- lspconfig.postgres_lsp.setup { force_setup = true }
lspconfig.sqls.setup {
on_attach = function(client)
-- Выключить форматирование
client.server_capabilities.documentFormattingProvider = false
end,
}
-- Nix
lspconfig.nixd.setup {}
-- Golang
lspconfig.gopls.setup {}
lspconfig.templ.setup {}
-- Frontend
lspconfig.tailwindcss.setup {}
lspconfig.ts_ls.setup {}
lspconfig.htmx.setup {}
lspconfig.emmet_language_server.setup {
filetypes = { 'templ', 'css', 'eruby', 'html', 'javascript', 'javascriptreact', 'less', 'sass', 'scss', 'pug', 'typescriptreact' },
}
local cap_css = vim.lsp.protocol.make_client_capabilities()
cap_css.textDocument.completion.completionItem.snippetSupport = true
lspconfig.cssls.setup {
capabilities = cap_css,
}
local cap_html = vim.lsp.protocol.make_client_capabilities()
cap_html.textDocument.completion.completionItem.snippetSupport = true
lspconfig.html.setup {
capabilities = cap_html,
on_attach = function(client, bufnr)
-- Отключаем форматирование для файлов .templ
local ft = vim.api.nvim_buf_get_option(bufnr, 'filetype')
if ft == 'templ' then
client.server_capabilities.documentFormattingProvider = false
end
end,
}
-- Lua
lspconfig.lua_ls.setup {
settings = {
Lua = {
completion = {
callSnippet = 'Replace',
},
-- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
-- diagnostics = { disable = { 'missing-fields' } },
},
},
}
-- C/C++
-- lspconfig.ccls.setup {
-- init_options = {
-- cache = {
-- directory = ".ccls-cache";
-- };
-- }
-- }
lspconfig.clangd.setup {
filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cuda' }, -- Удалил "proto"
}
lspconfig.cmake.setup {}
-- Python
lspconfig.pyright.setup {}
lspconfig.ruff.setup {
on_attach = function(client, bufnr) -- Выключить форматирование
client.server_capabilities.documentFormattingProvider = false
end,
}
-- Rust
-- lspconfig.rust_analyzer.setup {}
-- Bash
lspconfig.bashls.setup {
on_attach = function(client, bufnr)
local filename = vim.api.nvim_buf_get_name(bufnr)
if filename:match '/%.env$' or filename:match '/%.env%..+$' then
client.stop() -- отключить LSP только для .env
end
end,
}
-- JSON
local cap_json = vim.lsp.protocol.make_client_capabilities()
cap_json.textDocument.completion.completionItem.snippetSupport = true
lspconfig.jsonls.setup {
capabilities = cap_json,
}
-- Other
lspconfig.taplo.setup {}
lspconfig.vimls.setup {}
lspconfig.yamlls.setup {}
lspconfig.protols.setup {}
-- lspconfig.buf_ls.setup {}
-- Ensure the servers and tools above are installed
-- To check the current status of installed tools and/or manually install
-- other tools, you can run
-- :Mason
--
-- You can press `g?` for help in this menu.
require('mason').setup()
-- You can add other tools here that you want Mason to install
-- for you, so that they are available from within Neovim.
local ensure_installed = vim.tbl_keys(servers or {})
-- vim.list_extend(ensure_installed, {
-- 'stylua', -- Used to format Lua code
-- })
require('mason-tool-installer').setup { ensure_installed = ensure_installed }
require('mason-lspconfig').setup {
handlers = {
function(server_name)
local server = servers[server_name] or {}
-- This handles overriding only values explicitly passed
-- by the server configuration above. Useful when disabling
-- certain features of an LSP (for example, turning off formatting for ts_ls)
server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
require('lspconfig')[server_name].setup(server)
end,
},
}
end,
},
}

View file

@ -0,0 +1,64 @@
-- Collection of various small independent plugins/modules
return {
{
'echasnovski/mini.nvim',
config = function()
-- Better Around/Inside textobjects
--
-- Examples:
-- - va) - [V]isually select [A]round [)]paren
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote
-- - ci' - [C]hange [I]nside [']quote
require('mini.ai').setup { n_lines = 500 }
-- Add/delete/replace surroundings (brackets, quotes, etc.)
--
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
require('mini.surround').setup()
-- Sessions
require('mini.sessions').setup {
-- Whether to read default session if Neovim opened without file arguments
autoread = false,
-- Whether to write currently read session before quitting Neovim
autowrite = false,
-- Whether to force possibly harmful actions (meaning depends on function)
force = { read = false, write = true, delete = true },
-- Hook functions for actions. Default `nil` means 'do nothing'.
hooks = {
-- Before successful action
pre = { read = nil, write = nil, delete = nil },
-- After successful action
post = { read = nil, write = nil, delete = nil },
},
-- Whether to print session path after action
verbose = { read = false, write = true, delete = true },
}
-- Simple and easy statusline.
-- You could remove this setup call if you don't like it,
-- and try some other statusline plugin
local statusline = require 'mini.statusline'
-- set use_icons to true if you have a Nerd Font
statusline.setup { use_icons = vim.g.have_nerd_font }
-- You can configure sections in the statusline by overriding their
-- default behavior. For example, here we set the section for
-- cursor location to LINE:COLUMN
---@diagnostic disable-next-line: duplicate-set-field
statusline.section_location = function()
return '%2l:%-2v'
end
-- ... and there is more!
-- Check out: https://github.com/echasnovski/mini.nvim
end,
},
}

View file

@ -0,0 +1,122 @@
-- Fuzzy Finder (files, lsp, etc)
-- NOTE: Plugins can specify dependencies.
--
-- The dependencies are proper plugin specifications as well - anything
-- you do for a plugin at the top level, you can do for a dependency.
--
-- Use the `dependencies` key to specify the dependencies of a particular plugin
return {
{
'nvim-telescope/telescope.nvim',
event = 'VimEnter',
branch = '0.1.x',
dependencies = {
'nvim-lua/plenary.nvim',
{ -- If encountering errors, see telescope-fzf-native README for installation instructions
'nvim-telescope/telescope-fzf-native.nvim',
-- `build` is used to run some command when the plugin is installed/updated.
-- This is only run then, not every time Neovim starts up.
build = 'make',
-- `cond` is a condition used to determine whether this plugin should be
-- installed and loaded.
cond = function()
return vim.fn.executable 'make' == 1
end,
},
{ 'nvim-telescope/telescope-ui-select.nvim' },
-- Useful for getting pretty icons, but requires a Nerd Font.
{ 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font },
},
config = function()
-- Telescope is a fuzzy finder that comes with a lot of different things that
-- it can fuzzy find! It's more than just a "file finder", it can search
-- many different aspects of Neovim, your workspace, LSP, and more!
--
-- The easiest way to use Telescope, is to start by doing something like:
-- :Telescope help_tags
--
-- After running this command, a window will open up and you're able to
-- type in the prompt window. You'll see a list of `help_tags` options and
-- a corresponding preview of the help.
--
-- Two important keymaps to use while in Telescope are:
-- - Insert mode: <c-/>
-- - Normal mode: ?
--
-- This opens a window that shows you all of the keymaps for the current
-- Telescope picker. This is really useful to discover what Telescope can
-- do as well as how to actually do it!
-- [[ Configure Telescope ]]
-- See `:help telescope` and `:help telescope.setup()`
require('telescope').setup {
-- You can put your default mappings / updates / etc. in here
-- All the info you're looking for is in `:help telescope.setup()`
--
-- defaults = {
-- mappings = {
-- i = { ['<c-enter>'] = 'to_fuzzy_refine' },
-- },
-- },
pickers = {
colorscheme = {
enable_preview = true, -- Themes preview
},
},
extensions = {
['ui-select'] = {
require('telescope.themes').get_dropdown(),
},
},
}
-- Enable Telescope extensions if they are installed
pcall(require('telescope').load_extension, 'fzf')
pcall(require('telescope').load_extension, 'ui-select')
-- See `:help telescope.builtin`
local builtin = require 'telescope.builtin'
vim.keymap.set('n', '<leader>sh', builtin.help_tags, { desc = '[S]earch [H]elp' })
vim.keymap.set('n', '<leader>sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' })
vim.keymap.set('n', '<leader>sf', builtin.find_files, { desc = '[S]earch [F]iles' })
vim.keymap.set('n', '<leader>sS', builtin.builtin, { desc = '[S]earch [S]elect Telescope' })
vim.keymap.set('n', '<leader>sw', builtin.grep_string, { desc = '[S]earch current [W]ord' })
vim.keymap.set('n', '<leader>sg', builtin.live_grep, { desc = '[S]earch by [G]rep' })
vim.keymap.set('n', '<leader>sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' })
vim.keymap.set('n', '<leader>sr', builtin.resume, { desc = '[S]earch [R]esume' })
vim.keymap.set('n', '<leader>s.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
vim.keymap.set('n', '<leader><leader>', function()
builtin.buffers { sort_mru = true, ignore_current_buffer = true }
end, { desc = '[ ] Find etisting buffers' })
vim.keymap.set('n', '<leader>st', ':Telescope colorscheme<CR>', { desc = '[S]earch [T]hemes' })
-- Slightly advanced example of overriding default behavior and theme
vim.keymap.set('n', '<leader>/', function()
-- You can pass additional configuration to Telescope to change the theme, layout, etc.
builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
-- winblend = 10,
previewer = false,
})
end, { desc = '[/] Fuzzily search in current buffer' })
-- It's also possible to pass additional configuration options.
-- See `:help telescope.builtin.live_grep()` for information about particular keys
vim.keymap.set('n', '<leader>s/', function()
builtin.live_grep {
grep_open_files = true,
prompt_title = 'Live Grep in Open Files',
}
end, { desc = '[S]earch [/] in Open Files' })
-- Shortcut for searching your Neovim configuration files
vim.keymap.set('n', '<leader>sn', function()
builtin.find_files { cwd = vim.fn.stdpath 'config' }
end, { desc = '[S]earch [N]eovim files' })
end,
},
}

View file

@ -0,0 +1,207 @@
-- You can easily change to a different colorscheme.
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
-- Cмена тем тут сделана уёбищно
-- Чтоб сменить стандартную тему, надо раскомментировать vim.cmd.colorscheme пад именем темы
-- и закомментировать это же у прошлой темы
-- В lazy.nvim параметр priority определяет порядок загрузки плагинов.
-- Чем выше значение priority, тем раньше загружается плагин.
-- Это особенно важно для тем, поскольку они часто требуют загрузки до других плагинов,
-- чтобы корректно применить стили.
-- https://dotfyle.com/neovim/colorscheme/top
-- Убедитесь, что Sonokai установлен через lazy.nvim или другой менеджер
local variants = { 'default', 'atlantis', 'andromeda', 'shusia', 'maia', 'espresso' }
-- Создаем псевдонимы для каждой темы
for _, variant in ipairs(variants) do
local alias = 'sonokai-' .. variant
vim.api.nvim_create_user_command('Colorscheme' .. variant, function()
vim.g.sonokai_style = variant
vim.cmd 'colorscheme sonokai'
end, {})
-- Регистрируем в Neovim как отдельный colorscheme
vim.api.nvim_set_hl(0, alias, {})
vim.cmd(string.format("autocmd ColorSchemePre %s let g:sonokai_style = '%s' | colorscheme sonokai", alias, variant))
end
return {
{
'folke/tokyonight.nvim',
priority = 1000,
init = function()
-- 'tokyonight-storm', 'tokyonight-moon', 'tokyonight-day', 'tokyonight-night'
-- vim.cmd.colorscheme 'tokyonight-night'
vim.cmd.hi 'Comment gui=none' -- Убрать курсив у коммента в коде
end,
},
{
'rose-pine/neovim',
name = 'rose-pine',
priority = 1000,
init = function()
-- 'rose-pine-moon', 'rose-pine-main', 'rose-pine-dawn'
-- vim.cmd.colorscheme 'rose-pine-main'
end,
},
{
'loctvl842/monokai-pro.nvim',
priority = 1000,
config = function()
-- 'monokai-pro', 'monokai-pro-classic', 'monokai-pro-default', 'monokai-pro-machine',
-- 'monokai-pro-octagon', 'monokai-pro-spectrum', 'monokai-pro-ristretto'
-- vim.cmd.colorscheme 'monokai-pro'
end,
},
{
'catppuccin/nvim',
name = 'catppuccin',
priority = 1000,
config = function()
-- 'catppuccin', 'catppuccin-latte', 'catppuccin-frappe',
-- 'catppuccin-macchiato', 'catppuccin-mocha'
-- vim.cmd.colorscheme 'catppuccin'
end,
},
{
'rebelot/kanagawa.nvim',
priority = 1000,
config = function()
-- 'kanagawa-wave', 'kanagawa-dragon', 'kanagawa-lotus',
-- vim.cmd.colorscheme 'kanagawa-dragon'
end,
},
{
'EdenEast/nightfox.nvim',
priority = 1000,
config = function()
-- 'nightfox', 'dayfox', 'dawnfox', 'duskfox'
-- 'nordfox', 'terafox', 'carbonfox'
-- vim.cmd.colorscheme 'carbonfox'
end,
},
{
'AlexvZyl/nordic.nvim',
priority = 1000,
config = function()
-- vim.cmd.colorscheme 'nordic'
end,
},
----------------------------------------------------------
-- Гандоны не дают выбрать тему нормально --
-- Приходится конфиг переписывать ради выбора расцветок --
----------------------------------------------------------
{
'ellisonleao/gruvbox.nvim',
priority = 1000,
config = true,
-- opts = ...
init = function()
local colors = require('gruvbox').palette
colors.neutral_aqua = '#8bba7f'
colors.bright_red = '#f2594b'
colors.bright_green = '#a4ab43'
-- Default options:
require('gruvbox').setup {
terminal_colors = true, -- add neovim terminal colors
undercurl = true, -- underline errors
underline = true, -- underline links
bold = false, -- bold keywords
italic = {
strings = true,
emphasis = true, -- курсив выделения
comments = true,
operators = false,
folds = true, -- курсив для сворачиваемых блоков кода
},
strikethrough = true, -- зачёркиваниe удалённых или устаревших элементов
invert_selection = false,
invert_signs = false,
invert_tabline = false,
invert_intend_guides = false,
inverse = true, -- invert background for search, diffs, statuslines and errors
contrast = '', -- can be "hard", "soft" or empty string
palette_overrides = {},
overrides = {
LspReferenceText = { -- ссылки на элементы под курсором
bg = '#504945',
},
LspReferenceWrite = {
bg = '#504945',
},
LspReferenceRead = {
bg = '#504945',
},
String = {
fg = colors.neutral_aqua,
},
['@keyword.import.go'] = {
fg = colors.bright_red,
},
},
dim_inactive = false,
transparent_mode = false,
}
vim.cmd.colorscheme 'gruvbox'
end,
},
{
'sainnhe/gruvbox-material',
priority = 1000,
init = function()
-- 'hard', 'medium', 'soft'
vim.g.gruvbox_material_background = 'medium'
-- 'material', 'mix', 'original'
vim.g.gruvbox_material_foreground = 'mix'
-- 'grey', 'colored', 'highlighted'
vim.g.gruvbox_material_diagnostic_virtual_text = 'colored'
vim.g.gruvbox_material_diagnostic_line_highlight = 1
vim.g.gruvbox_material_diagnostic_text_highlight = 1
-- vim.g.gruvbox_material_inlay_hints_background = 'dimmed'
-- vim.g.gruvbox_material_better_performance = 1
-- vim.g.gruvbox_material_spell_foreground = 'colored'
-- vim.g.gruvbox_material_enable_bold = 1
-- vim.g.gruvbox_material_enable_italic = true
-- vim.cmd.colorscheme 'gruvbox-material'
end,
},
{
'sainnhe/everforest',
priority = 1000,
init = function()
-- 'hard', 'medium', 'soft'
vim.g.everforest_background = 'hard'
vim.g.everforest_better_performance = 1
-- vim.g.everforest_enable_italic = true
-- vim.cmd.colorscheme 'everforest'
end,
},
{
'sainnhe/sonokai',
priority = 1000,
init = function()
-- Очень разные темы
-- 'default', 'atlantis', 'andromeda', 'shusia', 'maia', 'espresso'
vim.g.sonokai_style = 'shusia'
vim.g.sonokai_better_performance = 1
-- vim.g.sonokai_enable_italic = true
-- vim.cmd.colorscheme 'sonokai'
end,
},
{
'sainnhe/edge',
priority = 1000,
init = function()
-- 'default', 'aura', 'neon'
vim.g.edge_style = 'default'
vim.g.edge_better_performance = 1
-- vim.g.edge_enable_italic = true
-- vim.cmd.colorscheme 'edge'
end,
},
}

View file

@ -0,0 +1,22 @@
-- Highlight todo, notes, etc in comments
-- NOTE: adding a note
-- PERF: fully optimised
-- TODO: What else?
-- TEST:
-- HACK: hmmm, this looks a bit funky
-- WARNING: ????
-- WARN:
-- FIXME:
-- FIX: this needs fixing
-- BUG: test
return {
{
'folke/todo-comments.nvim',
event = 'VimEnter',
dependencies = { 'nvim-lua/plenary.nvim' },
opts = {
-- signs = false
},
},
}

View file

@ -0,0 +1,85 @@
-- Highlight, edit, and navigate code
return {
{
'nvim-treesitter/nvim-treesitter',
dependencies = {
{
'nvim-treesitter/nvim-treesitter-context',
config = function()
require('treesitter-context').setup {
enable = true, -- Enable this plugin (Can be enabled/disabled later via commands)
multiwindow = false, -- Enable multiwindow support.
max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit.
min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit.
line_numbers = true,
multiline_threshold = 3, -- Maximum number of lines to show for a single context
trim_scope = 'outer', -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer'
mode = 'cursor', -- Line used to calculate context. Choices: 'cursor', 'topline'
-- Separator between context and content. Should be a single character string, like '-'.
-- When separator is set, the context will only show up when there are at least 2 lines above cursorline.
separator = nil,
zindex = 20, -- The Z-index of the context window
on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching
}
vim.keymap.set('n', 'gp', function()
require('treesitter-context').go_to_context(vim.v.count1)
end, { silent = true, desc = '[G]oto context ([P]arent)' })
end,
},
-- {
-- 'nvim-treesitter/nvim-treesitter-textobjects',
-- },
},
build = ':TSUpdate',
main = 'nvim-treesitter.configs', -- Sets main module to use for opts
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
opts = {
ensure_installed = {
'bash',
'c',
'cpp',
'diff',
'html',
'lua',
'luadoc',
'markdown',
'markdown_inline',
'query',
'vim',
'vimdoc',
'css',
'javascript',
'typescript',
'json',
'csv',
'go',
'nix',
'python',
'rust',
'sql',
'templ',
'toml',
'yaml',
'cmake',
'printf',
},
-- Autoinstall languages that are not installed
auto_install = true,
highlight = {
enable = true,
-- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules.
-- If you are experiencing weird indenting issues, add the language to
-- the list of additional_vim_regex_highlighting and disabled languages for indent.
additional_vim_regex_highlighting = { 'ruby' },
},
indent = { enable = true, disable = { 'ruby' } },
},
-- There are additional nvim-treesitter modules that you can use to interact
-- with nvim-treesitter. You should go explore a few and see what interests you:
--
-- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
-- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
-- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
},
}

View file

@ -0,0 +1,75 @@
-- Useful plugin to show you pending keybinds.
-- NOTE: Plugins can also be configured to run Lua code when they are loaded.
--
-- This is often very useful to both group configuration, as well as handle
-- lazy loading plugins that don't need to be loaded immediately at startup.
--
-- For example, in the following configuration, we use:
-- event = 'VimEnter'
--
-- which loads which-key before all the UI elements are loaded. Events can be
-- normal autocommands events (`:help autocmd-events`).
--
-- Then, because we use the `config` key, the configuration only runs
-- after the plugin has been loaded:
-- config = function() ... end
return {
{
'folke/which-key.nvim',
event = 'VimEnter', -- Sets the loading event to 'VimEnter'
opts = {
icons = {
-- set icon mappings to true if you have a Nerd Font
mappings = vim.g.have_nerd_font,
-- If you are using a Nerd Font: set icons.keys to an empty table which will use the
-- default which-key.nvim defined Nerd Font icons, otherwise define a string table
keys = vim.g.have_nerd_font and {} or {
Up = '<Up> ',
Down = '<Down> ',
Left = '<Left> ',
Right = '<Right> ',
C = '<C-…> ',
M = '<M-…> ',
D = '<D-…> ',
S = '<S-…> ',
CR = '<CR> ',
Esc = '<Esc> ',
ScrollWheelDown = '<ScrollWheelDown> ',
ScrollWheelUp = '<ScrollWheelUp> ',
NL = '<NL> ',
BS = '<BS> ',
Space = '<Space> ',
Tab = '<Tab> ',
F1 = '<F1>',
F2 = '<F2>',
F3 = '<F3>',
F4 = '<F4>',
F5 = '<F5>',
F6 = '<F6>',
F7 = '<F7>',
F8 = '<F8>',
F9 = '<F9>',
F10 = '<F10>',
F11 = '<F11>',
F12 = '<F12>',
},
},
-- Document existing key chains
spec = {
{ '<leader>c', group = '[C]ode', mode = { 'n', 'x' } },
-- { '<leader>d', group = '[D]ocument' },
{ '<leader>r', group = '[R]ename' },
{ '<leader>s', group = '[S]earch' },
{ '<leader>S', group = '[S]ession' },
{ '<leader>w', group = '[W]orkspace' },
{ '<leader>t', group = '[T]oggle' },
{ '<leader>g', group = '[G]olang' },
{ '<leader>gt', group = '[G]olang [T]ag' },
{ '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } },
},
},
},
}

View file

@ -0,0 +1,183 @@
-- Set <space> as the leader key
-- See `:help mapleader`
-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
-- Set to true if you have a Nerd Font installed and selected in the terminal
vim.g.have_nerd_font = true
-- [[ Setting options ]]
-- See `:help vim.opt`
-- NOTE: You can change these options as you wish!
-- For more options, you can see `:help option-list`
-- Make line numbers default
vim.opt.number = true
-- You can also add relative line numbers, to help with jumping.
vim.opt.relativenumber = true
-- Табуляция в 4 символа
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
-- Юзать пробелы вместо табов
vim.opt.expandtab = true
-- yaml lsp за меня решают сколько пробелов мне надо. Это фикс
-- Их параметры конфига для переназначения не работают. Пришлось костыль сделать
vim.cmd [[
autocmd FileType yaml setlocal shiftwidth=2 tabstop=2 softtabstop=2 expandtab
]]
-- Комментировать .proto код биндом
vim.api.nvim_create_autocmd('FileType', {
pattern = 'proto',
callback = function()
vim.bo.commentstring = '// %s'
end,
})
-- Комментировать .sql код биндом
vim.api.nvim_create_autocmd('FileType', {
pattern = 'sql',
callback = function()
vim.bo.commentstring = '-- %s'
end,
})
-- Enable mouse mode, can be useful for resizing splits for example!
vim.opt.mouse = 'a'
-- Don't show the mode, since it's already in the status line
vim.opt.showmode = false
-- greatest remap ever
vim.keymap.set('x', '<leader>p', '"_dP', { desc = '[P]aste' })
-- Sync clipboard between OS and Neovim.
-- Schedule the setting after `UiEnter` because it can increase startup-time.
-- Remove this option if you want your OS clipboard to remain independent.
-- See `:help 'clipboard'`
-- vim.schedule(function()
-- vim.opt.clipboard = 'unnamedplus'
-- end)
-- Use system clipboard via <leader>y/d, but Neovim clipboard via just y/d
vim.keymap.set('n', '<leader>y', '"+y', { desc = '[Y]ank to system clipboard' })
vim.keymap.set('v', '<leader>y', '"+y', { desc = '[Y]ank to system clipboard' })
-- vim.keymap.set('n', '<leader>Y', '"+Y', { desc = '[Y]ank to system clipboard' })
vim.keymap.set('n', '<leader>d', '"+d', { desc = '[D]elete to system clipboard' })
vim.keymap.set('v', '<leader>d', '"+d', { desc = '[D]elete to system clipboard' })
-- Change `K` hover documentation size
vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, {
-- border = 'rounded',
max_width = 80,
-- max_height = 15,
})
-- Move lines in visual mode
vim.keymap.set('v', '<A-j>', ":m '>+1<CR>gv=gv")
vim.keymap.set('v', '<A-Down>', ":m '>+1<CR>gv=gv")
vim.keymap.set('v', '<A-k>', ":m '<-2<CR>gv=gv")
vim.keymap.set('v', '<A-Up>', ":m '<-2<CR>gv=gv")
-- Enable break indent
vim.opt.breakindent = true
-- Save undo history
vim.opt.undofile = true
-- Disable swap file
vim.opt.swapfile = false
-- Settings for sessions
vim.o.sessionoptions = 'blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions'
-- Highlight a vertical line at the specified column to encourage keeping lines within this limit
vim.opt.colorcolumn = '100'
-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
vim.opt.ignorecase = true
vim.opt.smartcase = true
-- Keep signcolumn on by default
vim.opt.signcolumn = 'yes'
-- Decrease update time
vim.opt.updatetime = 250
-- Decrease mapped sequence wait time
-- Displays which-key popup sooner
vim.opt.timeoutlen = 300
-- Configure how new splits should be opened
vim.opt.splitright = true
vim.opt.splitbelow = true
-- Sets how neovim will display certain whitespace characters in the editor.
-- See `:help 'list'`
-- and `:help 'listchars'`
vim.opt.list = true
vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '' }
-- Preview substitutions live, as you type!
vim.opt.inccommand = 'split'
-- Show which line your cursor is on
vim.opt.cursorline = true
-- Minimal number of screen lines to keep above and below the cursor.
vim.opt.scrolloff = 10
-- [[ Basic Keymaps ]]
-- See `:help vim.keymap.set()`
-- Clear highlights on search when pressing <Esc> in normal mode
-- See `:help hlsearch`
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
-- Diagnostic keymaps
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
-- is not what someone will guess without a bit more experience.
--
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
-- or just use <C-\><C-n> to exit terminal mode
vim.keymap.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' })
-- TIP: Disable arrow keys in normal mode
-- vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
-- vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
-- vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
-- vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')
-- Keybinds to make split navigation easier.
-- Use CTRL+<hjkl> to switch between windows
--
-- See `:help wincmd` for a list of all window commands
vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
-- Use CTRL+arrows to switch between windows
vim.keymap.set('n', '<C-Left>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
vim.keymap.set('n', '<C-Right>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
vim.keymap.set('n', '<C-Down>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
vim.keymap.set('n', '<C-Up>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
-- [[ Basic Autocommands ]]
-- See `:help lua-guide-autocommands`
-- Highlight when yanking (copying) text
-- Try it with `yap` in normal mode
-- See `:help vim.highlight.on_yank()`
vim.api.nvim_create_autocmd('TextYankPost', {
desc = 'Highlight when yanking (copying) text',
group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
callback = function()
vim.highlight.on_yank()
end,
})

61
nvim/shit.md Normal file
View file

@ -0,0 +1,61 @@
Тут будут куски текста из разных источников. Я не хочу засирать ими свои заметки, кину сюда
## На будущее
Fix C/C++ - https://www.reddit.com/r/NixOS/comments/1d7zvgu/nvim_cant_find_standard_library_headers/
Запишу некоторые комменты из этого поста на реддите
---
Haven't seen it mentioned, so here is an alternative option.
I use nix-ld which basically makes the listed libraries available in their expected locations.
The simple config below fixed Mason for me. it also works with Doom Emacs so it's a more general solution. You can add more packages to the list and any libs will be made available for all external apps.
```nix
nix-ld = {
enable = true;
libraries = with pkgs; [
stdenv.cc.cc
];
};
```
Since then, I have also been able to get X-Plane running natively by adding missing libraries to the list. It can be a bit tedious figuring out which libraries are missing and what packages need to be added, but it only needs to be done once. To figure out what libraries an app needs and which packages they belong to, do the following:
run nix-index (takes about 5 minutes) which you only need to do the first time to create a file database of nixpkgs.
Find the libraries an executable needs and whether they are found or missing. ldd ./your_executable_file
Use nix-locate to find packages that contain that library. For example: nix-locate -w ./libX11.so.6 --top-level It may show several packages.. pick the one that looks most appropriate. In this case it was xorg.libX11
Add that package to the nix-ld libraries list.
Once all libraries are added, rebuild your system.
You may need to reboot or log out and back in again before ldd will find the libraries.
The nice thing about nix-ld, is once you have a nice collection of common libraries setup, many apps will just work like on other distros.
---
Hello, sorry for the late response. I've been using that nix-ld setup for Rust, Lua, and Bash, LSPs for a while. Funnily enough it was thanks to one of your previous comments that I first tried it.
For any of the mentioned languages I didn't have to put anything into nix-ld, even the clangd LSPs in Mason installed correctly, literally the only issue is that NVim doesn't see the standard library headers. I've tried putting every package in there: clang, clang-tools, clangStdenv, libclang, and ccls.
I'm gonna be completely honest, I'm not sure I understand the instructions, especially the ldd part, I'm not sure what executable I should point to with that command.
Are there any libraries that you'd recommend I'd put in nix-ld? Like a base line?
Also as a further question. I'm not using NixOS to manage my NVim config whatsoever, meaning I just put my the nvim config into the ~/.config directory, could that be the issue, or is that ok as a practice?
---
Yeah, I'm a bit of a nix-ld fanboy as it saved NixOS for me when I was feeling like giving up.
I gotta admit, I'm not a developer, so I'm not an expert on dev tools. Maybe try creating a dev shell with nix (or a flake)? You can specify exactly what libraries you need and they should be available when you instantiate the shell.
This post on github may give you some ideas: https://github.com/NixOS/nixpkgs/issues/92739#issuecomment-861248463. It's a bit old, but it may be worth trying. Try running nvim inside of the dev shell.. maybe the standard libraries will be available then?

View file

@ -1,9 +1,9 @@
Тут будут файлы, которые через nix нельзя сделать нормально. Например некоторые симлинки перезаписываются почти пустыми файлами, если делать их через nix. Так как nix не имеет возможности один раз именно создать файл, а не симлинк, мне приходится делать этот скрипт
Ебучий конфиг для thunar всегда будет класть хуй на мои настройки. Всегда эта блядь будет удалять мои настройки и заменять пустыми, чтоб я восстанавливал всё через gui
Конфиг для thunar всегда будет забивать на мои настройки. Всегда будет удалять мои настройки и заменять пустыми, чтоб я восстанавливал всё через gui
Конфиг для `strawberry` может меняться. Так что прям фул бекапить его мб смысла мало. Надо будет потом симлинк сделать себе в бекапы на ссд (`strawberry` игнорит все мои конфиги, надо через гуи настраивать)
## Применение скрипта
Когда система готова и все симлинки отправлены куда надо, этот скрипт именно скопирует нужные файлы в нужные каталоги. В теории, тогда программы не будут перезаписывать, а будут дополнять этот файл. Но это не точно. Разрабы далбаёбы
Когда система готова и все симлинки отправлены куда надо, этот скрипт именно скопирует нужные файлы в нужные каталоги. В теории, тогда программы не будут перезаписывать, а будут дополнять этот файл. Но это не точно. Разрабы далбаёбы

View file

@ -1,9 +1,9 @@
#!/usr/bin/env bash
mkdir -p $HOME/.config/xfce4/
cp $HOME/nixos-private-dots/shit/helpers.rc $HOME/.config/xfce4/helpers.rc
cp $HOME/nixos-private-dots/shit/mimeapps.list $HOME/.config/mimeapps.list
cp $HOME/nixos_dots/shit/helpers.rc $HOME/.config/xfce4/helpers.rc
cp $HOME/nixos_dots/shit/mimeapps.list $HOME/.config/mimeapps.list
cp -r $HOME/nixos-private-dots/shit/Kvantum $HOME/.config/Kvantum
cp -r $HOME/nixos-private-dots/shit/qt5ct $HOME/.config/qt5ct
cp -r $HOME/nixos-private-dots/shit/qt6ct $HOME/.config/qt6ct
cp -r $HOME/nixos_dots/shit/Kvantum $HOME/.config/Kvantum
cp -r $HOME/nixos_dots/shit/qt5ct $HOME/.config/qt5ct
cp -r $HOME/nixos_dots/shit/qt6ct $HOME/.config/qt6ct

View file

@ -6,7 +6,7 @@ application/xml=nvim.desktop;codium.desktop
application/yaml=nvim.desktop;codium.desktop
image/*=com.interversehq.qView.desktop;imv.desktop
image/apng=com.interversehq.qView.desktop;imv.desktop
image/avif=com.interversehq.qView.desktop;imv.desktop
image/avif=imv.desktop
image/gif=com.interversehq.qView.desktop;imv.desktop
image/jpeg=;com.interversehq.qView.desktop;imv.desktop;
image/pjpeg=com.interversehq.qView.desktop;imv.desktop
@ -56,7 +56,7 @@ audio/x-mpegurl=mpv.desktop
audio/x-opus+ogg=mpv.desktop
image/*=com.interversehq.qView.desktop;imv.desktop
image/apng=com.interversehq.qView.desktop;imv.desktop
image/avif=com.interversehq.qView.desktop;imv.desktop
image/avif=imv.desktop
image/gif=com.interversehq.qView.desktop;imv.desktop
image/jpeg=com.interversehq.qView.desktop;imv.desktop
image/pjpeg=com.interversehq.qView.desktop;imv.desktop