From 9ee186f340171d11b3edc1164bb67a723aa05b7b Mon Sep 17 00:00:00 2001 From: Sean Kovacs Date: Sat, 13 Dec 2025 13:48:33 -0500 Subject: [PATCH] add noctalia --- flake.lock | 148 +++++++ flake.nix | 24 ++ home/tiling/niri/config/config.kdl | 14 +- home/tiling/niri/config/noctalia.kdl | 28 ++ home/tiling/niri/default.nix | 6 +- home/tiling/niri/qt/qt5ct/qt5ct.conf | 2 +- home/tiling/niri/qt/qt6ct/qt6ct.conf | 2 +- home/tiling/noctalia/default.nix | 463 +++++++++++++++++++++ packages/noctalia-shell-custom/package.nix | 69 +++ packages/overlay.nix | 4 + system/all.nix | 11 +- 11 files changed, 759 insertions(+), 12 deletions(-) create mode 100644 home/tiling/niri/config/noctalia.kdl create mode 100644 home/tiling/noctalia/default.nix create mode 100644 packages/noctalia-shell-custom/package.nix diff --git a/flake.lock b/flake.lock index 0f060cd..a318a28 100644 --- a/flake.lock +++ b/flake.lock @@ -43,6 +43,22 @@ "type": "github" } }, + "catppuccin-palette": { + "locked": { + "lastModified": 1760672867, + "narHash": "sha256-hbBM+5fS39YrDXdQKBLP33D0cu54FQ5hk/7XESTTRXY=", + "owner": "abhinandh-s", + "repo": "catppuccin-nix", + "rev": "b482f6e3ee1ae61c83e52f50653e54bf72900b13", + "type": "github" + }, + "original": { + "owner": "abhinandh-s", + "repo": "catppuccin-nix", + "rev": "b482f6e3ee1ae61c83e52f50653e54bf72900b13", + "type": "github" + } + }, "flake-compat": { "locked": { "lastModified": 1746162366, @@ -167,6 +183,65 @@ "type": "github" } }, + "niri": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1765629179, + "narHash": "sha256-yYQR3ZYXWEh8mAQOhj6ZOZ4VxZrpzhRz14bOXAMPtcQ=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "46e723aa46565b67910187b4b7ad48b615d7f576", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "46e723aa46565b67910187b4b7ad48b615d7f576", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1756556321, + "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v25.08", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1765625997, + "narHash": "sha256-d0/ugnBSrCJwwySMc5skOMbAfEdjWapc+EMFbcsnd5Q=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "d1fc1ab731f7cc59923a16acce9a387782bfeb10", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1764522689, @@ -183,6 +258,22 @@ "type": "github" } }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1765311797, + "narHash": "sha256-mSD5Ob7a+T2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "09eb77e94fa25202af8f3e81ddc7353d9970ac1b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, "nixvim": { "inputs": { "flake-parts": "flake-parts", @@ -207,6 +298,27 @@ "type": "github" } }, + "noctalia": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1765651326, + "narHash": "sha256-HmAbejLwUPCZrdU81KP4+WOkWrgX1n74pi1TCVSOleQ=", + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "rev": "6b2661e1d4d0e223d631be87931029929431de6f", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "rev": "6b2661e1d4d0e223d631be87931029929431de6f", + "type": "github" + } + }, "nur": { "inputs": { "flake-parts": "flake-parts_2", @@ -280,9 +392,12 @@ "inputs": { "apple-silicon": "apple-silicon", "catppuccin": "catppuccin", + "catppuccin-palette": "catppuccin-palette", "home-manager": "home-manager", + "niri": "niri", "nixpkgs": "nixpkgs", "nixvim": "nixvim", + "noctalia": "noctalia", "nur": "nur", "plasma-manager": "plasma-manager" } @@ -316,6 +431,39 @@ "repo": "default", "type": "github" } + }, + "xwayland-satellite-stable": { + "flake": false, + "locked": { + "lastModified": 1755491097, + "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "388d291e82ffbc73be18169d39470f340707edaa", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "ref": "v0.7", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1765343581, + "narHash": "sha256-HtTPbV6z6AJPg2d0bHaJKFrnNha+SEbHvbJafKAQ614=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "f0ad674b7009a6afd80cea59d4fbf975dd68ee95", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 9705a2e..6d9814c 100644 --- a/flake.nix +++ b/flake.nix @@ -9,6 +9,10 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + catppuccin-palette = { + url = "github:abhinandh-s/catppuccin-nix/b482f6e3ee1ae61c83e52f50653e54bf72900b13"; + }; + home-manager = { url = "github:nix-community/home-manager/e1680d594a9281651cbf7d126941a8c8e2396183"; inputs.nixpkgs.follows = "nixpkgs"; @@ -20,6 +24,16 @@ inputs.home-manager.follows = "home-manager"; }; + niri = { + url = "github:sodiboo/niri-flake/46e723aa46565b67910187b4b7ad48b615d7f576"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + noctalia = { + url = "github:noctalia-dev/noctalia-shell/6b2661e1d4d0e223d631be87931029929431de6f"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nur = { url = "github:nix-community/NUR/156e6d0e026c1a7687a74c908ee0ccf0df796f72"; inputs.nixpkgs.follows = "nixpkgs"; @@ -40,8 +54,11 @@ { nixpkgs, catppuccin, + catppuccin-palette, home-manager, plasma-manager, + niri, + noctalia, nur, nixvim, apple-silicon, @@ -62,6 +79,8 @@ modules = [ { nixpkgs.overlays = [ + catppuccin-palette.overlays.default + noctalia.overlays.default nur.overlays.default (import ./packages/overlay.nix) ]; @@ -73,9 +92,12 @@ ./hardware/${hostname}.nix catppuccin.nixosModules.catppuccin home-manager.nixosModules.home-manager + noctalia.nixosModules.default { home-manager.sharedModules = [ plasma-manager.homeModules.plasma-manager + niri.homeModules.niri + noctalia.homeModules.default nixvim.homeModules.nixvim ]; } @@ -101,6 +123,8 @@ catppuccin.homeModules.catppuccin home-manager.homeModules.home-manager plasma-manager.homeModules.plasma-manager + niri.homeModules.default + noctalia.homeModules.noctalia nixvim.homeModules.nixvim ]; }; diff --git a/home/tiling/niri/config/config.kdl b/home/tiling/niri/config/config.kdl index d045ece..340ce5f 100644 --- a/home/tiling/niri/config/config.kdl +++ b/home/tiling/niri/config/config.kdl @@ -1,3 +1,6 @@ +// https://github.com/YaLTeR/niri/issues/2330#issuecomment-3256864777 +//debug { render-drm-device "/dev/dri/card2"; } + input { keyboard { numlock @@ -43,7 +46,7 @@ environment { QT_QPA_PLATFORM "wayland" QT_QPA_PLATFORMTHEME_5 "qt5ct" QT_QPA_PLATFORMTHEME "qt6ct" - DISPLAY null + // DISPLAY null } cursor { @@ -51,7 +54,7 @@ cursor { xcursor-size 24 hide-when-typing - hide-after-inactive-ms 1000 + hide-after-inactive-ms 10000 } // You can configure outputs by their name, which you can find @@ -252,7 +255,7 @@ layout { // See the binds section below for more spawn examples. // This line starts waybar, a commonly used bar for Wayland compositors. -spawn-at-startup "waybar" +// spawn-at-startup "waybar" // run tailscale system tray spawn-at-startup "sudo tailscale set --operator=$USER" @@ -324,7 +327,7 @@ window-rule { // Example: enable rounded corners for all windows. // (This example rule is commented out with a "/-" in front.) window-rule { - geometry-corner-radius 8 + geometry-corner-radius 16 clip-to-geometry true } @@ -359,7 +362,8 @@ binds { // Suggested binds for running programs: terminal, app launcher, screen locker. Mod+T hotkey-overlay-title="Open a Terminal: kitty" { spawn "kitty"; } - Mod+D hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; } + // Mod+D hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; } + Mod+Space hotkey-overlay-title="Run an Application: Noctalia app launcher" { spawn-sh "noctalia-shell ipc call launcher toggle"; } Super+Alt+L hotkey-overlay-title="Lock the Screen: swaylock" { spawn "swaylock"; } // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc. diff --git a/home/tiling/niri/config/noctalia.kdl b/home/tiling/niri/config/noctalia.kdl new file mode 100644 index 0000000..0ae564e --- /dev/null +++ b/home/tiling/niri/config/noctalia.kdl @@ -0,0 +1,28 @@ +layout { + + focus-ring { + active-color "#E6B450" + inactive-color "#0B0E14" + urgent-color "#D95757" + } + + border { + active-color "#E6B450" + inactive-color "#0B0E14" + urgent-color "#D95757" + } + + shadow { + color "#00000070" + } + + tab-indicator { + active-color "#E6B450" + inactive-color "#8e620b" + urgent-color "#D95757" + } + + insert-hint { + color "#E6B45080" + } +} diff --git a/home/tiling/niri/default.nix b/home/tiling/niri/default.nix index 8fa1ee5..e5396c5 100644 --- a/home/tiling/niri/default.nix +++ b/home/tiling/niri/default.nix @@ -19,6 +19,10 @@ in catppuccin-qt5ct ]; + programs.niri = { + # wip: put config in here + }; + home.file = { ".config/niri" = { source = ./config; @@ -37,7 +41,7 @@ in font = "Noto Sans:size=12" terminal = "kitty" icons-enabled = yes - icon-theme = "${config.gtk.iconTheme.name}" + icon-theme = "Colloid-Dark" layer = "overlay" ''; force = true; diff --git a/home/tiling/niri/qt/qt5ct/qt5ct.conf b/home/tiling/niri/qt/qt5ct/qt5ct.conf index 92a501e..89cf609 100644 --- a/home/tiling/niri/qt/qt5ct/qt5ct.conf +++ b/home/tiling/niri/qt/qt5ct/qt5ct.conf @@ -2,7 +2,7 @@ color_scheme_path=/home/sckova/.config/qt5ct/style-colors.conf custom_palette=true icon_theme=Colloid-Dark -standard_dialogs=kde +standard_dialogs=default style=Breeze [Fonts] diff --git a/home/tiling/niri/qt/qt6ct/qt6ct.conf b/home/tiling/niri/qt/qt6ct/qt6ct.conf index 18453fb..673d92f 100644 --- a/home/tiling/niri/qt/qt6ct/qt6ct.conf +++ b/home/tiling/niri/qt/qt6ct/qt6ct.conf @@ -2,7 +2,7 @@ color_scheme_path=/home/sckova/.config/qt6ct/style-colors.conf custom_palette=true icon_theme=Colloid-Dark -standard_dialogs=kde +standard_dialogs=default style=Breeze [Fonts] diff --git a/home/tiling/noctalia/default.nix b/home/tiling/noctalia/default.nix new file mode 100644 index 0000000..c4de022 --- /dev/null +++ b/home/tiling/noctalia/default.nix @@ -0,0 +1,463 @@ +{ + pkgs, + config, + lib, + ... +}: + +let + customPackage = pkgs.noctalia-shell-custom.override { + catppuccinFlavor = config.catppuccin.flavor; + catppuccinAccent = config.catppuccin.accent; + }; +in +{ + programs.noctalia-shell = { + enable = true; + package = customPackage; + settings = { + settingsVersion = 0; + bar = { + position = "top"; + backgroundOpacity = 1; + monitors = [ ]; + density = "comfortable"; + showCapsule = true; + capsuleOpacity = 1; + floating = false; + marginVertical = 0.25; + marginHorizontal = 0.25; + outerCorners = true; + exclusive = true; + widgets = { + left = [ + { + icon = "rocket"; + id = "CustomButton"; + leftClickExec = "noctalia-shell ipc call launcher toggle"; + } + { + id = "Workspace"; + } + { + diskPath = "/"; + id = "SystemMonitor"; + showCpuTemp = false; + showCpuUsage = true; + showDiskUsage = true; + showGpuTemp = false; + showMemoryAsPercent = true; + showMemoryUsage = true; + showNetworkStats = false; + usePrimaryColor = false; + } + { + colorizeIcons = false; + hideMode = "hidden"; + id = "ActiveWindow"; + maxWidth = 375; + scrollingMode = "hover"; + showIcon = true; + useFixedWidth = false; + } + { + id = "MediaMini"; + } + ]; + center = [ + ]; + right = [ + { + id = "ScreenRecorder"; + } + { + id = "Tray"; + } + { + id = "NotificationHistory"; + } + { + id = "Battery"; + } + { + id = "Volume"; + } + { + id = "Brightness"; + } + { + id = "ControlCenter"; + } + { + formatHorizontal = "ddd MMM dd yyyy @ h:mm AP"; + formatVertical = "HH mm - dd MM"; + id = "Clock"; + useCustomFont = false; + usePrimaryColor = false; + } + ]; + }; + }; + general = { + avatarImage = ""; + dimmerOpacity = 0.6; + showScreenCorners = true; + forceBlackScreenCorners = true; + scaleRatio = 1; + radiusRatio = 1; + iRadiusRatio = 1; + boxRadiusRatio = 1; + screenRadiusRatio = 1; + animationSpeed = 1; + animationDisabled = false; + compactLockScreen = false; + lockOnSuspend = true; + showSessionButtonsOnLockScreen = true; + showHibernateOnLockScreen = false; + enableShadows = false; + shadowDirection = "bottom_right"; + shadowOffsetX = 2; + shadowOffsetY = 3; + language = ""; + allowPanelsOnScreenWithoutBar = true; + }; + ui = { + fontDefault = "Noto Sans"; + fontFixed = "NotoSansM Nerd Font Mono"; + fontDefaultScale = 1; + fontFixedScale = 1; + tooltipsEnabled = true; + panelBackgroundOpacity = 1; + panelsAttachedToBar = true; + settingsPanelMode = "attached"; + }; + location = { + name = "Atlanta, US"; + weatherEnabled = true; + weatherShowEffects = true; + useFahrenheit = true; + use12hourFormat = true; + showWeekNumberInCalendar = true; + showCalendarEvents = true; + showCalendarWeather = true; + analogClockInCalendar = false; + firstDayOfWeek = -1; + }; + calendar = { + cards = [ + { + enabled = true; + id = "calendar-header-card"; + } + { + enabled = true; + id = "calendar-month-card"; + } + { + enabled = true; + id = "timer-card"; + } + { + enabled = true; + id = "weather-card"; + } + ]; + }; + screenRecorder = { + directory = ""; + frameRate = 60; + audioCodec = "opus"; + videoCodec = "h264"; + quality = "very_high"; + colorRange = "limited"; + showCursor = true; + audioSource = "default_output"; + videoSource = "portal"; + }; + wallpaper = { + enabled = false; + overviewEnabled = false; + directory = ""; + monitorDirectories = [ ]; + enableMultiMonitorDirectories = false; + recursiveSearch = false; + setWallpaperOnAllMonitors = true; + fillMode = "crop"; + fillColor = "#000000"; + randomEnabled = false; + randomIntervalSec = 300; + transitionDuration = 1500; + transitionType = "random"; + transitionEdgeSmoothness = 0.05; + panelPosition = "follow_bar"; + hideWallpaperFilenames = false; + useWallhaven = false; + wallhavenQuery = ""; + wallhavenSorting = "relevance"; + wallhavenOrder = "desc"; + wallhavenCategories = "111"; + wallhavenPurity = "100"; + wallhavenResolutionMode = "atleast"; + wallhavenResolutionWidth = ""; + wallhavenResolutionHeight = ""; + }; + appLauncher = { + enableClipboardHistory = false; + enableClipPreview = true; + position = "center"; + pinnedExecs = [ ]; + useApp2Unit = false; + sortByMostUsed = true; + terminalCommand = "xterm -e"; + customLaunchPrefixEnabled = false; + customLaunchPrefix = ""; + viewMode = "list"; + showCategories = true; + }; + controlCenter = { + position = "close_to_bar_button"; + shortcuts = { + left = [ + { + id = "WiFi"; + } + { + id = "Bluetooth"; + } + { + id = "ScreenRecorder"; + } + { + id = "WallpaperSelector"; + } + ]; + right = [ + { + id = "Notifications"; + } + { + id = "PowerProfile"; + } + { + id = "KeepAwake"; + } + { + id = "NightLight"; + } + ]; + }; + cards = [ + { + enabled = true; + id = "profile-card"; + } + { + enabled = true; + id = "shortcuts-card"; + } + { + enabled = true; + id = "audio-card"; + } + { + enabled = true; + id = "weather-card"; + } + { + enabled = true; + id = "media-sysmon-card"; + } + ]; + }; + systemMonitor = { + cpuWarningThreshold = 80; + cpuCriticalThreshold = 90; + tempWarningThreshold = 80; + tempCriticalThreshold = 90; + memWarningThreshold = 80; + memCriticalThreshold = 90; + diskWarningThreshold = 80; + diskCriticalThreshold = 90; + cpuPollingInterval = 3000; + tempPollingInterval = 3000; + memPollingInterval = 3000; + diskPollingInterval = 3000; + networkPollingInterval = 3000; + useCustomColors = false; + warningColor = ""; + criticalColor = ""; + }; + dock = { + enabled = false; + displayMode = "auto_hide"; + backgroundOpacity = 1; + floatingRatio = 1; + size = 1; + onlySameOutput = true; + monitors = [ ]; + pinnedApps = [ ]; + colorizeIcons = false; + pinnedStatic = false; + inactiveIndicators = false; + deadOpacity = 0.6; + }; + network = { + wifiEnabled = true; + }; + sessionMenu = { + enableCountdown = true; + countdownDuration = 10000; + position = "center"; + showHeader = true; + powerOptions = [ + { + action = "lock"; + enabled = true; + } + { + action = "suspend"; + enabled = true; + } + { + action = "hibernate"; + enabled = true; + } + { + action = "reboot"; + enabled = true; + } + { + action = "logout"; + enabled = true; + } + { + action = "shutdown"; + enabled = true; + } + ]; + }; + notifications = { + enabled = true; + monitors = [ ]; + location = "top_right"; + overlayLayer = true; + backgroundOpacity = 1; + respectExpireTimeout = false; + lowUrgencyDuration = 3; + normalUrgencyDuration = 8; + criticalUrgencyDuration = 15; + enableKeyboardLayoutToast = true; + sounds = { + enabled = false; + volume = 0.5; + separateSounds = false; + criticalSoundFile = ""; + normalSoundFile = ""; + lowSoundFile = ""; + excludedApps = "discord,firefox,chrome,chromium,edge"; + }; + }; + osd = { + enabled = true; + location = "top_right"; + autoHideMs = 2000; + overlayLayer = true; + backgroundOpacity = 1; + enabledTypes = [ + 0 + 1 + 2 + ]; + monitors = [ ]; + }; + audio = { + volumeStep = 5; + volumeOverdrive = false; + cavaFrameRate = 30; + visualizerType = "linear"; + visualizerQuality = "high"; + mprisBlacklist = [ ]; + preferredPlayer = ""; + externalMixer = "pwvucontrol || pavucontrol"; + }; + brightness = { + brightnessStep = 5; + enforceMinimum = true; + enableDdcSupport = true; + }; + colorSchemes = { + useWallpaperColors = false; + predefinedScheme = "Cat-Custom"; + darkMode = true; + schedulingMode = "on"; + manualSunrise = "06:30"; + manualSunset = "18:30"; + matugenSchemeType = "scheme-fruit-salad"; + generateTemplatesForPredefined = true; + }; + templates = { + gtk = false; + qt = false; + kcolorscheme = false; + alacritty = false; + kitty = false; + ghostty = false; + foot = false; + wezterm = false; + fuzzel = false; + discord = false; + pywalfox = false; + vicinae = false; + walker = false; + code = false; + spicetify = false; + telegram = false; + cava = false; + yazi = false; + emacs = false; + niri = false; + enableUserTemplates = false; + }; + nightLight = { + enabled = true; + forced = false; + autoSchedule = true; + nightTemp = "4000"; + dayTemp = "6500"; + manualSunrise = "06:30"; + manualSunset = "18:30"; + }; + hooks = { + enabled = false; + wallpaperChange = ""; + darkModeChange = ""; + }; + }; + }; + + systemd.user.services.noctalia-shell = { + Unit = { + After = [ "niri.service" ]; + PartOf = [ "niri.service" ]; + Description = "Noctalia Shell - Wayland desktop shell"; + Documentation = "https://docs.noctalia.dev/docs"; + }; + + Service = { + ExecStart = "${customPackage}/bin/noctalia-shell"; + Restart = "on-failure"; + Environment = [ + "LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale" + "TZDIR=${pkgs.tzdata}/share/zoneinfo" + "NOCTALIA_SETTINGS_FALLBACK=%h/.config/noctalia/gui-settings.json" + "QT_QPA_PLATFORM=wayland" + "QT_QPA_PLATFORMTHEME_5=qt5ct" + "QT_QPA_PLATFORMTHEME=qt6ct" + ]; + }; + + Install = { + WantedBy = [ "niri.service" ]; + }; + }; +} diff --git a/packages/noctalia-shell-custom/package.nix b/packages/noctalia-shell-custom/package.nix new file mode 100644 index 0000000..1eb1ba5 --- /dev/null +++ b/packages/noctalia-shell-custom/package.nix @@ -0,0 +1,69 @@ +{ + lib, + pkgs, + noctalia-shell, + catppuccinFlavor ? "mocha", + catppuccinAccent ? "mauve", +}: +let + + mkTheme = colors: { + mPrimary = colors.${catppuccinAccent}; + mOnPrimary = colors.crust; + mSecondary = colors.subtext0; + mOnSecondary = colors.crust; + mTertiary = colors.teal; + mOnTertiary = colors.crust; + mError = colors.red; + mOnError = colors.crust; + mSurface = colors.base; + mOnSurface = colors.text; + mSurfaceVariant = colors.surface0; + mOnSurfaceVariant = colors.lavender; + mOutline = colors.surface2; + mShadow = colors.crust; + mHover = colors.teal; + mOnHover = colors.crust; + }; + + customScheme = { + dark = mkTheme pkgs.catppuccin.${catppuccinFlavor}; + light = mkTheme pkgs.catppuccin.latte; + }; + + # Convert to JSON string for writing to file + customSchemeJson = builtins.toJSON customScheme; +in +noctalia-shell.overrideAttrs (oldAttrs: { + pname = "noctalia-shell-custom"; + nativeBuildInputs = (oldAttrs.nativeBuildInputs or [ ]) ++ [ pkgs.jq ]; + postPatch = (oldAttrs.postPatch or "") + '' + # Create the Cat-Custom color scheme + if [ -d Assets/ColorScheme/Catppuccin ]; then + # Create Cat-Custom directory + mkdir -p Assets/ColorScheme/Cat-Custom + + # Write the custom color scheme + echo '${customSchemeJson}' | ${pkgs.jq}/bin/jq '.' > Assets/ColorScheme/Cat-Custom/Cat-Custom.json + + echo "Created Cat-Custom color scheme with ${catppuccinAccent} accent" + echo " Dark theme: ${catppuccinFlavor}" + echo " Light theme: latte" + else + echo "Warning: ColorScheme directory not found at expected path" + fi + + # Add translations for Cat-Custom to all supported languages + for lang in en fr de es pt zh-CN; do + if [ -f "Assets/Translations/$lang.json" ]; then + ${pkgs.jq}/bin/jq '.["color-scheme"].predefined.schemes["Cat-Custom"] = "Cat-Custom"' \ + "Assets/Translations/$lang.json" > "Assets/Translations/$lang.json.tmp" + mv "Assets/Translations/$lang.json.tmp" "Assets/Translations/$lang.json" + echo "Added Cat-Custom translation to $lang.json" + fi + done + ''; + meta = oldAttrs.meta // { + description = oldAttrs.meta.description + " (with Cat-Custom Catppuccin theme)"; + }; +}) diff --git a/packages/overlay.nix b/packages/overlay.nix index 71bf926..ed31c11 100644 --- a/packages/overlay.nix +++ b/packages/overlay.nix @@ -24,6 +24,10 @@ final: prev: { inherit helium-widevine; }; + noctalia-shell-custom = prev.callPackage (builtins.path { + path = ./noctalia-shell-custom/package.nix; + }) { }; + spotifyd = prev.callPackage (builtins.path { path = ./spotifyd/package.nix; }) { }; widevine-firefox = prev.callPackage (builtins.path { path = ./widevine-firefox/package.nix; }) { }; diff --git a/system/all.nix b/system/all.nix index cd14cf8..3b1c6ee 100755 --- a/system/all.nix +++ b/system/all.nix @@ -30,6 +30,7 @@ ../home/tiling/niri/default.nix ../home/tiling/quickshell/default.nix ../home/tiling/waybar/default.nix + ../home/tiling/noctalia/default.nix ../home/systemd/default.nix ../home/terminal/btop/default.nix ../home/terminal/fish/default.nix @@ -105,10 +106,7 @@ enable = true; }; - programs.niri = { - enable = true; - useNautilus = true; - }; + programs.niri.enable = true; services.gnome.gnome-keyring.enable = true; security.pam.services.niri.enableGnomeKeyring = true; programs.dconf.enable = true; @@ -181,6 +179,11 @@ services.openssh.enable = true; networking.firewall.enable = false; + documentation.man = { + enable = true; + generateCaches = true; + }; + # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions # on your system were taken. It‘s perfectly fine and recommended to leave