my nixos/home-manager configuration
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

use niri + noctalia

+967
+362
config/niri/config.kdl
··· 1 + input { 2 + keyboard { 3 + repeat-delay 300 4 + repeat-rate 35 5 + } 6 + 7 + mouse { 8 + accel-speed 1.0 9 + accel-profile "flat" 10 + } 11 + 12 + focus-follows-mouse max-scroll-amount="0%" 13 + } 14 + 15 + output "DP-1" { 16 + mode "1920x1080@144.001" 17 + scale 0.87 18 + transform "90" 19 + position x=-1246 y=-775 20 + hot-corners { 21 + top-left 22 + top-right 23 + bottom-left 24 + } 25 + } 26 + 27 + output "DP-3" { 28 + mode "2560x1440@164.998" 29 + scale 1 30 + transform "normal" 31 + position x=0 y=0 32 + focus-at-startup 33 + hot-corners { 34 + top-right 35 + bottom-right 36 + } 37 + } 38 + 39 + // Settings that influence how windows are positioned and sized. 40 + // Find more information on the wiki: 41 + // https://yalter.github.io/niri/Configuration:-Layout 42 + layout { 43 + // Set gaps around windows in logical pixels. 44 + gaps 4 45 + 46 + // When to center a column when changing focus, options are: 47 + // - "never", default behavior, focusing an off-screen column will keep at the left 48 + // or right edge of the screen. 49 + // - "always", the focused column will always be centered. 50 + // - "on-overflow", focusing a column will center it if it doesn't fit 51 + // together with the previously focused column. 52 + center-focused-column "never" 53 + 54 + // "switch-preset-column-width" 55 + preset-column-widths { 56 + proportion 0.2 57 + proportion 0.4 58 + proportion 0.6 59 + proportion 0.8 60 + proportion 1.0 61 + } 62 + 63 + // "switch-preset-window-height" 64 + preset-window-heights { 65 + proportion 0.5 66 + proportion 1.0 67 + } 68 + 69 + default-column-width { proportion 0.5; } 70 + 71 + focus-ring { 72 + off 73 + } 74 + 75 + border { 76 + off 77 + } 78 + } 79 + 80 + spawn-at-startup "noctalia-shell" 81 + 82 + hotkey-overlay { 83 + skip-at-startup 84 + } 85 + 86 + prefer-no-csd 87 + 88 + // You can change the path where screenshots are saved. 89 + // A ~ at the front will be expanded to the home directory. 90 + // The path is formatted with strftime(3) to give you the screenshot date and time. 91 + screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" 92 + 93 + window-rule { 94 + match app-id=r#"zen-twilight$"# title="^Picture-in-Picture$" 95 + open-floating true 96 + } 97 + 98 + window-rule { 99 + match app-id=r#"^1password$"# 100 + match app-id=r#"^discord$"# 101 + match app-id=r#"^Slack$"# 102 + 103 + block-out-from "screen-capture" 104 + } 105 + 106 + window-rule { 107 + match app-id=r#"zen-twilight$"# title="@.+Mail" 108 + match app-id=r#"zen-twilight$"# title="Console - Clever Cloud" 109 + 110 + block-out-from "screencast" 111 + } 112 + 113 + binds { 114 + // Keys consist of modifiers separated by + signs, followed by an XKB key name 115 + // in the end. To find an XKB name for a particular key, you may use a program 116 + // like wev. 117 + // 118 + // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt 119 + // when running as a winit window. 120 + // 121 + // Most actions that you can bind here can also be invoked programmatically with 122 + // `niri msg action do-something`. 123 + 124 + // Mod-Shift-/, which is usually the same as Mod-?, 125 + // shows a list of important hotkeys. 126 + Mod+Shift+Slash { show-hotkey-overlay; } 127 + 128 + // Suggested binds for running programs: terminal, app launcher, screen locker. 129 + Mod+D hotkey-overlay-title="Run an Application" { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; } 130 + Mod+L hotkey-overlay-title="Lock Screen" { spawn "noctalia-shell" "ipc" "call" "lockScreen" "lock"; } 131 + Mod+T hotkey-overlay-title="Open a Terminal" { spawn "ghostty"; } 132 + 133 + // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc. 134 + // Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`. 135 + // For example, this is a standard bind to toggle the screen reader (orca). 136 + Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; } 137 + 138 + XF86AudioRaiseVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "increase"; } 139 + XF86AudioLowerVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "decrease"; } 140 + XF86AudioMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput"; } 141 + XF86AudioMicMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteInput"; } 142 + 143 + // Example brightness key mappings for brightnessctl. 144 + // You can use regular spawn with multiple arguments too (to avoid going through "sh"), 145 + // but you need to manually put each argument in separate "" quotes. 146 + XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; } 147 + XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; } 148 + 149 + // Open/close the Overview: a zoomed-out view of workspaces and windows. 150 + // You can also move the mouse into the top-left hot corner, 151 + // or do a four-finger swipe up on a touchpad. 152 + Mod+O repeat=false { toggle-overview; } 153 + 154 + Mod+Q repeat=false { close-window; } 155 + 156 + Mod+Left { focus-column-left; } 157 + Mod+Down { focus-window-down; } 158 + Mod+Up { focus-window-up; } 159 + Mod+Right { focus-column-right; } 160 + 161 + Mod+Ctrl+Left { move-column-left; } 162 + Mod+Ctrl+Down { move-window-down; } 163 + Mod+Ctrl+Up { move-window-up; } 164 + Mod+Ctrl+Right { move-column-right; } 165 + 166 + // Alternative commands that move across workspaces when reaching 167 + // the first or last window in a column. 168 + // Mod+J { focus-window-or-workspace-down; } 169 + // Mod+K { focus-window-or-workspace-up; } 170 + // Mod+Ctrl+J { move-window-down-or-to-workspace-down; } 171 + // Mod+Ctrl+K { move-window-up-or-to-workspace-up; } 172 + 173 + Mod+Home { focus-column-first; } 174 + Mod+End { focus-column-last; } 175 + Mod+Ctrl+Home { move-column-to-first; } 176 + Mod+Ctrl+End { move-column-to-last; } 177 + 178 + Mod+Shift+Left { focus-monitor-left; } 179 + Mod+Shift+Down { focus-monitor-down; } 180 + Mod+Shift+Up { focus-monitor-up; } 181 + Mod+Shift+Right { focus-monitor-right; } 182 + 183 + Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } 184 + Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } 185 + Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } 186 + Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } 187 + 188 + // Alternatively, there are commands to move just a single window: 189 + // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } 190 + // ... 191 + 192 + // And you can also move a whole workspace to another monitor: 193 + // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } 194 + // ... 195 + 196 + Mod+Page_Down { focus-workspace-down; } 197 + Mod+Page_Up { focus-workspace-up; } 198 + Mod+U { focus-workspace-down; } 199 + Mod+I { focus-workspace-up; } 200 + Mod+Ctrl+Page_Down { move-column-to-workspace-down; } 201 + Mod+Ctrl+Page_Up { move-column-to-workspace-up; } 202 + Mod+Ctrl+U { move-column-to-workspace-down; } 203 + Mod+Ctrl+I { move-column-to-workspace-up; } 204 + 205 + // Alternatively, there are commands to move just a single window: 206 + // Mod+Ctrl+Page_Down { move-window-to-workspace-down; } 207 + // ... 208 + 209 + Mod+Shift+Page_Down { move-workspace-down; } 210 + Mod+Shift+Page_Up { move-workspace-up; } 211 + Mod+Shift+U { move-workspace-down; } 212 + Mod+Shift+I { move-workspace-up; } 213 + 214 + // You can bind mouse wheel scroll ticks using the following syntax. 215 + // These binds will change direction based on the natural-scroll setting. 216 + // 217 + // To avoid scrolling through workspaces really fast, you can use 218 + // the cooldown-ms property. The bind will be rate-limited to this value. 219 + // You can set a cooldown on any bind, but it's most useful for the wheel. 220 + Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } 221 + Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } 222 + Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } 223 + Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } 224 + 225 + Mod+WheelScrollRight cooldown-ms=150 { focus-column-right; } 226 + Mod+WheelScrollLeft cooldown-ms=150 { focus-column-left; } 227 + Mod+Ctrl+WheelScrollRight cooldown-ms=150 { move-column-right; } 228 + Mod+Ctrl+WheelScrollLeft cooldown-ms=150 { move-column-left; } 229 + 230 + // Usually scrolling up and down with Shift in applications results in 231 + // horizontal scrolling; these binds replicate that. 232 + Mod+Shift+WheelScrollDown cooldown-ms=150 { focus-column-right; } 233 + Mod+Shift+WheelScrollUp cooldown-ms=150 { focus-column-left; } 234 + Mod+Ctrl+Shift+WheelScrollDown cooldown-ms=150 { move-column-right; } 235 + Mod+Ctrl+Shift+WheelScrollUp cooldown-ms=150 { move-column-left; } 236 + 237 + // Similarly, you can bind touchpad scroll "ticks". 238 + // Touchpad scrolling is continuous, so for these binds it is split into 239 + // discrete intervals. 240 + // These binds are also affected by touchpad's natural-scroll, so these 241 + // example binds are "inverted", since we have natural-scroll enabled for 242 + // touchpads by default. 243 + // Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; } 244 + // Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; } 245 + 246 + // You can refer to workspaces by index. However, keep in mind that 247 + // niri is a dynamic workspace system, so these commands are kind of 248 + // "best effort". Trying to refer to a workspace index bigger than 249 + // the current workspace count will instead refer to the bottommost 250 + // (empty) workspace. 251 + // 252 + // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on 253 + // will all refer to the 3rd workspace. 254 + Mod+1 { focus-workspace 1; } 255 + Mod+2 { focus-workspace 2; } 256 + Mod+3 { focus-workspace 3; } 257 + Mod+4 { focus-workspace 4; } 258 + Mod+5 { focus-workspace 5; } 259 + Mod+6 { focus-workspace 6; } 260 + Mod+7 { focus-workspace 7; } 261 + Mod+8 { focus-workspace 8; } 262 + Mod+9 { focus-workspace 9; } 263 + Mod+Ctrl+1 { move-column-to-workspace 1; } 264 + Mod+Ctrl+2 { move-column-to-workspace 2; } 265 + Mod+Ctrl+3 { move-column-to-workspace 3; } 266 + Mod+Ctrl+4 { move-column-to-workspace 4; } 267 + Mod+Ctrl+5 { move-column-to-workspace 5; } 268 + Mod+Ctrl+6 { move-column-to-workspace 6; } 269 + Mod+Ctrl+7 { move-column-to-workspace 7; } 270 + Mod+Ctrl+8 { move-column-to-workspace 8; } 271 + Mod+Ctrl+9 { move-column-to-workspace 9; } 272 + 273 + // Alternatively, there are commands to move just a single window: 274 + // Mod+Ctrl+1 { move-window-to-workspace 1; } 275 + 276 + // Switches focus between the current and the previous workspace. 277 + // Mod+Tab { focus-workspace-previous; } 278 + 279 + // The following binds move the focused window in and out of a column. 280 + // If the window is alone, they will consume it into the nearby column to the side. 281 + // If the window is already in a column, they will expel it out. 282 + Mod+BracketLeft { consume-or-expel-window-left; } 283 + Mod+BracketRight { consume-or-expel-window-right; } 284 + 285 + // Consume one window from the right to the bottom of the focused column. 286 + Mod+Comma { consume-window-into-column; } 287 + // Expel the bottom window from the focused column to the right. 288 + Mod+Period { expel-window-from-column; } 289 + 290 + Mod+R { switch-preset-column-width; } 291 + // Cycling through the presets in reverse order is also possible. 292 + // Mod+R { switch-preset-column-width-back; } 293 + Mod+Shift+R { switch-preset-window-height; } 294 + Mod+Ctrl+R { reset-window-height; } 295 + Mod+F { maximize-column; } 296 + Mod+Shift+F { fullscreen-window; } 297 + 298 + // Expand the focused column to space not taken up by other fully visible columns. 299 + // Makes the column "fill the rest of the space". 300 + Mod+Ctrl+F { expand-column-to-available-width; } 301 + 302 + Mod+C { center-column; } 303 + 304 + // Center all fully visible columns on screen. 305 + Mod+Ctrl+C { center-visible-columns; } 306 + 307 + // Finer width adjustments. 308 + // This command can also: 309 + // * set width in pixels: "1000" 310 + // * adjust width in pixels: "-5" or "+5" 311 + // * set width as a percentage of screen width: "25%" 312 + // * adjust width as a percentage of screen width: "-10%" or "+10%" 313 + // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, 314 + // set-column-width "100" will make the column occupy 200 physical screen pixels. 315 + Mod+Minus { set-column-width "-5%"; } 316 + Mod+Equal { set-column-width "+5%"; } 317 + 318 + // Finer height adjustments when in column with other windows. 319 + Mod+Shift+Minus { set-window-height "-5%"; } 320 + Mod+Shift+Equal { set-window-height "+5%"; } 321 + 322 + // Move the focused window between the floating and the tiling layout. 323 + Mod+V allow-inhibiting=false { toggle-window-floating; } 324 + Mod+Shift+V allow-inhibiting=false { switch-focus-between-floating-and-tiling; } 325 + 326 + // Toggle tabbed column display mode. 327 + // Windows in this column will appear as vertical tabs, 328 + // rather than stacked on top of each other. 329 + Mod+W { toggle-column-tabbed-display; } 330 + 331 + // Actions to switch layouts. 332 + // Note: if you uncomment these, make sure you do NOT have 333 + // a matching layout switch hotkey configured in xkb options above. 334 + // Having both at once on the same hotkey will break the switching, 335 + // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). 336 + // Mod+Space { switch-layout "next"; } 337 + // Mod+Shift+Space { switch-layout "prev"; } 338 + 339 + Print { screenshot; } 340 + Ctrl+Print { screenshot-screen; } 341 + Alt+Print { screenshot-window; } 342 + 343 + // Applications such as remote-desktop clients and software KVM switches may 344 + // request that niri stops processing the keyboard shortcuts defined here 345 + // so they may, for example, forward the key presses as-is to a remote machine. 346 + // It's a good idea to bind an escape hatch to toggle the inhibitor, 347 + // so a buggy application can't hold your session hostage. 348 + // 349 + // The allow-inhibiting=false property can be applied to other binds as well, 350 + // which ensures niri always processes them, even when an inhibitor is active. 351 + Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } 352 + 353 + // The quit action will show a confirmation dialog to avoid accidental exits. 354 + Mod+Shift+E { quit; } 355 + Ctrl+Alt+Delete { quit; } 356 + 357 + // Powers off the monitors. To turn them back on, do any input like 358 + // moving the mouse or pressing any other key. 359 + Mod+Shift+P { power-off-monitors; } 360 + } 361 + 362 + include "./noctalia.kdl"
+423
config/noctalia/settings.json
··· 1 + { 2 + "appLauncher": { 3 + "customLaunchPrefix": "", 4 + "customLaunchPrefixEnabled": false, 5 + "enableClipPreview": true, 6 + "enableClipboardHistory": false, 7 + "pinnedExecs": [ 8 + ], 9 + "position": "center", 10 + "sortByMostUsed": true, 11 + "terminalCommand": "xterm -e", 12 + "useApp2Unit": false, 13 + "viewMode": "list" 14 + }, 15 + "audio": { 16 + "cavaFrameRate": 30, 17 + "externalMixer": "pwvucontrol || pavucontrol", 18 + "mprisBlacklist": [ 19 + ], 20 + "preferredPlayer": "", 21 + "visualizerQuality": "high", 22 + "visualizerType": "linear", 23 + "volumeOverdrive": false, 24 + "volumeStep": 5 25 + }, 26 + "bar": { 27 + "backgroundOpacity": 0, 28 + "capsuleOpacity": 1, 29 + "density": "default", 30 + "exclusive": true, 31 + "floating": false, 32 + "marginHorizontal": 0.25, 33 + "marginVertical": 0.25, 34 + "monitors": [ 35 + "DP-3" 36 + ], 37 + "outerCorners": true, 38 + "position": "top", 39 + "showCapsule": true, 40 + "widgets": { 41 + "center": [ 42 + { 43 + "customFont": "", 44 + "formatHorizontal": "yyyy-MM-dd, HH:mm:ss", 45 + "formatVertical": "HH mm - dd MM", 46 + "id": "Clock", 47 + "useCustomFont": false, 48 + "usePrimaryColor": true 49 + } 50 + ], 51 + "left": [ 52 + { 53 + "colorizeDistroLogo": true, 54 + "customIconPath": "", 55 + "icon": "", 56 + "id": "ControlCenter", 57 + "useDistroLogo": true 58 + }, 59 + { 60 + "diskPath": "/", 61 + "id": "SystemMonitor", 62 + "showCpuTemp": true, 63 + "showCpuUsage": true, 64 + "showDiskUsage": false, 65 + "showMemoryAsPercent": false, 66 + "showMemoryUsage": true, 67 + "showNetworkStats": true, 68 + "usePrimaryColor": false 69 + }, 70 + { 71 + "hideMode": "hidden", 72 + "hideWhenIdle": false, 73 + "id": "MediaMini", 74 + "maxWidth": 145, 75 + "scrollingMode": "hover", 76 + "showAlbumArt": false, 77 + "showArtistFirst": true, 78 + "showProgressRing": true, 79 + "showVisualizer": false, 80 + "useFixedWidth": false, 81 + "visualizerType": "wave" 82 + } 83 + ], 84 + "right": [ 85 + { 86 + "id": "ScreenRecorder" 87 + }, 88 + { 89 + "blacklist": [ 90 + ], 91 + "colorizeIcons": false, 92 + "drawerEnabled": true, 93 + "id": "Tray", 94 + "pinned": [ 95 + "Discord", 96 + "You have unread messages" 97 + ] 98 + }, 99 + { 100 + "hideWhenZero": true, 101 + "id": "NotificationHistory", 102 + "showUnreadBadge": true 103 + }, 104 + { 105 + "displayMode": "onhover", 106 + "id": "Volume" 107 + }, 108 + { 109 + "id": "DarkMode" 110 + } 111 + ] 112 + } 113 + }, 114 + "brightness": { 115 + "brightnessStep": 5, 116 + "enableDdcSupport": false, 117 + "enforceMinimum": true 118 + }, 119 + "calendar": { 120 + "cards": [ 121 + { 122 + "enabled": true, 123 + "id": "banner-card" 124 + }, 125 + { 126 + "enabled": true, 127 + "id": "calendar-card" 128 + }, 129 + { 130 + "enabled": true, 131 + "id": "timer-card" 132 + }, 133 + { 134 + "enabled": false, 135 + "id": "weather-card" 136 + } 137 + ] 138 + }, 139 + "changelog": { 140 + "lastSeenVersion": "" 141 + }, 142 + "colorSchemes": { 143 + "darkMode": true, 144 + "generateTemplatesForPredefined": true, 145 + "manualSunrise": "06:30", 146 + "manualSunset": "18:30", 147 + "matugenSchemeType": "scheme-rainbow", 148 + "predefinedScheme": "Ayu", 149 + "schedulingMode": "off", 150 + "useWallpaperColors": false 151 + }, 152 + "controlCenter": { 153 + "cards": [ 154 + { 155 + "enabled": true, 156 + "id": "profile-card" 157 + }, 158 + { 159 + "enabled": true, 160 + "id": "shortcuts-card" 161 + }, 162 + { 163 + "enabled": true, 164 + "id": "audio-card" 165 + }, 166 + { 167 + "enabled": false, 168 + "id": "weather-card" 169 + }, 170 + { 171 + "enabled": true, 172 + "id": "media-sysmon-card" 173 + } 174 + ], 175 + "position": "close_to_bar_button", 176 + "shortcuts": { 177 + "left": [ 178 + { 179 + "id": "WiFi" 180 + }, 181 + { 182 + "id": "Bluetooth" 183 + }, 184 + { 185 + "id": "ScreenRecorder" 186 + }, 187 + { 188 + "id": "WallpaperSelector" 189 + } 190 + ], 191 + "right": [ 192 + { 193 + "id": "Notifications" 194 + }, 195 + { 196 + "id": "PowerProfile" 197 + }, 198 + { 199 + "id": "KeepAwake" 200 + }, 201 + { 202 + "id": "NightLight" 203 + } 204 + ] 205 + } 206 + }, 207 + "dock": { 208 + "backgroundOpacity": 1, 209 + "colorizeIcons": false, 210 + "displayMode": "auto_hide", 211 + "enabled": false, 212 + "floatingRatio": 1, 213 + "monitors": [ 214 + ], 215 + "onlySameOutput": true, 216 + "pinnedApps": [ 217 + ], 218 + "radiusRatio": 0.1, 219 + "size": 1 220 + }, 221 + "general": { 222 + "allowPanelsOnScreenWithoutBar": true, 223 + "animationDisabled": false, 224 + "animationSpeed": 1, 225 + "avatarImage": "", 226 + "compactLockScreen": false, 227 + "dimmerOpacity": 0.6, 228 + "enableShadows": true, 229 + "forceBlackScreenCorners": false, 230 + "language": "", 231 + "lockOnSuspend": true, 232 + "radiusRatio": 1, 233 + "scaleRatio": 1, 234 + "screenRadiusRatio": 1, 235 + "shadowDirection": "bottom_right", 236 + "shadowOffsetX": 2, 237 + "shadowOffsetY": 3, 238 + "showHibernateOnLockScreen": false, 239 + "showScreenCorners": false 240 + }, 241 + "hooks": { 242 + "darkModeChange": "", 243 + "enabled": false, 244 + "wallpaperChange": "" 245 + }, 246 + "location": { 247 + "analogClockInCalendar": false, 248 + "firstDayOfWeek": -1, 249 + "name": "Tokyo", 250 + "showCalendarEvents": true, 251 + "showCalendarWeather": true, 252 + "showWeekNumberInCalendar": true, 253 + "use12hourFormat": false, 254 + "useFahrenheit": false, 255 + "weatherEnabled": false, 256 + "weatherShowEffects": true 257 + }, 258 + "network": { 259 + "wifiEnabled": false 260 + }, 261 + "nightLight": { 262 + "autoSchedule": true, 263 + "dayTemp": "6500", 264 + "enabled": false, 265 + "forced": false, 266 + "manualSunrise": "06:30", 267 + "manualSunset": "18:30", 268 + "nightTemp": "4000" 269 + }, 270 + "notifications": { 271 + "backgroundOpacity": 1, 272 + "criticalUrgencyDuration": 15, 273 + "enableKeyboardLayoutToast": true, 274 + "enabled": true, 275 + "location": "top_right", 276 + "lowUrgencyDuration": 3, 277 + "monitors": [ 278 + ], 279 + "normalUrgencyDuration": 8, 280 + "overlayLayer": true, 281 + "respectExpireTimeout": false 282 + }, 283 + "osd": { 284 + "autoHideMs": 2000, 285 + "backgroundOpacity": 1, 286 + "enabled": true, 287 + "enabledTypes": [ 288 + 0, 289 + 1, 290 + 2 291 + ], 292 + "location": "top_right", 293 + "monitors": [ 294 + ], 295 + "overlayLayer": true 296 + }, 297 + "screenRecorder": { 298 + "audioCodec": "opus", 299 + "audioSource": "default_output", 300 + "colorRange": "limited", 301 + "directory": "/home/youn/Videos", 302 + "frameRate": 60, 303 + "quality": "very_high", 304 + "showCursor": true, 305 + "videoCodec": "h264", 306 + "videoSource": "portal" 307 + }, 308 + "sessionMenu": { 309 + "countdownDuration": 10000, 310 + "enableCountdown": true, 311 + "position": "center", 312 + "powerOptions": [ 313 + { 314 + "action": "lock", 315 + "countdownEnabled": true, 316 + "enabled": true 317 + }, 318 + { 319 + "action": "suspend", 320 + "countdownEnabled": true, 321 + "enabled": true 322 + }, 323 + { 324 + "action": "hibernate", 325 + "countdownEnabled": true, 326 + "enabled": true 327 + }, 328 + { 329 + "action": "reboot", 330 + "countdownEnabled": true, 331 + "enabled": true 332 + }, 333 + { 334 + "action": "logout", 335 + "countdownEnabled": true, 336 + "enabled": true 337 + }, 338 + { 339 + "action": "shutdown", 340 + "countdownEnabled": true, 341 + "enabled": true 342 + } 343 + ], 344 + "showHeader": true 345 + }, 346 + "settingsVersion": 25, 347 + "systemMonitor": { 348 + "cpuCriticalThreshold": 90, 349 + "cpuPollingInterval": 3000, 350 + "cpuWarningThreshold": 80, 351 + "criticalColor": "", 352 + "diskCriticalThreshold": 90, 353 + "diskPollingInterval": 3000, 354 + "diskWarningThreshold": 80, 355 + "memCriticalThreshold": 90, 356 + "memPollingInterval": 3000, 357 + "memWarningThreshold": 80, 358 + "networkPollingInterval": 3000, 359 + "tempCriticalThreshold": 90, 360 + "tempPollingInterval": 3000, 361 + "tempWarningThreshold": 80, 362 + "useCustomColors": false, 363 + "warningColor": "" 364 + }, 365 + "templates": { 366 + "alacritty": false, 367 + "cava": false, 368 + "code": false, 369 + "discord": false, 370 + "emacs": false, 371 + "enableUserTemplates": false, 372 + "foot": false, 373 + "fuzzel": false, 374 + "ghostty": false, 375 + "gtk": false, 376 + "kcolorscheme": false, 377 + "kitty": false, 378 + "niri": true, 379 + "pywalfox": false, 380 + "qt": false, 381 + "spicetify": false, 382 + "telegram": false, 383 + "vicinae": false, 384 + "walker": false, 385 + "wezterm": false 386 + }, 387 + "ui": { 388 + "fontDefault": "Cantarell", 389 + "fontDefaultScale": 1, 390 + "fontFixed": "Maple Mono NL NF", 391 + "fontFixedScale": 1, 392 + "panelBackgroundOpacity": 1, 393 + "panelsAttachedToBar": true, 394 + "settingsPanelAttachToBar": false, 395 + "tooltipsEnabled": true 396 + }, 397 + "wallpaper": { 398 + "directory": "", 399 + "enableMultiMonitorDirectories": false, 400 + "enabled": false, 401 + "fillColor": "#000000", 402 + "fillMode": "crop", 403 + "hideWallpaperFilenames": false, 404 + "overviewEnabled": false, 405 + "panelPosition": "follow_bar", 406 + "randomEnabled": false, 407 + "randomIntervalSec": 300, 408 + "recursiveSearch": false, 409 + "setWallpaperOnAllMonitors": true, 410 + "transitionDuration": 1500, 411 + "transitionEdgeSmoothness": 0.05, 412 + "transitionType": "random", 413 + "useWallhaven": false, 414 + "wallhavenCategories": "111", 415 + "wallhavenOrder": "desc", 416 + "wallhavenPurity": "100", 417 + "wallhavenQuery": "", 418 + "wallhavenResolutionHeight": "", 419 + "wallhavenResolutionMode": "atleast", 420 + "wallhavenResolutionWidth": "", 421 + "wallhavenSorting": "relevance" 422 + } 423 + }
+115
flake.lock
··· 117 117 "type": "github" 118 118 } 119 119 }, 120 + "niri": { 121 + "inputs": { 122 + "niri-stable": "niri-stable", 123 + "niri-unstable": "niri-unstable", 124 + "nixpkgs": [ 125 + "nixpkgs-unstable" 126 + ], 127 + "nixpkgs-stable": [ 128 + "nixpkgs" 129 + ], 130 + "xwayland-satellite-stable": "xwayland-satellite-stable", 131 + "xwayland-satellite-unstable": "xwayland-satellite-unstable" 132 + }, 133 + "locked": { 134 + "lastModified": 1764796736, 135 + "narHash": "sha256-JMSsWdmmzLtwVV8Z9x2mDjgA5i7DkJYnYQwkJWeHE40=", 136 + "owner": "sodiboo", 137 + "repo": "niri-flake", 138 + "rev": "a482ee6c7423ff90771958cd4bab95e4410b0381", 139 + "type": "github" 140 + }, 141 + "original": { 142 + "owner": "sodiboo", 143 + "repo": "niri-flake", 144 + "type": "github" 145 + } 146 + }, 147 + "niri-stable": { 148 + "flake": false, 149 + "locked": { 150 + "lastModified": 1756556321, 151 + "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=", 152 + "owner": "YaLTeR", 153 + "repo": "niri", 154 + "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294", 155 + "type": "github" 156 + }, 157 + "original": { 158 + "owner": "YaLTeR", 159 + "ref": "v25.08", 160 + "repo": "niri", 161 + "type": "github" 162 + } 163 + }, 164 + "niri-unstable": { 165 + "flake": false, 166 + "locked": { 167 + "lastModified": 1764678181, 168 + "narHash": "sha256-TMs2Px19UAG06zITXAH7efl7X8G7BDyMCy1ilX/8wy0=", 169 + "owner": "YaLTeR", 170 + "repo": "niri", 171 + "rev": "f874b2fce50e0f7ba21e270c86cfa168a1506b82", 172 + "type": "github" 173 + }, 174 + "original": { 175 + "owner": "YaLTeR", 176 + "repo": "niri", 177 + "type": "github" 178 + } 179 + }, 120 180 "nixos-hardware": { 121 181 "locked": { 122 182 "lastModified": 1764080039, ··· 197 257 "type": "github" 198 258 } 199 259 }, 260 + "noctalia": { 261 + "inputs": { 262 + "nixpkgs": [ 263 + "nixpkgs" 264 + ] 265 + }, 266 + "locked": { 267 + "lastModified": 1764789847, 268 + "narHash": "sha256-q/q97hi5bGDTE1Quoo13L35Nc+oqcPGFVd7PPCmLk6E=", 269 + "owner": "noctalia-dev", 270 + "repo": "noctalia-shell", 271 + "rev": "c80a68007b34791bcc25b94df35427d0d04a51cf", 272 + "type": "github" 273 + }, 274 + "original": { 275 + "owner": "noctalia-dev", 276 + "repo": "noctalia-shell", 277 + "type": "github" 278 + } 279 + }, 200 280 "nur": { 201 281 "inputs": { 202 282 "flake-parts": "flake-parts", ··· 244 324 "betterfox": "betterfox", 245 325 "disko": "disko", 246 326 "home-manager": "home-manager", 327 + "niri": "niri", 247 328 "nixos-hardware": "nixos-hardware", 248 329 "nixpkgs": "nixpkgs", 249 330 "nixpkgs-discord": "nixpkgs-discord", 250 331 "nixpkgs-graalvm-ce-21": "nixpkgs-graalvm-ce-21", 251 332 "nixpkgs-unstable": "nixpkgs-unstable", 333 + "noctalia": "noctalia", 252 334 "nur": "nur", 253 335 "opnix": "opnix", 254 336 "zen-browser": "zen-browser" ··· 266 348 "original": { 267 349 "owner": "nix-systems", 268 350 "repo": "default", 351 + "type": "github" 352 + } 353 + }, 354 + "xwayland-satellite-stable": { 355 + "flake": false, 356 + "locked": { 357 + "lastModified": 1755491097, 358 + "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=", 359 + "owner": "Supreeeme", 360 + "repo": "xwayland-satellite", 361 + "rev": "388d291e82ffbc73be18169d39470f340707edaa", 362 + "type": "github" 363 + }, 364 + "original": { 365 + "owner": "Supreeeme", 366 + "ref": "v0.7", 367 + "repo": "xwayland-satellite", 368 + "type": "github" 369 + } 370 + }, 371 + "xwayland-satellite-unstable": { 372 + "flake": false, 373 + "locked": { 374 + "lastModified": 1764721075, 375 + "narHash": "sha256-ChH4nq0cMEEkzkHqKlQt5Z7wxrk8ybcEHuA1YKAYmV0=", 376 + "owner": "Supreeeme", 377 + "repo": "xwayland-satellite", 378 + "rev": "1b918e29b419e89910014054e8b71d54c9235ea5", 379 + "type": "github" 380 + }, 381 + "original": { 382 + "owner": "Supreeeme", 383 + "repo": "xwayland-satellite", 269 384 "type": "github" 270 385 } 271 386 },
+19
flake.nix
··· 27 27 inputs.nixpkgs.follows = "nixpkgs"; 28 28 }; 29 29 30 + noctalia = { 31 + url = "github:noctalia-dev/noctalia-shell"; 32 + inputs.nixpkgs.follows = "nixpkgs"; 33 + }; 34 + 35 + niri = { 36 + url = "github:sodiboo/niri-flake"; 37 + inputs.nixpkgs-stable.follows = "nixpkgs"; 38 + inputs.nixpkgs.follows = "nixpkgs-unstable"; 39 + }; 40 + 30 41 zen-browser = { 31 42 url = "github:0xc000022070/zen-browser-flake"; 32 43 inputs.nixpkgs.follows = "nixpkgs"; ··· 73 84 inherit system; 74 85 inherit config; 75 86 }).discord; 87 + noctalia-shell = inputs.noctalia.packages.${system}.default; 76 88 }) 77 89 nur.overlays.default 90 + inputs.niri.overlays.niri 78 91 ]; 79 92 80 93 pkgs = import nixpkgs { ··· 140 153 }; 141 154 142 155 modules = [ 156 + { 157 + nixpkgs = { 158 + inherit config; 159 + inherit overlays; 160 + }; 161 + } 143 162 ./nixos/modules 144 163 opnix.nixosModules.default 145 164 ]
+6
home-manager/desktop.nix
··· 89 89 "discord.desktop" 90 90 ]; 91 91 }; 92 + 93 + # Window manager 94 + niri = { 95 + enable = false; 96 + package = pkgs.niri-unstable; 97 + }; 92 98 }; 93 99 94 100 services = {
+36
home-manager/modules/niri.nix
··· 1 + { 2 + config, 3 + pkgs, 4 + lib, 5 + user, 6 + ... 7 + }: 8 + 9 + let 10 + cfg = config.programs.niri; 11 + in 12 + { 13 + options.programs.niri = { 14 + enable = lib.mkEnableOption "enable niri"; 15 + package = lib.mkOption { 16 + type = lib.types.package; 17 + default = pkgs.niri; 18 + description = "The Niri window manager package"; 19 + }; 20 + }; 21 + 22 + config = lib.mkIf cfg.enable { 23 + home.packages = [ 24 + pkgs.noctalia-shell 25 + pkgs.xwayland-satellite 26 + ]; 27 + 28 + xdg.configFile."niri/config.kdl" = { 29 + source = config.lib.file.mkOutOfStoreSymlink "${user.configDirectory}/niri/config.kdl"; 30 + }; 31 + 32 + xdg.configFile."noctalia/settings.json" = { 33 + source = config.lib.file.mkOutOfStoreSymlink "${user.configDirectory}/noctalia/settings.json"; 34 + }; 35 + }; 36 + }
+6
nixos/desktop/default.nix
··· 33 33 openssl 34 34 ]; 35 35 }; 36 + 37 + # Enable Niri window manager 38 + niri = { 39 + enable = false; 40 + package = pkgs.niri-unstable; 41 + }; 36 42 }; 37 43 38 44 services = {