182 lines
4.6 KiB
Nix
182 lines
4.6 KiB
Nix
{ config, lib, pkgs, inputs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.noctaliaShell;
|
|
in
|
|
{
|
|
imports = [
|
|
inputs.noctalia.homeModules.default
|
|
];
|
|
|
|
options.noctaliaShell = {
|
|
enable = mkEnableOption "Noctalia shell";
|
|
|
|
colorScheme = mkOption {
|
|
type = types.str;
|
|
default = "Noctalia (default)";
|
|
description = ''
|
|
Predefined color scheme to use. Options include:
|
|
"Noctalia (default)", "Monochrome", "Catppuccin Mocha", etc.
|
|
See Noctalia docs for full list.
|
|
'';
|
|
};
|
|
|
|
useWallpaperColors = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Generate colors from wallpaper instead of using predefined scheme";
|
|
};
|
|
|
|
darkMode = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Use dark mode for Noctalia shell";
|
|
};
|
|
|
|
barPosition = mkOption {
|
|
type = types.enum [ "top" "bottom" "left" "right" ];
|
|
default = "top";
|
|
description = "Position of the Noctalia bar";
|
|
};
|
|
|
|
barDensity = mkOption {
|
|
type = types.enum [ "default" "compact" ];
|
|
default = "default";
|
|
description = "Bar density (compact for vertical bars)";
|
|
};
|
|
|
|
enableDock = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable the Noctalia dock";
|
|
};
|
|
|
|
dockPosition = mkOption {
|
|
type = types.enum [ "top" "bottom" "left" "right" ];
|
|
default = "bottom";
|
|
description = "Position of the dock";
|
|
};
|
|
|
|
pinnedApps = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
description = "List of .desktop file names for pinned dock apps";
|
|
};
|
|
|
|
avatarImage = mkOption {
|
|
type = types.str;
|
|
default = "";
|
|
description = "Path to avatar image for user profile";
|
|
};
|
|
|
|
locationName = mkOption {
|
|
type = types.str;
|
|
default = "Denver";
|
|
description = "Location name for weather widget";
|
|
};
|
|
|
|
use12hourFormat = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Use 12-hour time format";
|
|
};
|
|
|
|
useFahrenheit = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Use Fahrenheit for temperature";
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
# Configure Noctalia shell via home-manager module
|
|
programs.noctalia-shell = {
|
|
enable = true;
|
|
|
|
# Don't install the package separately since systemd service handles it
|
|
# But we need it for IPC commands in keybinds
|
|
package = inputs.noctalia.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
|
|
|
settings = {
|
|
colorSchemes = {
|
|
useWallpaperColors = cfg.useWallpaperColors;
|
|
predefinedScheme = cfg.colorScheme;
|
|
darkMode = cfg.darkMode;
|
|
};
|
|
|
|
bar = {
|
|
position = cfg.barPosition;
|
|
density = cfg.barDensity;
|
|
showCapsule = true;
|
|
floating = false;
|
|
widgets = {
|
|
left = [
|
|
{ id = "Launcher"; }
|
|
{ id = "Clock"; }
|
|
{ id = "SystemMonitor"; }
|
|
{ id = "ActiveWindow"; }
|
|
{ id = "MediaMini"; }
|
|
];
|
|
center = [
|
|
{ id = "Workspace"; }
|
|
];
|
|
right = [
|
|
{ id = "Tray"; }
|
|
{ id = "NotificationHistory"; }
|
|
{ id = "Battery"; }
|
|
{ id = "Volume"; }
|
|
{ id = "Brightness"; }
|
|
{ id = "ControlCenter"; }
|
|
];
|
|
};
|
|
};
|
|
|
|
dock = {
|
|
enabled = cfg.enableDock;
|
|
position = cfg.dockPosition;
|
|
displayMode = "auto_hide";
|
|
pinnedApps = cfg.pinnedApps;
|
|
};
|
|
|
|
general = {
|
|
avatarImage = cfg.avatarImage;
|
|
radiusRatio = 1;
|
|
animationSpeed = 1;
|
|
enableShadows = true;
|
|
};
|
|
|
|
location = {
|
|
name = cfg.locationName;
|
|
weatherEnabled = true;
|
|
use12hourFormat = cfg.use12hourFormat;
|
|
useFahrenheit = cfg.useFahrenheit;
|
|
};
|
|
|
|
notifications = {
|
|
enabled = true;
|
|
location = "top_right";
|
|
};
|
|
|
|
appLauncher = {
|
|
position = "center";
|
|
sortByMostUsed = true;
|
|
viewMode = "list";
|
|
};
|
|
};
|
|
};
|
|
|
|
# Disable conflicting services that Noctalia replaces
|
|
services.swayosd.enable = mkForce false;
|
|
services.swaync.enable = mkForce false;
|
|
|
|
# Disable wlsunset - Noctalia has built-in night light
|
|
services.wlsunset.enable = mkForce false;
|
|
|
|
# Disable waybar - Noctalia has its own bar
|
|
waybarConfig.enable = mkForce false;
|
|
programs.waybar.enable = mkForce false;
|
|
};
|
|
}
|