From b05fc9fcb5360e66bbb944b459ff1dafed5b1099 Mon Sep 17 00:00:00 2001 From: suri-codes Date: Thu, 6 Aug 2026 11:53:03 -0700 Subject: [PATCH] A new Epoch. --- flake.lock | 448 +++++++++++++++++++++++++++++ hosts/Daedalus/default.nix | 1 + modules/home/wm/default.nix | 1 + modules/home/wm/paneru/default.nix | 19 ++ modules/home/wm/paneru/paneru.toml | 87 ++++++ users/suri/Daedalus.nix | 3 +- 6 files changed, 558 insertions(+), 1 deletion(-) create mode 100644 flake.lock create mode 100644 modules/home/wm/paneru/default.nix create mode 100644 modules/home/wm/paneru/paneru.toml diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..8eb7bf2 --- /dev/null +++ b/flake.lock @@ -0,0 +1,448 @@ +{ + "nodes": { + "crane": { + "locked": { + "lastModified": 1778106249, + "narHash": "sha256-cM/AuKy5tMhwOOQIbha8ZRRMHVfNf7cv2aljIw+qoCg=", + "owner": "ipetkov", + "repo": "crane", + "rev": "6d015ea29630b7ad2402841386da2cb617a470a7", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "darwin": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1785389976, + "narHash": "sha256-0tLW8Ff5yt8AH97jw4ZpFJ0OCJ122zIlgWGDmOfU/VU=", + "owner": "LnL7", + "repo": "nix-darwin", + "rev": "15abb8c98f336cd8bd840d71059adebabe60bf04", + "type": "github" + }, + "original": { + "owner": "LnL7", + "repo": "nix-darwin", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "filaments", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1777969788, + "narHash": "sha256-8sr3w0KyQ0K7TEd8pYwYrxiDk0GZ4A7iIcl1lsxlzVM=", + "owner": "nix-community", + "repo": "fenix", + "rev": "3abc2d5559f4dc30c710ab152abcb4cb60b561ba", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "filaments": { + "inputs": { + "crane": "crane", + "fenix": "fenix", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1779217331, + "narHash": "sha256-fv6ZN/l8JWiU9rmbntTlB9P7zb74fh6Duok53t8uzBQ=", + "owner": "suri-codes", + "repo": "filaments", + "rev": "27091970af0d42a1f34993ec123187aa8f9e9c9a", + "type": "github" + }, + "original": { + "owner": "suri-codes", + "repo": "filaments", + "type": "github" + } + }, + "helix": { + "inputs": { + "nixpkgs": "nixpkgs_2", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1784822617, + "narHash": "sha256-IYDL6Vnf13Sa+wbeXZTAxvdLA4h8Ew5ha0spcJy/Yk0=", + "owner": "helix-editor", + "repo": "helix", + "rev": "079a789e8cb08ead67f19e1971a1b7438b37354b", + "type": "github" + }, + "original": { + "owner": "helix-editor", + "repo": "helix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1786031233, + "narHash": "sha256-TIDlLTLI1/pB7IqgjzcKQjpODQsZE2oII4XGG9B6KjI=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "7834e82588860aaf780cec1366524456a70898d7", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "niri": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": "nixpkgs_3", + "nixpkgs-stable": "nixpkgs-stable", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1785857305, + "narHash": "sha256-25q05zpF1sqOCxPPUG9DPPGd+EDW7SiAOWCzBWRS7r0=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "9ee3e13b60643448228353097880521658b2fe0e", + "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": 1785701241, + "narHash": "sha256-ircVOzPWRircI39ac/tqJajr5OoJxEVrDlBb05TULEk=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "feb3e43f1475e0865bb89cbd1e898b34d1d2ccf6", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1777954456, + "narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=", + "rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1", + "revCount": 992384, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.992384%2Brev-549bd84d6279f9852cae6225e372cc67fb91a4c1/019df915-70b5-73a2-a5a4-63c620b45d9f/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/NixOS/nixpkgs/0.1" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1782847189, + "narHash": "sha256-twXPFqFsrrY5r28Zh7Homgcp2gUMBgQ6WDS98Q/3xFI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b6018f87da91d19d0ab4cf979885689b469cdd41", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1775036866, + "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1785828668, + "narHash": "sha256-8fsyqeO+mJqvIzeO4xIpgJe/f7MTbbVTEC6RT6WSXNs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e72e4f299401a3689d4b3d5fc6496b11db7064eb", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1785967620, + "narHash": "sha256-IItrdb7Puk05RqOBWZYFC5X6Wl1sJmCfh5MWVHw5iMM=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "b7c2ada94fe99c15b0dbcf4d11fd7850b957a436", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1785571196, + "narHash": "sha256-xwSqxTsama0YTtS78+4YyCm6jJg09v78QWfP1cAyoVA=", + "rev": "148bab9c1c3c53136ecb44a6ea356a0ed5b39b06", + "type": "tarball", + "url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1045728.148bab9c1c3c/nixexprs.tar.xz" + }, + "original": { + "type": "tarball", + "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" + } + }, + "noctalia": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1786042321, + "narHash": "sha256-dZkRkUklY3xmt95coJ8QLvQ8Y2eBF3peSOC1k2kSlX8=", + "owner": "noctalia-dev", + "repo": "noctalia", + "rev": "54688c63aba4c624c41ca9a315e46e9df03ded51", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia", + "type": "github" + } + }, + "noctalia-greeter": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1786020025, + "narHash": "sha256-PsjfVF1epHVBUa+TDOuaRZbaJnSxTyA/oDZd1b4eE2Y=", + "owner": "noctalia-dev", + "repo": "noctalia-greeter", + "rev": "ba1be1fe429e5b167337c607e4ccecdd46a23ba5", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-greeter", + "type": "github" + } + }, + "root": { + "inputs": { + "darwin": "darwin", + "filaments": "filaments", + "helix": "helix", + "home-manager": "home-manager", + "niri": "niri", + "nixpkgs": "nixpkgs_4", + "noctalia": "noctalia", + "noctalia-greeter": "noctalia-greeter", + "spicetify-nix": "spicetify-nix", + "zen-browser": "zen-browser" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1777924689, + "narHash": "sha256-9Z0puLyCSYvtYhP1IZMxC05DSgwA+5rE99jsv1KErc4=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "91c7c2c4ca6a0520cfbf97e369e4fb7bf0b63b7a", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "helix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775358767, + "narHash": "sha256-f2eC+WIfhjevCPQILuV08i/kmKZzYZpUvkom/33VxCA=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "20fd44bc663daa53a2575e01293e24e681d62244", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "spicetify-nix": { + "inputs": { + "nixpkgs": "nixpkgs_5", + "systems": "systems" + }, + "locked": { + "lastModified": 1785652745, + "narHash": "sha256-pD0VE/XwjQ3tLyxTzXKdm6JuIEWr/Jaote6xpXGZrXk=", + "owner": "Gerg-L", + "repo": "spicetify-nix", + "rev": "802040514e09bb8539237f52f68cf053b987c65e", + "type": "github" + }, + "original": { + "owner": "Gerg-L", + "repo": "spicetify-nix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "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": 1784679892, + "narHash": "sha256-Mb7jpqnrcYCfNSItIkkHpuR3YxWFxPuIBfcwNKlRBkk=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "8d135d3b2854b30fd01ea6cd6c27e523dd50a839", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "zen-browser": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1785480078, + "narHash": "sha256-wWRW/Teo+58EMeTpVVEAqYid1qLzpB/PViQJCv7Xxvc=", + "owner": "youwen5", + "repo": "zen-browser-flake", + "rev": "b7d4cc2778143a228675cd8bb7efdfa111638ac8", + "type": "github" + }, + "original": { + "owner": "youwen5", + "repo": "zen-browser-flake", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/hosts/Daedalus/default.nix b/hosts/Daedalus/default.nix index fd4b1bc..76a0b0a 100644 --- a/hosts/Daedalus/default.nix +++ b/hosts/Daedalus/default.nix @@ -29,6 +29,7 @@ brews = [ "mas" "mole" + "paneru" # terminal handling stuff # "libiconv" # nmcli kinda diff --git a/modules/home/wm/default.nix b/modules/home/wm/default.nix index ee9360c..524811d 100644 --- a/modules/home/wm/default.nix +++ b/modules/home/wm/default.nix @@ -4,6 +4,7 @@ ./hyprland ./aerospace ./niri + ./paneru ./noctalia ]; diff --git a/modules/home/wm/paneru/default.nix b/modules/home/wm/paneru/default.nix new file mode 100644 index 0000000..94c8ef7 --- /dev/null +++ b/modules/home/wm/paneru/default.nix @@ -0,0 +1,19 @@ +{ + lib, + pkgs, + config, + ... +}: +with lib; +let + cfg = config.nyx.paneru; +in +{ + options.nyx.paneru = { + enable = mkEnableOption "Paneru window manager"; + }; + config = mkIf (cfg.enable && pkgs.stdenv.isDarwin) { + home.file.".config/paneru/paneru.toml".source = + config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/nyx/modules/home/wm/paneru/paneru.toml"; + }; +} diff --git a/modules/home/wm/paneru/paneru.toml b/modules/home/wm/paneru/paneru.toml new file mode 100644 index 0000000..180df6f --- /dev/null +++ b/modules/home/wm/paneru/paneru.toml @@ -0,0 +1,87 @@ +# Paneru config, mirroring the binds from modules/home/wm/niri/config.kdl +# so muscle memory carries over between the niri (Linux) and paneru (macOS) +# setups. "alt" here plays the role that niri's "Mod" (Super) plays there, +# matching the aerospace.toml convention of keeping cmd free for macOS itself. +# +# Not everything in the niri config has a paneru equivalent: +# - App launching (Mod+Return -> ghostty, Mod+Space -> launcher, etc.) isn't +# something paneru's [bindings] can do - it only dispatches window/workspace +# actions. Keep using Raycast/Spotlight or skhd for app launching. +# - There's no "focus monitor" without moving a window, no overview, and no +# per-workspace naming (paneru's virtual workspaces are numbered rows, not +# named strips like niri's "browser"/"work"/etc) - that naming already lives +# in aerospace.toml's workspace letters. +# - Fine 10%-step resizing (Mod+Minus/Equal) doesn't exist; paneru only cycles +# preset widths, so those are mapped to the closest grow/shrink action. + +[options] +focus_follows_mouse = true +mouse_follows_focus = true +preset_column_widths = [0.33333, 0.5, 0.66667, 1.0] + +[bindings] +# Focus (niri: Mod+H/J/K/L and arrows) +window_focus_west = ["alt - h", "alt - leftarrow"] +window_focus_east = ["alt - l", "alt - rightarrow"] +window_focus_north = ["alt - k", "alt - uparrow"] +window_focus_south = ["alt - j", "alt - downarrow"] +window_focus_first = "alt - home" +window_focus_last = "alt - end" + +# Move/swap (niri: Mod+Ctrl+H/J/K/L and arrows) +window_swap_west = ["alt + ctrl - h", "alt + ctrl - leftarrow"] +window_swap_east = ["alt + ctrl - l", "alt + ctrl - rightarrow"] +window_swap_north = ["alt + ctrl - k", "alt + ctrl - uparrow"] +window_swap_south = ["alt + ctrl - j", "alt + ctrl - downarrow"] +window_swap_first = "alt + ctrl - home" +window_swap_last = "alt + ctrl - end" + +# Monitors (niri: Mod+Shift+.../Mod+Shift+Ctrl+... are directional; paneru +# only has "next display", so both collapse onto one bind each) +window_nextdisplay = "alt + shift - n" +window_nextdisplaysend = "alt + shift + ctrl - n" +mouse_nextdisplay = "alt - n" + +# Virtual workspaces (niri: Mod+Page_Up/Down, Mod+Ctrl+Page_Up/Down) +window_virtual_north = "alt - pageup" +window_virtual_south = "alt - pagedown" +window_virtualsend_north = "alt + ctrl - pageup" +window_virtualsend_south = "alt + ctrl - pagedown" + +# Direct workspace numbers (niri: Mod+1..9, Mod+Ctrl+1..9) +window_virtualnum_1 = "alt - 1" +window_virtualnum_2 = "alt - 2" +window_virtualnum_3 = "alt - 3" +window_virtualnum_4 = "alt - 4" +window_virtualnum_5 = "alt - 5" +window_virtualnum_6 = "alt - 6" +window_virtualnum_7 = "alt - 7" +window_virtualnum_8 = "alt - 8" +window_virtualnum_9 = "alt - 9" +window_virtualsendnum_1 = "alt + ctrl - 1" +window_virtualsendnum_2 = "alt + ctrl - 2" +window_virtualsendnum_3 = "alt + ctrl - 3" +window_virtualsendnum_4 = "alt + ctrl - 4" +window_virtualsendnum_5 = "alt + ctrl - 5" +window_virtualsendnum_6 = "alt + ctrl - 6" +window_virtualsendnum_7 = "alt + ctrl - 7" +window_virtualsendnum_8 = "alt + ctrl - 8" +window_virtualsendnum_9 = "alt + ctrl - 9" + +# Sizing (niri: Mod+R/Shift+R cycle presets, Mod+Minus/Equal fine-tune) +window_resize = "alt - r" +window_shrink = ["alt + shift - r", "alt - minus"] +window_grow = "alt - equal" + +# Fullwidth / centering (niri: Mod+F maximize-column, Mod+C center-column, +# Mod+Ctrl+C center-visible-columns) +window_fullwidth = "alt - f" +window_center = "alt - c" +window_balance = "alt + ctrl - c" + +# Floating (niri: Mod+V toggle-window-floating, Mod+Shift+V switch-focus) +window_manage = "alt - v" +window_togglefloatlayer = "alt + shift - v" + +# Quit paneru (niri: Mod+Shift+E quit) +quit = "alt + shift - e" diff --git a/users/suri/Daedalus.nix b/users/suri/Daedalus.nix index ee60a38..0e9fb14 100644 --- a/users/suri/Daedalus.nix +++ b/users/suri/Daedalus.nix @@ -2,7 +2,8 @@ imports = [ ./common.nix ]; - nyx.aerospace.enable = true; + # nyx.aerospace.enable = true; + nyx.paneru.enable = true; nyx.ghostty.enable = true; nyx.zed.enable = true; # nyx.orbstack.enable = true; -- 2.51.2