Мои приватные (нет) дотсы NixOS
Find a file
2025-08-05 15:45:24 +03:00
modules new public configs 2025-08-04 19:48:34 +03:00
nixos new public configs 2025-08-04 19:48:34 +03:00
nvim fix for qemu 2025-08-05 15:45:24 +03:00
shit new public configs 2025-08-04 19:48:34 +03:00
BINDINGS.md new public configs 2025-08-04 19:48:34 +03:00
flake.lock add nushell and update pkgs2 2025-08-03 14:51:44 +03:00
flake.nix new public configs 2025-08-04 19:48:34 +03:00
NOTES.md fix for qemu 2025-08-05 15:45:24 +03:00
PROBLEMS.md new public configs 2025-08-04 19:48:34 +03:00
README.md fix for qemu 2025-08-05 15:45:24 +03:00
THEMES.md new public configs 2025-08-04 19:48:34 +03:00

Навигация

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

Мини гайд по NixOS

  • Одинаковые вещи могут делаться разными способами. Это норма, ведь nix считается языком програмимрования. По началу меня это бесило, когда читал чужие дотсы
  • Нюансы работы NixOS в этом видео. Мне понравилось
  • Плейлист с английскими видео. Мне больше всего понравились видео под номерами 16, 18, 21, 27 и 28.
  • Пакеты искать тут. Параметры для сток NixOS тут. Параметры для home-manager тут. Для моих конфигов надо обязательно искать в unstable ветке, ибо параметры могут отличаться.
  • Для системной темы тут используется stylix. Все его параметры можно найти тут.

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

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

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

sudo nano /etc/nixos/configuration.nix

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

{
  # 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
  ];
}

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

sudo nixos-rebuild switch

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

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

А это можно донастроить уже в готовой системе

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

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

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

Установить систему одной командой (я написал пример для github, но сейчас мои дотсы есть лишь на forgejo, не знаю как с него использовать такой синтаксис):

sudo nixos-rebuild boot --flake github:Buliway/nixos-private-dots --impure

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

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

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

Клонировать репозиторий и ребилдить систему с указанием пути:

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 через такой синтаксис:
  swapDevices = [ {
    device = "/swapfile";
    size = 64*1024; # В мегабайтах
  } ];
  • Настроить гибренацию в modules/nixos/hibernate.nix
  • Активировать скрипт в shit каталоге, чтоб скопировать нужные конфиги в нужные каталоги. Симлинки не работают
  • Настроить приложения Qt5 Settings, Qt6 Settings и Kvantum. Там надо выбрать свою системную тему. Вроде всё интуитивно понятно будет. Можно попробовать обновить систему, в надежде, что системная тема stylix начнёт работать с приложениями qt. Для этого надо будет закомментить настройки qt в конфиге stylix.
  • Руками настроить thunar, discord, telegram, steam, strawberry и бинды для ksnip
  • Добавить gpg ключи
gpg --import /path/to/your-key.gpg

Если не работает, то смотришь список ключей. Копируешь ID нужного и используешь во второй команде.

gpg --list-keys
gpg --edit-key ID-ключа

В этом режиме надо написать trust и выбрать степень доверия. Например 5 для своих ключей можно задать, это прям самое максимально доверие. Потом Ctrl + D чтоб выйти.

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

Виртуалка требует минимум 100гб памяти. Если хочешь меньше, то удали огромную кучу софта из конфигов, который тебе не нужен на виртуалке.

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

В файле modules/nixos/virtualisation.nix раскомментировать эти строки:

+  services = {
+    openssh.enable = true; # Это ставится на виртуалку, чтоб к ней конект по ssh работал.
+    spice-vdagentd.enable = true; # Clipboard sharing
+    qemuGuest = {
+      enable = true; # Fix resolution
+      package = pkgs.qemu_full;
+    };
+  };

В файле modules/home-manager/wm/bspwm/bspwm.nix изменить эти строки:

   extraConfigEarly = ''
-     xrandr --output DisplayPort-2 --mode 1920x1080 --rate 165
-     xrandr --output HDMI-A-0 --mode 1920x1080 --rate 100 --right-of DisplayPort-2
+     xrandr --output Virtual-1 --mode 1920x1080 --rate 60
   '';

В файле modules/nixos/xserver.nix закомментировать эти строки, даже если amd gpu на хосте:

-    videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU
-    deviceSection = ''Option "TearFree" "True"'';
+    # videoDrivers = [ "amdgpu" ]; # https://nixos.wiki/wiki/AMD_GPU
+    # deviceSection = ''Option "TearFree" "True"'';