new public version

This commit is contained in:
Buliway 2025-08-05 16:19:57 +03:00
parent 0a275a2a0d
commit fad54c5aff
105 changed files with 3943 additions and 2736 deletions

107
BINDINGS.md Normal file
View file

@ -0,0 +1,107 @@
Тут будут описаны все бинды системы. Но мне может быть лень актуализировать эту огромную таблицу, так что лучше читай конфиги.
Возможно бинды для скринов придётся настроить руками в 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 Normal file
View file

@ -0,0 +1,320 @@
Тут будут всякие заметки и доп информация по работе с 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
'';
};
};
}
```
Необходимые пакеты я подбирал методом тыка, читая ошибки при попытке компилировать

34
PROBLEMS.md Normal file
View file

@ -0,0 +1,34 @@
Тут будет список проблем, с которыми я столкнулся при настройке 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`. Когда я его удалил, то всё стало работать нормально

453
README.md
View file

@ -1,302 +1,27 @@
## Навигация ## Навигация
- [Бинды](#бинды)
- [Другие README файлы в этих дотсах](#другие-readme-файлы-в-этих-дотсах) - [Другие README файлы в этих дотсах](#другие-readme-файлы-в-этих-дотсах)
- [Проблемы](#проблемы)
- [TODO](#todo) - [TODO](#todo)
- [Описание](#описание)
- [Нюансы с JetBrains Toolbox](#нюансы-с-jetbrains-toolbox)
- [Настройки для игр](#настройки-для-игр)
- [MangeHud](#mangohud)
- [gamemode](#gamemode)
- [gamescope](#gamescope)
- [Параметры запуска Steam](#параметры-запуска-steam)
- [Настройки мониторов](#настройка-мониторов)
- [Системная тема на всех вебсайтах](#системная-тема-на-всех-вебсайтах)
- [Мини гайд по NixOS](#мини-гайд-по-nixos) - [Мини гайд по NixOS](#мини-гайд-по-nixos)
- [Процесс установки](#процесс-установки) - [Процесс установки](#процесс-установки)
- [Первый способ](#первый-способ) - [Первый способ](#первый-способ)
- [Второй способ](#второй-способ) - [Второй способ](#второй-способ)
- [После установки надо](#после-установки-надо) - [После установки надо](#после-установки-надо)
- [Изменения для виртуалок](#изменения-для-виртуалок) - [Изменения для виртуалок](#изменения-для-виртуалок)
- [Иконки](#иконки)
- [Темы](#темы)
## Бинды
Клавиша `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, NeoVim | Да |
| `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 | Да |
Так же есть бинд на зажим дальней боковой кнопки мыши. Если эту кнопку нажимать, то она работает как обычно. Если её зажать и начать двигать мышку, то вместо движения курсора будет плавный скрол. Обычно такое делают на трекболах без колеса мыши, но я люблю этот метод скрола на любом девайсе. Можно скролить с нужной скоростью и точностью куда надо без долгого кручения колеса.
## Другие README файлы в этих дотсах ## Другие README файлы в этих дотсах
- [Бинды системы](./BINDINGS.md)
- [Список базового софта в системе и доп информация](./NOTES.md)
- [Цвета и иконки тем, храню для себя](./THEMES.md)
- [Список известных проблем при настройке системы](./PROBLEMS.md)
- [Копия man page для bspwm с доп инфой](./modules/home-manager/wm/bspwm/bspwm.md) - [Копия man page для bspwm с доп инфой](./modules/home-manager/wm/bspwm/bspwm.md)
- [Описание плагинов для mpv](./modules/home-manager/mpv/README.md) - [Описание плагинов для mpv](./modules/home-manager/mpv/README.md)
- [NeoVim config](./nvim/README.md)
## Проблемы
- Некоторые симлинки, созданные через home-manager, могут быть перезаписаны другим софтом, удалив мои настройки
- `Mimetypes` удаляют симлинк. Поэтому я сделал отдельный файл в каталоге `shit` и буду копировать готовый файл целиком в нужный каталог
- Не работает TUN мод во всех xray/singbox клиентах. Например nekoray пишет, что не удалось `setcap` при вводе пароля. Испробовал все доступные методы подключения, даже голый `singbox` через сервис никса. У меня просто пропадает инет в системе после конекта. Сейчас единственный рабочий метод, это скачать appimage nekoray с гитхаба, обязательно именно версии `3.26`, иначе не заработает, и запустить через sudo. И в настройках tun надо обязательно выключить `strick route`. Обычно я с ним сидел, но тут с ним проблемы и не работает ничего.
- `Gitui` выёбывается. Не может запушить, ошибка ssh появляется
- `Thunar` удаляет мой конфиг, даже если это не симлинк и даже если я перезапишу настройки в его же собственный файл. Приходится руками всё делать при каждой переустановке системы
- `Thunar` крашится при работе с более чем одним окном. Не всегда, но в самый не нужный момент. А `dolphin` тянет 10 терабайт гей порно в зависимости и выводит blowjob по среди экрана, так что я рот ебал. Хз даже что делать. Все файловый менеджеры гавно ебаное
- `Thunar` криво показывает превью видео. Это ебло дырявое генерит рандом кадр из видео в качестве превью. Ебантропы не могут взять данные из метаданных, куда все закидывают реальное превью. Они считают, что лучше генерить превью каждый ёбаный раз, чем взять уже готовое
- `polybar` и `bspwm` создали пидарасы ебаные бездарные. Одни ломают floating окна и не умеют нормально отображать все символы без ручного указания двух сотен шрифтов, другие не имеют документации и не могут нормально реализовать слои в wm. Ебланы блять. Все floating окна находятся под tiling окнами при запуске ебаного гей бара. Ебантропы не могут даже элементарную работу слоёв реализовать нормально. И эти два куска дерьма называют лучшими wm и status bar? Та нахуй они кому нужны с такими далбаёбами на разрабах. Иногда даже фулскрин находится под флоатингом, а флоатинг под тилингом. Ёбаный олигофрен создал этот bspwm
Мелочи
- Пароли через rofi выдают меню ввода пароля от qt, но оно имеет светлую тему. Ебал рот делать темы для qt, вечно всё через пизду работает
- В терминале ssh-agent палит мою почту. Но мб это только при первом запуске терминала
- В btop не работает статистика gpu. Установка зависимостей не помогла
- Не работает `git push` в `gitui`. Мб надо переподключить репу. Дело не в `ssh-agent`, его я исправил
- Не работает нечёткий поиск по истории комманд в терминале, если написать что-то и жать стрелку вверх
### Ребилд крашит систему
Эта проблема была раньше. Сейчас исправлена. Но заметку оставлю, вдруг пригодится в будущем
Ребилд системы через `switch` или `test` кладёт нахуй систему. Чёрный экран без возможности переключить tty через `ctrl + alt + F1-F7`. Можно юзать `boot`, чтоб после ребута пк применялось. Тогда не крашит и после ребута всё работает.
#### Потенциальный способ исправить проблему
Есть следующие два параметра:
- `systemd.services.<name>.restartIfChanged`
- `systemd.user.services.<name>.restartIfChanged`
Они указывают надо ли ребутать указанный сервис при ребилде системы. Мб надо туда что-то указать и сделать false
Я сделал это для одного сервиса в `nixos/configuration.nix`. Мне помогло. Но если будут ещё сервисы, ребилд на которых зависает и после него крашится система, то можно пробовать запретить рестарт при ребилде.
#### Реальный способ исправить проблему
Походу дело было в сервисе `cage`. Когда я его удалил, то всё стало работать нормально
## TODO
Надо сделать декларативную QT тему (ебал их рты). Сейчас у меня есть три каталог в каталоге `shit`. Их я могу скопировать в `~/.config`, нужная переменная окружения в `home.nix` стоит и всё заработает. Но это залупа. Другой человек не сможет это юзать мб. Потому что там в коде написан путь `/home/buliway`. Не всем же быть буливеями. Хотя это изи исправляется, потом сделаю. Но пока что я рот ебал тратить 3 дня на настройку темы бездарных далбаёбов на QT.
Надо сделать Nekoray нормально. Пока что только путь пидараса есть. Запускаешь `sudo ~/Downloads/VPN/nekoray-3.26-2023-12-09-linux-x64.AppImage`. В некобоксе офаешь у тян мода стрик роут. Систем тан. В меню жмёшь перезапустить прогу, она отлипла от терминала, перетащил на 10 воркспейс и сижу хуй сосу, ибо меня сайты в пермак кидают за такую хуйню
Надо добавить в polybar отображение:
- Заряд аккума. Сейчас проверить негде. Мб взять готовый вариант [тут](https://github.com/Zproger/bspwm-dotfiles/blob/main/config/polybar/modules.ini#L148)
- Яркость экрана. Тоже ноуты. Хз надо ли
- Температура и нагрузка на гп
- Температура цп
- Блютуз. Не знаю отображается ли он сейчас. Не могу проверить, негде
Установить и настроить:
- i3 с его экосистемой софта. Чтоб тот же polybar был лишь на bspwm, а на i3 работал i3bar
- Sway. Мб сделать через ags
## Описание
Железо, на котором это работает:
- CPU: i5 10400f
- GPU: AMD RX6600
- RAM: 32gb (2x16) ddr4 3200
- Motherboard: MSI Z590-A PRO
- Два монитора 1920x1080 на 165 и 100 герц
Основной набор софта
Изначально я написал конфиги для `bspwm` + `polybar`. Но так как оба эти проги созданы далбаёбами бездарными, я перееду на `i3` + `i3bar`. В теории между ними можно переключаться при запуске пк, так что проблем быть не должно. Если какой-то wm надо выключить, чтоб не засирать систему, то это можно делать в `modules/home-manager/bundle.nix`
| Software | Name |
| ------------ | -------------------------------- |
| WM | bspwm/i3 |
| Hotkeys | sxhkd/i3 |
| Terminal | Alacritty, Kitty |
| Multiplexer | Zellij |
| Shell | oh-my-zsh with many plugins |
| Shell Prompt | Starship |
| Apps/Menus | Rofi |
| Bar | Polybar/i3bar |
| ScreenLock | betterlockscreen/i3lock |
| Notification | Dunst |
| Files | Thunar, Ranger |
| Images | qView, imv, feh |
| Video | mpv with plugins |
| Music | Strawberry, Picard, Mousai, spek |
| Browsers | Librewolf, Firefox, Chromium |
| Social | Discord, Telegram, Steam |
| Audio | PipeWire, pavucontrol |
| Color Theme | Gruvbox Dark Medium |
| Icons | Gruvbox Plus Dark |
| DM | LightDM |
| Compositor | Нет. Мб будет стоковый picom |
| Screenshare | OBS, Screenkey, ksnip |
| Code Editor | VSCode, JetBrains, nixvim, helix |
| 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
```
## Нюансы с 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
Оптимизатор линукса для игр
### 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%`.
Параметр запуска с использованием gamescop `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
## Мини гайд по NixOS ## Мини гайд по NixOS
- Одинаковые вещи могут делаться разными способами. Это норма. По началу меня это бесило, когда читал чужие дотсы - Одинаковые вещи могут делаться разными способами. Это норма, ведь nix считается языком програмимрования. По началу меня это бесило, когда читал чужие дотсы
- Нюансы работы NixOS в [этом](https://www.youtube.com/watch?v=7f19R8BWUnU&t=960s) видео. Мне понравилось - Нюансы работы 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://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 ветке, ибо параметры могут отличаться. - Пакеты искать [тут](https://search.nixos.org/packages). Параметры для сток NixOS [тут](https://search.nixos.org/options). Параметры для home-manager [тут](https://home-manager-options.extranix.com/?query=&release=master). Для моих конфигов надо обязательно искать в unstable ветке, ибо параметры могут отличаться.
@ -304,7 +29,7 @@ xrandr --output HDMI-A-0 --mode 1920x1080 --rate 100 --right-of DisplayPort-2
## Процесс установки ## Процесс установки
Сначала качаем nixos kde или nixos gnome вариант и устанавливаем систему через визуальный установщик. При установке выбираем минимальный вариант, без DE. Сначала качаем NixOS GUI вариант и устанавливаем систему через визуальный установщик. При установке выбираем минимальный вариант, без DE.
Кто-то говорит, что потом достаточно просто забилдить одной командой чужой конфиг, но это не так. Будет ошибка, что нет гита. Если использовать nix-shell для гита, то скажет, что нет экспериментальной функции. Либо писать огромную команду, либо, как советую сделать я, изменить стоковый конфиг никса. Для этого пишем следующее: Кто-то говорит, что потом достаточно просто забилдить одной командой чужой конфиг, но это не так. Будет ошибка, что нет гита. Если использовать nix-shell для гита, то скажет, что нет экспериментальной функции. Либо писать огромную команду, либо, как советую сделать я, изменить стоковый конфиг никса. Для этого пишем следующее:
@ -340,7 +65,7 @@ sudo nano /etc/nixos/configuration.nix
sudo nixos-rebuild switch sudo nixos-rebuild switch
``` ```
Дальше есть два способа. Перед использованием любого из них я рекомендую сделать форк и внести следующие изменения в конфиг перед установкой (либо можно сделать гит клон и через nano внести изменения для первых трёх пунктов, остальное менять на готовой системе): Дальше есть два способа. Перед использованием любого из них я рекомендую сделать форк и внести следующие изменения в конфиг перед установкой (либо можно сделать гит клон и через nano/vim внести изменения для первых трёх пунктов, остальное менять на готовой системе):
- Переменную `username` в `nixos/configuration.nix`. - Переменную `username` в `nixos/configuration.nix`.
- `username` и `homeDirectory` в `nixos/home.nix`. - `username` и `homeDirectory` в `nixos/home.nix`.
@ -349,7 +74,7 @@ sudo nixos-rebuild switch
А это можно донастроить уже в готовой системе А это можно донастроить уже в готовой системе
- Путь до `home` в `shit/qt5ct/qt5ct.conf` и `shit/qt6ct/qt6ct.conf`. - Путь до `home` в `shit/qt5ct/qt5ct.conf` и `shit/qt6ct/qt6ct.conf`.
- Параметры мониторов закомментированы в файле `modules/home-manager/wm/bspwm/bspwm.nix`. Можно указать по желанию. Команда xrandr покажет доступные значения и имена мониторов. - Параметры мониторов закомментированы в файле `modules/home-manager/wm/bspwm/bspwm.nix`. Можно указать по желанию. Команда xrandr покажет доступные значения и имена мониторов.
- Если видеокарта от amd, то, чтоб не было тиринга, надо раскомментировать `videoDrivers` в `modules/nixos/xserver.nix`, `boot.initrd.kernelModules` и всю категорию настроек `amdgpu` в `modules/nixos/hardware.nix`. - Если видеокарта не от 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/home-manager/symlinks.nix`. Там сейчас мои симлинки, их лучше удалить. Чтоб файл заработал, надо раскомментировать `./symlinks.nix` в файле `modules/home-manager/bundle.nix`.
- Если надо монтировать другие диски, то для этого есть файл `modules/nixos/filesystems.nix`. Там сейчас мой второй ссд. Чтоб файл заработал, надо раскомментировать `./filesystems.nix` в файле `modules/nixos/bundle.nix`. - Если надо монтировать другие диски, то для этого есть файл `modules/nixos/filesystems.nix`. Там сейчас мой второй ссд. Чтоб файл заработал, надо раскомментировать `./filesystems.nix` в файле `modules/nixos/bundle.nix`.
- Если нужна гибернация, то её можно настроить в `modules/nixos/hibernate.nix`. Там надо указать uuid и офсет для swap файла. Чтоб файл заработал, надо раскомментировать `./hibernate.nix` в файле `modules/nixos/bundle.nix`. - Если нужна гибернация, то её можно настроить в `modules/nixos/hibernate.nix`. Там надо указать uuid и офсет для swap файла. Чтоб файл заработал, надо раскомментировать `./hibernate.nix` в файле `modules/nixos/bundle.nix`.
@ -378,7 +103,7 @@ sudo nixos-rebuild boot --impure --flake ~/nixos-private-dots
## После установки надо ## После установки надо
Это заметка для меня. Каждый ставит то, что ему надо Эта заметка частично для меня. Каждый ставит то, что ему надо
- Включить подкачку на 64 гига в `/etc/nixos/hardware-configuration.nix` через такой синтаксис: - Включить подкачку на 64 гига в `/etc/nixos/hardware-configuration.nix` через такой синтаксис:
```nix ```nix
@ -390,7 +115,7 @@ sudo nixos-rebuild boot --impure --flake ~/nixos-private-dots
- Настроить гибренацию в `modules/nixos/hibernate.nix` - Настроить гибренацию в `modules/nixos/hibernate.nix`
- Активировать скрипт в `shit` каталоге, чтоб скопировать нужные конфиги в нужные каталоги. Симлинки не работают - Активировать скрипт в `shit` каталоге, чтоб скопировать нужные конфиги в нужные каталоги. Симлинки не работают
- Настроить приложения `Qt5 Settings`, `Qt6 Settings` и `Kvantum`. Там надо выбрать свою системную тему. Вроде всё интуитивно понятно будет. Можно попробовать обновить систему, в надежде, что системная тема `stylix` начнёт работать с приложениями `qt`. Для этого надо будет закомментить настройки `qt` в конфиге `stylix`. - Настроить приложения `Qt5 Settings`, `Qt6 Settings` и `Kvantum`. Там надо выбрать свою системную тему. Вроде всё интуитивно понятно будет. Можно попробовать обновить систему, в надежде, что системная тема `stylix` начнёт работать с приложениями `qt`. Для этого надо будет закомментить настройки `qt` в конфиге `stylix`.
- Руками настроить `thunar`, бинды для `ksnip`, `discord`, `telegram`, `steam` и `strawberry` - Руками настроить `thunar`, `discord`, `telegram`, `steam`, `strawberry` и бинды для `ksnip`
- Добавить gpg ключи - Добавить gpg ключи
```sh ```sh
gpg --import /path/to/your-key.gpg gpg --import /path/to/your-key.gpg
@ -404,12 +129,14 @@ gpg --edit-key ID-ключа
## Изменения для виртуалок ## Изменения для виртуалок
Виртуалка требует минимум 100гб памяти. Если хочешь меньше, то удали огромную кучу софта из конфигов, который тебе не нужен на виртуалке.
Это надо, чтоб включить коннект по ssh к виртуалке и сделать с ней общий буфер обмена. Ну и ещё параметры экрана меняю на один 1080p монитор на 60 герц. Это надо, чтоб включить коннект по ssh к виртуалке и сделать с ней общий буфер обмена. Ну и ещё параметры экрана меняю на один 1080p монитор на 60 герц.
В файле `modules/nixos/virtualisation.nix` раскомментировать эти строки: В файле `modules/nixos/virtualisation.nix` раскомментировать эти строки:
```diff ```diff
+ services = { + services = {
+ openssh.enable = true; # Потом удали. Это ставится на виртуалку, чтоб к ней конект по ssh работал. + openssh.enable = true; # Это ставится на виртуалку, чтоб к ней конект по ssh работал.
+ spice-vdagentd.enable = true; # Clipboard sharing + spice-vdagentd.enable = true; # Clipboard sharing
+ qemuGuest = { + qemuGuest = {
+ enable = true; # Fix resolution + enable = true; # Fix resolution
@ -424,149 +151,11 @@ gpg --edit-key ID-ключа
- xrandr --output HDMI-A-0 --mode 1920x1080 --rate 100 --right-of DisplayPort-2 - xrandr --output HDMI-A-0 --mode 1920x1080 --rate 100 --right-of DisplayPort-2
+ xrandr --output Virtual-1 --mode 1920x1080 --rate 60 + xrandr --output Virtual-1 --mode 1920x1080 --rate 60
''; '';
startupPrograms = [
- # "spice-vdagent" # Для виртуалки
+ "spice-vdagent" # Для виртуалки
];
``` ```
В файле `modules/nixos/xserver.nix` закомментировать эти строки, даже если amd gpu на хосте:
## Запуск Waydroid на X11 ```diff
- videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU
Один раз написать в терминале `waydroid init` - deviceSection = ''Option "TearFree" "True"'';
+ # videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU
- Запустить `weston` + # deviceSection = ''Option "TearFree" "True"'';
- В его терминале написать `waydroid session start &` ```
- Потом `waydroid show-full-ui`
На weston всё работает сразу как надо. Но стоит изменить размеры окна, как waydroid ui пропадает. Приходится стопать и по новой запускать отображение
## Иконки
Искать иконки для nerd шрифта можно [тут](https://www.nerdfonts.com/cheat-sheet).
Соберу сюда список nerd иконок, которые могут пригодиться. Для их отображения нужен специальный шрифт
CPU (мб не юзать, а писать текстом и cpu и gpu) - 
RAM - 
CapsLock - 󰪛
Клавиатура -  или 󰌌
Громкость -   
Яркость - 󰃟 󰃞 󰃝
Календарь -   󰸗
Выключение пк - ⏻ 󰐥 
Приложения -  󰀻  󰵆
Блютуз -  󰂯 󰂲 󰥰 󰦋 󰏳 󰦢 󰗾 󰗿
Network - 󰈀  󰒍
Clipboard -   󱉧 
Оповещения (bell) - 󰀦  󰀧 󰀨 󰅉 󰨱 󰵙  󰂚    
Reload - 󰑓 󱄋
Wifi
 󰖩 󱚵 󱚽 󱚼 󰖪 󱛄
󰤭 󰤨 󰤥 󰤢 󰤟 󰤯 󰤫 󰤮
Батарейки
    
󰁹 󰂂 󰂁 󰂀 󰁿 󰁾 󰁽 󰁼 󰁻 󰁺 󰂎
󱊣 󱊢 󱊡 󰂎
󰂃 󱉝 󰂑
Батарейки зарядка
󰂅 󰂋 󰂊 󰢞 󰂉 󰢝 󰂈 󰂇 󰂆 󰢜 󰢟
󱊦 󱊥 󱊤 󰢟
󰂄
Батарейки блютуз
󰥈 󰥆 󰥅 󰥄 󰥃 󰥂 󰥁 󰥀 󰤿 󰤾
󰥇 󰥊 󰥉
Температура
󰔄 - Температура по цельсию
    
 
## Темы
У меня в vscode отображаются цвета. Так что я для себя сохраню разные варианты 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-компоненты.

130
THEMES.md Normal file
View file

@ -0,0 +1,130 @@
## 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
 󰖩 󱚵 󱚽 󱚼 󰖪 󱛄
󰤭 󰤨 󰤥 󰤢 󰤟 󰤯 󰤫 󰤮
Батарейки
    
󰁹 󰂂 󰂁 󰂀 󰁿 󰁾 󰁽 󰁼 󰁻 󰁺 󰂎
󱊣 󱊢 󱊡 󰂎
󰂃 󱉝 󰂑
Батарейки зарядка
󰂅 󰂋 󰂊 󰢞 󰂉 󰢝 󰂈 󰂇 󰂆 󰢜 󰢟
󱊦 󱊥 󱊤 󰢟
󰂄
Батарейки блютуз
󰥈 󰥆 󰥅 󰥄 󰥃 󰥂 󰥁 󰥀 󰤿 󰤾
󰥇 󰥊 󰥉
Температура
󰔄 - Температура по цельсию
    
 

View file

@ -1 +0,0 @@
Тут будут файлы, которые больше не нужны. Но может быть они мне пригодятся в будущем.

View file

@ -1,7 +0,0 @@
{
programs.chromium = {
enable = true;
# Пока что передумал настраивать браузер. Бекаплю каталог целиком
};
}

View file

@ -1,40 +0,0 @@
{
programs.firefox = { # Пока что передумал настраивать браузер. Бекаплю каталог целиком
enable = true;
# profiles.buliway = {
# search = {
# engines = {
# };
# force = true;
# };
# nativeMessagingHosts.ff2mpv = true; # Чтоб ff2mpv работал
# settings = {
# # "extensions.autoDisableScopes" = 0; # To automatically enable extensions
# "browser.bookmarks.openInTabClosesMenu" = false;
# "browser.tabs.loadBookmarksInBackground" = true;
# "layout.css.has-selector.enabled" = true;
# # https://github.com/K3V1991/Disable-Firefox-Telemetry-and-Data-Collection
# "browser.newtabpage.activity-stream.feeds.telemetry" = false;
# "browser.newtabpage.activity-stream.telemetry" = false;
# "datareporting.healthreport.uploadEnabled" = false;
# "datareporting.policy.dataSubmissionEnabled" = false;
# "toolkit.telemetry.archive.enabled" = false;
# "toolkit.telemetry.bhrPing.enabled" = false;
# "toolkit.telemetry.enabled" = false;
# "toolkit.telemetry.firstShutdownPing.enabled" = false;
# "toolkit.telemetry.newProfilePing.enabled" = false;
# "toolkit.telemetry.reportingpolicy.firstRun" = false;
# "toolkit.telemetry.server" = "";
# "toolkit.telemetry.shutdownPingSender.enabled" = false;
# "toolkit.telemetry.unified" = false;
# "toolkit.telemetry.updatePing.enabled" = false;
# };
# };
};
}

View file

@ -1,57 +0,0 @@
{ pkgs, ... }: {
programs.librewolf = { # Пока что передумал настраивать браузер. Бекаплю каталог целиком
enable = true;
# settings = { # Надо из about:config записать сюда свои изменения
# "browser.bookmarks.openInTabClosesMenu" = false; # Не закрывать каталог закладок при открытии через СКМ? Не помню
# "browser.tabs.loadBookmarksInBackground" = true; # Не перекидывать меня сразу на открытую закладку через СКМ? Не помню
# "layout.css.has-selector.enabled" = true; # Некоторые кастом стили это требуют
# # General
# # # Search (Если надо вернуть гугл поисковик в стоке)
# # "browser.policies.runOncePerModification.extensionsUninstall" = [ # Удалить расширения
# # "amazondotcom@search.mozilla.org"
# # "ebay@search.mozilla.org"
# # "twitter@search.mozilla.org"
# # ];
# # "browser.policies.runOncePerModification.removeSearchEngines" = [ # Удалить поисковые движки
# # "Amazon.com"
# # "eBay"
# # "Twitter"
# # ];
# # "browser.policies.runOncePerModification.setDefaultSearchEngine" = "Google"; # Стандартный поисковик
# # Privacy & Security
# # LibreWolf
# "clipboard.autocopy" = false; # Выкл копирование колесом мыши
# "middlemouse.paste" = false; # Выкл копирование колесом мыши
# "network.dns.disableIPv6" = true; # Выкл ivp6
# "privacy.resistFingerprinting" = false; # Лайтовое и мб не ломает работу сайтов
# "privacy.fingerprintingProtection" = false; # Хардовее и может ломать работу сайтов?
# "webgl.disabled" = false; # Включить WebGL
# # Extensions
# "browser.policies.runOncePerModification.extensionsInstall" = [ # Установка расширений
# "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi" # uBlock
# "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger/latest.xpi" # Privacy Badger
# ];
# };
};
# Чтоб ff2mpv работал. Не надо юзать их скрипт с гитхаба
# Надо будет потом написать "nix-build -A ff2mpv", чтоб проверить реальный путь до ff2mpv бинаря
# home.file.".librewolf/native-messaging-hosts/ff2mpv.json".text = ''
# {
# "name": "ff2mpv",
# "description": "ff2mpv's external manifest",
# "path": "${pkgs.ff2mpv}/bin/ff2mpv.py",
# "type": "stdio",
# "allowed_extensions": ["ff2mpv@yossarian.net"]
# }
# '';
# Ниже сделать настройки расширений декларативными
# home.file.".librewolf/?".source = ./?;
}

View file

@ -1,105 +0,0 @@
#!/usr/bin/env bash
# Дефолт конфиг https://github.com/baskerville/bspwm/blob/master/examples/bspwmrc
# Описание настроек можно найти тут https://manpages.debian.org/testing/bspwm/bspc.1.en.html
# Или через "man bspc" в терминале
# Или в ./bspwm.md
# https://my-take-on.tech/2020/07/03/some-tricks-for-sxhkd-and-bspwm/
################
## Автозапуск ##
################
# Это по сути терминал. Пишем то, как запускается прога через терминал и в конце & обязательно
# # Как я понял, их не надо запускать, ведь они активированы через services..enable = true;
# # Если в nixos что-то включается через services, а не через programs, то nixos сам отвечает за автозапуск сервисов
# pgrep -x sxhkd > /dev/null || sxhkd & # Запускаем sxhkd если он не запущен
# pgrep -x polybar > /dev/null || polybar & # Запускаем polybar если он не запущен
# pgrep -x dunst > /dev/null || dunst & # Запускаем dunst если он не запущен
# Изменить настройки для основного монитора. Мб вместе с --primary надо
xrandr --output DisplayPort-2 --mode 1920x1080 --rate 165
# Изменить настройки для второго (правого) монитора
xrandr --output HDMI-A-0 --mode 1920x1080 --rate 100 --right-of DisplayPort-2
ksnip &
# nekoray &
# obsidian &
# planify &
lxqt-policykit-agent &
# Я ебал рот видеть инет в трее. Замени эту ёбань на rofi и отдельную кнопку в polybar
nm-applet &
#########################
## Настройки мониторов ##
#########################
# Получаем имена активных мониторов
MONITORS=( $(xrandr --listactivemonitors | grep -E '^ [0-9]+:' | cut -d' ' -f6 | sed 's/\n/ /') )
# Если переменная MONITOR уже задана, то используется её значение.
# Если она не задана (то есть пуста или не существует), то используется первый элемент из массива MONITORS (то есть, первый активный монитор).
# Это гарантирует, что переменная MONITOR всегда будет содержать значение: либо установленное ранее, либо первый активный монитор по умолчанию.
# ":-" Это оператор в Bash, который используется для установки значения по умолчанию. Если переменная не задана или пуста, используется значение после :-
MONITOR="${MONITOR:-${MONITORS[0]}}"
# Для запуска приложений на втором мониторе, если он доступен. Если второго монитора нет, используем первый.
MONITOR2="${MONITORS[1]:-${MONITORS[0]}}"
# # Устанавливаем рабочие столы с именами от 1 до 10 для каждого монитора
for mon in ${MONITORS[@]}; do
bspc monitor $mon -d {1,2,3,4,5,6,7,8,9,10}
done
# Устанавливаем рабочие столы с именами от 1 до 10 для каждого монитора
#bspc monitor -d 1 2 3 4 5 6 7 8 9 10 # Можно заменить на {1,2,3,4,5,6,7,8,9,10}
# Настройка автоматического удаления настроек для отключённых и отсоединённых мониторов
bspc config remove_disabled_monitors false
bspc config remove_unplugged_monitors false
#####################
## Настройки bspwm ##
#####################
# Syntax - bspc config [-m MONITOR_SEL|-d DESKTOP_SEL|-n NODE_SEL] <setting> [<value>]
# Устанавливает ширину границ окон в 2 пикселя.
bspc config border_width 2
# Задаёт расстояние между окнами (отступ) в 5 пикселей.
bspc config window_gap 5
# Настраивает коэффициент разделения окон при их разделении. Значение 0.52 означает, что при разделении окно будет занимать 52% доступного пространства.
bspc config split_ratio 0.52
# В режиме monocle (максимизация окна на весь экран) границы окон будут скрыты.
bspc config borderless_monocle true
# В режиме monocle будет отсутствовать отступ между окнами.
bspc config gapless_monocle true
# Eсли вы активируете режим "monocle" на одном мониторе, другие мониторы остаются в обычном режиме
bspc config single_monocle false
# Фокусировка следует за курсором
bspc config focus_follows_pointer true
###############################
## Поведение конкретных окон ##
###############################
# Yдаляет все существующие правила для всех окон
# bspc rule -r '*'
bspc rule -a "polybar" layer=above
bspc rule -a "Screenkey" manage=off
bspc rule -a "ksnip" state=floating center=true focus=on rectangle=1600x900+0+0
bspc rule -a "org.kde.ark" state=floating center=true focus=on rectangle=1200x800+0+0
bspc rule -a "floating-terminal" state=floating center=true focus=on rectangle=1200x800+0+0

View file

@ -1,121 +0,0 @@
# Команды для терминала
# Узнать тип файла - xdg-mime query filetype foo.pdf
# Узнать нынешнее дефолт приложения - xdg-mime query default application/pdf
# Узнать имя приложения. Для примера взять evince - fd evince.desktop /
# Выведет пути, по которым можно понять как называется приложение
# В список [] можно через пробел добавить другие варианты. Если первая прога не откроет, то попытается вторая
# Список mime types смотрел тут https://mimetype.io/all-types
# Нагуглить значение "x-scheme-handler" невозможно. Как я понял, это кастом типы
##############################################################################
# Как система готова, то замени имена прог на реальные. Сейчас на абум стоят #
##############################################################################
{
xdg.mimeApps = { # Конфиг для `~/.config/mimeapps.list`
enable = true;
defaultApplications = { # Стандартные приложения для открытия нужного файла
# Browser
"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/xhtml+xml" = [ "librewolf.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/unknown" = [ "librewolf.desktop" ];
# Images
"image/*" = [ "qview.desktop" "imv.desktop" ];
"image/avif" = [ "qview.desktop" "imv.desktop" ];
"image/gif" = [ "qview.desktop" "imv.desktop" ];
"image/jpeg" = [ "qview.desktop" "imv.desktop" ]; # Обычный jpeg, прогрузка сверху вниз
"image/pjpeg" = [ "qview.desktop" "imv.desktop" ]; # Сначала размытый и постепенной лучше видно, для медленного инета
"image/apng" = [ "qview.desktop" "imv.desktop" ]; # Анимированный png
"image/png" = [ "qview.desktop" "imv.desktop" ];
"image/svg+xml" = [ "qview.desktop" "imv.desktop" ];
"image/webp" = [ "qview.desktop" "imv.desktop" ];
"image/x-icon" = [ "qview.desktop" "imv.desktop" ];
"image/vnd.microsoft.icon" = [ "qview.desktop" "imv.desktop" ];
# Video
"video/*" = [ "mpv.desktop" ];
"video/mp4" = [ "mpv.desktop" ];
"video/mpeg" = [ "mpv.desktop" ];
"video/quicktime" = [ "mpv.desktop" ];
"video/webm" = [ "mpv.desktop" ];
"video/x-matroska" = [ "mpv.desktop" ];
# Audio
"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" ]; # Для .m3u. Это файл-плейлист
"audio/x-opus+ogg" = [ "mpv.desktop" ]; # What's this? Why not "audio/ogg" and "audio/opus"?
# Text
"text/*" = [ "nvim.desktop" "code.desktop" ]; # Надо ли заменять nvim и всё что ниже на NixVim?
"text/css" = [ "nvim.desktop" "code.desktop" ];
"text/csv" = [ "nvim.desktop" "code.desktop" ];
"text/html" = [ "nvim.desktop" "code.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"text/javascript" = [ "nvim.desktop" "code.desktop" ];
"text/markdown" = [ "nvim.desktop" "code.desktop" ];
"text/plain" = [ "nvim.desktop" "code.desktop" ];
"text/x-asm" = [ "nvim.desktop" "code.desktop" ];
"text/x-c" = [ "nvim.desktop" "code.desktop" ];
"text/x-python" = [ "nvim.desktop" "code.desktop" ];
"application/json" = [ "nvim.desktop" "code.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"application/x-sh" = [ "nvim.desktop" "code.desktop" ];
"application/x-shellscript" = [ "nvim.desktop" "code.desktop" ];
"application/xml" = [ "nvim.desktop" "code.desktop" ];
"application/yaml" = [ "nvim.desktop" "code.desktop" ];
# Мб потом добавить для docs варианты и разные виды архивов и ebook
# Other
"application/pdf" = [ "org.gnome.Evince.desktop" ];
"application/x-zerosize" = [ "nvim.desktop" "code.desktop" ]; # Файл нулевого размера
"application/zip" = [ "ark.desktop" ];
"application/x-bittorrent" = [ "qbittorrent.desktop" ];
"x-scheme-handler/magnet" = [ "qbittorrent.desktop" ];
"inode/directory" = [ "thunar.desktop" ];
"x-scheme-handler/mailto" = [ "thunderbird.desktop" ];
"x-scheme-handler/jetbrains" = [ "jetbrains-toolbox.desktop" ];
};
associations.added = { # Дополнительные приложения для нужного файла. Будет в меню "Открыть с помощью"
# Images
"image/*" = [ "qview.desktop" "imv.desktop" ];
"image/avif" = [ "qview.desktop" "imv.desktop" ];
"image/gif" = [ "qview.desktop" "imv.desktop" ];
"image/jpeg" = [ "qview.desktop" "imv.desktop" ]; # Обычный jpeg, прогрузка сверху вниз
"image/pjpeg" = [ "qview.desktop" "imv.desktop" ]; # Сначала размытый и постепенной лучше видно, для медленного инета
"image/apng" = [ "qview.desktop" "imv.desktop" ]; # Анимированный png
"image/png" = [ "qview.desktop" "imv.desktop" ];
"image/svg+xml" = [ "qview.desktop" "imv.desktop" ];
"image/webp" = [ "qview.desktop" "imv.desktop" ];
"image/x-icon" = [ "qview.desktop" "imv.desktop" ];
"image/vnd.microsoft.icon" = [ "qview.desktop" "imv.desktop" ];
# Text
"text/*" = [ "nvim.desktop" "code.desktop" ]; # Надо ли заменять nvim и всё что ниже на NixVim?
"text/css" = [ "nvim.desktop" "code.desktop" ];
"text/csv" = [ "nvim.desktop" "code.desktop" ];
"text/html" = [ "nvim.desktop" "code.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"text/javascript" = [ "nvim.desktop" "code.desktop" ];
"text/markdown" = [ "nvim.desktop" "code.desktop" ];
"text/plain" = [ "nvim.desktop" "code.desktop" ];
"text/x-asm" = [ "nvim.desktop" "code.desktop" ];
"text/x-c" = [ "nvim.desktop" "code.desktop" ];
"text/x-python" = [ "nvim.desktop" "code.desktop" ];
"application/json" = [ "nvim.desktop" "code.desktop" "librewolf.desktop" "firefox.desktop" "chromium.desktop" ];
"application/x-sh" = [ "nvim.desktop" "code.desktop" ];
"application/x-shellscript" = [ "nvim.desktop" "code.desktop" ];
"application/xml" = [ "nvim.desktop" "code.desktop" ];
"application/yaml" = [ "nvim.desktop" "code.desktop" ];
};
};
}

View file

@ -1,82 +0,0 @@
{ pkgs, ... }: {
programs.fish = {
enable = true;
shellAliases = let
flakeDir = "~/dots";
in {
rb = "sudo nixos-rebuild switch --flake ${flakeDir}"; # Применить новый конфиг
# Можно назвать аналогом "sudo pacman -Su", не "Syu", репу не обновляет
upg = "sudo nixos-rebuild switch --upgrade --flake ${flakeDir}"; # Обновить пакеты, но не репозиторий во fleke.lock
# Возможно это аналог "sudo pacman -Sy". Обновить репозиторий, чтоб потом на него обновиться? Пакеты не обновляет
upd = "nix flake update ${flakeDir}"; # Обновляет flake.lock на последние коммиты с гитхаба?
pkgs = "nvim ${flakeDir}/nixos/packages.nix";
v = "nvim";
t = "timer";
r = "ranger";
ff = "fastfetch";
yt = "cd /mnt/backups/Media/yt-dlp"; # Бекапить YouTube
qb = "cd /mnt/backups/Media/Music/Qobux/qdl"; # Бекапить музыку с Qobuz
};
# Всё, что в комментах ниже, лишнее. Я нашёл норм способ. Пишем "nix-prefetch-git link" и получаем всю инфу
# Узнать rev - git ls-remote https://github.com/{owner}/{repo}.git HEAD
# На гитхабе вроде можно просто на странице коммитов нажать ... и copy full SHA
# Узнать sha256 - sudo nix-prefetch-url --unpack https://github.com/{owner}/{repo}/archive/{rev}.tar.gz
# Ссылку проще получить, открыв страницу релизов и оттуда скопировать ссылку на архив
# Если нет релизов - sudo nix-prefetch-url --unpack https://github.com/{owner}/{repo}/archive/refs/heads/{branch}.zip
plugin = [
{ # The Node.js version manager you'll adore, crafted just for Fish
name = "nvm.fish"; # https://github.com/jorgebucaran/nvm.fish
src = pkgs.fetchFromGitHub {
owner = "jorgebucaran";
repo = "nvm.fish";
rev = "b8edb1ee24cbbf7259196b0cb3c6c4ab65b07929";
sha256 = "17vk608mbmb9mwvvm18hs63iy7vzdrd1ymia94szy1hy5d0li77c";
};
}
{ # Utility functions to start your ssh agent when using fish shell
name = "fish-ssh-agent"; # https://github.com/danhper/fish-ssh-agent
src = pkgs.fetchFromGitHub {
owner = "danhper";
repo = "fish-ssh-agent";
rev = "fd70a2afdd03caf9bf609746bf6b993b9e83be57";
sha256 = "1fvl23y9lylj4nz6k7yfja6v9jlsg8jffs2m5mq0ql4ja5vi5pkv";
};
}
];
};
home = {
packages = with pkgs.fishPlugins; [ # Плагины для Fish из репы никса
z # Частые директории https://github.com/jethrokuan/z/blob/master/man/man1/z.md
plugin-git # Алиасы для гита https://github.com/jhillyerd/plugin-git
fzf-fish # https://github.com/PatrickF1/fzf.fish
done # Оповещения для длительных процессов https://github.com/franciscolourenco/done
bass # Позволяет юзать bash в fish https://github.com/edc/bass
];
# Чтоб при выходе из ranger я всегда cd в каталог, из которого вышел
file.".config/fish/functions/ranger.fish".text = ''
function ranger
set tempfile (mktemp -t tmp.XXXXXX)
command ranger --choosedir=$tempfile $argv
set return_value $status
if test -s $tempfile
set ranger_pwd (cat $tempfile)
if test -n $ranger_pwd -a -d $ranger_pwd
builtin cd -- $ranger_pwd
end
end
command rm -f -- $tempfile
return $return_value
end
'';
};
}

View file

@ -1,443 +0,0 @@
[Analyzer]
framerate=25
type=BlockAnalyzer
[Appearance]
background_image_do_not_cut=true
background_image_keep_aspect_ratio=true
background_image_max_size=0
background_image_position=5
background_image_stretch=false
background_image_type=1
blur_radius=0
icon_size_configure_buttons=16
icon_size_left_panel_buttons=22
icon_size_play_control_buttons=32
icon_size_playlist_buttons=20
icon_size_tabbar_large_mode=40
icon_size_tabbar_small_mode=32
opacity_level=40
playlist_playing_song_color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
style=default
system_icons=false
tab_color=@Variant(\0\0\0\x43\x2\xff\xffOL\x87\x87\x92+\0\0)
tab_gradient=true
tab_system_color=true
[Backend]
AutoCrossfadeEnabled=false
CrossfadeEnabled=false
FadeoutDuration=2000
FadeoutEnabled=false
FadeoutPauseDuration=250
FadeoutPauseEnabled=false
NoCrossfadeSameAlbum=true
alsaplugin=3
bs2b=false
bufferduration=4000
bufferhighwatermark=0.99
bufferlowwatermark=0.33
channels=2
channels_enabled=false
device=@Invalid()
ebur128_loudness_normalization=false
ebur128_target_level_lufs=-23
engine=gstreamer
http2=false
output=autoaudiosink
rgcompression=true
rgenabled=false
rgfallbackgain=0
rgmode=1
rgpreamp=0
strict_ssl=false
volume_control=true
[Behaviour]
doubleclick_addmode=1
doubleclick_playlist_addmode=1
doubleclick_playmode=1
keeprunning=false
language=
menu_playmode=1
menu_previousmode=1
playing_widget=true
resumeplayback=false
seek_step_sec=10
showtrayicon=true
startupbehaviour=1
trayicon_progress=false
[Collection]
auto_open=true
cache_size=160
cache_size_unit=1
cover_art_patterns=front, cover
delete_files=true
disk_cache_enable=false
disk_cache_size=360
disk_cache_size_unit=1
expire_unavailable_songs=60
group_by1=1
group_by2=4
group_by3=0
group_by_version=1
last_path=/home/buliway/backups/Media/Music
mark_songs_unavailable=true
monitor=true
overwrite_playcount=false
overwrite_rating=false
pretty_covers=true
save_playcounts=true
save_ratings=true
separate_albums_by_grouping=false
show_dividers=true
song_ebur128_loudness_analysis=false
song_tracking=false
startup_scan=true
[Context]
AlbumEnable=true
SearchCoverEnable=true
SearchLyricsEnable=true
SongLyricsEnable=true
SummaryFmt=%album%
TechnicalDataEnable=false
TitleFmt=%title% - %artist%
font_headline=Noto Sans
font_normal=Noto Sans
font_size_headline=11
font_size_normal=9
[Covers]
providers=Last.fm, MusicBrainz, Deezer, Musixmatch, Spotify, Tidal, Qobuz
save_filename=2
save_lowercase=true
save_overwrite=false
save_pattern=%albumartist-%album
save_replace_spaces=true
save_type=1
types=art_unset, art_manual, art_automatic, art_embedded
[EditTagDialog]
current_tab=1
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\xf\x1\0\0\0\x19\0\0\x12\xb1\0\0\x4\x10\0\0\xf\x1\0\0\0\x19\0\0\x12\xc0\0\0\x4$\0\0\0\x1\x2\0\0\0\a\x80\0\0\xf\x1\0\0\0\x19\0\0\x12\xb1\0\0\x4\x10)
[Equalizer]
enable_stereo_balancer=false
enabled=false
presets\1\name=Classical
presets\1\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xd8\xff\xff\xff\xd8\xff\xff\xff\xd8\xff\xff\xff\xce)
presets\10\name=Live
presets\10\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\xff\xff\xff\xe7\0\0\0\0\0\0\0\x14\0\0\0\x19\0\0\0\x1e\0\0\0\x1e\0\0\0\x14\0\0\0\xf\0\0\0\xf\0\0\0\n)
presets\11\name=Party
presets\11\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0#\0\0\0#\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0#\0\0\0#)
presets\12\name=Pop
presets\12\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\xff\xff\xff\xf6\0\0\0\x19\0\0\0#\0\0\0(\0\0\0\x19\xff\xff\xff\xfb\xff\xff\xff\xf1\xff\xff\xff\xf1\xff\xff\xff\xf6\xff\xff\xff\xf6)
presets\13\name=Reggae
presets\13\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xfb\xff\xff\xff\xe2\0\0\0\0\xff\xff\xff\xdd\xff\xff\xff\xdd\0\0\0\0\0\0\0\0\0\0\0\0)
presets\14\name=Rock
presets\14\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0(\0\0\0\x19\xff\xff\xff\xe2\xff\xff\xff\xd8\xff\xff\xff\xec\0\0\0\x14\0\0\0-\0\0\0\x37\0\0\0\x37\0\0\0\x37)
presets\15\name=Ska
presets\15\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\xff\xff\xff\xf1\xff\xff\xff\xe7\xff\xff\xff\xe7\xff\xff\xff\xfb\0\0\0\x14\0\0\0\x1e\0\0\0-\0\0\0\x32\0\0\0\x37\0\0\0\x32)
presets\16\name=Soft
presets\16\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x19\0\0\0\n\xff\xff\xff\xfb\xff\xff\xff\xf1\xff\xff\xff\xfb\0\0\0\x14\0\0\0-\0\0\0\x32\0\0\0\x37\0\0\0<)
presets\17\name=Soft Rock
presets\17\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x14\0\0\0\x14\0\0\0\n\xff\xff\xff\xfb\xff\xff\xff\xe7\xff\xff\xff\xe2\xff\xff\xff\xec\xff\xff\xff\xfb\0\0\0\xf\0\0\0-)
presets\18\name=Techno
presets\18\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0(\0\0\0\x1e\0\0\0\0\xff\xff\xff\xe2\xff\xff\xff\xe7\0\0\0\0\0\0\0(\0\0\0\x32\0\0\0\x32\0\0\0-)
presets\19\name=Zero
presets\19\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)
presets\2\name=Club
presets\2\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x1e\0\0\0\x1e\0\0\0\x1e\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0)
presets\3\name=Custom
presets\3\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)
presets\4\name=Dance
presets\4\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x32\0\0\0#\0\0\0\n\0\0\0\0\0\0\0\0\xff\xff\xff\xe2\xff\xff\xff\xd8\xff\xff\xff\xd8\0\0\0\0\0\0\0\0)
presets\5\name=Full Bass
presets\5\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x46\0\0\0\x46\0\0\0\x46\0\0\0(\0\0\0\x14\xff\xff\xff\xd3\xff\xff\xff\xce\xff\xff\xff\xc9\xff\xff\xff\xc9\xff\xff\xff\xc9)
presets\6\name=Full Bass + Treble
presets\6\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0#\0\0\0\x1e\0\0\0\0\xff\xff\xff\xd8\xff\xff\xff\xe7\0\0\0\n\0\0\0-\0\0\0\x37\0\0\0<\0\0\0<)
presets\7\name=Full Treble
presets\7\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\xff\xff\xff\xce\xff\xff\xff\xce\xff\xff\xff\xce\xff\xff\xff\xe7\0\0\0\xf\0\0\0\x37\0\0\0P\0\0\0P\0\0\0P\0\0\0U)
presets\8\name=Laptop/Headphones
presets\8\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x19\0\0\0\x32\0\0\0\x19\xff\xff\xff\xec\0\0\0\0\xff\xff\xff\xe2\xff\xff\xff\xd8\xff\xff\xff\xd8\0\0\0\0\0\0\0\0)
presets\9\name=Large Hall
presets\9\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x32\0\0\0\x32\0\0\0\x1e\0\0\0\x1e\0\0\0\0\xff\xff\xff\xe7\xff\xff\xff\xe7\xff\xff\xff\xe7\0\0\0\0\0\0\0\0)
presets\size=19
selected_preset=Custom
stereo_balance=0
[GlobalShortcuts]
dec_volume=
inc_volume=
love=
mute=
next_track=Media Next
pause=
play=
play_pause=Media Play
prev_track=Media Previous
repeat_mode=
seek_backward=
seek_forward=
show_hide=
show_osd=
shuffle_mode=
stop=Media Stop
stop_after=
toggle_pretty_osd=
toggle_scrobbling=
use_gnome=false
use_kde=true
use_mate=false
use_x11=false
[LastFM]
enabled=false
[LibreFM]
enabled=false
[ListenBrainz]
enabled=false
user_token=
[Lyrics]
providers=Genius, Lyrics.ovh, LoloLyrics, Musixmatch, songlyrics.com, azlyrics.com, elyrics.net, lyricsmode.com
[MainWindow]
add_folder_path=/home/buliway/backups/Media/Music
current_tab=1
do_not_show_sponsor_message=true
file_path=/home/buliway
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\xf\0\0\0\0\0\0\0\x16k\0\0\x4\a\0\0\xf\0\0\0\0\0\0\0\x16\x7f\0\0\x4\x37\0\0\0\x1\x2\0\0\0\a\x80\0\0\xf\0\0\0\0\0\0\0\x16k\0\0\x4\a)
hidden=false
maximized=true
minimized=false
search_for_cover_auto=true
show_sidebar=true
splitter_state=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\x1>\0\0\x4W\0\xff\xff\xff\xff\x1\0\0\0\x1\0)
tab_collection=1
tab_context=0
tab_devices=7
tab_files=5
tab_mode=1
tab_playlists=3
tab_queue=2
tab_radios=6
tab_smartplaylists=4
[Moodbar]
enabled=false
save=false
show=false
style=0
[NetworkProxy]
engine=true
hostname=
mode=0
password=
port=0
type=3
use_authentication=false
username=
[OSD]
Behaviour=0
CustomText1=
CustomText2=
CustomTextEnabled=false
ShowArt=true
ShowOnPausePlayback=false
ShowOnPlayModeChange=false
ShowOnResumePlayback=false
ShowOnVolumeChange=false
Timeout=5000
[OSDPretty]
background_color=4284913379
background_opacity=0.8500000238418579
disable_duration=false
fading=false
font="Verdana,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
foreground_color=4278190080
popup_pos=@Point(1460 0)
popup_screen=DP-3
[Player]
playback_playlist=22
playback_position=37
playback_state=3
volume=6
[Playlist]
alternating_row_colors=true
auto_sort=false
column_alignments=@Variant(\0\0\0\x7f\0\0\0\x13\x43olumnAlignmentMap\0\0\0\0\v\0\0\0\x6\0\0\0\x82\0\0\0\a\0\0\0\x82\0\0\0\b\0\0\0\x82\0\0\0\t\0\0\0\x82\0\0\0\n\0\0\0\x82\0\0\0\f\0\0\0\x82\0\0\0\r\0\0\0\x82\0\0\0\xe\0\0\0\x82\0\0\0\x11\0\0\0\x82\0\0\0\x15\0\0\0\x82\0\0\0\x16\0\0\0\x82)
continue_on_error=false
current_playlist=22
delete_files=true
editmetadatainline=false
glow_effect=true
greyout_songs_play=true
greyout_songs_startup=true
last_load_playlist=/home/buliway/backups/Media/Music/Strawberry/Rofl.xspf
last_save_all_extension=xspf
last_save_all_path=/home/buliway/backups/Media/Music/Strawberry
last_save_extension=xspf
last_save_filter=XSPF playlists (*.xspf)
last_save_path=/home/buliway/backups/Media/Music/Strawberry
path_type=2
playlist_clear=true
rating_locked=false
select_track=false
show_bars=true
show_toolbar=true
state="@ByteArray(P,\x95\xf\x1\0\0\0 \0\0\x1\xc4\0\0\0\xdc\0\0\0\0\0\0\0\xdc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0,\0\0\0\0\0\0\0R\0\0\0\0\0\0\0\x82\0\0\0\x36\0\0\0R\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\b\0\0\0\0\0\0\0\x2\0\0\0\x3\0\0\0\x4\0\0\0\x5\0\0\0\x6\0\0\0\a\0\0\0\t\0\0\0\x1\0\0\0\n\0\0\0\v\0\0\0\f\0\0\0\r\0\0\0\xe\0\0\0\xf\0\0\0\x10\0\0\0\x11\0\0\0\x12\0\0\0\x13\0\0\0\x14\0\0\0\x15\0\0\0\x16\0\0\0\x17\0\0\0\x18\0\0\0\x19\0\0\0\x1a\0\0\0\x1b\0\0\0\x1c\0\0\0\x1d\0\0\0\x1e\0\0\0\x1f\0\0\0 ?\xd3\xb4\xaa\x33\x9eW\xe4?\xc3@\x1a\xf9\xf9<\xa4\0\0\0\0\0\0\0\0?\xc3\x41\b\xc4\x39@\x5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\x9e\xd3)\"~\x95\xa7\0\0\0\0\0\0\0\0?\xac\xbb\x86<\xb6:\xdd\0\0\0\0\0\0\0\0?\xb6\xc0\x15\x89h\xe7X?\xa2\xd8)B\xc5\xa6\x33?\xac\xdb\x2\x96\xb7[\x9f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\xaaJ?\x87\x39\x9b<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\xb2Y\xb7\x14\x62\xae`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n)"
state_version=1
warn_close_playlist=true
write_metadata=true
[PlaylistSequence]
repeat_mode=0
shuffle_mode=0
[Qobuz]
albums_group_by1=1
albums_group_by2=4
albums_group_by3=0
albums_group_by_version=1
albums_separate_albums_by_grouping=false
artists_group_by1=1
artists_group_by2=4
artists_group_by3=0
artists_group_by_version=1
artists_separate_albums_by_grouping=false
search_group_by1=1
search_group_by2=4
search_group_by3=0
search_group_by_version=1
songs_group_by1=1
songs_group_by2=4
songs_group_by3=0
songs_group_by_version=1
songs_separate_albums_by_grouping=false
tab=artists
[Scrobbler]
albumartist=false
enabled=false
love_button=false
offline=false
scrobble_button=false
show_error_dialog=true
sources=collection, file, cd, device, subsonic, tidal, qobuz, stream, somafm, radioparadise, unknown
submit=0
[SerializedSmartPlaylists]
songs\1\data=@ByteArray(\0\0\0\0\x2\x11\0\0\0\x14\x2\0)
songs\1\name=Newest tracks
songs\1\type=1
songs\10\data=@ByteArray(\0\0\0\0\0\x3\0\0\0\x14\x2\x1)
songs\10\name=Dynamic random mix
songs\10\type=1
songs\2\data=@ByteArray(\0\0\0\0\0\x3\0\0\0\x32\x2\0)
songs\2\name=50 random tracks
songs\2\type=1
songs\3\data=@ByteArray(\0\0\0\x1\x13\x4\0\0\0\x2\0\0\0\0\0\0\0\0\0\x1\0\0\x3\0\0\0\x14\0\0)
songs\3\name=Ever played
songs\3\type=1
songs\4\data=@ByteArray(\0\0\0\x1\x13\x6\0\0\0\x2\0\0\0\0\0\0\0\0\0\x1\0\0\x3\0\0\0\x14\0\0)
songs\4\name=Never played
songs\4\type=1
songs\5\data=@ByteArray(\0\0\0\0\x2\x15\0\0\0\x14\x2\0)
songs\5\name=Last played
songs\5\type=1
songs\6\data=@ByteArray(\0\0\0\0\x2\x13\0\0\0\x14\x2\0)
songs\6\name=Most played
songs\6\type=1
songs\7\data=@ByteArray(\0\0\0\0\x2\x16\0\0\0\x14\x2\0)
songs\7\name=Favourite tracks
songs\7\type=1
songs\8\data=@ByteArray(\0\0\0\x2\x16\x5\0\0\0\x6\0?\xe0\0\0\0\0\0\0\0\0\0\0\x1\0\x14\x4\0\0\0\x2\0\0\0\0\x4\0\0\0\0\x1\0\x2\x14\0\0\0\x14\x1\0)
songs\8\name=Least favourite tracks
songs\8\type=1
songs\9\data=@ByteArray(\0\0\0\0\x1\x1\xff\xff\xff\xff\x2\0)
songs\9\name=All tracks
songs\9\type=1
songs\size=10
songs_version=3
[SettingsDialog]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x11\"\0\0\0\x9c\0\0\x14\\\0\0\x3\x9b\0\0\x11\"\0\0\0\x9c\0\0\x14\\\0\0\x3\x9b\0\0\0\x1\x2\0\0\0\a\x80\0\0\x11\"\0\0\0\x9c\0\0\x14\\\0\0\x3\x9b)
[Subsonic]
authmethod=1
downloadalbumcovers=false
enabled=false
group_by1=1
group_by2=4
group_by3=0
group_by_version=1
http2=false
password=
separate_albums_by_grouping=false
serversidescrobbling=true
url=@Variant(\0\0\0\x11\xff\xff\xff\xff)
username=
verifycertificate=true
[Tidal]
albums_group_by1=1
albums_group_by2=4
albums_group_by3=0
albums_group_by_version=1
albums_separate_albums_by_grouping=false
artists_group_by1=1
artists_group_by2=4
artists_group_by3=0
artists_group_by_version=1
artists_separate_albums_by_grouping=false
search_group_by1=1
search_group_by2=4
search_group_by3=0
search_group_by_version=1
songs_group_by1=1
songs_group_by2=4
songs_group_by3=0
songs_group_by_version=1
songs_separate_albums_by_grouping=false
tab=artists
[Transcoder]
faac\bitrate=320000
faac\midside=true
faac\profile=2
faac\shortctl=0
faac\tns=false
ffenc_wmav2\bitrate=320000
flacenc\quality=5
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\xf\0\0\0\0\0\0\0\x12\xb0\0\0\x4\a\0\0\xf\0\0\0\0\0\0\0\x12\xbf\0\0\x4\x1b\0\0\0\x1\x2\0\0\0\a\x80\0\0\xf\0\0\0\0\0\0\0\x12\xb0\0\0\x4\a)
lamemp3enc\bitrate=320
lamemp3enc\cbr=false
lamemp3enc\encoding-engine-quality=2
lamemp3enc\mono=false
lamemp3enc\quality=10
lamemp3enc\target=1
opusenc\bitrate=320000
speexenc\abr=0
speexenc\bitrate=0
speexenc\complexity=3
speexenc\dtx=false
speexenc\mode=0
speexenc\nframes=1
speexenc\quality=10
speexenc\vad=false
speexenc\vbr=false
vorbisenc\bitrate=-1
vorbisenc\managed=false
vorbisenc\max-bitrate=-1
vorbisenc\min-bitrate=-1
vorbisenc\quality=1

View file

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<channel name="thunar" version="1.0">
<property name="last-details-view-column-widths" type="string" value="50,50,134,126,50,94,50,168,264,50,50,98,50,1378"/>
<property name="last-details-view-visible-columns" type="string" value="THUNAR_COLUMN_DATE_MODIFIED,THUNAR_COLUMN_NAME,THUNAR_COLUMN_SIZE,THUNAR_COLUMN_TYPE"/>
<property name="last-tabs-left" type="array">
<value type="string" value="file:///home/buliway/backups/Backups/memes"/>
<value type="string" value="file:///home/buliway/backups/Media/Video"/>
</property>
<property name="last-focused-tab-left" type="int" value="1"/>
<property name="last-view" type="string" value="ThunarIconView"/>
<property name="last-icon-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_300_PERCENT"/>
<property name="last-window-width" type="int" value="1906"/>
<property name="last-window-height" type="int" value="1066"/>
<property name="last-window-maximized" type="bool" value="false"/>
<property name="last-separator-position" type="int" value="225"/>
<property name="last-show-hidden" type="bool" value="true"/>
<property name="misc-single-click" type="bool" value="false"/>
<property name="misc-thumbnail-mode" type="string" value="THUNAR_THUMBNAIL_MODE_ALWAYS"/>
<property name="misc-date-style" type="string" value="THUNAR_DATE_STYLE_SIMPLE"/>
<property name="shortcuts-icon-emblems" type="bool" value="true"/>
<property name="tree-icon-emblems" type="bool" value="true"/>
<property name="misc-image-preview-mode" type="string" value="THUNAR_IMAGE_PREVIEW_MODE_EMBEDDED"/>
<property name="misc-middle-click-in-tab" type="bool" value="true"/>
<property name="misc-open-new-window-as-tab" type="bool" value="false"/>
<property name="last-restore-tabs" type="bool" value="true"/>
<property name="misc-show-delete-action" type="bool" value="true"/>
<property name="misc-parallel-copy-mode" type="string" value="THUNAR_PARALLEL_COPY_MODE_ALWAYS"/>
<property name="last-focused-tab-right" type="int" value="0"/>
<property name="misc-confirm-close-multiple-tabs" type="bool" value="false"/>
<property name="last-side-pane" type="string" value="ThunarShortcutsPane"/>
<property name="last-location-bar" type="string" value="ThunarLocationButtons"/>
</channel>

View file

@ -1,2 +0,0 @@
require("starship"):setup()
require("full-border"):setup()

View file

@ -1,18 +0,0 @@
# [[manager.prepend_keymap]]
# on = [ "y" ]
# run = [ "yank", '''
# shell --confirm 'for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'
# ''' ]
# desc = "Copy to clipboard on Wayland" # https://yazi-rs.github.io/docs/tips
[[manager.prepend_keymap]]
on = [ "y" ]
run = [ "yank", '''
shell --confirm 'echo "$@" | xclip -i -selection clipboard -t text/uri-list'
''' ]
desc = "Copy to clipboard on Xorg" # https://yazi-rs.github.io/docs/tips
[[manager.prepend_keymap]]
on = ["C"]
run = "plugin ouch --args=zip"
desc = "Compress with ouch"

View file

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

View file

@ -1,32 +0,0 @@
# exifaudio.yazi
Preview audio metadata and cover on [Yazi](https://github.com/sxyazi/yazi).
![image](https://github.com/Sonico98/exifaudio.yazi/assets/61394886/53c1492c-9f05-4c80-a4e7-94fb36f35ca9)
## Installation
```sh
# Linux/macOS
git clone https://github.com/Sonico98/exifaudio.yazi.git ~/.config/yazi/plugins/exifaudio.yazi
# Windows
git clone https://github.com/Sonico98/exifaudio.yazi.git %AppData%\yazi\config\plugins\exifaudio.yazi
```
## Usage
Add the following to your `yazi.toml`:
```toml
[plugin]
prepend_previewers = [
{ mime = "audio/*", run = "exifaudio"}
]
```
Make sure you have [exiftool](https://exiftool.org/) installed and in your `PATH`.
## Thanks
Thanks to [sxyazi](https://github.com/sxyazi) for the PDF previewer code, on which this previewer is based on.

View file

@ -1,139 +0,0 @@
local M = {}
function M:peek()
local cache = ya.file_cache(self)
if not cache then
return
end
local child = Command("exiftool")
:args({
"-q", "-q", "-S", "-Title", "-SortName",
"-TitleSort", "-TitleSortOrder", "-Artist",
"-SortArtist", "-ArtistSort", "-PerformerSortOrder",
"-Album", "-SortAlbum", "-AlbumSort", "-AlbumSortOrder",
"-AlbumArtist", "-SortAlbumArtist", "-AlbumArtistSort",
"-AlbumArtistSortOrder", "-Genre", "-TrackNumber",
"-Year", "-Duration", "-SampleRate",
"-AudioSampleRate", "-AudioBitrate", "-AvgBitrate",
"-Channels", "-AudioChannels", tostring(self.file.url),
})
:stdout(Command.PIPED)
:stderr(Command.NULL)
:spawn()
local limit = self.area.h
local i, metadata = 0, {}
repeat
local next, event = child:read_line()
if event == 1 then
return self:fallback_to_builtin()
elseif event ~= 0 then
break
end
i = i + 1
if i > self.skip then
local m_title, m_tag = prettify(next)
local ti = ui.Span(m_title):bold()
local ta = ui.Span(m_tag)
table.insert(metadata, ui.Line{ti, ta})
table.insert(metadata, ui.Line{})
end
until i >= self.skip + limit
local p = ui.Paragraph(self.area, metadata):wrap(ui.Paragraph.WRAP)
ya.preview_widgets(self, { p })
local cover_width = self.area.w / 2 - 5
local cover_height = (self.area.h / 4) + 3
local bottom_right = ui.Rect {
x = self.area.right - cover_width,
y = self.area.bottom - cover_height,
w = cover_width,
h = cover_height,
}
if self:preload() == 1 then
ya.image_show(cache, bottom_right)
end
end
function prettify(metadata)
local substitutions = {
Sortname = "Sort Title:",
SortName = "Sort Title:",
TitleSort = "Sort Title:",
TitleSortOrder = "Sort Title:",
ArtistSort = "Sort Artist:",
SortArtist = "Sort Artist:",
Artist = "Artist:",
ARTIST = "Artist:",
PerformerSortOrder = "Sort Artist:",
SortAlbumArtist = "Sort Album Artist:",
AlbumArtistSortOrder = "Sort Album Artist:",
AlbumArtistSort = "Sort Album Artist:",
AlbumSortOrder = "Sort Album:",
AlbumSort = "Sort Album:",
SortAlbum = "Sort Album:",
Album = "Album:",
ALBUM = "Album:",
AlbumArtist = "Album Artist:",
Genre = "Genre:",
GENRE = "Genre:",
TrackNumber = "Track Number:",
Year = "Year:",
Duration = "Duration:",
AudioBitrate = "Bitrate:",
AvgBitrate = "Average Bitrate:",
AudioSampleRate = "Sample Rate:",
SampleRate = "Sample Rate:",
AudioChannels = "Channels:"
}
for k, v in pairs(substitutions) do
metadata = metadata:gsub(tostring(k)..":", v, 1)
end
-- Separate the tag title from the tag data
local t={}
for str in string.gmatch(metadata , "([^"..":".."]+)") do
table.insert(t, str)
end
-- Add back semicolon to title, rejoin tag data if it happened to contain a semicolon
return t[1]..":", table.concat(t, ":", 2)
end
function M:seek(units)
local h = cx.active.current.hovered
if h and h.url == self.file.url then
ya.manager_emit("peek", {
tostring(math.max(0, cx.active.preview.skip + units)),
only_if = tostring(self.file.url),
})
end
end
function M:preload()
local cache = ya.file_cache(self)
if not cache or fs.cha(cache) then
return 1
end
local output = Command("exiftool")
:args({ "-b", "-CoverArt", "-Picture", tostring(self.file.url) })
:stdout(Command.PIPED)
:stderr(Command.PIPED)
:output()
if not output then
return 0
end
return fs.write(cache, output.stdout) and 1 or 2
end
return M

View file

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

View file

@ -1,28 +0,0 @@
# full-border.yazi
Add a full border to Yazi to make it look fancier.
![full-border](https://github.com/yazi-rs/plugins/assets/17523360/ef81b560-2465-4d36-abf2-5d21dcb7b987)
## Installation
```sh
ya pack -a yazi-rs/plugins#full-border
```
## Usage
Add this to your `init.lua` to enable the plugin:
```lua
require("full-border"):setup()
```
Or you can customize the border type:
```lua
require("full-border"):setup {
-- Available values: ui.Border.PLAIN, ui.Border.ROUNDED
type = ui.Border.PLAIN,
}
```

View file

@ -1,40 +0,0 @@
local function setup(_, opts)
local type = opts and opts.type or ui.Border.ROUNDED
local old_build = Tab.build
Tab.build = function(self, ...)
local bar = function(c, x, y)
if x <= 0 or x == self._area.w - 1 then
return ui.Bar(ui.Rect.default, ui.Bar.TOP)
end
return ui.Bar(
ui.Rect { x = x, y = math.max(0, y), w = ya.clamp(0, self._area.w - x, 1), h = math.min(1, self._area.h) },
ui.Bar.TOP
):symbol(c)
end
local c = self._chunks
self._chunks = {
c[1]:padding(ui.Padding.y(1)),
c[2]:padding(ui.Padding(c[1].w > 0 and 0 or 1, c[3].w > 0 and 0 or 1, 1, 1)),
c[3]:padding(ui.Padding.y(1)),
}
local style = THEME.manager.border_style
self._base = ya.list_merge(self._base or {}, {
ui.Border(self._area, ui.Border.ALL):type(type):style(style),
ui.Bar(self._chunks[1], ui.Bar.RIGHT):style(style),
ui.Bar(self._chunks[3], ui.Bar.LEFT):style(style),
bar("", c[1].right - 1, c[1].y),
bar("", c[1].right - 1, c[1].bottom - 1),
bar("", c[2].right, c[2].y),
bar("", c[2].right, c[2].bottom - 1),
})
old_build(self, ...)
end
end
return { setup = setup }

View file

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

View file

@ -1,18 +0,0 @@
# glow.yazi
Plugin for [Yazi](https://github.com/sxyazi/yazi) to preview markdown files with [glow](https://github.com/charmbracelet/glow). To install, clone the repo inside your `~/.config/yazi/plugins/`:
```bash
git clone https://github.com/Reledia/glow.yazi.git
```
then include it in your `yazi.toml` to use:
```toml
[plugin]
prepend_previewers = [
{ name = "*.md", run = "glow" },
]
```
Make sure you have [glow](https://github.com/charmbracelet/glow) installed, and can be found in `PATH`.

View file

@ -1,66 +0,0 @@
local M = {}
function M:peek()
local child = Command("glow")
:args({
"--style",
"dark",
"--width",
tostring(self.area.w),
tostring(self.file.url),
})
:stdout(Command.PIPED)
:stderr(Command.PIPED)
:spawn()
if not child then
return self:fallback_to_builtin()
end
local limit = self.area.h
local i, lines = 0, ""
repeat
local next, event = child:read_line()
if event == 1 then
return self:fallback_to_builtin()
elseif event ~= 0 then
break
end
i = i + 1
if i > self.skip then
lines = lines .. next
end
until i >= self.skip + limit
child:start_kill()
if self.skip > 0 and i < self.skip + limit then
ya.manager_emit(
"peek",
{ tostring(math.max(0, i - limit)), only_if = tostring(self.file.url), upper_bound = "" }
)
else
lines = lines:gsub("\t", string.rep(" ", PREVIEW.tab_size))
ya.preview_widgets(self, { ui.Paragraph.parse(self.area, lines) })
end
end
function M:seek(units)
local h = cx.active.current.hovered
if h and h.url == self.file.url then
local step = math.floor(units * self.area.h / 10)
ya.manager_emit("peek", {
tostring(math.max(0, cx.active.preview.skip + step)),
only_if = tostring(self.file.url),
})
end
end
function M:fallback_to_builtin()
local _, bound = ya.preview_code(self)
if bound then
ya.manager_emit("peek", { tostring(bound), only_if = tostring(self.file.url), upper_bound = "" })
end
end
return M

View file

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

View file

@ -1,26 +0,0 @@
# miller.yazi
[Miller](https://github.com/johnkerl/miller) now in [yazi](https://github.com/sxyazi/yazi). To install, clone the repo inside `~/.config/yazi/plugins/`:
```toml
[plugin]
prepend_previewers = [
{ mime = "text/csv", run = "miller"},
]
```
## Preview
![preview](https://github.com/Reledia/miller.yazi/blob/main/preview.png?raw=true)
## Color
To change colors of keys and values, edit the `init.lua` file after the `--key-color` and `--value-color` flags. To view a list of possible colors, use `mlr --list-color-names`. Make sure to have miller installed and inside your PATH.
## Other types of file
To adapt this plugin to the other format supported from miller (like json):
- copy the plugin folder
- change the name of the copied folder into miller_(fmt)
- change the `--icsv` flag inside `init.lua` to `--i(fmt)`
- add the correct mime/name rule into `prepend_previewers` and the exec as `miller_(fmt)`

View file

@ -1,59 +0,0 @@
local M = {}
function M:peek()
local child = Command("mlr")
:args({
"--icsv",
"--opprint",
"-C",
"--key-color",
"darkcyan",
"--value-color",
"grey70",
"cat",
tostring(self.file.url),
})
:stdout(Command.PIPED)
:stderr(Command.PIPED)
:spawn()
local limit = self.area.h
local i, lines = 0, ""
repeat
local next, event = child:read_line()
if event == 1 then
ya.err(tostring(event))
elseif event ~= 0 then
break
end
i = i + 1
if i > self.skip then
lines = lines .. next
end
until i >= self.skip + limit
child:start_kill()
if self.skip > 0 and i < self.skip + limit then
ya.manager_emit(
"peek",
{ tostring(math.max(0, i - limit)), only_if = tostring(self.file.url), upper_bound = "" }
)
else
lines = lines:gsub("\t", string.rep(" ", PREVIEW.tab_size))
ya.preview_widgets(self, { ui.Paragraph.parse(self.area, lines) })
end
end
function M:seek(units)
local h = cx.active.current.hovered
if h and h.url == self.file.url then
local step = math.floor(units * self.area.h / 10)
ya.manager_emit("peek", {
tostring(math.max(0, cx.active.preview.skip + step)),
only_if = tostring(self.file.url),
})
end
end
return M

View file

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

View file

@ -1,67 +0,0 @@
# ouch.yazi
[ouch](https://github.com/ouch-org/ouch) plugin for [Yazi](https://github.com/sxyazi/yazi).
![ouch.yazi](https://github.com/ndtoan96/ouch.yazi/assets/33489972/946397ec-b37b-4bf4-93f1-c676fc8e59f2)
## Features
- Archive preview
- Compression
## Installation
```bash
# Linux/macOS
git clone https://github.com/ndtoan96/ouch.yazi.git ~/.config/yazi/plugins/ouch.yazi
# Windows
git clone https://github.com/ndtoan96/ouch.yazi.git %AppData%\yazi\config\plugins\ouch.yazi
```
Make sure you have [ouch](https://github.com/ouch-org/ouch) installed and in your `PATH`.
## Usage
### Preview
For archive preview, add this to your `yazi.toml`:
```toml
[plugin]
prepend_previewers = [
# Archive previewer
{ mime = "application/*zip", run = "ouch" },
{ mime = "application/x-tar", run = "ouch" },
{ mime = "application/x-bzip2", run = "ouch" },
{ mime = "application/x-7z-compressed", run = "ouch" },
{ mime = "application/x-rar", run = "ouch" },
{ mime = "application/x-xz", run = "ouch" },
]
```
Now go to an archive on Yazi, you should see the archive's content in the preview pane. You can use `Alt-j` and `Alt-k` to roll up and down the preview.
If you want to change the icon or the style of text, you can modify the `peek` function in `init.lua` file (all of them are stored in the `lines` variable).
### Compression
For compession, add this to your `keymap.toml`:
```toml
[[manager.prepend_keymap]]
on = ["C"]
run = "plugin ouch --args=zip"
desc = "Compress with ouch"
```
The `--args=zip` part tells the plugin that default format is `zip`. You can change that to whatever format you want.
### Decompression
This plugin does not provide a decompression feature because it already is supported by Yazi.
To decompress with `ouch`, configure the opener in `yazi.toml`.
```toml
[opener]
extract = [
{ run = 'ouch d -y "%*"', desc = "Extract here with ouch", for = "windows" },
{ run = 'ouch d -y "$@"', desc = "Extract here with ouch", for = "unix" },
]
```

View file

@ -1,143 +0,0 @@
local M = {}
function M:peek()
local child = Command("ouch")
:args({ "l", "-t", "-y", tostring(self.file.url) })
:stdout(Command.PIPED)
:stderr(Command.PIPED)
:spawn()
local limit = self.area.h
local file_name = string.match(tostring(self.file.url), ".*[/\\](.*)")
local lines = string.format("\x1b[2m📁 %s\x1b[0m\n", file_name)
local num_lines = 1
local num_skip = 0
repeat
local line, event = child:read_line()
if event == 1 then
ya.err(tostring(event))
elseif event ~= 0 then
break
end
if line:find('Archive', 1, true) ~= 1 and line:find('[INFO]', 1, true) ~= 1 then
if num_skip >= self.skip then
lines = lines .. line
num_lines = num_lines + 1
else
num_skip = num_skip + 1
end
end
until num_lines >= limit
child:start_kill()
if self.skip > 0 and num_lines < limit then
ya.manager_emit(
"peek",
{ tostring(math.max(0, self.skip - (limit - num_lines))), only_if = tostring(self.file.url), upper_bound = "" }
)
else
ya.preview_widgets(self, { ui.Paragraph.parse(self.area, lines) })
end
end
function M:seek(units)
local h = cx.active.current.hovered
if h and h.url == self.file.url then
local step = math.floor(units * self.area.h / 10)
ya.manager_emit("peek", {
math.max(0, cx.active.preview.skip + step),
only_if = tostring(self.file.url),
})
end
end
-- Check if file exists
local function file_exists(name)
local f = io.open(name, "r")
if f ~= nil then
io.close(f)
return true
else
return false
end
end
-- Get the files that need to be compressed and infer a default archive name
local get_compression_target = ya.sync(function()
local tab = cx.active
local default_name
local paths = {}
if #tab.selected == 0 then
if tab.current.hovered then
local name = tab.current.hovered.name
default_name = name
table.insert(paths, name)
else
return
end
else
default_name = tab.current.cwd:name()
for _, url in pairs(tab.selected) do
table.insert(paths, tostring(url))
end
-- The compression targets are aquired, now unselect them
ya.manager_emit("escape", {})
end
return paths, default_name
end)
local function invoke_compress_command(paths, name)
local cmd_output, err_code = Command("ouch")
:args({ "c", "-y" })
:args(paths)
:arg(name)
:stderr(Command.PIPED)
:output()
if err_code ~= nil then
ya.notify({
title = "Failed to run ouch command",
content = "Status: " .. err_code,
timeout = 5.0,
level = "error",
})
elseif not cmd_output.status.success then
ya.notify({
title = "Compression failed: status code " .. cmd_output.status.code,
content = cmd_output.stderr,
timeout = 5.0,
level = "error",
})
end
end
function M:entry(args)
local default_fmt = args[1]
-- Get the files that need to be compressed and infer a default archive name
local paths, default_name = get_compression_target()
-- Get archive name from user
local output_name, name_event = ya.input({
title = "Create archive:",
value = default_name .. "." .. default_fmt,
position = { "top-center", y = 3, w = 40 },
})
if name_event ~= 1 then
return
end
-- Get confirmation if file exists
if file_exists(output_name) then
local confirm, confirm_event = ya.input({
title = "Overwrite " .. output_name .. "? (y/N)",
position = { "top-center", y = 3, w = 40 },
})
if not (confirm_event == 1 and confirm:lower() == "y") then
return
end
end
invoke_compress_command(paths, output_name)
end
return M

View file

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

View file

@ -1,99 +0,0 @@
# starship.yazi
Starship prompt plugin for [Yazi](https://github.com/sxyazi/yazi)
<https://github.com/Rolv-Apneseth/starship.yazi/assets/69486699/f7314687-5cb1-4d66-8d9d-cca960ba6716>
## Requirements
- [Yazi](https://github.com/sxyazi/yazi) - latest main branch
- [starship](https://github.com/starship/starship)
### Package manager
```bash
ya pack -a Rolv-Apneseth/starship
```
### Manual
#### Linux / MacOS
```sh
git clone https://github.com/Rolv-Apneseth/starship.yazi.git ~/.config/yazi/plugins/starship.yazi
```
#### Windows
```sh
git clone https://github.com/Rolv-Apneseth/starship.yazi.git %AppData%\yazi\config\plugins\starship.yazi
```
## Usage
Add this to `~/.config/yazi/init.lua`:
```lua
require("starship"):setup()
```
Make sure you have [starship](https://github.com/starship/starship) installed and in your `PATH`.
## Extra
If you use a `starship` theme with a background colour, it might look a bit to cramped on just the one line `Yazi` gives the header by default. To fix this, you can add this to your `init.lua`:
<details>
<summary>Click to expand</summary>
```lua
local old_build = Tab.build
Tab.build = function(self, ...)
local bar = function(c, x, y)
if x <= 0 or x == self._area.w - 1 then
return ui.Bar(ui.Rect.default, ui.Bar.TOP)
end
return ui.Bar(
ui.Rect({
x = x,
y = math.max(0, y),
w = ya.clamp(0, self._area.w - x, 1),
h = math.min(1, self._area.h),
}),
ui.Bar.TOP
):symbol(c)
end
local c = self._chunks
self._chunks = {
c[1]:padding(ui.Padding.y(1)),
c[2]:padding(ui.Padding(c[1].w > 0 and 0 or 1, c[3].w > 0 and 0 or 1, 1, 1)),
c[3]:padding(ui.Padding.y(1)),
}
local style = THEME.manager.border_style
self._base = ya.list_merge(self._base or {}, {
-- Enable for full border
--[[ ui.Border(self._area, ui.Border.ALL):type(ui.Border.ROUNDED):style(style), ]]
ui.Bar(self._chunks[1], ui.Bar.RIGHT):style(style),
ui.Bar(self._chunks[3], ui.Bar.LEFT):style(style),
bar("┬", c[1].right - 1, c[1].y),
bar("┴", c[1].right - 1, c[1].bottom - 1),
bar("┬", c[2].right, c[2].y),
bar("┴", c[2].right, c[1].bottom - 1),
})
old_build(self, ...)
end
```
</details>
> [!NOTE]
> This works by overriding your `Tab.build` function so make sure this is the only place you're doing that in your config. For example, this would be incompatible with the [full-border plugin](https://github.com/yazi-rs/plugins/tree/main/full-border.yazi)
## Thanks
- [sxyazi](https://github.com/sxyazi) for providing the code for this plugin and the demo video [in this comment](https://github.com/sxyazi/yazi/issues/767#issuecomment-1977082834)

View file

@ -1,28 +0,0 @@
local save = ya.sync(function(st, cwd, output)
if cx.active.current.cwd == Url(cwd) then
st.output = output
ya.render()
end
end)
return {
setup = function(st)
Header:children_remove(1, Header.LEFT)
Header:children_add(function() return ui.Line.parse(st.output or "") end, 1000, Header.LEFT)
ps.sub("cd", function()
local cwd = cx.active.current.cwd
if st.cwd ~= cwd then
st.cwd = cwd
ya.manager_emit("plugin", { st._id, args = ya.quote(tostring(cwd), true) })
end
end)
end,
entry = function(_, args)
local output = Command("starship"):arg("prompt"):cwd(args[1]):env("STARSHIP_SHELL", ""):output()
if output then
save(args[1], output.stdout:gsub("^%s+", ""))
end
end,
}

View file

@ -1,46 +0,0 @@
{ pkgs, ... }: {
# yazi хуже ranger для моих потребностей, стоит на тесты. Ниже один из примеров, где yazi уступает
# Если открыть картинку через yazi, то он просто передаст картинку или каталог в качестве аргумента,
# из-за чего сортировка при пролистывании картинок будет "рандомной"
# Если же открыть картинку через ranger, то в качетве аргумента он передаст список файлов,
# где они отсортированы в том порядке, в котором отображаются у меня на экране в самом ranger
home = {
packages = with pkgs; [
ffmpegthumbnailer # for video thumbnails
unar # for archive preview
jq # for JSON preview
poppler # for PDF preview
fd # for file searching
ripgrep # for file content searching
fzf # for quick file subtree navigation
zoxide # for historical directories navigation
xclip # for system clipboard support on x11
#xsel # как xclip, но вроде как функционал больше
#wl-clipboard # for system clipboard support on wayland
# for plugins
exiftool # for exifaudio.yazi
glow # for glow.yazi
ouch # for ouch.yazi
miller # for miller.yazi
starship # for starship.yazi
];
file = {
".config/yazi/yazi.toml".source = ./yazi.toml;
".config/yazi/keymap.toml".source = ./keymap.toml;
".config/yazi/plugins".source = ./plugins; # https://yazi-rs.github.io/docs/resources/#functional
};
};
programs.yazi = { # Файловый менеджер в терминале https://yazi-rs.github.io/features
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
# enableFishIntegration = true;
# enableNushellIntegration = true;
};
}

View file

@ -1,33 +0,0 @@
# Тут будут мои настройки
[manager]
sort_by = "natural" # Как алфавит, но не "1 < 10 < 2", а "1 < 2 < 10"
sort_dir_first = true # Чтоб директории были первыми, не смотря на сортировку
#show_hidden = true # Показывать скрытые файлы. Спорно, потому что они первые в списке, бесит. Мб проще бинд юзать
[plugin]
prepend_previewers = [
# Preview markdown files
{ name = "*.md", run = "glow" },
# Preview audio metadata and cover
{ mime = "audio/*", run = "exifaudio"},
# Preview csv files
{ mime = "text/csv", run = "miller"},
# Preview archives
{ mime = "application/*zip", run = "ouch" },
{ mime = "application/x-tar", run = "ouch" },
{ mime = "application/x-bzip2", run = "ouch" },
{ mime = "application/x-7z-compressed", run = "ouch" },
{ mime = "application/x-rar", run = "ouch" },
{ mime = "application/x-xz", run = "ouch" },
]
[opener]
view = [
{ run = 'imv "$@"', desc = "View selected images", orphan = true },
]
[open]
prepend_rules = [ # Чтоб мои настройки были в приоритете
{ mime = "image/*", use = "view" },
]

279
flake.lock generated
View file

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

View file

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

View file

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

View file

@ -21,6 +21,10 @@
tamasfe.even-better-toml # Fully-featured TOML support tamasfe.even-better-toml # Fully-featured TOML support
ms-python.python # Python language support ms-python.python # Python language support
golang.go # Rich Go 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 [ # Руками с гита ставить ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ # Руками с гита ставить
{ # https://marketplace.visualstudio.com/items?itemName=budparr.language-hugo-vscode { # https://marketplace.visualstudio.com/items?itemName=budparr.language-hugo-vscode
name = "language-hugo-vscode"; name = "language-hugo-vscode";
@ -28,12 +32,30 @@
version = "1.3.1"; version = "1.3.1";
sha256 = "f5da7cfe02c06fc3899e6b0b55b380280619e7085abcf5b6024f9684ba846c99"; sha256 = "f5da7cfe02c06fc3899e6b0b55b380280619e7085abcf5b6024f9684ba846c99";
} }
{ # https://marketplace.visualstudio.com/items?itemName=Codeium.codeium # { # https://marketplace.visualstudio.com/items?itemName=dlasagno.rasi
name = "codeium"; # name = "rasi";
publisher = "Codeium"; # publisher = "dlasagno";
version = "1.11.9"; # version = "1.0.0";
sha256 = "0e07e78e487418d0c5289eeb2c530dd7dd18f82612e46c8b177f2a1f95acb730"; # 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 = { # userSettings = {
@ -41,11 +63,12 @@
# "update.showReleaseNotes" = false; # "update.showReleaseNotes" = false;
# "workbench.colorTheme" = "Gruvbox Dark Medium"; # "workbench.colorTheme" = "Gruvbox Dark Medium";
# "editor.fontFamily" = "JetBrainsMono Nerd Font"; # "editor.fontFamily" = "JetBrainsMono Nerd Font";
# "editor.lineNumbers" = "relative";
# }; # };
globalSnippets = {}; # globalSnippets = {};
languageSnippets = {}; # languageSnippets = {};
# keybindings = [ # keybindings = [
# { # {
@ -55,4 +78,4 @@
# } # }
# ]; # ];
}; };
} }

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` - Если хочется не переключать, а активировать одну конкретную звуковую дорожку, то на неё надо нажать с зажатым `Ctrl`

View file

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

View file

@ -5,7 +5,6 @@
#wlrobs # Allows you to screen capture on wlroots based wayland compositors #wlrobs # Allows you to screen capture on wlroots based wayland compositors
obs-vkcapture # Linux Vulkan/OpenGL game capture obs-vkcapture # Linux Vulkan/OpenGL game capture
#obs-vaapi # VAAPI support via GStreamer. FFMPEG VAAPI implementation shows performance bottlenecks on some AMD hardware. #obs-vaapi # VAAPI support via GStreamer. FFMPEG VAAPI implementation shows performance bottlenecks on some AMD hardware.
#obs-tuna # Выводить инфу о треке, который сейчас играет
#obs-pipewire-audio-capture # Capture using PipeWire (разве этого нет в сток обс?) #obs-pipewire-audio-capture # Capture using PipeWire (разве этого нет в сток обс?)
#obs-mute-filter # Mute audio of a source #obs-mute-filter # Mute audio of a source
#obs-multi-rtmp # Multi-site simultaneous broadcast. Имба? Рестрим локальный? #obs-multi-rtmp # Multi-site simultaneous broadcast. Имба? Рестрим локальный?
@ -17,4 +16,4 @@
}; };
# home.file."config?".source = ./config?; # Мб потом добавлю конфиги obs сюда # home.file."config?".source = ./config?; # Мб потом добавлю конфиги obs сюда
} }

View file

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

View file

@ -1,15 +1,16 @@
# Надо удалить оригинальный файл, прежде чем делать симлинк # Надо удалить оригинальный файл, прежде чем делать симлинк
# Некоторые проги клали хуй на симлинки и заменяют их своими файлами # Некоторые проги забивают на симлинки и заменяют их своими файлами (например thunar)
# Таких прог я ебал рот и проклинал хуесосов разработчиков # Тут уж ничего не поделать, придётся руками настраивать
# Если выдаёт ошибку про home-manager сервис при ребилде, # Если выдаёт ошибку про home-manager сервис при ребилде,
# Значит такой файл уже существует и симлинк туда кинуть нельзя # значит такой файл уже существует и симлинк туда кинуть нельзя
# Для таких файлов я сделал каталог shit # Для таких файлов я сделал каталог shit
# Я не уверен надо ли писать "config.lib.file.mkOutOfStoreSymlink" # Я не уверен надо ли писать "config.lib.file.mkOutOfStoreSymlink"
# Вроде это более простой симлинк, чем просто ссылка на файл # Вроде это более простой симлинк, чем просто ссылка на файл
# Типо он напрямую симлинк кидает, а не через 100500 симлинков в nix/store
# Но мб меня обманули # Но мб меня обманули
{ pkgs, config, ... }: let { config, ... }: let
home-dir = "backups"; # Имя каталога для бекапов. Мб захочу поменять home-dir = "backups"; # Имя каталога для бекапов. Мб захочу поменять
dir = "${config.home.homeDirectory}/${home-dir}"; dir = "${config.home.homeDirectory}/${home-dir}";
in { in {
@ -20,28 +21,14 @@ in {
".password-store".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/.password-store"; # Для утилиты pass ".password-store".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/.password-store"; # Для утилиты pass
".ssh".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/.ssh"; ".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, чтоб удалить сток. А мб руками удалить сток перед этим # Browsers. Мб сделать .force, чтоб удалить сток. А мб руками удалить сток перед этим
".mozilla".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/Apps/.mozilla"; ".mozilla".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/Apps/.mozilla";
".librewolf".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/Apps/.librewolf"; ".librewolf".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/Apps/.librewolf";
"Downloads/Telegram Desktop".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Telegram Desktop"; "Downloads/Telegram Desktop".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Telegram Desktop";
# Не знаю на счёт obs, chatbox, planify, calibre, discord, nekobox
}; };
xdg.configFile = { # Это для каталога .config 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";
# Ебаный qt, как я тебя ненавижу
# "Kvantum".source = ../shit/Kvantum;
# "qt5ct".source = ../shit/qt5ct
# "qt6ct".source = ../shit/qt6ct
}; };
} }

View file

@ -5,10 +5,10 @@
enableBashIntegration = true; enableBashIntegration = true;
enableZshIntegration = true; enableZshIntegration = true;
# enableFishIntegration = true; # enableFishIntegration = true;
# enableNushellIntegration = true; enableNushellIntegration = true;
enableTransience = true; # Fish Shell only. Отображает пустую строку при нажатии enter? enableTransience = true; # Fish Shell only. Отображает пустую строку при нажатии enter?
}; };
xdg.configFile."starship.toml".source = ./starship.toml; xdg.configFile."starship.toml".source = ./starship.toml;
} }

View file

@ -21,8 +21,13 @@
# Можно назвать аналогом "sudo pacman -Su", не "Syu", репу не обновляет # Можно назвать аналогом "sudo pacman -Su", не "Syu", репу не обновляет
upg = "sudo nixos-rebuild switch --impure --upgrade --flake ${flakeDir}"; # Обновить пакеты, но не репозиторий во fleke.lock upg = "sudo nixos-rebuild switch --impure --upgrade --flake ${flakeDir}"; # Обновить пакеты, но не репозиторий во fleke.lock
# Возможно это аналог "sudo pacman -Sy". Обновить репозиторий, чтоб потом на него обновиться? Пакеты не обновляет # Обновить все flake inputs до последних версий. Возможно это аналог "sudo pacman -Sy" на Arch Linux
upd = "nix flake update ${flakeDir}"; # Обновляет flake.lock на последние коммиты с гитхаба? # Если после upd дописать название инпута из flake.nix, то обновится только указанный инпут
# Например `upd nixpkgs2` для обновления анстабле репы
upd = "sudo nix flake update --flake ${flakeDir}";
# Garbage collector. Удалить все не используемые пакеты (например после обновы)
grb = "sudo nix-collect-garbage -d";
pkgs = "nvim ${flakeDir}/nixos/packages.nix"; pkgs = "nvim ${flakeDir}/nixos/packages.nix";
@ -31,11 +36,9 @@
v = "nvim"; v = "nvim";
t = "timer"; t = "timer";
r = "ranger"; r = "ranger --choosedir=/tmp/choosedir && cd \"$(cat /tmp/choosedir)\"";
ff = "fastfetch"; g = "gitui";
yt = "cd /mnt/backups/Media/yt-dlp"; # Конфиги для бекапа YouTube f = "fastfetch";
qb = "cd /mnt/backups/Media/Music/Qobuz/qdl"; # Бекапить музыку с Qobuz
html = "python3 /mnt/backups/html-library/generate_gallery.py --path"; # Html image gallery
}; };
history = { history = {
@ -44,16 +47,25 @@
}; };
# Environment variables that will be set for zsh session. # Environment variables that will be set for zsh session.
sessionVariables = { # sessionVariables = {
HISTORY_SUBSTRING_SEARCH_FUZZY = "не работает блять"; # Нечёткий поиск для стрелок вверх/вниз. # };
};
# Extra commands that should be added to .zshrc # Extra commands that should be added to .zshrc
initExtra = '' initExtra = ''
source ${pkgs.zsh-you-should-use}/share/zsh/plugins/you-should-use/you-should-use.plugin.zsh source ${pkgs.zsh-you-should-use}/share/zsh/plugins/you-should-use/you-should-use.plugin.zsh
''; '';
historySubstringSearch.enable = true; # Чтоб вверх/вниз учитывал уже написанную команду historySubstringSearch = {
enable = true; # Чтоб вверх/вниз учитывал уже написанную команду
searchUpKey = [
"^[[A"
"$terminfo[kcuu1]"
];
searchDownKey = [
"^[[B"
"$terminfo[kcud1]"
];
};
oh-my-zsh = { # https://github.com/ohmyzsh/ohmyzsh oh-my-zsh = { # https://github.com/ohmyzsh/ohmyzsh
enable = true; enable = true;
@ -70,10 +82,9 @@
"fzf" # https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/fzf "fzf" # https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/fzf
# "gitignore" # Use https://gitignore.io from the command line # "gitignore" # Use https://gitignore.io from the command line
# "gpg-agent" # Enables GPG's gpg-agent if it is not running. Хз что это значит, мб пригодится # "gpg-agent" # Enables GPG's gpg-agent if it is not running. Хз что это значит, мб пригодится
"httpie" # Completion for HTTPie, a command line HTTP client, a friendlier cURL replacement. # "httpie" # Completion for HTTPie, a command line HTTP client, a friendlier cURL replacement.
# "isodate" # Completion for the ISO 8601, as well as some aliases for common Date commands. # "isodate" # Completion for the ISO 8601, as well as some aliases for common Date commands.
# "mise" # dev tools, env vars, task runner https://github.com/jdx/mise # "mise" # dev tools, env vars, task runner https://github.com/jdx/mise
"pass" # Completion for the pass password manager (вдруг добавит нечёткий поиск?)
"safe-paste" # Preventing any code from running while pasting, so you have a chance to review what was pasted "safe-paste" # Preventing any code from running while pasting, so you have a chance to review what was pasted
"ssh-agent" # Автостарт ssh-agent. Хз надо ли настраивать и если да, то как "ssh-agent" # Автостарт ssh-agent. Хз надо ли настраивать и если да, то как
"timer" # Показывает время выполнения команды "timer" # Показывает время выполнения команды
@ -91,4 +102,4 @@
zsh-you-should-use # Напомнит, если у написанной команды есть алиас zsh-you-should-use # Напомнит, если у написанной команды есть алиас
zsh-nix-shell # zsh plugin that lets you use zsh in nix-shell shell zsh-nix-shell # zsh plugin that lets you use zsh in nix-shell shell
]; ];
} }

View file

@ -1,4 +1,4 @@
{ pkgs, config, lib, ... }: { { config, lib, ... }: {
# xsession.enable = true; # Хз надо ли # xsession.enable = true; # Хз надо ли
xsession.windowManager.bspwm = { xsession.windowManager.bspwm = {
enable = true; enable = true;
@ -9,7 +9,7 @@
# И настройки для второго (правого) монитора # И настройки для второго (правого) монитора
# extraConfigEarly = '' # extraConfigEarly = ''
# xrandr --output DisplayPort-2 --mode 1920x1080 --rate 165 # xrandr --output DisplayPort-2 --mode 1920x1080 --rate 165
# xrandr --output HDMI-A-0 --mode 1920x1080 --rate 100 --right-of DisplayPort-2 # xrandr --output HDMI-A-0 --mode 1920x1080 --rate 60 --right-of DisplayPort-2
# ''; # '';
# Эти команды выполняются в конце bspwmrc # Эти команды выполняются в конце bspwmrc
@ -24,10 +24,8 @@
"sxhkd" "sxhkd"
"nm-applet" "nm-applet"
"ksnip" "ksnip"
# "nekoray" "xset s off -dpms" # Отменить затухание экрана через X минут
# "obsidian" "spice-vdagent" # Для виртуалки
# "planify"
# "spice-vdagent" # Для виртуалки
]; ];
monitors = let monitors = let
@ -60,7 +58,8 @@
state = "floating"; state = "floating";
}; };
in { # А тут правила окон in { # А тут правила окон
"Screenkey" = { manage = false; }; # "Screenkey" = { manage = false; };
# "Screenkey" = floating;
"gcolor3" = floating; "gcolor3" = floating;
"obs" = floating; "obs" = floating;
"steam" = floating; "steam" = floating;
@ -70,13 +69,11 @@
"librewolf:librewolf:Save Image" = floating; "librewolf:librewolf:Save Image" = floating;
"SshAskpass" = floating; "SshAskpass" = floating;
"Nm-connection-editor" = floating; "Nm-connection-editor" = floating;
"nekoray" = floating;
"Kvantum Manager" = floating; "Kvantum Manager" = floating;
"qt5ct" = floating; "qt5ct" = floating;
"qt6ct" = floating; "qt6ct" = floating;
"ksnip" = floating1600x900; "ksnip" = floating1600x900;
# "ark" = floating1200x800; # Удалил, чтоб blowjob на экран не выдавало "file-roller" = floating;
"file-roller" = floating1200x800;
"floating-terminal" = floating1200x800; "floating-terminal" = floating1200x800;
"pavucontrol" = floating900x600; "pavucontrol" = floating900x600;
# blueman-манагер надо флоатинг # blueman-манагер надо флоатинг

View file

@ -24,7 +24,7 @@
{ pkgs, config, ... }: let { pkgs, config, ... }: let
rofiApps = "${config.home.homeDirectory}/.config/rofi/launcher.rasi"; rofiApps = "${config.home.homeDirectory}/.config/rofi/launcher.rasi";
rofiPower = "${config.home.homeDirectory}/.config/rofi/power.rasi"; rofiPower = "${config.home.homeDirectory}/.config/rofi/power.rasi";
monitor = "$\{env:MONITOR:\}"; # monitor = "$\{env:MONITOR:\}";
in { # Статус бар внизу in { # Статус бар внизу
services.polybar = { services.polybar = {
enable = true; enable = true;
@ -34,7 +34,7 @@ in { # Статус бар внизу
sleep 0 sleep 0
''; '';
settings = { # Или переимоневать в "config"? Не понял в чём разница settings = { # Или переимeнoвать в "config"? Не понял в чём разница
"bar/bspwm" = { "bar/bspwm" = {
monitor = "\${env:MONITOR:}"; monitor = "\${env:MONITOR:}";
@ -64,9 +64,8 @@ in { # Статус бар внизу
font-0 = "NotoSans Nerd Font:style=Regular:size=12;3"; font-0 = "NotoSans Nerd Font:style=Regular:size=12;3";
# Выблядки не могут юзать все Noto Sans при указании одного шрифта # Polybar не может юзать все Noto Sans при указании одного шрифта
# А ещё дауны не могут отображать смайлики нормально # А ещё оно не может отображать смайлики нормально, залупа на пол экрана
# Там кусок дерьма на пол экрана
font-1 = "Noto Sans:size=12;3"; font-1 = "Noto Sans:size=12;3";
font-2 = "Noto Sans CJK HK:size=12;3"; font-2 = "Noto Sans CJK HK:size=12;3";
font-3 = "Noto Sans CJK JP:size=12;3"; font-3 = "Noto Sans CJK JP:size=12;3";

View file

@ -111,7 +111,7 @@ in {
bspc desktop -f next.!occupied bspc desktop -f next.!occupied
# Меняет позиционирование с горизонтального на вертикальный и обратно. Мб надо -R # Меняет позиционирование с горизонтального на вертикальный и обратно. Мб надо -R
# (хуй, и то и то требует аргументы, а не делает toggle, и даже с аргументами нихуя не работает) # (и то и то требует аргументы, а не делает toggle, и даже с аргументами не работает)
# super + s # super + s
# bspc node -F # bspc node -F

View file

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

View file

@ -1,14 +1,14 @@
{ {
imports = [ imports = [
# ./env.nix # Мб не надо, ибо редачу через home.nix? # ./filesystems.nix
# ./filesystems.nix
./hardware.nix ./hardware.nix
# ./hibernate.nix # ./hibernate.nix
./locale.nix ./locale.nix
./network.nix ./network.nix
./sound.nix ./sound.nix
./stylix.nix ./stylix.nix
./virtualisation.nix ./virtualisation.nix
# ./vr.nix
./xserver.nix ./xserver.nix
]; ];
} }

View file

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

View file

@ -1,3 +1,6 @@
# Тут настраивается автомаунт нужных дисков
# Замени значения на свои. Узнать uuid можно через `lsblk -f`
{ {
fileSystems = { fileSystems = {
"/mnt/backups" = { "/mnt/backups" = {
@ -5,5 +8,10 @@
fsType = "ext4"; fsType = "ext4";
options = [ "defaults" "noatime" ]; #"uid=1000" "gid=1000" "dmask=007" "fmask=117" ]; options = [ "defaults" "noatime" ]; #"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" ];
};
}; };
} }

View file

@ -3,22 +3,22 @@
{ pkgs, ... }: { { pkgs, ... }: {
hardware = { # Параметры для 24.05 и unstable могут сильно отличаться hardware = { # Параметры для 24.05 и unstable могут сильно отличаться
amdgpu = {
# amdgpu = { opencl.enable = true; # Enable OpenCL support using ROCM runtime library.
# opencl.enable = true; # # Enable OpenCL support using ROCM runtime library.
# amdvlk = { # Гавно лаганое, лучше radv юзать (radeon vulkan) # amdvlk = { # Гавно лаганое, лучше radv юзать (radeon vulkan)
# enable = true; # Enable AMDVLK Vulkan driver. # enable = true; # Enable AMDVLK Vulkan driver.
# support32Bit.enable = true; # Enable 32-bit driver support. # support32Bit.enable = true; # Enable 32-bit driver support.
# supportExperimental.enable = true; # Enable Experimental features support. # supportExperimental.enable = true; # Enable Experimental features support.
# # settings = {}; # Runtime settings for AMDVLK to be configured /etc/amd/amdVulkanSettings.cfg. # # settings = {}; # Runtime settings for AMDVLK to be configured /etc/amd/amdVulkanSettings.cfg.
# }; # };
# }; };
graphics = { # hardware.opengl переименован в hardware.graphics в unstable ветке graphics = { # hardware.opengl переименован в hardware.graphics в unstable ветке
enable = true; enable = true;
enable32Bit = true; # install 32-bit drivers for 32-bit applications (such as Wine). enable32Bit = true; # install 32-bit drivers for 32-bit applications (such as Wine).
extraPackages = with pkgs; [ extraPackages = with pkgs; [
libva # VAAPI (Video Acceleration API) libva # VAAPI (Video Acceleration API)
rocmPackages.clr.icd # OpenCL
]; ];
}; };
@ -47,11 +47,22 @@
# HIP # HIP
# Most software has the HIP libraries hard-coded. You can work around it on NixOS by using: # Most software has the HIP libraries hard-coded. You can work around it on NixOS by using:
# systemd.tmpfiles.rules = [ # systemd.tmpfiles.rules = [ # Legacy
# "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}" # "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
# ]; # ];
systemd.tmpfiles.rules = let
rocmEnv = pkgs.symlinkJoin {
name = "rocm-combined";
paths = with pkgs.rocmPackages; [
rocblas
hipblas
clr
];
}; in [
"L+ /opt/rocm - - - - ${rocmEnv}"
];
# boot.initrd.kernelModules = [ "amdgpu" ]; # Мб не обязательно boot.initrd.kernelModules = [ "amdgpu" ]; # Мб не обязательно
# Для AMD существует два драйвера Vulkan # Для AMD существует два драйвера Vulkan
# Один официальный от AMD - amdvlk # Один официальный от AMD - amdvlk

View file

@ -12,8 +12,8 @@
{ {
boot = { boot = {
resumeDevice = "/dev/disk/by-uuid/15630f8d-edf8-4e0b-8df4-9ac20f80fc88"; resumeDevice = "/dev/disk/by-uuid/0951089a-fd89-4647-9ddb-0e3ff63d7b49";
kernelParams = [ "resume_offset=18745344" ]; kernelParams = [ "resume_offset=6799360" ];
}; };
# Не знаю надо ли это. На виртуалке я не могу забутиться в любом случае # Не знаю надо ли это. На виртуалке я не могу забутиться в любом случае

View file

@ -1,12 +1,6 @@
{ pkgs, ... }: { # Блютуз, интернет, wifi { # Блютуз, интернет, wifi
hardware.bluetooth = { hardware.bluetooth = {
enable = true; enable = true;
# settings = {
# General = {
# Enable = "Source,Sink,Media,Socket";
# Experimental = true;
# };
# };
}; };
networking = { networking = {
@ -16,22 +10,7 @@
# wireless.enable = true; # Enables wireless support via wpa_supplicant. # wireless.enable = true; # Enables wireless support via wpa_supplicant.
firewall.enable = false; 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.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");
# };
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

View file

@ -11,7 +11,6 @@
wireplumber = { wireplumber = {
enable = true; enable = true;
# Запретить конкретному софту редактировать громкость микрофона # Запретить конкретному софту редактировать громкость микрофона
# Я рот ебал блядей, что делают мой микро тихим без моего разрешения
# В терминал `wpctl status`, найти нужное приложение в списке клиентов # В терминал `wpctl status`, найти нужное приложение в списке клиентов
# Потом `wpctl inspect номер-клиента | grep application.process.binary` # Потом `wpctl inspect номер-клиента | grep application.process.binary`
# `systemctl --user restart wireplumber pipewire pipewire-pulse` # `systemctl --user restart wireplumber pipewire pipewire-pulse`
@ -20,51 +19,58 @@
# https://askubuntu.com/questions/749407/is-there-any-way-to-prevent-application-from-changing-volume-level-of-my-microph # https://askubuntu.com/questions/749407/is-there-any-way-to-prevent-application-from-changing-volume-level-of-my-microph
# https://www.linux.org/threads/prevent-applications-from-changing-microphone-gain.41636/ # https://www.linux.org/threads/prevent-applications-from-changing-microphone-gain.41636/
# https://www.reddit.com/r/Ubuntu/comments/pvlm6r/how_to_disable_microphone_autoadjusting/ # https://www.reddit.com/r/Ubuntu/comments/pvlm6r/how_to_disable_microphone_autoadjusting/
# https://wiki.archlinux.org/title/Firefox/Tweaks#Disable_WebRTC_audio_post_processing
# Если не помогает и сайты в браузере косячат, то есть такие решения:
# 1) Firefox или его форки - в браузерной строке пишешь и открываешь about:config
# Там делаешь media.getusermedia.agc_enabled false. Это Automatic Gain Control
# 2) Chromium или его форки - в браузерной строке пишешь и открываешь chrome://flags/
# Там ставишь Allow WebRTC to adjust the input volume = Disabled
# Я решил сделать вайтлист. В стоке я запрещаю всем редачить громкость микро в системе
# Лишь определённый софт может редачить громкость моего микрофона
extraScripts."99-stop-microphone-auto-adjust.lua" = '' extraScripts."99-stop-microphone-auto-adjust.lua" = ''
table.insert (default_access.rules,{ table.insert (default_access.rules,{
matches = { matches = {
{ {
{ "application.process.binary", "=", ".Discord-wrapped" } { "application.process.binary", "=", "*" }
},
{
{ "application.process.binary", "=", "chromium" }
},
{
{ "application.process.binary", "=", "librewolf" }
},
{
{ "application.process.binary", "=", "firefox" }
},
{
{ "application.process.binary", "=", "steam" }
},
{
{ "application.process.binary", "=", ".telegram-desktop-wrapped" }
} }
}, },
default_permissions = "rx", default_permissions = "r-x",
})
table.insert (default_access.rules,{
matches = {
{
{ "application.process.binary", "=", ".pavucontrol-wrapped" }
},
{
{ "application.process.binary", "=", ".easyeffects-wrapped" }
}
},
default_permissions = "rwx",
}) })
''; '';
}; };
# Ниже настройки имеют формат "число - название" # Ниже настройки имеют формат "число - название"
# Число определяет приоритет настройки, а название описывает цель конфига # Число определяет приоритет настройки, а название описывает цель конфига
extraConfig.pipewire = { # extraConfig.pipewire = {
"10-clock-rate" = { # "10-clock-rate" = {
"context.properties" = { # "context.properties" = {
"default.clock.rate" = 48000; # "default.clock.rate" = 48000;
# "default.clock.allowed-rates" = [ 44100 48000 88200 96000 176400 192000 352800 384000 705600 768000 ]; # "default.clock.allowed-rates" = [ 44100 48000 88200 96000 176400 192000 352800 384000 705600 768000 ];
}; # };
}; # };
# Ниже настройки для минимальной задержки в играх (например osu!stable через wine) # # Ниже настройки для минимальной задержки в играх (например osu!stable через wine)
# quantum — устанавливает размер буфера (чем меньше значение, тем ниже задержка, но выше нагрузка на процессор). # # quantum — устанавливает размер буфера (чем меньше значение, тем ниже задержка, но выше нагрузка на процессор).
# Если со звуком есть проблемы (щелчки, прерывания), попробуйте увеличить значение (64, 128, 256) или просто удалить эту настройку # # Можно посчитать теоретическую задержку в секундах, поделив quantum на rate (48/48000 будет 1мс)
# По умолчанию я закомментировал настройку, чтоб у людей не было проблем # # Если со звуком есть проблемы (щелчки, прерывания), попробуйте увеличить значение (64, 128, 256) или просто удалить эту настройку
# "92-low-latency" = { # # По умолчанию я закомментировал настройку, чтоб у людей не было проблем
# default.clock.quantum = 32; # default = 1024 # # "92-low-latency" = {
# default.clock.min-quantum = 32; # default = 32 # # default.clock.quantum = 32; # default = 1024
# default.clock.max-quantum = 32; # default = 2048 # # default.clock.min-quantum = 32; # default = 32
# }; # # default.clock.max-quantum = 32; # default = 2048
}; # # };
# };
}; };
} }

View file

@ -11,7 +11,7 @@
polarity = "dark"; # "light" or "either". Если "either", то он сам определяет что будет красивее polarity = "dark"; # "light" or "either". Если "either", то он сам определяет что будет красивее
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-medium.yaml"; # Если хочешь генерить тему из обоев, то удали эту строку base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-medium.yaml"; # Если хочешь генерить тему из обоев, то удали эту строку
# image = config.lib.stylix.pixel "base00"; # Вместо обоев будет заливка фона одним цветом из темы # image = config.lib.stylix.pixel "base00"; # Вместо обоев будет заливка фона одним цветом из темы
image = ./wall.jpg; # Если хочешь норм обои, то просто укажи путь до изображения image = ./nix-glow-gruvbox.jpg; # Если хочешь норм обои, то просто укажи путь до изображения
cursor = { cursor = {
package = pkgs.bibata-cursors; package = pkgs.bibata-cursors;
@ -23,8 +23,8 @@
# Ширина символов одинаковая # Ширина символов одинаковая
monospace = { # default = DejaVu Sans Mono monospace = { # default = DejaVu Sans Mono
package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}; package = pkgs.nerd-fonts.jetbrains-mono;
name = "JetBrainsMono Nerd Font Mono"; name = "JetBrainsMonoNL Nerd Font Mono";
}; };
emoji = { # default = Noto Color Emoji emoji = { # default = Noto Color Emoji
@ -34,7 +34,7 @@
# Без засечек # Без засечек
sansSerif = { # default = DejaVu Sans sansSerif = { # default = DejaVu Sans
package = pkgs.nerdfonts.override {fonts = ["Noto"];}; package = pkgs.nerd-fonts.noto;
name = "NotoSans Nerd Font"; name = "NotoSans Nerd Font";
}; };
@ -63,17 +63,16 @@
}; };
################################################## ###################################################
## Хули блять у всех работают темы для qt ## ## Тема qt через stylix у меня не работает ##
## Один я далбаёб проебал 3 дня ## ## Хотя в видео у других людей всё менялось ##
## Прочитал весь код ебаного stylix ## ## Приходится руками ставить грувбокс через qtct ##
## И нихуя не работает блять ## ###################################################
## Так что поставлю руками грувбокс через qtct ##
##################################################
# https://discourse.nixos.org/t/guide-to-installing-qt-theme/35523/2
qt = { qt = {
enable = true; enable = true;
style = "kvantum"; style = "kvantum";
platformTheme = "qt5ct"; platformTheme = "qt5ct";
}; };
} }

View file

@ -11,7 +11,7 @@
}; };
}; };
# spiceUSBRedirection.enable = true; # Connect USB devices to libvirt VMs, both local and remote. spiceUSBRedirection.enable = true; # Connect USB devices to libvirt VMs, both local and remote.
libvirtd = { # https://nixos.wiki/wiki/Libvirt libvirtd = { # https://nixos.wiki/wiki/Libvirt
enable = true; enable = true;
qemu.package = pkgs.qemu_full; qemu.package = pkgs.qemu_full;

38
modules/nixos/vr.nix Normal file
View file

@ -0,0 +1,38 @@
# Beat Saber является OpenXR игрой, что не поддерживается Alvr из коробки
# Возможно на X11 это можно исправить простой настройкой в SteamVR
# Но на Wayland мне приходилось качать разом весь этот софт на Arch
# Поэтому сразу поставил всё что надо и не пробовал найти необходимый минимум
# Мб пригодится поставить opencomposite для трансляции OpenVR в OpenXR
{
services = {
# Open source XR runtime
monado = {
enable = true;
};
# An OpenXR streaming application to a standalone headset
# wivrn = {
# enable = true;
# openFirewall = true;
# };
};
programs = {
# Stream VR games from your PC to your headset via Wi-Fi
alvr = {
enable = true;
openFirewall = true;
};
# UI for Monado, the open source OpenXR runtime
# envision = {
# enable = true;
# openFirewall = true;
# };
};
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

View file

@ -1,8 +1,3 @@
# Не совсем понял как менять тему в sddm. Но мне оно не надо. Оставлю ссылки
# https://www.reddit.com/r/NixOS/comments/14sb6s2/sddm_themes_finally_did_a_dumb_workaround/
# https://www.reddit.com/r/NixOS/comments/14dlvbr/sddm_theme/
{ pkgs, ... }: { { pkgs, ... }: {
services.displayManager = { services.displayManager = {
@ -10,7 +5,7 @@
sddm = { sddm = {
# Чтоб задать аватарку юзеру, надо отправить png файл такой командой: # Чтоб задать аватарку юзеру, надо отправить png файл такой командой:
# sudo cp image.png /var/lib/AccountsService/icons/username # sudo cp image.png /var/lib/AccountsService/icons/username
# Тоесть именно username, без .png в конце # То есть именно username, без .png в конце
enable = true; enable = true;
# package = pkgs.kdePackages.sddm; # qt6 sddm # package = pkgs.kdePackages.sddm; # qt6 sddm
theme = "chili"; theme = "chili";
@ -23,9 +18,11 @@
accelProfile = "flat"; accelProfile = "flat";
scrollMethod = "button"; scrollMethod = "button";
scrollButton = 9; # Узнать айди можно через `xev -event button | grep button` scrollButton = 9; # Узнать айди можно через `xev -event button | grep button`
middleEmulation = false;
}; };
touchpad = { touchpad = {
accelProfile = "flat"; accelProfile = "flat";
middleEmulation = false;
}; };
}; };
@ -42,11 +39,15 @@
options = "grp:caps_toggle"; # Менять язык на CapsLock options = "grp:caps_toggle"; # Менять язык на CapsLock
}; };
displayManager.sessionCommands = ''
xsetroot -cursor_name left_ptr
'';
# Мб видеодрайвер можно не указывать # Мб видеодрайвер можно не указывать
# https://discourse.nixos.org/t/amd-gpu-optimal-settings/27648/3 # https://discourse.nixos.org/t/amd-gpu-optimal-settings/27648/3
# videoDrivers = [ "nvidia" ]; # https://nixos.wiki/wiki/Nvidia # videoDrivers = [ "nvidia" ]; # https://nixos.wiki/wiki/Nvidia
# videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU
# deviceSection = ''Option "TearFree" "True"''; deviceSection = ''Option "TearFree" "True"'';
}; };
} }

View file

@ -1,8 +1,4 @@
# Edit this configuration file to define what should be installed on { pkgs, pkgs2, spkgs, inputs, ... }:
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ pkgs, inputs, ... }:
let let
username = "buliway"; username = "buliway";
@ -14,8 +10,8 @@ in {
./packages.nix ./packages.nix
]; ];
# Список сервисов, которые не надо ребутать после rebuild switch # Если какие-то сервисы кладут систему при ребилде,
# Мне это надо, потому что некоторые сервисы кладут систему # то их ребут при ребилде можно выключить таким конфигом:
# systemd.services = { # systemd.services = {
# "accounts-daemon".restartIfChanged = false; # "accounts-daemon".restartIfChanged = false;
# "home-manager-buliway".restartIfChanged = false; # "home-manager-buliway".restartIfChanged = false;
@ -28,7 +24,6 @@ in {
# ]; # ];
loader = { loader = {
# systemd-boot.enable = true;
grub = { grub = {
enable = true; enable = true;
efiSupport = true; efiSupport = true;
@ -46,14 +41,17 @@ in {
isNormalUser = true; isNormalUser = true;
description = username; description = username;
extraGroups = [ "networkmanager" "wheel" "input" "libvirtd" "storage" "docker" "video" ]; extraGroups = [ "networkmanager" "wheel" "input" "libvirtd" "storage" "docker" "video" ];
# packages = with pkgs; []; # packages = with pkgs; [
# clang-tools
# ];
}; };
}; };
home-manager = { home-manager = {
# also pass inputs to home-manager modules # also pass inputs to home-manager modules
useGlobalPkgs = true; useGlobalPkgs = true;
extraSpecialArgs = { inherit inputs; }; useUserPackages = true;
extraSpecialArgs = { inherit spkgs; inherit pkgs2; inherit inputs; };
users.${username} = import ./home.nix; users.${username} = import ./home.nix;
}; };
@ -64,14 +62,23 @@ in {
xdg.portal = { xdg.portal = {
enable = true; enable = true;
configPackages = with pkgs; [ configPackages = with pkgs; [
xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде xdg-desktop-portal
# kdePackages.xdg-desktop-portal-kde
# xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде
]; ];
extraPortals = with pkgs; [ extraPortals = with pkgs; [
xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде xdg-desktop-portal
# kdePackages.xdg-desktop-portal-kde
# xdg-desktop-portal-gtk # Чтоб загружать файлы и стримить в дискорде
]; ];
}; };
nix.settings.experimental-features = ["nix-command" "flakes"]; nix.settings = {
experimental-features = ["nix-command" "flakes"];
# For nix-gaming
substituters = ["https://nix-gaming.cachix.org"];
trusted-public-keys = ["nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="];
};
system.stateVersion = "24.05"; # Don't change it system.stateVersion = "24.05"; # Don't change it

View file

@ -14,11 +14,9 @@
# Если с каким-то софтом будут проблемы, то можно перенести из "packages.nix" сюда # Если с каким-то софтом будут проблемы, то можно перенести из "packages.nix" сюда
# Например, я читал, что если ставить vscode через configuration.nix, а не через пакеты юзера, # Например, я читал, что если ставить vscode через configuration.nix, а не через пакеты юзера,
# то не получится ставить расширения. Потому что там софт ставится от рута и vscode # то не получится ставить расширения. Потому что там софт ставится от рута и vscode
# будет пытаться установить расширения в каталог nix store, куда нельзя что либо ставить без рута. # будет пытаться установить расширения в каталог nix store, куда нельзя что либо ставить даже с рутом.
packages = with pkgs; [ packages = with pkgs; [
vscode # Мб надо в home.packages писать, чтоб расширения ставились без рута vscode # Надо в home.packages писать, чтоб расширения ставились
jetbrains-toolbox
zed-editor
]; ];
sessionVariables = { sessionVariables = {
@ -29,6 +27,7 @@
TERM = "alacritty"; TERM = "alacritty";
QT_QPA_PLATFORMTHEME = "qt6ct"; QT_QPA_PLATFORMTHEME = "qt6ct";
# QT_STYLE_OVERRIDE = "kvantum"; # QT_STYLE_OVERRIDE = "kvantum";
PATH = "$PATH:${config.home.homeDirectory}/go/bin";
}; };
stateVersion = "24.05"; # Don't change it stateVersion = "24.05"; # Don't change it
@ -37,8 +36,8 @@
gtk = lib.mkIf (pkgs.stdenv.hostPlatform.isLinux) { gtk = lib.mkIf (pkgs.stdenv.hostPlatform.isLinux) {
# enable = true; # enable = true;
iconTheme = { iconTheme = {
name = "Gruvbox-Plus-Dark"; # Имя каталога в /usr/share/icons/ name = "Papirus-Dark"; # Имя каталога в /usr/share/icons/
package = pkgs.gruvbox-plus-icons; # Пакет иконок # package = pkgs.papirus-icon-theme; # Пакет иконок
}; };
}; };
@ -46,14 +45,17 @@
targets = { targets = {
vscode.enable = false; # Руками ставлю. Не нравится stylix вариант vscode.enable = false; # Руками ставлю. Не нравится stylix вариант
firefox.enable = false; # Руками ставлю и бекаплю каталог браузера firefox.enable = false; # Руками ставлю и бекаплю каталог браузера
# lightdm.enable = false; # Не хочу обои в lightdm (в сурсе есть настройка, но не билдит, мать ебал)
}; };
# iconTheme = {
# enable = true;
# package = pkgs.papirus-icon-theme;
# dark = "Papirus-Dark";
# };
}; };
############################################## ##############################################
## Ниже включаю проги для Stylix ## ## Ниже включаю проги для Stylix ##
## Ебаные дауны могут редачить grub, ## ## Потому что не все из них вкл в стоке ##
## но не могут редачить ебаный обычный софт ##
############################################## ##############################################
# programs = { # programs = {

View file

@ -1,4 +1,4 @@
{ pkgs, ... }: { { pkgs, pkgs2, spkgs, inputs, ... }: {
# https://nixos.wiki/wiki/Fonts # https://nixos.wiki/wiki/Fonts
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
@ -7,7 +7,9 @@
noto-fonts-cjk-sans # Отображение иероглифов. Версия без засечек noto-fonts-cjk-sans # Отображение иероглифов. Версия без засечек
noto-fonts-color-emoji noto-fonts-color-emoji
noto-fonts-monochrome-emoji noto-fonts-monochrome-emoji
(nerdfonts.override {fonts = ["JetBrainsMono" "Noto" "CascadiaCode"];}) nerd-fonts.jetbrains-mono
nerd-fonts.noto
nerd-fonts.caskaydia-mono
carlito # Совместим с Calibri, разработан как его свободная альтернатива. Без засечек carlito # Совместим с Calibri, разработан как его свободная альтернатива. Без засечек
terminus_font terminus_font
inconsolata inconsolata
@ -43,16 +45,67 @@
# fwupd.enable = true; # DBus service that allows applications to update firmware # fwupd.enable = true; # DBus service that allows applications to update firmware
# greenclip.enable = true; # https://github.com/erebe/greenclip (использую clipmenu вместо этого) # greenclip.enable = true; # https://github.com/erebe/greenclip (использую clipmenu вместо этого)
# fstrim.enable = true; # Чистит ssd для норм производительности. Пока не пользуюсь # fstrim.enable = true; # Чистит ssd для норм производительности. Пока не пользуюсь
# archisteamfarm = {}; # Фарм карточек стима афк. Простро раскомментить мало, надо настроить # archisteamfarm = {}; # Фарм карточек стима афк. Просто раскомментить мало, надо настроить
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"; };
};
}; };
programs = { programs = {
nix-ld = { # Имитация файловой системы обычного линукса и пакеты для этого дела
enable = true;
libraries = with pkgs2; [
stdenv.cc.cc
# Для запуска Throne бинаря с гитхаб (форк nekoray)
kdePackages.qtbase
kdePackages.qttools
kdePackages.qtwayland
kdePackages.qtsvg
kdePackages.qtimageformats
util-linux
zlib
zstd
mesa
libGL
libglvnd
libxkbcommon
freetype
fontconfig
xorg.libX11
xorg.libXext
xorg.libXrandr
xorg.libXrender
xorg.libXcursor
xorg.libXxf86vm
xorg.libXi
xorg.libxcb
xorg.libXfixes
xorg.xcbutil
xorg.xcbutilkeysyms
xorg.xcbutilwm
xorg.xcbutilimage
xorg.xcbutilrenderutil
xcb-util-cursor
glib
dbus
krb5
];
};
zsh.enable = true; zsh.enable = true;
mtr.enable = true; # Объединяет функции утилит traceroute и ping mtr.enable = true; # Объединяет функции утилит traceroute и ping
gnupg.agent = { gnupg.agent = {
enable = true; enable = true;
enableSSHSupport = true; enableSSHSupport = true;
pinentryPackage = pkgs.pinentry-qt; # Окно ввода пароля pinentryPackage = pkgs.pinentry-qt; # Окно ввода пароля для gpg
}; };
appimage = { # Чтоб .appimage работал appimage = { # Чтоб .appimage работал
@ -63,7 +116,7 @@
}; };
}; };
thunar = { # Can't I use it with home-manager? WTF thunar = {
enable = true; enable = true;
plugins = with pkgs.xfce; [ plugins = with pkgs.xfce; [
thunar-media-tags-plugin # Tagging and renaming features for media files thunar-media-tags-plugin # Tagging and renaming features for media files
@ -75,9 +128,7 @@
steam = { steam = {
enable = true; enable = true;
extraCompatPackages = with pkgs; [ # Доп версии протона. Должны иметь `steamcompattool` output # package = pkgs2.steam;
proton-ge-bin
];
# fontPackages = with pkgs; []; # Font packages to use in Steam # fontPackages = with pkgs; []; # Font packages to use in Steam
# extraPackages = with pkgs; []; # Additional # extraPackages = with pkgs; []; # Additional
# protontricks.enable = true; # Running Winetricks commands for Proton-enabled games. # protontricks.enable = true; # Running Winetricks commands for Proton-enabled games.
@ -102,22 +153,96 @@
# Это рекомендуют ставить не на всю систему, # Это рекомендуют ставить не на всю систему,
# а только на nix shell внутри проекта, где нужны эти пакеты # а только на nix shell внутри проекта, где нужны эти пакеты
# Но я хочу на всю систему
go # Go programming language # Python
rustup # Управление версиями языка Rust python3Full # Python last version
hugo # Для моего блога python3Packages.pip # Python package manager (nvim его не видит)
python3 # Питухон ласт версии python3Packages.debugpy # Debug Adapter Protocol for Python
pyright # Python LSP
ruff # Extremely fast Python linter
# C/C++
clang-tools # Clangd? LSP
ccls # C/C++ LSP
clang # Компилятор
gcc # Компилятор gcc # Компилятор
gnumake # Компилятор? glibc # GNU C Library
gnumake
cmake-language-server # CMake LSP
cmake
# bear # Tool that generates a compilation database for clang tooling
# boost # Collection of C++ libraries
# Nix language server # Rust
nil rustup # Управление версиями языка Rust (rustup default stable)
nixd rust-analyzer # Rust LSP (rustup component add rust-analyzer)
# Nix code formatting # Golang
# nixpkgs-fmt # Оф, но будет устаревшим. Usage: nixpkgs-fmt file.nix go # Go programming language
# nixfmt-rfc-style # Новый оф, но вроде не всё есть. Usage: nixfmt file.nix gopls # Go LSP
alejandra # Сторонний быстрый форматер. Usage: alejandra file.nix delve # Go debugger
templ # A language for writing HTML user interfaces in Go.
golangci-lint # Fast linters Runner for Go
# Nix
nixd # Nix LSP. Нет в mason
# Lua
lua5_1 # Scripting language
luajit # JIT compiler for Lua
luajitPackages.luarocks # Package manager for lua
lua-language-server # Lua LSP
stylua # Lua formatter
# Shell/Bash
bash-language-server # Basp LSP
shellcheck # Проверка shell скриптов на ошибки
shfmt # Shell parser and formatter
# SQL
sqls # SQL LSP
postgres-lsp # Postgres LSP
sqlite
dbeaver-bin
pgadmin4
# Frontend
pkgs2.nodejs_24 # For npm
htmx-lsp # HTMX lsp
emmet-language-server # Emmet.io LSP
vscode-langservers-extracted # HTML/CSS/JSON/ESLint LSP
typescript-language-server # TypeScript LSP
tailwindcss-language-server # Tailwind LSP
svelte-language-server # Svelte LSP
# tailwindcss
# Protobuf
protols # LSP
# buf # LSP (крашит некоторые проекты в нвиме)
protobuf
protoc-gen-go
protoc-gen-go-grpc
# Gamedev
pkgs2.godot
pkgs2.gdtoolkit_4
ldtk
# Other
hugo # Для моего блога
yaml-language-server # YAML LSP
taplo # TOML LSP
vim-language-server # VimScript LSP
go-migrate # Database migrations. CLI and Golang library
postman # API Development Environment
insomnia # API client. Мне нравится больше, чем postman
pkgs2.nushell # Modern shell
# For nvim
tree-sitter # code parser
ripgrep # grep
fd # find
############ ############
## Архивы ## ## Архивы ##
@ -127,7 +252,7 @@
unzip # Разархивировать unzip # Разархивировать
unrar # Разархивировать unrar # Разархивировать
gnutar # Для .tar? gnutar # Для .tar?
_7zz # Это пакет для 7z? p7zip # Это пакет для 7z?
bzip2 # .bz2 архивы bzip2 # .bz2 архивы
############## ##############
@ -138,9 +263,12 @@
wget wget
curl curl
git git
xclip # Буфера обмена xclip # Буфер обмена
ffmpeg_7 # Обработка видео. Нужен всегда и везде как зависимость ffmpeg_7 # Обработка видео. Нужен всегда и везде как зависимость
svt-av1 # Кодек для рендера в av1 на проце
# imlib2Full # Image manipulation library
imagemagick # Обработка изображений. Мб тоже нужен всегда imagemagick # Обработка изображений. Мб тоже нужен всегда
vips # В 4 раза быстрее imagemagick?
tree # Структура файлов в терминале tree # Структура файлов в терминале
gnugrep # Поиск в терминале gnugrep # Поиск в терминале
gawk # Обработка и анализ текста в терминале gawk # Обработка и анализ текста в терминале
@ -155,11 +283,13 @@
# zscroll # A text scroller for use with panels and shells https://github.com/noctuid/zscroll # zscroll # A text scroller for use with panels and shells https://github.com/noctuid/zscroll
tokei # Количество строк кода на разных языках в каталоге tokei # Количество строк кода на разных языках в каталоге
pass # Менеджер паролей в терминале pass # Менеджер паролей в терминале
amdgpu_top # Tool to display AMD GPU usage
btop # Монитор ресурсов в терминале btop # Монитор ресурсов в терминале
# rocmPackages.rocm-smi # Чтоб в btop было gpu (не работает) rocmPackages.rocm-smi # Чтоб в btop было gpu (не работает)
# rocmPackages_5.rocm-smi # Старая версия пакета выше. Хз какой надо rocmPackages.rocblas # Для работы hip?
yt-dlp # Скачивать и смотреть медиа с разных сайтов rocmPackages.hipblas # Для работы hip?
tasktimer # TUI task timer. Можно несколько таймеров с описанием запустить. В терминал tt rocmPackages.clr # Для работы hip?
pkgs2.yt-dlp # Скачивать и смотреть медиа с разных сайтов
timer # A "sleep" with progress. Таймер на пельмени "timer 5m" timer # A "sleep" with progress. Таймер на пельмени "timer 5m"
libqalculate # Advanced calculator library libqalculate # Advanced calculator library
fastfetch # Пишешь в теримнал и кидаешь всем со словами I use nixos btw fastfetch # Пишешь в теримнал и кидаешь всем со словами I use nixos btw
@ -167,9 +297,18 @@
fzf # Нечёткий поиск fzf # Нечёткий поиск
killall # Убить процессы. Мем, что в стоке не стоит killall # Убить процессы. Мем, что в стоке не стоит
libnotify # Вызов оповещений через "notify-send" libnotify # Вызов оповещений через "notify-send"
gallery-dl # Качать много картинок с кучи разных сайтов pkgs2.gallery-dl # Качать много картинок с кучи разных сайтов
shellcheck # Проверка shell скриптов на ошибки
pwgen # Генератор паролей pwgen # Генератор паролей
lm_sensors # Сенсоры
httpie # interacting with APIs & HTTP servers
jq # Cli JSON processor
libxml2 # XML parsing library for C
miller # Like awk, sed, cut, join, and sort for data formats such as CSV, TSV, JSON, JSON Lines, and positionally-indexed
# htmlq # Как jq, но для html. Извлекать конкретные элементы из html
# mkvtoolnix-cli # Cross-platform tools for Matroska
usbutils # lsusb
f2fs-tools # f2fs filesystem
exfat # exFAT filesystem
alacritty # Минималистичный терминал. Основной у меня alacritty # Минималистичный терминал. Основной у меня
kitty # Самый быстрый протокол отображения медиа, но ssh через жопу работает kitty # Самый быстрый протокол отображения медиа, но ssh через жопу работает
@ -178,8 +317,7 @@
## GUI ## ## GUI ##
######### #########
nekoray # VPN ksnip # Скрин экрана. Аналог - Flameshot
ksnip # Скрины. Аналоги - Flameshot
# kdePackages.ark # Архиватор от kde. Имеет в зависимостях blowjob # kdePackages.ark # Архиватор от kde. Имеет в зависимостях blowjob
file-roller # Архиватор от gnome file-roller # Архиватор от gnome
qbittorrent # Торренты качать qbittorrent # Торренты качать
@ -189,7 +327,7 @@
# pwvucontrol # Pipewire Volume Control (Не знаю может ли полностью заменить pavucontrol) # pwvucontrol # Pipewire Volume Control (Не знаю может ли полностью заменить pavucontrol)
networkmanagerapplet # Tray for network manager networkmanagerapplet # Tray for network manager
brightnessctl # Brightness control for laptop brightnessctl # Brightness control for laptop
gucharmap # Проверка шрифтов. Какой шрифт какие символы отображает # gucharmap # Проверка шрифтов. Какой шрифт какие символы отображает
############## ##############
## Browsers ## ## Browsers ##
@ -210,7 +348,7 @@
hunspell # Проверка орфографии для libreoffice hunspell # Проверка орфографии для libreoffice
hunspellDicts.ru_RU # Словарь для проверки орфографии hunspellDicts.ru_RU # Словарь для проверки орфографии
hunspellDicts.en_US # Словарь для проверки орфографии hunspellDicts.en_US # Словарь для проверки орфографии
calibre # Работа с ebook. Иногда даёт thumbnail в файловом менеджере spkgs.calibre # Работа с ebook. Иногда даёт thumbnail в файловом менеджере
drawio # Desktop application for creating diagrams. Вроде даёт thumbnail в ranger drawio # Desktop application for creating diagrams. Вроде даёт thumbnail в ranger
xournalpp # Xournal++ is a handwriting Notetaking software with PDF annotation support xournalpp # Xournal++ is a handwriting Notetaking software with PDF annotation support
@ -224,7 +362,7 @@
xfce.exo # Мб надо, чтоб терминал открывать в каталоге xfce.exo # Мб надо, чтоб терминал открывать в каталоге
ffmpegthumbnailer # A lightweight video thumbnailer ffmpegthumbnailer # A lightweight video thumbnailer
gnome-epub-thumbnailer # Thumbnailer for EPub and MOBI books gnome-epub-thumbnailer # Thumbnailer for EPub and MOBI books
nufraw-thumbnailer # Thumbnailer for .raw images from digital cameras # nufraw-thumbnailer # Thumbnailer for .raw images from digital cameras
# mcomix # Comic book reader and image viewer. Thumbnailer for .crb comicbook archives (требует mupdf, который крашит систему) # mcomix # Comic book reader and image viewer. Thumbnailer for .crb comicbook archives (требует mupdf, который крашит систему)
f3d # Fast and minimalist 3D viewer using VTK. Thumbnailer for 3D files, including glTF, stl, step, ply, obj, fbx. f3d # Fast and minimalist 3D viewer using VTK. Thumbnailer for 3D files, including glTF, stl, step, ply, obj, fbx.
openscad # 3D model previews (stl, off, dxf, scad, csg). Этот именно для ranger, но мб пригодится и в других местах openscad # 3D model previews (stl, off, dxf, scad, csg). Этот именно для ranger, но мб пригодится и в других местах
@ -234,16 +372,20 @@
################## ##################
kdePackages.kimageformats # Image format plugins for Qt 6 kdePackages.kimageformats # Image format plugins for Qt 6
libsForQt5.kimageformats
kdePackages.qtimageformats # Plugins for additional image formats: TIFF, MNG, TGA, WBMP kdePackages.qtimageformats # Plugins for additional image formats: TIFF, MNG, TGA, WBMP
libsForQt5.qt5.qtimageformats
kdePackages.qtsvg # SVG support kdePackages.qtsvg # SVG support
kdePackages.karchive # Plugin for Krita and OpenRaster images kdePackages.karchive # Plugin for Krita and OpenRaster images
webp-pixbuf-loader # .webp support (what's this?) webp-pixbuf-loader # .webp support (what's this?)
gdk-pixbuf.dev # Library for image loading and manipulation
libwebp # .webp support libwebp # .webp support
libavif # AVIF format support libavif # AVIF format support
libheif # HEIF format support libheif # HEIF format support
libgsf # .odf support libgsf # .odf support
libjxl # JPEG-XL format support libjxl # JPEG-XL format support
libraw # RAW format support libraw # RAW format support
librsvg # Small library to render SVG images to Cairo surfaces
jxrlib # JPEG XR image support jxrlib # JPEG XR image support
poppler # PDF support poppler # PDF support
freetype # Font rendering engine freetype # Font rendering engine
@ -255,44 +397,43 @@
########### ###########
strawberry # Музыкальный плеер strawberry # Музыкальный плеер
obs-studio # Запись видео # TODO: Настройки надо сделать декларативными obs-studio # Запись видео
picard # Массовый редактор метаданных музыки # picard # Массовый редактор метаданных музыки
mousai # Опенсорс шазам. Со временем просит платный api # mousai # Опенсорс шазам. Со временем просит платный api
spek # Спектрограмма аудио. # spek # Спектрограмма аудио.
mpv # Смотреть видео mpv # Смотреть видео
# Смотреть картинки # Смотреть картинки
imv # Не умеет показывать анимированные webp. Через раз может показывать avif imv # Не умеет показывать анимированные webp. Через раз может показывать avif
qview # Умеет в анимированные webp. Не умеет открывать avif qview # Умеет открывать всё, включая анимированный webp и avif
feh # Нужен в большом количестве софта как зависимость. Может в avif, но криво feh # Нужен в большом количестве софта как зависимость. Может в avif, но криво
############ ############
## Social ## ## Social ##
############ ############
(discord.override { # Discord # (pkgs2.discord.override { # Discord с плагинами
withOpenASAR = true; # Оптимизатор дискрода # # withOpenASAR = true; # Оптимизатор дискрода
withVencord = true; # Имба плагины # TODO: Настройки надо сделать декларативными # withVencord = true; # Имба плагины # TODO: Настройки надо сделать декларативными
}) # })
telegram-desktop pkgs2.discord
# revolt-desktop # FOSS аналог дискорда pkgs2.telegram-desktop
########### ###########
## Games ## ## Games ##
########### ###########
# Чтоб не компилить wine, надо закомментить и сделать ребилд без игры.
# Потом раскомментить и сделать ребилд с игрой
# inputs.nix-gaming.packages.${pkgs.system}.osu-stable # osu!stable from nix-gaming # inputs.nix-gaming.packages.${pkgs.system}.osu-stable # osu!stable from nix-gaming
# steam # Мб не надо сюда писать, раз через programs.steam редачу # pkgs2.osu-lazer-bin
# heroic # A Native GOG, Epic, and Amazon Games Launcher for Linux, Windows and Mac
# lutris # Запускать игры не из стима
# bottles # Минималистичная альтернатива lutris
# Мб зависимости # Мб зависимости
protonup-qt # Управлять версиями proton-ge для steam
steam-run # На всякий случай steam-run # На всякий случай
mangohud # Фпс и нагрузку на пк показывает в играх pkgs2.mangohud # Фпс и нагрузку на пк показывает в играх
gamemode # Оптимизации линуха и игр pkgs2.wineWowPackages.stableFull # support both 32- and 64-bit applications
wineWowPackages.stable # support both 32- and 64-bit applications
# wineWowPackages.staging # Можно назвать бета версией вайна # wineWowPackages.staging # Можно назвать бета версией вайна
winetricks # winetricks (all versions) pkgs2.winetricks # winetricks (all versions)
# wineWowPackages.waylandFull # native wayland support (unstable) # wineWowPackages.waylandFull # native wayland support (unstable)
# protontricks # Running Winetricks commands for Proton-enabled games # protontricks # Running Winetricks commands for Proton-enabled games
@ -301,28 +442,24 @@
############ ############
krita # Рисовать 1. Часто крашится krita # Рисовать 1. Часто крашится
gimp # Рисовать 2. Потом выберу что оставить pkgs2.gimp3 # Рисовать 2. Потом выберу что оставить
blender-hip # 3д графика и рендер видео # blender-hip # 3д графика и рендер видео
gcolor3 # GUI color picker gcolor3 # GUI color picker
xcolor # CLI color picker https://github.com/Soft/xcolor xcolor # CLI color picker https://github.com/Soft/xcolor
inkscape # Vector graphic editor # inkscape # Vector graphic editor
################## ##################
## Productivity ## ## Productivity ##
################## ##################
obsidian # Заметки obsidian # Заметки
planify # Task manager pkgs2.planify # Task manager
######### #########
## IDE ## ## IDE ##
######### #########
neovim # Мб не надо писать, он у меня необычный, через nixvim flake neovim
# vscode # Надо в home.packages писать, чтоб расширения ставились без рута
# jetbrains-toolbox # Надо в home.packages писать. https://nixos.wiki/wiki/Jetbrains_Tools
# zed-editor # На всякий тоже поставил в home.packages
helix # A Kakoune / Neovim inspired editor, written in Rust.
########### ###########
## Icons ## ## Icons ##
@ -333,6 +470,7 @@
kdePackages.breeze-icons # qt6 kdePackages.breeze-icons # qt6
papirus-icon-theme papirus-icon-theme
material-icons material-icons
gruvbox-plus-icons
############ ############
## Vulkan ## ## Vulkan ##
@ -365,7 +503,7 @@
vial # GUI для qmk, если клавиатура поддерживает vial # GUI для qmk, если клавиатура поддерживает
fontconfig fontconfig
zlib zlib
google-fonts # google-fonts
libva-utils # Проверяет работоспособность VAAPI? libva-utils # Проверяет работоспособность VAAPI?
clinfo # Проверяет работоспособность OpenCL? clinfo # Проверяет работоспособность OpenCL?
libsecret # Хранить и получать аккаунты у приложений. Например для jetbrains toolbox libsecret # Хранить и получать аккаунты у приложений. Например для jetbrains toolbox

6
nvim/.gitignore vendored Normal file
View file

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

6
nvim/.stylua.toml Normal file
View file

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

273
nvim/README.md Normal file
View file

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

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

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

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

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

View file

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

View file

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

154
nvim/init.lua Normal file
View file

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

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

@ -0,0 +1,45 @@
{
"LuaSnip": { "branch": "master", "commit": "c9b9a22904c97d0eb69ccb9bab76037838326817" },
"blink.cmp": { "branch": "main", "commit": "cb5e346d9e0efa7a3eee7fd4da0b690c48d2a98e" },
"conform.nvim": { "branch": "master", "commit": "db8a4a9edb217067b1d7a2e0362c74bfe9cc944d" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" },
"friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" },
"gitsigns.nvim": { "branch": "main", "commit": "011dc6718bcebdf92a5336bb0da79189c3afe621" },
"go.nvim": { "branch": "master", "commit": "da15ca55705c57ca10de1fbc1f0b6d6327c13e55" },
"gruvbox.nvim": { "branch": "main", "commit": "15958f5ee43e144856cd2084ce6c571bfdb44504" },
"guihua.lua": { "branch": "master", "commit": "d783191eaa75215beae0c80319fcce5e6b3beeda" },
"image.nvim": { "branch": "master", "commit": "6ffafab2e98b5bda46bf227055aa84b90add8cdc" },
"indent-blankline.nvim": { "branch": "master", "commit": "e10626f7fcd51ccd56d7ffc00883ba7e0aa28f78" },
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
"luvit-meta": { "branch": "main", "commit": "1df30b60b1b4aecfebc785aa98943db6c6989716" },
"markdown-table-mode.nvim": { "branch": "main", "commit": "fe207ea7cef615ccaf2c0f1257c58ffa0a50a9f5" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "09220b99d63d5363f219daa2785242ee5fddba7f" },
"mason-tool-installer.nvim": { "branch": "main", "commit": "5639d58a3d11ff7c05c8e31e159bfedae55d7961" },
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
"mini.nvim": { "branch": "main", "commit": "03387f53f1cb8c6a8ba0798041c6aa3525ed11ba" },
"neo-tree.nvim": { "branch": "v3.x", "commit": "1ef260eb4f54515fe121a2267b477efb054d108a" },
"nui.nvim": { "branch": "main", "commit": "8d3bce9764e627b62b07424e0df77f680d47ffdb" },
"nvim-autopairs": { "branch": "master", "commit": "68f0e5c3dab23261a945272032ee6700af86227a" },
"nvim-colorizer.lua": { "branch": "master", "commit": "517df88cf2afb36652830df2c655df2da416a0ae" },
"nvim-dap": { "branch": "master", "commit": "a720d4966f758ab22e8ec28812b6df90a53e0f02" },
"nvim-dap-go": { "branch": "main", "commit": "8763ced35b19c8dc526e04a70ab07c34e11ad064" },
"nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" },
"nvim-lint": { "branch": "master", "commit": "6e9dd545a1af204c4022a8fcd99727ea41ffdcc8" },
"nvim-lspconfig": { "branch": "master", "commit": "8a1529e46eef5efc86c34c8d9bdd313abc2ecba0" },
"nvim-neoclip.lua": { "branch": "main", "commit": "831a97c7697736411a05ff8b91e8798ea4c2d6fb" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-treesitter": { "branch": "master", "commit": "2586ea65faf45dcf1caf8d34510d50bb545c215a" },
"nvim-treesitter-context": { "branch": "master", "commit": "129fcc94fa986692926366e940a46f00d2a4abbe" },
"nvim-web-devicons": { "branch": "master", "commit": "d0cafff5c4347a604a07edf7bb9a91fda7eb577e" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"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" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
}

View file

@ -0,0 +1,14 @@
-- Adding history for nvim clipboard
return {
{
'AckslD/nvim-neoclip.lua',
dependencies = {
{ 'nvim-telescope/telescope.nvim' },
},
config = function()
require('neoclip').setup()
vim.keymap.set('n', '<leader>sc', ':Telescope neoclip<CR>', { desc = '[S]earch [C]lip history' })
end,
},
}

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,87 @@
-- Symbol usage plugin
local SymbolKind = vim.lsp.protocol.SymbolKind
local function h(name)
return vim.api.nvim_get_hl(0, { name = name })
end
-- hl-groups can have any name
vim.api.nvim_set_hl(0, 'SymbolUsageRounding', { fg = h('CursorLine').bg, italic = true })
vim.api.nvim_set_hl(0, 'SymbolUsageContent', { bg = h('CursorLine').bg, fg = h('Comment').fg, italic = true })
vim.api.nvim_set_hl(0, 'SymbolUsageRef', { fg = h('Function').fg, bg = h('CursorLine').bg, italic = true })
vim.api.nvim_set_hl(0, 'SymbolUsageDef', { fg = h('Type').fg, bg = h('CursorLine').bg, italic = true })
vim.api.nvim_set_hl(0, 'SymbolUsageImpl', { fg = h('@keyword').fg, bg = h('CursorLine').bg, italic = true })
local function text_format(symbol)
local res = {}
local round_start = { '', 'SymbolUsageRounding' }
local round_end = { '', 'SymbolUsageRounding' }
-- Indicator that shows if there are any other symbols in the same line
local stacked_functions_content = symbol.stacked_count > 0 and ('+%s'):format(symbol.stacked_count) or ''
if symbol.references then
local usage = symbol.references <= 1 and 'usage' or 'usages'
local num = symbol.references == 0 and 'no' or symbol.references
table.insert(res, round_start)
table.insert(res, { '󰌹 ', 'SymbolUsageRef' })
table.insert(res, { ('%s %s'):format(num, usage), 'SymbolUsageContent' })
table.insert(res, round_end)
end
if symbol.definition then
if #res > 0 then
table.insert(res, { ' ', 'NonText' })
end
table.insert(res, round_start)
table.insert(res, { '󰳽 ', 'SymbolUsageDef' })
table.insert(res, { symbol.definition .. ' defs', 'SymbolUsageContent' })
table.insert(res, round_end)
end
if symbol.implementation then
if #res > 0 then
table.insert(res, { ' ', 'NonText' })
end
table.insert(res, round_start)
table.insert(res, { '󰡱 ', 'SymbolUsageImpl' })
table.insert(res, { symbol.implementation .. ' impls', 'SymbolUsageContent' })
table.insert(res, round_end)
end
if stacked_functions_content ~= '' then
if #res > 0 then
table.insert(res, { ' ', 'NonText' })
end
table.insert(res, round_start)
table.insert(res, { '', 'SymbolUsageImpl' })
table.insert(res, { stacked_functions_content, 'SymbolUsageContent' })
table.insert(res, round_end)
end
return res
end
return {
{
'Wansmer/symbol-usage.nvim',
event = 'LspAttach', -- need run before LspAttach if you use nvim 0.9. On 0.10 use 'LspAttach'
config = function()
require('symbol-usage').setup {
filetypes = {},
log = { enabled = false, level = 'INFO', stdout = {}, log_file = {}, notify = {} },
text_format = text_format,
kinds = {
SymbolKind.Function,
SymbolKind.Method,
SymbolKind.Class,
SymbolKind.Struct,
-- SymbolKind.Variable,
-- SymbolKind.Constant,
},
}
end,
},
}

View file

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

View file

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

View file

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

View file

@ -0,0 +1,53 @@
-- Autoformat
-- Timeout для форматирования пришлось задать в 5 секунд, потому что sqlfluff очень долго форматирует
return {
{
'stevearc/conform.nvim',
event = { 'BufWritePre' },
cmd = { 'ConformInfo' },
keys = {
{
'<leader>f',
function()
require('conform').format {
async = true,
lsp_format = 'fallback',
timeout_ms = 5000,
}
end,
mode = '',
desc = '[F]ormat buffer',
},
},
opts = {
notify_on_error = false,
format_on_save = function(bufnr)
-- Disable "format_on_save lsp_fallback" for languages that don't
-- have a well standardized coding style. You can add additional
-- languages here or re-enable it for the disabled ones.
local disable_filetypes = { c = true, cpp = true }
if disable_filetypes[vim.bo[bufnr].filetype] then
return nil
else
return {
timeout_ms = 5000,
lsp_format = 'fallback',
}
end
end,
formatters_by_ft = {
lua = { 'stylua' },
go = { 'gofmt', 'injected' },
-- ['*'] = { 'injected' }, -- enables injected-lang formatting for all filetypes
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
-- You can use 'stop_after_first' to run the first available formatter from the list
-- javascript = { "prettierd", "prettier", stop_after_first = true },
},
formatters = {},
},
},
}

View file

@ -0,0 +1,8 @@
-- autopairs
-- https://github.com/windwp/nvim-autopairs
return {
'windwp/nvim-autopairs',
event = 'InsertEnter',
opts = {},
}

View file

@ -0,0 +1,125 @@
-- Autocompletion
return {
{
'saghen/blink.cmp',
event = 'VimEnter',
version = '1.*',
dependencies = {
-- Snippet Engine
{
'L3MON4D3/LuaSnip',
version = '2.*',
build = (function()
-- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments.
-- Remove the below condition to re-enable on windows.
if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then
return
end
return 'make install_jsregexp'
end)(),
dependencies = {
-- `friendly-snippets` contains a variety of premade snippets.
-- See the README about individual language/framework/plugin snippets:
-- https://github.com/rafamadriz/friendly-snippets
{
'rafamadriz/friendly-snippets',
config = function()
require('luasnip.loaders.from_vscode').lazy_load()
end,
},
},
opts = {},
},
'folke/lazydev.nvim',
},
--- @module 'blink.cmp'
--- @type blink.cmp.Config
opts = {
keymap = {
-- No, but seriously. Please read `:help ins-completion`, it is really good!
--
-- All presets have the following mappings:
-- <tab>/<s-tab>: move to right/left of your snippet expansion
-- <c-space>: Open menu or open docs if already open
-- <c-n>/<c-p> or <up>/<down>: Select next/previous item
-- <c-e>: Hide menu
-- <c-k>: Toggle signature help
--
-- See :h blink-cmp-config-keymap for defining your own keymap
-- preset = 'default',
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
-- Удалил все сток бинды и добавил сам что надо
-- https://cmp.saghen.dev/configuration/keymap.html
preset = 'none',
-- Open menu or open docs if already open
['<C-space>'] = { 'show', 'show_documentation', 'hide_documentation' },
-- Hide menu
['<C-e>'] = { 'hide' },
-- Accept the completion
['<C-y>'] = { 'select_and_accept' },
['<C-Tab>'] = { 'select_and_accept' },
-- Select next/previous item
['<Tab>'] = { 'select_next', 'fallback' },
['<S-Tab>'] = { 'select_prev', 'fallback' },
-- Scroll the documentation window [b]ack / [f]orward
['<C-b>'] = { 'scroll_documentation_up', 'fallback' },
['<C-f>'] = { 'scroll_documentation_down', 'fallback' },
-- Think of <c-l> as moving to the right of your snippet expansion.
-- So if you have a snippet that's like:
-- function $name($args)
-- $body
-- end
--
-- <c-l> will move you to the right of each of the expansion locations.
-- <c-h> is similar, except moving you backwards.
['<C-l>'] = { 'snippet_forward', 'fallback' },
['<C-h>'] = { 'snippet_backward', 'fallback' },
-- Toggle signature help
['<C-k>'] = { 'show_signature', 'hide_signature', 'fallback' },
},
appearance = {
-- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- Adjusts spacing to ensure icons are aligned
nerd_font_variant = 'mono',
},
completion = {
-- By default, you may press `<c-space>` to show the documentation.
-- Optionally, set `auto_show = true` to show the documentation after a delay.
documentation = { auto_show = true, auto_show_delay_ms = 500 },
},
sources = {
default = { 'lsp', 'path', 'snippets', 'lazydev' },
providers = {
lazydev = { module = 'lazydev.integrations.blink', score_offset = 100 },
},
},
snippets = { preset = 'luasnip' },
-- Blink.cmp includes an optional, recommended rust fuzzy matcher,
-- which automatically downloads a prebuilt binary when enabled.
--
-- By default, we use the Lua implementation instead, but you may enable
-- the rust implementation via `'prefer_rust_with_warning'`
--
-- See :h blink-cmp-config-fuzzy for more information
fuzzy = { implementation = 'lua' },
-- Shows a signature help window while you type arguments for a function
signature = { enabled = true },
},
},
}

View file

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

View file

@ -0,0 +1,44 @@
-- Neo-tree is a Neovim plugin to browse the file system
-- Не умеет работать со сессиями
-- https://github.com/nvim-neo-tree/neo-tree.nvim
return {
{
'nvim-neo-tree/neo-tree.nvim',
branch = 'v3.x',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
'MunifTanjim/nui.nvim',
{ -- Optional image support in preview window: See `# Preview Mode` for more information
'3rd/image.nvim',
build = false, -- so that it doesn't build the rock
opts = {
backend = 'ueberzug', -- or "kitty"
processor = 'magick_cli', -- or "magick_rock"
},
},
},
lazy = false, -- neo-tree will lazily load itself
keys = {
{ '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true },
},
---@module "neo-tree"
---@type neotree.Config?
opts = {
close_if_last_window = true,
filesystem = {
window = {
mappings = {
['\\'] = 'close_window',
},
},
filtered_items = {
visible = true, -- Show hidden files
-- hide_dotfiles = false,
-- hide_gitignored = true,
},
},
},
},
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

Some files were not shown because too many files have changed in this diff Show more