Вопрос или проблема
Какие настройки XFCE можно в настоящее время конфигурировать на NixOS (во время сборки или позже через Home Manager и т.д.)?
В настоящее время я пытаюсь создать базовую конфигурацию для своей установки NixOS 23.05 с рабочим столом и оконным менеджером XFCE. Мой подход состоит в том, чтобы использовать home-manager
в автономном режиме для настройки темы XFCE и т.д. на уровне пользователя, что вдохновлено gist от nat-418.
Моя конфигурация выглядит следующим образом:
#~/.config/home-manager/home.nix
{ config, pkgs, ... }:
{
imports = [
./xfce/xfce-home.nix
];
home.username = USERNAME;
home.homeDirectory = PATH/TO/HOME/DIR;
home.stateVersion = "23.05"; # Пожалуйста, прочитайте комментарий перед изменением.
home.packages = [
# установка тем значков
pkgs.matcha-gtk-theme
pkgs.zuki-themes
pkgs.elementary-xfce-icon-theme
pkgs.xfce.xfce4-icon-theme
];
programs.home-manager.enable = true;
}
#~/.config/home-manager/xfce/xfce-home.nix
{ config, pkgs, lib, ... }:
{
gtk = {
enable = true;
iconTheme = {
name = "xfce4-icon-theme";
package = pkgs.xfce.xfce4-icon-theme;
};
theme = {
name = "matcha-dark-sea";
package = pkgs.matcha-gtk-theme;
};
gtk3.extraConfig = {
Settings=""
gtk-application-prefer-dark-theme=1
'';
};
gtk4.extraConfig = {
Settings=""
gtk-application-prefer-dark-theme=1
'';
};
};
programs.gpg.enable = true;
services.gpg-agent.enable = true;
}
Мой programs.xfconf.enable = true;
уже установлен в моем configuration.nix
и вызовет ошибку, если я установлю его повторно в конфигурации home-manager
.
Тем не менее, изменения не применяются после выполнения home-manager switch
(или любой другой применимой команды). Ошибок нет, и в выводе утверждается, что изменения применены. Но ни выход из системы, ни перезагрузка не приводят к видимым изменениям в (значке) теме, обоях и т.д. (иногда могут возникать сбои, такие как переключение с темной темы на светлую, хотя нигде это не настроено).
Большинство источников утверждают, что средств немного, кроме базовых вещей, таких как установка обоев, команды запуска или общие опции
services.xserver.desktopManager.xfce.enableScreensaver
services.xserver.desktopManager.xfce.enable
services.xserver.desktopManager.xfce.noDesktop
programs.thunar.enable
programs.xfconf.enable
programs.gnupg.agent.pinentryFlavor
sound.mediaKeys.enable
services.xserver.desktopManager.xfce.enableXfwm
#источник: https://search.nixos.org/options?channel=23.05&from=0&size=50&sort=relevance&type=packages&query=xfce
Вопросы:
- Я что-то упустил (например, дополнительные команды для корректного включения
xfconf
также дляhome-manager
?) - Так как
nix
является функциональным языком, я не ожидал бы этого, но: Должен ли я переместить некоторую логику установки пакетов в файлы, отличные отhome-manager
? - Существует ли способ с помощью
home-manager
произвести какие-либо детальные изменения конфигурации XFCE (например, позиция панели задач) после того, как была построена стандартная версия NixOS XFCE? - Легко ли внести изменения конфигурации во время сборки стандартного NixOS XFCE? И если да, то простым способом с минимальным или нулевым количеством дополнительных скриптов/настроек, которые должны быть применены пользователем вручную?
Отвечая на вопрос 1: Я не могу сказать, пропустили ли вы что-то. Ваш скопированный код nix выглядит нормально.
Отвечая на вопрос 2: Только Home-Manager имеет возможность определять пользовательские пакеты и конфигурации в таком детальном объеме.
Например, все в environment.systemPackages
является глобальным, в то время как home-manager.users.<username>.programs
является локальным для пользователя.
Отвечая на вопрос 3: Вы можете конфигурировать XFCE в деталях для каждого пользователя через home-manager, смотрите в nix repl
:
outputs.nixosConfigurations.<hostname>.config.home-manager.users.<username>.xfconf.settings
.
Вы должны указать канал, который преобразуется в конфигурационные файлы/директории и свойства с их значениями, которые преобразуются в XML-структуру конфигураций.
Чтобы перечислить все каналы, выполните xfconf-query -l
.
Чтобы перечислить все свойства для, например, канала xfce4-desktop
, выполните xfconf-query -c xfce4-desktop -l
.
Отсюда пример конфигурации nixos может выглядеть так:
xfconf = {
enable = true;
settings = {
xfce4-desktop = {
"backdrop/screen0/monitorsLVDS-1/workplace0/color-style" = 0;
"backdrop/screen0/monitorsLVDS-1/workplace0/image-style" = 0;
"backdrop/screen0/monitorsLVDS-1/workplace0/last-image" = "";
};
xfce4-keyboard-shortcuts = {
"commands/custom/override" = true;
"commands/custom/<Primary><Alt>Delete" = "xfce4-session-logout";
"commands/custom/<Primary><Alt>t" = "exo-open --launch TerminalEmulator";
#...
"xfwm4/custom/override" = true;
"xfwm4/custom/<Super>Up" = "maximize_window_key";
"xfwm4/custom/<Super>Down" = "hide_window_key";
"xfwm4/custom/<Super>Left" = "move_window_left_key";
"xfwm4/custom/<Super>Right" = "move_window_right_key";
"xfwm4/custom/<Super><Shift>End" = "move_window_next_workspace_key";
"xfwm4/custom/<Super><Shift>Home" = "move_window_prev_workspace_key";
};
xfce4-panel = {
"panels/dark-mode" = true;
};
xsettings = {
"Net/ThemeName" = "Adwaita-dark";
};
};
};
Отвечая на вопрос 4: Этот вопрос неясен. Что вы имеете в виду под “обычной сборкой XFCE”? Не из Home-Manager? Если да, то вы сами это сказали, модуль nixos xfce довольно ограничен в своих возможностях.
С другой стороны, Home-Manager строит конфигурационные XML-файлы здесь.
Ответ или решение
Конфигурация XFCE на NixOS может быть выполнена как на этапе сборки, так и после установки с использованием Home Manager. Давайте рассмотрим советы и рекомендации, которые помогут вам настроить XFCE и решить ваши вопросы.
1. Проверка конфигурации xfconf
Если ваши изменения не применяются после выполнения home-manager switch
, убедитесь, что вы действительно сохраняете настройки в правильном месте. Возможно, вам нужно добавить конфигурацию xfconf
в файл xfce-home.nix
. Например:
xfconf = {
enable = true;
settings = {
xfce4-desktop = {
"desktop-background" = "path/to/your/wallpaper.jpg";
};
xfce4-panel = {
"panels/panel-1/size" = 50;
# Добавьте другие настройки панели, например, положение
};
xfwm4 = {
"general/theme" = "matcha-dark-sea";
};
};
};
Проверьте, включена ли служба xfconf
в вашем configuration.nix
:
programs.xfconf.enable = true;
2. Установка пакетов
Как вы указали, пакеты, установленные в home-manager
, являются локальными для пользователя и не конфликтуют с глобальными настройками NixOS. Убедитесь, что все необходимые пакеты действительно указаны и установлены в блоке home.packages
.
3. Детализированные настройки XFCE
С помощью home-manager
можно выполнить детальную настройку XFCE. Вы можете использовать xfconf-query
для получения доступных каналов и свойств:
xfconf-query -l
xfconf-query -c xfce4-desktop -l
На основе полученной информации, вы можете добавлять настройки в ваш файл xfce-home.nix
, как показано выше.
4. Настройки во время сборки
Если вы хотите произвести настройки XFCE во время сборки NixOS, вы можете воспользоваться следующими параметрами в configuration.nix
:
services.xserver.desktopManager.xfce.enable = true;
services.xserver.desktopManager.xfce.enableScreensaver = true;
services.xserver.desktopManager.xfce.noDesktop = false;
Однако, как упомянуто ранее, возможности модуля XFCE в NixOS ограничены. Для более детальной настройки рекомендуется использовать home-manager
.
Заключение
Использование home-manager
в сочетании с конфигурацией NixOS предоставит вам гибкость и контроль над вашим окружением XFCE. Важно правильно настроить xfconf
и убедиться, что все пакеты установлены как на уровне системы, так и на уровне пользователя. Если у вас возникнут дополнительные вопросы или потребуется помощь в конкретных настройках, не стесняйтесь задавать вопросы.