Copy pc1 branch to dev-qemu

This commit is contained in:
Buliway 2025-12-20 20:11:35 +03:00
parent 03cd425da2
commit 0698a43db2
52 changed files with 980 additions and 1381 deletions

View file

@ -1,107 +0,0 @@
Тут будут описаны все бинды системы. Но мне может быть лень актуализировать эту огромную таблицу, так что лучше читай конфиги.
Возможно бинды для скринов придётся настроить руками в ksnip
# Минимально необходимые бинды
Тут будет мелкий список биндов, с которым можно начать. Бинды из секции "все бинды" могут повторяться
Клавиша `Super` это клавиша `Win`
- `Super + A` - Запускатор приложений
- `Super + Q` - Закрыть приложение (если добавить shift, то это kill приложения, если оно зависло и не закрывается)
- `Super + 0-9` - Переключить воркспейс (если добавить shift, то кидает активное окно на указанный воркспейс)
- `Super + Esc` - Переключиться на прошлый воркспейс, удобно
- `Super + T` - Открыть терминал (если добавить shift, то получится floating терминал, а если ctrl, то откроется kitty вместо alacritty)
- `Super + ПКМ` - Менять размер окна, на котором зажал ПКМ и водишь мышкой
- `Super + ЛКМ` - Двигать окно, на котором зажал ЛКМ
- `Super + F` - Делает окно flotaing и обратно tiling при повторном нажатии (если забагалось и делает фулскрин, то добавь shift, чтоб переключить в tiling)
- `Super + Стрелки` - Меняет фокус приложения в указанном направлении
- `Дальняя боковая кнопка мыши` - Скрол. Зажимаешь эту кнопку и водишь мышкой по столу в ту сторону, куда хочешь скролить
- `CapsLock` - Сменить язык на клавиатуре (если нужен просто капс, то жми с shift)
# Все бинды
Клавиша `Super` это клавиша `Win`
| Bspwm | Описание |
| --------------------------------- | ------------------------------------------------------------------------------------------- |
| `Super + L` | Lock screen |
| `Super + Q` | Quit. Выключить приложение |
| `Super + Shift + Q` | Kill. Если приложение не отвечает, то убить его |
| `Super + F` | Floating toggle |
| `Super + Shift + F` | Tiled toggle |
| `Super + Enter` | Fullscreen toggle |
| `Super + Esc` | Прошлый воркспейс. Желательно внутри одного монитора |
| `Super + ЛКМ` | Переместить окно |
| `Super + ПКМ` | Ресайзить окно |
| `Super + Arrows` | Менять фокус приложения в указанном направлении |
| `Super + 0-9` | Переключить воркспейс на 1-10. Если они общие на все моники, то добавить F1-F12 для 11-22 |
| `Super + Shift + 0-9` | Перекинуть активное окно на воркспейс. Желательно silent, чтоб меня не перекидывало к проге |
| `Super + Ctrl + Down` | Переключает на первый пустой воркспейс |
| `Super + Ctrl + Left/Right` | Переключает на предыдущий/следующий воркспейс. То есть делает -1 или +1 от текущего |
| `Super + Ctrl + Alt + Down` | Свапает активное окно с самым большим на экране |
| `Super + Ctrl + Alt + Left/Right` | Перекидывает активное окно на предыдущий/следующий воркспейс и следует за ним |
| `Super + Alt + Arrows` | Move floating window |
| `Super + Shift + Arrows` | Resize window на 30 пикселей в указанном направлении наружу |
| `Super + Shift + Alt + Arrows` | Resize window на 30 пикселей в указанном направлении внутрь |
| `Super + Shift + Ctrl + Arrows` | Перемещает активное окно в указанном направлении |
| `Super + S` | Split toggle. Меняет позиционирование с горизонтального на вертикальный и обратно. |
| `Super + Ctrl + Shift + R` | Make sxhkd reload its config files |
| `Super + Alt + Ctrn + Shift + R` | Restart bspwm |
| `Super + Alt + Ctrn + Shift + Q` | Quit bspwm |
| Rofi | Описание | Работает? |
| ------------------- | ---------------------------------------------------------------------------------------------- | --------- |
| `Super + A` | Applications. Запускатор софта | Да |
| `Super + C` | Calculator имбовый. Можно даже написать `5600 USD to BTC` или `500 + 25%`. | Да |
| `Super + P` | Passwords. Пароли из утилиты pass | Да |
| `Super + V` | История буфера обмена. Как ctrl+v, но через win. | Да |
| `Super + Backspace` | PowerMenu. Выключение пк | Да |
| `Super + Tab` | Как alt+tab, переключение окон. На нужный воркспейс само перекинет | Да |
| `Super + Alt + T` | Timer. Думаю сделать через утилиту timer |нет|
| `Super + Shift + N` | Notification history. История оповещений. Мб сделать только в баре кнопку? Мб не делать вообще |нет|
| Applications | Описание | Работает? |
| -------------------------- | ----------------------------------------- | --------- |
| `Super + B` | Browser LibreWolf. Основа | Да |
| `Super + Shift + B` | Browser Firefox. Паблик активность | Да |
| `Super + Shift + Ctrl + B` | Browser Chromium. Пусть будет | Да |
| `Super + N` | Note taking app (obsidian) | Да |
| `Super + E` | Explorer. Thunar file manager | Да |
| `Super + I` | IDE, text editor | Да |
| `Super + M` | Monitor of resources (btop) | Да |
| `Super + G` | Goals. Todo manager. Task tracker | Да |
| `Super + Shift + C` | Color picker. Получить hex в буфер обмена | Да |
| `Super + Ctrl + C` | Color picker. Получить rgb в буфер обмена | Да |
| Terminal | Описание | Работает? |
| -------------------------- | ---------------------------------------------------------------------------- | --------- |
| `Super + T` | Terminal основной | Да |
| `Super + Shift + T` | Floating Terminal основной в центре экрана с размерами треть на треть экрана | Да |
| `Super + Ctrl + T` | Terminal запасной | Да |
| `Super + Shift + Ctrl + T` | Floating Terminal запасной в центре экрана с размерами треть на треть экрана | Да |
| Колдунские кнопки | Описание | Работает? |
| ----------------------- | ---------------------- | --------- |
| `XF86AudioMute` | Toggle audio mute |хз|
| `XF86AudioMicMute` | Toggle microphone mute |хз|
| `XF86AudioLowerVolume` | Decrease volume | Да |
| `XF86AudioRaiseVolume` | Increase volume | Да |
| `XF86AudioPlay` | Play/pause |хз|
| `XF86AudioPause` | Play/pause |хз|
| `XF86AudioNext` | Next track |хз|
| `XF86AudioPrev` | Previous track |хз|
| `XF86MonBrightnessUp` | Increase brightness |хз|
| `XF86MonBrightnessDown` | Decrease brightness |хз|
| Not sxhkd | Описание | Работает? |
| --------------- | ---------------------- | --------- |
| `Print` | Выделить область | Да |
| `Print + Alt` | Все мониторы целиком | Да |
| `Print + Ctrl` | Активный монитор | Да |
| `Print + Shift` | Активное окно | Да |
| `CapsLock` | Switch keyboard layout | Да |
Так же есть бинд на зажим дальней боковой кнопки мыши. Если эту кнопку нажимать, то она работает как обычно. Если её зажать и начать двигать мышку, то вместо движения курсора будет плавный скрол. Обычно такое делают на трекболах без колеса мыши, но я люблю этот метод скрола на любом девайсе. Можно скролить с нужной скоростью и точностью куда надо без долгого кручения колеса.

320
NOTES.md
View file

@ -1,320 +0,0 @@
Тут будут всякие заметки и доп информация по работе с NixOS
Если не хочешь обновлять систему, но надо скачать пакеты последней версии, то используй `upd nixpkgs2` и перед именем пакета добавь `pkgs2.`. Команда в терминале обновить второй unstable репозиторий. А префикс `pkgs2.пакет` говорит "скачай `пакет` из репозитория `pkgs2`".
Если ты обновил всю систему, но некоторые программы сломались, то можно не откатывать всю систему, а попробовать добавить к ним префикс `spkgs.`. Это скачает их из стабильной ветки репозитория
В стоке используется браузер `LibreWolf`, который имеет неприятные настройки безопасности. Мне проще выключить некоторые настройки безопасности в нём, чем выключить лишний шлак в `Firefox`. `Chromium` стоит как запаска для некоторых сайтов, как основа он мне не нравится. Написать какие настройки безопасности я выключил в `LibreWolf` мне лень. Как минимум офнул удаление истории при каждом ребуте. Но могу сказать какие настройки я использую в `Firefox` и `LibreWolf`, связанные просто с удобством. Они в таблице ниже.
| Настройка about:config | Значение | Описание |
| --------------------------------------- | -------- | ----------------------------------------------------- |
| browser.bookmarks.openInTabClosesMenu | false | Не закрывать меню закладок при открытии ссылки |
| browser.tabs.loadBookmarksInBackground | true | Не перекидывать на закладку, открытую в новой вкладке |
| layout.css.has-selector.enabled | true | Для кастом стилей |
| accessibility.typeaheadfind.enablesound | false | Чтоб не булькало на ухо |
| full-screen-api.warning.timeout | 0 | Чтоб фулскрин popup не вылазил |
| browser.tabs.insertAfterCurrent | true | Чтоб новые вкладки были справа от нынешней |
Если хочешь сменить стоковый браузер, то мб надо поменять переменную в `./nixos/home.nix`. Если не помогает, то допом команда в терминале (замени `librewolf` на нужный браузер):
```sh
xdg-settings set default-web-browser librewolf.desktop
```
Смена тем сейчас работает криво для qt приложений. Можно автоматизировать gtk темы, но qt придётся руками добавлять/менять. Возможно фикс уже вышел, но мне лень проверять. У меня везде `gruvbox` и менять не планирую.
Чтоб задать аватарку юзера в SDDM (это меню ввода пароля при запуске пк), надо отправить png файл такой командой:
```sh
sudo cp image.png /var/lib/AccountsService/icons/username
```
То есть именно `username`, без `.png` в конце
Настройки смены языка, тачпада и мыши можно найти в файле `./modules/nixos/xserver.nix`. У меня там стоит необычный скрол мышкой. Я не использую колесо мыши. Я зажимаю дальнюю боковую кнопку мыши и двигаю мышку по столу. В какую сторону двигаешь мышку, в ту сторону и будет скрол. Так можно удобно регулировать скорость скрола и быстро оказываться где надо. Язык я меняю на капслок. Для активации капса надо жать шифт капслок. В этом же файле есть **настройка для amd видеокарт, которую надо выключить, если у тебя nvidia**. Не знаю надо ли что-то настраивать для nvidia после этого.
В стоке выключены следующие конфиги (их можно включить в `bundle.nix` в разных каталогах):
- `filesystem.nix` - Конектить внешние диски автоматически. В стоке выкл, потому что у каждого свои айдишники дисков.
- `hibernate.nix` - Настройки гибернации. В стоке выкл, потому что у каждого свои айдишники файла подкачки.
- `vr.nix` - Пакеты для работы виара на linux. Нужно очень мало кому, потому выкл
- `vscode.nix` - Настройки vscode. Большинство предпочтёт настраивать его по старинке руками, а не через геморный конфиг
- `symlinks.nix` - Настройки симлинков. Не всем надо, плюс у каждого свои симлинки. Потому выкл в стоке
- Файл подкачки - У меня он в `/etc/nixos/hardware-configuration.nix`, который у каждого свой. Потом вынесу это в дотсы.
Хоть тут и установлен `i3wm`, но он не настроен. Можешь удалить его из конфига, чтоб место не занимал. Я потом займусь его настройкой.
Если обновил систему и спустя время с ней всё окей, всё стабильно, то советую запускать сборщик мусора. При обновлении nixos не удаляет старые пакеты, чтоб ты мог откатиться назад, в случае поломок, даже если нет интернета. Чтоб удалить пакеты, которые больше не используются, можно использовать команду `grb` (это мой алиас в zsh).
Баш скрипты требуют другой шебанг в начале. Обязательно используй `#!/usr/bin/env bash` вместо `#!/bin/bash`. Первый вариант будет работать на любой OS с bash, а вот второй вариант ломается.
Не юзай ИИ для поиска информации по NixOS, он всегда выдумывает параметры. Сколько бы я не тестил разные ИИ для настройки NixOS, они даже базовые вещи не могут дать, тут слишком часто всё меняется и в интернете слишком мало информации по данной OS, чтоб ИИ давал хоть что-то рабочее
## TODO
Надо сделать декларативную QT тему. Сейчас у меня есть файлы в каталоге `shit`. Их я могу скопировать в `~/.config`, нужная переменная окружения в `home.nix` стоит и всё заработает. Но это не то, что я хочу. Другой человек не сможет это юзать мб. Потому что там в коде написан путь `/home/buliway`. Не всем же быть буливеями. Хотя это изи исправляется, потом сделаю. Но пока что я не хочу тратить время на настройку QT, который нормально настроить невозможно.
Надо добавить в polybar отображение:
- Заряд аккума. Сейчас проверить негде. Мб взять готовый вариант [тут](https://github.com/Zproger/bspwm-dotfiles/blob/main/config/polybar/modules.ini#L148)
- Яркость экрана. Тоже ноуты. Хз надо ли
- Температура и нагрузка на гп
- Температура цп
- Блютуз. Не знаю отображается ли он сейчас. Не могу проверить, негде
Установить и настроить:
- i3wm с его экосистемой софта. Чтоб тот же polybar был лишь на bspwm, а на i3 работал i3bar
- Sway. Для тестов wayland на nixos
- Hyprland. Для тестов wayland на nixos
## Описание
Железо, на котором работают мои дотсы:
- CPU: i5 10400f
- GPU: AMD RX6600
- RAM: 32gb (2x16) ddr4 3200
- Motherboard: MSI Z590-A PRO
- Два монитора 1920x1080 на 165 и 100 герц
Основной набор софта
Изначально я написал конфиги для `bspwm` + `polybar`. Но потом хочу затестить другию WM. В теории между ними можно переключаться при запуске пк, так что проблем быть не должно. Если какой-то WM надо выключить, чтоб не засирать систему, то это можно делать в `modules/home-manager/bundle.nix`
| Software | Name |
| ------------ | -------------------------------- |
| WM | bspwm |
| Hotkeys | sxhkd |
| Terminal | Alacritty, Kitty |
| Multiplexer | Zellij |
| Shell | oh-my-zsh with many plugins |
| Shell Prompt | Starship |
| Apps/Menus | Rofi |
| Bar | Polybar |
| ScreenLock | betterlockscreen |
| Notification | Dunst |
| Files | Thunar, Ranger |
| Images | qView, imv, feh |
| Video | mpv with plugins |
| Music | Strawberry, mpv |
| Browsers | Librewolf, Firefox, Chromium |
| Social | Discord, Telegram, Steam |
| Audio | PipeWire, pavucontrol |
| Color Theme | Gruvbox Dark Medium |
| Icons | Papirus Dark |
| DM | SDDM |
| Compositor | Нет. Мне не нужны анимации и прозрачность |
| Screenshare | OBS, Screenkey, ksnip |
| Code Editor | Neovim, VSCode |
| Video Editor | Blender |
| Fetch | fastfetch |
| Torrent | qBittorrent |
| Email client | Thunderbird |
| Color picker | xcolor, gcolor3 |
| Docs/eBook | Evince, LibreOffice, Calibre |
| Design | Gimp, Krita |
| Productivity | Obsidian, Planify |
Чтоб узнать sha256 для гитхаб репы, пишем в терминал эту команду:
```sh
nix-prefetch-git link
```
Если хочется поменять цвета или шрифты в конфиге какой-то программы, но при ребилде получается конфликт, то дело в Stylix, который управляет системной темой и сам везде ставит шрифты и цвета. Если хочется заменить, не трогая stylix, то надо добавить `lib.mkForce` перед значением. Например так:
```nix
font = lib.mkForce "JetBrainsMono Nerd Font 11";
```
Узнать localhost виртуалки, чтоб конектиться по ssh:
```sh
ip a
```
В бутменю биоса надо ставить не ссд диск, а `nixos boot`. У меня иначе не работало
## Нюансы с JetBrains Toolbox
В стоке тулбокс может всегда разлогинивать. Я не проверял, сразу сделал как просили на вики, чтоб это исправить.
Надо скачать тулбокс (уже стоит), запустить его один раз, а потом:
- Изменить `~/.local/share/JetBrains/Toolbox/.storage.json` и добавить строку `"preferredKeychain": "linux-fallback"` (у меня было в стоке)
- Залогиниться как обычно, но остановиться после того, как JetBrains вебсайт откроется
- Перезапустить JetBrains Toolbox, открыть настройки и нажать `"Troubleshoot..."`
- Следуй инструкциям по ручному входу в систему, как указано в руководстве
После выполнения этих действий JetBrains Toolbox сохранит учетные данные пользователя в зашифрованном файле (со статическим ключом) по адресу `~/.local/share/JetBrains/Toolbox/.securestorage`. Если этого не сделать, JetBrains Toolbox не сможет получить учетные данные через `libsecret` (из-за bwrap sandboxing?) и постоянно уведомляет пользователя о необходимости повторной авторизации.
Если что-то не работает, то мб помогут эти ссылки:
- https://nixos.wiki/wiki/Jetbrains_Tools
- https://github.com/NixOS/nixpkgs/issues/240444
## Настройки для игр
Я установил `MangoHud`, `gamemode` и `gamescope`. Ещё есть `proton-ge` в steam. Всё это можно по разному комбинировать между собой.
### MangoHud
Мониторинг ресурсов для vulkan и opengl приложений. Показывает fps и нагрузку на пк, включая температуры цп и гп. Можно использовать как полноценные бенчмарки, логируя всю его инфу и визуализируя данные другой утилитой. Чтоб использовать, надо написать `mangehud приложение`, если запускать через терминал, или `mangohud %command%`, если использовать через steam. Если используется вместе с `gamescope`, то надо писать `gamescope --mangoapp`.
### gamemode
Оптимизатор линукса для игр. В параметры запуска игры в стиме пишешь `gamemoderun %command%` и всё работает.
### gamescope
SteamOS session compositing window manager. Можно назвать мини wm внутри wm (хотя можно и в tty запустить, без стороннего wm). Не совсем понимаю когда его надо использовать. Иногда, если у игры есть проблемы с обычным linux, то она может нормально запускаться через `gamescope`
### Параметры запуска Steam
Если в параметры запуска захочется добавить что-то помимо того, что я напишу, то надо учитывать порядок написания. Как я понял, если надо используется переменная, то её надо писать в начале. Например, если в игре не работает печать на русском языке, то надо в начало добавить `LC_ALL="ru_RU.UTF-8"`. Если же речь про стандартные параметры запуска стима, по типу `-dev` или `-novid`, то их надо писать после `%command%`. Слово `%command%` скорее всего является игрой, то есть команда для запуска игры. То есть синтаксис как в обычном терминале. Сначала переменные окружения, потом команда, потом параметры запуска через `-параметр`.
Параметры запуска для игр, чтоб использовать все доступные бафы, что я сделал:
Параметр запуска без использования gamescope - `mangohud gamemoderun %command%`.
Параметр запуска с использованием gamescope `gamescope --mangoapp gamemoderun %command%`.
Вот пример параметров запуска для Apex Legends: `mangohud gamemoderun %command% +exec autoexec.cfg -dev`
FSR в `proton-ge` включается только в фулскрине через `WINE_FULLSCREEN_FSR=1`. Регулировать резкость можно через переменную окружения `WINE_FULLSCREEN_FSR_STRENGTH=N`, где N - это уровень резкости изображения от 0 до 5. Чем выше значение, тем меньше резкость. По умолчанию установлено значение "2", рекомендуют использовать значение "3".
## Настройка мониторов
На иксах второй монитор может не работать или все мониторы могут сидеть на 60 герц. Изменить это один раз недостаточно, после ребута сбросится. Не знаю нормального способа, кроме как добавить настройки в автозапуск. Ниже пример того, как произвести начальную настройкy:
```sh
# Увидеть список мониторов
xrandr
# Изменить настройки для основного монитора. Мб вместе с --primary для основного монитора
xrandr --output DisplayPort-2 --mode 1920x1080 --rate 165
# Изменить настройки для второго (правого) монитора
xrandr --output HDMI-A-0 --mode 1920x1080 --rate 100 --right-of DisplayPort-2
```
Есть ещё такая штука - https://github.com/phillipberndt/autorandr . Но мне лень с ней разбираться
## Системная тема на всех вебсайтах
Если используется популярная системная тема, то, скорее всего, её можно выбрать в браузерном расширении DarkReader, чтоб все сайты в интернете выглядели как системная тема. Может быть я потом займусь синхронизацией темы stylix с настройками DarkReader
## Запуск Waydroid на X11
Один раз написать в терминале `waydroid init`
- Запустить `weston`
- В его терминале написать `waydroid session start &`
- Потом `waydroid show-full-ui`
На weston всё работает сразу как надо. Но стоит изменить размеры окна, как waydroid ui пропадает. Приходится стопать и по новой запускать отображение
## Как я тестирую разный новый софт
Для этого создаю каталог, а в нём файл `flake.nix` с таким содержимым:
```nix
{
description = "Development shell for my project";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
};
outputs = { self, nixpkgs, ... }@inputs:
let
system = "x86_64-linux";
# pkgs = nixpkgs.legacyPackages.${system};
config = {
allowUnfree = true;
rocmSupport = true;
permittedInsecurePackages = [
"python-2.7.18.8"
"electron-25.9.0"
];
};
pkgs = import nixpkgs {
inherit system;
inherit config;
};
spkgs = import inputs.nixpkgs-stable {
inherit system;
inherit config;
};
in {
devShells.${system}.default =
pkgs.mkShell {
buildInputs = with pkgs; [
planify
];
shellHook = ''
echo "Welcome to Dev Shell"
'';
};
};
}
```
Сюда можно ставить разный софт из нужной версии репы. Чтоб зайти в этот шел, заходишь в каталог с этим файлом и пишешь `nix develop`. Теперь весь софт из этого `flake.nix` будет доступен именно в этом терминале. Если хочется обновить весь софт в этом шеле до последней версии, то я просто удаляю файл `flake.lock` и снова пишу `nix develop`. Чтоб выйти из шела, можно написать `exit`. Если shell использует стандартный bash, то зайти в zsh можно командой `zsh`.
Например, я разрабатывал GUI на fyne. Это либа для golang, чтоб GUI приложения делать. Она на nixos требует пробрасывть зависимости через nix shell, который в конечном итоге выглядел так:
```nix
{
description = "Development shell for my project";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
devShells.${system}.default =
pkgs.mkShell {
buildInputs = with pkgs; [
# Fyne
libGL
pkg-config
xorg.libX11.dev
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXrandr
xorg.libXxf86vm
fyne
# Avif
libaom
# Video
glib
glib.dev
gst_all_1.gstreamer
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-bad
gst_all_1.gst-plugins-ugly
gst_all_1.gst-libav
];
# Чтобы pkg-config видел .pc-файлы, и GStreamer загружал плагины
PKG_CONFIG_PATH = pkgs.lib.concatStringsSep ":" [
"${pkgs.glib.dev}/lib/pkgconfig"
"${pkgs.gst_all_1.gstreamer}/lib/pkgconfig"
"${pkgs.gst_all_1.gst-plugins-base}/lib/pkgconfig"
"${pkgs.gst_all_1.gst-plugins-good}/lib/pkgconfig"
"${pkgs.gst_all_1.gst-plugins-bad}/lib/pkgconfig"
"${pkgs.gst_all_1.gst-plugins-ugly}/lib/pkgconfig"
"${pkgs.gst_all_1.gst-libav}/lib/pkgconfig"
];
NIX_CFLAGS_COMPILE = [ "-I${pkgs.glib.dev}/include" ];
NIX_LDFLAGS = [ "-L${pkgs.glib.out}/lib" ];
shellHook = ''
zsh
echo "Welcome to Dev Shell"
export LD_LIBRARY_PATH=${pkgs.wayland}/lib:${pkgs.lib.getLib pkgs.libGL}/lib:${pkgs.lib.getLib pkgs.libGL}/lib:$LD_LIBRARY_PATH
'';
};
};
}
```
Необходимые пакеты я подбирал методом тыка, читая ошибки при попытке компилировать

View file

@ -1,34 +0,0 @@
Тут будет список проблем, с которыми я столкнулся при настройке nixos. Возможно кому-то пригодится
## Проблемы
- Некоторые симлинки, созданные через home-manager, могут быть перезаписаны другим софтом, удалив мои настройки
- `Mimetypes` удаляют симлинк. Поэтому я сделал отдельный файл в каталоге `shit` и буду копировать готовый файл целиком в нужный каталог
- Могут быть проблемы с TUN модом в xray/singbox/clash клиентах. В теории это исправлено в новых версиях системы через использование параметров. Но мне лень обновляться, я просто запускаю с рутом Throne бинарь, скачанный с гитахаба, прокинув нужные зависимости через nix-ld, который имитирует обычную иерархию файловой системы для рандомных прог с инета
- `Thunar` удаляет мой конфиг, даже если это не симлинк и даже если я перезапишу настройки в его же собственный файл. Приходится руками всё делать при каждой переустановке системы
- `Thunar` крашится при работе с более чем одним окном. Не всегда, но в самый не нужный момент. А `dolphin` тянет 10 терабайт гей порно в зависимости и выводит blowjob по среди экрана. Хз даже что делать. Все файловый менеджеры гавно
- `Thunar` криво показывает превью видео. Он генерит рандом кадр из видео в качестве превью, вместо того чтоб взять данные из метаданных, куда все закидывают реальное превью. Они считают, что лучше генерить превью каждый раз, чем взять уже готовое
Мелочи
- Пароли через rofi выдают меню ввода пароля от qt, но оно имеет светлую тему. Темы для qt приложений почти невозможно заставить нормально работать. Не могу починить и ладно
- В терминале ssh-agent палит мою почту. Но мб это только при первом запуске терминала
### Ребилд крашит систему
Эта проблема была раньше. Сейчас исправлена. Но заметку оставлю, вдруг пригодится в будущем
Ребилд системы через `switch` или `test` кладёт систему. Чёрный экран без возможности переключить tty через `ctrl + alt + F1-F7`. Можно юзать `boot`, чтоб после ребута пк применялось. Тогда не крашит и после ребута всё работает. Но лучше найти какой сервис виноват и исправить проблему нормально.
#### Потенциальный способ исправить проблему
Есть следующие два параметра:
- `systemd.services.<name>.restartIfChanged`
- `systemd.user.services.<name>.restartIfChanged`
Они указывают надо ли ребутать указанный сервис при ребилде системы. Мб надо туда что-то указать и сделать false
Я сделал это для одного сервиса в `nixos/configuration.nix`. Мне помогло. Но если будут ещё сервисы, ребилд на которых зависает и после него крашится система, то можно пробовать запретить рестарт при ребилде.
#### Реальный способ исправить проблему
Походу дело было в сервисе `cage`. Когда я его удалил, то всё стало работать нормально

163
README.md
View file

@ -1,162 +1 @@
## Навигация
- [Другие README файлы в этих дотсах](#другие-readme-файлы-в-этих-дотсах)
- [TODO](#todo)
- [Мини гайд по NixOS](#мини-гайд-по-nixos)
- [Процесс установки](#процесс-установки)
- [Первый способ](#первый-способ)
- [Второй способ](#второй-способ)
- [После установки надо](#после-установки-надо)
- [Изменения для виртуалок](#изменения-для-виртуалок)
## Другие README файлы в этих дотсах
- [Бинды системы](./BINDINGS.md)
- [Список базового софта в системе и доп информация](./NOTES.md)
- [Цвета и иконки тем, храню для себя](./THEMES.md)
- [Список известных проблем при настройке системы](./PROBLEMS.md)
- [Копия man page для bspwm с доп инфой](./modules/home-manager/wm/bspwm/bspwm.md)
- [Описание плагинов для mpv](./modules/home-manager/mpv/README.md)
- [NeoVim config](./nvim/README.md)
## Мини гайд по NixOS
- Одинаковые вещи могут делаться разными способами. Это норма, ведь nix считается языком програмимрования. По началу меня это бесило, когда читал чужие дотсы
- Нюансы работы NixOS в [этом](https://www.youtube.com/watch?v=7f19R8BWUnU&t=960s) видео. Мне понравилось
- [Плейлист](https://www.youtube.com/playlist?list=PLko9chwSoP-15ZtZxu64k_CuTzXrFpxPE) с английскими видео. Мне больше всего понравились видео под номерами [16](https://youtu.be/a67Sv4Mbxmc), [18](https://youtu.be/b641h63lqy0), [21](https://youtu.be/rEovNpg7J0M), [27](https://youtu.be/ljHkWgBaQWU) и [28](https://youtu.be/JCeYq72Sko0).
- Пакеты искать [тут](https://search.nixos.org/packages). Параметры для сток NixOS [тут](https://search.nixos.org/options). Параметры для home-manager [тут](https://home-manager-options.extranix.com/?query=&release=master). Для моих конфигов надо обязательно искать в unstable ветке, ибо параметры могут отличаться.
- Для системной темы тут используется stylix. Все его параметры можно найти [тут](https://stylix.danth.me/options/nixos.html).
## Процесс установки
Сначала качаем NixOS GUI вариант и устанавливаем систему через визуальный установщик. При установке выбираем минимальный вариант, без DE.
Кто-то говорит, что потом достаточно просто забилдить одной командой чужой конфиг, но это не так. Будет ошибка, что нет гита. Если использовать nix-shell для гита, то скажет, что нет экспериментальной функции. Либо писать огромную команду, либо, как советую сделать я, изменить стоковый конфиг никса. Для этого пишем следующее:
```sh
sudo nano /etc/nixos/configuration.nix
```
Я добавил туда `nix.settings.experimental-features = [ "nix-command" "flakes" ];` сразу после настроек `boot`. Ниже, почти в самом конце, в `environment.systemPackages = with pkgs;` я добавил пакеты `wget, git, curl`. В итоге получился такой конфиг (написал лишь его часть):
```nix
{
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
wget
git
curl
fastfetch
];
}
```
После этого сохраняем и пишем в терминале это:
```sh
sudo nixos-rebuild switch
```
Дальше есть два способа. Перед использованием любого из них я рекомендую сделать форк и внести следующие изменения в конфиг перед установкой (либо можно сделать гит клон и через nano/vim внести изменения для первых трёх пунктов, остальное менять на готовой системе):
- Переменную `username` в `nixos/configuration.nix`.
- `username` и `homeDirectory` в `nixos/home.nix`.
- `userName` и `userEmail` в `modules/home-manager/terminal/git.nix`.
А это можно донастроить уже в готовой системе
- Путь до `home` в `shit/qt5ct/qt5ct.conf` и `shit/qt6ct/qt6ct.conf`.
- Параметры мониторов закомментированы в файле `modules/home-manager/wm/bspwm/bspwm.nix`. Можно указать по желанию. Команда xrandr покажет доступные значения и имена мониторов.
- Если видеокарта не от amd, то, надо удалить `videoDrivers` в `modules/nixos/xserver.nix`, `boot.initrd.kernelModules` и всю категорию настроек `amdgpu` в `modules/nixos/hardware.nix`. Это настройки для amd gpu, чтоб не было тиринга на x11.
- Если надо задать симлинки, то для этого есть файл `modules/home-manager/symlinks.nix`. Там сейчас мои симлинки, их лучше удалить. Чтоб файл заработал, надо раскомментировать `./symlinks.nix` в файле `modules/home-manager/bundle.nix`.
- Если надо монтировать другие диски, то для этого есть файл `modules/nixos/filesystems.nix`. Там сейчас мой второй ссд. Чтоб файл заработал, надо раскомментировать `./filesystems.nix` в файле `modules/nixos/bundle.nix`.
- Если нужна гибернация, то её можно настроить в `modules/nixos/hibernate.nix`. Там надо указать uuid и офсет для swap файла. Чтоб файл заработал, надо раскомментировать `./hibernate.nix` в файле `modules/nixos/bundle.nix`.
С гитом есть нюанс. Если захочешь потом создать свои конфиги или добавить новые файлы, на которые надо ссылаться из nix, то надо указывать либо полный путь до файла, либо добавлять файл в гит. Если указывать относительный путь, как сделано в моих `bundle.nix`, то все эти файлы должны находиться в гите, либо каталог дотсов должен быть без гита вовсе. Если в каталоге дотсов инициализирован репозиторий гита, то в относительных путях он не видит файлы из `gitignore` или просто не отслеживаемые гитом файлы.
### Первый способ
Установить систему одной командой (я написал пример для github, но сейчас мои дотсы есть лишь на forgejo, не знаю как с него использовать такой синтаксис):
```sh
sudo nixos-rebuild boot --flake github:Buliway/nixos-private-dots --impure
```
Чтоб использовать с репой forgejo, можно попробовать такой синтаксис `git@git.buliway.ru:Buliway/nixos-private-dots`.
Параметр `boot` делает так, что настройки не применяются сразу. После установки надо будет перезапустить пк. Если хочешь проверить как оно заработает без ребута пк, то используй `switch` вместо `boot`.
### Второй способ
Клонировать репозиторий и ребилдить систему с указанием пути:
```sh
git clone https://git.buliway.ru/buliway/nixos-private-dots
sudo nixos-rebuild boot --impure --flake ~/nixos-private-dots
```
Параметр `boot` делает так, что настройки не применяются сразу. После установки надо будет перезапустить пк. Если хочешь проверить как оно заработает без ребута пк, то используй `switch` вместо `boot`.
## После установки надо
Эта заметка частично для меня. Каждый ставит то, что ему надо
- Включить подкачку на 64 гига в `/etc/nixos/hardware-configuration.nix` через такой синтаксис:
```nix
swapDevices = [ {
device = "/swapfile";
size = 64*1024; # В мегабайтах
} ];
```
- Настроить гибренацию в `modules/nixos/hibernate.nix`
- Активировать скрипт в `shit` каталоге, чтоб скопировать нужные конфиги в нужные каталоги. Симлинки не работают
- Настроить приложения `Qt5 Settings`, `Qt6 Settings` и `Kvantum`. Там надо выбрать свою системную тему. Вроде всё интуитивно понятно будет. Можно попробовать обновить систему, в надежде, что системная тема `stylix` начнёт работать с приложениями `qt`. Для этого надо будет закомментить настройки `qt` в конфиге `stylix`.
- Руками настроить `thunar`, `discord`, `telegram`, `steam`, `strawberry` и бинды для `ksnip`
- Добавить gpg ключи
```sh
gpg --import /path/to/your-key.gpg
```
Если не работает, то смотришь список ключей. Копируешь ID нужного и используешь во второй команде.
```sh
gpg --list-keys
gpg --edit-key ID-ключа
```
В этом режиме надо написать trust и выбрать степень доверия. Например 5 для своих ключей можно задать, это прям самое максимально доверие. Потом Ctrl + D чтоб выйти.
## Изменения для виртуалок
Виртуалка требует минимум 100гб памяти. Если хочешь меньше, то удали огромную кучу софта из конфигов, который тебе не нужен на виртуалке.
Это надо, чтоб включить коннект по ssh к виртуалке и сделать с ней общий буфер обмена. Ну и ещё параметры экрана меняю на один 1080p монитор на 60 герц.
В файле `modules/nixos/virtualisation.nix` раскомментировать эти строки:
```diff
+ services = {
+ openssh.enable = true; # Это ставится на виртуалку, чтоб к ней конект по ssh работал.
+ spice-vdagentd.enable = true; # Clipboard sharing
+ qemuGuest = {
+ enable = true; # Fix resolution
+ package = pkgs.qemu_full;
+ };
+ };
```
В файле `modules/home-manager/wm/bspwm/bspwm.nix` изменить эти строки:
```diff
extraConfigEarly = ''
- xrandr --output DisplayPort-2 --mode 1920x1080 --rate 165
- xrandr --output HDMI-A-0 --mode 1920x1080 --rate 100 --right-of DisplayPort-2
+ xrandr --output Virtual-1 --mode 1920x1080 --rate 60
'';
```
В файле `modules/nixos/xserver.nix` закомментировать эти строки, даже если amd gpu на хосте:
```diff
- videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU
- deviceSection = ''Option "TearFree" "True"'';
+ # videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU
+ # deviceSection = ''Option "TearFree" "True"'';
```
Это ветка для тестов новых настроек на виртуалке. Так же есть отдельная ветка `qemu`, её я использую как вторую стабильную систему, но в виртуалке

130
THEMES.md
View file

@ -1,130 +0,0 @@
## Themes
У меня в IDE отображаются цвета. Так что я для себя сохраню разные варианты gruvbox
Цвет это имя цвета в stylix. Потом идёт название gruvbox-вариант
Я использую gruvbox-dark-medium
|Цвет |dark-hard|dark-medium|dark-pale|dark-soft|material-dark-hard|material-dark-medium|material-dark-soft|
|------|---------|-----------|---------|---------|------------------|--------------------|------------------|
|base00| #1d2021 | #282828 | #262626 | #32302f | #202020 | #292828 | #32302f |
|base01| #3c3836 | #3c3836 | #3a3a3a | #3c3836 | #2a2827 | #32302f | #3c3836 |
|base02| #504945 | #504945 | #4e4e4e | #504945 | #504945 | #504945 | #5a524c |
|base03| #665c54 | #665c54 | #8a8a8a | #665c54 | #5a524c | #665c54 | #7c6f64 |
|base04| #bdae93 | #bdae93 | #949494 | #bdae93 | #bdae93 | #bdae93 | #bdae93 |
|base05| #d5c4a1 | #d5c4a1 | #dab997 | #d5c4a1 | #ddc7a1 | #ddc7a1 | #ddc7a1 |
|base06| #ebdbb2 | #ebdbb2 | #d5c4a1 | #ebdbb2 | #ebdbb2 | #ebdbb2 | #ebdbb2 |
|base07| #fbf1c7 | #fbf1c7 | #ebdbb2 | #fbf1c7 | #fbf1c7 | #fbf1c7 | #fbf1c7 |
|base08| #fb4934 | #fb4934 | #d75f5f | #fb4934 | #ea6962 | #ea6962 | #ea6962 |
|base09| #fe8019 | #fe8019 | #ff8700 | #fe8019 | #e78a4e | #e78a4e | #e78a4e |
|base0A| #fabd2f | #fabd2f | #ffaf00 | #fabd2f | #d8a657 | #d8a657 | #d8a657 |
|base0B| #b8bb26 | #b8bb26 | #afaf00 | #b8bb26 | #a9b665 | #a9b665 | #a9b665 |
|base0C| #8ec07c | #8ec07c | #85ad85 | #8ec07c | #89b482 | #89b482 | #89b482 |
|base0D| #83a598 | #83a598 | #83adad | #83a598 | #7daea3 | #7daea3 | #7daea3 |
|base0E| #d3869b | #d3869b | #d485ad | #d3869b | #d3869b | #d3869b | #d3869b |
|base0F| #d65d0e | #d65d0e | #d65d0e | #d65d0e | #bd6f3e | #bd6f3e | #bd6f3e |
Сравнение цветов моей темы gruvbox с другими темами
|Цвет |gruvbox-d-m| onedark | nord |catppuccin-mocha|catppuccin-latte|rose-pine|rose-pine-moon|tokyo-night-moon|everforest| dracula |
|------|-----------|---------|---------|----------------|----------------|---------|--------------|----------------|----------|---------|
|base00| #282828 | #282c34 | #2E3440 | #1e1e2e | #eff1f5 | #191724 | #232136 | #222436 | #2d353b | #282a36 |
|base01| #3c3836 | #353b45 | #3B4252 | #181825 | #e6e9ef | #1f1d2e | #2a273f | #1e2030 | #343f44 | #363447 |
|base02| #504945 | #3e4451 | #434C5E | #313244 | #ccd0da | #26233a | #393552 | #2d3f76 | #475258 | #44475a |
|base03| #665c54 | #545862 | #4C566A | #45475a | #bcc0cc | #6e6a86 | #6e6a86 | #636da6 | #859289 | #6272a4 |
|base04| #bdae93 | #565c64 | #D8DEE9 | #585b70 | #acb0be | #908caa | #908caa | #828bb8 | #9da9a0 | #9ea8c7 |
|base05| #d5c4a1 | #abb2bf | #E5E9F0 | #cdd6f4 | #4c4f69 | #e0def4 | #e0def4 | #3b4261 | #d3c6aa | #f8f8f2 |
|base06| #ebdbb2 | #b6bdca | #ECEFF4 | #f5e0dc | #dc8a78 | #e0def4 | #e0def4 | #828bb8 | #e6e2cc | #f0f1f4 |
|base07| #fbf1c7 | #c8ccd4 | #8FBCBB | #b4befe | #7287fd | #524f67 | #56526e | #c8d3f5 | #fdf6e3 | #ffffff |
|base08| #fb4934 | #e06c75 | #BF616A | #f38ba8 | #d20f39 | #eb6f92 | #eb6f92 | #ff757f | #e67e80 | #ff5555 |
|base09| #fe8019 | #d19a66 | #D08770 | #fab387 | #fe640b | #f6c177 | #f6c177 | #ffc777 | #e69875 | #ffb86c |
|base0A| #fabd2f | #e5c07b | #EBCB8B | #f9e2af | #df8e1d | #ebbcba | #ea9a97 | #ffc777 | #dbbc7f | #f1fa8c |
|base0B| #b8bb26 | #98c379 | #A3BE8C | #a6e3a1 | #40a02b | #31748f | #3e8fb0 | #c3e88d | #a7c080 | #50fa7b |
|base0C| #8ec07c | #56b6c2 | #88C0D0 | #94e2d5 | #179299 | #9ccfd8 | #9ccfd8 | #86e1fc | #83c092 | #8be9fd |
|base0D| #83a598 | #61afef | #81A1C1 | #89b4fa | #1e66f5 | #c4a7e7 | #c4a7e7 | #82aaff | #7fbbb3 | #80bfff |
|base0E| #d3869b | #c678dd | #B48EAD | #cba6f7 | #8839ef | #f6c177 | #f6c177 | #fca7ea | #d699b6 | #ff79c6 |
|base0F| #d65d0e | #be5046 | #5E81AC | #f2cdcd | #dd7878 | #524f67 | #56526e | #c53b53 | #9da9a0 | #bd93f9 |
Цветовая схема **Base16** используется для унификации цветовых тем в разных приложениях. Она определяет 16 базовых цветов, каждый из которых играет определённую роль. Вот основные цвета и их назначения:
- **Base00** **Background**: Основной фоновый цвет.
- **Base01** **Lighter Background**: Более светлый цвет для фона, часто используется для элементов вроде выделенных областей.
- **Base02** **Selection Background**: Цвет фона выделений, обычно для текста или других активных областей.
- **Base03** **Comments/Inactive Text**: Цвет для комментариев или неактивного текста, обычно более тусклый или нейтральный.
- **Base04** **Dark Foreground**: Тёмный текст на светлом фоне или для элементов UI.
- **Base05** **Default Foreground**: Основной цвет текста.
- **Base06** **Light Foreground**: Более светлый текст, используется на более тёмных элементах.
- **Base07** **Light Background/Foreground Accent**: Самый светлый цвет, часто используется для акцентированных областей или фона текста.
- **Base08** **Variables/Errors**: Акцентный цвет для переменных или ошибок. Часто красный.
- **Base09** **Integers/Warnings**: Используется для целых чисел или предупреждений. Оранжевый.
- **Base0A** **Booleans/Keys**: Акцентный цвет для логических значений или ключей. Жёлтый.
- **Base0B** **Strings/Success**: Цвет для строк или успешных операций. Зелёный.
- **Base0C** **Support/Functions**: Цвет для поддерживающих элементов, функций или специальных значений. Бирюзовый.
- **Base0D** **Keywords/Declarations**: Используется для ключевых слов или деклараций. Синий.
- **Base0E** **Class Names/Constructors**: Акцентный цвет для имён классов или конструкторов. Фиолетовый.
- **Base0F** **Deprecated Elements/Exceptions**: Обычно используется для устаревших элементов или исключений. Коричневый.
Эти цвета обеспечивают чёткую структуру для создания тем, где легко отличить синтаксические элементы или UI-компоненты.
## Icons
Искать иконки для nerd шрифта можно [тут](https://www.nerdfonts.com/cheat-sheet).
Соберу сюда список nerd иконок, которые могут пригодиться. Для их отображения нужен специальный шрифт
CPU (мб не юзать, а писать текстом и cpu и gpu) - 
RAM - 
CapsLock - 󰪛
Клавиатура -  или 󰌌
Громкость -   
Яркость - 󰃟 󰃞 󰃝
Календарь -   󰸗
Выключение пк - ⏻ 󰐥 
Приложения -  󰀻  󰵆
Блютуз -  󰂯 󰂲 󰥰 󰦋 󰏳 󰦢 󰗾 󰗿
Network - 󰈀  󰒍
Clipboard -   󱉧 
Оповещения (bell) - 󰀦  󰀧 󰀨 󰅉 󰨱 󰵙  󰂚    
Reload - 󰑓 󱄋
Wifi
 󰖩 󱚵 󱚽 󱚼 󰖪 󱛄
󰤭 󰤨 󰤥 󰤢 󰤟 󰤯 󰤫 󰤮
Батарейки
    
󰁹 󰂂 󰂁 󰂀 󰁿 󰁾 󰁽 󰁼 󰁻 󰁺 󰂎
󱊣 󱊢 󱊡 󰂎
󰂃 󱉝 󰂑
Батарейки зарядка
󰂅 󰂋 󰂊 󰢞 󰂉 󰢝 󰂈 󰂇 󰂆 󰢜 󰢟
󱊦 󱊥 󱊤 󰢟
󰂄
Батарейки блютуз
󰥈 󰥆 󰥅 󰥄 󰥃 󰥂 󰥁 󰥀 󰤿 󰤾
󰥇 󰥊 󰥉
Температура
󰔄 - Температура по цельсию
    
 

261
flake.lock generated
View file

@ -1,5 +1,31 @@
{
"nodes": {
"affinity-nix": {
"inputs": {
"elemental-wine-source": "elemental-wine-source",
"flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs_2",
"nixpkgs-wine": "nixpkgs-wine",
"on-linux": "on-linux",
"plugin-loader": "plugin-loader",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1764799851,
"narHash": "sha256-GSwYx+yFEZWUtRrUUyQjikvAErXZM/yLWtJYOWYlfKA=",
"owner": "mrshmllow",
"repo": "affinity-nix",
"rev": "8c939e11edda228a529ed78701c327df4d38a4c4",
"type": "github"
},
"original": {
"owner": "mrshmllow",
"repo": "affinity-nix",
"type": "github"
}
},
"base16": {
"inputs": {
"fromYaml": "fromYaml"
@ -66,7 +92,55 @@
"type": "github"
}
},
"elemental-wine-source": {
"flake": false,
"locked": {
"host": "gitlab.winehq.org",
"lastModified": 1722747031,
"narHash": "sha256-XVhz9p2kgFBoJ376vg8OaFXxcMEjAe9AK1hk0I1rb1Q=",
"owner": "ElementalWarrior",
"repo": "wine",
"rev": "a7c9b19e1a26cf49c63a7c19189a3e2bbe2c6ac2",
"type": "gitlab"
},
"original": {
"host": "gitlab.winehq.org",
"owner": "ElementalWarrior",
"ref": "affinity-photo3-wine9.13-part3",
"repo": "wine",
"type": "gitlab"
}
},
"flake-compat": {
"locked": {
"lastModified": 1751685974,
"narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
"rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
"type": "tarball",
"url": "https://git.lix.systems/api/v1/repos/lix-project/flake-compat/archive/549f2762aebeff29a2e5ece7a7dc0f955281a1d1.tar.gz?rev=549f2762aebeff29a2e5ece7a7dc0f955281a1d1"
},
"original": {
"type": "tarball",
"url": "https://git.lix.systems/lix-project/flake-compat/archive/main.tar.gz"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1696426674,
@ -87,11 +161,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1741352980,
"narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=",
"lastModified": 1762980239,
"narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9",
"rev": "52a2caecc898d0b46b2b905f058ccc5081f842da",
"type": "github"
},
"original": {
@ -137,6 +211,48 @@
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat_2",
"gitignore": "gitignore",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1763319842,
"narHash": "sha256-YG19IyrTdnVn0l3DvcUYm85u3PaqBt6tI6VvolcuHnA=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "7275fa67fbbb75891c16d9dee7d88e58aea2d761",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"affinity-nix",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
@ -195,32 +311,13 @@
"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": 1741678040,
"narHash": "sha256-rmBsz7BBcDwfvDkxnKHmolKceGJrr0nyz5PQYZg0kMk=",
"lastModified": 1759417375,
"narHash": "sha256-O7eHcgkQXJNygY6AypkF9tFhsoDQjpNEojw3eFs73Ow=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3ee8818da146871cd570b164fc4f438f78479a50",
"rev": "dc704e6102e76aad573f63b74c742cd96f8f1e6c",
"type": "github"
},
"original": {
@ -232,11 +329,11 @@
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1740877520,
"narHash": "sha256-oiwv/ZK/2FhGxrCkQkB83i7GnWXPPLzoqFHpDD3uYpk=",
"lastModified": 1761765539,
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "147dee35aab2193b174e4c0868bd80ead5ce755c",
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc",
"type": "github"
},
"original": {
@ -261,13 +358,29 @@
"type": "github"
}
},
"nixpkgs2": {
"nixpkgs-wine": {
"locked": {
"lastModified": 1753939845,
"narHash": "sha256-K2ViRJfdVGE8tpJejs8Qpvvejks1+A4GQej/lBk5y7I=",
"lastModified": 1735834308,
"narHash": "sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "94def634a20494ee057c76998843c015909d6311",
"rev": "6df24922a1400241dae323af55f30e4318a6ca65",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6df24922a1400241dae323af55f30e4318a6ca65",
"type": "github"
}
},
"nixpkgs2": {
"locked": {
"lastModified": 1764242076,
"narHash": "sha256-sKoIWfnijJ0+9e4wRvIgm/HgE27bzwQxcEmo2J/gNpI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "2fad6eac6077f03fe109c4d4eb171cf96791faa4",
"type": "github"
},
"original": {
@ -278,6 +391,38 @@
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1763421233,
"narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1761236834,
"narHash": "sha256-+pthv6hrL5VLW2UqPdISGuLiUZ6SnAXdd2DdUE+fV2Q=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d5faa84122bc0a1fd5d378492efce4e289f8eac1",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1733392399,
"narHash": "sha256-kEsTJTUQfQFIJOcLYFt/RvNxIK653ZkTBIs4DG+cBns=",
@ -293,11 +438,39 @@
"type": "github"
}
},
"on-linux": {
"flake": false,
"locked": {
"lastModified": 1763514293,
"narHash": "sha256-x766SlDqS6DoOQyW4u1zV3iZbrEKoy4P9K6XDjZ4fGU=",
"owner": "seapear",
"repo": "AffinityOnLinux",
"rev": "2eacfdf625bfafa3099d411f8e2d5afec565fcd6",
"type": "github"
},
"original": {
"owner": "seapear",
"repo": "AffinityOnLinux",
"type": "github"
}
},
"plugin-loader": {
"flake": false,
"locked": {
"narHash": "sha256-mixBa/xIfSIrSS3+bGqznXxSE6h8s7e2xoJM2g4eXhg=",
"type": "file",
"url": "https://github.com/noahc3/AffinityPluginLoader/releases/download/v0.2.0/affinitypluginloader-plus-winefix.tar.xz"
},
"original": {
"type": "file",
"url": "https://github.com/noahc3/AffinityPluginLoader/releases/download/v0.2.0/affinitypluginloader-plus-winefix.tar.xz"
}
},
"root": {
"inputs": {
"affinity-nix": "affinity-nix",
"home-manager": "home-manager",
"nix-gaming": "nix-gaming",
"nixpkgs": "nixpkgs_2",
"nixpkgs": "nixpkgs_4",
"nixpkgs-stable": "nixpkgs-stable",
"nixpkgs2": "nixpkgs2",
"stylix": "stylix"
@ -309,7 +482,7 @@
"base16-fish": "base16-fish",
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"flake-compat": "flake-compat",
"flake-compat": "flake-compat_3",
"flake-utils": "flake-utils",
"gnome-shell": "gnome-shell",
"home-manager": "home-manager_2",
@ -399,6 +572,24 @@
"repo": "tinted-tmux",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1762938485,
"narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
}
},
"root": "root",

View file

@ -9,6 +9,10 @@
nixpkgs2.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
affinity-nix.url = "github:mrshmllow/affinity-nix";
# nix-gaming.url = "github:fufexan/nix-gaming";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
@ -18,16 +22,11 @@
url = "github:danth/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-gaming = { # Удобно ставить некоторые игры
url = "github:fufexan/nix-gaming";
# inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, ... }@inputs:
let
system = "x86_64-linux";
system = "x86_64-linux"; # Не понимаю зачем, если это в hardware.nix указывается
config = {
allowUnfree = true;
rocmSupport = true;

View file

@ -2,16 +2,11 @@
imports = [
./ranger/ranger.nix
# ./gui/vscode.nix
./imv/imv.nix
./mpv/mpv.nix
./obs/obs.nix
./terminal/alacritty.nix
./terminal/git.nix
./terminal/kitty.nix
./terminal/lynx.nix
./terminal/starship.nix
./terminal/zellij.nix
./terminal/zsh.nix
@ -28,12 +23,21 @@
./wm/dunst.nix
./wm/lockscreen.nix
# Для выключения i3wm комментируй все строки ниже
# Для выключения i3 комментируй все строки ниже
./wm/i3.nix
# Для выключения bspwm комментируй все строки ниже
./wm/bspwm/bspwm.nix
./wm/bspwm/polybar.nix
./wm/bspwm/sxhkd.nix
##################
## WM (Wayland) ##
##################
# Wayland гавно лаганое, но мб на NixOS дела будут лучше
# Мб я сделаю конфиги для sway и hyprland на ags
# Каталог wm мб переименовать в X11 и создать отдельный Wayland
];
}

View file

@ -1,81 +0,0 @@
{ pkgs, ... }: { # https://nixos.wiki/wiki/Visual_Studio_Code
programs.vscode = {
enable = true;
# Что-то из этого может пригодиться, если хочу ставить пакеты без декларативности
# package = pkgs.vscode.fhs; # Почему в вики написано ".fhs", если пакет называется "-fhs"?
# package = pkgs.vscode-with-extensions; # Мб это надо?
# Чтоб узнать sha256, я скачал расширение напрямую с сайта маркетплейса
# А потом в терминале написал "sha256sum filename"
# В оф репе юзают такой скрипт для установки расширений, не знаю поможет ли
# https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vscode/extensions/update_installed_exts.sh#L34
# Имя и паблишер берутся из ссылки. После "?itemName" идёт паблишер.нейм
extensions = with pkgs.vscode-extensions; [
jdinhlife.gruvbox # Gruvbox theme
eamodio.gitlens # GitLens - Git supercharged
jnoortheen.nix-ide # Nix language support - syntax highlighting, formatting, and error reporting.
sumneko.lua # Lua language server
naumovs.color-highlight # Highlight web colors in your editor
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
# redhat.vscode-xml # XML Language Support by Red Hat
# dotjoshjohnson.xml # XML Tools
# bradlc.vscode-tailwindcss # Tailwind CSS tooling
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ # Руками с гита ставить
{ # https://marketplace.visualstudio.com/items?itemName=budparr.language-hugo-vscode
name = "language-hugo-vscode";
publisher = "budparr";
version = "1.3.1";
sha256 = "f5da7cfe02c06fc3899e6b0b55b380280619e7085abcf5b6024f9684ba846c99";
}
# { # https://marketplace.visualstudio.com/items?itemName=dlasagno.rasi
# name = "rasi";
# publisher = "dlasagno";
# version = "1.0.0";
# sha256 = "b3ad1a95e8f770d01b489c6c4652111364216baa00b2670e05b5a8aa9fb0e9f9";
# }
# { # https://marketplace.visualstudio.com/items?itemName=a-h.templ
# name = "templ";
# publisher = "a-h";
# version = "0.0.29";
# sha256 = "459fbec312f63aa061de188b030288c3940b8d4fe29ac2bb8ab4141db27fb6a3";
# }
# { # https://marketplace.visualstudio.com/items?itemName=CraigRBroughton.htmx-attributes
# name = "htmx-attributes";
# publisher = "CraigRBroughton";
# version = "0.8.0";
# sha256 = "4ec7a63d992ad99d77fef6a145a3fbcf6d3a0496826754d1e8e56fe9a783bf29";
# }
# { # https://marketplace.visualstudio.com/items?itemName=Codeium.codeium
# name = "codeium";
# publisher = "Codeium";
# version = "1.29.2";
# sha256 = "86e075c4fd0d60f7fa7b32e497260a86a94ec812d95e3d9f058ce45e77648f89";
# }
];
# userSettings = {
# "telemetry.telemetryLevel" = "off";
# "update.showReleaseNotes" = false;
# "workbench.colorTheme" = "Gruvbox Dark Medium";
# "editor.fontFamily" = "JetBrainsMono Nerd Font";
# "editor.lineNumbers" = "relative";
# };
# globalSnippets = {};
# languageSnippets = {};
# keybindings = [
# {
# key = "ctrl+c";
# command = "editor.action.clipboardCopyAction";
# when = "textInputFocus";
# }
# ];
};
}

View file

@ -1,62 +0,0 @@
# Default config for imv
[options]
# Suppress built-in key bindings, and specify them explicitly in this
# config file.
suppress_default_binds = true
title_text = imv - $(basename "$imv_current_file")
[aliases]
# Define aliases here. Any arguments passed to an alias are appended to the
# command.
# alias = command to run
[binds]
# Define some key bindings
q = quit
y = exec echo working!
# Image navigation
<Left> = prev
<bracketleft> = prev
<Right> = next
<bracketright> = next
gg = goto 1
<Shift+G> = goto -1
# Panning
j = pan 0 -50
k = pan 0 50
h = pan 50 0
l = pan -50 0
# Zooming
<Up> = zoom 1
<Shift+plus> = zoom 1
i = zoom 1
<Down> = zoom -1
<minus> = zoom -1
o = zoom -1
# Rotate Clockwise by 90 degrees
<Ctrl+r> = rotate by 90
# Other commands
x = close
f = fullscreen
d = overlay
p = exec echo $imv_current_file
c = center
s = scaling next
<Shift+S> = upscaling next
a = zoom actual
r = reset
# Gif playback
<period> = next_frame
<space> = toggle_playing
# Slideshow control
t = slideshow +5
<Shift+T> = slideshow -1

View file

@ -1,5 +0,0 @@
{
programs.imv.enable = true;
xdg.configFile."imv/config".source = ./config;
}

View file

@ -74,7 +74,7 @@ sudo chmod a+rx /usr/local/bin/yt-dlp
### Включение нескольких звуковых дорожек
Я немного изменил `menus.lua` в визуальной теме `uosc`. Теперь там появилась возможность включать несколько звуковых дорожек разом. Изредка это может вызывать визуальные артефакты видеоряда в течении 1-2 секунд. Не знаю от чего это зависит. Вот как это работает:
Я немного изменил `menus.lua` в визуальной теме `uosc`. Теперь там появилась возможность включать несколько звуковых дорожек разом. Израдка это может вызывать визуальные артефакты видеоряда в течении 1-2 секунд. Не знаю от чего это зависит. Вот как это работает:
- Если просто нажимать на звуковую дорожку в меню выбора аудио, то она будет переключаться. Если была активна - выключится, если была не активна - включится
- Если хочется не переключать, а активировать одну конкретную звуковую дорожку, то на неё надо нажать с зажатым `Ctrl`

View file

@ -19,9 +19,12 @@ volume-max=200 # Максимально допустимая громкость
# YouTube #
###########
script-opts=ytdl_hook-ytdl_path=yt-dlp # Юзать ytdlp
ytdl-format="bestvideo[ext=mp4][vcodec^=avc][height<=?1080]+bestaudio/best" # Ограничить качество на 1080р и, вроде бы, юзать норм кодек
ytdl-raw-options="cookies-from-browser=firefox,force-ipv4=" # Доп параметры для ytdlp. В моём случае куки из браузера и ipv4 only для обхода ограничений
# Юзать ytdlp
script-opts=ytdl_hook-ytdl_path=yt-dlp
# В стоке 1080p
# ytdl-format=best[height<=1080]
# Куки из браузера и ipv4 only
ytdl-raw-options=cookies=/home/buliway/backups/Media/yt-dlp/cookies.firefox-private.txt,force-ipv4=
cache=yes
cache-on-disk=yes

View file

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

View file

@ -180,6 +180,7 @@ ext cbz, has zathura, X, flag f = zathura -- "$@"
mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@"
mime ^image/svg, has display, X, flag f = display -- "$@"
mime ^image, has qview, X, flag f = qview -- "$@"
mime ^image, has imv, X, flag f = imv -- "$@"
mime ^image, has pqiv, X, flag f = pqiv -- "$@"
mime ^image, has sxiv, X, flag f = sxiv -- "$@"

View file

@ -7,8 +7,8 @@
# Я не уверен надо ли писать "config.lib.file.mkOutOfStoreSymlink"
# Вроде это более простой симлинк, чем просто ссылка на файл
# Типо он напрямую симлинк кидает, а не через 100500 симлинков в nix/store
# Но мб меня обманули
# Он работает только с абсолютными путями
{ config, ... }: let
home-dir = "backups"; # Имя каталога для бекапов. Мб захочу поменять
@ -21,14 +21,30 @@ in {
".password-store".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/.password-store"; # Для утилиты pass
".ssh".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/.ssh";
# Games
# ".local/share/osu-wine/osu!/Replays".source = config.lib.file.mkOutOfStoreSymlink "${dir}/games/osu!/Replays";
# ".local/share/osu-wine/osu!/Skins".source = config.lib.file.mkOutOfStoreSymlink "${dir}/games/osu!/Skins";
# ".local/share/osu-wine/osu!/Songs".source = config.lib.file.mkOutOfStoreSymlink "${dir}/games/osu!/Songs";
# ".local/share/osu-wine/osu!/collection.db".source = config.lib.file.mkOutOfStoreSymlink "${dir}/games/osu!/collection.db";
# ".local/share/osu-wine/osu!/osu!.buliway.cfg".source = config.lib.file.mkOutOfStoreSymlink "${dir}/games/osu!/osu!.buliway.cfg";
# Browsers. Мб сделать .force, чтоб удалить сток. А мб руками удалить сток перед этим
".mozilla".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/Apps/.mozilla";
".librewolf".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/Apps/.librewolf";
"Downloads/Telegram Desktop".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Telegram Desktop";
# Не знаю на счёт obs, chatbox, planify, calibre, discord, nekobox
};
xdg.configFile = { # Это для каталога .config
"qobuz-dl".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Media/Music/Qobuz/.config/qobuz-dl"; # Конфиг для бекапа Qobuz музыки
# "chromium".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/Apps/chromium";
# "vesktop/themes/my-vesktop_theme.css".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/Apps/my-vesktop_theme.css"
# Ебаный qt, как я тебя ненавижу
# "Kvantum".source = ../shit/Kvantum;
# "qt5ct".source = ../shit/qt5ct
# "qt6ct".source = ../shit/qt6ct
};
}

View file

@ -1,21 +0,0 @@
{
programs.git = { # https://nixos.wiki/wiki/Git
enable = true;
# lfs.enable = true; # https://git-lfs.com/
userName = "Buliway";
userEmail = "me@buliway.ru";
# aliases = {
# pu = "push";
# co = "checkout";
# cm = "commit";
# s = "status";
# };
};
programs.gitui = { # Terminal UI
enable = true;
};
}

View file

@ -1,14 +0,0 @@
{ pkgs, ... }: {
home = {
packages = [ pkgs.lynx ]; # Текстовый браузер в терминале. Без картинок
# Чтоб lynx отображал все символы, а не транслит
file.".lynxrc".text = ''
accept_all_cookies=on
force_ssl_cookies_secure=on
case_sensitive_searching=off
character_set=UNICODE (UTF-8)
'';
};
}

View file

@ -4,7 +4,7 @@
enableBashIntegration = true;
enableZshIntegration = true;
# enableFishIntegration = true;
enableFishIntegration = true;
enableNushellIntegration = true;
enableTransience = true; # Fish Shell only. Отображает пустую строку при нажатии enter?

View file

@ -35,10 +35,19 @@
vi = "nvim";
v = "nvim";
k = "kubectl";
t = "timer";
r = "ranger --choosedir=/tmp/choosedir && cd \"$(cat /tmp/choosedir)\"";
g = "gitui";
f = "fastfetch";
b = "bat --color=always -p --pager='-r'"; # Веди себя как cat, но с цветами
yt = "yt-dlp --cookies /home/buliway/backups/Media/yt-dlp/cookies.firefox-private.txt";
yt-dir = "cd /mnt/backups/Media/yt-dlp";
yt-music = "yt-dlp --config-locations music.conf | sed '/has already been recorded in the archive/d'";
yt-video = "yt-dlp --config-locations video.conf | sed '/has already been recorded in the archive/d'";
yt-jp = "yt-dlp --config-locations music-jp.conf | sed '/has already been recorded in the archive/d'";
qb = "cd /mnt/backups/Media/Music/Qobuz/qdl"; # Бекапить музыку с Qobuz
html = "python3 /mnt/backups/html-library/generate_gallery.py --path"; # Html image gallery
};
history = {

View file

@ -8,7 +8,7 @@
# Ниже настройки для основного монитора. Мб вместе с --primary надо
# И настройки для второго (правого) монитора
extraConfigEarly = ''
xrandr --output Virtual-1 --mode 1920x1080 --rate 60
xrandr --output Virtual-1 --mode 1920x1080
'';
# Эти команды выполняются в конце bspwmrc
@ -21,10 +21,11 @@
startupPrograms = [
# "lxqt-policykit-agent" # Заменил на гномовский
"sxhkd"
"nm-applet"
"nm-applet" # Нетворк манагер
"ksnip"
"xset s off -dpms" # Отменить затухание экрана через X минут
"spice-vdagent" # Для виртуалки
"systemctl --user import-environment PATH" # Фикс портала, мб надо ребут портала тоже добавить
];
monitors = let
@ -68,10 +69,12 @@
"librewolf:librewolf:Save Image" = floating;
"SshAskpass" = floating;
"Nm-connection-editor" = floating;
"nekoray" = floating;
"Kvantum Manager" = floating;
"qt5ct" = floating;
"qt6ct" = floating;
"ksnip" = floating1600x900;
# "ark" = floating1200x800; # Удалил, чтоб blowjob на экран не выдавало
"file-roller" = floating;
"floating-terminal" = floating1200x800;
"pavucontrol" = floating900x600;

View file

@ -75,6 +75,6 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
betterlockscreen
betterlockscreen
];
}

View file

@ -1,5 +1,6 @@
{
imports = [
# ./env.nix # Мб не надо, ибо редачу через home.nix?
# ./filesystems.nix
./hardware.nix
# ./hibernate.nix

5
modules/nixos/env.nix Normal file
View file

@ -0,0 +1,5 @@
{
environment.variables = {
EDITOR = "nvim";
};
}

View file

@ -1,17 +1,17 @@
# Тут настраивается автомаунт нужных дисков
# Замени значения на свои. Узнать uuid можно через `lsblk -f`
{
fileSystems = {
"/mnt/backups" = {
device = "/dev/disk/by-uuid/55287544-ce9f-4c93-a2f6-a63b69623fe1";
fsType = "ext4";
options = [ "defaults" "noatime" ]; #"uid=1000" "gid=1000" "dmask=007" "fmask=117" ];
options = [ "nofail" "noatime" "x-systemd.device-timeout=1s" ]; #"uid=1000" "gid=1000" "dmask=007" "fmask=117" ];
};
"/mnt/shit" = {
device = "/dev/disk/by-uuid/234dc4ed-ade3-447f-af5a-4d254835cc66";
fsType = "ext4";
options = [ "defaults" "noatime" ]; #"uid=1000" "gid=1000" "dmask=007" "fmask=117" ];
options = [ "nofail" "noatime" "x-systemd.device-timeout=1s" ]; #"uid=1000" "gid=1000" "dmask=007" "fmask=117" ];
};
};
}
# Ещё можно добавить такие параметры:
# x-systemd.automount - диск не монтируется при загрузке, только при первом обращении, для юзбов норм
# x-systemd.device-timeout=1s - иногда systemd долго ждёт устройство, даже с nofail

View file

@ -1,8 +1,10 @@
{ # Блютуз, интернет, wifi
{ pkgs, ... }: { # Блютуз, интернет, wifi
hardware.bluetooth = {
enable = true;
};
services.blueman.enable = true; # Tray for bluetooth
networking = {
# enableIPv6 = false;
networkmanager.enable = true;
@ -10,7 +12,20 @@
# wireless.enable = true; # Enables wireless support via wpa_supplicant.
firewall.enable = false;
# firewall = {
# allowedTCPPorts = [ 2080 ]; # For nekoray
# allowedUDPPorts = [ 2080 ]; # Clients and peers can use the same port, see listenport
# };
# firewall = {
# # allowedUDPPorts = [ 53 2017 2080 20170 20171 20172 46067 55084 57282 58374 ]; # For nekoray
# # allowedTCPPorts = [ 53 2017 2080 20170 20171 20172 46067 55084 57282 58374 ]; # Clients and peers can use the same port, see listenport
# allowedUDPPortRanges = [ { from = 1; to = 65535; } ];
# allowedTCPPortRanges = [ { from = 1; to = 65535; } ];
# };
};
services.blueman.enable = true; # Tray for bluetooth
# services.sing-box = { # Тоже блочит инет, как и nekoray
# enable = true;
# settings = builtins.fromJSON (builtins.readFile "/home/buliway/nixos-private-dots/modules/nixos/singbox.json");
# };
}

View file

@ -54,23 +54,23 @@
# Ниже настройки имеют формат "число - название"
# Число определяет приоритет настройки, а название описывает цель конфига
# extraConfig.pipewire = {
# "10-clock-rate" = {
# "context.properties" = {
# "default.clock.rate" = 48000;
# "default.clock.allowed-rates" = [ 44100 48000 88200 96000 176400 192000 352800 384000 705600 768000 ];
# };
# };
# # Ниже настройки для минимальной задержки в играх (например osu!stable через wine)
# # quantum — устанавливает размер буфера (чем меньше значение, тем ниже задержка, но выше нагрузка на процессор).
# # Можно посчитать теоретическую задержку в секундах, поделив quantum на rate (48/48000 будет 1мс)
# # Если со звуком есть проблемы (щелчки, прерывания), попробуйте увеличить значение (64, 128, 256) или просто удалить эту настройку
# # По умолчанию я закомментировал настройку, чтоб у людей не было проблем
# # "92-low-latency" = {
# # default.clock.quantum = 32; # default = 1024
# # default.clock.min-quantum = 32; # default = 32
# # default.clock.max-quantum = 32; # default = 2048
# # };
# };
extraConfig.pipewire = {
"10-clock-rate" = {
"context.properties" = {
"default.clock.rate" = 48000;
"default.clock.allowed-rates" = [ 44100 48000 88200 96000 176400 192000 352800 384000 705600 768000 ];
};
};
# Ниже настройки для минимальной задержки в играх (например osu!stable через wine)
# quantum — устанавливает размер буфера (чем меньше значение, тем ниже задержка, но выше нагрузка на процессор).
# Можно посчитать теоретическую задержку в секундах, поделив quantum на rate (48/48000 будет 1мс)
# Если со звуком есть проблемы (щелчки, прерывания), попробуйте увеличить значение (64, 128, 256) или просто удалить эту настройку
# По умолчанию я закомментировал настройку, чтоб у людей не было проблем
# "92-low-latency" = {
# default.clock.quantum = 32; # default = 1024
# default.clock.min-quantum = 32; # default = 32
# default.clock.max-quantum = 32; # default = 2048
# };
};
};
}

View file

@ -2,7 +2,7 @@
virtualisation = {
# podman.enable = true;
waydroid.enable = true;
# waydroid.enable = true;
docker = {
enable = true;

View file

@ -4,7 +4,8 @@
# Поэтому сразу поставил всё что надо и не пробовал найти необходимый минимум
# Мб пригодится поставить opencomposite для трансляции OpenVR в OpenXR
{
{ pkgs, ... }: {
services = {
# Open source XR runtime

View file

@ -5,7 +5,7 @@
sddm = {
# Чтоб задать аватарку юзеру, надо отправить png файл такой командой:
# sudo cp image.png /var/lib/AccountsService/icons/username
# То есть именно username, без .png в конце
# Тоесть именно username, без .png в конце
enable = true;
# package = pkgs.kdePackages.sddm; # qt6 sddm
theme = "chili";

View file

@ -1,3 +1,7 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ pkgs, pkgs2, spkgs, inputs, ... }:
let
@ -10,8 +14,8 @@ in {
./packages.nix
];
# Если какие-то сервисы кладут систему при ребилде,
# то их ребут при ребилде можно выключить таким конфигом:
# Список сервисов, которые не надо ребутать после rebuild switch
# Мне это надо, потому что некоторые сервисы кладут систему
# systemd.services = {
# "accounts-daemon".restartIfChanged = false;
# "home-manager-buliway".restartIfChanged = false;
@ -24,6 +28,7 @@ in {
# ];
loader = {
# systemd-boot.enable = true;
grub = {
enable = true;
efiSupport = true;
@ -59,25 +64,34 @@ in {
enable = true;
};
# flatpak fix: systemctl --user import-environment PATH
# systemctl --user restart xdg-desktop-portal xdg-desktop-portal-gtk
# rollback: systemctl --user unset-environment PATH
# check: systemctl --user show-environment | grep PATH
# default: PATH=/nix/store/3abwqv1a1bdycmgaydzfw3a0qzxwk8am-systemd-256.8/bin/
# test:
# flatpak run --command=sh com.github.tchx84.Flatseal
# xdg-open https://example.com
xdg.portal = {
enable = true;
configPackages = with pkgs; [
xdg-desktop-portal
# kdePackages.xdg-desktop-portal-kde
# xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде
];
extraPortals = with pkgs; [
xdg-desktop-portal
# kdePackages.xdg-desktop-portal-kde
# xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде
xdgOpenUsePortal = true;
config.common.default = [ "gtk" "*" ];
extraPortals = with pkgs2; [
xdg-desktop-portal-gtk
];
};
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="];
# Кеш, чтоб не компилить некоторый софт
# Если начинает компилить, то удалить пакет и применить только с этой настройкой
# Потом добавить пакет обратно
substituters = [
"https://cache.garnix.io"
];
trusted-public-keys = [
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" # https://github.com/mrshmllow/affinity-nix
];
};
system.stateVersion = "24.05"; # Don't change it

View file

@ -14,9 +14,9 @@
# Если с каким-то софтом будут проблемы, то можно перенести из "packages.nix" сюда
# Например, я читал, что если ставить vscode через configuration.nix, а не через пакеты юзера,
# то не получится ставить расширения. Потому что там софт ставится от рута и vscode
# будет пытаться установить расширения в каталог nix store, куда нельзя что либо ставить даже с рутом.
# будет пытаться установить расширения в каталог nix store, куда нельзя что либо ставить без рута.
packages = with pkgs; [
vscode # Надо в home.packages писать, чтоб расширения ставились
vscode # Надо в home.packages писать, чтоб расширения ставились без рута
];
sessionVariables = {

View file

@ -40,32 +40,35 @@
services = {
gvfs.enable = true; # Mount, trash, and other functionalities for Thunar file manager
tumbler.enable = true; # Thumbnail support for Thunar file manager
# flatpak.enable = true;
# unclutter.enable = true; # Hide your mouse cursor when inactive
# 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 = {}; # Фарм карточек стима афк. Просто раскомментить мало, надо настроить
flatpak = {
# flatpak install flathub com.github.tchx84.Flatseal
# https://flathub.org/en/apps/org.vinegarhq.Vinegar
# https://flathub.org/en/apps/org.vinegarhq.Sober
enable = true;
package = pkgs2.flatpak;
};
# ollama = {
# enable = true;
# acceleration = "rocm";
# # Ollama Port 11434/tcp
# host = "0.0.0.0";
# port = 11434;
# openFirewall = true;
# package = pkgs2.ollama;
# rocmOverrideGfx = "10.3.0"; # Лок версии, чтоб на моей видюхе работало всё
# # additional environment variables
# # environmentVariables = { HSA_OVERRIDE_GFX_VERSION="10.3.0"; };
# # package = pkgs2.ollama;
# rocmOverrideGfx = "10.3.0";
# };
};
programs = {
nix-ld = { # Имитация файловой системы обычного линукса и пакеты для этого дела
nix-ld = {
enable = true;
libraries = with pkgs2; [
stdenv.cc.cc
# Для запуска Throne бинаря с гитхаб (форк nekoray)
# Nekoray (Throne)
kdePackages.qtbase
kdePackages.qttools
kdePackages.qtwayland
@ -101,11 +104,10 @@
];
};
zsh.enable = true;
mtr.enable = true; # Объединяет функции утилит traceroute и ping
gnupg.agent = {
enable = true;
enableSSHSupport = true;
pinentryPackage = pkgs.pinentry-qt; # Окно ввода пароля для gpg
pinentryPackage = pkgs.pinentry-qt; # Окно ввода пароля
};
appimage = { # Чтоб .appimage работал
@ -116,7 +118,7 @@
};
};
thunar = {
thunar = { # Can't I use it with home-manager? WTF
enable = true;
plugins = with pkgs.xfce; [
thunar-media-tags-plugin # Tagging and renaming features for media files
@ -126,23 +128,21 @@
};
xfconf.enable = true; # For Thunar configs
# steam = {
# enable = true;
# # package = pkgs2.steam;
# # fontPackages = with pkgs; []; # Font packages to use in Steam
# # extraPackages = with pkgs; []; # Additional
# # protontricks.enable = true; # Running Winetricks commands for Proton-enabled games.
# remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
# dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
# localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
# };
steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
# Оптимизация для игр. https://github.com/FeralInteractive/gamemode
# gamemode.enable = true;
gamemode.enable = true;
# Я хз надо ли оно мне. https://github.com/ValveSoftware/gamescope
# Подробносни тут https://ventureo.codeberg.page/source/linux-gaming.html#gamescope
# gamescope.enable = true;
adb.enable = true; # Android Tools
};
environment.systemPackages = with pkgs; [
@ -168,9 +168,9 @@
clang # Компилятор
gcc # Компилятор
glibc # GNU C Library
gnumake
gnumake # ?
cmake-language-server # CMake LSP
cmake
cmake # ?
# bear # Tool that generates a compilation database for clang tooling
# boost # Collection of C++ libraries
@ -202,10 +202,10 @@
# SQL
sqls # SQL LSP
postgres-lsp # Postgres LSP
postgres-lsp # Postgres SQL
# sql-formatter # SQL formatter
sqlite
dbeaver-bin
pgadmin4
# Frontend
pkgs2.nodejs_24 # For npm
@ -225,9 +225,14 @@
protoc-gen-go-grpc
# Gamedev
# pkgs2.godot
pkgs2.godot
# pkgs2.gdtoolkit_4
# ldtk
ldtk
# Kubernetes
pkgs2.k3d # k3s in Docker
pkgs2.kubectl # Kubernetes CLI
pkgs2.kubernetes-helm # Package manager for kubernetes
# Other
hugo # Для моего блога
@ -235,14 +240,16 @@
taplo # TOML LSP
vim-language-server # VimScript LSP
go-migrate # Database migrations. CLI and Golang library
# postman # API Development Environment
insomnia # API client. Мне нравится больше, чем postman
postman # API Development Environment
insomnia
# Nushell
pkgs2.nushell # Modern shell
# For nvim
tree-sitter # code parser
ripgrep # grep
fd # find
tree-sitter # For nvim
ripgrep # For nvim
fd # For nvim
############
## Архивы ##
@ -263,6 +270,7 @@
wget
curl
git
gitui # Git TUI
xclip # Буфер обмена
ffmpeg_7 # Обработка видео. Нужен всегда и везде как зависимость
svt-av1 # Кодек для рендера в av1 на проце
@ -283,13 +291,13 @@
# zscroll # A text scroller for use with panels and shells https://github.com/noctuid/zscroll
tokei # Количество строк кода на разных языках в каталоге
pass # Менеджер паролей в терминале
# amdgpu_top # Tool to display AMD GPU usage
amdgpu_top # Tool to display AMD GPU usage
btop # Монитор ресурсов в терминале
rocmPackages.rocm-smi # Чтоб в btop было gpu (не работает)
rocmPackages.rocblas # Для работы hip?
rocmPackages.hipblas # Для работы hip?
rocmPackages.clr # Для работы hip?
# pkgs2.yt-dlp # Скачивать и смотреть медиа с разных сайтов
pkgs2.yt-dlp # Скачивать и смотреть медиа с разных сайтов
timer # A "sleep" with progress. Таймер на пельмени "timer 5m"
libqalculate # Advanced calculator library
fastfetch # Пишешь в теримнал и кидаешь всем со словами I use nixos btw
@ -297,7 +305,8 @@
fzf # Нечёткий поиск
killall # Убить процессы. Мем, что в стоке не стоит
libnotify # Вызов оповещений через "notify-send"
# pkgs2.gallery-dl # Качать много картинок с кучи разных сайтов
pkgs2.gallery-dl # Качать много картинок с кучи разных сайтов
shellcheck # Проверка shell скриптов на ошибки
pwgen # Генератор паролей
lm_sensors # Сенсоры
httpie # interacting with APIs & HTTP servers
@ -317,16 +326,16 @@
## GUI ##
#########
ksnip # Скрин экрана. Аналог - Flameshot
ksnip # Скрины. Аналоги - Flameshot
# kdePackages.ark # Архиватор от kde. Имеет в зависимостях blowjob
file-roller # Архиватор от gnome
# qbittorrent # Торренты качать
# thunderbird # Почтовый клиент для своей почты
qbittorrent # Торренты качать
thunderbird # Почтовый клиент для своей почты
screenkey # A screencast tool to display your keys
pavucontrol # PulseAudio Volume Control
# pwvucontrol # Pipewire Volume Control (Не знаю может ли полностью заменить pavucontrol)
networkmanagerapplet # Tray for network manager
brightnessctl # Brightness control for laptop
# brightnessctl # Brightness control for laptop
# gucharmap # Проверка шрифтов. Какой шрифт какие символы отображает
##############
@ -336,7 +345,6 @@
librewolf
firefox
chromium
lynx # Текстовый браузер в терминале. Без картинок
##########
## Docs ##
@ -344,13 +352,13 @@
evince # Смотреть документы (так же превью PDF файлов для Thunar) (не читает FB2)
# papers # Я так понимаю это современная замена для evince под GTK4. Оба от gnome
# libreoffice # Редактировать документы
# hunspell # Проверка орфографии для libreoffice
# hunspellDicts.ru_RU # Словарь для проверки орфографии
# hunspellDicts.en_US # Словарь для проверки орфографии
# spkgs.calibre # Работа с ebook. Иногда даёт thumbnail в файловом менеджере
# drawio # Desktop application for creating diagrams. Вроде даёт thumbnail в ranger
# xournalpp # Xournal++ is a handwriting Notetaking software with PDF annotation support
libreoffice # Редактировать документы
hunspell # Проверка орфографии для libreoffice
hunspellDicts.ru_RU # Словарь для проверки орфографии
hunspellDicts.en_US # Словарь для проверки орфографии
spkgs.calibre # Работа с ebook. Иногда даёт thumbnail в файловом менеджере
drawio # Desktop application for creating diagrams. Вроде даёт thumbnail в ranger
xournalpp # Xournal++ is a handwriting Notetaking software with PDF annotation support
###################
## File managers ##
@ -396,41 +404,39 @@
## Media ##
###########
# strawberry # Музыкальный плеер
strawberry # Музыкальный плеер
obs-studio # Запись видео
# picard # Массовый редактор метаданных музыки
# mousai # Опенсорс шазам. Со временем просит платный api
# spek # Спектрограмма аудио.
picard # Массовый редактор метаданных музыки
mousai # Опенсорс шазам. Со временем просит платный api
spek # Спектрограмма аудио.
mpv # Смотреть видео
# Смотреть картинки
imv # Не умеет показывать анимированные webp. Через раз может показывать avif
# imv # Не умеет показывать анимированные webp. Через раз может показывать avif
qview # Умеет открывать всё, включая анимированный webp и avif
feh # Нужен в большом количестве софта как зависимость. Может в avif, но криво
# feh # Нужен в большом количестве софта как зависимость. Может в avif, но криво
############
## Social ##
############
# (pkgs2.discord.override { # Discord с плагинами
# (pkgs2.discord.override { # Discord
# # withOpenASAR = true; # Оптимизатор дискрода
# withVencord = true; # Имба плагины # TODO: Настройки надо сделать декларативными
# withVencord = true; # Имба плагины
# })
pkgs2.discord
pkgs2.vesktop
pkgs2.telegram-desktop
###########
## Games ##
###########
# Чтоб не компилить wine, надо закомментить и сделать ребилд без игры.
# Потом раскомментить и сделать ребилд с игрой
# inputs.nix-gaming.packages.${pkgs.system}.osu-stable # osu!stable from nix-gaming
# pkgs2.osu-lazer-bin
pkgs2.lutris # Запускать .exe игры. Не всё через `wine game.exe` работает на nixos нормально
# Мб зависимости
protonup-qt # Управлять версиями proton-ge для steam
steam-run # На всякий случай
# pkgs2.mangohud # Фпс и нагрузку на пк показывает в играх
protonup-qt # Управлять версиями proton-ge?
# steam-run # Запуск бинарей в окружении, похожем на steam runtime
pkgs2.mangohud # Фпс и нагрузку на пк показывает в играх
pkgs2.wineWowPackages.stableFull # support both 32- and 64-bit applications
# wineWowPackages.staging # Можно назвать бета версией вайна
pkgs2.winetricks # winetricks (all versions)
@ -441,9 +447,10 @@
## Design ##
############
# krita # Рисовать 1. Часто крашится
# pkgs2.gimp3 # Рисовать 2. Потом выберу что оставить
# blender-hip # 3д графика и рендер видео
inputs.affinity-nix.packages.${pkgs.system}.v3 # Бесплатная замена photoshop через wine
krita # Рисовать
pkgs2.davinci-resolve # Рендер видео. Проприетарное, бесплатная версия
blender-hip # 3д графика и рендер видео
gcolor3 # GUI color picker
xcolor # CLI color picker https://github.com/Soft/xcolor
# inkscape # Vector graphic editor
@ -452,14 +459,15 @@
## Productivity ##
##################
# obsidian # Заметки
# pkgs2.planify # Task manager
obsidian # Заметки
pkgs2.planify # Task manager
pkgs2.ticktick # Powerful to-do app, proprietary
#########
## IDE ##
#########
neovim
pkgs2.neovim
###########
## Icons ##
@ -499,8 +507,8 @@
## Other ##
###########
# qmk # Прошивка для моих раздельных клавиатур
# vial # GUI для qmk, если клавиатура поддерживает
qmk # Прошивка для моих раздельных клавиатур
vial # GUI для qmk, если клавиатура поддерживает
fontconfig
zlib
# google-fonts
@ -509,8 +517,8 @@
libsecret # Хранить и получать аккаунты у приложений. Например для jetbrains toolbox
alsa-utils # Мне для команды amixer надо
pamixer # PulseAudio cli (громкость редачу)
# easyeffects # PipeWire settings. Мне для эквалайзера нужен
# weston # Для запуска wayland only apps на x11 (ещё есть cage, но он крашит систему при ребилде)
easyeffects # PipeWire settings. Мне для эквалайзера нужен
weston # Для запуска wayland only apps на x11 (ещё есть cage, но он крашит систему при ребилде)
# Для работы некоторых тем sddm
kdePackages.qt5compat

View file

@ -1,16 +1,4 @@
## Описание
Это форк [kickstart.nvim](https://github.com/nvim-lua/kickstart.nvim)
Многие бинды nvim можно найти, нажав `space`, он же называется `leader` в конфигах. Ещё можно нажать `g`, там будет `go to ...`. Например `grd` это `go refactor definition` (перейти к реализации функции) или `grn` это `go refactor rename` (переименовать что либо во всём проекте)
Сессии nvim создаются через `space Sc` и удаляются через `space Sd`. Открыть файловый менеджер через `\`. Но его стоит закрывать перед выходом из nvim, иначе сессия поломается. Лень фиксить, это походу сложно делается, проще закрыть перед выходом
Дополнительная информация ниже, но некоторых вещи могли устареть, например бинды. Мне тяжело даётся актуализировать readme моих настроек neovim, потому что я часто что-то меняю. Лучше посмотри эти два видео и сможешь сам разобраться в моих конфигах, найти какие сейчас бинды и кто что делает:
- [The Only Video You Need to Get Started with Neovim](https://youtu.be/m8C0Cq9Uv9o)
- [0 to LSP: Neovim RC From Scratch](https://youtu.be/w7i4amO_zaE)
## Старое
[kickstart.nvim](https://github.com/nvim-lua/kickstart.nvim) fork
> ⚠️ **Warning**: 27.04.2025 произошли большие изменения в конфиге, которые мне очень лень описывать в ридми. Документировать изменения сложнее, чем эти самые изменения вносить. Проще по коммитам ориентироваться. Поменялось много биндов и кор плагинов. Адаптировано для работы на neovim 0.11.
@ -20,7 +8,7 @@
Для выбора варианта из автокомплита надо жать ctrl+y, а не enter. Это можно исправить в конфиге, но я решил оставить так, как советует разраб kickstart.nvim, потому что я часто был в ситуации, когда готовая ide даёт мне вариант, но он мне не нужен, я уже написал свой, и мне надо перейти на новую строку, я жму enter и получаю комплит, который мне не нужен, мне новая строка нужна была.
Вкладки как в vscode я решил не делать, тут есть более удобный инструмент для этого. Например два раза нажать пробел в нормал моде, откроется меню буферов, то есть файлов, которые в данный момент открыты. Отображаются они в порядке последнего открытия. Ныне открытый файл там не отображается. Это аналог ctrl+tab в vscode. Можно легко и быстро переключаться между "вкладками". Если надо искать что-то среди файлов проекта, то можно нажать пробел sf, от слов search files. В целом пробел+s это поиск чего-то. Подсказки на экране скажут поиск чего будет происходить. Grep поиск это поиск по содержимому всех файлов проекта.
Вкладки как в vscode я решил не делать, тут есть более удобный инструмент для этого. Например два раза нажать пробел в нормал моде, откроется меню буферов, тоесть файлов, которые в данный момент открыты. Отображаются они в порядке последнего открытия. Ныне открытый файл там не отображается. Это аналог ctrl+tab в vscode. Можно легко и быстро переключаться между "вкладками". Если надо искать что-то среди файлов проекта, то можно нажать пробел sf, от слов search files. В целом пробел+s это поиск чего-то. Подсказки на экране скажут поиск чего будет происходить. Grep поиск это поиск по содержимому всех файлов проекта.
https://medium.com/@jogarcia/you-dont-need-tabs-in-neovim-c6ba5ee44e3e
Если будут проблемы с сессиями, то можно написать `:SessionDelete`. Для выхода из проекта лучше использовать `:qa`, а не `:q`, чтоб закрыть все буферы и не ломать сессии
@ -89,7 +77,7 @@ Per project можно использовать `.editorconfig` файл в ко
### Мои бинды
Все бинды можно искать прям в neovim, если нажать `Space s k`, то есть `S`earch `K`eymaps
Все бинды можно искать прям в neovim, если нажать `Space s k`, тоесть `S`earch `K`eymaps
Я не помню откуда эти бинды, может они есть в стоке, а может нет, но они полезные.
@ -224,7 +212,7 @@ Normal mode. С пробелом
```
Чтоб выключить форматирование у LSP, можно заглянуть в `lsp.lua` и увидеть примеры кода. Например я выключил форматирование у `sqls` везде и у `html` в файлах `templ`. Если у всех выкл, но что-то форматирует, значит форматтер установлен отдельно.
Некоторые LSP/Linter/Formatter не могут просто взять и заработать на каком-то файле. Например для работы `tailwindcss lsp` обязательным условием является `конфиг файл tailwind` в каталоге проекта, иначе ничего не будет работать. Для многих lsp важно находить `root dir`, который определяется по наличию каталога `.git` в проекте, иначе никаких подсказок в коде не будет. Разные инструменты для работы с SQL зачастую требуют делать конект к базе данных, иначе ничего работать не будет. То есть с удобством написать тестовый SQL код вне проекта не получится.
Некоторые LSP/Linter/Formatter не могут просто взять и заработать на каком-то файле. Например для работы `tailwindcss lsp` обязательным условием является `конфиг файл tailwind` в каталоге проекта, иначе ничего не будет работать. Для многих lsp важно находить `root dir`, который определяется по наличию каталога `.git` в проекте, иначе никаких подсказок в коде не будет. Разные инструменты для работы с SQL зачастую требуют делать конект к базе данных, иначе ничего работать не будет. Тоесть с удобством написать тестовый SQL код вне проекта не получится.
Я постарался исправить это там, где возможно. Например мне пришлось использовать `sqls` вместо `postgres_lsp`, чтоб подсказки работали даже вне проекта. Но зачастую придётся создавать проект и настраивать его, чтоб получить полноценный опыт IDE
@ -233,7 +221,7 @@ Normal mode. С пробелом
- `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 запросы надо писать внутри \`` так `\`. То есть внутри \` с пробелом в начале и конце, а не просто строка.
- Чтоб `sql` работал внутри `.go` файлов, sql запросы надо писать внутри \`` так `\`. Тоесть внутри \` с пробелом в начале и конце, а не просто строка.
- `sqlfluff` требует иметь `.sqlfluff` в директории проекта. Вот пример конфига:
```toml
[sqlfluff]

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/lua.lua Normal file
View file

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

4
nvim/ftplugin/svelte.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/yaml.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

View file

@ -13,8 +13,11 @@ if not (vim.uv or vim.loop).fs_stat(lazypath) then
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)
end
---@type vim.Option
local rtp = vim.opt.rtp
rtp:prepend(lazypath)
-- [[ Configure and install plugins ]]
--

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>

View file

@ -35,11 +35,13 @@
"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" },
"symbol-usage.nvim": { "branch": "main", "commit": "e07c07dfe7504295a369281e95a24e1afa14b243" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
"telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
"tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
}

View file

@ -3,7 +3,7 @@
return {
{
'mrcjkb/rustaceanvim',
version = '^5', -- For nvim0.11 use '^6'
version = '^6', -- Recommended
lazy = false, -- This plugin is already lazy
},
}

View file

@ -79,7 +79,7 @@ return {
SymbolKind.Class,
SymbolKind.Struct,
-- SymbolKind.Variable,
-- SymbolKind.Constant,
SymbolKind.Constant,
},
}
end,

View file

@ -18,7 +18,7 @@ return {
'nvim-neotest/nvim-nio',
-- Installs the debug adapters for you
'williamboman/mason.nvim',
'mason-org/mason.nvim',
'jay-babu/mason-nvim-dap.nvim',
-- Add your own debuggers here

View file

@ -51,7 +51,7 @@ return {
-- 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
if vim.bo.modifiable then
lint.try_lint()
end
end,

View file

@ -19,8 +19,8 @@ return {
'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',
{ 'mason-org/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants
'mason-org/mason-lspconfig.nvim',
'WhoIsSethDaniel/mason-tool-installer.nvim',
-- Useful status updates for LSP.
@ -73,6 +73,15 @@ return {
vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
end
-- Добавляем маппинг для hover с max_width = 80
map('K', function()
vim.lsp.buf.hover {
max_width = 80,
-- none, single, double, rounded, solid, shadow
border = 'solid',
}
end, 'Hover Documentation')
-- Rename the variable under your cursor.
-- Most Language Servers support renaming across files, etc.
map('grn', vim.lsp.buf.rename, '[R]e[n]ame')
@ -213,6 +222,11 @@ return {
-- Golang
lspconfig.gopls.setup {
-- settings = {
-- gopls = {
-- hoverKind = 'NoDocumentation',
-- },
-- },
completion = {
unimported = false,
},
@ -227,7 +241,11 @@ return {
end,
}
lspconfig.htmx.setup {}
lspconfig.svelte.setup {}
lspconfig.svelte.setup {
on_attach = function(client, bufnr) -- Выключить форматирование
client.server_capabilities.documentFormattingProvider = false
end,
}
lspconfig.emmet_language_server.setup {
filetypes = { 'templ', 'css', 'eruby', 'html', 'javascript', 'javascriptreact', 'less', 'sass', 'scss', 'pug', 'typescriptreact' },
}
@ -263,6 +281,13 @@ return {
}
-- C/C++
-- lspconfig.ccls.setup {
-- init_options = {
-- cache = {
-- directory = ".ccls-cache";
-- };
-- }
-- }
lspconfig.clangd.setup {
filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cuda' }, -- Удалил "proto"
}
@ -277,12 +302,13 @@ return {
}
-- Rust
lspconfig.rust_analyzer.setup {}
-- lspconfig.rust_analyzer.setup {}
-- Bash
lspconfig.bashls.setup {
on_attach = function(client, bufnr)
local filename = vim.api.nvim_buf_get_name(bufnr)
client.server_capabilities.documentFormattingProvider = false
local filename = vim.api.nvim_buf_get_name(bufnr) -- Выключить форматирование
if filename:match '/%.env$' or filename:match '/%.env%..+$' then
client.stop() -- отключить LSP только для .env
end
@ -293,6 +319,9 @@ return {
local cap_json = vim.lsp.protocol.make_client_capabilities()
cap_json.textDocument.completion.completionItem.snippetSupport = true
lspconfig.jsonls.setup {
on_attach = function(client, bufnr) -- Выключить форматирование
client.server_capabilities.documentFormattingProvider = false
end,
capabilities = cap_json,
}

View file

@ -1,7 +1,7 @@
-- You can easily change to a different colorscheme.
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
-- Cмена тем тут сделана неудобно
-- Cмена тем тут сделана уёбищно
-- Чтоб сменить стандартную тему, надо раскомментировать vim.cmd.colorscheme под именем темы
-- и закомментировать это же у прошлой темы
@ -29,67 +29,24 @@ for _, variant in ipairs(variants) do
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,
-- },
{
'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,
},
----------------------------------------------------------
-- Гандоны не дают выбрать тему нормально --
@ -149,38 +106,4 @@ return {
vim.cmd.colorscheme 'gruvbox'
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

@ -20,6 +20,9 @@ return {
'folke/which-key.nvim',
event = 'VimEnter', -- Sets the loading event to 'VimEnter'
opts = {
-- delay between pressing a key and opening which-key (milliseconds)
-- this setting is independent of vim.o.timeoutlen
delay = 0,
icons = {
-- set icon mappings to true if you have a Nerd Font
mappings = vim.g.have_nerd_font,

View file

@ -8,30 +8,27 @@ vim.g.maplocalleader = ' '
vim.g.have_nerd_font = true
-- [[ Setting options ]]
-- See `:help vim.opt`
-- See `:help vim.o`
-- 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
vim.o.number = true
-- You can also add relative line numbers, to help with jumping.
vim.opt.relativenumber = true
vim.o.relativenumber = true
-- Табуляция в 4 символа
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
vim.o.tabstop = 4
vim.o.shiftwidth = 4
vim.o.softtabstop = 4
-- Юзать пробелы вместо табов
vim.opt.expandtab = true
vim.o.expandtab = true
-- yaml lsp за меня решают сколько пробелов мне надо. Это фикс
-- Их параметры конфига для переназначения не работают. Пришлось костыль сделать
vim.cmd [[
autocmd FileType yaml setlocal shiftwidth=2 tabstop=2 softtabstop=2 expandtab
]]
vim.cmd [[
autocmd FileType nix setlocal shiftwidth=2 tabstop=2 softtabstop=2 expandtab
]]
-- vim.cmd [[
-- autocmd FileType yaml setlocal shiftwidth=2 tabstop=2 softtabstop=2 expandtab
-- ]]
-- Комментировать .proto код биндом
vim.api.nvim_create_autocmd('FileType', {
@ -58,13 +55,13 @@ vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
-- optionally enable 24-bit colour
-- vim.opt.termguicolors = true
-- vim.o.termguicolors = true
-- Enable mouse mode, can be useful for resizing splits for example!
vim.opt.mouse = 'a'
vim.o.mouse = 'a'
-- Don't show the mode, since it's already in the status line
vim.opt.showmode = false
vim.o.showmode = false
-- greatest remap ever
vim.keymap.set('x', '<leader>p', '"_dP', { desc = '[P]aste' })
@ -74,7 +71,7 @@ vim.keymap.set('x', '<leader>p', '"_dP', { desc = '[P]aste' })
-- Remove this option if you want your OS clipboard to remain independent.
-- See `:help 'clipboard'`
-- vim.schedule(function()
-- vim.opt.clipboard = 'unnamedplus'
-- vim.o.clipboard = 'unnamedplus'
-- end)
-- Use system clipboard via <leader>y/d, but Neovim clipboard via just y/d
@ -84,13 +81,6 @@ vim.keymap.set('v', '<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")
@ -98,57 +88,62 @@ 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
vim.o.breakindent = true
-- Save undo history
vim.opt.undofile = true
vim.o.undofile = true
-- Disable swap file
vim.opt.swapfile = false
vim.o.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'
vim.o.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
vim.o.ignorecase = true
vim.o.smartcase = true
-- Keep signcolumn on by default
vim.opt.signcolumn = 'yes'
vim.o.signcolumn = 'yes'
-- Decrease update time
vim.opt.updatetime = 250
vim.o.updatetime = 250
-- Decrease mapped sequence wait time
-- Displays which-key popup sooner
vim.opt.timeoutlen = 300
vim.o.timeoutlen = 300
-- Configure how new splits should be opened
vim.opt.splitright = true
vim.opt.splitbelow = true
vim.o.splitright = true
vim.o.splitbelow = true
-- Sets how neovim will display certain whitespace characters in the editor.
-- See `:help 'list'`
-- and `:help 'listchars'`
vim.opt.list = true
--
-- Notice listchars is set using `vim.opt` instead of `vim.o`.
-- It is very similar to `vim.o` but offers an interface for conveniently interacting with tables.
-- See `:help lua-options`
-- and `:help lua-options-guide`
vim.o.list = true
vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '' }
-- Preview substitutions live, as you type!
vim.opt.inccommand = 'split'
vim.o.inccommand = 'split'
-- Show which line your cursor is on
vim.opt.cursorline = true
vim.o.cursorline = true
-- Minimal number of screen lines to keep above and below the cursor.
vim.opt.scrolloff = 10
vim.o.scrolloff = 10
-- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`),
-- instead raise a dialog asking if you wish to save the current file(s)
-- See `:help 'confirm'`
-- vim.opt.confirm = true
-- vim.o.confirm = true
-- [[ Basic Keymaps ]]
-- See `:help vim.keymap.set()`
@ -199,11 +194,11 @@ vim.keymap.set('n', '<C-Up>', '<C-w><C-k>', { desc = 'Move focus to the upper wi
-- Highlight when yanking (copying) text
-- Try it with `yap` in normal mode
-- See `:help vim.highlight.on_yank()`
-- See `:help vim.hl.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()
vim.hl.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

@ -6,4 +6,4 @@ cp "$HOME/nixos-private-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"
p -r "$HOME/nixos-private-dots/shit/qt6ct" "$HOME/.config/qt6ct"

View file

@ -1,94 +1,94 @@
[Added Associations]
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;
image/*=com.interversehq.qView.desktop;imv-dir.desktop;
image/apng=com.interversehq.qView.desktop;imv-dir.desktop;
image/avif=com.interversehq.qView.desktop;imv-dir.desktop;
image/gif=com.interversehq.qView.desktop;imv-dir.desktop;
image/jpeg=;com.interversehq.qView.desktop;imv-dir.desktop;
image/pjpeg=com.interversehq.qView.desktop;imv-dir.desktop;
image/png=com.interversehq.qView.desktop;imv-dir.desktop;
image/svg+xml=com.interversehq.qView.desktop;imv-dir.desktop;
image/vnd.microsoft.icon=com.interversehq.qView.desktop;imv-dir.desktop;
image/webp=com.interversehq.qView.desktop;imv-dir.desktop;
image/x-icon=com.interversehq.qView.desktop;imv-dir.desktop;
text/*=nvim.desktop;code.desktop;
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
image/*=com.interversehq.qView.desktop;
image/apng=com.interversehq.qView.desktop;
image/avif=com.interversehq.qView.desktop;
image/gif=com.interversehq.qView.desktop;
image/jpeg=;com.interversehq.qView.desktop;
image/pjpeg=com.interversehq.qView.desktop;
image/png=com.interversehq.qView.desktop;
image/svg+xml=com.interversehq.qView.desktop;
image/vnd.microsoft.icon=com.interversehq.qView.desktop;
image/webp=com.interversehq.qView.desktop;
image/x-icon=com.interversehq.qView.desktop;
text/*=nvim.desktop;code.desktop
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
[Default Applications]
application/json=nvim.desktop;code.desktop;librewolf.desktop;firefox.desktop;chromium.desktop;
application/pdf=org.gnome.Evince.desktop;
application/x-bittorrent=qbittorrent.desktop;
application/x-extension-htm=librewolf.desktop;
application/x-extension-html=librewolf.desktop;
application/x-extension-shtml=librewolf.desktop;
application/x-extension-xht=librewolf.desktop;
application/x-extension-xhtml=librewolf.desktop;
application/x-sh=nvim.desktop;code.desktop;
application/x-shellscript=nvim.desktop;code.desktop;
application/x-zerosize=nvim.desktop;code.desktop;
application/xhtml+xml=librewolf.desktop;
application/xml=nvim.desktop;code.desktop;
application/yaml=nvim.desktop;code.desktop;
application/zip=ark.desktop;
audio/*=mpv.desktop;
audio/aac=mpv.desktop;
audio/flac=mpv.desktop;
audio/mp4=mpv.desktop;
audio/mpeg=mpv.desktop;
audio/ogg=mpv.desktop;
audio/opus=mpv.desktop;
audio/vnd.wav=mpv.desktop;
audio/webm=mpv.desktop;
audio/x-matroska=mpv.desktop;
audio/x-mpegurl=mpv.desktop;
audio/x-opus+ogg=mpv.desktop;
image/*=com.interversehq.qView.desktop;imv-dir.desktop;
image/apng=com.interversehq.qView.desktop;imv-dir.desktop;
image/avif=com.interversehq.qView.desktop;imv-dir.desktop;
image/gif=com.interversehq.qView.desktop;imv-dir.desktop;
image/jpeg=com.interversehq.qView.desktop;imv-dir.desktop;
image/pjpeg=com.interversehq.qView.desktop;imv-dir.desktop;
image/png=com.interversehq.com.interversehq.qView.desktop;
image/svg+xml=com.interversehq.qView.desktop;imv-dir.desktop;
image/vnd.microsoft.icon=com.interversehq.qView.desktop;imv-dir.desktop;
image/webp=com.interversehq.qView.desktop;imv-dir.desktop;
image/x-icon=com.interversehq.qView.desktop;imv-dir.desktop;
inode/directory=thunar.desktop;
text/*=nvim.desktop;code.desktop;
text/css=nvim.desktop;code.desktop;
text/csv=nvim.desktop;code.desktop;
text/html=librewolf.desktop;firefox.desktop;chromium.desktop;nvim.desktop;code.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;
video/*=mpv.desktop;
video/mp4=mpv.desktop;
video/mpeg=mpv.desktop;
video/quicktime=mpv.desktop;
video/webm=mpv.desktop;
video/x-matroska=mpv.desktop;
x-scheme-handler/about=librewolf.desktop;
x-scheme-handler/chrome=librewolf.desktop;
x-scheme-handler/http=librewolf.desktop;
x-scheme-handler/https=librewolf.desktop;
x-scheme-handler/jetbrains=jetbrains-toolbox.desktop;
x-scheme-handler/magnet=qbittorrent.desktop;
x-scheme-handler/mailto=thunderbird.desktop;
x-scheme-handler/unknown=librewolf.desktop;
application/json=nvim.desktop;code.desktop;librewolf.desktop;firefox.desktop;chromium.desktop
application/pdf=org.gnome.Evince.desktop
application/x-bittorrent=qbittorrent.desktop
application/x-extension-htm=librewolf.desktop
application/x-extension-html=librewolf.desktop
application/x-extension-shtml=librewolf.desktop
application/x-extension-xht=librewolf.desktop
application/x-extension-xhtml=librewolf.desktop
application/x-sh=nvim.desktop;code.desktop
application/x-shellscript=nvim.desktop;code.desktop
application/x-zerosize=nvim.desktop;code.desktop
application/xhtml+xml=librewolf.desktop
application/xml=nvim.desktop;code.desktop
application/yaml=nvim.desktop;code.desktop
application/zip=ark.desktop
audio/*=mpv.desktop
audio/aac=mpv.desktop
audio/flac=mpv.desktop
audio/mp4=mpv.desktop
audio/mpeg=mpv.desktop
audio/ogg=mpv.desktop
audio/opus=mpv.desktop
audio/vnd.wav=mpv.desktop
audio/webm=mpv.desktop
audio/x-matroska=mpv.desktop
audio/x-mpegurl=mpv.desktop
audio/x-opus+ogg=mpv.desktop
image/*=com.interversehq.qView.desktop;
image/apng=com.interversehq.qView.desktop;
image/avif=com.interversehq.qView.desktop;
image/gif=com.interversehq.qView.desktop;
image/jpeg=com.interversehq.qView.desktop;
image/pjpeg=com.interversehq.qView.desktop;
image/png=com.interversehq.com.interversehq.qView.desktop
image/svg+xml=com.interversehq.qView.desktop;
image/vnd.microsoft.icon=com.interversehq.qView.desktop;
image/webp=com.interversehq.qView.desktop;
image/x-icon=com.interversehq.qView.desktop;
inode/directory=thunar.desktop
text/*=nvim.desktop;code.desktop
text/css=nvim.desktop;code.desktop
text/csv=nvim.desktop;code.desktop
text/html=librewolf.desktop;firefox.desktop;chromium.desktop;nvim.desktop;code.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
video/*=mpv.desktop
video/mp4=mpv.desktop
video/mpeg=mpv.desktop
video/quicktime=mpv.desktop
video/webm=mpv.desktop
video/x-matroska=mpv.desktop
x-scheme-handler/about=librewolf.desktop
x-scheme-handler/chrome=librewolf.desktop
x-scheme-handler/http=librewolf.desktop
x-scheme-handler/https=librewolf.desktop
x-scheme-handler/jetbrains=jetbrains-toolbox.desktop
x-scheme-handler/magnet=qbittorrent.desktop
x-scheme-handler/mailto=thunderbird.desktop
x-scheme-handler/unknown=librewolf.desktop
[Removed Associations]