diff --git a/flake.lock b/flake.lock
index f0dbb9d1b89b326a865764b2c31c27cf9f18ecfb..457bdacc7ef29a8a19b24ca5c434f5e3c6d43188 100644
--- a/flake.lock
+++ b/flake.lock
@@ -9,11 +9,11 @@
]
},
"locked": {
- "lastModified": 1755807717,
- "narHash": "sha256-x/IcOa+p9VFYlwXmuNhbZ8ce9As24rqy6uABv+tKacU=",
+ "lastModified": 1767990299,
+ "narHash": "sha256-Jz+cp9Ln4++1XiKw9KvZEM2dJ9AdOvayk97ybi9g7zc=",
"owner": "tadfisher",
"repo": "android-nixpkgs",
- "rev": "4316f29f7f3b34c41f2639ae190022fbed60b850",
+ "rev": "449f2cadee7cb7b665aea209a67f8ecf30176653",
"type": "github"
},
"original": {
@@ -38,11 +38,11 @@
"sf-pro": "sf-pro"
},
"locked": {
- "lastModified": 1752383772,
- "narHash": "sha256-I5Y0gUJS85lGEuuKr+tKSRUpJWeKavE+WmiAHRcyBaU=",
+ "lastModified": 1758228441,
+ "narHash": "sha256-3mA9oFuhJ1EHyhPd17g/EuJi4jDYPGhyxkEitdh3Kmc=",
"owner": "Lyndeno",
"repo": "apple-fonts.nix",
- "rev": "875c694d7f0ec2020d7511264907a1f0e3262931",
+ "rev": "aba9944f6606a69ebedf7bfb723316139eec3f72",
"type": "github"
},
"original": {
@@ -51,6 +51,39 @@
"type": "github"
}
},
+ "aquamarine": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "hyprwayland-scanner": [
+ "hyprland",
+ "hyprwayland-scanner"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1767024902,
+ "narHash": "sha256-sMdk6QkMDhIOnvULXKUM8WW8iyi551SWw2i6KQHbrrU=",
+ "owner": "hyprwm",
+ "repo": "aquamarine",
+ "rev": "b8a0c5ba5a9fbd2c660be7dd98bdde0ff3798556",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "aquamarine",
+ "type": "github"
+ }
+ },
"darwin": {
"inputs": {
"nixpkgs": [
@@ -58,11 +91,11 @@
]
},
"locked": {
- "lastModified": 1755825449,
- "narHash": "sha256-XkiN4NM9Xdy59h69Pc+Vg4PxkSm9EWl6u7k6D5FZ5cM=",
+ "lastModified": 1767718503,
+ "narHash": "sha256-V+VkFs0aSG0ca8p/N3gib7FAf4cq9jyr5Gm+ZBrHQpo=",
"owner": "lnl7",
"repo": "nix-darwin",
- "rev": "8df64f819698c1fee0c2969696f54a843b2231e8",
+ "rev": "9f48ffaca1f44b3e590976b4da8666a9e86e6eb1",
"type": "github"
},
"original": {
@@ -80,11 +113,11 @@
]
},
"locked": {
- "lastModified": 1741473158,
- "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=",
+ "lastModified": 1764011051,
+ "narHash": "sha256-M7SZyPZiqZUR/EiiBJnmyUbOi5oE/03tCeFrTiUZchI=",
"owner": "numtide",
"repo": "devshell",
- "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0",
+ "rev": "17ed8d9744ebe70424659b0ef74ad6d41fc87071",
"type": "github"
},
"original": {
@@ -94,6 +127,22 @@
}
},
"flake-compat": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1767039857,
+ "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
+ "owner": "NixOS",
+ "repo": "flake-compat",
+ "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
+ "flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1751685974,
@@ -109,22 +158,6 @@
"url": "https://git.lix.systems/lix-project/flake-compat.git"
}
},
- "flake-compat_2": {
- "flake": false,
- "locked": {
- "lastModified": 1696426674,
- "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
- "owner": "edolstra",
- "repo": "flake-compat",
- "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
- "type": "github"
- },
- "original": {
- "owner": "edolstra",
- "repo": "flake-compat",
- "type": "github"
- }
- },
"flake-compat_3": {
"flake": false,
"locked": {
@@ -141,6 +174,22 @@
"type": "github"
}
},
+ "flake-compat_4": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1696426674,
+ "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+ "type": "github"
+ },
+ "original": {
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
@@ -149,11 +198,11 @@
]
},
"locked": {
- "lastModified": 1754487366,
- "narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
+ "lastModified": 1760948891,
+ "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
"owner": "hercules-ci",
"repo": "flake-parts",
- "rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
+ "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
"type": "github"
},
"original": {
@@ -181,24 +230,6 @@
}
},
"flake-utils_2": {
- "inputs": {
- "systems": "systems_2"
- },
- "locked": {
- "lastModified": 1701680307,
- "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "flake-utils_3": {
"inputs": {
"systems": "systems_3"
},
@@ -216,28 +247,28 @@
"type": "github"
}
},
- "flake-utils_4": {
- "inputs": {
- "systems": "systems_5"
- },
- "locked": {
- "lastModified": 1705309234,
- "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "flake-utils_5": {
+ "flake-utils_3": {
"inputs": {
"systems": "systems_6"
},
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_4": {
+ "inputs": {
+ "systems": "systems_7"
+ },
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
@@ -252,9 +283,9 @@
"type": "github"
}
},
- "flake-utils_6": {
+ "flake-utils_5": {
"inputs": {
- "systems": "systems_7"
+ "systems": "systems_8"
},
"locked": {
"lastModified": 1705309234,
@@ -271,7 +302,13 @@
}
},
"gitignore": {
- "flake": false,
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "pre-commit-hooks",
+ "nixpkgs"
+ ]
+ },
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
@@ -287,6 +324,22 @@
}
},
"gitignore_2": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1762808025,
+ "narHash": "sha256-XmjITeZNMTQXGhhww6ed/Wacy2KzD6svioyCX7pkUu4=",
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "rev": "cb5e3fdca1de58ccbc3ef53de65bd372b48f567c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "type": "github"
+ }
+ },
+ "gitignore_3": {
"inputs": {
"nixpkgs": [
"zls",
@@ -314,11 +367,11 @@
]
},
"locked": {
- "lastModified": 1755810213,
- "narHash": "sha256-QdenO8f0PTg+tC6HuSvngKcbRZA5oZKmjUT+MXKOLQg=",
+ "lastModified": 1768018810,
+ "narHash": "sha256-WREj1ZQ2wSGtyPAhQJ3SX/7PJ29PNKv04h/7NgqUS+M=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "6911d3e7f475f7b3558b4f5a6aba90fa86099baa",
+ "rev": "7c5d9345ad7cc38832cd4007f5cd03daad64d75b",
"type": "github"
},
"original": {
@@ -328,6 +381,325 @@
"type": "github"
}
},
+ "hyprcursor": {
+ "inputs": {
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1753964049,
+ "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "type": "github"
+ }
+ },
+ "hyprgraphics": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1766946335,
+ "narHash": "sha256-MRD+Jr2bY11MzNDfenENhiK6pvN+nHygxdHoHbZ1HtE=",
+ "owner": "hyprwm",
+ "repo": "hyprgraphics",
+ "rev": "4af02a3925b454deb1c36603843da528b67ded6c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprgraphics",
+ "type": "github"
+ }
+ },
+ "hyprland": {
+ "inputs": {
+ "aquamarine": "aquamarine",
+ "hyprcursor": "hyprcursor",
+ "hyprgraphics": "hyprgraphics",
+ "hyprland-guiutils": "hyprland-guiutils",
+ "hyprland-protocols": "hyprland-protocols",
+ "hyprlang": "hyprlang",
+ "hyprutils": "hyprutils",
+ "hyprwayland-scanner": "hyprwayland-scanner",
+ "hyprwire": "hyprwire",
+ "nixpkgs": "nixpkgs",
+ "pre-commit-hooks": "pre-commit-hooks",
+ "systems": "systems_2",
+ "xdph": "xdph"
+ },
+ "locked": {
+ "lastModified": 1768000181,
+ "narHash": "sha256-/E66+tcVBnvJcOFL/CjnjBfKew6A2e+28EZrcRHioBw=",
+ "owner": "hyprwm",
+ "repo": "Hyprland",
+ "rev": "81e7498ec27156ee97aabba6fe4993412d98d1ab",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "Hyprland",
+ "type": "github"
+ }
+ },
+ "hyprland-guiutils": {
+ "inputs": {
+ "aquamarine": [
+ "hyprland",
+ "aquamarine"
+ ],
+ "hyprgraphics": [
+ "hyprland",
+ "hyprgraphics"
+ ],
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "hyprtoolkit": "hyprtoolkit",
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "hyprwayland-scanner": [
+ "hyprland",
+ "hyprwayland-scanner"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1767023960,
+ "narHash": "sha256-R2HgtVS1G3KSIKAQ77aOZ+Q0HituOmPgXW9nBNkpp3Q=",
+ "owner": "hyprwm",
+ "repo": "hyprland-guiutils",
+ "rev": "c2e906261142f5dd1ee0bfc44abba23e2754c660",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-guiutils",
+ "type": "github"
+ }
+ },
+ "hyprland-protocols": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1765214753,
+ "narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=",
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "type": "github"
+ }
+ },
+ "hyprlang": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1764612430,
+ "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=",
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "rev": "0d00dc118981531aa731150b6ea551ef037acddd",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "type": "github"
+ }
+ },
+ "hyprtoolkit": {
+ "inputs": {
+ "aquamarine": [
+ "hyprland",
+ "hyprland-guiutils",
+ "aquamarine"
+ ],
+ "hyprgraphics": [
+ "hyprland",
+ "hyprland-guiutils",
+ "hyprgraphics"
+ ],
+ "hyprlang": [
+ "hyprland",
+ "hyprland-guiutils",
+ "hyprlang"
+ ],
+ "hyprutils": [
+ "hyprland",
+ "hyprland-guiutils",
+ "hyprutils"
+ ],
+ "hyprwayland-scanner": [
+ "hyprland",
+ "hyprland-guiutils",
+ "hyprwayland-scanner"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "hyprland-guiutils",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "hyprland-guiutils",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1764592794,
+ "narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=",
+ "owner": "hyprwm",
+ "repo": "hyprtoolkit",
+ "rev": "5cfe0743f0e608e1462972303778d8a0859ee63e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprtoolkit",
+ "type": "github"
+ }
+ },
+ "hyprutils": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1766253372,
+ "narHash": "sha256-1+p4Kw8HdtMoFSmJtfdwjxM4bPxDK9yg27SlvUMpzWA=",
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "rev": "51a4f93ce8572e7b12b7284eb9e6e8ebf16b4be9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "type": "github"
+ }
+ },
+ "hyprwayland-scanner": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1763640274,
+ "narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=",
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "type": "github"
+ }
+ },
+ "hyprwire": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1767473322,
+ "narHash": "sha256-RGOeG+wQHeJ6BKcsSB8r0ZU77g9mDvoQzoTKj2dFHwA=",
+ "owner": "hyprwm",
+ "repo": "hyprwire",
+ "rev": "d5e7d6b49fe780353c1cf9a1cf39fa8970bd9d11",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprwire",
+ "type": "github"
+ }
+ },
"langref": {
"flake": false,
"locked": {
@@ -342,11 +714,11 @@
},
"mnw": {
"locked": {
- "lastModified": 1748710831,
- "narHash": "sha256-eZu2yH3Y2eA9DD3naKWy/sTxYS5rPK2hO7vj8tvUCSU=",
+ "lastModified": 1758834834,
+ "narHash": "sha256-Y7IvY4F8vajZyp3WGf+KaiIVwondEkMFkt92Cr9NZmg=",
"owner": "Gerg-L",
"repo": "mnw",
- "rev": "cff958a4e050f8d917a6ff3a5624bc4681c6187d",
+ "rev": "cfbc7d1cc832e318d0863a5fc91d940a96034001",
"type": "github"
},
"original": {
@@ -357,17 +729,16 @@
},
"moonlight": {
"inputs": {
- "flake-utils": "flake-utils_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
- "lastModified": 1754439168,
- "narHash": "sha256-NcwRidwb/ask65LE86os4RkhyoPQo5sLu0sJs/NboK4=",
+ "lastModified": 1765916709,
+ "narHash": "sha256-qc4m7v8hGOMb9BVLuiQZAbgzHoKfVwEY7HUl9fsY/hE=",
"owner": "moonlight-mod",
"repo": "moonlight",
- "rev": "66b81b113afd6654a88c9adb7edb7fe92839fe84",
+ "rev": "d0ad754cf0b9c5a34d7f69595f407c8199f988ce",
"type": "github"
},
"original": {
@@ -376,6 +747,39 @@
"type": "github"
}
},
+ "ndg": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_4"
+ },
+ "locked": {
+ "lastModified": 1765435293,
+ "narHash": "sha256-HRp4g6qBCb8vpJ17s2FacMRXRszM73uBiR56aILMELA=",
+ "owner": "feel-co",
+ "repo": "ndg",
+ "rev": "65bf834b332d5f8b28d95ea14c7974be7c272971",
+ "type": "github"
+ },
+ "original": {
+ "owner": "feel-co",
+ "repo": "ndg",
+ "type": "github"
+ }
+ },
+ "nix-filter": {
+ "locked": {
+ "lastModified": 1693833173,
+ "narHash": "sha256-hlMABKrGbEiJD5dwUSfnw1CQ3bG7KKwDV+Nx3bEZd7U=",
+ "owner": "numtide",
+ "repo": "nix-filter",
+ "rev": "ac030bd9ba98e318e1f4c4328d60766ade8ebe8b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "nix-filter",
+ "type": "github"
+ }
+ },
"nix-index-database": {
"inputs": {
"nixpkgs": [
@@ -383,11 +787,11 @@
]
},
"locked": {
- "lastModified": 1755404379,
- "narHash": "sha256-Q6ZxZDBmD/B988Jjbx7/NchxOKIpOKBBrx9Yb0zMzpQ=",
+ "lastModified": 1765267181,
+ "narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
"owner": "nix-community",
"repo": "nix-index-database",
- "rev": "ebbc1c05f786ae39bb5e04e57bf2c10c44a649e3",
+ "rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
"type": "github"
},
"original": {
@@ -398,16 +802,16 @@
},
"nix-options-search": {
"inputs": {
- "flake-utils": "flake-utils_3",
- "gitignore": "gitignore",
- "nixpkgs": "nixpkgs"
+ "flake-utils": "flake-utils_2",
+ "gitignore": "gitignore_2",
+ "nixpkgs": "nixpkgs_2"
},
"locked": {
- "lastModified": 1743876182,
- "narHash": "sha256-qfiVewr5huupheLqStX60JSbjBEm9/PDncLQXE0dsXo=",
+ "lastModified": 1765642879,
+ "narHash": "sha256-LIKEZW++qgg8FSpJtAayv6yfIF3CO42GpryyeJ4pk7M=",
"owner": "madsbv",
"repo": "nix-options-search",
- "rev": "f52dc6986161570a2ffffdf337c88b503e9a58fb",
+ "rev": "b91e3ad2b4f3afbf0ceadb140fb9a0d342733b2e",
"type": "github"
},
"original": {
@@ -418,15 +822,15 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1736012469,
- "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=",
- "owner": "nixos",
+ "lastModified": 1767379071,
+ "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=",
+ "owner": "NixOS",
"repo": "nixpkgs",
- "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d",
+ "rev": "fb7944c166a3b630f177938e478f0378e64ce108",
"type": "github"
},
"original": {
- "owner": "nixos",
+ "owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
@@ -434,20 +838,68 @@
},
"nixpkgs_2": {
"locked": {
- "lastModified": 1755615617,
- "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=",
+ "lastModified": 1762977756,
+ "narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_3": {
+ "locked": {
+ "lastModified": 1767966113,
+ "narHash": "sha256-mSTsvXa4WveSRJexsmCbm9dY17B1fKp7NLpJxllpQw4=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "20075955deac2583bb12f07151c2df830ef346b4",
+ "rev": "5f02c91314c8ba4afe83b256b023756412218535",
"type": "github"
},
"original": {
"id": "nixpkgs",
- "ref": "nixos-unstable",
+ "ref": "nixpkgs-unstable",
"type": "indirect"
}
},
- "nixpkgs_3": {
+ "nixpkgs_4": {
+ "locked": {
+ "lastModified": 1764242076,
+ "narHash": "sha256-sKoIWfnijJ0+9e4wRvIgm/HgE27bzwQxcEmo2J/gNpI=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "2fad6eac6077f03fe109c4d4eb171cf96791faa4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_5": {
+ "locked": {
+ "lastModified": 1762111121,
+ "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_6": {
"locked": {
"lastModified": 1708161998,
"narHash": "sha256-6KnemmUorCvlcAvGziFosAVkrlWZGIc6UNT9GUYr0jQ=",
@@ -463,7 +915,7 @@
"type": "github"
}
},
- "nixpkgs_4": {
+ "nixpkgs_7": {
"locked": {
"lastModified": 1717696253,
"narHash": "sha256-1+ua0ggXlYYPLTmMl3YeYYsBXDSCqT+Gw3u6l4gvMhA=",
@@ -481,20 +933,21 @@
},
"nvf": {
"inputs": {
- "flake-compat": "flake-compat",
+ "flake-compat": "flake-compat_2",
"flake-parts": "flake-parts",
"mnw": "mnw",
+ "ndg": "ndg",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_4"
},
"locked": {
- "lastModified": 1755843058,
- "narHash": "sha256-oAajTGcyTzuND7AAlaRXO+wF7ytAMOnrE4sYUjRonB8=",
+ "lastModified": 1765537745,
+ "narHash": "sha256-EaFYxx2aSuM2xx+l+E55YNMCJOoQBl2tJybxyF0pPqw=",
"owner": "notashelf",
"repo": "nvf",
- "rev": "d36996c8ba5c8d68b5def1b660e06d281ef0a3a8",
+ "rev": "8e031476d0d7f326b63c9c5522f840e2f8b724c0",
"type": "github"
},
"original": {
@@ -516,18 +969,44 @@
"url": "https://devimages-cdn.apple.com/design/resources/download/NY.dmg"
}
},
+ "pre-commit-hooks": {
+ "inputs": {
+ "flake-compat": "flake-compat",
+ "gitignore": "gitignore",
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1767281941,
+ "narHash": "sha256-6MkqajPICgugsuZ92OMoQcgSHnD6sJHwk8AxvMcIgTE=",
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "rev": "f0927703b7b1c8d97511c4116eb9b4ec6645a0fa",
+ "type": "github"
+ },
+ "original": {
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "type": "github"
+ }
+ },
"root": {
"inputs": {
"android-nixpkgs": "android-nixpkgs",
"apple-fonts": "apple-fonts",
"darwin": "darwin",
"home-manager": "home-manager",
+ "hyprland": "hyprland",
"moonlight": "moonlight",
"nix-index-database": "nix-index-database",
"nix-options-search": "nix-options-search",
- "nixpkgs": "nixpkgs_2",
+ "nixpkgs": "nixpkgs_3",
"nvf": "nvf",
"rust-overlay": "rust-overlay",
+ "split-monitor-workspaces": "split-monitor-workspaces",
+ "vicinae": "vicinae",
"zen-browser": "zen-browser",
"zig": "zig",
"zls": "zls"
@@ -540,11 +1019,11 @@
]
},
"locked": {
- "lastModified": 1755830208,
- "narHash": "sha256-fMa/Hcg+4O2h+kl3gNPjtGSWPI8NtCl3LYMsejK6qGA=",
+ "lastModified": 1768012928,
+ "narHash": "sha256-HFFVQaux1JoOjEvgBT0ASk1Je+jsipyO5c91FoLMed8=",
"owner": "oxalica",
"repo": "rust-overlay",
- "rev": "802a7b97f8ff672ba2dec70c9e354f51f844e796",
+ "rev": "312b4371e72f644ffcff25b23615195e3b390643",
"type": "github"
},
"original": {
@@ -580,7 +1059,7 @@
"sf-compact": {
"flake": false,
"locked": {
- "narHash": "sha256-VMCf2Mhmx/qhLRQxlTAsQWxtonS27kPW+oTYBBRWHMg=",
+ "narHash": "sha256-WeqT80cdK/XzTLSaJs5DHodzxoeAzwL/xTgdq0YwQbM=",
"type": "file",
"url": "https://devimages-cdn.apple.com/design/resources/download/SF-Compact.dmg"
},
@@ -628,7 +1107,7 @@
"sf-pro": {
"flake": false,
"locked": {
- "narHash": "sha256-RX6X2ltVE88Hp1g9tpSywMT3UfdLpRxgw92KRpiAues=",
+ "narHash": "sha256-vprahHpCUf9O8RualBrEuLEfuLfzI/2d8AQmwlCGPPk=",
"type": "file",
"url": "https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"
},
@@ -637,6 +1116,27 @@
"url": "https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"
}
},
+ "split-monitor-workspaces": {
+ "inputs": {
+ "hyprland": [
+ "hyprland"
+ ],
+ "nix-filter": "nix-filter"
+ },
+ "locked": {
+ "lastModified": 1767711026,
+ "narHash": "sha256-yTuyde8TpBR3NhNnOcK4uOGukvMCwrH3otP8E04e9X0=",
+ "owner": "Duckonaut",
+ "repo": "split-monitor-workspaces",
+ "rev": "764548c3aa22c9f4cb436ec7243d21795eb6ebec",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Duckonaut",
+ "repo": "split-monitor-workspaces",
+ "type": "github"
+ }
+ },
"systems": {
"locked": {
"lastModified": 1681028828,
@@ -654,16 +1154,16 @@
},
"systems_2": {
"locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "lastModified": 1689347949,
+ "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "repo": "default-linux",
+ "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
- "repo": "default",
+ "repo": "default-linux",
"type": "github"
}
},
@@ -742,6 +1242,81 @@
"type": "github"
}
},
+ "systems_8": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "vicinae": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_5",
+ "systems": "systems_5"
+ },
+ "locked": {
+ "lastModified": 1767958732,
+ "narHash": "sha256-Jy7Px8fWfZgRRWcv5d8XTddPDaHRJ1o4mG3yTlEkXTo=",
+ "owner": "vicinaehq",
+ "repo": "vicinae",
+ "rev": "c80929ea3f44d540a5063ad1262799aa32a7929c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "vicinaehq",
+ "repo": "vicinae",
+ "type": "github"
+ }
+ },
+ "xdph": {
+ "inputs": {
+ "hyprland-protocols": [
+ "hyprland",
+ "hyprland-protocols"
+ ],
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "hyprwayland-scanner": [
+ "hyprland",
+ "hyprwayland-scanner"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1761431178,
+ "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=",
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "type": "github"
+ }
+ },
"zen-browser": {
"inputs": {
"nixpkgs": [
@@ -749,11 +1324,11 @@
]
},
"locked": {
- "lastModified": 1754886070,
- "narHash": "sha256-MZDmxOkVKL1HY72bliN8Gxh0SYkHUa3W/1fTU2ke36I=",
+ "lastModified": 1767618227,
+ "narHash": "sha256-9+XVF47E9NCVs249SSsDtr7YdG/23/lCJmWAjQvOfqI=",
"owner": "youwen5",
"repo": "zen-browser-flake",
- "rev": "e37d2b326311320c8571111b3ef89b29d26d4b64",
+ "rev": "1586e49b3908b058e221f11d843eb46392dba17b",
"type": "github"
},
"original": {
@@ -763,29 +1338,29 @@
}
},
"zig": {
- "inputs": {
- "flake-compat": "flake-compat_2",
- "flake-utils": "flake-utils_4",
- "nixpkgs": "nixpkgs_3"
- },
- "locked": {
- "lastModified": 1755605615,
- "narHash": "sha256-J0Cxren2QLeI0ZvRZw4XGcMm4q3uPIZHM+eJnaZfXX8=",
- "owner": "mitchellh",
- "repo": "zig-overlay",
- "rev": "714fae26049a263ff2e4641ce7c973f371f4b005",
- "type": "github"
- },
- "original": {
- "owner": "mitchellh",
- "repo": "zig-overlay",
- "type": "github"
- }
- },
- "zig-overlay": {
"inputs": {
"flake-compat": "flake-compat_3",
- "flake-utils": "flake-utils_6",
+ "flake-utils": "flake-utils_3",
+ "nixpkgs": "nixpkgs_6"
+ },
+ "locked": {
+ "lastModified": 1767919086,
+ "narHash": "sha256-t9Z7r8yJDbRqoAhm7vsohHAhMGF373NCWt/XeHlZAWw=",
+ "owner": "mitchellh",
+ "repo": "zig-overlay",
+ "rev": "d7671671de8bd3afcabffefc77c75ed9777b249b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "mitchellh",
+ "repo": "zig-overlay",
+ "type": "github"
+ }
+ },
+ "zig-overlay": {
+ "inputs": {
+ "flake-compat": "flake-compat_4",
+ "flake-utils": "flake-utils_5",
"nixpkgs": [
"zls",
"nixpkgs"
@@ -807,10 +1382,10 @@
},
"zls": {
"inputs": {
- "flake-utils": "flake-utils_5",
- "gitignore": "gitignore_2",
+ "flake-utils": "flake-utils_4",
+ "gitignore": "gitignore_3",
"langref": "langref",
- "nixpkgs": "nixpkgs_4",
+ "nixpkgs": "nixpkgs_7",
"zig-overlay": "zig-overlay"
},
"locked": {
diff --git a/flake.nix b/flake.nix
index cebe693a0da4cbaf4b7f067231349b803ff3d5b3..ffbf73ebbc250227200823d2e60c2cc4139855db 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,7 +1,7 @@
{
description = "multi device configuration flake";
inputs = {
- nixpkgs.url = "nixpkgs/nixos-unstable";
+ nixpkgs.url = "nixpkgs/nixpkgs-unstable";
home-manager.url = "github:nix-community/home-manager/master";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
@@ -24,6 +24,14 @@
moonlight.url = "github:moonlight-mod/moonlight"; # Add `/develop` to the flake URL to use nightly.
moonlight.inputs.nixpkgs.follows = "nixpkgs";
+ hyprland.url = "github:hyprwm/Hyprland";
+ split-monitor-workspaces = {
+ url = "github:Duckonaut/split-monitor-workspaces";
+ inputs.hyprland.follows = "hyprland";
+ };
+
+ vicinae.url = "github:vicinaehq/vicinae";
+
zen-browser = {
url = "github:youwen5/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
@@ -70,6 +78,8 @@
# custom packages
(_: pkgs: {
autofmt = pkgs.callPackage ./packages/autofmt { };
+ exiled_exchange_2 = pkgs.callPackage ./packages/exiled_exchange_2 { };
+ awakened_poe_trade = pkgs.callPackage ./packages/awakened_poe_trade { };
})
];
diff --git a/lib/mkSystem.nix b/lib/mkSystem.nix
index 9e3a13c459d7382e0c7d888d249f7ccb23a00fff..e8f6a0ce18544893f6ecffe87e6e86b065885c44 100644
--- a/lib/mkSystem.nix
+++ b/lib/mkSystem.nix
@@ -76,6 +76,7 @@ let
)
inputs.nvf.homeManagerModules.default
inputs.android-nixpkgs.hmModule
+ inputs.vicinae.homeManagerModules.default
];
in
systemFunc {
diff --git a/modules/home/default.nix b/modules/home/default.nix
index 0ac5223e3ee64e211c6ef563ae76a5f01abd048b..fc538513d7e2b2bfb7916c71e2a97e1aa8bcc633 100644
--- a/modules/home/default.nix
+++ b/modules/home/default.nix
@@ -35,12 +35,12 @@ in
sdk:
with sdk;
[
- build-tools-35-0-0
+ build-tools-36-0-0
cmdline-tools-latest
emulator
platform-tools
- platforms-android-35
- sources-android-35
+ platforms-android-36
+ sources-android-36
ndk-27-1-12297006
cmake-3-22-1
]
@@ -49,8 +49,8 @@ in
system-images-android-35-google-apis-playstore-arm64-v8a
]
++ lib.optionals host.linux [
- system-images-android-35-google-apis-x86-64
- system-images-android-35-google-apis-playstore-x86-64
+ system-images-android-36-google-apis-x86-64
+ system-images-android-36-google-apis-playstore-x86-64
];
};
xdg = {
@@ -69,8 +69,10 @@ in
git = {
enable = true;
- userName = lib.mkDefault user.name;
- userEmail = lib.mkDefault user.email;
+ settings.user = {
+ name = lib.mkDefault user.name;
+ email = lib.mkDefault user.email;
+ };
ignores = [
(lib.mkIf host.darwin ".DS_Store") # When using Finder
(lib.mkIf host.darwin "._*") # When using non-APFS drives
@@ -89,7 +91,7 @@ in
extraPackages = with pkgs.bat-extras; [
batdiff
batman
- batgrep
+ # batgrep
batwatch
batpipe
prettybat
@@ -138,17 +140,19 @@ in
jujutsu = {
settings = {
user = {
- email = config.programs.git.userEmail;
- name = config.programs.git.userName;
+ inherit (config.programs.git.settings.user) name email;
};
- signing = {
- behavior = "own";
- backend = "ssh";
+ signing = lib.mkIf (config.programs.git.signing.format != null) {
+ backend = config.programs.git.signing.format;
key = "~/.ssh/id_ed25519.pub";
+ # signatures are slow, compute them on push instead of on change.
+ behavior = "drop";
};
git = {
- sign-on-push = true;
- push-new-bookmarks = true;
+ sign-on-push = config.programs.git.signing.key != null;
+ };
+ remotes.origin = {
+ auto-track-bookmarks = "glob:*";
};
ui = {
default-command = "log";
diff --git a/modules/neovim/default.nix b/modules/neovim/default.nix
index 6a31c91a848672da9814e0b6bd9e5c5ad48a29f8..e87139d7b90a9538b6e437893ef4fc1a4adca585 100644
--- a/modules/neovim/default.nix
+++ b/modules/neovim/default.nix
@@ -82,7 +82,7 @@
servers.nixd.init_options.autoArchive = true;
};
treesitter = {
- enable = true;
+ enable = false;
addDefaultGrammars = true;
# this is buggy and keybind.nix overwrites its keymaps anyways
incrementalSelection.enable = false;
@@ -99,7 +99,7 @@
};
languages = {
enableFormat = true;
- enableTreesitter = true;
+ enableTreesitter = false;
enableExtraDiagnostics = true;
# enable debug adapter protocol by default
enableDAP = true;
@@ -111,13 +111,13 @@
html.enable = true;
nix.enable = true;
python.enable = true;
- rust.crates.enable = true;
rust.enable = true;
ts.enable = true;
zig.enable = true;
# sort-lines: off
- nix.lsp.servers = "nixd";
+ nix.lsp.servers = [ "nixd" ];
+ rust.extensions.crates-nvim.enable = true;
};
filetree.neo-tree = {
enable = true;
diff --git a/modules/nixos/ld.nix b/modules/nixos/ld.nix
index fc09f687d9e8284eefec1395ab68b70c318597a9..cfbf4e05fed55f65b714cd31efa6fe21a2bcd3fb 100644
--- a/modules/nixos/ld.nix
+++ b/modules/nixos/ld.nix
@@ -6,6 +6,7 @@
programs.nix-ld.libraries = with pkgs; [
# common requirement for several games
stdenv.cc.cc.lib
+ libxcrypt
# from https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/games/steam/fhsenv.nix#L72-L79
xorg.libXcomposite
diff --git a/modules/nixos/services.nix b/modules/nixos/services.nix
index ef9feae71a6c4a24e847da17779522d023138b74..20314be33a994a99e64cfe4c4e0f5866b8d576ef 100644
--- a/modules/nixos/services.nix
+++ b/modules/nixos/services.nix
@@ -22,6 +22,23 @@
};
};
+ gvfs.enable = true;
+
+ gnome = {
+ tinysparql.enable = true;
+ gnome-keyring.enable = true;
+ };
+
+ fstrim.enable = true;
+
+ dbus = {
+ enable = true;
+ packages = [
+ pkgs.gcr
+ pkgs.gnome-settings-daemon
+ ];
+ };
+
# Auto mount devices
udisks2 = {
enable = true;
diff --git a/modules/shared/nix.nix b/modules/shared/nix.nix
index 7997bf0f9cf8b0613f98f2a09d69e8929a9fe821..d07ba84632ced91604678563ceaaa68c313fdc20 100644
--- a/modules/shared/nix.nix
+++ b/modules/shared/nix.nix
@@ -28,11 +28,15 @@
"https://nix-community.cachix.org"
# For haskell
"https://cache.iog.io"
+ #vicinae
+ "https://vicinae.cachix.org"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
# For haskell
"hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
+ #vicinae
+ "vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc="
];
};
gc = {
diff --git a/packages/autofmt/default.nix b/packages/autofmt/default.nix
index fa006e3e7dc0b83bcc7ebb686daafe54b4925e08..45db7d83280d053850fcd1f77fc1a757e338ed38 100644
--- a/packages/autofmt/default.nix
+++ b/packages/autofmt/default.nix
@@ -6,7 +6,7 @@ pkgs.writeShellApplication {
clang-tools
deno
dprint
- nixfmt-rfc-style
+ nixfmt
prettierd # autofmt only runs on a local build of prettier
rustfmt
zig
diff --git a/packages/awakened_poe_trade/default.nix b/packages/awakened_poe_trade/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..d72e45fdf84352955938190fe3a0b9d586eaa259
--- /dev/null
+++ b/packages/awakened_poe_trade/default.nix
@@ -0,0 +1,35 @@
+{ pkgs, lib, ... }:
+
+let
+ pname = "awakened-poe-trade";
+ version = "3.26.102";
+ name = "${pname}-${version}";
+
+ src = pkgs.fetchurl {
+ url = "https://github.com/SnosMe/awakened-poe-trade/releases/download/v${version}/Awakened-PoE-Trade-${version}.AppImage";
+ sha256 = "sha256-kWMRZvAZKzGFXX7QJJN7eIs88ZDGWU8sMuyQhLgPQCY=
+";
+ };
+
+ appimageContents = pkgs.appimageTools.extract { inherit pname version src; };
+in
+pkgs.appimageTools.wrapType2 rec {
+ inherit pname version src;
+
+ extraInstallCommands = ''
+ install -m 444 -D ${appimageContents}/awakened-poe-trade.desktop $out/share/applications/${pname}.desktop
+
+ install -m 444 -D ${appimageContents}/${pname}.png $out/share/icons/hicolor/512x512/apps/${pname}.png
+
+ substituteInPlace $out/share/applications/${pname}.desktop \
+ --replace 'Exec=AppRun --no-sandbox %U' 'Exec=${pname} %U'
+ '';
+
+ meta = with lib; {
+ description = "Awakened-PoE-Trade";
+ homepage = "https://github.com/SnosMe/awakened-poe-trade";
+ license = licenses.mit;
+ maintainers = [ ];
+ platforms = [ "x86_64-linux" ];
+ };
+}
diff --git a/packages/exiled_exchange_2/default.nix b/packages/exiled_exchange_2/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..8413c3bbd97e364a1382defd7d06af914e58e5cd
--- /dev/null
+++ b/packages/exiled_exchange_2/default.nix
@@ -0,0 +1,34 @@
+{ pkgs, lib, ... }:
+
+let
+ pname = "exiled-exchange-2";
+ version = "0.12.6";
+ name = "${pname}-${version}";
+
+ src = pkgs.fetchurl {
+ url = "https://github.com/Kvan7/Exiled-Exchange-2/releases/download/v${version}/Exiled-Exchange-2-${version}.AppImage";
+ sha256 = "sha256-2CBdsLQ0EHTINd05ABv8NyCYt2ipYfwmkcpw0SLZRwc==";
+ };
+
+ appimageContents = pkgs.appimageTools.extract { inherit pname version src; };
+in
+pkgs.appimageTools.wrapType2 rec {
+ inherit pname version src;
+
+ extraInstallCommands = ''
+ install -m 444 -D ${appimageContents}/exiled-exchange-2.desktop $out/share/applications/${pname}.desktop
+
+ install -m 444 -D ${appimageContents}/${pname}.png $out/share/icons/hicolor/512x512/apps/${pname}.png
+
+ substituteInPlace $out/share/applications/${pname}.desktop \
+ --replace 'Exec=AppRun --no-sandbox %U' 'Exec=${pname} %U'
+ '';
+
+ meta = with lib; {
+ description = "Exiled Exchange 2";
+ homepage = "https://kvan7.github.io/Exiled-Exchange-2/";
+ license = licenses.mit;
+ maintainers = [ ];
+ platforms = [ "x86_64-linux" ];
+ };
+}
diff --git a/switch b/switch
index bf5697d655d9362730c9db9854db34b7950154fc..04af03eb5978615a646d5094da65c81dc95f7d60 100755
--- a/switch
+++ b/switch
@@ -1,16 +1,17 @@
#!/bin/sh
+set -e
+cd "$(dirname "$0")"
nh_subcommand="os"
fallback_command="nixos-rebuild"
-hostname_file="$(dirname "$0")/.hostname"
if [ -n "$1" ]; then
hostname="$1"
-elif [ -f "$hostname_file" ]; then
- hostname=$(cat "$hostname_file")
+elif [ -f ".hostname" ]; then
+ hostname=$(cat .hostname)
fi
if [ -z "$hostname" ]; then
hostname="$(hostname)"
fi
-printf "%s" "$hostname" >"$hostname_file"
+printf "%s" "$hostname" >.hostname
if [ "$(uname -o)" = "Darwin" ]; then
nh_subcommand="darwin"
fallback_command="nix run .#darwin-rebuild"
diff --git a/users/clover/configuration.nix b/users/clover/configuration.nix
index 103b011a987ed79def16b4bae7aef256192e681d..a02a361b99dede3b63eeef4c137f3f6e12e9e63e 100644
--- a/users/clover/configuration.nix
+++ b/users/clover/configuration.nix
@@ -17,6 +17,14 @@
];
};
+ homebrew = {
+ enable = true;
+ casks = [
+ "db-browser-for-sqlite"
+ "alt-tab"
+ ];
+ };
+
# system preferences
system.defaults = {
NSGlobalDomain = {
diff --git a/users/clover/home.nix b/users/clover/home.nix
index 4f799cb1e39b41021b6abfc173356266bfab50b0..7e413bb4c3b2119ee41154823fb239c50d796f50 100644
--- a/users/clover/home.nix
+++ b/users/clover/home.nix
@@ -1,4 +1,9 @@
-{ pkgs, host, ... }:
+{
+ config,
+ pkgs,
+ host,
+ ...
+}:
let
hostServer = false;
in
@@ -14,23 +19,19 @@ in
ripgrep
uv
nh
- pkgs.autofmt
+ autofmt
+ gnupg
+ nodejs_24
];
# packages to install for desktop environments (non-server)
desktop = [
- git-town
- lazygit
- jjui
];
# packages to install on all servers
server = [ ];
# packages to install on macOS desktops
- darwin = [
- raycast
- ];
+ darwin = [ ];
# packages to install on linux desktops
linux = [
- reaper # TODO: why does this break on macOS
];
in
all ++ (if host.darwin then darwin else linux) ++ (if hostServer then server else desktop);
@@ -50,23 +51,32 @@ in
settings = {
theme = "light:Farmhouse Light,dark:Challenger Deep";
font-family = "AT Name Mono";
- adjust-cursor-thickness = 1;
- background-opacity = 0.9;
+ adjust-cursor-thickness = 2;
+ background-opacity = 0.95;
background-blur = true;
+ unfocused-split-opacity = 1;
};
};
# zsh is the shell i use
zsh = {
enable = true;
+ dotDir = "${config.xdg.configHome}/zsh";
shellAliases = {
switch = "~/config/switch";
- gg = "lazygit";
- ga = "git add";
- g = "git status";
- gp = "git pull --rebase && git push";
+
+ # move a bookmark from the previous commit
+ jf = "jj git fetch";
+ e = "jj edit";
+ d = "jj desc";
+ bup = "jj b m --from 'heads(::@- & bookmarks())' --to '@'";
+ moveself = "jj rebase -r @ -d";
+ logall = "jj log -r 'all()'";
+ cherry = "jj git fetch && jj split -i -p -m 'SPLIT_CHANGES' && jj edit -r 'description(\"SPLIT_CHANGES\")' && jj desc -m '' --edit";
};
- profileExtra = ''
+ initContent = ''
+ export PS1="%{$(tput setaf 207)%}%m%{$(tput setaf 15)%}:%{$(tput setaf 87)%}%~ %{$(tput sgr0)%}$ "
+
function python() {
dirname=$(dirname $1 2>/dev/null)
if [ -z "$dirname" ]; then
@@ -74,11 +84,44 @@ in
fi
uv run --project "$dirname" "$@"
}
+
+ function bun() {
+ if [[ "$1" = "build" ]]; then
+ command bun run "$@"
+ elif [[ "$1" = "bundle" ]]; then
+ shift
+ command bun build "$@"
+ else
+ command bun "$@"
+ fi
+ }
+
+ function jj() {
+ if [[ "$*" = "git push"* ]] && [[ "$*" != *"--dry-run"* ]]; then
+ command jj "$@" --dry-run
+ printf "Press any key to continue... "
+ read -r
+ command jj "$@"
+ else
+ command jj "$@"
+ fi
+ }
'';
};
- # use a git-specific email
- git.userEmail = "git@paperclover.net";
+ git = {
+ # use a git-specific email
+ settings.user.email = "git@paperclover.net";
+ settings.gpg.ssh.allowedSignersFile = "${pkgs.writeText "allowed_signers" ''
+ git@paperclover.net ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAVa1aq1LEj/VXHJYlR5HJpK65lS/9jOL/dAB9ZS1chd
+ ''}";
+ # signing
+ signing = {
+ signByDefault = true;
+ key = "~/.ssh/id_ed25519";
+ format = "ssh";
+ };
+ };
jujutsu = {
enable = true;
@@ -148,133 +191,39 @@ in
};
# ui.graph.style = "square";
revsets = {
- log = "ancestors(description(regex:\"^(WIP:|\\\\s*$)\"), 3) | ancestors(immutable_heads(), 2) | ancestors(visible_heads(), 2)";
short-prefixes = "(trunk()..@)::";
};
- templates.log = "hl_wip(self)";
-
- template-aliases = {
- # log template, highlighting the WIP commits by making everything else faded out
- "hl_wip(commit)" = ''
- if(commit.root(), format_root_commit(commit),
- label("__commit__",
- format_short_commit_header(commit) ++ "\n" ++
- format_commit_description(commit)
- )
- )
- '';
-
- "format_commit_description(commit)" = ''
- label("desc", format_commit_firstline(commit.description().first_line())) ++
- "\n" ++ if(
- commit.description().starts_with("WIP:") || commit.current_working_copy(),
- commit.description().remove_prefix(commit.description().first_line()).remove_prefix("\n").trim_end() ++ "\n ",
- if(commit.description().remove_prefix(commit.description().first_line()).trim().len() > 0,
- label("muted", lines_collapsed(commit.description().lines().filter(|x| x.trim().len() > 0).len() - 1)),
- " "
- )
- )
- '';
- "lines_collapsed(count)" =
- ''("[" ++ stringify(count ++ " line" ++ if(count == 1, "", "s")) ++ " collapsed]\n")'';
- "format_commit_firstline(line)" = ''
- if(line.starts_with("WIP:"),
- label("cc_wip", " WIP ") ++ " " ++ format_commit_firstline_a_wip(line.remove_prefix("WIP:").trim()),
- format_commit_firstline_a_wip(line)
- )
- '';
- "format_commit_firstline_a_wip(line)" = ''
- if(line.starts_with("feat:") || line.starts_with("feat("),
- label("cc_feat", "feat") ++ format_commit_firstline_a_cc_type(line.remove_prefix("feat")),
- if(line.starts_with("fix:") || line.starts_with("fix("),
- label("cc_fix", "fix") ++ format_commit_firstline_a_cc_type(line.remove_prefix("fix")),
- if(line.starts_with("hotfix:") || line.starts_with("hotfix("),
- label("cc_hotfix", "hotfix") ++ format_commit_firstline_a_cc_type(line.remove_prefix("hotfix")),
- if(line.starts_with("chore:") || line.starts_with("chore("),
- label("cc_chore", "chore") ++ format_commit_firstline_a_cc_type(line.remove_prefix("chore")),
- if(line.starts_with("test:") || line.starts_with("test("),
- label("cc_other", "test") ++ format_commit_firstline_a_cc_type(line.remove_prefix("test")),
- if(line.starts_with("refactor:") || line.starts_with("refactor("),
- label("cc_other", "refactor") ++ format_commit_firstline_a_cc_type(line.remove_prefix("refactor")),
- if(line.starts_with("perf:") || line.starts_with("perf("),
- label("cc_other", "perf") ++ format_commit_firstline_a_cc_type(line.remove_prefix("perf")),
- if(line.starts_with("lib:") || line.starts_with("lib("),
- label("cc_other", "lib") ++ format_commit_firstline_a_cc_type(line.remove_prefix("lib")),
- label("cc_header", line)
- ))))))))
- '';
- "format_commit_firstline_a_cc_type(rest)" = ''
- if(rest.starts_with("(") && rest.contains(")"),
- format_firstline_cc_scope(rest, index_of_close_paren(rest)),
- format_firstline_a_cc(rest))
- '';
- "format_firstline_cc_scope(rest, index)" = ''
- label("cc_scope", rest.substr(0, index)) ++ format_firstline_a_cc(rest.substr(index, rest.len()))
- '';
- "format_firstline_a_cc(rest)" = ''
- if(rest.starts_with(":"),
- label("muted", ":") ++ label("cc_header", rest.remove_prefix(":")),
- label("cc_header", rest)
- )
- '';
- # sorry!
- "index_of_close_paren(line)" = ''
- stringify(if(line.substr(1, 2) == ")", "A",
- if(line.substr(2, 3) == ")", "AA",
- if(line.substr(3, 4) == ")", "AAA",
- if(line.substr(4, 5) == ")", "AAAA",
- if(line.substr(5, 6) == ")", "AAAAA",
- if(line.substr(6, 7) == ")", "AAAAAA",
- if(line.substr(7, 8) == ")", "AAAAAAA",
- if(line.substr(8, 9) == ")", "AAAAAAAA",
- if(line.substr(9, 10) == ")","AAAAAAAAA",
- if(line.substr(10, 11) == ")", "AAAAAAAAAA",
- if(line.substr(11, 12) == ")", "AAAAAAAAAAA",
- if(line.substr(12, 13) == ")", "AAAAAAAAAAAA",
- if(line.substr(13, 14) == ")", "AAAAAAAAAAAAA",
- if(line.substr(14, 15) == ")", "AAAAAAAAAAAAAA",
- if(line.substr(15, 16) == ")", "AAAAAAAAAAAAAAA",
- if(line.substr(16, 17) == ")", "AAAAAAAAAAAAAAAA",
- if(line.substr(17, 18) == ")", "AAAAAAAAAAAAAAAAA",
- if(line.substr(18, 19) == ")", "AAAAAAAAAAAAAAAAAA",
- if(line.substr(19, 20) == ")", "AAAAAAAAAAAAAAAAAAA",
- if(line.substr(20, 21) == ")", "AAAAAAAAAAAAAAAAAAAA",
- "AAAAAAAAAAAAAAAAAAAAA"
- ))))))))))))))))))))).len() + 1
- '';
-
- "format_short_signature(signature)" = "signature.name()";
- "format_timestamp(timestamp)" = "timestamp.ago()";
- "format_short_commit_header(commit)" = ''
- separate(" ",
- if(commit.current_working_copy(), label("active_marker", " ACTIVE ")),
- if(commit.conflict(), label("conflict_marker", " CONFLICT ")),
- format_short_change_id_with_hidden_and_divergent_info(commit),
- format_short_signature(commit.author()),
- label("muted", "|"),
- if(commit.description().trim().len() > 0, label("muted", format_timestamp(commit_timestamp(commit)))),
- commit.bookmarks(),
- commit.tags(),
- commit.working_copies(),
- label("muted", "(") ++
- format_short_commit_id(commit.commit_id()) ++
- label("muted", ")"),
- if(config("ui.show-cryptographic-signatures").as_boolean(),
- format_short_cryptographic_signature(commit.signature())),
- )
- '';
+ aliases = {
+ "ab" = [ "abandon" ];
+ # "ai" = [
+ # "util"
+ # "exec"
+ # "--"
+ # "~/jj-ai-sync.sh"
+ # ];
};
};
};
ssh = {
enable = true;
+ enableDefaultConfig = false;
+ extraConfig = ''
+ Include ~/.orbstack/ssh/config*
+
+ SetEnv TERM=xterm-256color
+ '';
matchBlocks = rec {
+ "*" = { };
zenith = {
user = "clo";
- port = 222;
+ port = 22;
+ };
+ "git.paperclover.net" = zenith;
+ "paperclover.net" = {
+ user = "clo";
+ port = 22;
};
- "nas.paperclover.net" = zenith;
};
};
};
diff --git a/users/clover/paperback/configuration.nix b/users/clover/paperback/configuration.nix
index 33d6590bbae174414152184a49ac07e49f4204a8..87a13d7f8638f6a81a6931539129b22e07a0512c 100644
--- a/users/clover/paperback/configuration.nix
+++ b/users/clover/paperback/configuration.nix
@@ -1,8 +1,2 @@
_: {
- homebrew = {
- enable = true;
- casks = [
- "db-browser-for-sqlite"
- ];
- };
}
diff --git a/users/clover/paperback/home.nix b/users/clover/paperback/home.nix
index 47d88a2034872f1efc7c06355eef2e3b004436b3..6686bc71ada574880cc557bb0207d2d8cef33c11 100644
--- a/users/clover/paperback/home.nix
+++ b/users/clover/paperback/home.nix
@@ -12,7 +12,6 @@
};
home.packages = with pkgs; [
deno
- nodejs_22
rustup
typescript
pm2
diff --git a/users/clover/work/home.nix b/users/clover/work/home.nix
index a5fb595349707f6b857c0e40e4208e08ccdeb756..a6687ddcafbae66923c46d6cd449de1514f6eccc 100644
--- a/users/clover/work/home.nix
+++ b/users/clover/work/home.nix
@@ -8,17 +8,17 @@
}
'';
};
+ programs.git.signing.key = "CE485807AE4068AF8508C8DC5CBB21841C7920AD";
home.packages = with pkgs; [
(bun.overrideAttrs (_: rec {
- version = "1.1.17";
+ version = "1.3.0";
src = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-darwin-aarch64.zip";
- hash = "sha256-aULgRZ9evcGUhKJ6slLJOg3IEzUeNfIkJF8RDP3YUlo=";
+ hash = "sha256-hYSOP5ZIHvyr51pQD9O5S5u5VoaretCjiSl2x74VA2o=";
};
}))
doppler
deno
- nodejs_24
rustup
typescript
ssm-session-manager-plugin
diff --git a/users/natalie/desktop/configuration.nix b/users/natalie/desktop/configuration.nix
index ade64ee3abc72adf0e5e2918d0dfeb9ff90c28e6..4a872b330b4d5d554afffaff5293e37653e2d7c4 100644
--- a/users/natalie/desktop/configuration.nix
+++ b/users/natalie/desktop/configuration.nix
@@ -10,7 +10,19 @@
./hardware-configuration.nix
];
documentation.man.generateCaches = false;
+ services.displayManager = {
+ enable = true;
+ sddm = {
+ enable = true;
+ wayland.enable = true;
+ };
+ };
+
programs = {
+ hyprland = {
+ enable = true;
+ withUWSM = true;
+ };
gamemode.enable = true;
_1password.enable = true;
@@ -35,7 +47,19 @@
steam = {
enable = true;
- package = with pkgs; steam.override { extraPkgs = pkgs: [ attr ]; };
+ remotePlay.openFirewall = true;
+
+ gamescopeSession.enable = true;
+ extraCompatPackages = [ pkgs.proton-ge-bin ];
+ };
+
+ gamescope = {
+ enable = true;
+ capSysNice = true;
+ args = [
+ "--rt"
+ "--expose-wayland"
+ ];
};
git = {
@@ -56,12 +80,23 @@
};
hardware.bluetooth.enable = true;
+ hardware.graphics.enable = true;
xdg.portal = {
enable = true;
+ xdgOpenUsePortal = true;
+ config = {
+ common.default = [ "gtk" ];
+ hyprland.default = [
+ "gtk"
+ "hyprland"
+ ];
+ };
+
extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
};
virtualisation = {
+ waydroid.enable = true;
containers.enable = true;
podman = {
enable = true;
@@ -83,6 +118,7 @@
hibernate.enable = false;
hybrid-sleep.enable = false;
};
+ settings.Manager.DefaultTimeoutStopSec = "10s";
services.monitord.wantedBy = [ "multi-user.target" ];
};
@@ -121,11 +157,6 @@
# Enable sound with pipewire.
security.rtkit.enable = true;
- services = {
- desktopManager.cosmic.enable = true;
- displayManager.cosmic-greeter.enable = true;
- desktopManager.cosmic.xwayland.enable = true;
- };
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
diff --git a/users/natalie/desktop/home.nix b/users/natalie/desktop/home.nix
index 6b220f0b2bc58d2861e9dc5588ff4c6576b147cc..65b4bcabdea99e9732feabd3f5c32a821af45c97 100644
--- a/users/natalie/desktop/home.nix
+++ b/users/natalie/desktop/home.nix
@@ -15,8 +15,7 @@
packages = with pkgs; [
#building macos apps hard :(
ghostty
- stremio
- julia
+ #stremio broken qtwebengine
qbittorrent
#gaming
@@ -34,6 +33,9 @@
limo
nexusmods-app-unfree
protontricks
+ (pkgs.callPackage ../../../packages/exiled_exchange_2 { })
+ awakened_poe_trade
+ fuse-overlayfs
#window manager stuff
wofi
diff --git a/users/natalie/home.nix b/users/natalie/home.nix
index f5999757d79db11a7c1160fa9a88551a997f1f81..1001ee382ad204cee304754fa57b626df11e4f0b 100644
--- a/users/natalie/home.nix
+++ b/users/natalie/home.nix
@@ -5,6 +5,9 @@
...
}@args:
{
+ imports = [
+ ./home
+ ];
programs = {
# sort-lines:start
atuin.enable = true;
@@ -28,6 +31,10 @@
};
};
# sort-lines:end
+ ghostty = {
+ enable = true;
+ settings.theme = "Catppuccin Mocha";
+ };
fish = {
shellAliases =
diff --git a/users/natalie/home/default.nix b/users/natalie/home/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..445c2f4561b6fe3a0a7c394810c132ce4da4e2e2
--- /dev/null
+++ b/users/natalie/home/default.nix
@@ -0,0 +1,12 @@
+{ ... }:
+{
+ imports = [
+ ./tmux.nix
+ ./hyprland
+ ./vicinae.nix
+ ./swaync.nix
+ ./gtk.nix
+ ./waybar
+ ./scripts
+ ];
+}
diff --git a/users/natalie/home/gtk.nix b/users/natalie/home/gtk.nix
new file mode 100644
index 0000000000000000000000000000000000000000..586985e1e4dcf610ea367eca2f3a6d2fd001164b
--- /dev/null
+++ b/users/natalie/home/gtk.nix
@@ -0,0 +1,35 @@
+{ pkgs, ... }:
+{
+
+ gtk = {
+ enable = true;
+
+ font = {
+ name = "Maple Mono";
+ size = 12;
+ };
+ theme = {
+ name = "Catppuccin-GTK-Dark";
+ package = pkgs.magnetic-catppuccin-gtk.override {
+ tweaks = [
+ "float"
+ ];
+ };
+ };
+ iconTheme = {
+ name = "Papirus-Dark";
+ package = pkgs.papirus-icon-theme;
+ };
+ cursorTheme = {
+ name = "Bibata-Modern-Ice";
+ package = pkgs.bibata-cursors;
+ size = 24;
+ };
+ };
+
+ home.pointerCursor = {
+ name = "Bibata-Modern-Ice";
+ package = pkgs.bibata-cursors;
+ size = 24;
+ };
+}
diff --git a/users/natalie/home/hyprland/binds.nix b/users/natalie/home/hyprland/binds.nix
new file mode 100644
index 0000000000000000000000000000000000000000..139396467a12283c9eac0839dfed3080b3712384
--- /dev/null
+++ b/users/natalie/home/hyprland/binds.nix
@@ -0,0 +1,158 @@
+{ pkgs, ... }:
+{
+ wayland.windowManager.hyprland.settings = {
+ binds = {
+ movefocus_cycles_fullscreen = true;
+ };
+
+ bind = [
+ # show keybinds list
+ "$mainMod, F1, exec, show-keybinds"
+
+ # keybindings
+ "$mainMod, Return, exec, ${pkgs.ghostty}/bin/ghostty --gtk-single-instance=true"
+ "$mainMod, P, pseudo,"
+ "$mainMod, C, killactive,"
+ "$mainMod, M, exit, "
+ "$mainMod, E, exec, $fileManager"
+ "$mainMod, F, togglefloating,"
+ "$mainMod, R, exec, $menu "
+ "$mainMod, J, togglesplit "
+ "$mainMod, Space, exec, vicinae vicinae://toggle"
+ # "ALT, Return, exec, [float; size 1111 700] ghostty"
+ # "$mainMod SHIFT, Return, exec, [fullscreen] ghostty"
+ # "$mainMod, B, exec, [workspace 1 silent] zen-beta"
+ # "$mainMod, Q, killactive,"
+ # "$mainMod, F, fullscreen, 0"
+ # "$mainMod SHIFT, F, fullscreen, 1"
+ # "$mainMod, Space, exec, toggle-float"
+ # "$mainMod SHIFT, D, exec, webcord --enable-features=UseOzonePlatform --ozone-platform=wayland"
+ # "$mainMod SHIFT, S, exec, hyprctl dispatch exec '[workspace 5 silent] SoundWireServer'"
+ # "$mainMod, Escape, exec, swaylock"
+ # "ALT, Escape, exec, hyprlock"
+ # "$mainMod SHIFT, Escape, exec, power-menu"
+ # "$mainMod, X, togglesplit,"
+ # "$mainMod, T, exec, toggle-oppacity"
+ # "$mainMod, E, exec, nemo"
+ # "ALT, E, exec, hyprctl dispatch exec '[float; size 1111 700] nemo'"
+ # "$mainMod SHIFT, B, exec, toggle-waybar"
+ # "$mainMod, C ,exec, hyprpicker -a"
+ # "$mainMod, W,exec, wallpaper-picker"
+ # "$mainMod SHIFT, W,exec, hyprctl dispatch exec '[float; size 925 615] waypaper'"
+ # "$mainMod, N, exec, swaync-client -t -sw"
+ # "CTRL SHIFT, Escape, exec, hyprctl dispatch exec '[workspace 9] missioncenter'"
+ # "$mainMod, equal, exec, woomer"
+ # "$mainMod SHIFT, W, exec, vm-start"
+
+ # screenshot
+ ",Print, exec, screenshot --copy"
+ "$mainMod, Print, exec, screenshot --save"
+ "$mainMod SHIFT, Print, exec, screenshot --swappy"
+
+ # switch focus
+ "$mainMod, left, movefocus, l"
+ "$mainMod, right, movefocus, r"
+ "$mainMod, up, movefocus, u"
+ "$mainMod, down, movefocus, d"
+ "$mainMod, h, movefocus, l"
+ "$mainMod, j, movefocus, d"
+ "$mainMod, k, movefocus, u"
+ "$mainMod, l, movefocus, r"
+
+ "$mainMod, left, alterzorder, top"
+ "$mainMod, right, alterzorder, top"
+ "$mainMod, up, alterzorder, top"
+ "$mainMod, down, alterzorder, top"
+ "$mainMod, h, alterzorder, top"
+ "$mainMod, j, alterzorder, top"
+ "$mainMod, k, alterzorder, top"
+ "$mainMod, l, alterzorder, top"
+
+ "CTRL ALT, up, exec, hyprctl dispatch focuswindow floating"
+ "CTRL ALT, down, exec, hyprctl dispatch focuswindow tiled"
+
+ # switch workspace
+ "$mainMod, 1, split-workspace, 1"
+ "$mainMod, 2, split-workspace, 2"
+ "$mainMod, 3, split-workspace, 3"
+ "$mainMod, 4, split-workspace, 4"
+ "$mainMod, 5, split-workspace, 5"
+ "$mainMod, 6, split-workspace, 6"
+ "$mainMod, 7, split-workspace, 7"
+ "$mainMod, 8, split-workspace, 8"
+ "$mainMod, 9, split-workspace, 9"
+ "$mainMod, 0, split-workspace, 10"
+
+ # same as above, but switch to the workspace
+ "$mainMod SHIFT, 1, split-movetoworkspacesilent, 1" # movetoworkspacesilent
+ "$mainMod SHIFT, 2, split-movetoworkspacesilent, 2"
+ "$mainMod SHIFT, 3, split-movetoworkspacesilent, 3"
+ "$mainMod SHIFT, 4, split-movetoworkspacesilent, 4"
+ "$mainMod SHIFT, 5, split-movetoworkspacesilent, 5"
+ "$mainMod SHIFT, 6, split-movetoworkspacesilent, 6"
+ "$mainMod SHIFT, 7, split-movetoworkspacesilent, 7"
+ "$mainMod SHIFT, 8, split-movetoworkspacesilent, 8"
+ "$mainMod SHIFT, 9, split-movetoworkspacesilent, 9"
+ "$mainMod SHIFT, 0, split-movetoworkspacesilent, 10"
+ "$mainMod CTRL, c, split-movetoworkspace, empty"
+
+ # window control
+ "$mainMod SHIFT, left, movewindow, l"
+ "$mainMod SHIFT, right, movewindow, r"
+ "$mainMod SHIFT, up, movewindow, u"
+ "$mainMod SHIFT, down, movewindow, d"
+ "$mainMod SHIFT, h, movewindow, l"
+ "$mainMod SHIFT, j, movewindow, d"
+ "$mainMod SHIFT, k, movewindow, u"
+ "$mainMod SHIFT, l, movewindow, r"
+
+ "$mainMod CTRL, left, resizeactive, -80 0"
+ "$mainMod CTRL, right, resizeactive, 80 0"
+ "$mainMod CTRL, up, resizeactive, 0 -80"
+ "$mainMod CTRL, down, resizeactive, 0 80"
+ "$mainMod CTRL, h, resizeactive, -80 0"
+ "$mainMod CTRL, j, resizeactive, 0 80"
+ "$mainMod CTRL, k, resizeactive, 0 -80"
+ "$mainMod CTRL, l, resizeactive, 80 0"
+
+ "$mainMod ALT, left, moveactive, -80 0"
+ "$mainMod ALT, right, moveactive, 80 0"
+ "$mainMod ALT, up, moveactive, 0 -80"
+ "$mainMod ALT, down, moveactive, 0 80"
+ "$mainMod ALT, h, moveactive, -80 0"
+ "$mainMod ALT, j, moveactive, 0 80"
+ "$mainMod ALT, k, moveactive, 0 -80"
+ "$mainMod ALT, l, moveactive, 80 0"
+
+ # media and volume controls
+ # ",XF86AudioMute,exec, pamixer -t"
+ ",XF86AudioPlay,exec, playerctl play-pause"
+ ",XF86AudioNext,exec, playerctl next"
+ ",XF86AudioPrev,exec, playerctl previous"
+ ",XF86AudioStop,exec, playerctl stop"
+
+ "$mainMod, mouse_down, split-workspace, e-1"
+ "$mainMod, mouse_up, split-workspace, e+1"
+
+ # clipboard manager
+ "$mainMod, V, exec, vicinae vicinae://extensions/vicinae/clipboard/history"
+ #awakened-poe-trade
+ # "SHIFT,Space,pass,class:^(awakened-poe-trade)$"
+ # "CTRL,D,pass,class:^(awakened-poe-trade)$"
+ # "CTRL ALT,D,pass,class:^(awakened-poe-trade)$"
+ ];
+
+ bindel = [
+ ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
+ ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
+ ",XF86AudioMute, exec, pctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
+ ",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
+ ];
+
+ # mouse binding
+ bindm = [
+ "$mainMod, mouse:272, movewindow"
+ "$mainMod, mouse:273, resizewindow"
+ ];
+ };
+}
diff --git a/users/natalie/home/hyprland/default.nix b/users/natalie/home/hyprland/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..da0fd590c1994b21a6922fac68598c1aa70d60da
--- /dev/null
+++ b/users/natalie/home/hyprland/default.nix
@@ -0,0 +1,14 @@
+{ ... }:
+{
+ imports = [
+ ./hyprland.nix
+ ./exec-once.nix
+ ./monitors.nix
+ ./settings.nix
+ ./binds.nix
+ ./windowrules.nix
+ ./hyprlock.nix
+ ./variables.nix
+ ./plugins.nix
+ ];
+}
diff --git a/users/natalie/home/hyprland/exec-once.nix b/users/natalie/home/hyprland/exec-once.nix
new file mode 100644
index 0000000000000000000000000000000000000000..947de457ba8c0b7d42dbd3245fb63264244fed9b
--- /dev/null
+++ b/users/natalie/home/hyprland/exec-once.nix
@@ -0,0 +1,31 @@
+{
+ pkgs,
+ inputs,
+ currentSystem,
+ ...
+}:
+{
+ wayland.windowManager.hyprland.settings.exec-once = [
+ # "hash dbus-update-activation-environment 2>/dev/null"
+ "dbus-update-activation-environment --all --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
+ "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
+
+ "${pkgs.hyprlock}/bin/hyprlock"
+
+ "${pkgs.networkmanagerapplet}/bin/nm-applet &"
+ "${pkgs.wl-clip-persist}/bin/wl-clip-persist --clipboard both &"
+ "${pkgs.wl-clipboard}/bin/wl-paste --watch cliphist store &"
+ # "${pkgs.waybar}/bin/waybar &"
+ "${pkgs.swaynotificationcenter}/bin/swaync &"
+ "${inputs.vicinae.packages.${currentSystem}.default}/bin/vicinae server &"
+ "${pkgs.udiskie}/bin/udiskie --automount --notify --smart-tray &"
+ "${pkgs.hyprland}/bin/hyprctl setcursor Bibata-Modern-Ice 24 &"
+ "${pkgs.tmux}/bin/tmux setenv -g HYPRLAND_INSTANCE_SIGNATURE '$HYPRLAND_INSTANCE_SIGNATURE'"
+ "systemctl --user start hyprpolkitagent"
+ # "init-wallpaper &"
+ #
+ # "ghostty --gtk-single-instance=true --quit-after-last-window-closed=false --initial-window=false"
+ # "[workspace 1 silent] zen-beta"
+ # "[workspace 2 silent] ghostty"
+ ];
+}
diff --git a/users/natalie/home/hyprland/hyprland.nix b/users/natalie/home/hyprland/hyprland.nix
new file mode 100644
index 0000000000000000000000000000000000000000..0cece8848cead1e0cc27c017d0ea3523983bf6d3
--- /dev/null
+++ b/users/natalie/home/hyprland/hyprland.nix
@@ -0,0 +1,37 @@
+{ config, pkgs, ... }:
+{
+ home.packages = with pkgs; [
+ swww
+ grimblast
+ hyprpicker
+ grim
+ slurp
+ wl-clip-persist
+ wl-clipboard
+ cliphist
+ wf-recorder
+ glib
+ wayland
+ playerctl
+ waybar
+ networkmanagerapplet
+ hyprpolkitagent
+ swappy
+ ];
+ # systemd.user.targets.hyprland-session.Unit.Wants = [
+ # "xdg-desktop-autostart.target"
+ # ];
+ wayland.windowManager.hyprland = {
+ enable = true;
+ package = null;
+ portalPackage = null;
+
+ xwayland = {
+ enable = true;
+ };
+ systemd.enable = false;
+ };
+ # https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/#nixos-uwsm
+ xdg.configFile."uwsm/env".source =
+ "${config.home.sessionVariablesPackage}/etc/profile.d/hm-session-vars.sh";
+}
diff --git a/users/natalie/home/hyprland/hyprlock.nix b/users/natalie/home/hyprland/hyprlock.nix
new file mode 100644
index 0000000000000000000000000000000000000000..60f780414f25acb7c0b7b52aaa5e2221bb2a3967
--- /dev/null
+++ b/users/natalie/home/hyprland/hyprlock.nix
@@ -0,0 +1,112 @@
+{ ... }:
+{
+ programs.hyprlock = {
+ enable = false;
+
+ settings = {
+ general = {
+ hide_cursor = true;
+ ignore_empty_input = true;
+ fractional_scaling = 0;
+ };
+
+ background = [
+ {
+ color = "rgba(29, 32, 33, 255)";
+ blur_passes = 2;
+ vibrancy_darkness = 0.0;
+ }
+ ];
+ #
+ # shape = [
+ # # User box
+ # {
+ # size = "300, 50";
+ #
+ # rounding = 0;
+ # border_size = 2;
+ # color = "rgba(102, 92, 84, 0.33)";
+ # border_color = "rgba(168, 153, 132, 0.95)";
+ #
+ # position = "0, ${if host == "laptop" then "120" else "270"}";
+ # halign = "center";
+ # valign = "bottom";
+ # }
+ # ];
+ #
+ # label = [
+ # # Time
+ # {
+ # text = ''cmd[update:1000] echo "$(date +'%k:%M')"'';
+ #
+ # font_size = 115;
+ # font_family = "Maple Mono Bold";
+ #
+ # shadow_passes = 3;
+ # color = "rgba(235, 219, 178, 0.9)";
+ #
+ # position = "0, ${if host == "laptop" then "-25" else "-150"}";
+ # halign = "center";
+ # valign = "top";
+ # }
+ # # Date
+ # {
+ # text = ''cmd[update:1000] echo "- $(date +'%A, %B %d') -" '';
+ #
+ # font_size = 18;
+ # font_family = "Maple Mono";
+ #
+ # shadow_passes = 3;
+ # color = "rgba(235, 219, 178, 0.9)";
+ #
+ # position = "0, ${if host == "laptop" then "-225" else "-350"}";
+ # halign = "center";
+ # valign = "top";
+ # }
+ # # Username
+ # {
+ # text = " $USER";
+ #
+ # font_size = 15;
+ # font_family = "Maple Mono Bold";
+ #
+ # color = "rgba(235, 219, 178, 1)";
+ #
+ # position = "0, ${if host == "laptop" then "134" else "284"}";
+ # halign = "center";
+ # valign = "bottom";
+ # }
+ # ];
+ #
+ # input-field = [
+ # {
+ # size = "300, 50";
+ # rounding = 0;
+ # outline_thickness = 2;
+ #
+ # dots_spacing = 0.4;
+ #
+ # font_color = "rgba(235, 219, 178, 0.9)";
+ # font_family = "Maple Mono Bold";
+ #
+ # outer_color = "rgba(168, 153, 132, 0.95)";
+ # inner_color = "rgba(102, 92, 84, 0.33)";
+ # check_color = "rgba(152, 151, 26, 0.95)";
+ # fail_color = "rgba(204, 36, 29, 0.95)";
+ # capslock_color = "rgba(215, 153, 33, 0.95)";
+ # bothlock_color = "rgba(215, 153, 33, 0.95)";
+ #
+ # hide_input = false;
+ # fade_on_empty = false;
+ # placeholder_text = ''Enter Password'';
+ #
+ # position = "0, ${if host == "laptop" then "50" else "200"}";
+ # halign = "center";
+ # valign = "bottom";
+ # }
+ # ];
+ #
+ # animation = [ "inputFieldColors, 0" ];
+ };
+ };
+}
diff --git a/users/natalie/home/hyprland/monitors.nix b/users/natalie/home/hyprland/monitors.nix
new file mode 100644
index 0000000000000000000000000000000000000000..9147d7d2fe89b0c3cc21c2c96096b44ac07e2076
--- /dev/null
+++ b/users/natalie/home/hyprland/monitors.nix
@@ -0,0 +1,18 @@
+{ pkgs, ... }:
+{
+ wayland.windowManager.hyprland = {
+ settings.monitor = [
+ "desc:Dell Inc. S2719DGF 1LCYBY2,2560x1440@154.85,1920x0,1.0"
+ "desc:Ancor Communications Inc VN279 HALMQS156672,1920x1080@60.0,0x0,1.0"
+ ];
+
+ # extraConfig = ''
+ # # hyprlang noerror true
+ # source = ~/.config/hypr/monitors.conf
+ # source = ~/.config/hypr/workspaces.conf
+ # # hyprlang noerror false
+ # '';
+ };
+
+ home.packages = with pkgs; [ nwg-displays ];
+}
diff --git a/users/natalie/home/hyprland/plugins.nix b/users/natalie/home/hyprland/plugins.nix
new file mode 100644
index 0000000000000000000000000000000000000000..32697739bb1b84b29123d72171c02687fe8b3acd
--- /dev/null
+++ b/users/natalie/home/hyprland/plugins.nix
@@ -0,0 +1,16 @@
+{ pkgs, inputs, ... }:
+{
+ wayland.windowManager.hyprland = {
+ plugins = [
+ inputs.split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces
+ ];
+ settings = {
+ plugin = {
+ split-monitor-workspaces = {
+ count = 5;
+ keep_focused = 0;
+ };
+ };
+ };
+ };
+}
diff --git a/users/natalie/home/hyprland/settings.nix b/users/natalie/home/hyprland/settings.nix
new file mode 100644
index 0000000000000000000000000000000000000000..5a14c824e7f5c64c8078dbf4e48cbfb659b3affe
--- /dev/null
+++ b/users/natalie/home/hyprland/settings.nix
@@ -0,0 +1,123 @@
+{ ... }:
+{
+ wayland.windowManager.hyprland.settings = {
+ # see: https://wiki.hypr.land/Configuring/Variables/#input
+ input = {
+ kb_layout = "us";
+ repeat_delay = 300;
+ follow_mouse = 1;
+ };
+ # https://wiki.hypr.land/Configuring/Variables/#general
+ general = {
+ "$mainMod" = "SUPER";
+ layout = "dwindle";
+ no_border_on_floating = false;
+
+ };
+ # https://wiki.hypr.land/Configuring/Variables/#misc
+ misc = {
+ disable_hyprland_logo = true;
+ always_follow_on_dnd = true;
+ layers_hog_keyboard_focus = true;
+ animate_manual_resizes = false;
+ enable_swallow = true;
+ swallow_regex = "^(ghostty)$";
+ focus_on_activate = true;
+ new_window_takes_over_fullscreen = 2;
+ middle_click_paste = false;
+ };
+
+ # https://wiki.hypr.land/Configuring/Dwindle-Layout/
+ dwindle = {
+ pseudotile = false;
+ force_split = 2;
+ preserve_split = true;
+ };
+ # https://wiki.hypr.land/Configuring/Variables/#decoration
+ decoration = {
+ rounding = 0;
+ rounding_power = 2.0;
+ active_opacity = 1.0;
+ inactive_opacity = 1.0;
+ fullscreen_opacity = 1.0;
+ dim_modal = true;
+ dim_inactive = false;
+ dim_strength = 0.5;
+ dim_special = 0.2;
+ dim_around = 0.4;
+ screen_shader = "";
+ border_part_of_window = true;
+ blur = {
+ enabled = true;
+ size = 8;
+ passes = 1;
+ brightness = 0.8172;
+ contrast = 0.8916;
+ ignore_opacity = true;
+ noise = 0.0117;
+ new_optimizations = true;
+ xray = true;
+ vibrancy = 0.1696;
+ vibrancy_darkness = 0.0;
+ special = false;
+ popups = false;
+ popups_ignorealpha = 0.2;
+ input_methods = false;
+ input_methods_ignorealpha = 0.2;
+ };
+
+ shadow = {
+ enabled = true;
+ range = 4;
+ render_power = 3;
+ sharp = false;
+ ignore_window = true;
+ color = "0xee1a1a1a";
+ offset = "0 2";
+ scale = 1.0;
+ };
+
+ };
+ # https://wiki.hypr.land/Configuring/Animations/
+ animations = {
+ enabled = true;
+
+ bezier = [
+ "easeOutQuint, 0.23, 1, 0.32, 1"
+ "easeInOutCubic, 0.65, 0.05, 0.36, 1"
+ "linear, 0, 0, 1, 1"
+ "almostLinear, 0.5, 0.5, 0.75, 1"
+ "quick, 0.15, 0, 0.1, 1"
+ ];
+
+ animation = [
+ "global, 1, 10, default"
+ "border, 1, 5.39, easeOutQuint"
+ "windows, 1, 4.79, easeOutQuint"
+ "windowsIn, 1, 4.1, easeOutQuint, popin 87%"
+ "windowsOut, 1, 1.49, linear, popin 87%"
+ "fadeIn, 1, 1.73, almostLinear"
+ "fadeOut, 1, 1.46, almostLinear"
+ "fade, 1, 3.03, quick"
+ "layers, 1, 3.81, easeOutQuint"
+ "layersIn, 1, 4, easeOutQuint, fade"
+ "layersOut, 1, 1.5, linear, fade"
+ "fadeLayersIn, 1, 1.79, almostLinear"
+ "fadeLayersOut, 1, 1.39, almostLinear"
+ "workspaces, 1, 1.94, almostLinear, fade"
+ "workspacesIn, 1, 1.21, almostLinear, fade"
+ "workspacesOut, 1, 1.94, almostLinear, fade"
+ "zoomFactor, 1, 7, quick"
+ ];
+
+ };
+ # https://wiki.hypr.land/Configuring/XWayland/
+ xwayland = {
+ force_zero_scaling = true;
+ };
+ debug = {
+ disable_logs = false;
+ };
+ };
+
+}
diff --git a/users/natalie/home/hyprland/variables.nix b/users/natalie/home/hyprland/variables.nix
new file mode 100644
index 0000000000000000000000000000000000000000..cbaff3f40e3bdb4e7ee46ccdcaf2eef8ede5962e
--- /dev/null
+++ b/users/natalie/home/hyprland/variables.nix
@@ -0,0 +1,29 @@
+{ ... }:
+{
+ home.sessionVariables = {
+ NIXOS_OZONE_WL = 1;
+ __GL_GSYNC_ALLOWED = 0;
+ __GL_VRR_ALLOWED = 0;
+ # SSH_AUTH_SOCK = "/run/user/1000/ssh-agent";
+ DISABLE_QT5_COMPAT = 0;
+ GDK_BACKEND = "wayland";
+ # ANKI_WAYLAND = 1;
+ WLR_DRM_NO_ATOMIC = 1;
+ # QT_AUTO_SCREEN_SCALE_FACTOR = 1;
+ # QT_WAYLAND_DISABLE_WINDOWDECORATION = 1;
+ QT_QPA_PLATFORM = "wayland";
+ QT_QPA_PLATFORMTHEME = "qt5ct";
+ # QT_STYLE_OVERRIDE = "kvantum";
+ MOZ_ENABLE_WAYLAND = 1;
+ WLR_BACKEND = "vulkan";
+ WLR_RENDERER = "vulkan";
+ WLR_NO_HARDWARE_CURSORS = 1;
+ XDG_CURRENT_DESKTOP = "Hyprland";
+ XDG_SESSION_TYPE = "wayland";
+ XDG_SESSION_DESKTOP = "Hyprland";
+ SDL_VIDEODRIVER = "wayland";
+ CLUTTER_BACKEND = "wayland";
+ # GTK_THEME = "Colloid-Green-Dark-Gruvbox";
+ # GRIMBLAST_HIDE_CURSOR = 0;
+ };
+}
diff --git a/users/natalie/home/hyprland/windowrules.nix b/users/natalie/home/hyprland/windowrules.nix
new file mode 100644
index 0000000000000000000000000000000000000000..9c9a2d248838f16e84f98e73bcf82c86dd046d94
--- /dev/null
+++ b/users/natalie/home/hyprland/windowrules.nix
@@ -0,0 +1,115 @@
+{ ... }:
+{
+ wayland.windowManager.hyprland.settings = {
+ # https://wiki.hypr.land/Configuring/Window-Rules/#layer-rules
+ windowrule = [
+ "float,class:^(mpv)$"
+ "pin,class:^(rofi)$"
+ "pin,class:^(waypaper)$"
+ "float,title:^(Volume Control)$"
+
+ #awakened-poe-trade
+ # https://github.com/SnosMe/awakened-poe-trade/issues/1137#issuecomment-2992606569
+ "tag +apt, class:^(awakened-poe-trade)$"
+ "tag +apt, title:(Awakened PoE Trade)"
+ "float, tag:apt"
+ "noblur, tag:apt"
+ "nofocus, tag:apt"
+ "noshadow, tag:apt"
+ "noborder, tag:apt"
+ "pin, tag:apt"
+ "renderunfocused, tag:apt"
+ "size 100% 100%, tag:apt"
+ "center, tag:apt"
+
+ #POE
+ "tag +poe, title:(Path of Exile)"
+ "tag +poe class:(steam_app_238960)"
+ "fullscreen, tag:poe$"
+ # https://github.com/SnosMe/awakened-poe-trade/issues/1137#issuecomment-3037816727
+ # "tag +fakefullscreen, title:(Path of Exile),class:(steam_app_238960)"
+ # "tile, tag:fakefullscreen"
+ # "noborder, tag:fakefullscreen"
+ # "float,title:^(Firefox — Sharing Indicator)$"
+ # "move 0 0,title:^(Firefox — Sharing Indicator)$"
+ # "size 700 450,title:^(Volume Control)$"
+ # "move 40 55%,title:^(Volume Control)$"
+ #"float, title:^(Picture-in-Picture)$"
+ # "opacity 1.0 override 1.0 override, title:^(Picture-in-Picture)$"
+ # "pin, title:^(Picture-in-Picture)$"
+ # "opacity 1.0 override 1.0 override, title:^(.*imv.*)$"
+ # "opacity 1.0 override 1.0 override, title:^(.*mpv.*)$"
+ # "opacity 1.0 override 1.0 override, class:(Aseprite)"
+ # "opacity 1.0 override 1.0 override, class:(Unity)"
+ # "opacity 1.0 override 1.0 override, class:(zen)"
+ # "opacity 1.0 override 1.0 override, class:(evince)"
+ # "workspace 1, class:^(zen-beta)$"
+ # "workspace 3, class:^(evince)$"
+ # "workspace 4, class:^(Gimp-2.10)$"
+ # "workspace 4, class:^(Aseprite)$"
+ # "workspace 5, class:^(Audacious)$"
+ # "workspace 5, class:^(Spotify)$"
+ # "workspace 8, class:^(com.obsproject.Studio)$"
+ # "workspace 10, class:^(discord)$"
+ # "workspace 10, class:^(WebCord)$"
+ # "idleinhibit focus, class:^(mpv)$"
+ # "idleinhibit fullscreen, class:^(firefox)$"
+ # "float,class:^(org.gnome.Calculator)$"
+ # "float,class:^(waypaper)$"
+ # "float,class:^(zenity)$"
+ # "size 850 500,class:^(zenity)$"
+ # "size 725 330,class:^(SoundWireServer)$"
+ # "float,class:^(org.gnome.FileRoller)$"
+ # "float,class:^(org.pulseaudio.pavucontrol)$"
+ # "float,class:^(SoundWireServer)$"
+ # "float,class:^(.sameboy-wrapped)$"
+ # "float,class:^(file_progress)$"
+ # "float,class:^(confirm)$"
+ # "float,class:^(dialog)$"
+ # "float,class:^(download)$"
+ # "float,class:^(notification)$"
+ # "float,class:^(error)$"
+ # "float,class:^(confirmreset)$"
+ # "float,title:^(Open File)$"
+ # "float,title:^(File Upload)$"
+ # "float,title:^(branchdialog)$"
+ # "float,title:^(Confirm to replace files)$"
+ # "float,title:^(File Operation Progress)$"
+ #
+ # "opacity 0.0 override,class:^(xwaylandvideobridge)$"
+ # "noanim,class:^(xwaylandvideobridge)$"
+ # "noinitialfocus,class:^(xwaylandvideobridge)$"
+ # "maxsize 1 1,class:^(xwaylandvideobridge)$"
+ # "noblur,class:^(xwaylandvideobridge)$"
+ #
+ # # No gaps when only
+ # "bordersize 0, floating:0, onworkspace:w[t1]"
+ # "rounding 0, floating:0, onworkspace:w[t1]"
+ # "bordersize 0, floating:0, onworkspace:w[tg1]"
+ # "rounding 0, floating:0, onworkspace:w[tg1]"
+ # "bordersize 0, floating:0, onworkspace:f[1]"
+ # "rounding 0, floating:0, onworkspace:f[1]"
+ # Remove context menu transparency in chromium based apps
+ # "opaque,class:^()$,title:^()$"
+ # "noshadow,class:^()$,title:^()$"
+ # "noblur,class:^()$,title:^()$"
+ ];
+
+ # https://wiki.hypr.land/Configuring/Window-Rules/#layer-rules
+ layerrule = [
+ "blur, vicinae"
+ "ignorealpha 0, vicinae"
+ "noanim, vicinae"
+ # "dimaround, rofi"
+ # "dimaround, swaync-control-center"
+ ];
+
+ # https://wiki.hypr.land/Configuring/Workspace-Rules/
+ # No gaps when only
+ workspace = [
+ "w[t1], gapsout:0, gapsin:0"
+ "w[tg1], gapsout:0, gapsin:0"
+ "f[1], gapsout:0, gapsin:0"
+ ];
+ };
+}
diff --git a/users/natalie/home/scripts/default.nix b/users/natalie/home/scripts/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..dfedf068302d3c1c013beda7d55235b2186f247a
--- /dev/null
+++ b/users/natalie/home/scripts/default.nix
@@ -0,0 +1,26 @@
+{ pkgs, ... }:
+let
+ scriptDir = ./scripts;
+
+ mkScript = name: {
+ inherit name;
+ value = pkgs.writeScriptBin (builtins.replaceStrings [ ".sh" ] [ "" ] name) (
+ builtins.readFile (scriptDir + "/${name}")
+ );
+ };
+
+ scriptsSet = builtins.listToAttrs (
+ map mkScript (
+ builtins.attrNames (
+ pkgs.lib.filterAttrs (n: v: v == "regular" && (pkgs.lib.hasSuffix ".sh" n)) (
+ builtins.readDir ./scripts
+ )
+ )
+ )
+ );
+ scripts = builtins.attrValues scriptsSet;
+
+in
+{
+ home.packages = scripts;
+}
diff --git a/users/natalie/home/scripts/scripts/fakefullscreen.sh b/users/natalie/home/scripts/scripts/fakefullscreen.sh
new file mode 100644
index 0000000000000000000000000000000000000000..3b206da04e6dc35a114f0c3c36ae0b273fb9ac92
--- /dev/null
+++ b/users/natalie/home/scripts/scripts/fakefullscreen.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p bash socat jq killall
+# shellcheck disable=all
+
+RUNDIR=/run/user/$EUID/hypr
+WAYBAR_FILE=$RUNDIR/.waybar_is_hidden
+
+function hide {
+ if [ ! -f $WAYBAR_FILE ]; then
+ hyprctl keyword workspace , gapsout:0 >/dev/null 2>&1
+ killall -SIGUSR1 .waybar-wrapped && touch $WAYBAR_FILE
+ fi
+}
+
+function show {
+ if [ -f $WAYBAR_FILE ]; then
+ hyprctl keyword workspace , gapsout:$(hyprctl getoption general:gaps_out -j | jq -r .custom | tr \ ,) >/dev/null 2>&1
+ killall -SIGUSR1 .waybar-wrapped && rm $WAYBAR_FILE >/dev/null 2>&1
+ fi
+}
+
+function fakefullscreen() {
+ local fullscreenclients=$(hyprctl clients -j | jq -r '.[] | select(.tags | contains(["fakefullscreen"])).workspace.id')
+ [ -z "$fullscreenclients" -a ! -f $WAYBAR_FILE ] && return
+ local active=$(hyprctl activeworkspace -j | jq -r .id)
+ for id in $fullscreenclients; do
+ if [ $active -eq $id -a $(hyprctl clients -j | jq -r "[.[] | select(.workspace.id == $id) | select(.floating | not)] | length") -eq 1 ]; then
+ hide
+ return
+ fi
+ done
+ show
+}
+
+sleep 1
+fakefullscreen
+
+socat -u "UNIX-CONNECT:$RUNDIR/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" STDOUT | while read -r event; do
+ case $event in
+ workspace\>\>* | openwindow\>\>* | closewindow\>\>*) fakefullscreen ;;
+ esac
+done
+
+show
diff --git a/users/natalie/home/scripts/scripts/screenshot.sh b/users/natalie/home/scripts/scripts/screenshot.sh
new file mode 100644
index 0000000000000000000000000000000000000000..fe324d8cf2e2dd622714bd323355ba91a0cf5ddc
--- /dev/null
+++ b/users/natalie/home/scripts/scripts/screenshot.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+dir="$HOME/Pictures/Screenshots"
+time=$(date +'%Y_%m_%d_at_%Hh%Mm%Ss')
+file="${dir}/Screenshot_${time}.png"
+
+copy() {
+ GRIMBLAST_HIDE_CURSOR=0 grimblast --notify --freeze copy area
+}
+
+save() {
+ GRIMBLAST_HIDE_CURSOR=0 grimblast --notify --freeze save area "$file"
+}
+
+swappy_() {
+ GRIMBLAST_HIDE_CURSOR=0 grimblast --notify --freeze save area "$file"
+ swappy -f "$file"
+}
+
+if [[ ! -d "$dir" ]]; then
+ mkdir -p "$dir"
+fi
+
+if [[ "$1" == "--copy" ]]; then
+ copy
+elif [[ "$1" == "--save" ]]; then
+ save
+elif [[ "$1" == "--swappy" ]]; then
+ swappy_
+else
+ echo -e "Available Options: --copy --save --swappy"
+fi
+
+exit 0
diff --git a/users/natalie/home/swaync.nix b/users/natalie/home/swaync.nix
new file mode 100644
index 0000000000000000000000000000000000000000..2768a4dc9012f80f4256f54f60dbd86ac03fc094
--- /dev/null
+++ b/users/natalie/home/swaync.nix
@@ -0,0 +1,595 @@
+{ pkgs, ... }:
+{
+ services.swaync = {
+ enable = true;
+ settings = {
+ ignore-gtk-theme = true;
+ positionX = "right";
+ positionY = "top";
+ layer = "overlay";
+ control-center-layer = "top";
+ layer-shell = true;
+ layer-shell-cover-screen = true;
+ cssPriority = "user";
+ control-center-margin-top = 15;
+ control-center-margin-bottom = 15;
+ control-center-margin-right = 15;
+ control-center-margin-left = 0;
+ notification-2fa-action = true;
+ notification-inline-replies = false;
+ notification-body-image-height = 100;
+ notification-body-image-width = 200;
+ notification-icon-size = 48;
+ timeout = 8;
+ timeout-low = 6;
+ timeout-critical = 0;
+ fit-to-screen = true;
+ relative-timestamps = true;
+ control-center-width = 400;
+ control-center-height = 600;
+ notification-window-width = 350;
+ keyboard-shortcuts = true;
+ notification-grouping = true;
+ image-visibility = "when-available";
+ transition-time = 200;
+ hide-on-clear = false;
+ hide-on-action = true;
+ text-empty = "No Notifications";
+ script-fail-notify = true;
+ widgets = [
+ "dnd"
+ "mpris"
+ "notifications"
+ "volume"
+ "backlight"
+ ];
+ widget-config = {
+ inhibitors = {
+ text = "Inhibitors";
+ button-text = "Clear All";
+ clear-all-button = true;
+ };
+ title = {
+ text = "Notifications";
+ clear-all-button = true;
+ button-text = "Clear All";
+ };
+ dnd = {
+ text = "Do Not Disturb";
+ };
+ label = {
+ max-lines = 5;
+ text = "Label Text";
+ };
+ mpris = {
+ show-album-art = "always";
+ loop-carousel = false;
+ };
+ volume = {
+ label = " ";
+ expand-button-label = "";
+ collapse-button-label = "";
+ show-per-app = true;
+ show-per-app-icon = true;
+ show-per-app-label = false;
+ };
+ backlight = {
+ label = " ";
+ };
+ };
+ };
+ style = ''
+ :root {
+ --bg-primary: #1d2021;
+ --bg-secondary: #282828;
+ --bg-button: #4E4E4E;
+ --bg-button-hover: #5E5E5E;
+ --text-primary: #EBDBB2;
+ --text-disabled: #5C554A;
+ --border-color: #928374;
+ --priority-low: #EBDBB2;
+ --priority-normal: #83A598;
+ --priority-critical: #FB4934;
+ --transition-standard: 0.15s ease-in-out;
+ }
+
+ /* Base styles */
+ * {
+ outline: none;
+ }
+
+ *:focus {
+ outline: none;
+ box-shadow: none;
+ }
+
+ /* Scrollbar */
+ scrollbar,
+ scrollbar slider {
+ opacity: 0;
+ min-width: 0px;
+ min-height: 0px;
+ background: transparent;
+ }
+
+ /* Common button styles */
+ .close-button,
+ .widget-title>button,
+ .widget-dnd switch,
+ .widget-menubar>.menu-button-bar>.widget-menubar-container button,
+ .widget-menubar>revealer button,
+ .widget-inhibitors>button {
+ border-radius: 0px;
+ border: none;
+ box-shadow: none;
+ transition: background var(--transition-standard);
+ }
+
+ /* Close button */
+ .close-button {
+ background: var(--bg-button);
+ color: var(--text-primary);
+ text-shadow: none;
+ padding: 0;
+ border-radius: 50%;
+ margin-top: 8px;
+ margin-right: 8px;
+ min-width: 20px;
+ min-height: 20px;
+ }
+
+ .close-button:hover {
+ background: var(--bg-button-hover);
+ }
+
+ /* Notification rows */
+ .notification-row {
+ background: none;
+ }
+
+ .notification-row:focus,
+ .notification-group:focus {
+ background: var(--bg-primary);
+ }
+
+ .notification-row .notification-background {
+ margin: 0px 0px 0px 0px;
+ }
+
+ /* Base notification styles */
+ .notification-row .notification-background .notification {
+ border-radius: 0px;
+ border: 1px solid var(--border-color);
+ transition: background var(--transition-standard);
+ background: var(--bg-primary);
+ padding: 2px 4px;
+ }
+
+ /* Priority-based notification styles */
+ .notification-row .notification-background .notification.low {
+ border-left: 3px solid var(--priority-low);
+ }
+
+ .notification-row .notification-background .notification.normal {
+ border-left: 3px solid var(--priority-normal);
+ }
+
+ .notification-row .notification-background .notification.critical {
+ border-left: 3px solid var(--priority-critical);
+ }
+
+ /* Notification default action */
+ .notification-default-action {
+ padding: 4px;
+ margin: 0;
+ box-shadow: none;
+ background: transparent;
+ border: none;
+ color: var(--text-primary);
+ transition: background var(--transition-standard);
+ border-radius: 0px;
+ }
+
+ .notification-default-action:hover {
+ -gtk-icon-filter: none;
+ background: var(--bg-primary);
+ }
+
+ .notification-default-action:not(:only-child) {
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ }
+
+ /* Notification content */
+ .notification-content {
+ background: transparent;
+ border-radius: 0px;
+ padding: 0;
+ }
+
+ .notification-content .image {
+ -gtk-icon-filter: none;
+ -gtk-icon-size: 30px;
+ border-radius: 50px;
+ margin: 0px 7px 0px 0px;
+ }
+
+ .notification-content .app-icon {
+ -gtk-icon-filter: none;
+ -gtk-icon-size: calc(25px / 3);
+ -gtk-icon-shadow: 0 1px 4px black;
+ margin: 6px;
+ }
+
+ .notification-content .text-box label {
+ filter: none;
+ }
+
+ /* Text elements */
+ .notification-content .text-box .summary,
+ .notification-content .text-box .time,
+ .notification-content .text-box .body {
+ font-size: 16px;
+ background: transparent;
+ color: var(--text-primary);
+ text-shadow: none;
+ }
+
+ .notification-content .text-box .summary,
+ .notification-content .text-box .time {
+ font-weight: bold;
+ }
+
+ .notification-content .text-box .time {
+ margin-right: 30px;
+ }
+
+ .notification-content .text-box .body {
+ font-weight: normal;
+ }
+
+ /* Progress and images */
+ .notification-content progressbar {
+ margin-top: 4px;
+ }
+
+ .notification-content .body-image {
+ margin-top: 4px;
+ background-color: white;
+ -gtk-icon-filter: none;
+ }
+
+ /* Inline reply */
+ .notification-content .inline-reply {
+ margin-top: 4px;
+ }
+
+ .notification-content .inline-reply .inline-reply-entry {
+ background: var(--bg-secondary);
+ color: var(--text-primary);
+ caret-color: var(--text-primary);
+ border: 1px solid var(--border-color);
+ border-radius: 0px;
+ }
+
+ .notification-content .inline-reply .inline-reply-button {
+ margin-left: 4px;
+ background: rgb(48, 48, 48);
+ border: 1px solid var(--border-color);
+ border-radius: 0px;
+ color: var(--text-primary);
+ }
+
+ .notification-content .inline-reply .inline-reply-button:disabled {
+ background: initial;
+ color: rgb(150, 150, 150);
+ border: 1px solid var(--border-color);
+ border-color: transparent;
+ }
+
+ .notification-content .inline-reply .inline-reply-button:hover {
+ background: var(--bg-primary);
+ }
+
+ /* Alternative actions */
+ .notification-alt-actions {
+ background: none;
+ border-bottom-left-radius: 12px;
+ border-bottom-right-radius: 12px;
+ padding: 4px;
+ }
+
+ .notification-action {
+ margin: 4px;
+ padding: 0;
+ font-size: 16px;
+ }
+
+ .notification-action>button {
+ border-radius: 0px;
+ font-size: 16px;
+ padding: 1px;
+ }
+
+ /* Notification groups */
+ .notification-group {
+ transition: opacity 200ms ease-in-out;
+ }
+
+ .notification-group .notification-group-close-button .close-button {
+ margin: 12px 20px;
+ }
+
+ .notification-group .notification-group-buttons,
+ .notification-group .notification-group-headers {
+ margin: 0 16px;
+ color: var(--text-primary);
+ }
+
+ .notification-group .notification-group-headers {
+ font-size: 16px;
+ }
+
+ .notification-group .notification-group-headers .notification-group-icon {
+ color: var(--text-primary);
+ -gtk-icon-size: 20px;
+ font-size: 16px;
+ font-weight: 700;
+ margin: 5px 5px 5px 0px;
+ }
+
+ .notification-group .notification-group-headers .notification-group-header {
+ font-size: 16px;
+ font-weight: 700;
+ color: var(--text-primary);
+ }
+
+ .notification-group .notification-group-buttons {
+ margin: 5px;
+ }
+
+ .notification-group.collapsed.not-expanded {
+ opacity: 1.0;
+ }
+
+ .notification-group.collapsed .notification-row .notification {
+ background-color: var(--bg-primary);
+ }
+
+ .notification-group.collapsed .notification-row:not(:last-child) .notification-action,
+ .notification-group.collapsed .notification-row:not(:last-child) .notification-default-action {
+ opacity: 1.0;
+ }
+
+ .notification-group.collapsed:hover .notification-row:not(:only-child) .notification {
+ background-color: var(--bg-primary);
+ }
+
+ /* Control center */
+ .control-center {
+ background: var(--bg-primary);
+ color: var(--text-primary);
+ border-radius: 0px;
+ border: 2px solid var(--border-color);
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
+ }
+
+ .control-center .control-center-list-placeholder {
+ opacity: 1.0;
+ }
+
+ .control-center .control-center-list {
+ background: transparent;
+ }
+
+ .control-center .control-center-list .notification .notification-default-action,
+ .control-center .control-center-list .notification .notification-action {
+ transition: opacity 400ms ease-in-out, background var(--transition-standard);
+ }
+
+ .control-center .control-center-list .notification .notification-default-action:hover,
+ .control-center .control-center-list .notification .notification-action:hover {
+ background-color: var(--bg-primary);
+ }
+
+ /* Floating notifications */
+ .blank-window,
+ .floating-notifications {
+ background: transparent;
+ }
+
+ .floating-notifications .notification {
+ box-shadow: none;
+ }
+
+ /* Widgets */
+ .widget-title>label {
+ margin: 8px;
+ font-weight: 700;
+ font-size: 16px;
+ }
+
+ .widget-title>button {
+ margin: 8px;
+ font-size: 16px;
+ background: var(--bg-primary);
+ border: 2px solid var(--text-disabled);
+ padding: 3px 10px;
+ color: var(--text-primary);
+ font-weight: 700;
+ }
+
+ /* Common widget styles */
+ .widget-dnd,
+ .widget-label,
+ .widget-volume,
+ .widget-slider,
+ .widget-backlight {
+ margin-left: 8px;
+ margin-right: 8px;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ }
+
+ .widget-dnd label,
+ .widget-label>label {
+ color: var(--text-primary);
+ font-size: 18px;
+ }
+
+ .widget-dnd label {
+ margin: 8px;
+ margin-top: 16px;
+ }
+
+ .widget-dnd switch {
+ margin: 8px;
+ margin-top: 16px;
+ }
+
+ .widget-dnd switch slider {
+ border-radius: 0px;
+ }
+
+ .widget-label {
+ margin: 8px;
+ }
+
+ /* Mpris widget */
+ .widget-mpris {
+ margin: 5px;
+ }
+
+ .widget-mpris .widget-mpris-player {
+ margin: 10px 10px;
+ border-radius: 0px;
+ box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
+ border: 1px solid var(--border-color);
+ }
+
+ .widget-mpris .widget-mpris-player .mpris-background {
+ filter: blur(2px);
+ }
+
+ .widget-mpris .widget-mpris-player .mpris-overlay {
+ padding: 16px;
+ background-color: rgba(0, 0, 0, 0.55);
+ }
+
+ .widget-mpris .widget-mpris-player .mpris-overlay button:hover {
+ background: var(--bg-primary);
+ }
+
+ .widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-album-art {
+ border-radius: 0px;
+ box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
+ -gtk-icon-size: 50px;
+ }
+
+ .widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-title {
+ font-weight: bold;
+ font-size: 16px;
+ }
+
+ .widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-subtitle {
+ font-size: 16px;
+ }
+
+ .widget-mpris .widget-mpris-player .mpris-overlay>box>button {
+ margin: 2px;
+ color: var(--text-primary);
+ }
+
+ .widget-mpris .widget-mpris-player .mpris-overlay>box>button:hover {
+ background-color: rgba(0, 0, 0, 0.5);
+ }
+
+ .widget-mpris>box>button {
+ color: var(--text-primary);
+ }
+
+ .widget-mpris>box>button:disabled {
+ color: var(--text-disabled);
+ }
+
+ /* Buttons widget */
+ .widget-buttons-grid {
+ padding: 8px;
+ margin: 8px;
+ border-radius: 0px;
+ }
+
+ .widget-buttons-grid flowboxchild>button {
+ border-radius: 0px;
+ }
+
+ /* Menubar widget */
+ .widget-menubar>.menu-button-bar>.start {
+ margin-left: 8px;
+ }
+
+ .widget-menubar>.menu-button-bar>.end {
+ margin-right: 8px;
+ }
+
+ .widget-menubar>.menu-button-bar>.widget-menubar-container button {
+ margin: 0 4px;
+ }
+
+ .widget-menubar>revealer {
+ margin-top: 8px;
+ }
+
+ .widget-menubar>revealer button {
+ margin: 8px;
+ margin-top: 0;
+ }
+
+ /* Volume widget */
+ .widget-volume {
+ padding: 8px;
+ margin-bottom: 8px;
+ border-radius: 0px;
+ }
+
+ .widget-volume row image {
+ -gtk-icon-size: 24px;
+ }
+
+ .per-app-volume {
+ background-color: var(--bg-secondary);
+ padding: 8px 8px 8px 8px;
+ margin: 8px 8px 8px 8px;
+ border-radius: 0px;
+ }
+
+ /* Slider widget */
+ .widget-slider {
+ padding: 8px;
+ border-radius: 0px;
+ }
+
+ .widget-slider label {
+ font-size: inherit;
+ }
+
+ /* Backlight widget */
+ .widget-backlight {
+ padding: 8px;
+ border-radius: 0px;
+ margin-top: -8px;
+ margin-bottom: 8px;
+ }
+
+ /* Inhibitors widget */
+ .widget-inhibitors>label {
+ margin: 8px;
+ font-size: 16px;
+ }
+
+ .widget-inhibitors>button {
+ margin: 8px;
+ }
+ '';
+ };
+}
diff --git a/users/natalie/home/tmux.nix b/users/natalie/home/tmux.nix
new file mode 100644
index 0000000000000000000000000000000000000000..edf6f008bb2cc6167ce783164f29edbd57fe11b6
--- /dev/null
+++ b/users/natalie/home/tmux.nix
@@ -0,0 +1,107 @@
+{ pkgs, config, ... }:
+let
+ tmux-nvim = pkgs.tmuxPlugins.mkTmuxPlugin {
+ pluginName = "tmux.nvim";
+ version = "unstable-2025-05-19";
+ src = pkgs.fetchFromGitHub {
+ owner = "aserowy";
+ repo = "tmux.nvim/";
+ rev = "2c1c3be0ef287073cef963f2aefa31a15c8b9cd8";
+ sha256 = "sha256-/XIjqQr9loWVTXZDaZx2bSQgco46z7yam50dCnM5p1U=";
+ };
+ };
+
+in
+{
+ programs.tmux = {
+ enable = true;
+ mouse = true;
+
+ shell = "${pkgs.fish}/bin/fish";
+
+ shortcut = "a";
+ keyMode = "vi";
+
+ plugins = with pkgs.tmuxPlugins; [
+ better-mouse-mode
+ tmux-nvim
+ tmux-thumbs
+ cpu
+ tmux-floax
+ yank
+ # must be before continuum edits right status bar
+ {
+ plugin = catppuccin;
+ extraConfig = ''
+ set -g @catppuccin_flavour "mocha"
+ set -g @catppuccin_window_status_style "rounded"
+
+ set -g status-right-length 100
+ set -g status-left-length 100
+ set -g status-left ""
+ set -g status-right "#{E:@catppuccin_status_application}"
+ set -ag status-right "#{E:@catppuccin_status_session}"
+ set -ag status-right "#{E:@catppuccin_status_uptime}"
+
+ '';
+ }
+ {
+ plugin = resurrect;
+ extraConfig = ''
+ set -g @resurrect-strategy-vim 'session'
+ set -g @resurrect-strategy-nvim 'session'
+ set -g @resurrect-capture-pane-contents 'on'
+ ''
+ + ''
+ # Taken from: https://github.com/p3t33/nixos_flake/blob/5a989e5af403b4efe296be6f39ffe6d5d440d6d6/home/modules/tmux.nix
+ resurrect_dir="$XDG_CACHE_HOME/.tmux/resurrect"
+ set -g @resurrect-dir $resurrect_dir
+
+ set -g @resurrect-hook-post-save-all 'target=$(readlink -f $resurrect_dir/last); sed "s| --cmd .*-vim-pack-dir||g; s|/etc/profiles/per-user/$USER/bin/||g; s|/home/$USER/.nix-profile/bin/||g" $target | sponge $target'
+ '';
+
+ }
+ {
+ plugin = continuum;
+ extraConfig = ''
+ set -g @continuum-restore 'on'
+ set -g @continuum-boot 'on'
+ set -g @continuum-save-interval '10'
+ set -g @continuum-systemd-start-cmd 'start-server'
+ '';
+ }
+
+ ];
+ extraConfig = ''
+ set -g default-terminal "tmux-256color"
+ set-environment -g TMUX_PLUGIN_MANAGER_PATH '~/.local/share/tmux/plugins'
+ # Easier reload of config
+ bind r source-file ~/.config/tmux/tmux.conf
+ # Quicker escape in neovim
+ set -sg escape-time 0
+ set-option -g set-titles on
+ set-option -g set-titles-string "#S / #W"
+
+ set -g allow-passthrough on
+
+ # '@pane-is-vim' is a pane-local option that is set by the plugin on load,
+ # and unset when Neovim exits or suspends; note that this means you'll probably
+ # not want to lazy-load smart-splits.nvim, as the variable won't be set until
+ # the plugin is loaded
+
+ # Smart pane switching with awareness of Neovim splits.
+ bind-key -n C-h if -F "#{@pane-is-vim}" 'send-keys C-h' 'select-pane -L'
+ bind-key -n C-j if -F "#{@pane-is-vim}" 'send-keys C-j' 'select-pane -D'
+ bind-key -n C-k if -F "#{@pane-is-vim}" 'send-keys C-k' 'select-pane -U'
+ bind-key -n C-l if -F "#{@pane-is-vim}" 'send-keys C-l' 'select-pane -R'
+
+ # Smart pane resizing with awareness of Neovim splits.
+ bind-key -n M-h if -F "#{@pane-is-vim}" 'send-keys M-h' 'resize-pane -L 3'
+ bind-key -n M-j if -F "#{@pane-is-vim}" 'send-keys M-j' 'resize-pane -D 3'
+ bind-key -n M-k if -F "#{@pane-is-vim}" 'send-keys M-k' 'resize-pane -U 3'
+ bind-key -n M-l if -F "#{@pane-is-vim}" 'send-keys M-l' 'resize-pane -R 3'
+
+ '';
+ };
+
+}
diff --git a/users/natalie/home/vicinae.nix b/users/natalie/home/vicinae.nix
new file mode 100644
index 0000000000000000000000000000000000000000..5276e4bb4a02d62e5e02631b8317a8201c571e9d
--- /dev/null
+++ b/users/natalie/home/vicinae.nix
@@ -0,0 +1,30 @@
+{ inputs, pkgs, ... }:
+{
+ services.vicinae = {
+ enable = true;
+ autoStart = false;
+ settings = {
+ faviconService = "twenty"; # twenty | google | none
+ font.size = 11;
+ popToRootOnClose = false;
+ rootSearch.searchFiles = true;
+ theme.name = "catpuccin-mocha";
+ window = {
+ csd = true;
+ opacity = 0.95;
+ rounding = 10;
+ };
+
+ };
+
+ # extensions = [
+ # (inputs.vicinae.mkVicinaeExtension.${pkgs.system} {
+ # inherit pkgs;
+ # name = "nixpkgs search";
+ # src = pkgs.fetchFromGithub {
+ #
+ # };
+ # })
+ # ];
+ };
+}
diff --git a/users/natalie/home/waybar/default.nix b/users/natalie/home/waybar/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..702d5206fbab8ae339def456ae5da8f17a4a7ae4
--- /dev/null
+++ b/users/natalie/home/waybar/default.nix
@@ -0,0 +1,8 @@
+{ ... }:
+{
+ imports = [
+ ./waybar.nix
+ ./settings.nix
+ ./style.nix
+ ];
+}
diff --git a/users/natalie/home/waybar/settings.nix b/users/natalie/home/waybar/settings.nix
new file mode 100644
index 0000000000000000000000000000000000000000..1a883448d70aaff7517c8e629760bab53e4ae430
--- /dev/null
+++ b/users/natalie/home/waybar/settings.nix
@@ -0,0 +1,181 @@
+{
+ pkgs,
+ inputs,
+ currentSystem,
+ ...
+}:
+let
+ custom = {
+ font = "Maple Mono";
+ font_size = "18px";
+ font_weight = "bold";
+ text_color = "#FBF1C7";
+ background_0 = "#1D2021";
+ background_1 = "#282828";
+ border_color = "#928374";
+ red = "#CC241D";
+ green = "#98971A";
+ yellow = "#FABD2F";
+ blue = "#458588";
+ magenta = "#B16286";
+ cyan = "#689D6A";
+ orange = "#D65D0E";
+ opacity = "1";
+ indicator_height = "2px";
+ };
+in
+{
+ programs.waybar.settings.mainBar = with custom; {
+ position = "top";
+ layer = "bottom";
+ height = 28;
+ margin-top = 0;
+ margin-bottom = 0;
+ margin-left = 0;
+ margin-right = 0;
+ modules-left = [
+ "custom/launcher"
+ "hyprland/workspaces"
+ ];
+ modules-center = [ "clock" ];
+ modules-right = [
+ "cpu"
+ "memory"
+ "pulseaudio"
+ "network"
+ "hyprland/language"
+ "tray"
+ "custom/notification"
+ "custom/power-menu"
+ ];
+ clock = {
+ calendar = {
+ format = {
+ today = "{}";
+ };
+ };
+ format = " {:%H:%M}";
+ tooltip = "true";
+ tooltip-format = "{:%Y %B}\n{calendar}";
+ format-alt = " {:%d/%m}";
+ };
+ "hyprland/workspaces" = {
+ active-only = false;
+ disable-scroll = true;
+ format = "{icon}";
+ on-click = "activate";
+ format-icons = {
+ sort-by-number = true;
+ };
+ persistent-workspaces = {
+ "1" = [ ];
+ "2" = [ ];
+ "3" = [ ];
+ "4" = [ ];
+ "5" = [ ];
+ };
+ };
+ cpu = {
+ format = " {usage}%";
+ format-alt = " {avg_frequency} GHz";
+ interval = 2;
+ on-click-right = "${pkgs.hyprland}/bin/hyprctl dispatch exec '[float; center; size 950 650] ${pkgs.ghostty}/bin/ghostty --font-size=14 -e btop'";
+ };
+ memory = {
+ format = " {}%";
+ format-alt = " {used} GiB"; #
+ interval = 2;
+ on-click-right = "${pkgs.hyprland}/bin/hyprctl dispatch exec '[float; center; size 950 650] ${pkgs.ghostty}/bin/ghostty --font-size=14 -e btop'";
+ };
+ disk = {
+ # path = "/";
+ format = " {percentage_used}%";
+ interval = 60;
+ on-click-right = "${pkgs.hyprland}/bin/hyprctl dispatch exec '[float; center; size 950 650] ${pkgs.ghostty}/bin/ghostty --font-size=14 -e btop'";
+ };
+ network = {
+ format-wifi = " {signalStrength}%";
+ format-ethernet = " ";
+ tooltip-format = "Connected to {essid} {ifname} via {gwaddr}";
+ format-linked = "{ifname} (No IP)";
+ format-disconnected = " ";
+ };
+ tray = {
+ icon-size = 20;
+ spacing = 8;
+ };
+ pulseaudio = {
+ format = "{icon} {volume}%";
+ format-muted = " {volume}%";
+ format-icons = {
+ default = [ " " ];
+ };
+ scroll-step = 2;
+ on-click = "${pkgs.pamixer}/bin/pamixer -t";
+ on-click-right = "${pkgs.pavucontrol}/bin/pavucontrol";
+ };
+ # battery = {
+ # format = "{icon} {capacity}%";
+ # format-icons = [
+ # " "
+ # " "
+ # " "
+ # " "
+ # " "
+ # ];
+ # format-charging = " {capacity}%";
+ # format-full = " {capacity}%";
+ # format-warning = " {capacity}%";
+ # interval = 5;
+ # states = {
+ # warning = 20;
+ # };
+ # format-time = "{H}h{M}m";
+ # tooltip = true;
+ # tooltip-format = "{time}";
+ # };
+ "hyprland/language" = {
+ tooltip = true;
+ tooltip-format = "Keyboard layout";
+ format = " {}";
+ format-fr = "FR";
+ format-en = "US";
+ on-click = "${pkgs.hyprland}/bin/hyprctl switchxkblayout at-translated-set-2-keyboard next";
+ };
+ "custom/launcher" = {
+ format = "";
+ on-click = "random-wallpaper";
+ on-click-right = "${inputs.vicinae.packages.${currentSystem}.default}vicinae vicinae://toggle";
+ tooltip = "true";
+ tooltip-format = "Random Wallpaper";
+ };
+ "custom/notification" = {
+ tooltip = true;
+ tooltip-format = "Notifications";
+ format = "{icon}";
+ format-icons = {
+ notification = "";
+ none = "";
+ dnd-notification = "";
+ dnd-none = "";
+ inhibited-notification = "";
+ inhibited-none = "";
+ dnd-inhibited-notification = "";
+ dnd-inhibited-none = "";
+ };
+ return-type = "json";
+ exec-if = "which swaync-client";
+ exec = "${pkgs.swaynotificationcenter}/bin/swaync-client -swb";
+ on-click = "${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
+ on-click-right = "${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw";
+ escape = true;
+ };
+ "custom/power-menu" = {
+ tooltip = true;
+ tooltip-format = "Power menu";
+ format = " ";
+ on-click = "power-menu";
+ };
+ };
+
+}
diff --git a/users/natalie/home/waybar/style.nix b/users/natalie/home/waybar/style.nix
new file mode 100644
index 0000000000000000000000000000000000000000..048f66934053d4f9da0482ac511610aa11eefea3
--- /dev/null
+++ b/users/natalie/home/waybar/style.nix
@@ -0,0 +1,107 @@
+{ ... }:
+let
+ custom = {
+ font = "Maple Mono";
+ font_size = "18px";
+ font_weight = "bold";
+ text_color = "#FBF1C7";
+ background_0 = "#1D2021";
+ background_1 = "#282828";
+ border_color = "#A89984";
+ red = "#CC241D";
+ green = "#98971A";
+ yellow = "#FABD2F";
+ blue = "#458588";
+ magenta = "#B16286";
+ cyan = "#689D6A";
+ orange = "#D65D0E";
+ orange_bright = "#FE8019";
+ opacity = "1";
+ indicator_height = "2px";
+ };
+in
+{
+ programs.waybar.style = with custom; ''
+ * {
+ border: none;
+ border-radius: 0px;
+ padding: 0;
+ margin: 0;
+ font-family: ${font};
+ font-weight: ${font_weight};
+ opacity: ${opacity};
+ font-size: ${font_size};
+ }
+
+ window#waybar {
+ background: ${background_1};
+ border-top: 1px solid ${border_color};
+ }
+
+ tooltip {
+ background: ${background_1};
+ border: 1px solid ${border_color};
+ }
+ tooltip label {
+ margin: 5px;
+ color: ${text_color};
+ }
+
+ #workspaces {
+ padding-left: 15px;
+ }
+ #workspaces button {
+ color: ${yellow};
+ padding-left: 5px;
+ padding-right: 5px;
+ margin-right: 10px;
+ }
+ #workspaces button.empty {
+ color: ${text_color};
+ }
+ #workspaces button.active {
+ color: ${orange_bright};
+ }
+
+ #clock {
+ color: ${text_color};
+ }
+
+ #tray {
+ margin-left: 10px;
+ color: ${text_color};
+ }
+ #tray menu {
+ background: ${background_1};
+ border: 1px solid ${border_color};
+ padding: 8px;
+ }
+ #tray menuitem {
+ padding: 1px;
+ }
+
+ #pulseaudio, #network, #cpu, #memory, #disk, #battery, #language, #custom-notification, #custom-power-menu {
+ padding-left: 5px;
+ padding-right: 5px;
+ margin-right: 10px;
+ color: ${text_color};
+ }
+
+ #pulseaudio, #language, #custom-notification {
+ margin-left: 15px;
+ }
+
+ #custom-power-menu {
+ padding-right: 2px;
+ margin-right: 5px;
+ }
+
+ #custom-launcher {
+ font-size: 20px;
+ color: ${text_color};
+ font-weight: bold;
+ margin-left: 15px;
+ padding-right: 10px;
+ }
+ '';
+}
diff --git a/users/natalie/home/waybar/waybar.nix b/users/natalie/home/waybar/waybar.nix
new file mode 100644
index 0000000000000000000000000000000000000000..67a25fee81417c370526e6a5b6aac1656831148f
--- /dev/null
+++ b/users/natalie/home/waybar/waybar.nix
@@ -0,0 +1,7 @@
+{ ... }:
+{
+ programs.waybar = {
+ enable = true;
+ systemd.enable = true;
+ };
+}
diff --git a/users/natalie/packages.nix b/users/natalie/packages.nix
index 5a16c867d2b398df4e52266913e6669be2743dc0..0cb6798189443f20949825e937b644c3939def79 100644
--- a/users/natalie/packages.nix
+++ b/users/natalie/packages.nix
@@ -18,6 +18,10 @@ with pkgs;
typescript-language-server
deno
+ #desktop shit
+ gtk3
+ gtk4
+
#ides
#virtualization
@@ -37,7 +41,6 @@ with pkgs;
#terminal stuff
(btop.override { cudaSupport = true; })
- tmux
zellij
lazygit
fzf