diff options
| author | Franck Cuny <franck@fcuny.net> | 2025-12-31 11:26:08 -0800 |
|---|---|---|
| committer | Franck Cuny <franck@fcuny.net> | 2025-12-31 11:26:08 -0800 |
| commit | 94655522818b21970badfa1c698759bd9338005c (patch) | |
| tree | fea9b0a13a83af3ef9a2feb58d993f45596d3215 /home | |
| parent | cgroups is included in all nixos (diff) | |
| download | infra-94655522818b21970badfa1c698759bd9338005c.tar.gz | |
a working niri + noctalia environment
Diffstat (limited to 'home')
| -rw-r--r-- | home/profiles/workstation.nix | 46 | ||||
| -rw-r--r-- | home/programs/desktop/niri.nix | 329 | ||||
| -rw-r--r-- | home/programs/desktop/noctalia.nix | 243 |
3 files changed, 618 insertions, 0 deletions
diff --git a/home/profiles/workstation.nix b/home/profiles/workstation.nix new file mode 100644 index 0000000..dbe9c92 --- /dev/null +++ b/home/profiles/workstation.nix @@ -0,0 +1,46 @@ +{ pkgs, ... }: +{ + imports = [ + ../programs/desktop/niri.nix + ../programs/desktop/noctalia.nix + ../programs/media/mpv.nix + ../programs/term/kitty.nix + ]; + + home.packages = with pkgs; [ + arc-icon-theme + nautilus + nordic + nordzy-cursor-theme + xdg-utils + ]; + + xdg.enable = true; + + qt = { + enable = true; + platformTheme.name = "adwaita"; + style.name = "adwaita-dark"; + style.package = pkgs.adwaita-qt; + }; + + gtk = { + enable = true; + font = { + package = pkgs.roboto; + name = "Roboto Medium 11"; + }; + cursorTheme = { + package = pkgs.nordzy-cursor-theme; + name = "Nordzy-cursors"; + }; + iconTheme = { + package = pkgs.arc-icon-theme; + name = "Arc"; + }; + theme = { + package = pkgs.nordic; + name = "Nordic-darker"; + }; + }; +} diff --git a/home/programs/desktop/niri.nix b/home/programs/desktop/niri.nix new file mode 100644 index 0000000..459980d --- /dev/null +++ b/home/programs/desktop/niri.nix @@ -0,0 +1,329 @@ +{ + config, + inputs, + pkgs, + ... +}: +let + xcursor_theme = config.gtk.cursorTheme.name; + noctalia = inputs.noctalia.packages.${pkgs.system}.default; + noctaliaIPC = "${noctalia}/bin/noctalia-shell ipc call"; +in +{ + services.swayidle = { + enable = true; + timeouts = [ + { + timeout = 180; + command = "${pkgs.niri}/bin/niri msg action power-off-monitors"; + } + ]; + }; + + programs.niri.enable = true; + + home.packages = with pkgs; [ + fuzzel + light + pamixer + ]; + + programs.niri.settings = { + input = { + keyboard = { + xkb = { + layout = "us"; + model = "pc105"; + options = "ctrl:nocaps"; + }; + repeat-delay = 300; + repeat-rate = 20; + }; + touchpad = { + tap = true; + dwt = true; + natural-scroll = true; + }; + focus-follows-mouse.enable = true; + focus-follows-mouse.max-scroll-amount = "0%"; + workspace-auto-back-and-forth = true; + }; + + spawn-at-startup = [ + { sh = "${noctalia}/bin/noctalia-init"; } + ]; + + hotkey-overlay.skip-at-startup = true; + + cursor = { + theme = xcursor_theme; + }; + + layout = { + gaps = 16; + center-focused-column = "never"; + preset-column-widths = [ + { proportion = 1.0 / 3.0; } + { proportion = 1.0 / 2.0; } + { proportion = 2.0 / 3.0; } + ]; + default-column-width = { + proportion = 0.5; + }; + + tab-indicator = { + gap = 8; + gaps-between-tabs = 4; + corner-radius = 8; + width = 10; + position = "top"; + }; + + focus-ring = { + width = 4; + + active = { + color = "#7fc8ff"; + }; + + inactive = { + color = "#505050"; + }; + }; + + border = { + enable = false; + }; + + shadow = { + enable = true; + softness = 30; + spread = 5; + offset = { + x = 0; + y = 5; + }; + color = "#0007"; + }; + + struts = { + left = 8; + right = 8; + top = 8; + bottom = 8; + }; + }; + + screenshot-path = "~/.screenshots/%Y-%m-%dT%H.%M.%S.png"; + + window-rules = [ + { + geometry-corner-radius = { + top-left = 12.0; + top-right = 12.0; + bottom-left = 12.0; + bottom-right = 12.0; + }; + clip-to-geometry = true; + } + + { + matches = [ + { + app-id = "mpv$"; + } + ]; + open-floating = true; + } + ]; + + binds = { + "Mod+Shift+Slash".action.show-hotkey-overlay = [ ]; + "Super+Return".action.spawn = [ + "kitty" + ]; + "Mod+D".action.spawn-sh = "${noctaliaIPC} launcher toggle"; + "Super+Alt+L".action.spawn-sh = "${noctaliaIPC} lockScreen lock"; + "XF86AudioRaiseVolume" = { + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.1+" + ]; + allow-when-locked = true; + }; + "XF86AudioLowerVolume" = { + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.1-" + ]; + allow-when-locked = true; + }; + "XF86AudioMute" = { + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SINK@" + "toggle" + ]; + allow-when-locked = true; + }; + "XF86AudioMicMute" = { + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SOURCE@" + "toggle" + ]; + allow-when-locked = true; + }; + + "Mod+Tab".action.toggle-overview = [ ]; + + "Mod+Q".action.close-window = [ ]; + + "Mod+Left".action.focus-column-left = [ ]; + "Mod+Down".action.focus-window-or-workspace-down = [ ]; + "Mod+Up".action.focus-window-or-workspace-up = [ ]; + "Mod+Right".action.focus-column-right = [ ]; + "Mod+H".action.focus-column-left = [ ]; + "Mod+J".action.focus-window-down = [ ]; + "Mod+K".action.focus-window-up = [ ]; + "Mod+L".action.focus-column-right = [ ]; + + "Mod+Ctrl+Left".action.move-column-left = [ ]; + "Mod+Ctrl+Down".action.move-window-down = [ ]; + "Mod+Ctrl+Up".action.move-window-up = [ ]; + "Mod+Ctrl+Right".action.move-column-right = [ ]; + "Mod+Ctrl+H".action.move-column-left = [ ]; + "Mod+Ctrl+J".action.move-window-down = [ ]; + "Mod+Ctrl+K".action.move-window-up = [ ]; + "Mod+Ctrl+L".action.move-column-right = [ ]; + + "Mod+Home".action.focus-column-first = [ ]; + "Mod+End".action.focus-column-last = [ ]; + "Mod+Ctrl+Home".action.move-column-to-first = [ ]; + "Mod+Ctrl+End".action.move-column-to-last = [ ]; + + "Mod+Shift+Left".action.focus-monitor-left = [ ]; + "Mod+Shift+Down".action.focus-monitor-down = [ ]; + "Mod+Shift+Up".action.focus-monitor-up = [ ]; + "Mod+Shift+Right".action.focus-monitor-right = [ ]; + "Mod+Shift+H".action.focus-monitor-left = [ ]; + "Mod+Shift+J".action.focus-monitor-down = [ ]; + "Mod+Shift+K".action.focus-monitor-up = [ ]; + "Mod+Shift+L".action.focus-monitor-right = [ ]; + + "Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = [ ]; + "Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = [ ]; + "Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = [ ]; + "Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = [ ]; + "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = [ ]; + "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = [ ]; + "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = [ ]; + "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = [ ]; + + "Mod+Page_Down".action.focus-workspace-down = [ ]; + "Mod+Page_Up".action.focus-workspace-up = [ ]; + "Mod+U".action.focus-workspace-down = [ ]; + "Mod+I".action.focus-workspace-up = [ ]; + "Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = [ ]; + "Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = [ ]; + "Mod+Ctrl+U".action.move-column-to-workspace-down = [ ]; + "Mod+Ctrl+I".action.move-column-to-workspace-up = [ ]; + + "Mod+Shift+Page_Down".action.move-workspace-down = [ ]; + "Mod+Shift+Page_Up".action.move-workspace-up = [ ]; + "Mod+Shift+U".action.move-workspace-down = [ ]; + "Mod+Shift+I".action.move-workspace-up = [ ]; + "Mod+Space".action.swap-window-left = [ ]; + "Mod+Shift+Space".action.swap-window-right = [ ]; + + "Mod+WheelScrollDown" = { + action.focus-workspace-down = [ ]; + cooldown-ms = 150; + }; + "Mod+WheelScrollUp" = { + action.focus-workspace-up = [ ]; + cooldown-ms = 150; + }; + "Mod+Ctrl+WheelScrollDown" = { + action.move-column-to-workspace-down = [ ]; + cooldown-ms = 150; + }; + + "Mod+Ctrl+WheelScrollUp" = { + action.move-column-to-workspace-up = [ ]; + cooldown-ms = 150; + }; + + MouseForward.action.toggle-overview = [ ]; + + "Mod+WheelScrollRight".action.focus-column-right = [ ]; + "Mod+WheelScrollLeft".action.focus-column-left = [ ]; + "Mod+Ctrl+WheelScrollRight".action.move-column-right = [ ]; + "Mod+Ctrl+WheelScrollLeft".action.move-column-left = [ ]; + + "Mod+Shift+WheelScrollDown".action.focus-column-right = [ ]; + "Mod+Shift+WheelScrollUp".action.focus-column-left = [ ]; + "Mod+Ctrl+Shift+WheelScrollDown".action.move-column-right = [ ]; + "Mod+Ctrl+Shift+WheelScrollUp".action.move-column-left = [ ]; + + "Mod+1".action.focus-workspace = 1; + "Mod+2".action.focus-workspace = 2; + "Mod+3".action.focus-workspace = 3; + "Mod+4".action.focus-workspace = 4; + "Mod+5".action.focus-workspace = 5; + "Mod+6".action.focus-workspace = 6; + "Mod+7".action.focus-workspace = 7; + "Mod+8".action.focus-workspace = 8; + "Mod+9".action.focus-workspace = 9; + + "Mod+Ctrl+1".action.move-column-to-workspace = 1; + "Mod+Ctrl+2".action.move-column-to-workspace = 2; + "Mod+Ctrl+3".action.move-column-to-workspace = 3; + "Mod+Ctrl+4".action.move-column-to-workspace = 4; + "Mod+Ctrl+5".action.move-column-to-workspace = 5; + "Mod+Ctrl+6".action.move-column-to-workspace = 6; + "Mod+Ctrl+7".action.move-column-to-workspace = 7; + "Mod+Ctrl+8".action.move-column-to-workspace = 8; + "Mod+Ctrl+9".action.move-column-to-workspace = 9; + + "Mod+BracketLeft".action.consume-or-expel-window-left = [ ]; + "Mod+BracketRight".action.consume-or-expel-window-right = [ ]; + + "Mod+Comma".action.consume-window-into-column = [ ]; + "Mod+Period".action.expel-window-from-column = [ ]; + + "Mod+R".action.switch-preset-column-width = [ ]; + "Mod+Shift+R".action.switch-preset-window-height = [ ]; + "Mod+Ctrl+R".action.reset-window-height = [ ]; + "Mod+F".action.maximize-column = [ ]; + "Mod+Shift+F".action.fullscreen-window = [ ]; + + "Mod+Ctrl+F".action.expand-column-to-available-width = [ ]; + + "Mod+C".action.center-column = [ ]; + + "Mod+W".action.toggle-column-tabbed-display = [ ]; + + "Print".action.screenshot = [ ]; + "Ctrl+Print".action.screenshot-screen = [ ]; + "Alt+Print".action.screenshot-window = [ ]; + + "Mod+Escape" = { + allow-inhibiting = false; + action.toggle-keyboard-shortcuts-inhibit = [ ]; + }; + + "Mod+p".action.spawn-sh = "${noctaliaIPC} sessionMenu toggle"; + + "Ctrl+Alt+Delete".action.quit = [ ]; + + "Mod+Shift+P".action.power-off-monitors = [ ]; + }; + }; +} diff --git a/home/programs/desktop/noctalia.nix b/home/programs/desktop/noctalia.nix new file mode 100644 index 0000000..db8095c --- /dev/null +++ b/home/programs/desktop/noctalia.nix @@ -0,0 +1,243 @@ +{ + pkgs, + inputs, + config, + ... +}: +let + inherit (config.home) homeDirectory; + noctalia = "${inputs.noctalia.packages.${pkgs.system}.default}/bin/noctalia-shell"; +in +{ + home.packages = [ + pkgs.matugen + ]; + + systemd.user.services.noctalia = { + Unit.Description = "Noctalia Wayland Shell"; + Unit.PartOf = "graphical-session.target"; + Unit.After = "graphical-session.target"; + Unit.ConditionEnvironment = "WAYLAND_DISPLAY"; + Install.WantedBy = [ "graphical-session.target" ]; + Service.ExecStart = noctalia; + }; + + programs.noctalia-shell = { + enable = true; + settings = { + settingsVersion = 15; + bar = { + position = "top"; + backgroundOpacity = 0.9; + monitors = [ ]; + density = "comfortable"; + showCapsule = true; + floating = false; + marginVertical = 0.25; + marginHorizontal = 0.25; + widgets = { + left = [ + { + id = "SystemMonitor"; + } + { + id = "ActiveWindow"; + } + { + id = "MediaMini"; + } + ]; + center = [ + { + id = "Workspace"; + } + ]; + right = [ + { + id = "KeepAwake"; + } + { + id = "ScreenRecorder"; + } + { + id = "Tray"; + } + { + id = "NotificationHistory"; + } + { + id = "WiFi"; + } + { + id = "Bluetooth"; + } + { + id = "Battery"; + } + { + id = "Volume"; + } + { + id = "Brightness"; + } + { + id = "Clock"; + } + { + id = "ControlCenter"; + } + ]; + }; + }; + + general = { + dimDesktop = true; + showScreenCorners = true; + forceBlackScreenCorners = false; + radiusRatio = 1; + screenRadiusRatio = 1; + animationSpeed = 1.1; + animationDisabled = false; + }; + + location = { + name = "Los Angeles"; + useFahrenheit = false; + use12hourFormat = false; + showWeekNumberInCalendar = true; + }; + + screenRecorder = { + directory = "/home/fcuny/Videos"; + frameRate = 60; + audioCodec = "opus"; + videoCodec = "h264"; + quality = "very_high"; + colorRange = "limited"; + showCursor = true; + audioSource = "default_output"; + videoSource = "portal"; + }; + + wallpaper = { + enabled = true; + directory = "${homeDirectory}/Sync/wallpapers"; + enableMultiMonitorDirectories = false; + setWallpaperOnAllMonitors = true; + defaultWallpaper = ""; + fillMode = "crop"; + fillColor = "#000000"; + randomEnabled = true; + randomIntervalSec = 300; + transitionDuration = 1500; + transitionType = "random"; + transitionEdgeSmoothness = 0.05; + monitors = [ ]; + }; + + appLauncher = { + enableClipboardHistory = true; + position = "center"; + backgroundOpacity = 1; + pinnedExecs = [ ]; + useApp2Unit = false; + sortByMostUsed = true; + terminalCommand = "kitty"; + }; + + controlCenter = { + position = "close_to_bar_button"; + }; + + dock = { + enabled = false; + displayMode = "always_visible"; + backgroundOpacity = 1; + floatingRatio = 1; + onlySameOutput = true; + monitors = [ ]; + pinnedApps = [ ]; + }; + + network = { + wifiEnabled = true; + }; + + notifications = { + doNotDisturb = false; + monitors = [ ]; + location = "top_right"; + alwaysOnTop = true; + lastSeenTs = 0; + respectExpireTimeout = false; + lowUrgencyDuration = 3; + normalUrgencyDuration = 8; + criticalUrgencyDuration = 15; + }; + + osd = { + enabled = true; + location = "top_right"; + monitors = [ ]; + autoHideMs = 2000; + }; + + audio = { + volumeStep = 5; + volumeOverdrive = false; + cavaFrameRate = 60; + visualizerType = "linear"; + mprisBlacklist = [ ]; + preferredPlayer = ""; + }; + + ui = { + fontDefault = "Roboto"; + fontFixed = "DejaVu Sans Mono"; + fontDefaultScale = 1; + fontFixedScale = 1; + monitorsScaling = [ ]; + idleInhibitorEnabled = false; + tooltipsEnabled = true; + }; + + brightness = { + brightnessStep = 5; + }; + + colorSchemes = { + useWallpaperColors = true; + predefinedScheme = "Noctalia (default)"; + darkMode = true; + matugenSchemeType = "scheme-expressive"; + generateTemplatesForPredefined = true; + }; + + templates = { + gtk = false; + qt = false; + kitty = false; + ghostty = false; + foot = false; + fuzzel = false; + vesktop = false; + pywalfox = false; + enableUserTemplates = false; + }; + + nightLight = { + enabled = true; + forced = false; + autoSchedule = true; + nightTemp = "4000"; + dayTemp = "6500"; + }; + + hooks = { + enabled = false; + wallpaperChange = ""; + darkModeChange = ""; + }; + }; + }; +} |
