Я ебал рот бездарных блядей, которые не могут сделать нормальную систему. Просто блять не существует нормальной OS на планете. Какого блядского хуя ебаные дауны блять делают симлинк для конфигов home-manager и при этом дают рандомному софту удалить симлинк? Хули тебе блядь такая мешает записывать в симлинк? Какого хуя я должен бороться с блядскими крашами и невозможностью ребилдить систему? Хули толку от твоего блядского даун менеджера, если он нихуя не может сделать блять и один хуй надо руками всё линковать блять? Ебаное блядство делает конфиги и потом не может ребилдить систему, потому что даёт блядскому софту заменить себя рандомной директорией блять
- Ебучий thunar не работает блять, заменяет симлинк на свой конфиг
- Ебучий mime types нихуя не работает блять и тоже заменяется какой-то блядью

## TODO 

Надо сделать декларативную QT тему (ебал их рты). Сейчас у меня есть три каталог в каталоге `shit`. Их я могу скопировать в `~/.config`, нужная переменная окружения в `home.nix` стоит и всё заработает. Но это залупа. Другой человек не сможет это юзать мб. Потому что там в коде написан путь `/home/buliway`. Не всем же быть буливеями. Хотя это изи исправляется, потом сделаю. Но пока что я рот ебал тратить 3 дня на настройку темы бездарных далбаёбов на QT.

Надо сделать Nekoray нормально. Пока что только путь пидараса есть. Запускаешь `sudo ~/Downloads/VPN/nekoray-3.26-2023-12-09-linux-x64.AppImage`. В некобоксе офаешь у тян мода стрик роут. Систем тан. В меню жмёшь перезапустить прогу, она отлипла от терминала, перетащил на 10 воркспейс и сижу хуй сосу, ибо меня сайты в пермак кидают за такую хуйню

## Дотсы

Железо, на котором это работает:
- CPU: i5 10400f
- GPU: AMD RX6600
- RAM: 32gb (2x16) ddr4 3200
- Motherboard: MSI Z590-A PRO
- Два монитора 1920x1080 на 165 и 100 герц

|   Software   |             Name             |
| ------------ | ---------------------------- |
| WM           | bspwm                        |
| Hotkeys      | sxhkd                        |
| Terminal     | Alacritty, Kitty             |
| Multiplexer  | Zellij                       |
| Shell        | oh-my-zsh with many plugins  |
| Shell Prompt | Starship                     |
| Apps/Menus   | Rofi                         |
| Notification | Dunst                        |
| Files        | Thunar, Ranger               |
| Images       | qView, imv                   |
| Media        | mpv                          |
| Browsers     | Librewolf, Firefox, Chromium |
| Social       | Discord, Telegram, Steam     |
| Audio        | PipeWire                     |
| Fonts        | JetBrains Mono Nerd Font     |
| Color Theme  | Gruvbox Dark Medium          |
| Icons        | Gruvbox Plus Dark            |
| DM           | LightDM                      |
| Compositor   | Нет. Мб будет сток picom     |
| Screenshare  | OBS, Screenkey, ksnip        |
| Code Editor  | VSCode, nixvim later         |

Чтоб узнать sha256 для гитхаб репы, пишем в терминал эту команду:
```sh
nix-prefetch-git link
```

Если хочется поменять цвета или шрифты в конфиге какой-то программы, но при ребилде получается конфликт, то дело в Stylix, который управляет системной темой и сам везде ставит шрифты и цвета. Если хочется заменить, не трогая stylix, то надо добавить `lib.mkForce` перед значением. Например так:
```nix
font = lib.mkForce "JetBrainsMono Nerd Font 11";
```

Узнать localhost виртуалки, чтоб конектиться по ssh:
```sh
ip a
```

## Настройка мониторов

На иксах второй монитор может не работать или все мониторы могут сидеть на 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

## Другие README файлы в этих дотсах

- [Копия man page для bspwm с доп инфой](./modules/home-manager/wm/bspwm/bspwm.md)
- [Описание плагинов для mpv](./modules/home-manager/mpv/README.md)

## Мини гайд по NixOS

- Одинаковые вещи могут делаться разными способами. Это норма. По началу меня это бесило, когда читал чужие дотсы
- [Плейлист](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 вариант и устанавливаем систему через визуальный установщик.

Дальше есть два способа. Оба нужны, чтоб заменить имя юзера на своё перед установкой моих дотсов. Для этого надо открыть файл `./nixos/configuration.nix` и заменить переменную `username` на ник своего юзера.

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

Сделать форк этого репозитория. Внести нужные изменения. После установки NixOS временно включить гит и установить систему:
```sh
nix shell -p git
sudo nixos-rebuild boot --flake github:Buliway/nixos-dots --impure
```
Параметр `boot` делает так, что настройки не применяются сразу. После установки надо будет перезапустить пк. Если хочешь проверить как оно заработает без ребута пк, то используй `switch` вместо `boot`.

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

После установки NixOS временно включить гит, клонировать репозиторий, изменить нужный файл, ребилдить систему:
```sh
nix shell -p git
git clone https://github.com/Buliway/nixos-dots
nano ~/nixos-dots/nixos/configuration.nix
# Заменить переменную `username` на ник своего юзера
sudo nixos-rebuild boot --impure --flake ~/nixos-dots
```
Параметр `boot` делает так, что настройки не применяются сразу. После установки надо будет перезапустить пк. Если хочешь проверить как оно заработает без ребута пк, то используй `switch` вместо `boot`.

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

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

- Включить подкачку на 64 гига в `/etc/nixos/hardware-configuration.nix` через такой синтаксис:
```nix
  swapDevices = [ {
    device = "/swapfile";
    size = 64*1024; # В мегабайтах
  } ];
```
- Включить автомаунд бекап ссд и сделать симлинк на него в `~/backups` в файле `./modules/nixos/filesystems.nix` и раскомментировать импорт в `./modules/nixos/bundle.nix`.
- Сделать симлинки на все нужные вещи в `./modules/home-manager/symlinks.nix`. Например браузеры я так бекаплю
- Активировать скрипт в `shit` каталоге, чтоб скопировать нужные конфиги в нужные каталоги. Симлинки не работают
- Раскомментировать нужные мне настройки звука в `./modules/nixos/sound.nix`
- Добавить gpg ключи
```sh
gpg --import /path/to/your-key.gpg
```
Если не работает, то смотришь список ключей. Копируешь ID нужного и используешь во второй команде.
```sh
gpg --list-keys
gpg --edit-key ID-ключа
```
В этом режиме надо написать trust и выбрать степень доверия. Например 5 для своих ключей можно задать, это прям самое максимально доверие. Потом Ctrl + D чтоб выйти.

## Бинды

Клавиша `Super` это клавиша `Win`

| Bspwm                             | Описание                                                                                    | Работает? |
| --------------------------------- | ------------------------------------------------------------------------------------------- | --------- |
| `Super + L`                       | Lock screen                                                                                 |     Да    |
| `Super + Q`                       | Quit. Выключить приложение                                                                  |     Да    |
| `Super + Shift + Q`               | Kill. Если приложение не отвечает, то убить его                                             |     Да    |
| `Super + F`                       | Floating 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 + Tab`       | Как alt+tab, переключение окон. На нужный воркспейс само перекинет                             |хз|
| `Super + Alt + T`   | Timer. Думаю сделать через утилиту timer                                                       |хз|
| `Super + Shift + N` | Notification history. История оповещений. Мб сделать только в баре кнопку? Мб не делать вообще |хз|
| `Super + Backspace` | PowerMenu. Выключение пк                                                                       |нет|

| 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 |     Да    |

Так же есть бинд на зажим дальней боковой кнопки мыши. Если эту кнопку нажимать, то она работает как обычно. Если её зажать и начать двигать мышку, то вместо движения курсора будет плавный скрол. Обычно такое делают на трекболах без колеса мыши, но я люблю этот метод скрола на любом девайсе. Можно скролить с нужной скоростью и точностью куда надо без долгого кручения колеса.


## Иконки

Искать иконки для nerd шрифта можно [тут](https://www.nerdfonts.com/cheat-sheet).

Соберу сюда список nerd иконок, которые могут пригодиться

CPU (мб не юзать, а писать текстом и cpu и gpu) -  

RAM -  

CapsLock - 󰪛 

Клавиатура -   или 󰌌 

Громкость -      

Яркость - 󰃟  󰃞  󰃝 

Календарь -     󰸗 

Выключение пк - ⏻  󰐥   

Приложения -   󰀻    󰵆 

Блютуз -   󰂯  󰂲  󰥰  󰦋  󰏳  󰦢  󰗾  󰗿 

Network - 󰈀    󰒍 

Clipboard -     󱉧   

Оповещения (bell) - 󰀦    󰀧  󰀨  󰅉  󰨱  󰵙    󰂚          

Reload - 󰑓  󱄋 


Wifi
  󰖩  󱚵  󱚽  󱚼  󰖪  󱛄
󰤭  󰤨  󰤥  󰤢  󰤟  󰤯  󰤫  󰤮

Батарейки
        
󰁹  󰂂  󰂁  󰂀  󰁿  󰁾  󰁽  󰁼  󰁻  󰁺  󰂎
󱊣  󱊢  󱊡  󰂎
󰂃  󱉝  󰂑

Батарейки зарядка
󰂅  󰂋  󰂊  󰢞  󰂉  󰢝  󰂈  󰂇  󰂆  󰢜  󰢟
󱊦  󱊥  󱊤  󰢟
󰂄

Батарейки блютуз
󰥈  󰥆  󰥅  󰥄  󰥃  󰥂  󰥁  󰥀  󰤿  󰤾
󰥇  󰥊  󰥉

Температура
󰔄  - Температура по цельсию
        
  


## Темы

У меня в vscode цвета отображаются. Так что я для себя сохраню цвета разных вариантов gruvbox

Цвет это название цвета. Потом идёт название 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     |
