diff --git a/flake.lock b/flake.lock index 3f12c7c..62db999 100644 --- a/flake.lock +++ b/flake.lock @@ -232,6 +232,50 @@ "type": "github" } }, + "noctalia": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "noctalia-qs": "noctalia-qs" + }, + "locked": { + "lastModified": 1777427472, + "narHash": "sha256-kqcfLdxb+CqTroMErCScvx6YQcZYJcf6X+z5I8kBJK8=", + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "rev": "9f8dd48c8df5ab1f7f87ddf9842627e1e5682186", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "type": "github" + } + }, + "noctalia-qs": { + "inputs": { + "nixpkgs": [ + "noctalia", + "nixpkgs" + ], + "systems": "systems", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1777380063, + "narHash": "sha256-q5mWOEICcZzr+KnjIwDHV9EXiBxOC9cnBpxZbDAViU8=", + "owner": "noctalia-dev", + "repo": "noctalia-qs", + "rev": "8742a7a748c43bf44eb6862a8ebd3591ed71502d", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-qs", + "type": "github" + } + }, "nvf": { "inputs": { "flake-compat": "flake-compat", @@ -241,7 +285,7 @@ "nixpkgs": [ "nixpkgs" ], - "systems": "systems" + "systems": "systems_2" }, "locked": { "lastModified": 1776695587, @@ -264,11 +308,27 @@ "import-tree": "import-tree", "niri-flake": "niri-flake", "nixpkgs": "nixpkgs", + "noctalia": "noctalia", "nvf": "nvf", "zen-browser": "zen-browser" } }, "systems": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_2": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -283,6 +343,28 @@ "type": "github" } }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "noctalia", + "noctalia-qs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775636079, + "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, "xwayland-satellite-stable": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index c74da10..e951c7d 100644 --- a/flake.nix +++ b/flake.nix @@ -9,6 +9,10 @@ url = "github:sodiboo/niri-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; + noctalia = { + url = "github:noctalia-dev/noctalia-shell"; + inputs.nixpkgs.follows = "nixpkgs"; + }; home-manager = { url = "github:nix-community/home-manager"; diff --git a/modules/programs/waybar.nix b/modules/programs/waybar.nix index a7863b7..41982e9 100644 --- a/modules/programs/waybar.nix +++ b/modules/programs/waybar.nix @@ -13,6 +13,12 @@ home-manager.users.${self.user}.imports = [ { + home.activation = { + waybar = '' + ${pkgs.procps}/bin/pkill -SIGUSR2 waybar + ''; + }; + programs.waybar = { enable = true; settings = { diff --git a/modules/sessions/niri/config.kdl b/modules/sessions/niri/config.kdl index eedb03e..eeb9de1 100644 --- a/modules/sessions/niri/config.kdl +++ b/modules/sessions/niri/config.kdl @@ -286,7 +286,8 @@ 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" // Bar. +// spawn-at-startup "waybar" // Bar. +spawn-at-startup "noctalia-shell" // Shell. spawn-at-startup "dunst" // Notification daemon. spawn-sh-at-startup "wlsunset -l 43.2 -L 76.9 -t 5000" // Night light utility. @@ -405,7 +406,7 @@ binds { Mod+Shift+T hotkey-overlay-title=null { spawn-sh "Telegram"; } Mod+Shift+C hotkey-overlay-title=null { spawn "kitty"; } Mod+E hotkey-overlay-title=null { spawn "nautilus"; } - Mod+P hotkey-overlay-title="Run an Application: rofi" { spawn-sh "rofi -show drun"; } + Mod+P hotkey-overlay-title=null { spawn-sh "noctalia-shell ipc call launcher toggle"; } // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc. // Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`. @@ -656,8 +657,8 @@ binds { Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } // The quit action will show a confirmation dialog to avoid accidental exits. - Mod+Shift+E { quit; } Ctrl+Alt+Delete { quit; } + Mod+Shift+E { spawn-sh "noctalia-shell ipc call sessionMenu toggle"; } // Powers off the monitors. To turn them back on, do any input like // moving the mouse or pressing any other key. diff --git a/modules/sessions/niri/niri.nix b/modules/sessions/niri/niri.nix index b463245..1fa39d5 100644 --- a/modules/sessions/niri/niri.nix +++ b/modules/sessions/niri/niri.nix @@ -4,7 +4,8 @@ { imports = [ self.nixosModules.matugen - self.nixosModules.waybar + # self.nixosModules.waybar + self.nixosModules.noctalia ]; nixpkgs.overlays = [ inputs.niri-flake.overlays.niri ]; @@ -47,9 +48,6 @@ mpv nautilus pywal - python314Packages.haishoku - swaybg - waybar wl-clipboard wlsunset xwayland-satellite @@ -60,12 +58,6 @@ pywal = '' ${pkgs.pywal}/bin/wal --cols16 -i ${self.wallpaper} ''; - swaybg = '' - ${pkgs.swaybg}/bin/swaybg -i ${self.wallpaper} & - ''; - waybar = '' - ${pkgs.procps}/bin/pkill -SIGUSR2 waybar - ''; }; programs.rofi = { @@ -112,7 +104,6 @@ # Write custom config file. xdg.configFile."niri/config-nix.kdl".text = /* kdl */ '' - spawn-sh-at-startup "swaybg -i ${self.wallpaper}" // Wallpaper utility. window-rule { geometry-corner-radius ${self.border.main} } diff --git a/modules/sessions/niri/noctalia.nix b/modules/sessions/niri/noctalia.nix new file mode 100644 index 0000000..3f97d37 --- /dev/null +++ b/modules/sessions/niri/noctalia.nix @@ -0,0 +1,705 @@ +{ self, inputs, ... }: +{ + flake.nixosModules.noctalia = { + services.upower.enable = true; + + home-manager.users.${self.user} = { + imports = [ + inputs.noctalia.homeModules.default + ]; + + programs.noctalia-shell = { + enable = true; + settings = { + settingsVersion = 59; + bar = { + barType = "simple"; + position = "left"; + monitors = []; + density = "spacious"; + showOutline = false; + showCapsule = true; + capsuleOpacity = 1; + capsuleColorKey = "none"; + widgetSpacing = 6; + contentPadding = 2; + fontScale = 1; + enableExclusionZoneInset = true; + backgroundOpacity = 0.5; + useSeparateOpacity = true; + marginVertical = 4; + marginHorizontal = 4; + frameThickness = 8; + frameRadius = 12; + outerCorners = true; + hideOnOverview = false; + displayMode = "always_visible"; + autoHideDelay = 500; + autoShowDelay = 150; + showOnWorkspaceSwitch = true; + widgets = { + left = [ + { + colorizeSystemIcon = "none"; + colorizeSystemText = "none"; + customIconPath = ""; + enableColorization = false; + icon = "rocket"; + iconColor = "none"; + id = "Launcher"; + useDistroLogo = false; + } + { + clockColor = "none"; + customFont = ""; + formatHorizontal = "HH:mm ddd, MMM dd"; + formatVertical = "HH mm - dd MM"; + id = "Clock"; + tooltipFormat = "HH:mm ddd, MMM dd"; + useCustomFont = false; + } + { + compactMode = true; + diskPath = "/"; + iconColor = "none"; + id = "SystemMonitor"; + showCpuCores = false; + showCpuFreq = false; + showCpuTemp = true; + showCpuUsage = true; + showDiskAvailable = false; + showDiskUsage = false; + showDiskUsageAsPercent = false; + showGpuTemp = false; + showLoadAverage = false; + showMemoryAsPercent = false; + showMemoryUsage = true; + showNetworkStats = false; + showSwapUsage = false; + textColor = "none"; + useMonospaceFont = true; + usePadding = false; + } + { + colorizeIcons = false; + hideMode = "hidden"; + id = "ActiveWindow"; + maxWidth = 145; + scrollingMode = "hover"; + showIcon = true; + showText = true; + textColor = "none"; + useFixedWidth = false; + } + { + compactMode = false; + hideMode = "hidden"; + hideWhenIdle = false; + id = "MediaMini"; + maxWidth = 145; + panelShowAlbumArt = true; + scrollingMode = "hover"; + showAlbumArt = true; + showArtistFirst = true; + showProgressRing = true; + showVisualizer = false; + textColor = "none"; + useFixedWidth = false; + visualizerType = "linear"; + } + ]; + center = [ + { + characterCount = 2; + colorizeIcons = false; + emptyColor = "secondary"; + enableScrollWheel = true; + focusedColor = "primary"; + followFocusedScreen = false; + fontWeight = "bold"; + groupedBorderOpacity = 1; + hideUnoccupied = false; + iconScale = 0.8; + id = "Workspace"; + labelMode = "index"; + occupiedColor = "secondary"; + pillSize = 0.6; + showApplications = false; + showApplicationsHover = false; + showBadge = true; + showLabelsOnlyWhenOccupied = true; + unfocusedIconsOpacity = 1; + } + ]; + right = [ + { + blacklist = []; + chevronColor = "none"; + colorizeIcons = false; + drawerEnabled = true; + hidePassive = false; + id = "Tray"; + pinned = []; + } + { + hideWhenZero = false; + hideWhenZeroUnread = false; + iconColor = "none"; + id = "NotificationHistory"; + showUnreadBadge = true; + unreadBadgeColor = "primary"; + } + { + deviceNativePath = "__default__"; + displayMode = "graphic-clean"; + hideIfIdle = false; + hideIfNotDetected = true; + id = "Battery"; + showNoctaliaPerformance = false; + showPowerProfiles = false; + } + { + displayMode = "onhover"; + iconColor = "none"; + id = "Volume"; + middleClickCommand = "pwvucontrol || pavucontrol"; + textColor = "none"; + } + { + applyToAllMonitors = false; + displayMode = "onhover"; + iconColor = "none"; + id = "Brightness"; + textColor = "none"; + } + { + colorizeDistroLogo = false; + colorizeSystemIcon = "none"; + colorizeSystemText = "none"; + customIconPath = ""; + enableColorization = false; + icon = "noctalia"; + id = "ControlCenter"; + useDistroLogo = false; + } + ]; + }; + mouseWheelAction = "none"; + reverseScroll = false; + mouseWheelWrap = true; + middleClickAction = "none"; + middleClickFollowMouse = false; + middleClickCommand = ""; + rightClickAction = "controlCenter"; + rightClickFollowMouse = true; + rightClickCommand = ""; + screenOverrides = []; + }; + general = { + avatarImage = "/home/matthew/.face"; + dimmerOpacity = 0.2; + showScreenCorners = false; + forceBlackScreenCorners = false; + scaleRatio = 1; + radiusRatio = 1; + iRadiusRatio = 1.23; + boxRadiusRatio = 1; + screenRadiusRatio = 1; + animationSpeed = 1; + animationDisabled = false; + compactLockScreen = false; + lockScreenAnimations = false; + lockOnSuspend = true; + showSessionButtonsOnLockScreen = true; + showHibernateOnLockScreen = false; + enableLockScreenMediaControls = false; + enableShadows = false; + enableBlurBehind = true; + shadowDirection = "bottom_right"; + shadowOffsetX = 2; + shadowOffsetY = 3; + language = ""; + allowPanelsOnScreenWithoutBar = true; + showChangelogOnStartup = true; + telemetryEnabled = false; + enableLockScreenCountdown = true; + lockScreenCountdownDuration = 10000; + autoStartAuth = false; + allowPasswordWithFprintd = false; + clockStyle = "custom"; + clockFormat = "hh\\nmm"; + passwordChars = false; + lockScreenMonitors = []; + lockScreenBlur = 0; + lockScreenTint = 0; + keybinds = { + keyUp = [ + "Up" + ]; + keyDown = [ + "Down" + ]; + keyLeft = [ + "Left" + ]; + keyRight = [ + "Right" + ]; + keyEnter = [ + "Return" + "Enter" + ]; + keyEscape = [ + "Esc" + ]; + keyRemove = [ + "Del" + ]; + }; + reverseScroll = true; + smoothScrollEnabled = true; + }; + ui = { + fontDefault = "JetBrainsMono Nerd Font"; + fontFixed = "JetBrainsMono Nerd Font"; + fontDefaultScale = 1; + fontFixedScale = 1; + tooltipsEnabled = true; + scrollbarAlwaysVisible = true; + boxBorderEnabled = false; + panelBackgroundOpacity = 0.93; + translucentWidgets = false; + panelsAttachedToBar = true; + settingsPanelMode = "attached"; + settingsPanelSideBarCardStyle = false; + }; + location = { + name = ""; + weatherEnabled = true; + weatherShowEffects = true; + weatherTaliaMascotAlways = false; + useFahrenheit = false; + use12hourFormat = false; + showWeekNumberInCalendar = false; + showCalendarEvents = true; + showCalendarWeather = true; + analogClockInCalendar = false; + firstDayOfWeek = "unknown character to parse: -"; + ", + " = "unknown character to parse: h"; + deWeatherTimezone = false; + hideWeatherCityName = false; + autoLocate = false; + }; + calendar = { + cards = [ + { + enabled = true; + id = "calendar-header-card"; + } + { + enabled = true; + id = "calendar-month-card"; + } + { + enabled = true; + id = "weather-card"; + } + ]; + }; + wallpaper = { + enabled = true; + overviewEnabled = false; + directory = "/home/matthew/Pictures"; + monitorDirectories = []; + enableMultiMonitorDirectories = false; + showHiddenFiles = false; + viewMode = "single"; + setWallpaperOnAllMonitors = true; + linkLightAndDarkWallpapers = true; + fillMode = "crop"; + fillColor = "#000000"; + useSolidColor = false; + solidColor = "#1a1a2e"; + automationEnabled = false; + wallpaperChangeMode = "random"; + randomIntervalSec = 300; + transitionDuration = 1500; + transitionType = [ + "fade" + "disc" + "stripes" + "wipe" + "pixelate" + "honeycomb" + ]; + skipStartupTransition = false; + transitionEdgeSmoothness = 5.0e-2; + panelPosition = "follow_bar"; + hideWallpaperFilenames = false; + useOriginalImages = false; + overviewBlur = 0.4; + overviewTint = 0.6; + useWallhaven = false; + wallhavenQuery = ""; + wallhavenSorting = "relevance"; + wallhavenOrder = "desc"; + wallhavenCategories = "111"; + wallhavenPurity = "100"; + wallhavenRatios = ""; + wallhavenApiKey = ""; + wallhavenResolutionMode = "atleast"; + wallhavenResolutionWidth = ""; + wallhavenResolutionHeight = ""; + sortOrder = "name"; + favorites = []; + }; + appLauncher = { + enableClipboardHistory = false; + autoPasteClipboard = false; + enableClipPreview = true; + clipboardWrapText = true; + enableClipboardSmartIcons = true; + enableClipboardChips = true; + clipboardWatchTextCommand = "wl-paste --type text --watch cliphist store"; + clipboardWatchImageCommand = "wl-paste --type image --watch cliphist store"; + position = "center"; + pinnedApps = []; + sortByMostUsed = true; + terminalCommand = "alacritty -e"; + customLaunchPrefixEnabled = false; + customLaunchPrefix = ""; + viewMode = "list"; + showCategories = true; + iconMode = "tabler"; + showIconBackground = false; + enableSettingsSearch = true; + enableWindowsSearch = true; + enableSessionSearch = true; + ignoreMouseInput = false; + screenshotAnnotationTool = ""; + overviewLayer = false; + density = "default"; + }; + controlCenter = { + position = "close_to_bar_button"; + diskPath = "/"; + shortcuts = { + left = [ + { + id = "Network"; + } + { + id = "Bluetooth"; + } + { + id = "WallpaperSelector"; + } + { + id = "NoctaliaPerformance"; + } + ]; + 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 = false; + id = "brightness-card"; + } + { + enabled = true; + id = "weather-card"; + } + { + enabled = true; + id = "media-sysmon-card"; + } + ]; + }; + systemMonitor = { + cpuWarningThreshold = 80; + cpuCriticalThreshold = 90; + tempWarningThreshold = 80; + tempCriticalThreshold = 90; + gpuWarningThreshold = 80; + gpuCriticalThreshold = 90; + memWarningThreshold = 80; + memCriticalThreshold = 90; + swapWarningThreshold = 80; + swapCriticalThreshold = 90; + diskWarningThreshold = 80; + diskCriticalThreshold = 90; + diskAvailWarningThreshold = 20; + diskAvailCriticalThreshold = 10; + batteryWarningThreshold = 20; + batteryCriticalThreshold = 5; + enableDgpuMonitoring = false; + useCustomColors = false; + warningColor = ""; + criticalColor = ""; + externalMonitor = "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor"; + }; + noctaliaPerformance = { + disableWallpaper = true; + disableDesktopWidgets = true; + }; + dock = { + enabled = false; + position = "bottom"; + displayMode = "auto_hide"; + dockType = "floating"; + backgroundOpacity = 1; + floatingRatio = 1; + size = 1; + onlySameOutput = true; + monitors = []; + pinnedApps = []; + colorizeIcons = false; + showLauncherIcon = false; + launcherPosition = "end"; + launcherUseDistroLogo = false; + launcherIcon = ""; + launcherIconColor = "none"; + pinnedStatic = false; + inactiveIndicators = false; + groupApps = false; + groupContextMenuMode = "extended"; + groupClickAction = "cycle"; + groupIndicatorStyle = "dots"; + deadOpacity = 0.6; + animationSpeed = 1; + sitOnFrame = false; + showDockIndicator = false; + indicatorThickness = 3; + indicatorColor = "primary"; + indicatorOpacity = 0.6; + }; + network = { + bluetoothRssiPollingEnabled = false; + bluetoothRssiPollIntervalMs = 60000; + networkPanelView = "wifi"; + wifiDetailsViewMode = "grid"; + bluetoothDetailsViewMode = "grid"; + bluetoothHideUnnamedDevices = false; + disableDiscoverability = false; + bluetoothAutoConnect = true; + }; + sessionMenu = { + enableCountdown = true; + countdownDuration = 10000; + position = "center"; + showHeader = true; + showKeybinds = true; + largeButtonsStyle = true; + largeButtonsLayout = "single-row"; + powerOptions = [ + { + action = "lock"; + command = ""; + countdownEnabled = true; + enabled = true; + keybind = "1"; + } + { + action = "suspend"; + command = ""; + countdownEnabled = true; + enabled = true; + keybind = "2"; + } + { + action = "hibernate"; + command = ""; + countdownEnabled = true; + enabled = true; + keybind = "3"; + } + { + action = "reboot"; + command = ""; + countdownEnabled = true; + enabled = true; + keybind = "4"; + } + { + action = "logout"; + command = ""; + countdownEnabled = true; + enabled = true; + keybind = "5"; + } + { + action = "shutdown"; + command = ""; + countdownEnabled = true; + enabled = true; + keybind = "6"; + } + { + action = "rebootToUefi"; + command = ""; + countdownEnabled = true; + enabled = true; + keybind = "7"; + } + { + action = "userspaceReboot"; + command = ""; + countdownEnabled = true; + enabled = false; + keybind = ""; + } + ]; + }; + notifications = { + enabled = true; + enableMarkdown = false; + density = "default"; + monitors = []; + location = "top_right"; + overlayLayer = true; + backgroundOpacity = 1; + respectExpireTimeout = false; + lowUrgencyDuration = 3; + normalUrgencyDuration = 8; + criticalUrgencyDuration = 15; + clearDismissed = true; + saveToHistory = { + low = true; + normal = true; + critical = true; + }; + sounds = { + enabled = false; + volume = 0.5; + separateSounds = false; + criticalSoundFile = ""; + normalSoundFile = ""; + lowSoundFile = ""; + excludedApps = "discord,firefox,chrome,chromium,edge"; + }; + enableMediaToast = false; + enableKeyboardLayoutToast = true; + enableBatteryToast = true; + }; + osd = { + enabled = true; + location = "top_right"; + autoHideMs = 2000; + overlayLayer = true; + backgroundOpacity = 1; + enabledTypes = [ + 0 + 1 + 2 + ]; + monitors = []; + }; + audio = { + volumeStep = 5; + volumeOverdrive = false; + spectrumFrameRate = 30; + visualizerType = "linear"; + spectrumMirrored = true; + mprisBlacklist = []; + preferredPlayer = ""; + volumeFeedback = false; + volumeFeedbackSoundFile = ""; + }; + brightness = { + brightnessStep = 5; + enforceMinimum = true; + enableDdcSupport = false; + backlightDeviceMappings = []; + }; + colorSchemes = { + useWallpaperColors = false; + predefinedScheme = "Gruvbox"; + darkMode = true; + schedulingMode = "off"; + manualSunrise = "06:30"; + manualSunset = "18:30"; + generationMethod = "tonal-spot"; + monitorForColors = ""; + syncGsettings = true; + }; + templates = { + activeTemplates = []; + enableUserTheming = false; + }; + nightLight = { + enabled = false; + forced = false; + autoSchedule = true; + nightTemp = "4000"; + dayTemp = "6500"; + manualSunrise = "06:30"; + manualSunset = "18:30"; + }; + hooks = { + enabled = false; + wallpaperChange = ""; + darkModeChange = ""; + screenLock = ""; + screenUnlock = ""; + performanceModeEnabled = ""; + performanceModeDisabled = ""; + startup = ""; + session = ""; + colorGeneration = ""; + }; + plugins = { + autoUpdate = false; + notifyUpdates = true; + }; + idle = { + enabled = false; + screenOffTimeout = 600; + lockTimeout = 660; + suspendTimeout = 1800; + fadeDuration = 5; + screenOffCommand = ""; + lockCommand = ""; + suspendCommand = ""; + resumeScreenOffCommand = ""; + resumeLockCommand = ""; + resumeSuspendCommand = ""; + customCommands = "[]"; + }; + desktopWidgets = { + enabled = false; + overviewEnabled = true; + gridSnap = false; + gridSnapScale = false; + monitorWidgets = []; + }; + }; + }; + }; + }; +}