Xfce: Difference between revisions

imported>Fedx
Remove legacy option services.xserver.desktopManager.default which caused rebuild-switch with xfce and i3 to break.
Add xfconf and Home Manager usage
 
(6 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[http://www.xfce.org Xfce] is a lightweight desktop environment based on GTK+. It includes a window manager, a file manager, desktop and panel.
[http://www.xfce.org Xfce] is a lightweight desktop environment based on GTK+. It includes a window manager, a file manager, desktop and panel.
This article is an extension of the documentation in the [https://nixos.org/manual/nixos/stable/#sec-xfce NixOS manual].


== Enabling ==
== Enabling ==
Line 16: Line 18:
       xfce.enable = true;
       xfce.enable = true;
     };
     };
    displayManager.defaultSession = "xfce";
   };
   };
  services.displayManager.defaultSession = "xfce";
   ...
   ...
}
}
Line 23: Line 25:
}}
}}
{{Evaluate}}
{{Evaluate}}
=== Excluding xfce applications ===
Xfce does not include as many applications by default as some other desktop environments. Still, those can be excluded as demonstrated in the example below. Place this before the <code>services.xserver</code> snippet from above.
{{file|/etc/nixos/configuration.nix|nix|
<nowiki>
{
  environment.xfce.excludePackages = with pkgs.xfce; [
    mousepad
    parole
  # ristretto
    xfce4-appfinder
  # xfce4-notifyd
    xfce4-screenshooter
  # xfce4-session
  # xfce4-settings
  # xfce4-taskmanager
  # xfce4-terminal
  ];
}
</nowiki>
}}


=== Using as a desktop manager and not a window manager ===
=== Using as a desktop manager and not a window manager ===
Line 35: Line 58:
     enable = true;   
     enable = true;   
     desktopManager = {
     desktopManager = {
      default = "xfce";
       xterm.enable = false;
       xterm.enable = false;
       xfce = {
       xfce = {
Line 45: Line 67:
     windowManager.i3.enable = true;
     windowManager.i3.enable = true;
   };
   };
  services.displayManager.defaultSession = "xfce";
   ...
   ...
}
}
Line 90: Line 113:
       };
       };
     };
     };
    displayManager.defaultSession = "xfce+xmonad";
   };
   };
  services.displayManager.defaultSession = "xfce+xmonad";
   ...
   ...
}
}
Line 156: Line 179:


[https://wiki.haskell.org/Xmonad/Frequently_asked_questions#Problems_with_Java_applications.2C_Applet_java_console Haskell Wiki FAQ: Problems with Java applications]
[https://wiki.haskell.org/Xmonad/Frequently_asked_questions#Problems_with_Java_applications.2C_Applet_java_console Haskell Wiki FAQ: Problems with Java applications]
== Customizing xfce declaratively ==
Xfce adheres to [https://en.wikipedia.org/wiki/Freedesktop.org XDG] desktop configuration, making it easy to declare user home directory configurations via [[Home Manager]]. xfce-specific configurations are stored in an [https://docs.xfce.org/xfce/xfconf/start xfconf database].
=== Defining xfconf value ===
Below assumes you have already enabled Home Manager in your NixOS configuration.
Launching <code>xfce4-settings-editor</code> you can view xfce personalizations already applied to the system. They're displayed in a tree view, but stored in a flat string format. You can query these same values from the command line with <code>xfconf-query</code> to quickly get the full key and value in a friendlier format. For instance:
{{file|||
<nowiki>
$ xfconf-query -c ristretto -lv
/window/navigationbar/position  left
/window/statusbar/show          true
/window/toolbar/show            false
</nowiki>
}}
Can be translated like so:
{{file|/etc/nixos/configuration.nix|nix|
<nowiki>
# Xfce Home Manager customizations
home-manager.users.${PRIMARY-USER} = { config, ... }: ({
  xfconf = {
    enable = true;
    settings = {
      ristretto = {
        "window/navigationbar/position" = "left";
        "window/statusbar/show" = true;
        "window/toolbar/show" = false;
      };
    };
  };
})
</nowiki>
}}
=== Using built-in wallpapers ===
Similarly, if you wish to use a built-in wallpaper declaratively you could follow this same pattern:
{{file|/etc/nixos/configuration.nix|nix|
<nowiki>
# Values based on `xfconf-query -c xfce4-desktop -lv`
home-manager.users.${PRIMARY-USER} = { config, ... }: ({
  xfconf = {
    enable = true;
    settings = {
      xfce4-desktop = {
        "backdrop/screen0/monitor0/workspace0/color-style" = 0;
        "backdrop/screen0/monitor0/workspace0/image-style" = 5;
        "backdrop/screen0/monitor0/workspace0/last-image" = "${pkgs.xfce.xfdesktop}/share/backgrounds/xfce/xfce-cp-dark.svg";
      };
    };
  };
})
</nowiki>
}}
However, the xfce settings seem to persist across system rebuilds which can lead to the wallpaper being set to a nix store that is cleaned up when older system generations are cleaned up. In other words, the wallpaper may be replaced by a blank screen upon reboot seemingly randomly. One workaround for this is to set a static directory path for the images via a symlink and using that within xfconf.
{{file|/etc/nixos/configuration.nix|nix|
<nowiki>
# ".xfce-wallpaper" directory is created below so that xfce's
# settings aren't pointed to a dynamic, moving nix store path
let background-dir = "/home/${PRIMARY-USER}/.xfce4-wallpapers";
  background-image = "${background-dir}/xfce-cp-dark.svg";
in {
  home-manager.users.${PRIMARY-USER} = { config, ... }: ({
    home.file.".xfce4-wallpapers".source = config.lib.file.mkOutOfStoreSymlink "${pkgs.xfce.xfdesktop}/share/backgrounds/xfce";
    xfconf = {
      enable = true;
      settings = {
        xfce4-desktop = {
          "backdrop/screen0/monitor0/workspace0/color-style" = 0;
          "backdrop/screen0/monitor0/workspace0/image-style" = 5;
          "backdrop/screen0/monitor0/workspace0/last-image" = background-image;
        };
      };
    };
  })
</nowiki>
}}


== Troubleshooting ==
== Troubleshooting ==
=== Pulseaudio ===
=== Pulseaudio ===
If you use pulse audio, set <code>nixpkgs.config.pulseaudio = true</code> as shown above. Otherwise, you may
If you use pulse audio, set <code>nixpkgs.config.pulseaudio = true</code> as shown above. Otherwise, you may
experience glitches like being able to mute the sound card but not unmute it.
experience glitches like being able to mute the sound card but not unmute it.


[[Category:Desktop environments]]
[[Category:Desktop environment]]
[[Category:NixOS Manual]]