diff --git a/flake.lock b/flake.lock index 6333848..b4beb38 100644 --- a/flake.lock +++ b/flake.lock @@ -153,7 +153,7 @@ }, "flake-utils_4": { "inputs": { - "systems": "systems_5" + "systems": "systems_6" }, "locked": { "lastModified": 1731533236, @@ -287,6 +287,64 @@ "type": "github" } }, + "niri": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_2", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1773725889, + "narHash": "sha256-htkVJrtaWJS7wQSXg8d26RR6jF3Iab2bYTNfvTgv05Q=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "9987baf8f935a1b3b2aa89a44c13b3239ecc640e", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "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": 1773130184, + "narHash": "sha256-3bwx4WqCB06yfQIGB+OgIckOkEDyKxiTD5pOo4Xz2rI=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "b07bde3ee82dd73115e6b949e4f3f63695da35ea", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, "nix-darwin": { "inputs": { "nixpkgs": [ @@ -398,6 +456,22 @@ "type": "github" } }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1773705440, + "narHash": "sha256-xB30bbAp0e7ogSEYyc126mAJMt4FRFh8wtm6ADE1xuM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "48652e9d5aea46e555b3df87354280d4f29cd3a3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-unstable": { "locked": { "lastModified": 1741865919, @@ -447,6 +521,22 @@ } }, "nixpkgs_4": { + "locked": { + "lastModified": 1755186698, + "narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { "locked": { "lastModified": 1769789167, "narHash": "sha256-kKB3bqYJU5nzYeIROI82Ef9VtTbu4uA3YydSk/Bioa8=", @@ -462,10 +552,55 @@ "type": "github" } }, + "noctalia": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "noctalia-qs": [ + "noctalia-qs" + ] + }, + "locked": { + "lastModified": 1773670009, + "narHash": "sha256-LEiA7ntxR6Biep4fgD2Jh9bB1g2olRNAToFUS51szDs=", + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "rev": "9511f1fce45ffe763d7954f3207e3dfd644c97f2", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "type": "github" + } + }, + "noctalia-qs": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems_5", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1773629133, + "narHash": "sha256-9/GtCljeEYQAQlU4LB/o8cTJ8TzYvNCzf4ILnW5Rs3g=", + "owner": "noctalia-dev", + "repo": "noctalia-qs", + "rev": "5794d3a88fced826e1903164d77a7b07bdb93ff6", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-qs", + "type": "github" + } + }, "readlater-bot": { "inputs": { "flake-utils": "flake-utils_4", - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_5" }, "locked": { "lastModified": 1772524468, @@ -490,10 +625,13 @@ "home-manager": "home-manager", "homebrew-cask": "homebrew-cask", "homebrew-core": "homebrew-core", + "niri": "niri", "nix-darwin": "nix-darwin", "nix-homebrew": "nix-homebrew", "nix-openclaw": "nix-openclaw", "nixpkgs": "nixpkgs_3", + "noctalia": "noctalia", + "noctalia-qs": "noctalia-qs", "readlater-bot": "readlater-bot" } }, @@ -575,6 +713,21 @@ } }, "systems_5": { + "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_6": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -589,6 +742,57 @@ "type": "github" } }, + "treefmt-nix": { + "inputs": { + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1772660329, + "narHash": "sha256-IjU1FxYqm+VDe5qIOxoW+pISBlGvVApRjiw/Y/ttJzY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "3710e0e1218041bbad640352a0440114b1e10428", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "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": 1773622265, + "narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "a879e5e0896a326adc79c474bf457b8b99011027", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } + }, "zig": { "inputs": { "flake-compat": [ diff --git a/flake.nix b/flake.nix index c0117c7..7418852 100644 --- a/flake.nix +++ b/flake.nix @@ -17,12 +17,10 @@ nix-homebrew.url = "github:zhaofengli/nix-homebrew"; homebrew-core = { url = "github:homebrew/homebrew-core"; - flake = false; }; homebrew-cask = { url = "github:homebrew/homebrew-cask"; - flake = false; }; @@ -46,6 +44,11 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + niri = { + url = "github:sodiboo/niri-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + helium = { # url = "github:FKouhai/helium2nix/main"; url = "github:AlvaroParker/helium-nix"; @@ -55,6 +58,17 @@ readlater-bot = { url = "github:thegeneralist01/bookkeeper"; }; + + noctalia = { + url = "github:noctalia-dev/noctalia-shell"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.noctalia-qs.follows = "noctalia-qs"; + }; + + noctalia-qs = { + url = "github:noctalia-dev/noctalia-qs"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = diff --git a/lib/system.nix b/lib/system.nix index 9fb0534..9c5ac85 100644 --- a/lib/system.nix +++ b/lib/system.nix @@ -1,11 +1,11 @@ inputs: self: let - inherit (inputs.nixpkgs.lib) - hasSuffix filesystem attrValues filter getAttrFromPath + inherit (inputs.nixpkgs.lib) + hasSuffix filesystem attrValues filter getAttrFromPath hasAttrByPath mapAttrsToList concatMap; - + # Helper to collect all .nix files recursively in a directory - collectModules = path: + collectModules = path: if builtins.pathExists path then filter (hasSuffix ".nix") (filesystem.listFilesRecursive path) else []; @@ -29,7 +29,7 @@ let # Collect platform-specific modules modulesCommon = collectModules ../modules/common; - modulesLinux = collectModules ../modules/linux; + modulesLinux = collectModules ../modules/linux; modulesDarwin = collectModules ../modules/darwin; # Collect input modules by platform @@ -47,10 +47,10 @@ in # Main system builder function mkSystem = os: configFile: let - systemBuilder = if os == "darwin" + systemBuilder = if os == "darwin" then inputs.nix-darwin.lib.darwinSystem else inputs.nixpkgs.lib.nixosSystem; - + platformModules = if os == "darwin" then modulesDarwin ++ inputModulesDarwin else modulesLinux ++ inputModulesNixos; @@ -59,7 +59,7 @@ in specialArgs = inputs // { inherit inputs self os; }; - + modules = [ overlayModule configFile diff --git a/modules/common/nix.nix b/modules/common/nix.nix index 043f9ea..aa7dc42 100644 --- a/modules/common/nix.nix +++ b/modules/common/nix.nix @@ -3,6 +3,7 @@ "https://cache.thegeneralist01.com/" "https://cache.garnix.io/" "https://cache.nixos.org/" + "https://niri.cachix.org" ]; in { # todo: gc @@ -23,6 +24,7 @@ in { extra-trusted-public-keys = [ "cache.thegeneralist01.com:jkKcenR877r7fQuWq6cr0JKv2piqBWmYLAYsYsSJnT4=" "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" + "niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964=" ]; trusted-users = [ "thegeneralist" "central" "root" "@build" "@wheel" "@admin" "jellyfin" "git" ]; diff --git a/modules/common/shell/0_nushell.nix b/modules/common/shell/0_nushell.nix index 0d66161..28c69a0 100644 --- a/modules/common/shell/0_nushell.nix +++ b/modules/common/shell/0_nushell.nix @@ -20,7 +20,7 @@ let unstable = import (builtins.fetchTarball { url = "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz"; - sha256 = if (config.isServer) then "sha256:0fgmdh1j6qrx64wq8wk2hry2rjh3rkvz9pch29l8zn49nlndvxy2" else (if (config.onLinux) then "sha256:0fgmdh1j6qrx64wq8wk2hry2rjh3rkvz9pch29l8zn49nlndvxy2" else "sha256:16xi1yijq2ccbp8254zc0b5fgz0igxvyf4yn349wj2ggk4cl6dgn"); + sha256 = if (config.isServer) then "sha256:0fgmdh1j6qrx64wq8wk2hry2rjh3rkvz9pch29l8zn49nlndvxy2" else (if (config.onLinux) then "sha256:03plivnr4cg0h8v7djf9g2jra09r45pmdiirmy4lvl2n1d4yb7ac" else "sha256:16xi1yijq2ccbp8254zc0b5fgz0igxvyf4yn349wj2ggk4cl6dgn"); }) { system = pkgs.system; }; package = unstable.nushell; in diff --git a/modules/dotfiles/nvim/lua/thegeneralist/lazy/whichkey.lua b/modules/dotfiles/nvim/lua/thegeneralist/lazy/whichkey.lua index 8ba00ab..b37514f 100644 --- a/modules/dotfiles/nvim/lua/thegeneralist/lazy/whichkey.lua +++ b/modules/dotfiles/nvim/lua/thegeneralist/lazy/whichkey.lua @@ -70,6 +70,7 @@ return { r = { ":lua vim.lsp.buf.format()", "Fo[R]mat" }, t = { ":lua Snacks.picker.todo_comments()", "TODOs" }, }, + prefix = "", --conf end }, } diff --git a/modules/dotfiles/nvim/lua/thegeneralist/remap.lua b/modules/dotfiles/nvim/lua/thegeneralist/remap.lua index e539077..46cb060 100755 --- a/modules/dotfiles/nvim/lua/thegeneralist/remap.lua +++ b/modules/dotfiles/nvim/lua/thegeneralist/remap.lua @@ -99,3 +99,6 @@ end) vim.keymap.set("n", "lr", "LspRestart", { desc = "Restart LSP" }) vim.keymap.set("n", "le", "LspStart", { desc = "Start LSP" }) vim.keymap.set("n", "ld", "LspStop", { desc = "Stop LSP" }) + +vim.keymap.set("n", "fr", ":lua vim.lsp.buf.format()", { desc = "Fo[R]mat" }) +vim.keymap.set("n", "ft", ":lua Snacks.picker.todo_comments()", { desc = "TODOs" }) diff --git a/modules/linux/noctalia.nix b/modules/linux/noctalia.nix new file mode 100644 index 0000000..9ee5b21 --- /dev/null +++ b/modules/linux/noctalia.nix @@ -0,0 +1,12 @@ +{ pkgs, inputs, ... }: +{ + environment.systemPackages = [ + inputs.noctalia.packages.${pkgs.stdenv.hostPlatform.system}.default + ]; + + home-manager.sharedModules = [{ + imports = [ + inputs.noctalia.homeModules.default + ]; + }]; +} diff --git a/modules/linux/xserver.nix b/modules/linux/xserver.nix index f94305d..92bf9ca 100644 --- a/modules/linux/xserver.nix +++ b/modules/linux/xserver.nix @@ -1,10 +1,381 @@ -{ pkgs, lib, ... }: let - inherit (lib) optionalAttrs; -in { +{ inputs, pkgs, ... }: +{ + imports = [ + ./noctalia.nix + ]; + + # May God help us + xdg.portal = { + enable = true; + xdgOpenUsePortal = true; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + pkgs.xdg-desktop-portal-gnome + ]; + config.common.default = "*"; + }; + + home-manager.sharedModules = [ + inputs.niri.homeModules.niri + + { + gtk = { + enable = true; + theme = { + name = "adw-gtk3-dark"; + package = pkgs.adw-gtk3; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + cursorTheme = { + name = "Adwaita"; + package = pkgs.adwaita-icon-theme; + size = 24; + }; + }; + + home.pointerCursor = { + name = "Adwaita"; + package = pkgs.adwaita-icon-theme; + size = 24; + gtk.enable = true; + }; + + home.sessionVariables = { + GTK_THEME = "adw-gtk3-dark"; + XCURSOR_THEME = "Adwaita"; + XCURSOR_SIZE = "24"; + }; + + xdg = { + enable = true; + mimeApps = { + enable = true; + defaultApplications = { + # NOTE: replace "helium.desktop" with the actual .desktop filename + # find it with: ls ~/.nix-profile/share/applications/ | grep -i helium + "text/html" = "helium.desktop"; + "x-scheme-handler/http" = "helium.desktop"; + "x-scheme-handler/https" = "helium.desktop"; + "x-scheme-handler/about" = "helium.desktop"; + "x-scheme-handler/unknown" = "helium.desktop"; + "application/pdf" = "helium.desktop"; + }; + }; + }; + + programs.niri = { + enable = true; + package = pkgs.niri; + settings = { + binds = { + # Shortcuts Panel + "Mod+Shift+Escape".action.show-hotkey-overlay = { }; + + # Application Shortcuts + "Mod+Return" = { + hotkey-overlay.title = "Open Terminal: ghostty"; + action.spawn = [ "ghostty" ]; + }; + + "Mod+B" = { + hotkey-overlay.title = "Open Browser: helium"; + action.spawn = [ "helium" ]; + }; + + "Mod+Alt+B" = { + hotkey-overlay.title = "Open Secondary Browser: firefox"; + action.spawn = [ "firefox" ]; + }; + + "Mod+Shift+Q" = { + hotkey-overlay.title = "Lock Screen: gtklock"; + action.spawn = [ "gtklock" ]; + }; + + "Mod+D" = { + hotkey-overlay.title = "Open App Launcher: fuzzel"; + action.spawn = [ + "fuzzel" + "toggle" + ]; + }; + + "Mod+E" = { + hotkey-overlay.title = "File Manager: Thunar"; + action.spawn = [ "thunar" ]; + }; + + "Mod+O" = { + hotkey-overlay.title = "Obsidian"; + action.spawn = [ "sh" "-c" "obsidian" ]; + }; + + "Mod+N" = { + hotkey-overlay.title = "X Notifications"; + action.spawn = [ "helium" "https://x.com/i/notifications" ]; + }; + + "Mod+Alt+E" = { + hotkey-overlay.title = "File Manager: Yazi"; + action.spawn = [ "yazi" ]; + }; + + # Media Keys + "XF86AudioRaiseVolume" = { + allow-when-locked = true; + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "5%+" + ]; + }; + + "XF86AudioLowerVolume" = { + allow-when-locked = true; + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "5%-" + ]; + }; + + # "XF86MonBrightnessUp" = { + # allow-when-locked = true; + # action.spawn = [ "mediactl" "brightness_up" ]; + # }; + + # "XF86MonBrightnessDown" = { + # allow-when-locked = true; + # action.spawn = [ "mediactl" "brightness_down" ]; + # }; + + "XF86AudioMute" = { + allow-when-locked = true; + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SINK@" + "toggle" + ]; + }; + + "XF86AudioMicMute" = { + allow-when-locked = true; + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SOURCE@" + "toggle" + ]; + }; + + "XF86AudioNext" = { + allow-when-locked = true; + action.spawn = [ + "playerctl" + "next" + ]; + }; + + "XF86AudioPause" = { + allow-when-locked = true; + action.spawn = [ + "playerctl" + "play-pause" + ]; + }; + + "XF86AudioPlay" = { + allow-when-locked = true; + action.spawn = [ + "playerctl" + "play-pause" + ]; + }; + + "XF86AudioPrev" = { + allow-when-locked = true; + action.spawn = [ + "playerctl" + "previous" + ]; + }; + + # Window Management + "Mod+Q".action.close-window = { }; + + "Mod+H".action.focus-column-left = { }; + "Mod+J".action.focus-workspace-down = { }; + "Mod+K".action.focus-workspace-up = { }; + "Mod+L".action.focus-column-right = { }; + + "Mod+Left".action.focus-column-left = { }; + "Mod+Down".action.focus-window-down = { }; + "Mod+Up".action.focus-window-up = { }; + "Mod+Right".action.focus-column-right = { }; + + # Move windows within workspace + "Mod+Shift+Left".action.move-column-left = { }; + "Mod+Shift+Down".action.move-window-down = { }; + "Mod+Shift+Up".action.move-window-up = { }; + "Mod+Shift+Right".action.move-column-right = { }; + + "Mod+Shift+H".action.move-column-left = { }; + "Mod+Shift+J".action.move-column-to-workspace-down = { }; + "Mod+Shift+K".action.move-column-to-workspace-up = { }; + "Mod+Shift+L".action.move-column-right = { }; + + # Move to workspace edges + "Mod+Shift+Home".action.move-column-to-first = { }; + "Mod+Shift+End".action.move-column-to-last = { }; + + "Mod+Home".action.focus-column-first = { }; + "Mod+End".action.focus-column-last = { }; + + # Monitor Management - Move between monitors + "Mod+Ctrl+Left".action.focus-monitor-left = { }; + "Mod+Ctrl+Right".action.focus-monitor-right = { }; + "Mod+Ctrl+Up".action.focus-monitor-up = { }; + "Mod+Ctrl+Down".action.focus-monitor-down = { }; + + "Mod+Ctrl+H".action.focus-monitor-left = { }; + "Mod+Ctrl+L".action.focus-monitor-right = { }; + "Mod+Ctrl+K".action.focus-monitor-up = { }; + "Mod+Ctrl+J".action.focus-monitor-down = { }; + + # Move windows to different monitors + "Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = { }; + "Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = { }; + "Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = { }; + "Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = { }; + + "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = { }; + "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = { }; + "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = { }; + "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = { }; + + # Workspace Management + "Mod+Escape" = { + hotkey-overlay.title = "Open Overview"; + repeat = false; + action.toggle-overview = { }; + }; + + "Mod+WheelScrollDown" = { + cooldown-ms = 100; + action.focus-workspace-down = { }; + }; + + "Mod+WheelScrollUp" = { + cooldown-ms = 100; + action.focus-workspace-up = { }; + }; + + # Move windows to different workspaces + "Mod+Shift+WheelScrollDown" = { + cooldown-ms = 100; + action.move-column-to-workspace-down = { }; + }; + + "Mod+Shift+WheelScrollUp" = { + cooldown-ms = 100; + action.move-column-to-workspace-up = { }; + }; + + # Column navigation with mouse + "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 = { }; + + # Numbered Workspaces + "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; + + # Move windows to numbered workspaces + "Mod+Shift+1".action.move-column-to-workspace = 1; + "Mod+Shift+2".action.move-column-to-workspace = 2; + "Mod+Shift+3".action.move-column-to-workspace = 3; + "Mod+Shift+4".action.move-column-to-workspace = 4; + "Mod+Shift+5".action.move-column-to-workspace = 5; + "Mod+Shift+6".action.move-column-to-workspace = 6; + "Mod+Shift+7".action.move-column-to-workspace = 7; + "Mod+Shift+8".action.move-column-to-workspace = 8; + "Mod+Shift+9".action.move-column-to-workspace = 9; + + "Mod+Tab".action.focus-workspace-previous = { }; + + # Layout Controls + "Mod+C".action.center-column = { }; + "Mod+Ctrl+C".action.center-visible-columns = { }; + "Mod+BracketLeft".action.set-column-width = "-10%"; + "Mod+BracketRight".action.set-column-width = "+10%"; + "Mod+Shift+BracketLeft".action.set-window-height = "-10%"; + "Mod+Shift+BracketRight".action.set-window-height = "+10%"; + + # Window resizing with mouse + "Mod+Ctrl+WheelScrollDown".action.set-window-height = "-5%"; + "Mod+Ctrl+WheelScrollUp".action.set-window-height = "+5%"; + + # Window Modes + "Mod+T".action.toggle-window-floating = { }; + "Mod+F".action.fullscreen-window = { }; + "Mod+M".action.maximize-column = { }; + + # Utils + "Mod+S".action.screenshot = { }; + + "Mod+Shift+S".action.screenshot-screen = { + write-to-disk = true; + }; + + "Mod+Ctrl+S".action.screenshot-window = { + write-to-disk = true; + }; + + "Mod+P".action.spawn = [ + "sh" + "-c" + "pgrep -x hyprpicker >/dev/null || hyprpicker" + ]; + }; + spawn-at-startup = [ + { + command = [ "noctalia-shell" ]; + } + ]; + }; + }; + } + ]; + environment.sessionVariables = { + NIXOS_OZONE_WL = "1"; + }; virtualisation.vmware.guest.enable = true; - environment.systemPackages = [ pkgs.fuzzel ]; - programs.niri.enable = true; + programs.niri = { + enable = true; + package = pkgs.niri; + }; + + environment.systemPackages = [ + pkgs.fuzzel + pkgs.xfce.thunar + pkgs.playerctl + pkgs.wireplumber + ]; services.xserver = { enable = true; @@ -24,25 +395,25 @@ in { }; }; - windowManager.i3 = optionalAttrs (false) { - enable = true; - package = pkgs.i3; - configFile = ../dotfiles/i3/config; - - extraPackages = with pkgs; [ - i3 - i3status - rofi - dmenu - feh - picom # transparency effects compositor - dunst # notification daemon - xfce.thunar - nemo - arandr # screen conf - lxappearance - ]; - }; + # windowManager.i3 = optionalAttrs (false) { + # enable = true; + # package = pkgs.i3; + # configFile = ../dotfiles/i3/config; + # + # extraPackages = with pkgs; [ + # i3 + # i3status + # rofi + # dmenu + # feh + # picom # transparency effects compositor + # dunst # notification daemon + # xfce.thunar + # nemo + # arandr # screen conf + # lxappearance + # ]; + # }; }; # home.file.".xprofile".text = ''