Skip to content

Instantly share code, notes, and snippets.

@nat-418
Last active December 1, 2025 23:12
Show Gist options
  • Select an option

  • Save nat-418/1101881371c9a7b419ba5f944a7118b0 to your computer and use it in GitHub Desktop.

Select an option

Save nat-418/1101881371c9a7b419ba5f944a7118b0 to your computer and use it in GitHub Desktop.
A sensible NixOS Xfce configuration

A sensible NixOS Xfce Configuration

NixOS provides good support for the Xfce desktop environment out-of-the-box, but the defaults are minimal. The files in this Gist provide a more complete experience, including a suite of basic software and plugins as well as an optional home-manager configuration for theming.

The key additions to the default Xfce provided by NixOS are:

  • Complete bluetooth / audio support with panel indicators and apps
  • LightDM with theme
  • Extra Xfce apps for calendaring, disk partitioning, etc.
  • Various quality-of-life improving non-essentials
{ config, pkgs, lib, ... }:
{
imports = [
./hardware-configuration.nix
./xfce.nix
];
# the rest of your nixos configuration
}
{ config, pkgs, lib, ... }:
{
imports = [
./xfce-home.nix
];
# the rest of your home-manager configuration
}
{ config, pkgs, lib, ... }:
{
gtk = {
enable = true;
iconTheme = {
name = "elementary-Xfce-dark";
package = pkgs.elementary-xfce-icon-theme;
};
theme = {
name = "zukitre-dark";
package = pkgs.zuki-themes;
};
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;
}
{ pkgs, ... }:
{
environment = {
systemPackages = with pkgs; [
blueman
chromium
deja-dup
drawing
elementary-xfce-icon-theme
evince
firefox
foliate
font-manager
gimp-with-plugins
gnome.file-roller
gnome.gnome-disk-utility
inkscape-with-extensions
libqalculate
libreoffice
orca
pavucontrol
qalculate-gtk
thunderbird
wmctrl
xclip
xcolor
xcolor
xdo
xdotool
xfce.catfish
xfce.gigolo
xfce.orage
xfce.xfburn
xfce.xfce4-appfinder
xfce.xfce4-clipman-plugin
xfce.xfce4-cpugraph-plugin
xfce.xfce4-dict
xfce.xfce4-fsguard-plugin
xfce.xfce4-genmon-plugin
xfce.xfce4-netload-plugin
xfce.xfce4-panel
xfce.xfce4-pulseaudio-plugin
xfce.xfce4-systemload-plugin
xfce.xfce4-weather-plugin
xfce.xfce4-whiskermenu-plugin
xfce.xfce4-xkb-plugin
xfce.xfdashboard
xorg.xev
xsel
xtitle
xwinmosaic
zuki-themes
];
};
hardware = {
bluetooth.enable = true;
};
programs = {
dconf.enable = true;
gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-media-tags-plugin
thunar-volman
];
};
};
security.pam.services.gdm.enableGnomeKeyring = true;
services = {
blueman.enable = true;
gnome.gnome-keyring.enable = true;
pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
};
xserver = {
enable = true;
excludePackages = with pkgs; [
xterm
];
displayManager = {
lightdm = {
enable = true;
greeters.slick = {
enable = true;
theme.name = "Zukitre-dark";
};
};
};
desktopManager.xfce.enable = true;
};
};
sound.enable = true;
}
@qxrein
Copy link

qxrein commented Jul 4, 2025

sound.enable has no longer any effect in recent version of nixos you can remove that

@kenpb
Copy link

kenpb commented Dec 1, 2025

If anyone comes across this and has trouble making the panel config work like @jaythomas points out, the xconf.settings.xfce4-panel is (now?) missing a "panels" = [ 1 ]; to set up the array

@jaythomas
Copy link

Yup @kenpb. I would recommend rather than copying the xfconf settings from me is to launch xfce4-settings-editor and manually copy out the settings into nix. That way you can configure it how you want through the UI then set it in stone once you have it how you want it and avoid a bunch of rebuilds. The settings are nested so my config just shows you how to translate that to flat strings as home-manager expects it.

@kenpb
Copy link

kenpb commented Dec 1, 2025

Hey @jaythomas, indeed, thanks, also, I think it was mentioned above too, typing xfconf-query -c xfce4-panel -lv (or the component you want to copy) on a terminal will give the plain text version you can pretty much copy-paste into the nix file wit minor tweaks.

@jaythomas
Copy link

Good call! I forgot this thread mentioned xfconf-query ...it's been awhile.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment