feat(nixos-95): extract DE themining into nixosModule

the desktop environment can be included via `self.nixosModules.nixos95`

this will expose two options (for now):
nixos95.enable -> enable the desktop environment
nixos95.wallpaper -> path to the wallpaper to use

currently the setup is closy coupled to this configuration,
which will change in the future, so it can be used with any configuration
This commit is contained in:
gytic 2025-07-25 18:04:18 +02:00
parent 915121f327
commit 6a9de226ef
21 changed files with 185 additions and 118 deletions

View file

@ -23,48 +23,24 @@ in {
# Home Manager integration
inputs.home-manager.nixosModules.home-manager
# nixos95
inputs.self.nixosModules.nixos95
];
################################################################
# Display & Desktop Environment
################################################################
services.xserver = {
nixos95 = {
enable = true;
desktopManager.xfce.enable = true;
xkb = {
layout = "de";
variant = "";
user = username;
};
};
services.xserver.displayManager.lightdm.enable = false;
services.displayManager.sddm = {
enable = true;
package = pkgs.qt6Packages.sddm;
};
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
################################################################
# System Packages (XFCE & Utilities)
################################################################
environment.systemPackages = with pkgs; [
xdg-desktop-portal-gtk
# XFCE Core
xfce.xfwm4
xfce.xfce4-panel
xfce.xfce4-session
xfce.xfce4-settings
xfce.thunar
xfce.mousepad
xfce.xfce4-terminal
xfce.xfce4-appfinder
xfce.xfce4-power-manager
xfce.xfce4-notifyd
xfce.xfce4-whiskermenu-plugin
# Optional Extras
xfce.gigolo

View file

@ -24,9 +24,6 @@ in {
# All Home Manager Modules
../../../../Modules/Applications
# Extended Retro theme
../../../../Modules/Desktops/XFCE-retro
# Desktop applications
./desktop.nix
];

View file

@ -1,79 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
chicago95 = pkgs.callPackage ../../../Ressources/Themes/Chicago95/chicago95.nix {};
dotfilesPath = ./Dotfiles;
resourcesPath = ../../../Ressources;
wallpaperFile = "Wallpaper/NixOS-95-wallpaper.png";
wallpaperPath = "${config.home.homeDirectory}/${wallpaperFile}";
wallpaperOrigin = "${resourcesPath}/Images/Wallpapers/Wallpaper-1.png";
dotfiles = "${dotfilesPath}";
in {
gtk = {
enable = true;
theme = {
name = "Chicago95";
package = chicago95;
};
iconTheme = {
name = "Win95_plus";
package = pkgs.callPackage ../../../Ressources/Themes/Win95_plus/win95_plus.nix {};
};
cursorTheme = {
name = "Chicago95";
package = chicago95;
};
font = {
name = "Sans";
size = 12;
};
};
home.pointerCursor = {
name = "Chicago95";
package = chicago95;
size = 24;
gtk.enable = true;
x11.enable = true;
};
home.packages = with pkgs; [
xfce.xfce4-panel
xfce.xfconf
xfce.xfdesktop
xfce.xfce4-whiskermenu-plugin
xfce.xfce4-docklike-plugin
xorg.xrandr
];
home.file = {
"${wallpaperFile}" = {
source = wallpaperOrigin;
};
};
xdg.configFile = {
"xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml".source = "${dotfiles}/xfce4-desktop.xml";
"xfce4/xfconf/xfce-perchannel-xml/xfce4-sessions.xml".source = "${dotfiles}/xfce4-sessions.xml";
"xfce4/xfconf/xfce-perchannel-xml/xsettings.xml".source = "${dotfiles}/xsettings.xml";
"xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml".source = "${dotfiles}/xfwm4.xml";
"xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml".source = "${dotfiles}/xfce4-keyboard-shortcuts.xml";
# Panel:
"xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml".source = "${dotfiles}/xfce4-panel.xml";
"xfce4/panel/launcher-13/brave.desktop".source = "${dotfiles}/launcher-13/brave.desktop";
"xfce4/panel/launcher-14/signal.desktop".source = "${dotfiles}/launcher-14/signal.desktop";
"xfce4/panel/launcher-15/obsidian.desktop".source = "${dotfiles}/launcher-15/obsidian.desktop";
"xfce4/panel/launcher-16/spotify.desktop".source = "${dotfiles}/launcher-16/spotify.desktop";
};
home.activation.applyXfceTweaks = lib.hm.dag.entryAfter ["writeBoundary"] ''
${pkgs.xfce.xfdesktop}/bin/xfdesktop --reload
'';
}

View file

@ -40,11 +40,15 @@ NixOS-95/
│ └── user-vars.nix
├── Modules/
│ ├── Applications/
│ ├── Desktops/
│ │ └── XFCE-retro/
│ │ ├── default.nix
│ │ └── Dotfiles/
│ └── System/
├── nixos95
│   ├── dotfiles/
│   ├── core.nix
│   ├── default.nix
│   ├── desktop.nix
│   ├── keybinds.nix
│   ├── taskbar.nix
│   └── theme.nix
├── Ressources/
│ ├── Icons/
│ ├── Images/

View file

@ -23,6 +23,9 @@
home-manager,
...
}: {
nixosModules.nixos95 = import ./nixos95;
nixosConfigurations = {
############################################################
# 💻 Default Host

22
nixos95/core.nix Normal file
View file

@ -0,0 +1,22 @@
{ config, lib, pkgs, ... }: let
cfg = config.nixos95;
in lib.mkIf cfg.enable {
services.xserver = {
enable = true;
desktopManager.xfce.enable = true;
xkb = {
layout = "de";
variant = "";
};
};
services.xserver.displayManager.lightdm.enable = false;
services.displayManager.sddm = {
enable = true;
package = pkgs.qt6Packages.sddm;
};
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
}

24
nixos95/default.nix Normal file
View file

@ -0,0 +1,24 @@
{ config, lib, ...}: let
cfg = config.nixos95;
in {
options.nixos95 = {
enable = lib.mkEnableOption "NixOS-95 Desktop environment";
user = lib.mkOption {
description = ''
Username of the home-manager user.
'';
type = lib.types.str;
example = "user";
};
};
imports = [
./core.nix
./desktop.nix
./keybinds.nix
./taskbar.nix
./theme.nix
];
}

35
nixos95/desktop.nix Normal file
View file

@ -0,0 +1,35 @@
{ inputs, config, lib, pkgs, ... }: let
cfg = config.nixos95;
in {
options.nixos95 = {
wallpaper = lib.mkOption {
description = "The wallpaper to use";
type = lib.types.path;
default = "${inputs.self}/Ressources/Images/Wallpapers/Wallpaper-1.png";
};
};
config = lib.mkIf cfg.enable {
home-manager.users.${cfg.user} = {
xdg.configFile = {
"xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml" = let
sed = lib.getExe pkgs.gnused;
desktop = pkgs.runCommand "desktop.xml" { } ''
${sed} -e "s|NIXOS-95_WALLPAPER|${cfg.wallpaper}|g" ${./dotfiles/xfce4-desktop.xml} > $out
'';
in {
force = true;
source = desktop;
};
};
};
};
}

View file

@ -5,13 +5,13 @@
<property name="backdrop" type="empty">
<property name="screen0" type="empty">
<property name="monitor0" type="empty">
<property name="image-path" type="string" value="/home/user/Wallpaper/NixOS-95-wallpaper.png"/>
<property name="image-path" type="string" value="NIXOS-95_WALLPAPER"/>
<property name="image-show" type="bool" value="true"/>
<property name="image-style" type="int" value="5"/>
</property>
<property name="monitoreDP-1" type="empty">
<property name="workspace0" type="empty">
<property name="last-image" type="string" value="/home/user/Wallpaper/NixOS-95-wallpaper.png"/>
<property name="last-image" type="string" value="NIXOS-95_WALLPAPER"/>
<property name="image-style" type="int" value="5"/>
</property>
</property>

20
nixos95/keybinds.nix Normal file
View file

@ -0,0 +1,20 @@
/**
* For now this just hard copies the config file.
* This can be improved by allowing users to define there own keybinds
*/
{ config, lib, ... }: let
cfg = config.nixos95;
in lib.mkIf cfg.enable {
home-manager.users.${cfg.user} = {
xdg.configFile = {
"xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml" = {
force = true;
source = ./dotfiles/xfce4-keyboard-shortcuts.xml;
};
};
};
}

30
nixos95/taskbar.nix Normal file
View file

@ -0,0 +1,30 @@
/**
* For now this just hard copies the config file.
* This can be improved by allowing users to define there own task bar config
*/
{ config, lib, pkgs, ... }: let
cfg = config.nixos95;
in lib.mkIf cfg.enable {
environment.systemPackages = [
pkgs.xfce.xfce4-whiskermenu-plugin
];
home-manager.users.${cfg.user} = {
xdg.configFile = {
"xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml" = {
force = true;
source = ./dotfiles/xfce4-panel.xml;
};
# Panel:
"xfce4/panel/launcher-13/brave.desktop".source = ./dotfiles/launcher-13/brave.desktop;
"xfce4/panel/launcher-14/signal.desktop".source = ./dotfiles/launcher-14/signal.desktop;
"xfce4/panel/launcher-15/obsidian.desktop".source = ./dotfiles/launcher-15/obsidian.desktop;
"xfce4/panel/launcher-16/spotify.desktop".source = ./dotfiles/launcher-16/spotify.desktop;
};
};
}

35
nixos95/theme.nix Normal file
View file

@ -0,0 +1,35 @@
{ inputs, config, lib, pkgs, ... }: let
cfg = config.nixos95;
theme_dir = "${inputs.self}/Ressources/Themes";
baseTheme = {
name = "Chicago95";
package = pkgs.callPackage "${theme_dir}/Chicago95/chicago95.nix" { };
};
iconTheme = {
name = "Win95_plus";
package = pkgs.callPackage "${theme_dir}/Win95_plus/win95_plus.nix" { };
};
in lib.mkIf cfg.enable {
home-manager.users.${cfg.user} = {
gtk = {
enable = true;
theme = baseTheme;
iconTheme = iconTheme;
cursorTheme = baseTheme;
font = {
name = "Sans";
size = 12;
};
};
home.pointerCursor = {
size = 24;
gtk.enable = true;
x11.enable = true;
} // baseTheme;
};
}