## Навигация

- [Бинды](#бинды)
- [Другие README файлы в этих дотсах](#другие-readme-файлы-в-этих-дотсах)
- [Проблемы](#проблемы)
- [TODO](#todo)
- [Описание](#описание)
- [Нюансы с JetBrains Toolbox](#нюансы-с-jetbrains-toolbox)
- [Настройки для игр](#настройки-для-игр)
  - [MangeHud](#mangohud)
  - [gamemode](#gamemode)
  - [gamescope](#gamescope)
  - [Параметры запуска Steam](#параметры-запуска-steam)
- [Настройки мониторов](#настройка-мониторов)
- [Системная тема на всех вебсайтах](#системная-тема-на-всех-вебсайтах)
- [Мини гайд по 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 файлы в этих дотсах

- [Копия man page для bspwm с доп инфой](./modules/home-manager/wm/bspwm/bspwm.md)
- [Описание плагинов для mpv](./modules/home-manager/mpv/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`, чтоб после ребута пк применялось. Тогда не крашит и после ребута всё работает.

Примерный список того, что я сделал, после чего ребилд пошёл по пизде
- Сделал `polybar` и `sxhkd` не сервисом, а пакетом через `home.packages` и конфиги через `.text`
- Установил `cage` как сервис для запуска wayland приложений на иксах
- Установил `weston` как пакет для запуска wayland приложений на иксах
- Включил виртуализацию `waydroid`
- Включил `i3`
- Добавил симлинк на пакет `ff2mpv` в home. Чтоб браузер туда обращался
- Добавил параметр для gnupg в виде `pinentryPackage`. Указал qt
- Сделал стили для `rofi`
- Установил `python3`
- Установил `rocm-smi` для отображения gpu в btop (не работает)

Потом я обновил репы в надежде исправить всю хуйню. И один раз оно и правда обновило всё без проблем. Некст ребилды снова стали идти по пизде

Хуйни, на которых всё зависает и падает блять
`starting the following units: accounts-daemon.service`
`restarting the following units: home-manager-buliway.service`

Первый ребилд был нормальный вроде. Потом я ребутнул пк, чтоб проверить работу полибара, а всё пошло по пизде при некст ребутах

#### Потенциальный способ исправить проблему

Есть следующие два параметра:
- `systemd.services.<name>.restartIfChanged`
- `systemd.user.services.<name>.restartIfChanged`

Они указывают надо ли ребутать указанный сервис при ребилде системы. Мб надо туда что-то указать и сделать false

Я сделал это для одного сервиса в `nixos/configuration.nix`. Мне помогло. Но если будут ещё сервисы, ребилд на которых зависает и после него крашится система, то можно пробовать запретить рестарт при ребилде.

## 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 в [этом](https://www.youtube.com/watch?v=7f19R8BWUnU&t=960s) видео. Мне понравилось
- [Плейлист](https://www.youtube.com/playlist?list=PLko9chwSoP-15ZtZxu64k_CuTzXrFpxPE) с английскими видео. Мне больше всего понравились видео под номерами [16](https://youtu.be/a67Sv4Mbxmc), [18](https://youtu.be/b641h63lqy0), [21](https://youtu.be/rEovNpg7J0M), [27](https://youtu.be/ljHkWgBaQWU) и [28](https://youtu.be/JCeYq72Sko0).
- Пакеты искать [тут](https://search.nixos.org/packages). Параметры для сток NixOS [тут](https://search.nixos.org/options). Параметры для home-manager [тут](https://home-manager-options.extranix.com/?query=&release=master). Для моих конфигов надо обязательно искать в unstable ветке, ибо параметры могут отличаться.
- Для системной темы тут используется stylix. Все его параметры можно найти [тут](https://stylix.danth.me/options/nixos.html).

## Процесс установки

Сначала качаем nixos kde или nixos gnome вариант и устанавливаем систему через визуальный установщик. При установке выбираем минимальный вариант, без DE.

Кто-то говорит, что потом достаточно просто забилдить одной командой чужой конфиг, но это не так. Будет ошибка, что нет гита. Если использовать nix-shell для гита, то скажет, что нет экспериментальной функции. Либо писать огромную команду, либо, как советую сделать я, изменить стоковый конфиг никса. Для этого пишем следующее:

```sh
sudo nano /etc/nixos/configuration.nix
```

Я добавил туда `nix.settings.experimental-features = [ "nix-command" "flakes" ];` сразу после настроек `boot`. Ниже, почти в самом конце, в `environment.systemPackages = with pkgs;` я добавил пакеты `wget, git, curl`. В итоге получился такой конфиг (написал лишь его часть):

```nix
{
  # Bootloader.
  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  nix.settings.experimental-features = [ "nix-command" "flakes" ];

  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
  #  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
    wget
    git
    curl
    fastfetch
  ];
}
```

После этого сохраняем и пишем в терминале это:

```sh
sudo nixos-rebuild switch
```

Дальше есть два способа. Перед использованием любого из них я рекомендую сделать форк и внести следующие изменения в конфиг перед установкой (либо можно сделать гит клон и через nano внести изменения для первых трёх пунктов, остальное менять на готовой системе):

- Переменную `username` в `nixos/configuration.nix`.
- `username` и `homeDirectory` в `nixos/home.nix`.
- `userName` и `userEmail` в `modules/home-manager/terminal/git.nix`.

А это можно донастроить уже в готовой системе
- Путь до `home` в `shit/qt5ct/qt5ct.conf` и `shit/qt6ct/qt6ct.conf`.
- Параметры мониторов закомментированы в файле `modules/home-manager/wm/bspwm/bspwm.nix`. Можно указать по желанию. Команда xrandr покажет доступные значения и имена мониторов.
- Если видеокарта от amd, то, чтоб не было тиринга, надо раскомментировать `videoDrivers` в `modules/nixos/xserver.nix`, `boot.initrd.kernelModules` и всю категорию настроек `amdgpu` в `modules/nixos/hardware.nix`.
- Если надо задать симлинки, то для этого есть файл `modules/home-manager/symlinks.nix`. Там сейчас мои симлинки, их лучше удалить. Чтоб файл заработал, надо раскомментировать `./symlinks.nix` в файле `modules/home-manager/bundle.nix`.
- Если надо монтировать другие диски, то для этого есть файл `modules/nixos/filesystems.nix`. Там сейчас мой второй ссд. Чтоб файл заработал, надо раскомментировать `./filesystems.nix` в файле `modules/nixos/bundle.nix`.
- Если нужна гибернация, то её можно настроить в `modules/nixos/hibernate.nix`. Там надо указать uuid и офсет для swap файла. Чтоб файл заработал, надо раскомментировать `./hibernate.nix` в файле `modules/nixos/bundle.nix`.

С гитом есть нюанс. Если захочешь потом создать свои конфиги или добавить новые файлы, на которые надо ссылаться из nix, то надо указывать либо полный путь до файла, либо добавлять файл в гит. Если указывать относительный путь, как сделано в моих `bundle.nix`, то все эти файлы должны находиться в гите, либо каталог дотсов должен быть без гита вовсе. Если в каталоге дотсов инициализирован репозиторий гита, то в относительных путях он не видит файлы из `gitignore` или просто не отслеживаемые гитом файлы.

### Первый способ

Установить систему одной командой (я написал пример для github, но сейчас мои дотсы есть лишь на forgejo, не знаю как с него использовать такой синтаксис):
```sh
sudo nixos-rebuild boot --flake github:Buliway/nixos-private-dots --impure
```

Чтоб использовать с репой forgejo, можно попробовать такой синтаксис `git@git.buliway.ru:Buliway/nixos-private-dots`.

Параметр `boot` делает так, что настройки не применяются сразу. После установки надо будет перезапустить пк. Если хочешь проверить как оно заработает без ребута пк, то используй `switch` вместо `boot`.

### Второй способ

Клонировать репозиторий и ребилдить систему с указанием пути:
```sh
git clone https://git.buliway.ru/buliway/nixos-private-dots
sudo nixos-rebuild boot --impure --flake ~/nixos-private-dots
```
Параметр `boot` делает так, что настройки не применяются сразу. После установки надо будет перезапустить пк. Если хочешь проверить как оно заработает без ребута пк, то используй `switch` вместо `boot`.

## После установки надо

Это заметка для меня. Каждый ставит то, что ему надо

- Включить подкачку на 64 гига в `/etc/nixos/hardware-configuration.nix` через такой синтаксис:
```nix
  swapDevices = [ {
    device = "/swapfile";
    size = 64*1024; # В мегабайтах
  } ];
```
- Настроить гибренацию в `modules/nixos/hibernate.nix`
- Активировать скрипт в `shit` каталоге, чтоб скопировать нужные конфиги в нужные каталоги. Симлинки не работают
- Настроить приложения `Qt5 Settings`, `Qt6 Settings` и `Kvantum`. Там надо выбрать свою системную тему. Вроде всё интуитивно понятно будет. Можно попробовать обновить систему, в надежде, что системная тема `stylix` начнёт работать с приложениями `qt`. Для этого надо будет закомментить настройки `qt` в конфиге `stylix`.
- Руками настроить `thunar`, бинды для `ksnip`, `discord`, `telegram`, `steam` и `strawberry`
- Добавить gpg ключи
```sh
gpg --import /path/to/your-key.gpg
```
Если не работает, то смотришь список ключей. Копируешь ID нужного и используешь во второй команде.
```sh
gpg --list-keys
gpg --edit-key ID-ключа
```
В этом режиме надо написать trust и выбрать степень доверия. Например 5 для своих ключей можно задать, это прям самое максимально доверие. Потом Ctrl + D чтоб выйти.

## Изменения для виртуалок

Это надо, чтоб включить коннект по ssh к виртуалке и сделать с ней общий буфер обмена. Ну и ещё параметры экрана меняю на один 1080p монитор на 60 герц.

В файле `modules/nixos/virtualisation.nix` раскомментировать эти строки:
```diff
+  services = {
+    openssh.enable = true; # Потом удали. Это ставится на виртуалку, чтоб к ней конект по ssh работал.
+    spice-vdagentd.enable = true; # Clipboard sharing
+  };
```
В файле `modules/home-manager/wm/bspwm/bspwm.nix` изменить эти строки:
```diff
   extraConfigEarly = ''
-     xrandr --output DisplayPort-2 --mode 1920x1080 --rate 165
-     xrandr --output HDMI-A-0 --mode 1920x1080 --rate 100 --right-of DisplayPort-2
+     xrandr --output Virtual-1 --mode 1920x1080 --rate 60
   '';

    startupPrograms = [
-      # "spice-vdagent" # Для виртуалки
+      "spice-vdagent" # Для виртуалки
    ];
```


## Иконки

Искать иконки для 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-компоненты.