diff --git a/flake.lock b/flake.lock index 0120d67..8bad34c 100644 --- a/flake.lock +++ b/flake.lock @@ -62,11 +62,11 @@ ] }, "locked": { - "lastModified": 1762356719, - "narHash": "sha256-qwd/xdoOya1m8FENle+4hWnydCtlXUWLAW/Auk6WL7s=", + "lastModified": 1764370710, + "narHash": "sha256-7iZklFmziy6Vn5ZFy9mvTSuFopp3kJNuPxL5QAvtmFQ=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "6d0b3567584691bf9d8fedb5d0093309e2f979c7", + "rev": "561ae7fbe1ca15dfd908262ec815bf21a13eef63", "type": "github" }, "original": { @@ -81,9 +81,7 @@ "flake-compat": "flake-compat", "flake-parts": "flake-parts", "nix-github-actions": "nix-github-actions", - "nixpkgs": [ - "nixpkgs-stable" - ], + "nixpkgs": "nixpkgs", "nixpkgs-stable": "nixpkgs-stable" }, "locked": { @@ -109,11 +107,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1763732354, - "narHash": "sha256-o1O5GCgdkehrvqqvwfX53TCiES8k+z9Ac1JKuIUZfwo=", + "lastModified": 1764956616, + "narHash": "sha256-jTGdwLtST22pUZqlRvOMAwSBxpj4bxKpIfThpmBX3Pw=", "ref": "refs/heads/main", - "rev": "880d590d0e6e337cb96428edbedae81283ebec19", - "revCount": 1310, + "rev": "526dd85c8047fb700dd7715701e4ca1e553275a0", + "revCount": 1321, "type": "git", "url": "https://codeberg.org/LGFae/awww" }, @@ -160,11 +158,11 @@ "base16-helix": { "flake": false, "locked": { - "lastModified": 1752979451, - "narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=", + "lastModified": 1760703920, + "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", "owner": "tinted-theming", "repo": "base16-helix", - "rev": "27cf1e66e50abc622fb76a3019012dc07c678fac", + "rev": "d646af9b7d14bff08824538164af99d0c521b185", "type": "github" }, "original": { @@ -201,11 +199,11 @@ ] }, "locked": { - "lastModified": 1763172111, - "narHash": "sha256-QseFQKZgMq/kbHlrhfaNlwEyQ1H3J+UhnbgpAIEGpvA=", + "lastModified": 1764381410, + "narHash": "sha256-WR/oQQjveFqQxo8oHngZuOVgBQINDgPe+lCXLeNhAAg=", "owner": "caelestia-dots", "repo": "cli", - "rev": "d89c438284311e99148ece61054cd6f9bc8e8cb7", + "rev": "ed12d4cb82600872a82feb577711be1148c7af35", "type": "github" }, "original": { @@ -223,11 +221,11 @@ "quickshell": "quickshell" }, "locked": { - "lastModified": 1763256383, - "narHash": "sha256-Vwct8SbZkfoTY0BbB0XVmXo5KsRIH4asV7QzXpjZ4b8=", + "lastModified": 1764655592, + "narHash": "sha256-xaKTcjcmUqkJVb0DQv5UKib/tSFeyBTOuaWxyIlzSTw=", "owner": "caelestia-dots", "repo": "shell", - "rev": "58fe2962b6f515e879962953fcb4fcd9c8f39c32", + "rev": "16229e4219ef6a0951e4c9a3bff9bfe3fd54f16f", "type": "github" }, "original": { @@ -241,15 +239,15 @@ "flake-schemas": "flake-schemas", "home-manager": "home-manager", "jovian": "jovian", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "rust-overlay": "rust-overlay_2" }, "locked": { - "lastModified": 1763732117, - "narHash": "sha256-/zBu6slgHtkuFZFJ4ReKS3NO6rdwEv4KcaYADkz6KyA=", + "lastModified": 1764847736, + "narHash": "sha256-FMYnfCH2TMNnTJvbc/mraZpRszIL7nc5YI6w/pWNyNs=", "owner": "chaotic-cx", "repo": "nyx", - "rev": "a34640558e83eb3ba0d52c52cb5ffd0465786e4b", + "rev": "e3f8349d60d5daf58951b9ccd089fecb79ea5443", "type": "github" }, "original": { @@ -296,11 +294,11 @@ ] }, "locked": { - "lastModified": 1763651264, - "narHash": "sha256-8vvwZbw0s7YvBMJeyPVpWke6lg6ROgtts5N2/SMCcv4=", + "lastModified": 1764627417, + "narHash": "sha256-D6xc3Rl8Ab6wucJWdvjNsGYGSxNjQHzRc2EZ6eeQ6l4=", "owner": "nix-community", "repo": "disko", - "rev": "e86a89079587497174ccab6d0d142a65811a4fd9", + "rev": "5a88a6eceb8fd732b983e72b732f6f4b8269bef3", "type": "github" }, "original": { @@ -312,11 +310,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1758112371, - "narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=", + "lastModified": 1764724327, + "narHash": "sha256-OkFLrD3pFR952TrjQi1+Vdj604KLcMnkpa7lkW7XskI=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d", + "rev": "66b7c635763d8e6eb86bd766de5a1e1fbfcc1047", "type": "github" }, "original": { @@ -376,11 +374,11 @@ "flake-compat_4": { "flake": false, "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "lastModified": 1761588595, + "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", "owner": "edolstra", "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", "type": "github" }, "original": { @@ -487,11 +485,11 @@ ] }, "locked": { - "lastModified": 1762980239, - "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", + "lastModified": 1763759067, + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", "type": "github" }, "original": { @@ -547,11 +545,11 @@ ] }, "locked": { - "lastModified": 1756770412, - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "lastModified": 1763759067, + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "4524271976b625a4a605beefd893f270620fd751", + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", "type": "github" }, "original": { @@ -645,7 +643,7 @@ }, "flake-utils_4": { "inputs": { - "systems": "systems_6" + "systems": "systems_5" }, "locked": { "lastModified": 1731533236, @@ -663,7 +661,7 @@ }, "flake-utils_5": { "inputs": { - "systems": "systems_7" + "systems": "systems_6" }, "locked": { "lastModified": 1731533236, @@ -681,7 +679,10 @@ }, "flake-utils_6": { "inputs": { - "systems": "systems_8" + "systems": [ + "niri-nfsm", + "systems" + ] }, "locked": { "lastModified": 1731533236, @@ -699,7 +700,7 @@ }, "flake-utils_7": { "inputs": { - "systems": "systems_9" + "systems": "systems_8" }, "locked": { "lastModified": 1731533236, @@ -716,6 +717,24 @@ } }, "flake-utils_8": { + "inputs": { + "systems": "systems_9" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_9": { "inputs": { "systems": "systems_12" }, @@ -753,18 +772,16 @@ "inputs": { "flake-compat": "flake-compat_3", "flake-utils": "flake-utils_3", - "nixpkgs": [ - "nixpkgs" - ], + "nixpkgs": "nixpkgs_3", "zig": "zig", "zon2nix": "zon2nix" }, "locked": { - "lastModified": 1763704826, - "narHash": "sha256-Q2ArFuRzdNqR8gK0g2eBfnwwPWmiIIU4TPWa+xNHtqc=", + "lastModified": 1764953050, + "narHash": "sha256-TkMjYCGm6FHflVQadN6mx1+3lWzY4wl+3U40lfvTroQ=", "owner": "ghostty-org", "repo": "ghostty", - "rev": "5f3645433c0ba5910c7da1f25aaa07efc2c84b64", + "rev": "08c9661683edc1e9e63d8e6abd469a68faaee575", "type": "github" }, "original": { @@ -821,11 +838,11 @@ "flake": false, "locked": { "host": "gitlab.gnome.org", - "lastModified": 1762869044, - "narHash": "sha256-nwm/GJ2Syigf7VccLAZ66mFC8mZJFqpJmIxSGKl7+Ds=", + "lastModified": 1764524476, + "narHash": "sha256-bTmNn3Q4tMQ0J/P0O5BfTQwqEnCiQIzOGef9/aqAZvk=", "owner": "GNOME", "repo": "gnome-shell", - "rev": "680e3d195a92203f28d4bf8c6e8bb537cc3ed4ad", + "rev": "c0e1ad9f0f703fd0519033b8f46c3267aab51a22", "type": "gitlab" }, "original": { @@ -844,11 +861,11 @@ ] }, "locked": { - "lastModified": 1763416652, - "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", + "lastModified": 1764788330, + "narHash": "sha256-hE/gXK+Z0j654T0tsW+KcndRqsgZXe8HyWchjBJgQpw=", "owner": "nix-community", "repo": "home-manager", - "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", + "rev": "fca4cba863e76c26cfe48e5903c2ff4bac2b2d5d", "type": "github" }, "original": { @@ -864,11 +881,11 @@ ] }, "locked": { - "lastModified": 1763416652, - "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", + "lastModified": 1764998300, + "narHash": "sha256-fZatn/KLfHLDXnF0wy7JxXqGaZmGDTVufT4o/AOlj44=", "owner": "nix-community", "repo": "home-manager", - "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", + "rev": "27a6182347ccae90a88231ae0dc5dfa7d15815bb", "type": "github" }, "original": { @@ -922,40 +939,11 @@ ] }, "locked": { - "lastModified": 1762462052, - "narHash": "sha256-6roLYzcDf4V38RUMSqycsOwAnqfodL6BmhRkUtwIgdA=", + "lastModified": 1763733840, + "narHash": "sha256-JnET78yl5RvpGuDQy3rCycOCkiKoLr5DN1fPhRNNMco=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "ffc999d980c7b3bca85d3ebd0a9fbadf984a8162", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprgraphics", - "type": "github" - } - }, - "hyprgraphics_2": { - "inputs": { - "hyprutils": [ - "hyprlock", - "hyprutils" - ], - "nixpkgs": [ - "hyprlock", - "nixpkgs" - ], - "systems": [ - "hyprlock", - "systems" - ] - }, - "locked": { - "lastModified": 1759490292, - "narHash": "sha256-T6iWzDOXp8Wv0KQOCTHpBcmAOdHJ6zc/l9xaztW6Ivc=", - "owner": "hyprwm", - "repo": "hyprgraphics", - "rev": "9431db625cd9bb66ac55525479dce694101d6d7a", + "rev": "8f1bec691b2d198c60cccabca7a94add2df4ed1a", "type": "github" }, "original": { @@ -974,17 +962,18 @@ "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": "nixpkgs_3", + "hyprwire": "hyprwire", + "nixpkgs": "nixpkgs_5", "pre-commit-hooks": "pre-commit-hooks", "systems": "systems_4", "xdph": "xdph" }, "locked": { - "lastModified": 1763912895, - "narHash": "sha256-tTdCVeROhYTwV510tygS5AMutJGz5imM++P4+cXAy2w=", + "lastModified": 1764982118, + "narHash": "sha256-7Ofsbs4eJFyKUhm+PVv2QwTU77SQTmZ5X7yBPqArtR4=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "2b0fd417d32278159d0ca1d23fb997588c37995b", + "rev": "cedadf4fdc63e04ab41cab00c0417ba248ce748e", "type": "github" }, "original": { @@ -1026,11 +1015,11 @@ ] }, "locked": { - "lastModified": 1762755186, - "narHash": "sha256-ZjjETUHtoEhVN7JI1Cbt3p/KcXpK8ZQaPHx7UkG1OgA=", + "lastModified": 1764616927, + "narHash": "sha256-wRT0MKkpPo11ijSX3KeMN+EQWnpSeUlRtyF3pFLtlRU=", "owner": "hyprwm", "repo": "hyprland-guiutils", - "rev": "66356e20a8ed348aa49c1b9ceace786e224225b3", + "rev": "25cedbfdc5b3ea391d8307c9a5bea315e5df3c52", "type": "github" }, "original": { @@ -1056,11 +1045,11 @@ ] }, "locked": { - "lastModified": 1763732618, - "narHash": "sha256-hvElpSNHbYSBsn/GoJV0RgAecpn3vcC5kJso34XqwJw=", + "lastModified": 1764888835, + "narHash": "sha256-CnxxUzSj421QJD2RW7zB1LhvwT+zAFpVDEGw6DKj0II=", "owner": "hyprwm", "repo": "hyprland-plugins", - "rev": "57961d69ad9725986290c8c0f2b0d118b645daee", + "rev": "4ccb444d942d6fbd3135495fe3a0440610cf747a", "type": "github" }, "original": { @@ -1110,11 +1099,11 @@ ] }, "locked": { - "lastModified": 1763254292, - "narHash": "sha256-JNgz3Fz2KMzkT7aR72wsgu/xNeJB//LSmdilh8Z/Zao=", + "lastModified": 1764612430, + "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "deea98d5b61d066bdc7a68163edd2c4bd28d3a6b", + "rev": "0d00dc118981531aa731150b6ea551ef037acddd", "type": "github" }, "original": { @@ -1123,60 +1112,6 @@ "type": "github" } }, - "hyprlang_2": { - "inputs": { - "hyprutils": [ - "hyprlock", - "hyprutils" - ], - "nixpkgs": [ - "hyprlock", - "nixpkgs" - ], - "systems": [ - "hyprlock", - "systems" - ] - }, - "locked": { - "lastModified": 1758927902, - "narHash": "sha256-LZgMds7M94+vuMql2bERQ6LiFFdhgsEFezE4Vn+Ys3A=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "4dafa28d4f79877d67a7d1a654cddccf8ebf15da", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprlock": { - "inputs": { - "hyprgraphics": "hyprgraphics_2", - "hyprlang": "hyprlang_2", - "hyprutils": "hyprutils_2", - "hyprwayland-scanner": "hyprwayland-scanner_2", - "nixpkgs": [ - "nixpkgs" - ], - "systems": "systems_5" - }, - "locked": { - "lastModified": 1761675634, - "narHash": "sha256-Et1jNDB2d3e0b4okIKuyAMktECS+5hk+vMAA7X598ao=", - "owner": "hyprwm", - "repo": "hyprlock", - "rev": "98b86752fe4867bd14ef96a92ea788229af93130", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlock", - "type": "github" - } - }, "hyprtoolkit": { "inputs": { "aquamarine": [ @@ -1216,11 +1151,11 @@ ] }, "locked": { - "lastModified": 1762463729, - "narHash": "sha256-2fYkU/mdz8WKY3dkDPlE/j6hTxIwqultsx4gMMsMns0=", + "lastModified": 1764592794, + "narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=", "owner": "hyprwm", "repo": "hyprtoolkit", - "rev": "88483bdee5329ec985f0c8f834c519cd18cfe532", + "rev": "5cfe0743f0e608e1462972303778d8a0859ee63e", "type": "github" }, "original": { @@ -1241,36 +1176,11 @@ ] }, "locked": { - "lastModified": 1763323331, - "narHash": "sha256-+Z0OfCo1MS8/aIutSAW5aJR9zTae1wz9kcJYMgpwN6M=", + "lastModified": 1764637132, + "narHash": "sha256-vSyiKCzSY48kA3v39GFu6qgRfigjKCU/9k1KTK475gg=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "0c6411851cc779d551edc89b83966696201611aa", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprutils", - "type": "github" - } - }, - "hyprutils_2": { - "inputs": { - "nixpkgs": [ - "hyprlock", - "nixpkgs" - ], - "systems": [ - "hyprlock", - "systems" - ] - }, - "locked": { - "lastModified": 1759619523, - "narHash": "sha256-r1ed7AR2ZEb2U8gy321/Xcp1ho2tzn+gG1te/Wxsj1A=", - "owner": "hyprwm", - "repo": "hyprutils", - "rev": "3df7bde01efb3a3e8e678d1155f2aa3f19e177ef", + "rev": "2f2413801beee37303913fc3c964bbe92252a963", "type": "github" }, "original": { @@ -1291,11 +1201,11 @@ ] }, "locked": { - "lastModified": 1755184602, - "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", + "lastModified": 1763640274, + "narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", + "rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671", "type": "github" }, "original": { @@ -1304,28 +1214,32 @@ "type": "github" } }, - "hyprwayland-scanner_2": { + "hyprwire": { "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], "nixpkgs": [ - "hyprlock", + "hyprland", "nixpkgs" ], "systems": [ - "hyprlock", + "hyprland", "systems" ] }, "locked": { - "lastModified": 1755184602, - "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", + "lastModified": 1764773840, + "narHash": "sha256-9UcCdwe7vPgEcJJ64JseBQL0ZJZoxp/2iFuvfRI+9zk=", "owner": "hyprwm", - "repo": "hyprwayland-scanner", - "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", + "repo": "hyprwire", + "rev": "3f1997d6aeced318fb141810fded2255da811293", "type": "github" }, "original": { "owner": "hyprwm", - "repo": "hyprwayland-scanner", + "repo": "hyprwire", "type": "github" } }, @@ -1338,11 +1252,11 @@ ] }, "locked": { - "lastModified": 1763453666, - "narHash": "sha256-Hu8lDUlbMFvcYX30LBXX7Gq5FbU35bERH0pSX5qHf/Q=", + "lastModified": 1764746434, + "narHash": "sha256-6ymFuw+Z1C90ezf8H0BP3c2JFZhJYwMq31px2StwWHU=", "owner": "Jovian-Experiments", "repo": "Jovian-NixOS", - "rev": "b843b551415c7aecc97c8b3ab3fff26fd0cd8bbf", + "rev": "b4c0b604148adacf119b89824ed26df8926ce42c", "type": "github" }, "original": { @@ -1443,11 +1357,11 @@ "spectrum": "spectrum" }, "locked": { - "lastModified": 1763429621, - "narHash": "sha256-xJD3vjEdDP+/XKLgPAkaX44s2xuiAeOhCdjs2jrALY4=", + "lastModified": 1764625594, + "narHash": "sha256-RwtPzq4rqDCLki3oOLuUUkKcuaZPy4IDUBb5tAWl4Xk=", "owner": "microvm-nix", "repo": "microvm.nix", - "rev": "c4e4a264da114c618251b17eb4c959f86376e530", + "rev": "6dab9a797f262a352eed55078597582ed2ded336", "type": "github" }, "original": { @@ -1475,14 +1389,14 @@ "inputs": { "flake-parts": "flake-parts_3", "neovim-src": "neovim-src", - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1763683496, - "narHash": "sha256-k20voxbsi+899PeXlvWpKU5tcgNYfNqC52rgrh+MOto=", + "lastModified": 1764979571, + "narHash": "sha256-xOGEM8dZ6WtOnf+fkTthtiUbE47ZCEvuZTVsOrdTEZU=", "owner": "nix-community", "repo": "neovim-nightly-overlay", - "rev": "1ddc8e956c8165df29735202b76bb0cfa827916d", + "rev": "a70eaf7ca72ae845d53e2b2aa6106eebb00a4ed0", "type": "github" }, "original": { @@ -1494,11 +1408,11 @@ "neovim-src": { "flake": false, "locked": { - "lastModified": 1763682595, - "narHash": "sha256-/dUf5I0DyLvPgFzjJj0/lUHKZ2M1sVlbYCgudDabxIo=", + "lastModified": 1764968664, + "narHash": "sha256-aueNP7DLGEqX+eUlkMz0X7h0X3c4IxLLxhMBG7MTPpg=", "owner": "neovim", "repo": "neovim", - "rev": "a8b9660ca3452a27b68bf914f618df2d78b64180", + "rev": "d6bee7e407442112ee9008ea35d6fe73dbb3eaaf", "type": "github" }, "original": { @@ -1507,6 +1421,87 @@ "type": "github" } }, + "niri": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_3", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1764971746, + "narHash": "sha256-PPwnDjR6ZjPooITfu6SWnoPsj3EV4fLrXk93U2RhjZ0=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "b0ebfba3a0774cc0b3f3b9a345ebad57de04b666", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "type": "github" + } + }, + "niri-nfsm": { + "inputs": { + "flake-utils": "flake-utils_6", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems_7" + }, + "locked": { + "lastModified": 1764588231, + "narHash": "sha256-vH7ILtO2y7wesmbgzi4XiDVjiq2rvLEt4s8sW2t5IpY=", + "owner": "dachxy", + "repo": "nfsm", + "rev": "be633954b081bb050013f7c92d4f5d642c555af3", + "type": "github" + }, + "original": { + "owner": "dachxy", + "ref": "feat/hm-module", + "repo": "nfsm", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1756556321, + "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v25.08", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1764966114, + "narHash": "sha256-nC0Fsu4zSdabdR4tHHMCrTgqLms612eEDy5VCdQVZFk=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "ba29735fbbd8cf8319c71ccb55b54a0580007c80", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, "nix-github-actions": { "inputs": { "nixpkgs": [ @@ -1558,11 +1553,11 @@ ] }, "locked": { - "lastModified": 1763265660, - "narHash": "sha256-Ad9Rd3ZAidrH01xP73S3CjPiyXo7ywZs3uCESjPwUdc=", + "lastModified": 1764475780, + "narHash": "sha256-77jL5H5x51ksLiOUDjY0ZK8e2T4ZXLhj3ap8ETvknWI=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "469ef53571ea80890c9497952787920c79c1ee6e", + "rev": "5a3ff8c1a09003f399f43d5742d893c0b1ab8af0", "type": "github" }, "original": { @@ -1574,17 +1569,17 @@ "nix-minecraft": { "inputs": { "flake-compat": "flake-compat_6", - "flake-utils": "flake-utils_6", + "flake-utils": "flake-utils_7", "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1763690461, - "narHash": "sha256-q3tHxrMu5BjSG8pE53dOevl4JmyhR73sICy/kJ0fYNk=", + "lastModified": 1764986396, + "narHash": "sha256-HYBvpziKGvKY/XfMCBRCTuUUqhPWjWiWaPthIsPzGDk=", "owner": "Infinidoge", "repo": "nix-minecraft", - "rev": "106ec777ce9fb7e98c9d68d717c91d5d59ce497b", + "rev": "70b931d67256ad7ebfced45ed797c016943bbff2", "type": "github" }, "original": { @@ -1595,15 +1590,15 @@ }, "nix-search-tv": { "inputs": { - "flake-utils": "flake-utils_7", - "nixpkgs": "nixpkgs_5" + "flake-utils": "flake-utils_8", + "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1760307084, - "narHash": "sha256-fhXbkH1iqLugr5zkuSgxUYziq5Q4f+QnV5eSag9La8g=", + "lastModified": 1763912269, + "narHash": "sha256-9/OFoOAE5fNfwbemapBeBWZqaDz7/Q7h1w93YmiLuns=", "owner": "3timeslazy", "repo": "nix-search-tv", - "rev": "7499132c98e044e36bc73254d4179cff0d9d7768", + "rev": "c7919f34fde2e87de3fe70c74bf18c7e0091f19b", "type": "github" }, "original": { @@ -1642,11 +1637,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1761572354, - "narHash": "sha256-3aXsnYf/wXad8DRLTSTOlulS+65qp93eMo5R7pmaHi4=", + "lastModified": 1764841794, + "narHash": "sha256-TcJ2kgFn8qbbNCh7HJLadi4ZvW9CFrbLB02VS7biWlo=", "owner": "nix-community", "repo": "nixd", - "rev": "b9229d79b1cd722257c16027ea79d8f033c3aa4e", + "rev": "514db907c8a0b32a0bdc1678d480a5278da4b679", "type": "github" }, "original": { @@ -1657,16 +1652,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763421233, - "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", - "owner": "NixOS", + "lastModified": 1764836381, + "narHash": "sha256-8jemYbbW9EBttQKHep7Rj8kzXaxsrk/lACdXA2DN5Xk=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", + "rev": "ff06bd3398fb1bea6c937039ece7e7c8aa396ebf", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", + "owner": "nixos", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } @@ -1717,21 +1712,66 @@ }, "nixpkgs-stable_3": { "locked": { - "lastModified": 1763622513, - "narHash": "sha256-1jQnuyu82FpiSxowrF/iFK6Toh9BYprfDqfs4BB+19M=", - "owner": "nixos", + "lastModified": 1764831616, + "narHash": "sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "c58bc7f5459328e4afac201c5c4feb7c818d604b", + "rev": "c97c47f2bac4fa59e2cbdeba289686ae615f8ed4", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-25.05", + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1763806073, + "narHash": "sha256-FHsEKDvfWpzdADWj99z7vBk4D716Ujdyveo5+A048aI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "878e468e02bfabeda08c79250f7ad583037f2227", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_2": { + "locked": { + "lastModified": 1764667669, + "narHash": "sha256-7WUCZfmqLAssbDqwg9cUDAXrSoXN79eEEq17qhTNM/Y=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "418468ac9527e799809c900eda37cbff999199b6", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1764947035, + "narHash": "sha256-3PmKrux+ApKEM4IMRNAKeuWicwgRiRcprSuEnsbhVe4=", + "rev": "a672be65651c80d3f592a89b3945466584a22069", + "type": "tarball", + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre906997.a672be65651c/nixexprs.tar.xz" + }, + "original": { + "type": "tarball", + "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" + } + }, + "nixpkgs_4": { "locked": { "lastModified": 1758360447, "narHash": "sha256-XDY3A83bclygHDtesRoaRTafUd80Q30D/Daf9KSG6bs=", @@ -1744,13 +1784,13 @@ "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" } }, - "nixpkgs_3": { + "nixpkgs_5": { "locked": { - "lastModified": 1763283776, - "narHash": "sha256-Y7TDFPK4GlqrKrivOcsHG8xSGqQx3A6c+i7novT85Uk=", + "lastModified": 1764517877, + "narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "50a96edd8d0db6cc8db57dab6bb6d6ee1f3dc49a", + "rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c", "type": "github" }, "original": { @@ -1760,13 +1800,13 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_6": { "locked": { - "lastModified": 1763618868, - "narHash": "sha256-v5afmLjn/uyD9EQuPBn7nZuaZVV9r+JerayK/4wvdWA=", + "lastModified": 1764915887, + "narHash": "sha256-CeBCJ9BMsuzVgn8GVfuSRZ6xeau7szzG0Xn6O/OxP9M=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a8d610af3f1a5fb71e23e08434d8d61a466fc942", + "rev": "42e29df35be6ef54091d3a3b4e97056ce0a98ce8", "type": "github" }, "original": { @@ -1776,7 +1816,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_7": { "locked": { "lastModified": 1757584362, "narHash": "sha256-XeTX/w16rUNUNBsfaOVCDoMMa7Xu7KvIMT7tn1zIEcg=", @@ -1792,49 +1832,17 @@ "type": "github" } }, - "nixpkgs_6": { - "locked": { - "lastModified": 1763421233, - "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_7": { - "locked": { - "lastModified": 1763191728, - "narHash": "sha256-esRhOS0APE6k40Hs/jjReXg+rx+J5LkWw7cuWFKlwYA=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "1d4c88323ac36805d09657d13a5273aea1b34f0c", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_8": { "locked": { - "lastModified": 1762286042, - "narHash": "sha256-OD5HsZ+sN7VvNucbrjiCz7CHF5zf9gP51YVJvPwYIH8=", - "owner": "NixOS", + "lastModified": 1764947035, + "narHash": "sha256-EYHSjVM4Ox4lvCXUMiKKs2vETUSL5mx+J2FfutM7T9w=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "12c1f0253aa9a54fdf8ec8aecaafada64a111e24", + "rev": "a672be65651c80d3f592a89b3945466584a22069", "type": "github" }, "original": { - "owner": "NixOS", + "owner": "nixos", "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" @@ -1842,20 +1850,40 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1727348695, - "narHash": "sha256-J+PeFKSDV+pHL7ukkfpVzCOO7mBSrrpJ3svwBFABbhI=", - "owner": "nixos", + "lastModified": 1764445028, + "narHash": "sha256-ik6H/0Zl+qHYDKTXFPpzuVHSZE+uvVz2XQuQd1IVXzo=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "1925c603f17fc89f4c8f6bf6f631a802ad85d784", + "rev": "a09378c0108815dbf3961a0e085936f4146ec415", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, + "noctalia": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1764990750, + "narHash": "sha256-oC3RAbXX2Yu+zkIQJlWgaT8mdKcv6JDiuI0XIOEGHyo=", + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "rev": "bdffb0f95941a4dd45287395b0f377e7c7895834", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "type": "github" + } + }, "nur": { "inputs": { "flake-parts": [ @@ -1868,11 +1896,11 @@ ] }, "locked": { - "lastModified": 1758998580, - "narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=", + "lastModified": 1764773531, + "narHash": "sha256-mCBl7MD1WZ7yCG6bR9MmpPO2VydpNkWFgnslJRIT1YU=", "owner": "nix-community", "repo": "NUR", - "rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728", + "rev": "1d9616689e98beded059ad0384b9951e967a17fa", "type": "github" }, "original": { @@ -1892,11 +1920,11 @@ "systems": "systems_10" }, "locked": { - "lastModified": 1762622004, - "narHash": "sha256-NpzzgaoMK8aRHnndHWbYNKLcZN0r1y6icCoJvGoBsoE=", + "lastModified": 1764904740, + "narHash": "sha256-TzqXUQlESmS5XGJ3tR1/xdoU0vySyp6YUUpmGF5F0kY=", "owner": "NotAShelf", "repo": "nvf", - "rev": "09470524a214ed26633ddc2b6ec0c9bf31a8b909", + "rev": "249cabe0c5392c384c82fa9d28d3f49fbeb04266", "type": "github" }, "original": { @@ -1915,11 +1943,11 @@ ] }, "locked": { - "lastModified": 1763319842, - "narHash": "sha256-YG19IyrTdnVn0l3DvcUYm85u3PaqBt6tI6VvolcuHnA=", + "lastModified": 1763988335, + "narHash": "sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh+M4Qc=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "7275fa67fbbb75891c16d9dee7d88e58aea2d761", + "rev": "50b9238891e388c9fdc6a5c49e49c42533a1b5ce", "type": "github" }, "original": { @@ -1963,11 +1991,11 @@ ] }, "locked": { - "lastModified": 1763210607, - "narHash": "sha256-gyEL9lw8oSbFbZ323vYUpIhcZLzudACEAQyCTkYh1WM=", + "lastModified": 1764045583, + "narHash": "sha256-W24ReyRrhOKTKIsuAMkY5hnVlCufGoONM79sjUoyQkk=", "ref": "refs/heads/master", - "rev": "0a7dcf30eaf438aa1ec72a9017cdb952df03f005", - "revCount": 704, + "rev": "e9bad67619ee9937a1bbecfc6ad3b4231d2ecdc3", + "revCount": 709, "type": "git", "url": "https://git.outfoxxed.me/outfoxxed/quickshell" }, @@ -1989,20 +2017,21 @@ "home-manager": "home-manager_2", "hyprland": "hyprland", "hyprland-plugins": "hyprland-plugins", - "hyprlock": "hyprlock", "lanzaboote": "lanzaboote", "mail-ntfy-server": "mail-ntfy-server", "mail-server": "mail-server", "marks-nvim": "marks-nvim", "microvm": "microvm", "neovim-nightly-overlay": "neovim-nightly-overlay", + "niri": "niri", + "niri-nfsm": "niri-nfsm", "nix-index-database": "nix-index-database", "nix-minecraft": "nix-minecraft", "nix-search-tv": "nix-search-tv", "nix-tmodloader": "nix-tmodloader", "nixd": "nixd", - "nixpkgs": "nixpkgs_6", - "nixpkgs-stable": "nixpkgs-stable_3", + "nixpkgs": "nixpkgs_8", + "noctalia": "noctalia", "nvf": "nvf", "rust-overlay": "rust-overlay_4", "sops-nix": "sops-nix", @@ -2019,11 +2048,11 @@ ] }, "locked": { - "lastModified": 1761964689, - "narHash": "sha256-Zo3LQQDz+64EQ9zor/WmeNTFLoZkjmhp0UY3G0D3seE=", + "lastModified": 1764038373, + "narHash": "sha256-M6w2wNBRelcavoDAyFL2iO4NeWknD40ASkH1S3C0YGM=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "63d22578600f70d293aede6bc737efef60ebd97f", + "rev": "ab3536fe850211a96673c6ffb2cb88aab8071cc9", "type": "github" }, "original": { @@ -2040,11 +2069,11 @@ ] }, "locked": { - "lastModified": 1763433504, - "narHash": "sha256-cVid5UNpk88sPYHkLAA5aZEHOFQXSB/2L1vl18Aq7IM=", + "lastModified": 1764729618, + "narHash": "sha256-z4RA80HCWv2los1KD346c+PwNPzMl79qgl7bCVgz8X0=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "42ce16c6d8318a654d53f047c9400b7d902d6e61", + "rev": "52764074a85145d5001bf0aa30cb71936e9ad5b8", "type": "github" }, "original": { @@ -2081,11 +2110,11 @@ ] }, "locked": { - "lastModified": 1763692705, - "narHash": "sha256-tCKCyMYU0Vy+ph/xswlNsYXXjnFVweWBV+ew/5FS9tA=", + "lastModified": 1764988672, + "narHash": "sha256-FIJtt3Zil89/hLy9i7f0R2xXcJDPc3CeqiiCLfsFV0Y=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "6fbf5d328dce1828d887b8ee7d44a785196a34e7", + "rev": "086fd19a68e80fcc8a298e9df4674982e4c498a6", "type": "github" }, "original": { @@ -2102,11 +2131,11 @@ ] }, "locked": { - "lastModified": 1762396738, - "narHash": "sha256-BarSecuxtzp1boERdABLkkoxQTi6s/V33lJwUbWLrLY=", + "lastModified": 1763952169, + "narHash": "sha256-+PeDBD8P+NKauH+w7eO/QWCIp8Cx4mCfWnh9sJmy9CM=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "c63598992afd54d215d54f2b764adc0484c2b159", + "rev": "ab726555a9a72e6dc80649809147823a813fa95b", "type": "github" }, "original": { @@ -2117,14 +2146,14 @@ }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_7" + "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1763607916, - "narHash": "sha256-VefBA1JWRXM929mBAFohFUtQJLUnEwZ2vmYUNkFnSjE=", + "lastModified": 1764483358, + "narHash": "sha256-EyyvCzXoHrbL467YSsQBTWWg4sR96MH1sPpKoSOelB4=", "owner": "Mic92", "repo": "sops-nix", - "rev": "877bb495a6f8faf0d89fc10bd142c4b7ed2bcc0b", + "rev": "5aca6ff67264321d47856a2ed183729271107c9c", "type": "github" }, "original": { @@ -2170,11 +2199,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1763695782, - "narHash": "sha256-XNc65mYmCzadkYlsahfvrhqRfIvQlX94PzTEjmO1yYo=", + "lastModified": 1764979509, + "narHash": "sha256-n68Io6VWMbUX4857RHqGOfH9MDdta7EX6OYn8e/m8sI=", "owner": "nix-community", "repo": "stylix", - "rev": "57e963fd7901ddce320bbb8fdd910113e4a1fd31", + "rev": "3a332459f45b16c6df9d788e923f293a4c28d793", "type": "github" }, "original": { @@ -2290,16 +2319,16 @@ }, "systems_5": { "locked": { - "lastModified": 1689347949, - "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", - "repo": "default-linux", - "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default-linux", + "repo": "default", "type": "github" } }, @@ -2320,16 +2349,16 @@ }, "systems_7": { "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" } }, @@ -2399,11 +2428,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1757716333, - "narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=", + "lastModified": 1763914658, + "narHash": "sha256-Hju0WtMf3iForxtOwXqGp3Ynipo0EYx1AqMKLPp9BJw=", "owner": "tinted-theming", "repo": "schemes", - "rev": "317a5e10c35825a6c905d912e480dfe8e71c7559", + "rev": "0f6be815d258e435c9b137befe5ef4ff24bea32c", "type": "github" }, "original": { @@ -2415,11 +2444,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1757811970, - "narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=", + "lastModified": 1764465359, + "narHash": "sha256-lbSVPqLEk2SqMrnpvWuKYGCaAlfWFMA6MVmcOFJjdjE=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e", + "rev": "edf89a780e239263cc691a987721f786ddc4f6aa", "type": "github" }, "original": { @@ -2431,11 +2460,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1757811247, - "narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=", + "lastModified": 1764464512, + "narHash": "sha256-rCD/pAhkMdCx6blsFwxIyvBJbPZZ1oL2sVFrH07lmqg=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e", + "rev": "907dbba5fb8cf69ebfd90b00813418a412d0a29a", "type": "github" }, "original": { @@ -2506,18 +2535,51 @@ "type": "github" } }, + "xwayland-satellite-stable": { + "flake": false, + "locked": { + "lastModified": 1755491097, + "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "388d291e82ffbc73be18169d39470f340707edaa", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "ref": "v0.7", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1764721075, + "narHash": "sha256-ChH4nq0cMEEkzkHqKlQt5Z7wxrk8ybcEHuA1YKAYmV0=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "1b918e29b419e89910014054e8b71d54c9235ea5", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } + }, "yazi": { "inputs": { - "flake-utils": "flake-utils_8", - "nixpkgs": "nixpkgs_8", + "flake-utils": "flake-utils_9", + "nixpkgs": "nixpkgs_10", "rust-overlay": "rust-overlay_5" }, "locked": { - "lastModified": 1763600401, - "narHash": "sha256-druDd9HC3UxZSzCY+qaFp9QDCGfzrhv+Zrytia6lJUE=", + "lastModified": 1764949583, + "narHash": "sha256-pB+q3HIyIA3k1AnDiU9MDfJ5xNso1XX95qV0F5oe3cM=", "owner": "sxyazi", "repo": "yazi", - "rev": "a08b345a02c6b4c65239a0522f67e77a0132e88b", + "rev": "c569263a5084f627ae70f983c271464b42890426", "type": "github" }, "original": { @@ -2528,18 +2590,23 @@ }, "zen-browser": { "inputs": { - "nixpkgs": "nixpkgs_9" + "home-manager": [ + "home-manager" + ], + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1764136401, - "narHash": "sha256-7BiCmuCODADZxP/Ln/pkVY0V6ortpvEFLaaqgIqIbKM=", - "owner": "dachxy", + "lastModified": 1764995001, + "narHash": "sha256-jx0CmXLSJP0kttcrh7AvTMttS5gbst44h03Xe2fBCmM=", + "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "96c4f000c7b73fb0fe989c8128761ef46918f865", + "rev": "298788c28f8e1d912a678ab4108383c1ac979801", "type": "github" }, "original": { - "owner": "dachxy", + "owner": "0xc000022070", "repo": "zen-browser-flake", "type": "github" } @@ -2575,7 +2642,7 @@ }, "zon2nix": { "inputs": { - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_4" }, "locked": { "lastModified": 1758405547, diff --git a/flake.nix b/flake.nix index 770c4fc..83334a2 100644 --- a/flake.nix +++ b/flake.nix @@ -2,12 +2,8 @@ description = "DACHXY's NixOS with hyprland"; inputs = { - nixpkgs-stable = { - url = "github:nixos/nixpkgs/nixos-25.05"; - }; - nixpkgs = { - url = "github:nixos/nixpkgs/nixos-unstable"; + url = "github:nixos/nixpkgs/nixpkgs-unstable"; }; home-manager = { @@ -27,7 +23,6 @@ ghostty = { url = "github:ghostty-org/ghostty"; - inputs.nixpkgs.follows = "nixpkgs"; }; yazi = { @@ -69,32 +64,22 @@ url = "github:Mic92/sops-nix"; }; - hyprlock = { - url = "github:hyprwm/hyprlock"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - awww = { url = "git+https://codeberg.org/LGFae/awww"; inputs.nixpkgs.follows = "nixpkgs"; }; zen-browser = { - url = "github:dachxy/zen-browser-flake"; + url = "github:0xc000022070/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; }; - chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; - actual-budget-api = { url = "github:DACHXY/actual-budget-api"; inputs.nixpkgs.follows = "nixpkgs"; }; - caelestia-shell = { - url = "github:caelestia-dots/shell"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - microvm = { url = "github:microvm-nix/microvm.nix"; inputs.nixpkgs.follows = "nixpkgs"; @@ -106,7 +91,7 @@ }; nvf = { - url = "github:NotAShelf/nvf"; + url = "github:notashelf/nvf"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -124,11 +109,12 @@ attic = { url = "github:zhaofengli/attic"; - inputs.nixpkgs.follows = "nixpkgs-stable"; + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; }; actual-budget-server = { - url = "github:dachxy/actual-budget-flake"; + url = "git+file:///home/danny/projects/actual-budget-flake"; + # url = "github:dachxy/actual-budget-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -143,13 +129,34 @@ }; nix-search-tv.url = "github:3timeslazy/nix-search-tv"; + + niri = { + url = "github:sodiboo/niri-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + niri-nfsm = { + url = "github:dachxy/nfsm/feat/hm-module"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + # ==== Shell ==== # + caelestia-shell = { + url = "github:caelestia-dots/shell"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + noctalia = { + url = "github:noctalia-dev/noctalia-shell"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; outputs = { self, nixpkgs, - nixpkgs-stable, ... }@inputs: let @@ -184,9 +191,6 @@ pkgs = import nixpkgs { inherit system; }; - pkgs-stable = import nixpkgs-stable { - inherit system; - }; helper = import ./helper { inherit pkgs @@ -200,7 +204,6 @@ helper inputs self - pkgs-stable ; }; modules = [ @@ -209,6 +212,7 @@ nixpkgs.hostPlatform = system; nixpkgs.config.allowUnfree = true; nixpkgs.overlays = [ + inputs.niri.overlays.niri inputs.mail-server.overlay inputs.nix-minecraft.overlay inputs.nix-tmodloader.overlay @@ -225,11 +229,11 @@ inputs.sops-nix.nixosModules.sops inputs.nix-minecraft.nixosModules.minecraft-servers inputs.nix-tmodloader.nixosModules.tmodloader - inputs.chaotic.nixosModules.default inputs.actual-budget-api.nixosModules.default inputs.stylix.nixosModules.stylix inputs.attic.nixosModules.atticd inputs.mail-server.nixosModules.default + inputs.niri.nixosModules.niri ./options # ==== Private Configuration ==== # diff --git a/helper/default.nix b/helper/default.nix index 290079e..bd5f7d6 100644 --- a/helper/default.nix +++ b/helper/default.nix @@ -105,4 +105,20 @@ in elements: optionalString (builtins.length elements > 0) "elements = { ${concatStringsSep "," elements} }"; }; + + getMonitors = + profileName: config: + let + inherit (lib) + pipe + filter + elemAt + length + ; + in + (pipe config.services.kanshi.settings [ + (x: filter (p: p.profile.name == profileName) x) + (x: if (length x > 0) then elemAt x 0 else { profile.outputs = [ ]; }) + (x: x.profile.outputs) + ]); } diff --git a/home/config/vm/win11_kvm.xml b/home/config/vm/win11_kvm.xml deleted file mode 100755 index fba6256..0000000 --- a/home/config/vm/win11_kvm.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - win11 - ca98654b-f29d-46be-8dfd-49e0b0a4e598 - - - - - - 8388608 - 8388608 - 4 - - hvm - /etc/ovmf/edk2-x86_64-secure-code.fd - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /run/libvirt/nix-emulators/qemu-system-x86_64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/home/config/zen/zen-keyboard-shortcuts.json b/home/config/zen/zen-keyboard-shortcuts.json new file mode 100644 index 0000000..7522ebe --- /dev/null +++ b/home/config/zen/zen-keyboard-shortcuts.json @@ -0,0 +1 @@ +{"shortcuts":[{"id":"key_wrToggleCaptureSequenceCmd","key":"^","keycode":null,"group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"wrToggleCaptureSequenceCmd","disabled":false,"reserved":false,"internal":false},{"id":"key_wrCaptureCmd","key":"#","keycode":null,"group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"wrCaptureCmd","disabled":false,"reserved":false,"internal":false},{"id":"key_selectLastTab","key":"d","keycode":"","group":"windowAndTabManagement","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_selectTab8","key":"s","keycode":"","group":"windowAndTabManagement","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_selectTab7","key":"a","keycode":"","group":"windowAndTabManagement","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_selectTab6","key":"e","keycode":"","group":"windowAndTabManagement","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_selectTab5","key":"w","keycode":"","group":"windowAndTabManagement","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_selectTab4","key":"q","keycode":"","group":"windowAndTabManagement","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_selectTab3","key":"3","keycode":null,"group":"windowAndTabManagement","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_selectTab2","key":"2","keycode":null,"group":"windowAndTabManagement","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_selectTab1","key":"1","keycode":null,"group":"windowAndTabManagement","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_undoCloseWindow","key":"n","keycode":null,"group":"windowAndTabManagement","l10nId":"zen-window-new-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"History:UndoCloseWindow","disabled":false,"reserved":false,"internal":false},{"id":"key_restoreLastClosedTabOrWindowOrSession","key":"t","keycode":null,"group":"windowAndTabManagement","l10nId":"zen-restore-last-closed-tab-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"History:RestoreLastClosedTabOrWindowOrSession","disabled":false,"reserved":false,"internal":false},{"id":"key_quitApplication","key":"","keycode":"","group":"windowAndTabManagement","l10nId":"zen-quit-app-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_quitApplication","disabled":false,"reserved":true,"internal":false},{"id":"key_sanitize","keycode":"VK_DELETE","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"Tools:Sanitize","disabled":false,"reserved":false,"internal":false},{"id":"key_screenshot","key":"s","keycode":"","group":"mediaAndDisplay","l10nId":"zen-screenshot-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"Browser:Screenshot","disabled":false,"reserved":false,"internal":false},{"id":"key_privatebrowsing","key":"p","keycode":null,"group":"navigation","l10nId":"zen-private-browsing-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"Tools:PrivateBrowsing","disabled":false,"reserved":true,"internal":false},{"id":"key_switchTextDirection","key":"x","keycode":null,"group":"mediaAndDisplay","l10nId":"zen-bidi-switch-direction-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"cmd_switchTextDirection","disabled":false,"reserved":false,"internal":false},{"id":"key_showAllTabs","keycode":"VK_TAB","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":null,"key":"","keycode":null,"group":"other","l10nId":"zen-full-zoom-reset-shortcut-alt","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_fullZoomReset","disabled":false,"reserved":false,"internal":false},{"id":"key_fullZoomReset","key":"0","keycode":null,"group":"mediaAndDisplay","l10nId":"zen-full-zoom-reset-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_fullZoomReset","disabled":false,"reserved":false,"internal":false},{"id":null,"key":"","keycode":null,"group":"other","l10nId":"zen-full-zoom-enlarge-shortcut-alt2","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_fullZoomEnlarge","disabled":false,"reserved":false,"internal":false},{"id":null,"key":"=","keycode":null,"group":"other","l10nId":"zen-full-zoom-enlarge-shortcut-alt","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_fullZoomEnlarge","disabled":false,"reserved":false,"internal":false},{"id":"key_fullZoomEnlarge","key":"+","keycode":null,"group":"mediaAndDisplay","l10nId":"zen-full-zoom-enlarge-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_fullZoomEnlarge","disabled":false,"reserved":false,"internal":false},{"id":null,"key":"","keycode":null,"group":"other","l10nId":"zen-full-zoom-reduce-shortcut-alt-b","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_fullZoomReduce","disabled":false,"reserved":false,"internal":false},{"id":null,"key":"_","keycode":null,"group":"other","l10nId":"zen-full-zoom-reduce-shortcut-alt-a","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_fullZoomReduce","disabled":false,"reserved":false,"internal":false},{"id":"key_fullZoomReduce","key":"-","keycode":null,"group":"mediaAndDisplay","l10nId":"zen-full-zoom-reduce-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_fullZoomReduce","disabled":false,"reserved":false,"internal":false},{"id":"key_gotoHistory","key":"h","keycode":null,"group":"navigation","l10nId":"zen-history-sidebar-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"toggleSidebarKb","key":"z","keycode":null,"group":"other","l10nId":"zen-toggle-sidebar-shortcut","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"viewGenaiChatSidebarKb","key":"x","keycode":null,"group":"other","l10nId":"zen-ai-chatbot-sidebar-shortcut","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_stop","key":"","keycode":"","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"Browser:Stop","disabled":false,"reserved":false,"internal":false},{"id":"viewBookmarksToolbarKb","key":"b","keycode":null,"group":"other","l10nId":"zen-bookmark-show-toolbar-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"viewBookmarksSidebarKb","key":"b","keycode":null,"group":"other","l10nId":"zen-bookmark-show-sidebar-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"manBookmarkKb","key":"o","keycode":null,"group":"historyAndBookmarks","l10nId":"zen-bookmark-show-library-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"Browser:ShowAllBookmarks","disabled":false,"reserved":false,"internal":false},{"id":"bookmarkAllTabsKb","key":"","keycode":"","group":"historyAndBookmarks","l10nId":"zen-bookmark-this-page-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"addBookmarkAsKb","key":"d","keycode":null,"group":"historyAndBookmarks","l10nId":"zen-bookmark-this-page-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"Browser:AddBookmarkAs","disabled":false,"reserved":false,"internal":false},{"id":null,"keycode":"VK_F3","group":"other","l10nId":"zen-search-find-again-shortcut-prev","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":false},"action":"cmd_findPrevious","disabled":false,"reserved":false,"internal":false},{"id":null,"keycode":"VK_F3","group":"other","l10nId":"zen-search-find-again-shortcut-alt","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_findAgain","disabled":false,"reserved":false,"internal":false},{"id":"key_findPrevious","key":"g","keycode":null,"group":"searchAndFind","l10nId":"zen-search-find-again-shortcut-prev","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"cmd_findPrevious","disabled":false,"reserved":false,"internal":false},{"id":"key_findAgain","key":"g","keycode":null,"group":"searchAndFind","l10nId":"zen-search-find-again-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_findAgain","disabled":false,"reserved":false,"internal":false},{"id":"key_find","key":"f","keycode":null,"group":"searchAndFind","l10nId":"zen-find-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_find","disabled":false,"reserved":false,"internal":false},{"id":"key_viewInfo","key":"i","keycode":null,"group":"pageOperations","l10nId":"zen-page-info-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"View:PageInfo","disabled":false,"reserved":false,"internal":false},{"id":"key_viewSource","key":"u","keycode":null,"group":"pageOperations","l10nId":"zen-page-source-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"View:PageSource","disabled":false,"reserved":false,"internal":false},{"id":"key_aboutProcesses","keycode":"VK_ESCAPE","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":false},"action":"View:AboutProcesses","disabled":false,"reserved":false,"internal":false},{"id":"key_reload_skip_cache","key":"r","keycode":null,"group":"navigation","l10nId":"zen-nav-reload-shortcut-skip-cache","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"Browser:ReloadSkipCache","disabled":false,"reserved":false,"internal":false},{"id":"key_reload","key":"r","keycode":null,"group":"navigation","l10nId":"zen-nav-reload-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"Browser:Reload","disabled":false,"reserved":false,"internal":false},{"id":null,"key":"}","keycode":null,"group":"other","l10nId":"zen-picture-in-picture-toggle-shortcut-alt","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"View:PictureInPicture","disabled":false,"reserved":false,"internal":false},{"id":"key_togglePictureInPicture","key":"]","keycode":null,"group":"pageOperations","l10nId":"zen-picture-in-picture-toggle-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"View:PictureInPicture","disabled":false,"reserved":false,"internal":false},{"id":"key_toggleReaderMode","key":"r","keycode":null,"group":"pageOperations","l10nId":"zen-reader-mode-toggle-shortcut-other","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":true},"action":"View:ReaderView","disabled":true,"reserved":false,"internal":false},{"id":"key_exitFullScreen","keycode":"VK_F11","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"View:FullScreen","disabled":true,"reserved":true,"internal":false},{"id":"key_enterFullScreen","keycode":"VK_F11","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"View:FullScreen","disabled":false,"reserved":false,"internal":false},{"id":null,"keycode":"VK_F5","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"Browser:ReloadSkipCache","disabled":false,"reserved":false,"internal":false},{"id":"showAllHistoryKb","key":"h","keycode":null,"group":"historyAndBookmarks","l10nId":"zen-history-show-all-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"Browser:ShowAllHistory","disabled":false,"reserved":false,"internal":false},{"id":null,"keycode":"VK_F5","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"Browser:Reload","disabled":false,"reserved":false,"internal":false},{"id":"goHome","keycode":"VK_HOME","group":"navigation","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"goForwardKb2","key":"]","keycode":null,"group":"navigation","l10nId":"zen-nav-fwd-shortcut-alt","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"Browser:Forward","disabled":false,"reserved":false,"internal":false},{"id":"goBackKb2","key":"[","keycode":null,"group":"navigation","l10nId":"zen-nav-back-shortcut-alt","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"Browser:Back","disabled":false,"reserved":false,"internal":false},{"id":"goForwardKb","keycode":"VK_RIGHT","group":"navigation","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":"Browser:Forward","disabled":false,"reserved":false,"internal":false},{"id":"goBackKb","keycode":"VK_LEFT","group":"navigation","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":"Browser:Back","disabled":false,"reserved":false,"internal":false},{"id":null,"keycode":"VK_BACK","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":false},"action":"cmd_handleShiftBackspace","disabled":false,"reserved":false,"internal":false},{"id":null,"keycode":"VK_BACK","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_handleBackspace","disabled":false,"reserved":false,"internal":false},{"id":"key_selectAll","key":"a","keycode":null,"group":"other","l10nId":"zen-text-action-select-all-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":true},{"id":"key_delete","keycode":"VK_DELETE","group":"other","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_delete","disabled":false,"reserved":false,"internal":false},{"id":"key_paste","key":"v","keycode":null,"group":"other","l10nId":"zen-text-action-paste-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":true},{"id":"key_copy","key":"c","keycode":null,"group":"other","l10nId":"zen-text-action-copy-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":true},{"id":"key_cut","key":"x","keycode":null,"group":"other","l10nId":"zen-text-action-cut-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":true},{"id":"key_redo","key":"z","keycode":null,"group":"other","l10nId":"zen-text-action-undo-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":true},{"id":"key_undo","key":"z","keycode":null,"group":"other","l10nId":"zen-text-action-undo-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":true},{"id":"key_toggleMute","key":"m","keycode":null,"group":"mediaAndDisplay","l10nId":"zen-mute-toggle-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_toggleMute","disabled":false,"reserved":false,"internal":false},{"id":"key_closeWindow","key":"w","keycode":null,"group":"windowAndTabManagement","l10nId":"zen-close-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"cmd_closeWindow","disabled":false,"reserved":true,"internal":false},{"id":"key_close","key":"w","keycode":null,"group":"windowAndTabManagement","l10nId":"zen-close-tab-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_close","disabled":false,"reserved":true,"internal":false},{"id":"printKb","key":"p","keycode":null,"group":"pageOperations","l10nId":"zen-print-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_print","disabled":false,"reserved":false,"internal":false},{"id":"key_savePage","key":"","keycode":"","group":"pageOperations","l10nId":"zen-save-page-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"Browser:SavePage","disabled":false,"reserved":false,"internal":false},{"id":"openFileKb","key":"","keycode":"","group":"other","l10nId":"zen-file-open-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"Browser:OpenFile","disabled":false,"reserved":false,"internal":false},{"id":"key_openAddons","key":"a","keycode":null,"group":"other","l10nId":"zen-addons-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"Tools:Addons","disabled":false,"reserved":false,"internal":false},{"id":"key_openDownloads","key":"y","keycode":null,"group":"other","l10nId":"zen-downloads-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"Tools:Downloads","disabled":false,"reserved":false,"internal":false},{"id":"key_search2","key":"j","keycode":null,"group":"searchAndFind","l10nId":"zen-search-focus-shortcut-alt","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"Tools:Search","disabled":false,"reserved":false,"internal":false},{"id":"key_search","key":"k","keycode":null,"group":"searchAndFind","l10nId":"zen-search-focus-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"Tools:Search","disabled":false,"reserved":false,"internal":false},{"id":"focusURLBar2","key":"","keycode":"","group":"pageOperations","l10nId":"zen-location-open-shortcut-alt","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"Browser:OpenLocation","disabled":false,"reserved":false,"internal":false},{"id":"focusURLBar","key":"l","keycode":null,"group":"pageOperations","l10nId":"zen-location-open-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"Browser:OpenLocation","disabled":false,"reserved":false,"internal":false},{"id":"key_newNavigatorTab","key":"t","keycode":null,"group":"windowAndTabManagement","l10nId":"zen-tab-new-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_newNavigatorTabNoEvent","disabled":false,"reserved":true,"internal":false},{"id":"key_newNavigator","key":"n","keycode":null,"group":"windowAndTabManagement","l10nId":"zen-window-new-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_newNavigator","disabled":false,"reserved":true,"internal":false},{"id":"zen-compact-mode-toggle","key":"e","keycode":"","group":"zen-compact-mode","l10nId":"zen-compact-mode-shortcut-toggle","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"cmd_zenCompactModeToggle","disabled":false,"reserved":false,"internal":false},{"id":"zen-compact-mode-show-sidebar","key":"","keycode":"","group":"zen-compact-mode","l10nId":"zen-compact-mode-shortcut-show-sidebar","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenCompactModeShowSidebar","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-10","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-10","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch10","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-9","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-9","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch9","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-8","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-8","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch8","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-7","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-7","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch7","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-6","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-6","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch6","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-5","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-5","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch5","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-4","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-4","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch4","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-3","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-3","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch3","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-2","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-2","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch2","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-switch-1","key":"","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-switch-1","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenWorkspaceSwitch1","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-forward","key":"e","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-forward","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":true},"action":"cmd_zenWorkspaceForward","disabled":false,"reserved":false,"internal":false},{"id":"zen-workspace-backward","key":"q","keycode":"","group":"zen-workspace","l10nId":"zen-workspace-shortcut-backward","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":true},"action":"cmd_zenWorkspaceBackward","disabled":false,"reserved":false,"internal":false},{"id":"zen-split-view-grid","key":"g","keycode":"","group":"zen-split-view","l10nId":"zen-split-view-shortcut-grid","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":true},"action":"cmd_zenSplitViewGrid","disabled":false,"reserved":false,"internal":false},{"id":"zen-split-view-vertical","key":"v","keycode":"","group":"zen-split-view","l10nId":"zen-split-view-shortcut-vertical","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":"cmd_zenSplitViewVertical","disabled":false,"reserved":false,"internal":false},{"id":"zen-split-view-horizontal","key":"h","keycode":"","group":"zen-split-view","l10nId":"zen-split-view-shortcut-horizontal","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":true},"action":"cmd_zenSplitViewHorizontal","disabled":false,"reserved":false,"internal":false},{"id":"zen-split-view-unsplit","key":"u","keycode":"","group":"zen-split-view","l10nId":"zen-split-view-shortcut-unsplit","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":true},"action":"cmd_zenSplitViewUnsplit","disabled":false,"reserved":false,"internal":false},{"id":"zen-pinned-tab-reset-shortcut","key":"","keycode":"","group":"zen-other","l10nId":"zen-pinned-tab-shortcut-reset","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenPinnedTabReset","disabled":false,"reserved":false,"internal":false},{"id":"zen-toggle-sidebar","key":"b","keycode":"","group":"zen-other","l10nId":"zen-sidebar-shortcut-toggle","modifiers":{"control":false,"alt":true,"shift":false,"meta":false,"accel":false},"action":"cmd_zenToggleSidebar","disabled":false,"reserved":false,"internal":false},{"id":"zen-copy-url","key":"","keycode":"","group":"zen-other","l10nId":"zen-text-action-copy-url-shortcut","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":"cmd_zenCopyCurrentURL","disabled":false,"reserved":false,"internal":false},{"id":"zen-copy-url-markdown","key":"c","keycode":"","group":"zen-other","l10nId":"zen-text-action-copy-url-markdown-shortcut","modifiers":{"control":false,"alt":true,"shift":true,"meta":false,"accel":true},"action":"cmd_zenCopyCurrentURLMarkdown","disabled":false,"reserved":false,"internal":false},{"id":"key_accessibility","keycode":"VK_F12","group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_dom","key":"w","keycode":null,"group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_storage","keycode":"VK_F9","group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_performance","keycode":"VK_F5","group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_styleeditor","keycode":"VK_F7","group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_netmonitor","key":"","keycode":"","group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":false},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_jsdebugger","key":"z","keycode":null,"group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_webconsole","key":"k","keycode":null,"group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_inspector","key":"l","keycode":null,"group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_responsiveDesignMode","key":"m","keycode":null,"group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_browserConsole","key":"j","keycode":null,"group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_browserToolbox","key":"i","keycode":null,"group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":true,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"key_toggleToolbox","key":"i","keycode":null,"group":"devTools","l10nId":null,"modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":null,"disabled":false,"reserved":false,"internal":false},{"id":"zen-toggle-pin-tab","key":"d","keycode":"","group":"zen-other","l10nId":"zen-toggle-pin-tab-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"cmd_zenTogglePinTab","disabled":false,"reserved":false,"internal":false},{"id":"zen-glance-expand","key":"o","keycode":"","group":"zen-other","l10nId":"","modifiers":{"control":false,"alt":false,"shift":false,"meta":false,"accel":true},"action":"cmd_zenGlanceExpand","disabled":false,"reserved":false,"internal":false},{"id":"zen-new-empty-split-view","key":"*","keycode":"","group":"zen-split-view","l10nId":"zen-new-empty-split-view-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"cmd_zenNewEmptySplit","disabled":false,"reserved":false,"internal":false},{"id":"zen-close-all-unpinned-tabs","key":"k","keycode":"","group":"zen-workspace","l10nId":"zen-close-all-unpinned-tabs-shortcut","modifiers":{"control":false,"alt":false,"shift":true,"meta":false,"accel":true},"action":"cmd_zenCloseUnpinnedTabs","disabled":false,"reserved":false,"internal":false}]} \ No newline at end of file diff --git a/home/options/default.nix b/home/options/default.nix index f60cc53..5c8bad0 100644 --- a/home/options/default.nix +++ b/home/options/default.nix @@ -1,5 +1,8 @@ { imports = [ ./ntfy-client.nix + ./hyprlock.nix + ./sunsetr.nix + ./noctalia.nix ]; } diff --git a/home/options/hyprlock.nix b/home/options/hyprlock.nix new file mode 100644 index 0000000..52e3aaa --- /dev/null +++ b/home/options/hyprlock.nix @@ -0,0 +1,59 @@ +{ config, lib, ... }: +let + inherit (lib) + mkOption + types + isList + elemAt + mapAttrs + hasAttr + any + length + ; + cfg = config.programs.hyprlock; +in +{ + options.programs.hyprlock = { + monitors = mkOption { + default = [ ]; + type = with types; listOf str; + }; + excludeMonitor = mkOption { + default = [ + "general" + "background" + "animations" + ]; + type = with types; listOf str; + }; + + settings = mkOption { + apply = + v: + if length cfg.monitors == 0 then + v + else + mapAttrs ( + name: value: + let + mainMonitor = elemAt cfg.monitors 0; + applyMonitor = + attrs: + if hasAttr "monitor" attrs then + attrs + else + ( + attrs + // { + monitor = mainMonitor; + } + ); + in + if any (m: name == m) cfg.excludeMonitor then + value + else + (if (isList value) then (map applyMonitor value) else applyMonitor value) + ) v; + }; + }; +} diff --git a/home/options/noctalia.nix b/home/options/noctalia.nix new file mode 100644 index 0000000..ce9dfae --- /dev/null +++ b/home/options/noctalia.nix @@ -0,0 +1,57 @@ +{ config, lib, ... }: +let + inherit (lib) + mkOption + types + elem + isList + filter + listToAttrs + concatMap + nameValuePair + attrNames + isAttrs + ; + + filterAttrsRecursive' = + pred: set: + # Attrs + if isAttrs set then + listToAttrs ( + concatMap ( + name: + let + v = set.${name}; + in + if pred name v then + [ + (nameValuePair name (filterAttrsRecursive' pred v)) + ] + else + [ ] + ) (attrNames set) + ) + # List + else if isList set then + filter (x: pred "" x) (map (x: filterAttrsRecursive' pred x) set) + else + set; + + cfg = config.programs.noctalia-shell; +in +{ + options.programs.noctalia-shell = { + filteredIds = mkOption { + type = with types; listOf str; + default = [ ]; + }; + + settings = mkOption { + apply = + v: + filterAttrsRecursive' ( + name: value: if value ? id then !(elem value.id cfg.filteredIds) else true + ) v; + }; + }; +} diff --git a/home/options/sunsetr.nix b/home/options/sunsetr.nix new file mode 100644 index 0000000..7e608a8 --- /dev/null +++ b/home/options/sunsetr.nix @@ -0,0 +1,32 @@ +{ config, lib, ... }: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + getExe' + ; + cfg = config.services.sunsetr; +in +{ + options.services.sunsetr = { + enable = mkEnableOption "Enable sunsetr."; + package = mkPackageOption "sunsetr"; + }; + + config = mkIf cfg.enable { + systemd.user.services.sunsetr = { + Install = { + WantedBy = [ "graphical-session.target" ]; + }; + Unit = { + Description = "Blue light filter"; + }; + Service = { + ExecStart = "${getExe' cfg.package "sunsetr"}"; + Restart = "always"; + RestartSec = 2; + }; + }; + }; +} diff --git a/home/presets/basic.nix b/home/presets/basic.nix index 44b91cb..7d9ca55 100644 --- a/home/presets/basic.nix +++ b/home/presets/basic.nix @@ -16,5 +16,8 @@ ../user/vscode.nix ../user/yazi.nix ../user/nvf + ../user/wm-service.nix + ../user/ghostty.nix + ../user/podman.nix ]; } diff --git a/home/user/caelestia-shell.nix b/home/user/caelestia-shell.nix deleted file mode 100644 index f89eb01..0000000 --- a/home/user/caelestia-shell.nix +++ /dev/null @@ -1,209 +0,0 @@ -{ - pkgs, - lib, - ... -}: -let - caelestiaDot = pkgs.fetchFromGitHub { - owner = "caelestia-dots"; - repo = "caelestia"; - rev = "main"; - sha256 = "sha256-pRLcbh81iBp9fH3Zq7HrNtAfDD46ErGZ3wID8Q65Wlg="; - }; -in -{ - home.packages = with pkgs; [ - cliphist - inotify-tools - app2unit - wireplumber - trash-cli - foot - fastfetch - jq - socat - imagemagick - papirus-icon-theme - nerd-fonts.jetbrains-mono - fuzzel - ]; - - xdg.configFile = { - "hypr/hyprland".source = "${caelestiaDot}/hypr/hyprland"; - "hypr/scheme" = { - source = "${caelestiaDot}/hypr/scheme"; - recursive = true; - }; - "hypr/scripts" = { - source = "${caelestiaDot}/hypr/scripts"; - executable = true; - }; - "hypr/variables.conf".source = "${caelestiaDot}/hypr/variables.conf"; - }; - - wayland.windowManager.hyprland = { - settings = { - "$hypr" = "~/.config/hypr"; - "$hl" = "$hypr/hyprland"; - "$cConf" = "~/.config/caelestia"; - # ### Hyprland ### - # Apps - "$terminal" = "ghostty"; - "$browser" = "nvidia-offload zen"; - "$editor" = "nvim"; - "$fileExplorer" = "yazi"; - - # Touchpad - "$touchpadDisableTyping" = "true"; - "$touchpadScrollFactor" = "0.3"; - "$workSpaceSwipeFingers" = "4"; - - # Blur - "$blurEnabled" = "true"; - "$blurSpecialWs" = "false"; - "$blurPopups" = "true"; - "$blurInputMethods" = "true"; - "$blurSize" = "8"; - "$blurPasses" = "2"; - "$blurXray" = "false"; - - # Shadow - "$shadowEnabled" = "true"; - "$shadowRange" = "20"; - "$shadowRenderPower" = "3"; - "$shadowColour" = "rgba($surfaced4)"; - - # Gaps - "$workspaceGaps" = "20"; - "$windowGapsIn" = "10"; - "$windowGapsOut" = "10"; - "$singleWindowGapsOut" = "10"; - - # Window styling - "$windowOpacity" = "0.95"; - "$windowRounding" = "10"; - - "$windowBorderSize" = "3"; - "$activeWindowBorderColour" = "rgba($primarye6)"; - "$inactiveWindowBorderColour" = "rgba($onSurfaceVariant11)"; - - # Misc - "$volumeStep" = "5 # In percent"; - - "$kbGoToWs" = "SUPER"; - "$wsaction" = "~/.config/hypr/scripts/wsaction.fish"; - - source = [ - "$hypr/scheme/current.conf" - "$hl/env.conf" - "$hl/input.conf" - "$hl/misc.conf" - "$hl/animations.conf" - "$hl/decoration.conf" - "$hl/group.conf" - "$hl/rules.conf" - "${pkgs.writeText "keybinds.conf" '' - exec = hyprctl dispatch submap global - submap = global - - # ## Shell keybinds - # Launcher - bind = Super+CTRL, K, global, caelestia:showall - bindi = Super, Super_L, global, caelestia:launcher - bindin = Super, catchall, global, caelestia:launcherInterrupt - bindin = Super, mouse:272, global, caelestia:launcherInterrupt - bindin = Super, mouse:273, global, caelestia:launcherInterrupt - bindin = Super, mouse:274, global, caelestia:launcherInterrupt - bindin = Super, mouse:275, global, caelestia:launcherInterrupt - bindin = Super, mouse:276, global, caelestia:launcherInterrupt - bindin = Super, mouse:277, global, caelestia:launcherInterrupt - bindin = Super, mouse_up, global, caelestia:launcherInterrupt - bindin = Super, mouse_down, global, caelestia:launcherInterrupt - bind = Super, DELETE, global, caelestia:lock - bind = Super, Q, killactive, - bind = Super , RETURN, exec, app2unit -- $terminal - bind = Super, F, exec, app2unit -- $browser - bind = Super, V, togglefloating, - bind = Super, P, pseudo - bind = Super, S, togglesplit - bindl = , XF86AudioPlay, global, caelestia:mediaToggle - bindl = , XF86AudioPause, global, caelestia:mediaToggle - bindl = , XF86AudioNext, global, caelestia:mediaNext - bindl = , XF86AudioPrev, global, caelestia:mediaPrev - bindl = , XF86AudioStop, global, caelestia:mediaStop - - bind = Super+SHIFT, s, global, caelestia:screenshot - bind = CTRL SHIFT, s, exec, hyprshot -m window - bind = CTRL SHIFT Super, s, exec, hyprshot -m output - bind = CTRL ALT, s, exec, hyprshot -m active -m window - - bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle - bindle = , XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ $volumeStep%+ - bindle = , XF86AudioLowerVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume @DEFAULT_AUDIO_SINK@ $volumeStep%- - - bind = Super, Period, exec, pkill fuzzel || caelestia emoji -p - bind = Super+Shift, V, exec, pkill fuzzel || caelestia clipboard - ''}" - ]; - - bindm = [ - # Move/resize windows with mainMod + LMB/RMB and dragging - ''SUPER, mouse:272, movewindow'' - ''SUPER, mouse:273, resizewindow'' - ]; - - exec = [ - "cp -L --no-preserve=mode --update=none $hypr/scheme/default.conf $hypr/scheme/current.conf" - ]; - - misc = { - vrr = 0; - vfr = true; - }; - }; - }; - - home.activation.writeConfigFile = - lib.hm.dag.entryAfter [ "writeBoundary" ] - # bash - '' - configList=("btop" "fastfetch" "thunar") - - for config in "''\${configList[@]}"; do - if [ ! -d "$XDG_CONFIG_HOME/$config" ]; then - install -Dm666 "${caelestiaDot}/$config" "$XDG_CONFIG_HOME/$config" - fi - done - ''; - - fonts.fontconfig.enable = true; - - programs.caelestia = { - enable = true; - settings = { }; - cli = { - enable = true; - settings = { }; - }; - }; - - gtk = { - enable = lib.mkDefault true; - iconTheme = { - name = lib.mkDefault "Papirus-Dark"; - package = lib.mkDefault pkgs.papirus-icon-theme; - }; - }; - - systemd.user.services.caelestia = { - Service = { - Environment = [ - "QT_QPA_PLATFORMTHEME=gtk3" - ]; - }; - }; - - services.swww.enable = lib.mkForce false; - programs.waybar.enable = lib.mkForce false; - services.swaync.enable = lib.mkForce false; -} diff --git a/home/user/config.nix b/home/user/config.nix index 2fd88bc..53dc958 100644 --- a/home/user/config.nix +++ b/home/user/config.nix @@ -5,7 +5,6 @@ }: let configDir = ../config; - browser = "zen.desktop"; in { home.file."${config.home.homeDirectory}/.config/starship.toml".source = @@ -21,20 +20,5 @@ in }; }; - xdg.mimeApps = { - enable = true; - associations.added = { - "application/pdf" = [ browser ]; - "image/jpeg" = [ browser ]; - "image/png" = [ browser ]; - }; - defaultApplications = { - "text/html" = browser; - "application/pdf" = [ browser ]; - "image/jpeg" = [ browser ]; - "image/png" = [ browser ]; - "x-scheme-handler/http" = browser; - "x-scheme-handler/https" = browser; - }; - }; + xdg.mimeApps.enable = true; } diff --git a/home/user/ghostty.nix b/home/user/ghostty.nix new file mode 100644 index 0000000..fa170a9 --- /dev/null +++ b/home/user/ghostty.nix @@ -0,0 +1,55 @@ +{ + inputs, + pkgs, + lib, + ... +}: +let + inherit (pkgs.stdenv.hostPlatform) system; + inherit (lib) mkDefault; + + ghosttyShaders = pkgs.fetchFromGitHub { + owner = "sahaj-b"; + repo = "ghostty-cursor-shaders"; + rev = "main"; + hash = "sha256-ruhEqXnWRCYdX5mRczpY3rj1DTdxyY3BoN9pdlDOKrE="; + }; +in +{ + programs.ghostty = { + enable = true; + installBatSyntax = true; + enableFishIntegration = true; + package = inputs.ghostty.packages.${system}.default; + clearDefaultKeybinds = false; + settings = { + custom-shader = [ + "${ghosttyShaders}/cursor_sweep.glsl" + "${ghosttyShaders}/ripple_cursor.glsl" + ]; + + unfocused-split-opacity = 0.85; + desktop-notifications = true; + background-opacity = mkDefault 0.6; + background-blur = 20; + + wait-after-command = false; + shell-integration = "detect"; + window-theme = "dark"; + + confirm-close-surface = false; + window-decoration = false; + + mouse-hide-while-typing = true; + + keybind = [ + "ctrl+shift+zero=toggle_tab_overview" + "ctrl+shift+9=reload_config" + "ctrl+shift+o=unbind" + ]; + + clipboard-read = "allow"; + clipboard-write = "allow"; + }; + }; +} diff --git a/home/user/hypr/bind.nix b/home/user/hypr/bind.nix index 63d82b2..228bb2c 100644 --- a/home/user/hypr/bind.nix +++ b/home/user/hypr/bind.nix @@ -3,11 +3,15 @@ osConfig, config, pkgs, + helper, ... }: with builtins; let - inherit (osConfig.systemConf.hyprland) monitors; + inherit (helper) getMonitors; + inherit (osConfig.networking) hostName; + monitors = getMonitors hostName config; + nvidia-offload-enabled = osConfig.hardware.nvidia.prime.offload.enableOffloadCmd; notransTag = "notrans"; diff --git a/home/user/hypr/windowrule.nix b/home/user/hypr/windowrule.nix index 8e2e52a..c8e44d8 100644 --- a/home/user/hypr/windowrule.nix +++ b/home/user/hypr/windowrule.nix @@ -67,13 +67,11 @@ let "match:class ^(it.mijorus.smile)" "match:class ^(xdg-desktop-portal-gtk)$" "match:class ^(vesktop)$, match:title ^(Discord Popout)$" - "match:class ^(steam)$, match:title ^(Friends List)$" "match:title (Open File)" "match:title branchdialog" "match:title wlogout" "match:title ^(Media viewer)$" "match:title ^(File Operation Progress)$" - "match:title ^(Steam Settings)$" "match:title ^(Picture-in-Picture)$" ]; @@ -91,8 +89,11 @@ let # Steam "match:class ^(steam)$" = [ - "workspace 7 silent" "workspace unset, match:float true" + "workspace 7 silent" + "float true, match:title ^(Friends List)$" + "float true, match:title ^(Steam Settings)$" + "center true, match:float true" ]; }; @@ -113,6 +114,7 @@ in "pin true, match:class ^(vesktop)$, match:title ^(Discord Popout)$" # steam game "workspace 7 silent, match:class ^(steam_app_)(.*)" + "fullscreen true, match:class ^(steam_app_)(.*)" # VLC "workspace 3, match:initial_class ^(vlc), match:float false" # discord diff --git a/home/user/hypr/workspace.nix b/home/user/hypr/workspace.nix index 43d091f..6113aaf 100644 --- a/home/user/hypr/workspace.nix +++ b/home/user/hypr/workspace.nix @@ -1,12 +1,21 @@ -{ osConfig, ... }: +{ + osConfig, + helper, + config, + ... +}: let - inherit (osConfig.systemConf.hyprland) monitors; + inherit (helper) getMonitors; + inherit (osConfig.networking) hostName; + monitors = getMonitors hostName config; + inherit (builtins) length genList toString elemAt ; + monitorNum = length monitors; workspaceNum = 10; workspaceList = genList ( @@ -15,7 +24,7 @@ let currentNum = index - (monitorNum * (index / monitorNum)); default = if index < monitorNum then "true" else "false"; in - "${toString (index + 1)}, monitor:desc:${(elemAt monitors currentNum).desc}, default:${default}" + "${toString (index + 1)}, monitor:desc:${(elemAt monitors currentNum).criteria}, default:${default}" ) workspaceNum; in { diff --git a/home/user/hyprland.nix b/home/user/hyprland.nix index a090bbb..d15b46b 100644 --- a/home/user/hyprland.nix +++ b/home/user/hyprland.nix @@ -1,16 +1,11 @@ { pkgs, - lib, inputs, - config, - osConfig, ... }: let - inherit (lib) mkForce escapeShellArgs getExe'; inherit (pkgs.stdenv.hostPlatform) system; - inherit (osConfig.systemConf) username; - inherit (osConfig.systemConf.hyprland) monitors; + terminal = "ghostty"; execOnceScript = pkgs.writeShellScript "hyprlandExecOnce" '' @@ -26,22 +21,10 @@ let ''; mainMod = "SUPER"; - - getCurrentSong = pkgs.writeShellScript "getSong" '' - song_info=$(playerctl metadata --format '{{title}} 󰎆 {{artist}}') - echo "$song_info" - ''; in { home.packages = with pkgs; [ - mpvpaper # Video Wallpaper hyprcursor - libnotify - sunsetr - ]; - - systemd.user.tmpfiles.rules = [ - "d ${config.home.homeDirectory}/Pictures/Wallpapers 0744 ${username} users -" ]; imports = [ @@ -101,11 +84,6 @@ in ''${mainMod} CTRL, j, resizeactive, 0 ${resizeStep}'' ]; - monitor = [ - ", prefered, 0x0, 1" - ] - ++ (map (x: "desc:${x.desc},${x.props}") osConfig.systemConf.hyprland.monitors); - plugin = { hyprwinrap = { class = "kitty-bg"; @@ -137,441 +115,4 @@ in }; }; }; - - # === Awww === # - services.swww = { - enable = true; - package = inputs.awww.packages.${system}.awww; - }; - - systemd.user.services.swww.Service.ExecStart = - mkForce "${getExe' config.services.swww.package "awww-daemon"} ${escapeShellArgs config.services.swww.extraArgs}"; - - # === hyprlock === # - programs.hyprlock = { - enable = true; - package = inputs.hyprlock.packages.${system}.default; - importantPrefixes = [ - "$" - "monitor" - "size" - "source" - ]; - - settings = - let - font = "CaskaydiaCove Nerd Font"; - font2 = "SF Pro Display Bold"; - mainMonitor = - if ((builtins.length monitors) > 0) then "desc:${(builtins.elemAt monitors 0).desc}" else ""; - in - { - background = { - monitor = ""; - path = "screenshot"; - blur_passes = 3; - blur_size = 8; - contrast = 0.8916; - brightness = 0.8172; - vibrancy = 0.1696; - vibrancy_darkness = 0.0; - }; - - # GENERAL - general = { - no_fade_in = false; - grace = 0; - disable_loading_bar = false; - ignore_empty_input = true; - fail_timeout = 1000; - }; - - # TIME - label = [ - { - monitor = "${mainMonitor}"; - text = ''cmd[update:1000] echo "$(date +"%-I:%M%p")"''; - color = "rgba(250, 189, 47, .75)"; - font_size = 120; - font_family = "${font2}"; - position = "0, -140"; - halign = "center"; - valign = "top"; - } - - # DAY-DATE-MONTH - { - monitor = "${mainMonitor}"; - text = ''cmd[update:1000] echo "$(date '+%A, %d %B')"''; - color = "rgba(225, 225, 225, 0.75)"; - font_size = 30; - font_family = "${font2}"; - position = "0, 200"; - halign = "center"; - valign = "center"; - } - # USER - { - monitor = "${mainMonitor}"; - text = "Hello, $USER"; - color = "rgba(255, 255, 255, .65)"; - font_size = 25; - font_family = "${font2}"; - position = "0, -70"; - halign = "center"; - valign = "center"; - } - # Current Song - { - monitor = "${mainMonitor}"; - text = ''cmd[update:1000] echo "$(${getCurrentSong})"''; - color = "rgba(235, 219, 178, .75)"; - font_size = 16; - font_family = "${font}, ${font2}"; - position = "0, 80"; - halign = "center"; - valign = "bottom"; - } - ]; - - # LOGO - image = { - monitor = "${mainMonitor}"; - path = "$HOME/.face"; - border_size = 2; - border_color = "rgba(255, 255, 255, .75)"; - size = 95; - rounding = -1; - rotate = 0; - reload_time = -1; - reload_cmd = ""; - position = "0, 60"; - halign = "center"; - valign = "center"; - }; - - # INPUT FIELD - input-field = lib.mkForce [ - { - monitor = "${mainMonitor}"; - size = "290, 60"; - outline_thickness = 2; - dots_size = 0.2; # Scale of input-field height, 0.2 - 0.8 - dots_spacing = 0.2; # Scale of dots' absolute size, 0.0 - 1.0 - dots_center = true; - outer_color = "rgba(0, 0, 0, 0)"; - inner_color = "rgba(60, 56, 54, 0.35)"; - font_color = "rgb(200, 200, 200)"; - fail_color = "rgba(218, 53, 50, 0.56)"; - fade_on_empty = false; - font_family = "${font2}"; - placeholder_text = ''Bruh, come back!''; - hide_input = false; - position = "0, -140"; - halign = "center"; - valign = "center"; - } - ]; - }; - }; - - # === hypridle === # - services.hypridle = { - enable = true; - settings = { - general = { - lock_cmd = "pidof hyprlock || hyprlock"; - before_sleep_cmd = "loginctl lock-session"; - after_sleep_cmd = "hyprctl dispatch dpms on"; - ignore_dbus_inhibit = false; - ignore_systemd_inhibit = false; - }; - - listener = [ - # 2.5min -> set monitor backlight to minimum - { - timeout = 150; - on-timeout = "brightnessctl -s set 10"; - on-resume = "brightnessctl -r"; - } - # 2.5min -> turn off keyboard backlight - { - timeout = 150; - on-timeout = "brightnessctl -sd rgb:kbd_backlight set 0"; - on-resume = "brightnessctl -rd rgb:kbd_backlight"; - } - # 5min -> Lock screen - { - timeout = 300; - on-timeout = "loginctl lock-session"; - } - # 5.5min -> Screen off - { - timeout = 330; - on-timeout = "hyprctl dispatch dpms off"; - on-resume = "hyprctl dispatch dpms on"; - } - # 30min -> Suspend pc - # { - # timeout = 1800; - # on-timeout = "systemctl suspend"; - # } - ]; - }; - }; - - # === sunsetr === # - systemd.user.services.sunsetr = { - Install = { - WantedBy = [ "graphical-session.target" ]; - }; - Unit = { - ConditionEnvironment = "WAYLAND_DISPLAY"; - Description = "Blue light filter"; - }; - Service = { - ExecStart = "${pkgs.sunsetr}/bin/sunsetr"; - Restart = "always"; - RestartSec = 2; - }; - }; - - # === swaync === # - services.swaync = { - enable = true; - package = ( - pkgs.swaynotificationcenter.overrideAttrs (prev: rec { - version = "0.12.1"; - - buildInputs = - prev.buildInputs - ++ (with pkgs; [ - libhandy - pantheon.granite - gtk-layer-shell - ]); - - src = pkgs.fetchFromGitHub { - owner = "ErikReider"; - repo = "SwayNotificationCenter"; - rev = "v${version}"; - hash = "sha256-kRawYbBLVx0ie4t7tChkA8QJShS83fUcGrJSKkxBy8Q="; - }; - }) - ); - settings = { - control-center-height = 900; - control-center-margin-bottom = 20; - control-center-margin-left = 20; - control-center-margin-right = 20; - control-center-margin-top = 20; - control-center-width = 500; - fit-to-screen = true; - hide-on-action = true; - hide-on-clear = true; - image-visibility = "when-available"; - keyboard-shortcuts = true; - layer = "overlay"; - notification-body-image-height = 100; - notification-body-image-width = 200; - notification-icon-size = 64; - notification-window-width = 490; - positionX = "right"; - positionY = "top"; - script-fail-notify = true; - timeout = 3; - timeout-critical = 0; - timeout-low = 2; - transition-time = 200; - widgets = lib.mkForce [ - "title" - "notifications" - "mpris" - ]; - }; - style = # css - '' - @define-color bgc rgba(0, 0, 0, 0.1); - @define-color borderc #ebdbb2; - @define-color textc #212121; - - * { - font-family: ${osConfig.stylix.fonts.sansSerif.name}; - font-size: ${toString osConfig.stylix.fonts.sizes.desktop}px; - font-weight: bold; - border-width: 3px; - border-color: #ebdbb2; - } - - .control-center .notification-row:focus, - .control-center .notification-row:hover { - opacity: 1; - background: @bgc; - } - - .notification-row { - outline: none; - margin: 5px; - padding: 0; - } - - .notification { - background: @bgc; - margin: 0px; - border-radius: 6px; - border-width: 3px; - border-color: @borderc; - } - - .notification-content { - background: @bgc; - padding: 7px; - margin: 0; - } - - .close-button { - background: @bgc; - color: @borderc; - text-shadow: none; - padding: 0; - border-radius: 20px; - margin-top: 9px; - margin-right: 5px; - } - - .close-button:hover { - box-shadow: none; - background: @borderc; - color: @textc; - transition: all .15s ease-in-out; - border: none; - } - - .notification-action { - color: @borderc; - background: @bgc; - } - - .notification-action:hover { - color: @textc; - background: @borderc; - } - - .summary { - padding-top: 7px; - font-size: 13px; - color: @borderc; - } - - .time { - font-size: 11px; - color: @borderc; - margin-right: 40px; - } - - .body { - font-size: 12px; - color: @borderc; - } - - .control-center { - background-color: @bgc; - border-radius: 20px; - } - - .control-center-list { - background: transparent; - } - - .control-center-list-placeholder { - opacity: .5; - } - - .floating-notifications { - background: transparent; - } - - .blank-window { - background: alpha(black, 0.1); - } - - .widget-title { - color: @borderc; - padding: 10px 10px; - margin: 10px 10px 5px 10px; - font-size: 1.5rem; - } - - .widget-title>button { - font-size: 1rem; - color: @borderc; - padding: 10px; - text-shadow: none; - background: @bgc; - box-shadow: none; - border-radius: 5px; - } - - .widget-title>button:hover { - background: @borderc; - color: @textc; - } - - .widget-label { - margin: 10px 10px 10px 10px; - } - - .widget-label>label { - font-size: 1rem; - color: @borderc; - } - - .widget-mpris { - color: @borderc; - padding: 5px 5px 5px 5px; - margin: 10px; - border-radius: 20px; - } - - .widget-mpris>box>button { - border-radius: 20px; - } - - .widget-mpris-player { - padding: 5px 5px; - margin: 10px; - } - ''; - }; - - # === rofi === # - programs.rofi = { - enable = true; - package = pkgs.rofi; - plugins = with pkgs; [ - rofi-emoji - rofi-calc - ]; - }; - - home.sessionVariables = { - NIXOS_OZONE_WL = "1"; - NIXOS_XDG_OPEN_USE_PORTAL = "1"; - - GDK_BACKEND = "wayland"; - QT_SCALE_FACTOR = "1"; - QT_QPA_PLATFORM = "wayland-egl"; - QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; - QT_AUTO_SCREEN_SCALE_FACTOR = "1"; - QT_IM_MODULES = "wayland;fcitx;ibus"; - - MOZ_ENABLE_WAYLAND = "1"; - SDL_VIDEODRIVER = "wayland"; - WLR_NO_HARDWARE_CURSORS = "1"; - CLUTTER_BACKEND = "wayland"; - EGL_PLATFORM = "wayland"; - XDG_CURRENT_DESKTOP = "Hyprland"; - XDG_SESSION_DESKTOP = "Hyprland"; - XDG_SESSION_TYPE = "wayland"; - }; } diff --git a/home/user/nvf/default.nix b/home/user/nvf/default.nix index ae1bc2b..73d54b6 100644 --- a/home/user/nvf/default.nix +++ b/home/user/nvf/default.nix @@ -342,6 +342,15 @@ in documentDiagnostics = "xx"; }; }; + + servers.nix.init_options = { + nixos.expr = + # nix + ''(builtins.getFlake "/etc/nixos").nixosConfigurations.${osConfig.networking.hostName}.options''; + home_manager.expr = + # nix + ''(builtins.getFlake "/etc/nixos").nixosConfigurations.${osConfig.networking.hostName}.options.home-manager.users.type.getSubOptions []''; + }; }; debugger = { @@ -354,8 +363,10 @@ in formatter = { conform-nvim = { enable = true; - setupOpts.formatters_by_ft = { - nix = [ "nixfmt" ]; + setupOpts = { + formatters_by_ft = { + nix = [ "nixfmt" ]; + }; }; }; }; @@ -404,23 +415,13 @@ in enable = true; extraDiagnostics.enable = false; format.enable = false; # Manually configured in conform-nvim - lsp = { - server = "nixd"; - options = { - nixos.expr = - # nix - ''(builtins.getFlake "/etc/nixos").nixosConfigurations.${osConfig.networking.hostName}.options''; - home_manager.expr = - # nix - ''(builtins.getFlake "/etc/nixos").nixosConfigurations.${osConfig.networking.hostName}.options.home-manager.users.type.getSubOptions []''; - }; - }; + lsp.servers = [ "nixd" ]; }; sql.enable = true; clang.enable = true; ts = { enable = true; - format.type = "prettierd"; + format.type = [ "prettierd" ]; extensions = { ts-error-translator.enable = true; }; diff --git a/home/user/packages.nix b/home/user/packages.nix index 5ea0b60..d10b62e 100644 --- a/home/user/packages.nix +++ b/home/user/packages.nix @@ -1,17 +1,9 @@ { pkgs, - inputs, ... }: let - inherit (pkgs.stdenv.hostPlatform) system; md2html = pkgs.callPackage ../scripts/md2html.nix { }; - ghosttyShaders = pkgs.fetchFromGitHub { - owner = "sahaj-b"; - repo = "ghostty-cursor-shaders"; - rev = "main"; - hash = "sha256-ruhEqXnWRCYdX5mRczpY3rj1DTdxyY3BoN9pdlDOKrE="; - }; in { programs.btop = { @@ -22,61 +14,12 @@ in }; }; - programs.ghostty = { - enable = true; - installBatSyntax = true; - enableFishIntegration = true; - package = inputs.ghostty.packages.${system}.default; - settings = { - custom-shader = [ - "${ghosttyShaders}/cursor_sweep.glsl" - "${ghosttyShaders}/ripple_cursor.glsl" - ]; - - unfocused-split-opacity = 0.85; - desktop-notifications = false; - background-opacity = 0.4; - background-blur = false; - - wait-after-command = false; - shell-integration = "detect"; - window-theme = "dark"; - - confirm-close-surface = false; - window-decoration = false; - - mouse-hide-while-typing = true; - - keybind = [ - "ctrl+shift+zero=toggle_tab_overview" - "ctrl+shift+e=unbind" - "ctrl+shift+o=unbind" - ]; - - clipboard-read = "allow"; - clipboard-write = "allow"; - }; - }; - home.packages = with pkgs; [ obsidian - - # Discord - # vesktop discord - # Dev stuff - (python3.withPackages (python-pkgs: [ - python-pkgs.pip - python-pkgs.requests - ])) - # Work stuff libreoffice-qt - pandoc - - # Bluetooth - blueberry # Downloads qbittorrent @@ -85,9 +28,6 @@ in cava papirus-folders inkscape - - # PDF Preview - poppler trash-cli # File Manager diff --git a/home/user/podman.nix b/home/user/podman.nix new file mode 100644 index 0000000..536b333 --- /dev/null +++ b/home/user/podman.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + services.podman = { + enable = true; + }; +} diff --git a/home/user/quickshell.nix b/home/user/quickshell.nix deleted file mode 100644 index fab454a..0000000 --- a/home/user/quickshell.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = with pkgs; [ - quickshell - ]; - - systemd.user.services.quickshell = { - Unit = { - Description = "Quickshell"; - After = [ "graphical-session.target" ]; - PartOf = [ "graphical-session.target" ]; - }; - - Service = { - type = "exec"; - ExecStart = "${pkgs.quickshell}/bin/quickshell"; - Restart = "on-failure"; - RestartSec = "5s"; - TimeoutStopSec = "5s"; - Environment = [ - "QT_QPA_PLATFORM=wayland" - ]; - - Slice = "session.slice"; - }; - - Install = { - WantedBy = [ "graphical-session.target" ]; - }; - }; -} diff --git a/home/user/shell.nix b/home/user/shell.nix index 6781d44..6a5d54b 100644 --- a/home/user/shell.nix +++ b/home/user/shell.nix @@ -23,6 +23,12 @@ in enable = true; interactiveShellInit = '' set fish_greeting # Disable greeting + + # ==== Prevent Running Everything on GPU ==== # + set -e __NV_PRIME_RENDER_OFFLOAD + set -e __NV_PRIME_RENDER_OFFLOAD_PROVIDER + set -e __GLX_VENDOR_LIBRARY_NAME + set -e __VK_LAYER_NV_optimus ''; plugins = [ { diff --git a/home/user/shellAlias.nix b/home/user/shellAlias.nix index 3e57b9b..f627c47 100644 --- a/home/user/shellAlias.nix +++ b/home/user/shellAlias.nix @@ -16,6 +16,11 @@ let --sudo --ask-sudo-password $@''; rebuild = pkgs.writeShellScriptBin "rebuild" '' + ${rebuildCommand} + ''; + + # Notification + nrebuild = pkgs.writeShellScriptBin "nrebuild" '' ${ if shouldNotify then '' @@ -36,6 +41,7 @@ let in { home.packages = [ + nrebuild rebuild ]; diff --git a/home/user/shells/caelestia.nix b/home/user/shells/caelestia.nix new file mode 100644 index 0000000..94e1b57 --- /dev/null +++ b/home/user/shells/caelestia.nix @@ -0,0 +1,71 @@ +{ + pkgs, + lib, + osConfig, + config, + ... +}: +let + inherit (lib) mkForce hasAttr; + prefix = if osConfig.hardware.nvidia.prime.offload.enableOffloadCmd then "nvidia-offload " else ""; + terminal = "${prefix}ghostty"; + explorer = "nautilus"; +in +{ + # ==== Disabled Services ==== # + services.swww.enable = mkForce false; + programs.waybar.enable = mkForce false; + services.swaync.enable = mkForce false; + + home.packages = with pkgs; [ + nerd-fonts.jetbrains-mono + ]; + + fonts.fontconfig.enable = true; + + # programs.niri.settings = with config.lib.niri.actions; { + # binds = { + # "Alt+Space".action = mkForce (spawn "caelestia" "shell" "drawers" "toggle" "launcher"); + # }; + # }; + + programs.caelestia = { + enable = true; + systemd.environment = [ + "QT_QPA_PLATFORMTHEME=gtk3" + ]; + settings = { + paths.wallpaperDir = "~/Pictures/Wallpapers"; + general.apps = { + terminal = [ terminal ]; + explorer = [ explorer ]; + }; + visualiser.enabled = true; + osd.hideDelay = 1500; + utilities.vpn = { + enabled = hasAttr "wg-quick-wg0" osConfig.systemd.services; + provider = [ + { + name = "wireguard"; + interface = "wg0"; + displayName = "Wireguard (DN)"; + } + ]; + }; + }; + cli = { + enable = true; + settings = { + }; + }; + }; + + gtk = { + enable = true; + iconTheme = mkForce { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + }; + +} diff --git a/home/user/virtualization.nix b/home/user/virtualization.nix index 8a609f5..47d37f3 100644 --- a/home/user/virtualization.nix +++ b/home/user/virtualization.nix @@ -1,10 +1,8 @@ { ... }: { - dconf.settings = { - "org/virt-manager/virt-manager/connections" = { - autoconnect = [ "qemu:///system" ]; - uris = [ "qemu:///system" ]; - }; + dconf.settings."org/virt-manager/virt-manager/connections" = { + autoconnect = [ "qemu:///system" ]; + uris = [ "qemu:///system" ]; }; # default network can be start with: diff --git a/home/user/waybar.nix b/home/user/waybar.nix index 63441f3..945988f 100644 --- a/home/user/waybar.nix +++ b/home/user/waybar.nix @@ -1,5 +1,6 @@ { settings ? [ ], + matchByDesc ? false, }: { osConfig, @@ -11,7 +12,15 @@ }: let inherit (helper) mkToggleScript; - inherit (lib) optionalString; + inherit (lib) + optionalString + imap0 + getExe + concatStringsSep + map + ; + + wmName = if osConfig.programs.hyprland.enable then "hyprland" else "niri"; gamemodeToggle = mkToggleScript { service = "gamemodedr"; @@ -77,6 +86,35 @@ let rbwSelector = import ../scripts/rbwSelector.nix { inherit pkgs; }; toggleRecord = pkgs.callPackage ../scripts/record.nix { }; + + includePath = "${config.home.homeDirectory}/.config/waybar"; + + mkMatchByDesc = + settings: + let + # Config will generated by systemd + descs = map (v: "${v.output}") settings; + descString = concatStringsSep ";" descs; + in + (pkgs.writeShellScript "config-match-by-desc" '' + FILE_PATH="${includePath}" + IFS=";" read -r -a DESCS <<< "${descString}" + monitors_json=$(${getExe pkgs.wlr-randr} --json) + + i=0 + + for desc in "''\${DESCS[@]}"; do + name=$(${getExe pkgs.jq} -r --arg d "$desc" ' + .[] | select((.make + " " + .model + " " + .serial) == $d) | .name + ' <<< "$monitors_json") + + file="monitor-$i.json" + printf '{ "output": "%s" }\n' "$name" > "$FILE_PATH/$file" + echo "$file Generated." + + i=$((i+1)) + done + ''); in { home.packages = [ @@ -97,6 +135,14 @@ in PartOf = [ "graphical-session.target" ]; After = [ "graphical-session.target" ]; }; + + Service.ExecStartPre = + let + matchScript = mkMatchByDesc settings; + in + [ + "${matchScript}" + ]; }; programs.waybar = @@ -264,63 +310,27 @@ in margin-bottom = 0; modules-center = [ - "hyprland/window" + "${wmName}/window" ]; }; modulesConfig = let terminalRun = "${config.programs.ghostty.package}/bin/ghostty -e"; - in - { - "hyprland/workspaces" = { - active-only = false; + commonWorkspace = { all-outputs = true; format = "{icon}"; - show-special = false; - on-click = "activate"; - on-scroll-up = "hyprctl dispatch workspace e+1"; - on-scroll-down = "hyprctl dispatch workspace e-1"; - persistent-workspaces = { - "1" = [ ]; - "2" = [ ]; - "3" = [ ]; - "4" = [ ]; - }; format-icons = { active = ""; default = ""; }; }; - clock = { - format = "󰥔 {:%H:%M 󰃭 %d/%m}"; - tooltip-format = "{:%A %d %B %Y}"; - }; - actions = { - on-click-right = "mode"; - on-click-forward = "tz_up"; - on-click-backward = "tz_down"; - on-scroll-up = "shift_up"; - on-scroll-down = "shift_down"; - }; - "custom/os" = { - format = "󱄅"; - on-click = "wlogout --protocol layer-shell"; - }; - cpu = { - format = " {usage}%"; - max-length = 20; - interval = 5; - on-click-right = "${terminalRun} btop"; - }; - "hyprland/window" = { + commonWindow = { format = "{}"; - max-length = 40; separate-outputs = true; - offscreen-css = true; - offscreen-css-text = "(inactive)"; rewrite = { - "nvim . (.*)" = " $1"; + "(.*) \\| nvim (.*)" = " $1"; + "(.*) \\| vi (.*)" = " $1"; "(.*) - Visual Studio Code" = " $1"; "\\(\\d+\\) Discord (.*)" = " $1"; @@ -344,6 +354,60 @@ in "(.*) - VLC media player" = " $1"; }; }; + in + { + # ==== Niri ==== # + "niri/workspaces" = commonWorkspace // { + format-icons = { + focused = ""; + game = "󰊗"; + browser = ""; + }; + }; + "niri/window" = commonWindow // { + }; + + # ==== Hyprland ==== # + "hyprland/workspaces" = commonWorkspace // { + active-only = false; + show-special = false; + on-click = "activate"; + on-scroll-up = "hyprctl dispatch workspace e+1"; + on-scroll-down = "hyprctl dispatch workspace e-1"; + persistent-workspaces = { + "1" = [ ]; + "2" = [ ]; + "3" = [ ]; + "4" = [ ]; + }; + }; + "hyprland/window" = commonWindow // { + max-length = 40; + offscreen-css = true; + offscreen-css-text = "(inactive)"; + }; + + clock = { + format = "󰥔 {:%H:%M 󰃭 %d/%m}"; + tooltip-format = "{:%A %d %B %Y}"; + }; + actions = { + on-click-right = "mode"; + on-click-forward = "tz_up"; + on-click-backward = "tz_down"; + on-scroll-up = "shift_up"; + on-scroll-down = "shift_down"; + }; + "custom/os" = { + format = "󱄅"; + on-click = "wlogout --protocol layer-shell"; + }; + cpu = { + format = " {usage}%"; + max-length = 20; + interval = 5; + on-click-right = "${terminalRun} btop"; + }; memory = { interval = 30; format = " {used:0.1f}GB/{total:0.1f}G"; @@ -383,7 +447,7 @@ in ]; }; scroll-step = 5.0; - on-click = "pavucontrol -t 3"; + on-click = "pwvucontrol -t 4"; tooltip-format = "{icon} {desc} | {volume}%"; smooth-scrolling-threshold = 1; }; @@ -455,6 +519,7 @@ in "custom/cava" = { exec = "${pkgs.writeShellScript "cava-wave" '' #Taken from JaKoolit's dotfiles + PATH="$PATH:${pkgs.cava}/bin" bar="▁▂▃▄▅▆▇█" dict="s/;//g" @@ -487,7 +552,7 @@ in cava -p "$config_file" | sed -u "$dict" ''}"; format = "{}"; - on-click = "${terminalRun} cava"; + on-click = "${terminalRun} ${getExe pkgs.cava}"; }; battery = let @@ -602,7 +667,7 @@ in otherConfig = { modules-left = [ "custom/os" - "hyprland/workspaces" + "${wmName}/workspaces" "clock" "mpris" "custom/cava" @@ -622,7 +687,27 @@ in ]; }; - finalList = if ((builtins.length settings) == 0) then [ otherConfig ] else settings; + finalList = + if ((builtins.length settings) == 0) then + # Use default configuration + [ otherConfig ] + else + ( + if matchByDesc then + # Config will generated by systemd + (imap0 ( + i: v: + let + outputRemoved = removeAttrs v [ "output" ]; + includeAdded = outputRemoved // { + include = [ "${includePath}/monitor-${toString i}.json" ]; + }; + in + includeAdded + ) settings) + else + settings + ); in map (dev: dev // modulesConfig // commonConfig) finalList; diff --git a/home/user/wm-service.nix b/home/user/wm-service.nix new file mode 100644 index 0000000..190b972 --- /dev/null +++ b/home/user/wm-service.nix @@ -0,0 +1,464 @@ +{ + osConfig, + inputs, + pkgs, + config, + lib, + ... +}: +let + inherit (lib) escapeShellArgs mkForce getExe'; + inherit (osConfig.systemConf) username; + inherit (pkgs.stdenv.hostPlatform) system; + + getCurrentSong = pkgs.writeShellScript "getSong" '' + song_info=$(playerctl metadata --format '{{title}} 󰎆 {{artist}}') + echo "$song_info" + ''; +in +{ + home.sessionVariables = { + NIXOS_OZONE_WL = "1"; + GDK_BACKEND = "wayland"; + + QT_SCALE_FACTOR = "1"; + QT_QPA_PLATFORM = "wayland"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + QT_AUTO_SCREEN_SCALE_FACTOR = "1"; + QT_IM_MODULES = "wayland;fcitx;ibus"; + + MOZ_ENABLE_WAYLAND = "1"; + SDL_VIDEODRIVER = "wayland"; + WLR_NO_HARDWARE_CURSORS = "1"; + CLUTTER_BACKEND = "wayland"; + EGL_PLATFORM = "wayland"; + XDG_SESSION_TYPE = "wayland"; + }; + + home.packages = with pkgs; [ + mpvpaper # Video Wallpaper + libnotify + sunsetr + + wlogout + wl-clipboard + + # Util + grim + slurp + ]; + + systemd.user.tmpfiles.rules = [ + "d ${config.home.homeDirectory}/Pictures/Wallpapers 0744 ${username} users -" + ]; + + # === kanshi (Monitor Manager) === # + services.kanshi.enable = true; + + # === Awww === # + services.swww = { + enable = true; + package = inputs.awww.packages.${system}.awww; + }; + + systemd.user.services.swww.Service.ExecStart = + mkForce "${getExe' config.services.swww.package "awww-daemon"} ${escapeShellArgs config.services.swww.extraArgs}"; + + # === sunsetr === # + services.sunsetr.enable = true; + + # === swaync === # + services.swaync = { + enable = true; + package = ( + pkgs.swaynotificationcenter.overrideAttrs (prev: rec { + version = "0.12.1"; + + buildInputs = + prev.buildInputs + ++ (with pkgs; [ + libhandy + pantheon.granite + gtk-layer-shell + ]); + + src = pkgs.fetchFromGitHub { + owner = "ErikReider"; + repo = "SwayNotificationCenter"; + rev = "v${version}"; + hash = "sha256-kRawYbBLVx0ie4t7tChkA8QJShS83fUcGrJSKkxBy8Q="; + }; + }) + ); + settings = { + control-center-height = 900; + control-center-margin-bottom = 20; + control-center-margin-left = 20; + control-center-margin-right = 20; + control-center-margin-top = 20; + control-center-width = 500; + fit-to-screen = true; + hide-on-action = true; + hide-on-clear = true; + image-visibility = "when-available"; + keyboard-shortcuts = true; + layer = "overlay"; + notification-body-image-height = 100; + notification-body-image-width = 200; + notification-icon-size = 64; + notification-window-width = 490; + positionX = "right"; + positionY = "top"; + script-fail-notify = true; + timeout = 3; + timeout-critical = 0; + timeout-low = 2; + transition-time = 200; + widgets = lib.mkForce [ + "title" + "notifications" + "mpris" + ]; + }; + style = # css + '' + @define-color bgc rgba(0, 0, 0, 0.1); + @define-color borderc #ebdbb2; + @define-color textc #212121; + + * { + font-family: ${osConfig.stylix.fonts.sansSerif.name}; + font-size: ${toString osConfig.stylix.fonts.sizes.desktop}px; + font-weight: bold; + border-width: 3px; + border-color: #ebdbb2; + } + + .control-center .notification-row:focus, + .control-center .notification-row:hover { + opacity: 1; + background: @bgc; + } + + .notification-row { + outline: none; + margin: 5px; + padding: 0; + } + + .notification { + background: @bgc; + margin: 0px; + border-radius: 6px; + border-width: 3px; + border-color: @borderc; + } + + .notification-content { + background: @bgc; + padding: 7px; + margin: 0; + } + + .close-button { + background: @bgc; + color: @borderc; + text-shadow: none; + padding: 0; + border-radius: 20px; + margin-top: 9px; + margin-right: 5px; + } + + .close-button:hover { + box-shadow: none; + background: @borderc; + color: @textc; + transition: all .15s ease-in-out; + border: none; + } + + .notification-action { + color: @borderc; + background: @bgc; + } + + .notification-action:hover { + color: @textc; + background: @borderc; + } + + .summary { + padding-top: 7px; + font-size: 13px; + color: @borderc; + } + + .time { + font-size: 11px; + color: @borderc; + margin-right: 40px; + } + + .body { + font-size: 12px; + color: @borderc; + } + + .control-center { + background-color: @bgc; + border-radius: 20px; + } + + .control-center-list { + background: transparent; + } + + .control-center-list-placeholder { + opacity: .5; + } + + .floating-notifications { + background: transparent; + } + + .blank-window { + background: alpha(black, 0.1); + } + + .widget-title { + color: @borderc; + padding: 10px 10px; + margin: 10px 10px 5px 10px; + font-size: 1.5rem; + } + + .widget-title>button { + font-size: 1rem; + color: @borderc; + padding: 10px; + text-shadow: none; + background: @bgc; + box-shadow: none; + border-radius: 5px; + } + + .widget-title>button:hover { + background: @borderc; + color: @textc; + } + + .widget-label { + margin: 10px 10px 10px 10px; + } + + .widget-label>label { + font-size: 1rem; + color: @borderc; + } + + .widget-mpris { + color: @borderc; + padding: 5px 5px 5px 5px; + margin: 10px; + border-radius: 20px; + } + + .widget-mpris>box>button { + border-radius: 20px; + } + + .widget-mpris-player { + padding: 5px 5px; + margin: 10px; + } + ''; + }; + + # === rofi === # + programs.rofi = { + enable = true; + package = pkgs.rofi; + plugins = with pkgs; [ + rofi-emoji + rofi-calc + ]; + }; + + # === hyprlock === # + programs.hyprlock = { + enable = true; + importantPrefixes = [ + "$" + "monitor" + "size" + "source" + ]; + + settings = + let + font = "CaskaydiaCove Nerd Font"; + font2 = "SF Pro Display Bold"; + in + { + background = [ + { + path = "screenshot"; + blur_passes = 3; + blur_size = 8; + contrast = 0.8916; + brightness = 0.8172; + vibrancy = 0.1696; + vibrancy_darkness = 0.0; + } + ]; + + animations = { + enabled = true; + fade_in = { + duration = 300; + bezier = "easeeOutQuint"; + }; + fade_out = { + duration = 300; + bezier = "easeeOutQuint"; + }; + }; + + # GENERAL + general = { + no_fade_in = false; + grace = 0; + disable_loading_bar = false; + ignore_empty_input = true; + fail_timeout = 1000; + }; + + # TIME + label = [ + { + text = ''cmd[update:1000] echo "$(date +"%-I:%M%p")"''; + color = "rgba(250, 189, 47, .75)"; + font_size = 120; + font_family = "${font2}"; + position = "0, -140"; + halign = "center"; + valign = "top"; + } + + # DAY-DATE-MONTH + { + text = ''cmd[update:1000] echo "$(date '+%A, %d %B')"''; + color = "rgba(225, 225, 225, 0.75)"; + font_size = 30; + font_family = "${font2}"; + position = "0, 200"; + halign = "center"; + valign = "center"; + } + # USER + { + text = "Hello, $USER"; + color = "rgba(255, 255, 255, .65)"; + font_size = 25; + font_family = "${font2}"; + position = "0, -70"; + halign = "center"; + valign = "center"; + } + # Current Song + { + text = ''cmd[update:1000] echo "$(${getCurrentSong})"''; + color = "rgba(235, 219, 178, .75)"; + font_size = 16; + font_family = "${font}, ${font2}"; + position = "0, 80"; + halign = "center"; + valign = "bottom"; + } + ]; + + # LOGO + image = { + path = "$HOME/.face"; + border_size = 2; + border_color = "rgba(255, 255, 255, .75)"; + size = 95; + rounding = -1; + rotate = 0; + reload_time = -1; + reload_cmd = ""; + position = "0, 60"; + halign = "center"; + valign = "center"; + }; + + # INPUT FIELD + input-field = [ + { + size = "290, 60"; + outline_thickness = 2; + dots_size = 0.2; # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.2; # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true; + outer_color = "rgba(0, 0, 0, 0)"; + inner_color = "rgba(60, 56, 54, 0.35)"; + font_color = "rgb(200, 200, 200)"; + fail_color = "rgba(218, 53, 50, 0.56)"; + fade_on_empty = false; + font_family = "${font2}"; + placeholder_text = ''Bruh, come back!''; + hide_input = false; + position = "0, -140"; + halign = "center"; + valign = "center"; + } + ]; + }; + }; + + # === hypridle === # + services.hypridle = { + enable = true; + settings = { + general = { + lock_cmd = "pidof hyprlock || hyprlock"; + before_sleep_cmd = "loginctl lock-session"; + after_sleep_cmd = "niri msg power-off-monitors"; + ignore_dbus_inhibit = false; + ignore_systemd_inhibit = false; + }; + + listener = [ + # 2.5min -> set monitor backlight to minimum + { + timeout = 150; + on-timeout = "brightnessctl -s set 10"; + on-resume = "brightnessctl -r"; + } + # 2.5min -> turn off keyboard backlight + { + timeout = 150; + on-timeout = "brightnessctl -sd rgb:kbd_backlight set 0"; + on-resume = "brightnessctl -rd rgb:kbd_backlight"; + } + # 5min -> Lock screen + { + timeout = 300; + on-timeout = "loginctl lock-session"; + } + # 5.5min -> Screen off + { + timeout = 330; + on-timeout = "niri msg power-off-monitors"; + on-resume = "niri msg power-on-monitors"; + } + # 30min -> Suspend pc + # { + # timeout = 1800; + # on-timeout = "systemctl suspend"; + # } + ]; + }; + }; +} diff --git a/home/user/yazi.nix b/home/user/yazi.nix index 1e33a45..39a6ca4 100644 --- a/home/user/yazi.nix +++ b/home/user/yazi.nix @@ -7,6 +7,7 @@ }: let inherit (pkgs.stdenv.hostPlatform) system; + inherit (lib) getExe'; yaziPlugins = pkgs.fetchFromGitHub { owner = "yazi-rs"; repo = "plugins"; @@ -19,10 +20,7 @@ let for path in "$@"; do output_path="normalized_$(basename "$path")" ${pkgs.ghostscript}/bin/gs \ - -o "$output_path" \ - -sDEVICE=pdfwrite \ - -sPAPERSIZE=a4 \ - -dFIXEDMEDIA \ + -o "$output_path" \ -sDEVICE=pdfwrite \ -sPAPERSIZE=a4 \ -dFIXEDMEDIA \ -dPDFFitPage "$path" done ''; @@ -30,210 +28,214 @@ let pdfCombine = pkgs.writeShellScriptBin "combine-pdf" '' ${lib.getExe pkgs.pdftk} "$@" cat output combined_$(date +%Y%m%d_%H%M%S).pdf ''; + + setWallpaper = + if config.services.swww.enable then + ''shell -- ${getExe' config.services.swww.package "awww"} img "$0" --transition-fps 45 --transition-duration 1 --transition-type random'' + else + ''shell '${getExe' config.programs.caelestia.cli.package "caelestia"} wallpaper -f "$0" 2>&1 >/dev/null' ''; in { - programs = { - yazi = { - enable = true; - package = inputs.yazi.packages.${system}.default; - shellWrapperName = "y"; - enableFishIntegration = true; + programs.yazi = { + enable = true; + package = inputs.yazi.packages.${system}.default; + shellWrapperName = "y"; + enableFishIntegration = true; - plugins = { - toggle-pane = ''${yaziPlugins}/toggle-pane.yazi''; - mount = ''${yaziPlugins}/mount.yazi''; - zoom = ''${yaziPlugins}/zoom''; - vcs-files = ''${yaziPlugins}/vcs-files''; - git = ''${yaziPlugins}/git''; - }; - - settings = { - plugin.prepend_fetchers = [ - { - id = "git"; - name = "*"; - run = "git"; - } - ]; - - input = { - cursor_blink = true; - }; - - opener = { - edit = [ - { - run = ''''\${EDITOR:=nvim} "$0"''; - desc = "$EDITOR"; - block = true; - } - { - run = ''code "$0"''; - orphan = true; - } - ]; - - player = [ - { run = ''mpv --force-window "$0"''; } - ]; - - open = [ - { - run = ''xdg-open "$0"''; - desc = "Open"; - } - ]; - }; - - open = { - prepend_rules = [ - { - mime = "application/pdf"; - use = "open"; - } - ]; - }; - }; - - keymap = { - mgr.prepend_keymap = [ - # Set Wallpaper - { - on = [ - "g" - "w" - ]; - run = ''shell -- ${config.services.swww.package}/bin/awww img "$0" --transition-fps 45 --transition-duration 1 --transition-type random''; - desc = "Set as wallpaper"; - } - # Git Changes - { - on = [ - "g" - "c" - ]; - run = "plugin vcs-files"; - desc = "Show Git file changes"; - } - # Image zoom - { - on = "+"; - run = "plugin zoom 1"; - desc = "Zoom in hovered file"; - } - { - on = "-"; - run = "plugin zoom -1"; - desc = "Zoom out hovered file"; - } - # Mount Manager - { - on = "M"; - run = "plugin mount"; - desc = "Launch mount manager"; - # Usage - # Key binding Alternate key Action - # q - Quit the plugin - # k ↑ Move up - # j ↓ Move down - # l → Enter the mount point - # m - Mount the partition - # u - Unmount the partition - # e - Eject the disk - } - # Toggle Maximize Preview - { - on = "T"; - run = "plugin toggle-pane max-preview"; - desc = "Show or hide the preview panel"; - } - # Copy selected files to the system clipboard while yanking - { - on = "y"; - run = [ - ''shell -- for path in "$0" "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'' - "yank" - ]; - } - # cd back to the root of the current Git repository - { - on = [ - "g" - "r" - ]; - run = ''shell -- ya emit cd "$(git rev-parse --show-toplevel)"''; - desc = "Go to git root"; - } - # Drag and Drop - { - on = [ - "c" - "D" - ]; - run = ''shell 'ripdrag "$0" "$@" -x 2>/dev/null &' --confirm''; - desc = "Drag the file"; - } - # Start terminal - { - on = [ "!" ]; - for = "unix"; - run = ''shell "$SHELL" --block''; - desc = "Open $SHELL here"; - } - # Combine PDF - { - on = [ - "F" # file - "p" # pdf - "c" # combine - ]; - for = "unix"; - run = ''shell -- ${lib.getExe pdfCombine} "$0" "$@"''; - desc = "Combine selected pdf"; - } - { - on = [ - "F" # file - "p" # pdf - "n" # normalize - ]; - for = "unix"; - run = ''shell -- ${lib.getExe pdfNormalize} "$0" "$@" 2>/dev/null''; - desc = "Normalize PDF to A4 size"; - } - { - on = [ - "F" # file - "H" # html - ]; - for = "unix"; - run = [ - ''shell -- for path in "$0" "$@"; do ${lib.getExe md2html} "$path"; done'' - ]; - desc = "Convert Markdown to HTML"; - } - ]; - }; - - initLua = - # lua - '' - -- Show user/group of files in status bar - Status:children_add(function() - local h = cx.active.current.hovered - if not h or ya.target_family() ~= "unix" then - return "" - end - - return ui.Line { - ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"), - ":", - ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"), - " ", - } - end, 500, Status.RIGHT) - ''; + plugins = { + toggle-pane = ''${yaziPlugins}/toggle-pane.yazi''; + mount = ''${yaziPlugins}/mount.yazi''; + zoom = ''${yaziPlugins}/zoom''; + vcs-files = ''${yaziPlugins}/vcs-files''; + git = ''${yaziPlugins}/git''; }; + + settings = { + plugin.prepend_fetchers = [ + { + id = "git"; + name = "*"; + run = "git"; + } + ]; + + input = { + cursor_blink = true; + }; + + opener = { + edit = [ + { + run = ''''\${EDITOR:=nvim} "$0"''; + desc = "$EDITOR"; + block = true; + } + { + run = ''code "$0"''; + orphan = true; + } + ]; + + player = [ + { run = ''mpv --force-window "$0"''; } + ]; + + open = [ + { + run = ''xdg-open "$0"''; + desc = "Open"; + } + ]; + }; + + open = { + prepend_rules = [ + { + mime = "application/pdf"; + use = "open"; + } + ]; + }; + }; + + keymap = { + mgr.prepend_keymap = [ + # Set Wallpaper + { + on = [ + "g" + "w" + ]; + run = setWallpaper; + desc = "Set as wallpaper"; + } + # Git Changes + { + on = [ + "g" + "c" + ]; + run = "plugin vcs-files"; + desc = "Show Git file changes"; + } + # Image zoom + { + on = "+"; + run = "plugin zoom 1"; + desc = "Zoom in hovered file"; + } + { + on = "-"; + run = "plugin zoom -1"; + desc = "Zoom out hovered file"; + } + # Mount Manager + { + on = "M"; + run = "plugin mount"; + desc = "Launch mount manager"; + # Usage + # Key binding Alternate key Action + # q - Quit the plugin + # k ↑ Move up + # j ↓ Move down + # l → Enter the mount point + # m - Mount the partition + # u - Unmount the partition + # e - Eject the disk + } + # Toggle Maximize Preview + { + on = "T"; + run = "plugin toggle-pane max-preview"; + desc = "Show or hide the preview panel"; + } + # Copy selected files to the system clipboard while yanking + { + on = "y"; + run = [ + ''shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'' + "yank" + ]; + } + # cd back to the root of the current Git repository + { + on = [ + "g" + "r" + ]; + run = ''shell -- ya emit cd "$(git rev-parse --show-toplevel)"''; + desc = "Go to git root"; + } + # Drag and Drop + { + on = [ + "c" + "D" + ]; + run = ''shell 'ripdrag "$@" -x 2>/dev/null &' --confirm''; + desc = "Drag the file"; + } + # Start terminal + { + on = [ "!" ]; + for = "unix"; + run = ''shell "$SHELL" --block''; + desc = "Open $SHELL here"; + } + # Combine PDF + { + on = [ + "F" # file + "p" # pdf + "c" # combine + ]; + for = "unix"; + run = ''shell -- ${lib.getExe pdfCombine} "$@"''; + desc = "Combine selected pdf"; + } + { + on = [ + "F" # file + "p" # pdf + "n" # normalize + ]; + for = "unix"; + run = ''shell -- ${lib.getExe pdfNormalize} "$@" 2>/dev/null''; + desc = "Normalize PDF to A4 size"; + } + { + on = [ + "F" # file + "H" # html + ]; + for = "unix"; + run = [ + ''shell -- for path in "$@"; do ${lib.getExe md2html} "$path"; done'' + ]; + desc = "Convert Markdown to HTML"; + } + ]; + }; + + initLua = + # lua + '' + -- Show user/group of files in status bar + Status:children_add(function() + local h = cx.active.current.hovered + if not h or ya.target_family() ~= "unix" then + return "" + end + + return ui.Line { + ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"), + ":", + ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"), + " ", + } + end, 500, Status.RIGHT) + ''; }; home.packages = with pkgs; [ diff --git a/home/user/zellij.nix b/home/user/zellij.nix index c8e40ff..fc63a36 100644 --- a/home/user/zellij.nix +++ b/home/user/zellij.nix @@ -21,7 +21,7 @@ let zellij-sessionizer-src = fetchurl { url = "https://raw.githubusercontent.com/dachxy/zellij-sessionizer/refs/heads/main/zellij-sessionizer"; - sha256 = "sha256:01az9blb86mc3lxaxnrfcj23jaxhagsbs31qjn6pj5wm1wgb2mrf"; + sha256 = "sha256:12kbni75x9g424bymky8cy84i354j654rfmz9bffnabbblccfbpn"; }; zellij-sessionizer = pkgs.writeShellScriptBin "zellij-sessionizer" '' @@ -29,6 +29,7 @@ let export ZELLIJ_SESSIONIZER_SEARCH_PATHS="$HOME/projects $HOME/notes $HOME/expr" export ZELLIJ_SESSIONIZER_SPECIFIC_PATHS="/etc/nixos" export ZELLIJ_SESSIONIZER_SWITCH_PLUGIN="file:${zellij-switch}" + export ZELLIJ_SESSIONIZER_SWITCH_PLUGIN_EXTRA_COMMAND="--layout ${config.programs.zellij.settings.default_layout}" bash ${zellij-sessionizer-src} ''; @@ -40,15 +41,15 @@ in programs.fish.shellAliases = { al = "zellij"; - aa = "zellij a --index 0"; + aa = "zellij a --index 0 || cd /etc/nixos && zellij -s nixos"; zs = "zellij-sessionizer"; }; programs.zellij = { enable = true; - attachExistingSession = true; - enableFishIntegration = true; - enableBashIntegration = true; + attachExistingSession = false; + enableFishIntegration = false; + enableBashIntegration = false; settings = { pane_frames = false; @@ -208,7 +209,7 @@ in bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; } } session { - bind "Ctrl o" "Ctrl c" { SwitchToMode "Normal"; } + bind "Ctrl shift o" "Ctrl c" { SwitchToMode "Normal"; } bind "Ctrl s" { SwitchToMode "Scroll"; } bind "d" { Detach; } bind "w" { diff --git a/home/user/zen-browser.nix b/home/user/zen-browser.nix index 77b6ab6..5b4bdbc 100644 --- a/home/user/zen-browser.nix +++ b/home/user/zen-browser.nix @@ -1,59 +1,183 @@ { - pkgs, osConfig, + config, helper, + pkgs, ... }: let inherit (osConfig.systemConf) username; inherit (helper) capitalize; + inherit (pkgs) runCommand; + zenNebula = pkgs.fetchFromGitHub { - owner = "justadumbprsn"; + owner = "JustAdumbPrsn"; repo = "zen-nebula"; rev = "main"; - sha256 = "sha256-f4J5ob/apKhxERUSvXE8QHMMsKJCQFRoMSo/Pw4LgTg="; + sha256 = "sha256-wtntRAkOGm6fr396kqzqk+GyPk+ytifXTqqOp0YIvlw="; }; - profileName = capitalize username; + + patchedNebula = + runCommand "patched-nebula" + { + src = zenNebula; + buildInputs = with pkgs; [ + rsync + coreutils + ]; + } + # Fix for nebula without `sine` + '' + mkdir -p $out/Nebula + tail -n +28 $src/Nebula/Nebula-config.css > $out/Nebula/Nebula-config.css + rsync -av --exclude "Nebula-config.css" $src/ $out/ + ''; + + profileName = "${capitalize username} Profile"; in { programs.zen-browser = { enable = true; + languagePacks = [ + "en-US" + "zh-Tw" + ]; + + policies = { + AutofillAddressEnabled = true; + AutofillCreditCardEnabled = false; + DisableAppUpdate = true; + DisableFeedbackCommands = true; + DisableFirefoxStudies = true; + DisablePocket = true; + DisableTelemetry = true; + DontCheckDefaultBrowser = true; + NoDefaultBookmarks = true; + OfferToSaveLogins = false; + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + Certificates.Install = [ + ../../system/extra/ca.crt + ]; + + Preferences = { + "browser.aboutConfig.showWarning" = false; + "browser.shell.checkDefaultBrowser" = false; + "browser.shell.didSkipDefaultBrowserCheckOnFirstRun" = true; + "browser.tabs.allow_transparent_browser" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "font.language.group" = "zh-TW"; + "font.name.sans-serif.ja" = "Noto Sans CJK JP"; + "font.name.sans-serif.zh-TW" = "Noto Sans CJK TC"; + "font.name.serif.ja" = "Noto Serif CJK JP"; + "font.name.serif.zh-TW" = "Noto Serif CJK TC"; + "font.name.monospace.ja" = "Noto Sans Mono CJK JP"; + "font.name.monospace.x-western" = "CaskaydiaCove Nerd Font Mono"; + "font.name.monospace.zh-TW" = "Noto Sans Mono CJK TC"; + }; + + ExtensionSettings = + let + mkExtensionSettings = builtins.mapAttrs ( + _: pluginId: { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/${pluginId}/latest.xpi"; + installation_mode = "force_installed"; + } + ); + in + (mkExtensionSettings { + "{446900e4-71c2-419f-a6a7-df9c091e268b}" = "bitwarden-password-manager"; + "{4f391a9e-8717-4ba6-a5b1-488a34931fcb}" = "bonjourr-startpage"; + "addon@darkreader.org" = "darkreader"; + "firefox@ghostery.com" = "ghostery"; + "{7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}" = "styl-us"; + "firefox@tampermonkey.net" = "tampermonkey"; + "user-agent-switcher@ninetailed.ninja" = "uaswitcher"; + "{d7742d87-e61d-4b78-b8a1-b469842139fa}" = "vimium-ff"; + "{91aa3897-2634-4a8a-9092-279db23a7689}" = "zen-internet"; + }) + // { + "moz-addon-prod@7tv.app" = { + install_url = "https://extension.7tv.gg/v3.1.13/ext.xpi"; + installation_mode = "force_installed"; + }; + }; + }; + profiles = { - "${profileName} Profile" = { - default = true; + "${profileName}" = { + isDefault = true; name = username; + search.default = "google"; + search.privateDefault = "ddg"; settings = { "zen.view.compact.should-enable-at-startup" = true; "zen.widget.linux.transparency" = true; "zen.view.compact.show-sidebar-and-toolbar-on-hover" = false; "zen.tabs.vertical.right-side" = true; "zen.urlbar.behavior" = "float"; + + # Nebula "nebula-tab-loading-animation" = 0; + "nebula-essentials-gray-icons" = false; + "nebula-compact-mode-no-sidebar-bg" = true; + "nebula-disable-container-styling" = true; "app.update.auto" = false; "app.normandy.first_run" = false; - "browser.aboutConfig.showWarning" = false; - "browser.shell.checkDefaultBrowser" = false; - "browser.shell.didSkipDefaultBrowserCheckOnFirstRun" = true; - "browser.tabs.allow_transparent_browser" = true; - "browser.urlbar.placeholderName" = "Google"; - "browser.urlbar.placeholderName.private" = "DuckDuckGo"; "middlemouse.paste" = false; - "toolkit.legacyUserProfileCustomizations.stylesheets" = true; - "font.language.group" = "zh-TW"; - "font.name.sans-serif.ja" = "Noto Sans CJK JP"; - "font.name.sans-serif.zh-TW" = "Noto Sans CJK TC"; - "font.name.serif.ja" = "Noto Serif CJK JP"; - "font.name.serif.zh-TW" = "Noto Serif CJK TC"; - "font.name.monospace.ja" = "Noto Sans Mono CJK JP"; - "font.name.monospace.x-western" = "CaskaydiaCove Nerd Font Mono"; - "font.name.monospace.zh-TW" = "Noto Sans Mono CJK TC"; }; - ensureCACertifications = [ - ../../system/extra/ca.crt - ]; - chrome = zenNebula; }; }; }; + + home.file.".zen/${profileName}/zen-keyboard-shortcuts.json".source = + ../config/zen/zen-keyboard-shortcuts.json; + + home.file.".zen/${profileName}/chrome" = { + source = patchedNebula; + recursive = true; + }; + + xdg.mimeApps = + let + value = + let + zen-browser = config.programs.zen-browser.package; + in + zen-browser.meta.desktopFileName; + + associations = builtins.listToAttrs ( + map + (name: { + inherit name value; + }) + [ + "application/x-extension-shtml" + "application/x-extension-xhtml" + "application/x-extension-html" + "application/x-extension-xht" + "application/x-extension-htm" + "x-scheme-handler/unknown" + "x-scheme-handler/mailto" + "x-scheme-handler/chrome" + "x-scheme-handler/about" + "x-scheme-handler/https" + "x-scheme-handler/http" + "application/xhtml+xml" + "application/json" + "application/pdf" + "text/plain" + "text/html" + ] + ); + in + { + associations.added = associations; + defaultApplications = associations; + }; } diff --git a/options/systemconf.nix b/options/systemconf.nix index 9459ac2..7c18aa5 100644 --- a/options/systemconf.nix +++ b/options/systemconf.nix @@ -13,37 +13,13 @@ let mkEnableOption types mkIf - optionals ; inherit (helper) capitalize; - stateVersion = "25.05"; + stateVersion = "25.11"; cfg = config.systemConf; - monitorType = - with types; - submodule { - options = { - desc = mkOption { - type = str; - description = "Hyprland monitor description"; - example = "ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271"; - }; - output = mkOption { - type = str; - description = "Hyprland monitor output"; - example = "DP-6"; - }; - props = mkOption { - type = str; - description = "Hyprland monitor properties"; - default = "prefered, 0x0, 1"; - example = "2560x1440@180, -1440x-600, 1, transform, 1"; - }; - }; - }; - defaultSddmTheme = ( pkgs.sddm-astronaut.override { embeddedTheme = "purple_leaves"; @@ -67,6 +43,21 @@ in type = with types; nullOr path; description = "User avatar"; default = null; + apply = + img: + ( + if img != null then + pkgs.runCommand "user-face" + { + buildInputs = with pkgs; [ imagemagick ]; + } + '' + size=$(identify -format "%[fx:min(w,h)]" ${img}) + magick ${img} -gravity center -crop "''\${size}x''\${size}+0+0" -resize 512x512 $out + '' + else + null + ); }; domain = mkOption { @@ -97,17 +88,11 @@ in enable = (mkEnableOption "Enable hyprland") // { default = false; }; - monitors = mkOption { - type = with types; listOf monitorType; - default = [ ]; - example = [ - { - desc = "ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271"; - output = "DP-6"; - props = "2560x1440@165, 0x0, 1"; - } - ]; - description = "Monitors used for hyprland and waybar"; + }; + + niri = { + enable = (mkEnableOption "Enable niri") // { + default = false; }; }; @@ -128,11 +113,11 @@ in inherit (cfg) domain; hostName = cfg.hostname; }; - environment.systemPackages = [ - inputs.attic.packages.${system}.attic - ]; + system.stateVersion = stateVersion; + programs.hyprland.enable = if (cfg.hyprland.enable && (!cfg.niri.enable)) then true else false; + # ==== Home Manager ==== # home-manager = mkIf cfg.enableHomeManager { backupFileExtension = "backup-hm"; @@ -140,30 +125,27 @@ in useGlobalPkgs = true; extraSpecialArgs = { inherit helper inputs system; - inherit (cfg) username; + inherit (cfg) username hostname; }; - users."${cfg.username}" = { - imports = [ - inputs.hyprland.homeManagerModules.default - inputs.caelestia-shell.homeManagerModules.default - inputs.sops-nix.homeManagerModules.default - inputs.zen-browser.homeManagerModules.${system}.default - inputs.nvf.homeManagerModules.default - { - home = { - homeDirectory = "/home/${cfg.username}"; - stateVersion = stateVersion; - }; - programs.home-manager.enable = true; + sharedModules = [ + inputs.hyprland.homeManagerModules.default + inputs.caelestia-shell.homeManagerModules.default + inputs.sops-nix.homeManagerModules.default + inputs.zen-browser.homeModules.twilight + inputs.nvf.homeManagerModules.default + inputs.noctalia.homeModules.default + inputs.niri-nfsm.homeModules.default + ]; + users.${cfg.username} = { + home = { + homeDirectory = "/home/${cfg.username}"; + stateVersion = stateVersion; + }; + programs.home-manager.enable = true; - home.file.".face" = mkIf (cfg.face != null) { - source = cfg.face; - }; - } - ] - ++ (optionals cfg.hyprland.enable [ - ../home/user/hyprland.nix - ]); + home.file.".face" = mkIf (cfg.face != null) { + source = cfg.face; + }; }; }; }; diff --git a/system/dev/dn-lap/default.nix b/system/dev/dn-lap/default.nix index bd3b530..207514a 100644 --- a/system/dev/dn-lap/default.nix +++ b/system/dev/dn-lap/default.nix @@ -8,18 +8,7 @@ in { systemConf = { inherit hostname username; - face = ../../../home/config/.face; - domain = "net.dn"; - hyprland = { - enable = true; - monitors = [ - { - desc = "LG Display 0x0665"; - output = "eDP-1"; - props = "preferred, 0x0, 1.25"; - } - ]; - }; + niri.enable = true; }; imports = [ diff --git a/system/dev/dn-lap/home/default.nix b/system/dev/dn-lap/home/default.nix index 38ecc8a..368e8db 100644 --- a/system/dev/dn-lap/home/default.nix +++ b/system/dev/dn-lap/home/default.nix @@ -5,78 +5,88 @@ }: let inherit (lib) mkForce; + inherit (config.networking) hostName; inherit (config.systemConf) username; in { - home-manager = { - users."${username}" = { - home.sessionVariables = { - BROWSER = mkForce "chromium"; - }; + home-manager.users."${username}" = { + home.sessionVariables = { + BROWSER = mkForce "chromium"; + }; - programs.chromium = { - enable = true; - extensions = [ - # Bitwarden + services.kanshi.settings = [ + { + profile.name = hostName; + profile.outputs = [ { - id = "nngceckbapebfimnlniiiahkandclblb"; - } - # Vimium - { - id = "dbepggeogbaibhgnhhndojpepiihcmeb"; - } - # Dark Reader - { - id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; - } - # Vertical Tabs - { - id = "efobhjmgoddhfdhaflheioeagkcknoji"; + criteria = "LG Display 0x0665"; + position = "0,0"; + scale = 1.25; } ]; - }; + } + ]; - imports = [ - ../../../../home/presets/basic.nix - (import ../../../../home/user/bitwarden.nix { - email = "danny@net.dn"; - baseUrl = "https://bitwarden.net.dn"; - }) + programs.hyprlock.monitors = [ + "LG Display" + ]; - # waybar - (import ../../../../home/user/waybar.nix { - settings = [ - { - output = "eDP-1"; - height = 46; - modules-left = [ - "custom/os" - "hyprland/workspaces" - "clock" - "mpris" - ]; - modules-right = [ - "wlr/taskbar" - "temperature" - "custom/wallRand" - "custom/wireguard" - "custom/recording" - "idle_inhibitor" - "network" - "pulseaudio" - "battery" - "custom/swaync" - ]; - } - ]; - }) - - # Git - (import ../../../../home/user/git.nix { - inherit username; - email = "danny10132024@gmail.com"; - }) + programs.chromium = { + enable = true; + extensions = [ + # Bitwarden + { + id = "nngceckbapebfimnlniiiahkandclblb"; + } + # Vimium + { + id = "dbepggeogbaibhgnhhndojpepiihcmeb"; + } + # Dark Reader + { + id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; + } + # Vertical Tabs + { + id = "efobhjmgoddhfdhaflheioeagkcknoji"; + } ]; }; + + imports = [ + ../../../../home/presets/basic.nix + (import ../../../../home/user/bitwarden.nix { + email = "danny@net.dn"; + baseUrl = "https://bitwarden.net.dn"; + }) + + # waybar + (import ../../../../home/user/waybar.nix { + settings = [ + { + output = "eDP-1"; + height = 46; + modules-left = [ + "custom/os" + "hyprland/workspaces" + "clock" + "mpris" + ]; + modules-right = [ + "wlr/taskbar" + "temperature" + "custom/wallRand" + "custom/wireguard" + "custom/recording" + "idle_inhibitor" + "network" + "pulseaudio" + "battery" + "custom/swaync" + ]; + } + ]; + }) + ]; }; } diff --git a/system/dev/dn-lap/sops/secret.yaml b/system/dev/dn-lap/sops/secret.yaml index b227460..a92f55e 100644 --- a/system/dev/dn-lap/sops/secret.yaml +++ b/system/dev/dn-lap/sops/secret.yaml @@ -1,5 +1,5 @@ wireguard: - wg0.conf: ENC[AES256_GCM,data:drqs+CkZVZH4K87jWZLy33NuqPeqLkyTp6mDoxcOsEYGaIR38pommv4TSynAOvrUC3dCw9O+qLHEiSwlJGoZOQKFzHxUefKrCtkRMCE3ytDKFmJbLoKT/GPxnOOenIm8JxKX6nsLaqCk36ODXzTA8iU8ICN2zqoCiodjx72Ge2KckQzSak04v28B6viuzfl8zipD1Fetm72sOBTX0I0WwoziDBBL77x1hX/8POob3ISrTejhik18dxAPLB9H3iVl1aOHhszsrAYB26IfujY/FxRqIrn8v+H2aFen3oowRjd/wTPtc/rLZj/7n6/Sl3NDzOE+jIYYG7yym7lkUM9Z,iv:oS01iUSG0ufUzIsfPD/jF3/TPEDDBp+CnnLQnyze8dM=,tag:mtmY3OVz3k7eu5Lxe14KLg==,type:str] + wg0.conf: ENC[AES256_GCM,data:9wegrw4ZbY+T/gNYi0gt4n6Db1/rRpsiqVbQr8QoYTwOiWBjKO2PGTTM5aK3khk5t2pYOTSqEBn5+5J/JYZpQ6nvJMcqn0+31KMuMT9/0akxOm112Tj31vOdBwRvSQVLBzmQtPABgMlV36lRtpVU71lwiNO4M33ygzL/tm7EMt0e75Nr9CZkGI7BGtnATBzbj3ysftsbFPF2iIgZ9fej4I78rJ1HavAsAgcrxksWAJjFZyFGWinkW4eiwDKlqBvRUW0tE8TF897ZmX90UnwXwjtyJcyJH6nzwrRDJgxR7uyRL/HIusmVZHCNSlo8dSaxAROXOw5ULjmQpXzzPAVUxw==,iv:FCv2ADYZXflBYuI9B9xvUSAYX8+v2Qf9EJjZ/TX27sA=,tag:caR4HS3yYrjNP1IzxgoOXA==,type:str] sops: age: - recipient: age1uvsvf5ljaezh5wze32p685kfentyle0l2mvysc67yvgct2h4850qqph9lv @@ -20,7 +20,7 @@ sops: V09NYXpBYXBtYWdBajJubmVFL2loY0EKJdYKQHPriOT0eouvRUiCyqLSTzugUZxl BFTwfCez1/K2ERKQkKsMfIARbHaI2SRyDxM2O1IJ+DOIJ2383K6Gvw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-11-21T12:34:30Z" - mac: ENC[AES256_GCM,data:LUqoXWMhmQQgqq1AX7I2v7z58ywstjWzsVTav9iu0RrkCxeB1u5V90E4tcnfjtquLwjiabpLSRpkUXE33DhqcgxLIklX0Cpld5TK1Bsdn8DXyKk1Lhfdf3OL7cn14kb4CqXTNlDyqwM+BBsYmdFQzPjb8IPiD9y+mTO5yHuAta0=,iv:mbHhZdv+0lDI9cNUsI3oatwbItQ6Xfvgm0UMQdu9FKA=,tag:aPFWPwahvMjBojzthZZ6vQ==,type:str] + lastmodified: "2025-12-19T12:39:58Z" + mac: ENC[AES256_GCM,data:tTvNyD6Lekc0RUIr9CpCjhWl2Gb9pHRubeoTrwceUCkm074EjYIzvqwiX5fzt6Cc5/H/k8NWJZBAoI3tOeCrXpo1Lbb0fCjGqxTldGN44pLR/5q9bdAxLom3EEqKiBBryVxqAkkm1a98UXPtnh+oDyaFsqTbS65LolEtFEbV/3U=,iv:J0gMlpWc9TVSCRxcdUnlXtNnmahvbc12EsLeFB4BJlY=,tag:h0EaNQ/sl+3sU9+g4ohjtw==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 diff --git a/system/dev/dn-pre7780/common/boot.nix b/system/dev/dn-pre7780/common/boot.nix index d36ba65..12868d8 100644 --- a/system/dev/dn-pre7780/common/boot.nix +++ b/system/dev/dn-pre7780/common/boot.nix @@ -3,7 +3,7 @@ ... }: { - boot.kernelPackages = pkgs.linuxPackages_latest; + boot.kernelPackages = pkgs.linuxPackages_6_17; fileSystems."/mnt/ssd" = { device = "/dev/disk/by-label/DN-SSD"; diff --git a/system/dev/dn-pre7780/common/hardware-configuration.nix b/system/dev/dn-pre7780/common/hardware-configuration.nix index e7b36d1..b8c3be0 100644 --- a/system/dev/dn-pre7780/common/hardware-configuration.nix +++ b/system/dev/dn-pre7780/common/hardware-configuration.nix @@ -1,28 +1,46 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ + config, + lib, + pkgs, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ "vmd" "xhci_pci" "thunderbolt" "nvme" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; + boot.initrd.availableKernelModules = [ + "vmd" + "xhci_pci" + "thunderbolt" + "nvme" + "usb_storage" + "usbhid" + "sd_mod" + "rtsx_pci_sdmmc" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-label/NIXROOT"; - fsType = "ext4"; - }; + fileSystems."/" = { + device = "/dev/disk/by-label/NIXROOT"; + fsType = "ext4"; + }; - fileSystems."/boot" = - { device = "/dev/disk/by-label/NIXBOOT"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; + fileSystems."/boot" = { + device = "/dev/disk/by-label/NIXBOOT"; + fsType = "vfat"; + options = [ + "fmask=0022" + "dmask=0022" + ]; + }; swapDevices = [ ]; diff --git a/system/dev/dn-pre7780/common/nvidia.nix b/system/dev/dn-pre7780/common/nvidia.nix index 02f6199..6f75446 100644 --- a/system/dev/dn-pre7780/common/nvidia.nix +++ b/system/dev/dn-pre7780/common/nvidia.nix @@ -1,3 +1,7 @@ +{ config, lib, ... }: +let + inherit (lib) mkForce; +in { imports = [ (import ../../../modules/nvidia.nix { @@ -6,4 +10,6 @@ nvidia-bus-id = "PCI:1:0:0"; }) ]; + + hardware.nvidia.package = mkForce config.boot.kernelPackages.nvidiaPackages.beta; } diff --git a/system/dev/dn-pre7780/default.nix b/system/dev/dn-pre7780/default.nix index d5476a1..2209948 100644 --- a/system/dev/dn-pre7780/default.nix +++ b/system/dev/dn-pre7780/default.nix @@ -11,24 +11,10 @@ in { systemConf = { inherit hostname username; - domain = "net.dn"; enableHomeManager = true; nvidia.enable = true; - hyprland = { - enable = true; - monitors = [ - { - desc = "ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271"; - output = "DP-2"; - props = "2560x1440@165, 0x0, 1"; - } - { - desc = "Acer Technologies XV272U V3 1322131231233"; - output = "DP-3"; - props = "2560x1440@180, -1440x-600, 1, transform, 1"; - } - ]; - }; + hyprland.enable = false; + niri.enable = true; sddm.package = ( pkgs.sddm-astronaut.override { embeddedTheme = "purple_leaves"; @@ -65,6 +51,8 @@ in ./sops ./utility ./virtualisation + ../../modules/shells/noctalia + ../../modules/sunshine.nix ]; # Live Sync D diff --git a/system/dev/dn-pre7780/expr/default.nix b/system/dev/dn-pre7780/expr/default.nix index 17146c8..c627d79 100644 --- a/system/dev/dn-pre7780/expr/default.nix +++ b/system/dev/dn-pre7780/expr/default.nix @@ -1,6 +1,6 @@ { imports = [ # ./netbird.nix - ./osx-kvm.nix + # ./osx-kvm.nix ]; } diff --git a/system/dev/dn-pre7780/games/game.nix b/system/dev/dn-pre7780/games/game.nix index 6f5970e..d8675f4 100644 --- a/system/dev/dn-pre7780/games/game.nix +++ b/system/dev/dn-pre7780/games/game.nix @@ -1,6 +1,5 @@ { pkgs, - pkgs-stable, config, ... }: @@ -18,8 +17,8 @@ let }); in { - environment.systemPackages = [ - pkgs-stable.shadps4 + environment.systemPackages = with pkgs; [ + shadps4 ]; home-manager = { diff --git a/system/dev/dn-pre7780/home/default.nix b/system/dev/dn-pre7780/home/default.nix index dad53db..7d1588a 100644 --- a/system/dev/dn-pre7780/home/default.nix +++ b/system/dev/dn-pre7780/home/default.nix @@ -1,81 +1,187 @@ { config, lib, + helper, ... }: let - inherit (lib) optionalString; + inherit (helper) getMonitors; + inherit (builtins) elemAt; + inherit (config.networking) hostName; inherit (config.systemConf) username; - inherit (config.systemConf.hyprland) monitors; + inherit (lib) optionalString mkForce; + + wmName = if config.programs.hyprland.enable then "hyprland" else "niri"; in { - home-manager.users."${username}" = { - imports = [ - ../../../../home/presets/basic.nix - ../../../../home/user/zellij.nix - ./expr - ./wm + home-manager.users."${username}" = + { + osConfig, + config, + pkgs, + ... + }: + let + monitors = getMonitors hostName config; + mainMonitor = (elemAt monitors 0).criteria; + secondMonitor = (elemAt monitors 1).criteria; + mainMonitorSwayFormat = "desc:ASUSTek COMPUTER INC - ASUS VG32VQ1B"; + in + { + home.packages = with pkgs; [ + mattermost-desktop + ]; - # Bitwarden client - (import ../../../../home/user/bitwarden.nix { - email = "danny@net.dn"; - baseUrl = "https://bitwarden.net.dn"; - }) + # NOTE: Disable idle + services.hypridle.enable = mkForce false; - # waybar - (import ../../../../home/user/waybar.nix { - settings = [ - # monitor 1 + # hyprlock shows on main monitor + programs.hyprlock.monitors = [ + mainMonitorSwayFormat + ]; + + services.kanshi.settings = [ + { + profile.name = "${hostName}"; + profile.outputs = [ + { + criteria = "ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271"; + mode = "2560x1440@164.554001Hz"; + position = "0,0"; + scale = 1.0; + } + { + criteria = "Acer Technologies XV272U V3 1322131231233"; + mode = "2560x1440@179.876999Hz"; + position = "-1440,-600"; + transform = "90"; + } + ]; + } + ]; + + programs.ghostty.settings = { + background-opacity = 0.9; + }; + + # ==== Shells ==== # + # Caelestia + programs.caelestia.settings = { + osd = { + enableBrightness = false; + enableMicrophone = true; + }; + }; + + # Noctalia + programs.noctalia-shell.filteredIds = [ + "Brightness" + ]; + + # ==== WM ==== # + programs.niri.settings = { + binds = with config.lib.niri.actions; { + "Mod+G".action = focus-workspace "game"; + "Mod+Shift+G".action.move-column-to-workspace = [ "game" ]; + + # Overrides + "Mod+B".action = mkForce (focus-workspace "browser"); + "Mod+Shift+B".action.move-column-to-workspace = [ "browser" ]; + }; + + hotkey-overlay = { + hide-not-bound = true; + skip-at-startup = true; + }; + + workspaces."browser" = { + open-on-output = secondMonitor; + }; + + # Other settings are located in `public/dn/common.nix` + workspaces."game" = { + open-on-output = mainMonitor; + }; + + window-rules = [ + # Second Monitor App { - output = "${(builtins.elemAt monitors 0).output}"; - height = 48; - modules-left = [ - "custom/os" - "hyprland/workspaces" - "clock" - "custom/cava" - "mpris" - ]; - modules-right = [ - "wlr/taskbar" - (optionalString config.programs.gamemode.enable "custom/gamemode") - "custom/bitwarden" - "custom/airplay" - "custom/wallRand" - "custom/wireguard" - "custom/recording" - "idle_inhibitor" - "network" - "cpu" - "memory" - "pulseaudio" - "custom/swaync" - ]; - } - # monitor 2 - { - output = "${(builtins.elemAt monitors 1).output}"; - height = 54; - modules-left = [ - "clock" - "mpris" - ]; - modules-right = [ - "wlr/taskbar" - "temperature" - "cpu" - "memory" - "pulseaudio" + matches = [ + { + app-id = "^discord$"; + } + { + app-id = "^thunderbird$"; + } ]; + + open-on-output = secondMonitor; } ]; - }) + }; - # Git - (import ../../../../home/user/git.nix { - inherit username; - email = "danny10132024@gmail.com"; - }) - ]; - }; + imports = [ + ../../../../home/presets/basic.nix + ../../../../home/user/zellij.nix + ./expr + ./wm + + # Bitwarden client + (import ../../../../home/user/bitwarden.nix { + email = "danny@net.dn"; + baseUrl = "https://bitwarden.net.dn"; + }) + + # waybar + (import ../../../../home/user/waybar.nix { + matchByDesc = true; + settings = [ + # monitor 1 + { + output = "${(builtins.elemAt monitors 0).criteria}"; + height = 48; + modules-left = [ + "custom/os" + "${wmName}/workspaces" + "clock" + "custom/cava" + "mpris" + ]; + modules-right = [ + "wlr/taskbar" + (optionalString osConfig.programs.gamemode.enable "custom/gamemode") + "custom/bitwarden" + "custom/airplay" + "custom/wallRand" + "custom/wireguard" + "custom/recording" + "idle_inhibitor" + "network" + "cpu" + "memory" + "pulseaudio" + "custom/swaync" + ]; + } + # monitor 2 + { + output = "${(builtins.elemAt monitors 1).criteria}"; + height = 54; + modules-left = [ + "clock" + "mpris" + ]; + modules-right = [ + "wlr/taskbar" + "temperature" + "cpu" + "memory" + "pulseaudio" + ]; + } + ]; + }) + + ]; + }; } diff --git a/system/dev/dn-pre7780/services/default.nix b/system/dev/dn-pre7780/services/default.nix index 1e9389e..683a346 100644 --- a/system/dev/dn-pre7780/services/default.nix +++ b/system/dev/dn-pre7780/services/default.nix @@ -4,7 +4,7 @@ ./mail.nix ./nginx.nix ./wireguard.nix - ./nextcloud.nix + # ./nextcloud.nix # ./netbird.nix ]; } diff --git a/system/dev/dn-pre7780/services/nextcloud.nix b/system/dev/dn-pre7780/services/nextcloud.nix index 867ca5a..d5f324d 100644 --- a/system/dev/dn-pre7780/services/nextcloud.nix +++ b/system/dev/dn-pre7780/services/nextcloud.nix @@ -5,10 +5,26 @@ ... }: let + inherit (lib) mkIf mkForce; hostname = "drive.dnywe.com"; port = 31007; in { + sops.secrets = { + "nextcloud/adminPassword" = mkIf config.services.nextcloud.enable { + owner = "nextcloud"; + group = "nextcloud"; + }; + "nextcloud/signaling.conf" = mkIf config.services.nextcloud.enable { + owner = "signaling"; + group = "signaling"; + mode = "0640"; + }; + "nextcloud/whiteboard" = mkIf config.services.nextcloud.enable { + owner = "nextcloud"; + }; + }; + imports = [ (import ../../../modules/nextcloud.nix { configureACME = false; @@ -25,10 +41,10 @@ in ]; services.nextcloud = { - https = lib.mkForce false; + # enable = mkForce false; + https = mkForce false; extraApps = { inherit (config.services.nextcloud.package.packages.apps) spreed; - twofactor_totp = pkgs.fetchNextcloudApp { url = "https://github.com/nextcloud-releases/twofactor_totp/releases/download/v6.4.1/twofactor_totp-v6.4.1.tar.gz"; sha256 = "sha256-Wa2P6tpp75IxCsTG4B5DQ8+iTzR7yjKBi4ZDBcv+AOI="; @@ -49,15 +65,15 @@ in }; }; - users.groups.signaling = { + users.groups.signaling = mkIf config.services.nextcloud.enable { }; - users.users.signaling = { + users.users.signaling = mkIf config.services.nextcloud.enable { isSystemUser = true; group = "signaling"; }; - systemd.services.nextcloud-spreed-signaling = { + systemd.services.nextcloud-spreed-signaling = mkIf config.services.nextcloud.enable { requiredBy = [ "multi-users.target" "phpfpm-nextcloud.service" @@ -71,7 +87,7 @@ in }; }; - services.nats = { + services.nats = mkIf config.services.nextcloud.enable { enable = true; settings = { host = "127.0.0.1"; diff --git a/system/dev/dn-pre7780/sops/secret.yaml b/system/dev/dn-pre7780/sops/secret.yaml index 1c564dc..c8203dd 100644 --- a/system/dev/dn-pre7780/sops/secret.yaml +++ b/system/dev/dn-pre7780/sops/secret.yaml @@ -1,5 +1,5 @@ wireguard: - wg0.conf: ENC[AES256_GCM,data:AL5GVljm3Ta9Deb2SiUNEvtTSL1L9E5lcMhE6szjXCCfBnOpK8RiVe/b6JGC9RzE6DFiiQdZoKBWLy7rcrIjrDA09bCaQO5Gjjl2YtEkI0FULcMI8PuIQ8j2sYgjk0FAXRsmNy5U/v6afIum5wN2iTsYL1y3DObeRoNrsQNhBYDQBE0ZmcJxgtQYihUuGuEYcDLhzhFXfYKZrG1Grwqpcn0KK8K5A3qPgtq8fn86KuMZ6i4MHAiG7OJgXMpgTHjmWpJ819qsswjkpF1RgjgpET28IiNza9FIbxiflIXXagSZeigtLIJ6dOZwBgt0f5dgfr41dN/hT5SEHFADdXIa,iv:OsB8mf+WB9C/kvGzTs/LxqjimPISDGhU2P2GjbkYEbc=,tag:lCxtFVViYejQhZUfmdkGrg==,type:str] + wg0.conf: ENC[AES256_GCM,data:ozySeNEvkiLt9TGrZCrlJWKT5gcSlZ9T8AeXGO97SPgxI394eCQ/LOkVFl7AykhZvs7YkxMpZzAZxc0oNdTYuDlqfrNr0pqTUJmpX+5PVRmDb5z2MJvERktVkJ4LSvVodoYznDwT/y9q199AFKf3t4EoWuRyR/il6P8HuGVHXrKRYUrwuB4nuq1SIByY+8D2gzohFB/s6pSOPYy6/xCt0Nm+x0wmcdrlyOb0S+4WXlcou2ll98o9q2YDdVBKeW4jyUjFqXM2XzD0JXpAi9ZFlyzxyYNwa4oMYATyCBCH4BNHqe850QHEoCaOovioEdDH/tluB2X/891ixqzURypzbg==,iv:3Q5xOgGcg8/DIwHt4fHsQGtN8f2hGpVDtf47PcwW62I=,tag:SbJqhWi3+h1O5ZIOayDrUw==,type:str] dovecot: openldap: ENC[AES256_GCM,data:U3YYreEqoh+F0Mrli52jgQowrUqIUPmdQps=,iv:vTjHBFsue+89GOCDigVIktgGSZNZv8A2e3GM80o6TXc=,tag:GGh+hsT+yV/I12meXxflbQ==,type:str] nextcloud: @@ -38,7 +38,7 @@ sops: MEdmWkFwNXZoR1ZVRnQ0aWlkYzZwSmsK0EFecUIdqlDKX08oRCoDQQ3QCX1wzb8w lghDJhWlfuKr+X24GoE4UK04aJVLqVMRRI4BJW+LQXeHS+dWKu3mQA== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-11-22T10:29:33Z" - mac: ENC[AES256_GCM,data:hcqqPP7EEDrFWwKU3Yl0XM6h17pLXBsmISMd94qYzaxmT/nKnF5bn8dq6M1C9t0Q0vvLjrPm94Gv2HPPJOX960whYMfwuXv/RkORJGb4qXdkXsGJaCrR9M51HArrd7Ba3pjoEyp3Jz9xTNrqg8kCDphBs0oZRV6dQDJUTdLbR50=,iv:eH5T27fthAad/dM5NxXyQawiVmTGgwJbeRXAiut9kL4=,tag:3lGkJMZKo8O1Zm1fB3DJ9Q==,type:str] + lastmodified: "2025-12-19T12:39:37Z" + mac: ENC[AES256_GCM,data:JSwphdjAfZcLSuctzruwVjBQXhbQKnEda93KlrH8eoSJcFXBRCMz0v+HY2nBlrC9lwp9vgT3HnGmR6hIPi48UtyxYcGOJy33OY4M1it0WGE2r8Ikg++5cBUtacK4QdwuMCADhNT5ZHs5T7UUX0GMLeqAtrcJ3FKt+4+catsOvnE=,iv:7ZTi86IkbScizZlOCk+uXDyWzrFDsLRuLuzjUFsMFR0=,tag:3/i7BZ8XYALj7RYj4dIUgA==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 diff --git a/system/dev/dn-pre7780/sops/sops-conf.nix b/system/dev/dn-pre7780/sops/sops-conf.nix index b0c1f95..a8e174f 100644 --- a/system/dev/dn-pre7780/sops/sops-conf.nix +++ b/system/dev/dn-pre7780/sops/sops-conf.nix @@ -6,18 +6,6 @@ in sops = { secrets = { "wireguard/wg0.conf" = { }; - "nextcloud/adminPassword" = mkIf config.services.nextcloud.enable { - owner = "nextcloud"; - group = "nextcloud"; - }; - "nextcloud/signaling.conf" = mkIf config.services.nextcloud.enable { - owner = "signaling"; - group = "signaling"; - mode = "0640"; - }; - "nextcloud/whiteboard" = mkIf config.services.nextcloud.enable { - owner = "nextcloud"; - }; "lam/env" = { }; diff --git a/system/dev/dn-pre7780/virtualisation/default.nix b/system/dev/dn-pre7780/virtualisation/default.nix index 42d2c81..6e0daa0 100644 --- a/system/dev/dn-pre7780/virtualisation/default.nix +++ b/system/dev/dn-pre7780/virtualisation/default.nix @@ -2,5 +2,6 @@ imports = [ ../../../modules/virtualization.nix ../../../modules/wine.nix + ./kvm.nix ]; } diff --git a/system/dev/dn-pre7780/virtualisation/kvm.nix b/system/dev/dn-pre7780/virtualisation/kvm.nix new file mode 100644 index 0000000..bc603ce --- /dev/null +++ b/system/dev/dn-pre7780/virtualisation/kvm.nix @@ -0,0 +1,24 @@ +{ config, pkgs, ... }: +let + inherit (config.systemConf) username; +in +{ + programs.virt-manager.enable = true; + + users.groups.libvirtd.members = [ username ]; + + virtualisation = { + libvirtd = { + enable = true; + qemu.swtpm.enable = true; + qemu.vhostUserPackages = with pkgs; [ virtiofsd ]; + }; + spiceUSBRedirection.enable = true; + }; + + environment.systemPackages = with pkgs; [ + # dnsmasq + qemu + quickemu + ]; +} diff --git a/system/dev/dn-server/common/backup.nix b/system/dev/dn-server/common/backup.nix index 6809f1a..2696ba9 100644 --- a/system/dev/dn-server/common/backup.nix +++ b/system/dev/dn-server/common/backup.nix @@ -61,6 +61,12 @@ in "nextcloud" "vaultwarden" "paperless" + "keycloak" + "pdns" + "powerdnsadmin" + "roundcube" + "grafana" + "crowdsec" ]; location = "${backupPath}/postgresql"; }; diff --git a/system/dev/dn-server/default.nix b/system/dev/dn-server/default.nix index 62b1762..0d2940c 100644 --- a/system/dev/dn-server/default.nix +++ b/system/dev/dn-server/default.nix @@ -9,8 +9,6 @@ in { systemConf = { inherit hostname username; - domain = "net.dn"; - hyprland.enable = false; security = { allowedDomains = [ "github.com" @@ -25,6 +23,9 @@ in allowedIPs = [ "10.0.0.0/24" "127.0.0.1" + # CrowdSec + "52.51.161.146" + "34.250.8.127" ]; allowedIPv6 = [ "ff02::/16" @@ -45,7 +46,7 @@ in ''; imports = [ - ../public/dn/default.nix + ../public/dn ./common ./home ./network diff --git a/system/dev/dn-server/home/default.nix b/system/dev/dn-server/home/default.nix index 4f17989..379e8d3 100644 --- a/system/dev/dn-server/home/default.nix +++ b/system/dev/dn-server/home/default.nix @@ -1,34 +1,20 @@ { - inputs, config, - pkgs, ... }: let inherit (config.systemConf) username; in { - home-manager = { - users."${username}" = { - imports = [ - ../../../../home/user/config.nix - ../../../../home/user/direnv.nix - ../../../../home/user/environment.nix - ../../../../home/user/nvf - ../../../../home/user/shell.nix - ../../../../home/user/yazi.nix - { - home.packages = with pkgs; [ - inputs.ghostty.packages.${system}.default - ]; - } - - # Git - (import ../../../../home/user/git.nix { - inherit username; - email = "danny10132024@gmail.com"; - }) - ]; - }; + home-manager.users."${username}" = { + imports = [ + ../../../../home/user/config.nix + ../../../../home/user/direnv.nix + ../../../../home/user/environment.nix + ../../../../home/user/nvf + ../../../../home/user/shell.nix + ../../../../home/user/yazi.nix + ../../../../home/user/ghostty.nix + ]; }; } diff --git a/system/dev/dn-server/network/services.nix b/system/dev/dn-server/network/services.nix index a51d086..948f3af 100644 --- a/system/dev/dn-server/network/services.nix +++ b/system/dev/dn-server/network/services.nix @@ -159,6 +159,12 @@ let publicKey = "5th0G9c7vHrhcByvPJAbrn2LXjLPqDEMsHzda0FGUTQ="; allowedIPs = [ "10.0.0.148/32" ]; } + # DN Win + { + dns = "win"; + publicKey = "LuKw1w879a3kRaBK+faToVmb9uLhbj6tf/DstgMMJzQ="; + allowedIPs = [ "10.0.0.149/32" ]; + } ]; in { @@ -424,7 +430,8 @@ in # python '' import cachelib - + BIND_ADDRESS = "127.0.0.1" + PORT = 8081 SESSION_TYPE = 'cachelib' SESSION_CACHELIB = cachelib.simple.SimpleCache() SQLALCHEMY_DATABASE_URI = 'postgresql://powerdnsadmin@/powerdnsadmin?host=localhost' diff --git a/system/dev/dn-server/nix/default.nix b/system/dev/dn-server/nix/default.nix index d02a15c..22b279b 100644 --- a/system/dev/dn-server/nix/default.nix +++ b/system/dev/dn-server/nix/default.nix @@ -1,5 +1,5 @@ { imports = [ - ./atticd.nix + # ./atticd.nix ]; } diff --git a/system/dev/dn-server/security/default.nix b/system/dev/dn-server/security/default.nix index 0f85ea8..842a80d 100644 --- a/system/dev/dn-server/security/default.nix +++ b/system/dev/dn-server/security/default.nix @@ -1,6 +1,6 @@ { imports = [ ./fail2ban.nix - ./crowdsec.nix + # ./crowdsec.nix ]; } diff --git a/system/dev/dn-server/services/metrics.nix b/system/dev/dn-server/services/metrics.nix index 5a89e3f..3b019ee 100644 --- a/system/dev/dn-server/services/metrics.nix +++ b/system/dev/dn-server/services/metrics.nix @@ -7,7 +7,7 @@ }: let inherit (helper.grafana) mkDashboard; - inherit (lib) optionalAttrs; + inherit (lib) optionalAttrs optional; inherit (config.networking) hostName; datasourceTemplate = [ @@ -78,28 +78,33 @@ in } ]; }) - (optionalAttrs config.services.crowdsec.settings.general.prometheus.enabled { - job_name = "crowdsec"; - static_configs = [ - { - targets = [ - "localhost:${toString config.services.crowdsec.settings.general.prometheus.listen_port}" - ]; - labels = { - machine = "${hostName}"; - }; - } - ]; - relabel_configs = [ - { - source_labels = [ "__address__" ]; - target_label = "instance"; - regex = "(.*):[0-9]+"; - replacement = "CrowdSec - \${1}"; - } - ]; - }) - ]; + ] + ++ (optional + (config.services.crowdsec.enable && config.services.crowdsec.settings.general.prometheus.enabled) + [ + { + job_name = "crowdsec"; + static_configs = [ + { + targets = [ + "localhost:${toString config.services.crowdsec.settings.general.prometheus.listen_port}" + ]; + labels = { + machine = "${hostName}"; + }; + } + ]; + relabel_configs = [ + { + source_labels = [ "__address__" ]; + target_label = "instance"; + regex = "(.*):[0-9]+"; + replacement = "CrowdSec - \${1}"; + } + ]; + } + ] + ); }) (import ../../../modules/grafana.nix { diff --git a/system/dev/dn-server/sops/secret.yaml b/system/dev/dn-server/sops/secret.yaml index 0647ab7..195a3f8 100644 --- a/system/dev/dn-server/sops/secret.yaml +++ b/system/dev/dn-server/sops/secret.yaml @@ -11,15 +11,15 @@ ldap: env: ENC[AES256_GCM,data:XmIz9JEswvK1jVmTsTgdDZJXeK7j8E/b6nF+uuZpvpoe5/IogjMrzcWi3EB1i44z1Dxgoim8QM8ZtczY,iv:1jK/J2qfKODrbrNpSHl110jPvbNLl0zI//laowerJOc=,tag:tkBVxDC8Ebn3Aac+LATQFA==,type:str] oauth: password: ENC[AES256_GCM,data:lzS/OtqHb/24IJnOKxMBQA==,iv:BI1n7Jjklye6WM2ss7jpaGgokrJpAG2Ipil7VrY30XM=,tag:i3OByJ6LDwvAsS5CTrEQig==,type:str] - adminEnv: ENC[AES256_GCM,data:LECZ1/KtaEB7kUN6zNDUr08g2SVtGhWEvy2QA9jzU3vJ1U8NDnPXjfDkkH1bIw==,iv:pPz7J+DdF7zkqzFlevoeYQGZnA2PQDoRYcpOaOeHN3A=,tag:e0iVPSZQ1V3aWYtKpGnBGg==,type:str] + adminEnv: ENC[AES256_GCM,data:tF7ECUxG5QeNIvx3IFpTtY7NnSXROGHi48jGXZNgJVX5cABNIYBUqYW9/p2KbA==,iv:7oNmOBEs0b9mB6Ay7IULH2AumQOdIyQ+hDHm5kV6lTY=,tag:jkfA6D8CKg1jC21dS7Sumw==,type:str] powerdns-admin: secret: ENC[AES256_GCM,data:M5hD8B7kikseQJZCWUIlc7OJcQn0nwnx0QOSQe+Mf8TaztvyFfSfxv0vowNsx0MyGef4teuK+DW9/UTbRFEHeg==,iv:xaSgzhqMU9+ud1xfXLVkg3v2xcmIo35BOhml5VfHKBI=,tag:L1v95+HsIqNjVA1LGNbEJQ==,type:str] - salt: ENC[AES256_GCM,data:Vtn3/gJlElrFkPwoa05wlxVL/Sk4lNLghp1gi6o4V5A=,iv:/lRVfNOpERS963+9JNf8wATIY9FcicT8xQ9Cbw2by/s=,tag:x5WiNa56l7y3CKwbaamLLA==,type:str] + salt: ENC[AES256_GCM,data:rs4tZrVF4kb6/97wjQA2Npb2QeS6vjN3L1zRgmM=,iv:c0VTEtnahMSfs/PqeFQxYpDstLxPKaW1RyXMc6SQJu8=,tag:dXHUO2KJvP5Sz22Gv6ws/w==,type:str] powerdns: ENC[AES256_GCM,data:d4qzUAjyHUxLynvP6vSxCzrihfb/X3KYHeRA/w+CButld7ulxL9W6PerhvNcJytgfJDQINvcgnMKjijJ/vC7VeO9p7ZyArh4/PWZwgiJ,iv:orfh5F4uCYq2IplG0Y7Q/RcSqIm5Xyzn3ejzPsm+/0k=,tag:YqfvBlJRpkmMy29z3wyJ1g==,type:str] rspamd-trainer: ENC[AES256_GCM,data:EqWVADi7zr6AUZL5mlN1/xbpjuRIS3Zn,iv:M/xk7LywcRiKQM9LrnTnCKu3OS/YBf23CRkxh4ll1+c=,tag:4lH3hhMxWIzEUExJOt/41Q==,type:str] rspamd: ENC[AES256_GCM,data:qEXHXdcvk24pAHEl6MI=,iv:L5tmoTu5Qk5sxDj3EmWfc39AHwRTT4T4gB1O2EsTQkY=,tag:vIhAOnEpWxtP0eU4stkQww==,type:str] acme: - env: ENC[AES256_GCM,data:gHoAyc6+LK7jrTfrIlPJx+RNe90xTpVVykDEfor3+ifRDRCPfxLmfj1nWylRp7r3N/Ha8AlElvNPmn4mVMsM2OsXmZoYoO+YOVq1zShXHI3A2dHgzJGxaCu/zuf2AWefEsBDWhjbGxWUpjjcEh6mOgvuh0HHGdW0uq6EL5LqDZiPMGdYNdJLEuy6s9pdQt69mVWAwGVA9eTvbnG0W91/35SUeOSs+la+YRCSPQ==,iv:QebJyJ1+6dYQulVkDdkFx34KkiH9xzsX+C3TYDdIMkw=,tag:h7Oxt04PqkFDdb7ZuyVnlQ==,type:str] + env: ENC[AES256_GCM,data:DQaHr13K3faeyQk/05sVmmZRNvEbjmMP8y3nES1vyFO+oNX9nyyWcy5YEAO5tjRTxi/yM1ISlhbXWct4iRwAkvnhtoFRK/jpAfDv+W3J1LotaRxiPWSXUs5lS7uS0DpveRwQVv6qEl3Cs8vitHAJfRCKJoYv5HTJyvOnoWqHbnk=,iv:co3V0vu2c26NKHuoNoRv7td8qu6m0NTlvkr3EJBQGvM=,tag:leTY/DGg85Pm8gsAHah29Q==,type:str] postsrsd: secret: ENC[AES256_GCM,data:JZNwSymEjIFb8h3gnvFajxSaNYRxjA/NUruA4WX+uSqX0ufVcbVWgxQTr7U=,iv:ydGnCESCLbwyGKc+5witXDkT3OgW27LKen7PkqUL6mU=,tag:M3RGI6LgU5n2e6ZiXxTFfQ==,type:str] grafana: @@ -70,7 +70,7 @@ sops: OFloWEFuTC9GTXJsMG5NNktmdmIrY1kK0yN0ae0xNaydujV5lt2FiwXdyursG0DK 9i/B3TTAm9csDMMSTSFbiAUJDzG7kIqn++JU/cxvsGScSnhMqjEK/g== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-11-24T10:30:46Z" - mac: ENC[AES256_GCM,data:yBegCnXXKimHlZ5UcPL6O9VbhdpASMd09t7m2fxLFGYgHXYFsuRda8puVpe9EiukNRJzhkWZRjJUHI+nE2cdibx5Ewaom8lbe8pKB1A7qrVSXjU+f5HTMjUdB+ACAcGlErc0wniekwSQj2LfIYknYm2nVz2M5VeDbYxz7F5PAO0=,iv:vMdsGEe1ZPQdNtSXhtwC0StiuhBVViCuBGTURep37UM=,tag:mB2kZZcrGnmChQQRc4wvTA==,type:str] + lastmodified: "2025-12-29T05:31:41Z" + mac: ENC[AES256_GCM,data:7vRB92qX6NPYafjpTY0wS23bq5Jn57xkWamJZ2ZgD4/2rW+qRilmO6sqaZEktWr7q2jQzgSvdgZsgbuhkxoqQXrTVP7osjr8qQ20jL9OXLxSgPQry2QqNBqlSdjEUov/bygJA0oI46K8pdk6OrT07Few/nXMrvUixFAGGUsKmJc=,iv:Gd5X70COnDL4Ntps/bedF92uUH6hCosDj2dsbF0KQHw=,tag:O3vq/kFnay5le7F1Q2heJQ==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 diff --git a/system/dev/public/dn/common.nix b/system/dev/public/dn/common.nix new file mode 100644 index 0000000..7b51aa2 --- /dev/null +++ b/system/dev/public/dn/common.nix @@ -0,0 +1,72 @@ +{ config, ... }: +let + inherit (config.systemConf) username; +in +{ + systemConf = { + face = ../../../../home/config/.face; + domain = "net.dn"; + }; + + home-manager.users."${username}" = + { ... }: + { + imports = [ + # Git + (import ../../../../home/user/git.nix { + inherit username; + email = "Danny01161013@gmail.com"; + }) + ]; + + # ==== Niri ==== # + programs.niri.settings = { + input.keyboard.xkb = { + layout = "us"; + options = "caps:escape"; + }; + workspaces."game" = { }; + window-rules = [ + # Steam Game Fullscreen + { + matches = [ + { + app-id = "^steam_app_(.*)$"; + is-floating = false; + } + ]; + open-fullscreen = true; + } + # Steam & Steam Game + { + matches = [ + { app-id = "^steam_app_*"; } + { app-id = "^pioneergame.exe$"; } + { + app-id = "^steam$"; + title = "^Steam$"; + } + ]; + open-on-workspace = "game"; + } + # Steam Dialog float + { + matches = [ + { app-id = "^steam$"; } + { title = "(.*)(EasyAntiCheat_EOS_Setup)(.*)"; } + { + app-id = "^pioneergame.exe$"; + title = "^$"; + } + ]; + excludes = [ + { + title = "^Steam$"; + } + ]; + open-floating = true; + } + ]; + }; + }; +} diff --git a/system/dev/public/dn/default.nix b/system/dev/public/dn/default.nix index 4fdd9fd..d64a720 100644 --- a/system/dev/public/dn/default.nix +++ b/system/dev/public/dn/default.nix @@ -1,5 +1,6 @@ { imports = [ ./yubikey.nix + ./common.nix ]; } diff --git a/system/dev/public/sops/dn-secret.yaml b/system/dev/public/sops/dn-secret.yaml index 419478a..540713f 100644 --- a/system/dev/public/sops/dn-secret.yaml +++ b/system/dev/public/sops/dn-secret.yaml @@ -1,5 +1,5 @@ ntfy: ENC[AES256_GCM,data:7m7hwmDWu6qP/mX7QujXPiDAmRC542CKyWzFaOL5sHza,iv:nn1F44LSFmrV2USRDD0z8CNfUhi40LZnvoU3j0nklcU=,tag:WhqQpThDaG10kNTk1tZxOQ==,type:str] -u2f_keys: ENC[AES256_GCM,data:boiKENOBo4hBWx9d+KVweCQrmFasDVUejuWrw60oPybPEW0pqTWz5GhQjfG6J0PWNFr/ObABT5eofKiSoy/pZ9uBQQGFO1nAA41axhI1Y9nuyBkkrNPYRnZsojdOcahNGMz1hplXTMzSdKgwutzA4/dsGG1ki/EOiuYRUgzQ/IzjEfqWGeBDlHoq9ohhTFFpsdNgZqgu23m3+Z0hcpquJdY3bhBi0L1nU3B88wJ7MiLyp2mVM3GA7i8jeIUmwqJCEuA3OkG3r3oUHO/l61N+0qtss8bmghf6bsJYtvkhCjXOiEE9R8dpCzjwXEhgAGcYiqiPWzLCl3WyYaytNlVJF/MHC+R0S1ruBV0RLrzCnvxaav8iqa4l3y2ErRB0qUgvO386suGNh2cEYTEEKF4GcQM6mzXbLzUqK4H+nGBC3SdArdphTIgWXP7C+romXzwgGVBLWW/4atRkj0ZF,iv:Rxke3HDAvcLv9sks5jDhNsfxXwSD4TgfGoN7v9HDntk=,tag:IkCsaFVPdgobd9+EX3CwIw==,type:str] +u2f_keys: ENC[AES256_GCM,data:0EofFtgar18YzbzXiT6NdC9nwMTQoYkeU8snRTwhUX2Hz+k4B46839xZet4Df5a8xpaB2CuoPvRkEMSxknBWGKkK+gZr2m+zogbpMTGQVTYqmqlnunywrhe9u9FQ5D1hwU4PYcOgDqox5dw4QMg/AUontu5BYTG3WKCCTDVIL+i6PejwXKcfoKHd9G1K2QHV33S40EM4/jjijgxW+NoO6vkEWIwxih/DxQ4YZYTHHBZXhKRD7Hwhikd6G3Vs3/xD/UOVVJKtkyn1wKNQf+O30Q2LNOhDQ8/weNfN9IAMpVtRqvEtFXA2rfp9zI7TY1iuSN9nN9hYuZJeCktvK1WiRvspU5wYn2jDtM83zCA8Udnq1XJbsGEv2aA3SYyxoldtkjFcjlupGa1lJiaANxhmpOfJp0IIkeXqnIkLE/FzRFiced58H1UV6InlH5S/Lz42854ec/jDlgvzCnDoWIsgfgQf+KmwRHznzeepPW7S3tyB/jbJETEfCJfZ3E6YmeAMWd85drTKsySjBGiM7mueb4thGstfgnAEO/Y3PuVc/qGS1j95lUc0w0zbr3VzwibxCsS02PgMIUE5gZPEllknbhh6QiqbS2AtTAb9pIwrpYfEmcZU2blofQ8WzkLEjqNnRGaDXzgIEw4OirM0tSaFGmT9Vy1XN4yvSVssjsW/wXg19U4S/6FS+zOvyg+lIkT3NOfu5dKQecz8cH0czEN5MoVj3fm5LBhFmDOawP5AAA8dLafMEepxbBIGr/9nzDP17trMfzFf78hymHTgQk/qFb6oWl9Ai1dFZRwHO7HcXpBveTpPMCaeNOjcvRrvKsm2HSzsWPCVsfX6nrmNjqyFJXpPuuNaPezclL/ApPdEXpi9Q+aVHAgjllBLAH/R8UJu71cJAo+x7TCWykG31xLO0xodtJ5Lwk3O1lMnznnQXT/fCVaFYV24OT/nS7hQOtDvlJOCfmSpZTmZxX31xF4Gt0Auok+0uPJzDfbFQH9WwifXn6F8ixdsLK/VJMEk8EZbHpkNSV6hzWJkiOeJCDl7SBKEcQ+FizYSfZuOcVEt83ScJuVa7IScVLdatnTTTpR4c5GASYLr3lahqYwhuZGcQEUIwjDXu8Oymo0Sbvnmev60wY5Q3BEMSX1iwt3QWdCe5Kzq2vEUQHP9s6lg7DgOeIA2xQRK5siqwOhw9i1qaHbPG+1yTFOx7gRu0+yBy2Qzkwsc9naD8Ce0hpwQmu4Nvpd5TjMnS51ljDMWBok5evdOtGeWL9mDz6VdxtuHbcBShmEOk+lfKKjpDeK5319veBX5ugCm8WXeDmIIhG12gI07xRVzPaeYEhnRG2pHy/+JdjlyGeh0oHCJOYPhxtwVbqXwmH83BGn3H05bdIWEjXs=,iv:pAdO+Uja/Zyf5uLMa9zbKvEMoOOjQgkqHYnEH+Bxd5k=,tag:mYngzcv0bGwVJBHOR6D4uw==,type:str] sops: age: - recipient: age1uvsvf5ljaezh5wze32p685kfentyle0l2mvysc67yvgct2h4850qqph9lv @@ -29,7 +29,7 @@ sops: QWV3VjRjNC9RaXNwbDdLWmVQNS94UzAKeLZSqcXRwkVoUUKd4PuRusbJwFlubdJy kcxGMzvfT0BMYDp61vV+F5Vh4TkgddCzp6Lphbb/6orkWWpjmE9I4g== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-11-21T12:34:46Z" - mac: ENC[AES256_GCM,data:jec/S+h3feoez+1OaWkZHAlSNhsLv8R4yXPIFjVUaYionJKMUAAizLtVsmpVHNRn8OCBhb7zi+Yk4GClZQqg/I8iTY3tzDTIJJsHoj+KsxuQohRASDikaYLTfdad44vin8ayxSKjSScK3JpwX5B12Rffx8DCPqUtXY0TGa0ULoQ=,iv:R1YiVCx3WDZO4b2d9TbdTnWmVmG4MQye4TUWWdIa4Yk=,tag:ACZoECWIqDRITghc8KwUsA==,type:str] + lastmodified: "2025-12-09T08:03:16Z" + mac: ENC[AES256_GCM,data:6njhvipu8iUze0mmgFIWT6Neqy2xvNPB/4fW7OObHknXAh3VGAveBnigxAJmULua6HdQx4hZ2UkUrVBG8oStjCihFYJA0eBA9j9mM3rF7Piq2U98oGtw4A9Qj2PVC7Y8pOOuX25VRmDn78cw1PpwSEZL3zZ+8cqS5btHywJackY=,iv:AeRcrhhxl5v5YLNWUPx9qvGcMKHFQD/m87PJAGWa9iE=,tag:TN1KCUNa7lVWgxQ16WRijg==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 diff --git a/system/dev/skydrive-lap/default.nix b/system/dev/skydrive-lap/default.nix index 5c91475..1581b1c 100644 --- a/system/dev/skydrive-lap/default.nix +++ b/system/dev/skydrive-lap/default.nix @@ -1,7 +1,5 @@ { hostname }: { - config, - lib, pkgs, ... }: @@ -12,20 +10,11 @@ in systemConf = { inherit hostname username; domain = "net.dn"; - hyprland = { - enable = true; - monitors = [ - { - desc = "AU Optronics 0x82ED"; - props = "prefered, 0x0, 1"; - output = "eDP-1"; - } - { - desc = "AOC 24B30HM2 27ZQ4HA00101"; - props = "prefered, 1920x540, 1"; - output = "HDMI-A-2"; - } - ]; + hyprland.enable = true; + face = pkgs.fetchurl { + url = "https://files.net.dn/skydrive.jpg"; + hash = "sha256-aMjl6VL1Zy+r3ElfFyhFOlJKWn42JOnAFfBXF+GPB/Q="; + curlOpts = "-k"; }; }; diff --git a/system/dev/skydrive-lap/home/default.nix b/system/dev/skydrive-lap/home/default.nix index 712252e..b30997c 100644 --- a/system/dev/skydrive-lap/home/default.nix +++ b/system/dev/skydrive-lap/home/default.nix @@ -5,96 +5,96 @@ ... }: let + inherit (config.networking) hostName; inherit (config.systemConf) username; - inherit (lib) mkForce optionalString; + inherit (lib) optionalString; memeSelector = pkgs.callPackage ../../../../home/scripts/memeSelector.nix { url = "https://nextcloud.net.dn/public.php/dav/files/pygHoPB5LxDZbeY/"; }; - - faceIcon = pkgs.fetchurl { - url = "https://files.net.dn/skydrive.jpg"; - hash = "sha256-aMjl6VL1Zy+r3ElfFyhFOlJKWn42JOnAFfBXF+GPB/Q="; - curlOpts = "-k"; - }; in { - environment.systemPackages = map lib.lowPrio [ pkgs.curl pkgs.gitMinimal memeSelector ]; - home-manager = { - users."${username}" = { - imports = [ - ../../../../home/presets/basic.nix + home-manager.users."${username}" = { + services.kanshi.settings = [ + { + profile.name = hostName; + profile.outputs = [ + { + criteria = "AU Optronics 0x82ED"; + } + { + criteria = "AOC 24B30HM2 27ZQ4HA00101"; + position = "1920,540"; + } + ]; + } + ]; - { - home.file.".face" = { - source = mkForce faceIcon; - }; - } + programs.hyprlock.monitors = [ + "desc:AU Optronics" + "desc:AOC 24B30HM2" + ]; - { - wayland.windowManager.hyprland = { - settings = { - input = { - kb_options = lib.mkForce [ ]; - }; - - bind = [ - "$mainMod ctrl, M, exec, ${memeSelector}/bin/memeSelector" - ]; - }; - }; - } - - (import ../../../../home/user/waybar.nix { - settings = [ - # monitor 1 - { - output = "eDP-1"; - modules-left = [ - "custom/os" - "hyprland/workspaces" - "clock" - "custom/cava" - "mpris" - ]; - modules-right = [ - "wlr/taskbar" - (optionalString config.programs.gamemode.enable "custom/gamemode") - "custom/airplay" - "custom/wallRand" - "custom/wireguard" - "custom/recording" - "idle_inhibitor" - "network" - "cpu" - "memory" - "pulseaudio" - "custom/swaync" - ]; - } - { - output = "HDMI-A-2"; - modules-left = [ - "clock" - "mpris" - ]; - modules-right = [ - "wlr/taskbar" - "temperature" - "cpu" - "memory" - "pulseaudio" - ]; - } - ]; - }) - ]; + wayland.windowManager.hyprland = { + settings = { + input.kb_options = lib.mkForce [ ]; + bind = [ + "$mainMod ctrl, M, exec, ${memeSelector}/bin/memeSelector" + ]; + }; }; + imports = [ + ../../../../home/presets/basic.nix + + (import ../../../../home/user/waybar.nix { + settings = [ + # monitor 1 + { + output = "eDP-1"; + modules-left = [ + "custom/os" + "hyprland/workspaces" + "clock" + "custom/cava" + "mpris" + ]; + modules-right = [ + "wlr/taskbar" + (optionalString config.programs.gamemode.enable "custom/gamemode") + "custom/airplay" + "custom/wallRand" + "custom/wireguard" + "custom/recording" + "idle_inhibitor" + "network" + "cpu" + "memory" + "pulseaudio" + "custom/swaync" + ]; + } + { + output = "HDMI-A-2"; + modules-left = [ + "clock" + "mpris" + ]; + modules-right = [ + "wlr/taskbar" + "temperature" + "cpu" + "memory" + "pulseaudio" + ]; + } + ]; + }) + ]; }; } diff --git a/system/dev/skydrive-lap/sops/secret.yaml b/system/dev/skydrive-lap/sops/secret.yaml index abc3efd..2d91825 100644 --- a/system/dev/skydrive-lap/sops/secret.yaml +++ b/system/dev/skydrive-lap/sops/secret.yaml @@ -1,5 +1,5 @@ wireguard: - wg0.conf: ENC[AES256_GCM,data:6+FDJQiL+h0lOk74oBmE4yhav9fYMHxetTGkl8B9guqt1qe0l+K2xPzO4QETVCQl/AVs7Y8lnM1ucGCP6JScaiQONq0+cl5Am4+HJr6VhxEooPkt33qYtm6yzPqj/skyAMTsBE8NSmQ0W0nC6JSfl4IWiyksEkybotfClnFA7M5HCVm7pJ+/OXXM/UdiHHD2SanEfU1klA1pQrbxTOUHV/OUpt+d/upP21SGKBgvvm7P67qDeI+3bj9b+Og+Oz2P9YF1K1lcsC+xcdT50NOQ83p9UpUMYMaUGoPh6DcCVrDD2yr5CG01CbnP0SYqiY3vY5YfRDCEIeHFEk3clog3,iv:xQLcrm7Bj2Yoij8PkLIaWH7n81lF2IUGvhKmG3PGCAQ=,tag:YGCasXRmkv8QRgMGgfteiA==,type:str] + wg0.conf: ENC[AES256_GCM,data:AAxGzCQIk+fq97R48lmeNwjx6z5MGc01F+vAg8MAyFSoc2x7txXT2d6CVD8/IHH/OWqHqEXRZq/T6Gd7WakSW0QxnV/+TJiezBfQwEXjHn7JZWeL9FAQ/ki+81ORkEyxi+Qy7vSVYaZ/LwzsHk9SdPDyDcTOHKzvL83p9RifgEqQEm4a6Bcvf3s7g1VtH3eDOTC2biHY3LCck08OsagMdrndRK2FjWdsPo+MuimqvIQb+eUhJ63p7/XrVcudypJWVhWU4EmY00VBN+stURJMFAuvUcEhwhmJBBRufiadzfjqXQtCCS04MXgpQyv1eufo89d1LzvQiseTQCejlsyF4Q==,iv:A1iJ1C7oCQqRhaDZxEPr8N9cyViTMZRttwLZ4PWhqiU=,tag:A6Or7u2A3HgDcv6e3SXpEg==,type:str] sops: age: - recipient: age1ar5h06qv72pduau043r04kschwcq0x0lm33wqvxzdh9grmp3cq3sy0ngnz @@ -20,7 +20,7 @@ sops: SFlTZ1BoanoyRTB2ZkJWSHRpcnZwZDQKZ+KF6Jh3zRPr+bDmpeVqdo0qW7vnyFtv V5K8QYFEq9ZEz2u2DEZtyzBYBtTvF3TZz+DL63NHGH7vUVU4cpzxYg== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-01T05:33:09Z" - mac: ENC[AES256_GCM,data:DJzfOk3BSHFdhVbW1WUOfHVw0qt1VlLKAkavtwcerd4Mb6HmY3IE9XSAapmcgDjeAdonDlOOTZCArcymkjT8q1lvqkhNsCbR2BYyZTzOcbI52pqoKGfaYE9kUtg2i1bNnQAuNF6oTqJEoJv3zVUUP0NgdUMtOa9QJio+mJyJ3F0=,iv:KaBis+WF8AuQV7wThQ3OrhFZUl+CF4OZ8D5otSIJRrg=,tag:EjjGdYisgWztKK8yfdXBcg==,type:str] + lastmodified: "2025-12-19T12:40:34Z" + mac: ENC[AES256_GCM,data:pm8Fx9jFzk4ybdUEzA5IKA6iZdEswq6w1eNGWT9bir/YVK5rQz2x6ZLbmj3gY6C2QiEgWZGzA9XtHajDWNi+8tpefBfEwEuVztqjXTFM+toKTQcGKIJ5F3uOboE3zsbd9qe2n6zpECzUAeQulwlq2qQqPVSBGOZFUhI9hT23oVY=,iv:hi1sqP6PHz2J6f7lnMnhJd5Sk82aDIeyHqF9R81ofFw=,tag:0SLvYRjbAQ4iIoPNcyqfsg==,type:str] unencrypted_suffix: _unencrypted - version: 3.10.2 + version: 3.11.0 diff --git a/system/modules/actual/default.nix b/system/modules/actual/default.nix index d9098e2..5a34bf2 100644 --- a/system/modules/actual/default.nix +++ b/system/modules/actual/default.nix @@ -3,14 +3,11 @@ proxy ? true, }: { - pkgs, config, lib, - inputs, ... }: let - inherit (pkgs.stdenv.hostPlatform) system; inherit (builtins) toString; inherit (lib) mkIf; @@ -20,7 +17,6 @@ in services = { actual = { enable = true; - package = inputs.actual-budget-server.packages.${system}.default; settings = { port = 31000; hostname = "127.0.0.1"; diff --git a/system/modules/bluetooth.nix b/system/modules/bluetooth.nix index a1527ca..954fd66 100644 --- a/system/modules/bluetooth.nix +++ b/system/modules/bluetooth.nix @@ -1,19 +1,15 @@ { - services = { - blueman.enable = true; - }; + services.blueman.enable = true; - hardware = { - bluetooth = { - enable = true; - powerOnBoot = true; - settings.General = { - experimental = true; - Privacy = "device"; - JustWorksRepairing = "always"; - Class = "0x000100"; - FastConnectable = true; - }; + hardware.bluetooth = { + enable = true; + powerOnBoot = true; + settings.General = { + experimental = true; + Privacy = "device"; + JustWorksRepairing = "always"; + Class = "0x000100"; + FastConnectable = true; }; }; diff --git a/system/modules/gaming.nix b/system/modules/gaming.nix index 77bcc63..d7e6edf 100644 --- a/system/modules/gaming.nix +++ b/system/modules/gaming.nix @@ -27,9 +27,27 @@ in protontricks.enable = true; gamescopeSession.enable = true; extest.enable = true; - extraCompatPackages = with pkgs; [ - proton-ge-bin - ]; + extraCompatPackages = + with pkgs; + let + proton-ge-10-25 = + (proton-ge-bin.overrideAttrs ( + _: finalAttrs: { + pname = "proton-ge-bin"; + version = "GE-Proton10-25"; + + src = fetchzip { + url = "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/${finalAttrs.version}/${finalAttrs.version}.tar.gz"; + hash = "sha256-RKko4QMxtnuC1SAHTSEQGBzVyl3ywnirFSYJ1WKSY0k="; + }; + } + )).override + { steamDisplayName = "GE-Proton10-25"; }; + in + [ + proton-ge-bin + proton-ge-10-25 + ]; remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; localNetworkGameTransfers.openFirewall = true; diff --git a/system/modules/gc.nix b/system/modules/gc.nix index eb5b5fb..f90d332 100644 --- a/system/modules/gc.nix +++ b/system/modules/gc.nix @@ -11,7 +11,7 @@ optimise.automatic = true; gc = { automatic = true; - dates = "weekly"; + dates = [ "03:15" ]; options = "--delete-older-than 7d"; }; }; diff --git a/system/modules/hardware.nix b/system/modules/hardware.nix index f192f09..ffe4088 100644 --- a/system/modules/hardware.nix +++ b/system/modules/hardware.nix @@ -1,20 +1,29 @@ { pkgs, inputs, + config, ... }: let inherit (pkgs.stdenv.hostPlatform) system; - pkgs-hyprland = inputs.hyprland.inputs.nixpkgs.legacyPackages.${system}; + wm = + if config.programs.hyprland.enable then + "hyprland" + else if config.programs.niri.enable then + "niri" + else + null; + + pkgs-wm = if wm != null then inputs.${wm}.inputs.nixpkgs.legacyPackages.${system} else pkgs; in { hardware = { graphics = { enable = true; enable32Bit = true; - package32 = pkgs-hyprland.pkgsi686Linux.mesa; - package = pkgs-hyprland.mesa; + package32 = pkgs-wm.pkgsi686Linux.mesa; + package = pkgs-wm.mesa; extraPackages = with pkgs; [ intel-media-driver # LIBVA_DRIVER_NAME=iHD libva-vdpau-driver diff --git a/system/modules/hyprland.nix b/system/modules/hyprland.nix index 018fac1..b69cb31 100644 --- a/system/modules/hyprland.nix +++ b/system/modules/hyprland.nix @@ -7,6 +7,7 @@ }: let inherit (lib) mkIf; + inherit (config.systemConf) username; hyprlandEnabled = config.programs.hyprland.enable; in @@ -18,14 +19,6 @@ in portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland; }; - xdg.portal = mkIf hyprlandEnabled { - enable = true; - xdgOpenUsePortal = true; - extraPortals = [ - pkgs.xdg-desktop-portal-gtk - ]; - }; - environment.sessionVariables = mkIf hyprlandEnabled { NIXOS_OZONE_WL = "1"; WLR_NO_HARDWARE_CURSORS = "1"; @@ -39,15 +32,6 @@ in hyprpicker hyprshot kitty - - # qt5.qtwayland - # qt6.qtwayland - wlogout - wl-clipboard - - # Util - grim - slurp ] ); @@ -59,4 +43,8 @@ in ]; }; }; + + home-manager.users."${username}" = mkIf hyprlandEnabled { + imports = [ ../../home/user/hyprland.nix ]; + }; } diff --git a/system/modules/internationalisation.nix b/system/modules/internationalisation.nix index 550f6da..ea1cf94 100644 --- a/system/modules/internationalisation.nix +++ b/system/modules/internationalisation.nix @@ -13,8 +13,8 @@ LC_TELEPHONE = "en_US.UTF-8"; LC_TIME = "en_US.UTF-8"; }; - - supportedLocales = [ "en_US.UTF-8/UTF-8" ]; + supportedLocales = [ + "en_US.UTF-8/UTF-8" + ]; }; - } diff --git a/system/modules/nextcloud.nix b/system/modules/nextcloud.nix index 6efc5a4..33041ae 100644 --- a/system/modules/nextcloud.nix +++ b/system/modules/nextcloud.nix @@ -47,7 +47,7 @@ in ]; }; - systemd.services."phpfpm-nextcloud".postStart = '' + systemd.services."phpfpm-nextcloud".postStart = mkIf config.services.nextcloud.enable '' ${config.services.nextcloud.occ}/bin/nextcloud-occ config:app:set recognize node_binary --value '${lib.getExe pkgs.nodejs_22}' ${config.services.nextcloud.occ}/bin/nextcloud-occ config:app:set recognize tensorflow.purejs --value 'true' ''; @@ -112,7 +112,7 @@ in }; }; - services.nextcloud-whiteboard-server = { + services.nextcloud-whiteboard-server = mkIf config.services.nextcloud.enable { enable = true; settings = { NEXTCLOUD_URL = "http${optionalString https "s"}://${hostname}"; diff --git a/system/modules/niri.nix b/system/modules/niri.nix new file mode 100644 index 0000000..657ed78 --- /dev/null +++ b/system/modules/niri.nix @@ -0,0 +1,313 @@ +{ + config, + pkgs, + lib, + ... +}: +let + inherit (lib) + getExe + pipe + map + listToAttrs + genList + ; + inherit (builtins) fetchurl; + inherit (config.systemConf) username; + + # nvidia-offload-enabled = config.hardware.nvidia.prime.offload.enableOffloadCmd; + prefix = "nvidia-offload"; + terminal = "ghostty"; + browser = "zen-twilight"; + + brightnessStep = builtins.toString 10; + volumeStep = builtins.toString 4; + + execOnceScript = pkgs.writeShellScript "startupExec" '' + # Fix nemo open in terminal + dconf write /org/cinnamon/desktop/applications/terminal/exec "''\'${terminal}''\'" & + dconf write /org/cinnamon/desktop/applications/terminal/exec-arg "''\'''\'" & + + # Hint dark theme + dconf write /org/gnome/desktop/interface/color-scheme '"prefer-dark"' & + + systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME & + ''; + + niri_peekaboo = fetchurl { + url = "https://raw.githubusercontent.com/heyoeyo/niri_tweaks/refs/heads/main/niri_peekaboo.py"; + sha256 = "sha256:0l1x0bsa9vr089jhzgcz3xbh1hg15sw6njb91q0j9pdbrp2ym3dc"; + }; +in +{ + programs.niri = { + enable = true; + package = pkgs.niri-unstable; + }; + + home-manager.users."${username}" = + { + osConfig, + config, + ... + }: + let + rofiWall = import ../../home/scripts/rofiwall.nix { inherit config pkgs; }; + rbwSelector = import ../../home/scripts/rbwSelector.nix { inherit pkgs; }; + rNiri = pkgs.writeShellScriptBin "rNiri" '' + NIRI_SOCKET="/run/user/1000/$(ls /run/user/1000 | grep niri | head -n 1)" niri $@ + ''; + toggleWlogout = pkgs.writeShellScript "toggleWlogout" '' + if ${pkgs.busybox}/bin/pgrep wlogout > /dev/null; then + ${pkgs.busybox}/bin/pkill wlogout + else + ${config.programs.wlogout.package}/bin/wlogout --protocol layer-shell + fi + ''; + in + with config.lib.niri.actions; + { + home.packages = with pkgs; [ + nautilus # xdg-desktop-portal-gnome file picker + rNiri + ]; + + xdg.portal = { + extraPortals = with pkgs; [ xdg-desktop-portal-gtk ]; + }; + + services.nfsm.enable = false; + + programs.niri.package = osConfig.programs.niri.package; + programs.niri.settings = { + spawn-at-startup = [ + { argv = [ "${execOnceScript}" ]; } + ]; + screenshot-path = "~/Pictures/Screenshots/%Y-%m-%d_%H-%M-%S.png"; + + prefer-no-csd = true; + + xwayland-satellite = { + enable = true; + path = getExe pkgs.xwayland-satellite-unstable; + }; + + animations = { + workspace-switch.kind.spring = { + damping-ratio = 1.0; + stiffness = 1000; + epsilon = 0.0001; + }; + + window-open.kind.easing = { + duration-ms = 150; + curve = "ease-out-expo"; + }; + + window-close.kind.easing = { + duration-ms = 150; + curve = "ease-out-quad"; + }; + + window-resize.kind.spring = { + damping-ratio = 1.0; + stiffness = 800; + epsilon = 0.0001; + }; + }; + + layout.border = { + enable = true; + width = 4; + active.gradient = { + from = "#24273A"; + to = "#EBDBB2"; + angle = 45; + in' = "oklab"; + relative-to = "window"; + }; + inactive.gradient = { + from = "#24273A"; + to = "#24273A"; + angle = 45; + in' = "oklab"; + relative-to = "window"; + }; + }; + + window-rules = [ + # Global + { + geometry-corner-radius = + let + round = 12.0; + in + { + bottom-left = round; + bottom-right = round; + top-left = round; + top-right = round; + }; + clip-to-geometry = true; + opacity = 1.0; + draw-border-with-background = false; + } + # Float + { + matches = [ + { app-id = "^xdg-desktop-portal-gtk$"; } + { app-id = "^(org.gnome.Nautilus)$"; } + ]; + open-floating = true; + } + ]; + + input = { + focus-follows-mouse.enable = true; + mouse.accel-speed = -0.1; + keyboard = { + repeat-delay = 250; + repeat-rate = 35; + }; + }; + + binds = + let + sh = spawn "sh" "-c"; + in + { + # ==== Launch ==== # + "Mod+Return".action = sh ''${prefix} ${terminal}''; + "Mod+F".action = sh ''${browser}''; + "Mod+E".action = sh ''${prefix} ${terminal} -e yazi''; + "Mod+Ctrl+P".action = spawn "${rbwSelector}"; + "Mod+Ctrl+M".action = spawn "${toggleWlogout}"; + + # Rofi + "Mod+Ctrl+W".action = spawn "${rofiWall}"; + "Alt+Space".action = spawn "rofi" "-config" "~/.config/rofi/apps.rasi" "-show" "drun"; + "Mod+Period".action = spawn "rofi" "-modi" "emoji" "-show" "emoji"; + "Mod+Ctrl+C".action = spawn "rofi" "-modi" "calc" "-show" "calc" "-no-show-match" "-no-sort"; + + # ==== Media ==== # + "XF86AudioPrev".action = spawn "playerctl" "previous"; + "XF86AudioNext".action = spawn "playerctl" "next"; + "Mod+Ctrl+Comma".action = spawn "playerctl" "previous"; + "Mod+Ctrl+Period".action = spawn "playerctl" "next"; + "XF86AudioPlay".action = spawn "playerctl" "play-pause"; + "XF86AudioStop".action = spawn "playerctl" "stop"; + "XF86AudioMute".action = spawn "wpctl" "set-mute" "@DEFAULT_SINK@" "toggle"; + "XF86AudioRaiseVolume".action = + sh ''wpctl set-mute @DEFAULT_SINK@ 0 && wpctl set-volume @DEFAULT_SINK@ ${volumeStep}%+''; + "XF86AudioLowerVolume".action = + sh ''wpctl set-mute @DEFAULT_SINK@ 0 && wpctl set-volume @DEFAULT_SINK@ ${volumeStep}%-''; + "XF86MonBrightnessDown".action = spawn "brightnessctl set ${brightnessStep}%-"; + "XF86MonBrightnessUp".action = spawn "brightnessctl set ${brightnessStep}%+"; + + # ==== Movement ==== # + # Mouse Scroll + "Mod+WheelScrollDown" = { + cooldown-ms = 150; + action = focus-workspace-down; + }; + "Mod+WheelScrollUp" = { + cooldown-ms = 150; + action = focus-workspace-up; + }; + "Mod+Shift+WheelScrollDown" = { + cooldown-ms = 150; + action = focus-column-or-monitor-right; + }; + "Mod+Shift+WheelScrollUp" = { + cooldown-ms = 150; + action = focus-column-or-monitor-left; + }; + "Mod+WheelScrollRight".action = focus-column-right; + "Mod+WheelScrollLeft".action = focus-column-left; + + # Touchpad + "TouchpadScrollDown" = { + cooldown-ms = 150; + action = focus-window-or-workspace-down; + }; + "TouchpadScrollUp" = { + cooldown-ms = 150; + action = focus-window-or-workspace-up; + }; + + # Monitor Focus + "Mod+Ctrl+H".action = focus-monitor-left; + "Mod+Ctrl+L".action = focus-monitor-right; + + # Workspace Focus + "Mod+Ctrl+J".action = focus-workspace-down; + "Mod+Ctrl+K".action = focus-workspace-up; + + # General Focus + "Mod+J".action = focus-window-or-workspace-down; + "Mod+K".action = focus-window-or-workspace-up; + "Mod+H".action = focus-column-or-monitor-left; + "Mod+L".action = focus-column-or-monitor-right; + + # Workspace Move + "Mod+Ctrl+Shift+J".action = move-workspace-down; + "Mod+Ctrl+Shift+K".action = move-workspace-up; + + # Window & Column Move + "Mod+Shift+J".action = move-window-down-or-to-workspace-down; + "Mod+Shift+K".action = move-window-up-or-to-workspace-up; + "Mod+Shift+L".action = move-column-right-or-to-monitor-right; + "Mod+Shift+H".action = move-column-left-or-to-monitor-left; + + # Window Comsume + "Mod+Ctrl+Shift+L".action = consume-or-expel-window-right; + "Mod+Ctrl+Shift+H".action = consume-or-expel-window-left; + + # ==== Action ==== # + # General + "Mod+C".action = center-window; + "Mod+O".action = toggle-overview; + "Mod+Q".action = close-window; + "F11".action = if config.services.nfsm.enable then (spawn "nfsm-cli") else fullscreen-window; + "Mod+Shift+slash".action = show-hotkey-overlay; + "Mod+Ctrl+Shift+P".action = spawn "${getExe pkgs.python312}" "${niri_peekaboo}"; + + # Column Scale + "Mod+W".action = switch-preset-column-width; + "Mod+S".action = switch-preset-window-height; + "Mod+P".action = expand-column-to-available-width; + "Mod+M".action = maximize-column; + "Mod+Ctrl+S".action = reset-window-height; + + # Float + "Mod+V".action = toggle-window-floating; + "Mod+Ctrl+V".action = switch-focus-between-floating-and-tiling; + + # Screenshot + "Mod+Shift+S".action.screenshot = [ { show-pointer = false; } ]; + "Ctrl+Shift+S".action.screenshot-window = [ + { + write-to-disk = false; + } + ]; + "Mod+Ctrl+Shift+S".action.screenshot-screen = [ + { + write-to-disk = false; + } + ]; + } + # Map Mod+{1 ~ 9} to workspace{1 ~ 9} + // (pipe 9 [ + (x: genList (i: i + 1) x) + ( + x: + map (i: { + name = "Mod+${toString i}"; + value.action = focus-workspace i; + }) x + ) + (x: listToAttrs x) + ]); + }; + }; +} diff --git a/system/modules/nixsettings.nix b/system/modules/nixsettings.nix index ea2b672..2849e21 100644 --- a/system/modules/nixsettings.nix +++ b/system/modules/nixsettings.nix @@ -5,11 +5,11 @@ settings = { substituters = [ "https://yazi.cachix.org" - "https://cache.net.dn/dn-main" + # "https://cache.net.dn/dn-main" ]; trusted-public-keys = [ "yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k=" - "dn-main:ZjQmZEOWpe0TjZgHGwkgtPdOUXpN82RL9wy30EW1V7k=" + # "dn-main:ZjQmZEOWpe0TjZgHGwkgtPdOUXpN82RL9wy30EW1V7k=" ]; warn-dirty = false; trusted-users = [ diff --git a/system/modules/presets/basic.nix b/system/modules/presets/basic.nix index 1241b59..e62cb63 100644 --- a/system/modules/presets/basic.nix +++ b/system/modules/presets/basic.nix @@ -10,6 +10,7 @@ ../plymouth.nix ../polkit.nix ../hyprland.nix + ../niri.nix ]; programs.gdk-pixbuf.modulePackages = [ pkgs.librsvg ]; diff --git a/system/modules/shells/noctalia/bar.nix b/system/modules/shells/noctalia/bar.nix new file mode 100644 index 0000000..565e1bc --- /dev/null +++ b/system/modules/shells/noctalia/bar.nix @@ -0,0 +1,140 @@ +{ + backgroundOpacity = 1; + capsuleOpacity = 1; + density = "comfortable"; + exclusive = true; + floating = true; + marginHorizontal = 0.25; + marginVertical = 0.25; + outerCorners = false; + postition = "top"; + showCapsule = true; + widgets = { + center = [ + { + colorizeIcons = false; + hideMode = "hidden"; + id = "ActiveWindow"; + maxWidth = 145; + scrollingMode = "hover"; + showIcon = true; + useFixedWidth = false; + } + ]; + left = [ + { + icon = "rocket"; + id = "CustomButton"; + leftClickExec = "noctalia-shell ipc call launcher toggle"; + leftClickUpdateText = false; + maxTextLength = { + horizontal = 10; + vertical = 10; + }; + middleClickExec = ""; + middleClickUpdateText = false; + parseJson = false; + rightClickExec = ""; + rightClickUpdateText = false; + textCollapse = ""; + textCommand = ""; + textIntervalMs = 3000; + textStream = false; + wheelDownExec = ""; + wheelDownUpdateText = false; + wheelExec = ""; + wheelMode = "unified"; + wheelUpExec = ""; + wheelUpUpdateText = false; + wheelUpdateText = false; + } + { + customFont = ""; + formatHorizontal = "HH:mm ddd, MMM dd"; + formatVertical = "HH mm - dd MM"; + id = "Clock"; + useCustomFont = false; + usePrimaryColor = true; + } + { + characterCount = 4; + followFocusedScreen = false; + hideUnoccupied = false; + id = "Workspace"; + labelMode = "index"; + } + { + hideMode = "hidden"; + hideWhenIdle = false; + id = "MediaMini"; + maxWidth = 250; + scrollingMode = "hover"; + showAlbumArt = true; + showArtistFirst = false; + showProgressRing = true; + showVisualizer = true; + useFixedWidth = false; + visualizerType = "linear"; + } + ]; + right = [ + { + blacklist = [ + "Bluetooth*" + ]; + colorizeIcons = false; + drawerEnabled = false; + id = "Tray"; + pinned = [ + ]; + } + { + diskPath = "/"; + id = "SystemMonitor"; + showCpuTemp = true; + showCpuUsage = true; + showDiskUsage = false; + showMemoryAsPercent = false; + showMemoryUsage = true; + showNetworkStats = false; + usePrimaryColor = false; + } + { + id = "ScreenRecorder"; + } + { + id = "KeepAwake"; + } + { + displayMode = "onhover"; + id = "Volume"; + } + { + displayMode = "onhover"; + id = "Brightness"; + } + { + displayMode = "onhover"; + id = "VPN"; + } + { + displayMode = "onhover"; + id = "Bluetooth"; + } + { + hideWhenZero = true; + id = "NotificationHistory"; + showUnreadBadge = true; + } + { + colorizeDistroLogo = false; + colorizeSystemIcon = "primary"; + customIconPath = ""; + enableColorization = true; + icon = "noctalia"; + id = "ControlCenter"; + useDistroLogo = true; + } + ]; + }; +} diff --git a/system/modules/shells/noctalia/controlCenter.nix b/system/modules/shells/noctalia/controlCenter.nix new file mode 100644 index 0000000..2e6747e --- /dev/null +++ b/system/modules/shells/noctalia/controlCenter.nix @@ -0,0 +1,55 @@ +{ + cards = [ + { + enabled = true; + id = "profile-card"; + } + { + enabled = true; + id = "shortcuts-card"; + } + { + enabled = true; + id = "audio-card"; + } + { + enabled = true; + id = "weather-card"; + } + { + enabled = true; + id = "media-sysmon-card"; + } + ]; + position = "bottom_center"; + shortcuts = { + left = [ + { + id = "WiFi"; + } + { + id = "Bluetooth"; + } + { + id = "ScreenRecorder"; + } + { + id = "WallpaperSelector"; + } + ]; + right = [ + { + id = "Notifications"; + } + { + id = "PowerProfile"; + } + { + id = "KeepAwake"; + } + { + id = "NightLight"; + } + ]; + }; +} diff --git a/system/modules/shells/noctalia/default.nix b/system/modules/shells/noctalia/default.nix new file mode 100644 index 0000000..ec9ba21 --- /dev/null +++ b/system/modules/shells/noctalia/default.nix @@ -0,0 +1,282 @@ +{ lib, config, ... }: +let + + inherit (config.systemConf) username; + inherit (lib) mkForce mapAttrs; +in +{ + + # ==== Extra Services Settings ==== # + services.power-profiles-daemon.enable = true; + networking.networkmanager.enable = true; + services.upower.enable = true; + hardware.bluetooth.enable = true; + # ================================= # + + home-manager.users.${username} = + { config, ... }: + { + # ==== Disabled Services ==== # + services.swww.enable = mkForce false; # Wallpaper + programs.waybar.enable = mkForce false; # Bar + services.swayidle.enable = mkForce false; # Idle + services.sunsetr.enable = mkForce false; # Bluelight filter + programs.hyprlock.enable = mkForce false; # Lock + services.swaync.enable = mkForce false; # Notification daemon + + systemd.user.services.noctalia-shell.Service.Environment = [ + "QT_QPA_PLATFORMTHEME=gtk3" + ]; + + programs.noctalia-shell = { + enable = true; + systemd.enable = true; + settings = { + settingsVersion = 25; + appLauncher = { + customLaunchPrefix = ""; + customLaunchPrefixEnabled = false; + enableClipPreview = true; + enableClipboardHistory = true; + pinnedExecs = [ + ]; + position = "top_center"; + sortByMostUsed = true; + terminalCommand = "ghostty -e"; + useApp2Unit = false; + viewMode = "list"; + }; + audio = { + cavaFrameRate = 30; + externalMixer = "pwvucontrol"; + mprisBlacklist = [ + ]; + preferredPlayer = "mpv"; + visualizerQuality = "high"; + visualizerType = "linear"; + volumeOverdrive = false; + volumeStep = 5; + }; + bar = import ./bar.nix; + brightness = { + brightnessStep = 5; + enableDdcSupport = false; + enforceMinium = true; + }; + calendar = { + cards = [ + { + enabled = true; + id = "banner-card"; + } + { + enabled = true; + id = "calendar-card"; + } + { + enabled = true; + id = "timer-card"; + } + { + enabled = true; + id = "weather-card"; + } + ]; + }; + changelog = { + lastSeenVersion = ""; + }; + colorSchemes = { + darkMode = true; + generateTemplatesForPredefined = true; + manualSunrise = "06:30"; + manualSunset = "18:30"; + matugenSchemeType = "scheme-neutral"; + predefinedScheme = "Noctalia (default)"; + schedulingMode = "off"; + useWallpaperColors = true; + }; + controlCenter = import ./controlCenter.nix; + dock = { + backgroundOpacity = 1; + colorizeIcons = false; + displayMode = "auto_hide"; + enabled = true; + floatingRatio = 1; + monitors = [ + ]; + onlySameOutput = true; + pinnedApps = [ + ]; + radiusRatio = 0.68; + size = 1; + }; + general = { + allowPanelsOnScreenWithoutBar = true; + animationDisabled = false; + animationSpeed = 1.5; + avatarImage = "${config.home.homeDirectory}/.face"; + compactLockScreen = false; + dimmerOpacity = 0.4; + enableShadows = true; + forceBlackScreenCorners = true; + language = ""; + lockOnSuspend = true; + radiusRatio = 1; + scaleRatio = 1; + screenRadiusRatio = 1.09; + shadowDirection = "bottom_right"; + shadowOffsetX = 2; + shadowOffsetY = 3; + showHibernateOnLockScreen = false; + showScreenCorners = true; + }; + hooks = { + enabled = false; + darkModeChange = ""; + wallpaperChange = ""; + }; + location = { + analogClockInCalendar = false; + firstDayOfWeek = -1; + name = "Taipei, TW"; + showCalendarEvents = true; + showCalendarWeather = true; + showWeekNumberInCalendar = false; + use12hourFormat = false; + useFahrenheit = false; + weatherEnabled = true; + weatherShowEffects = true; + }; + network = { + wifiEnabled = true; + }; + nightLight = { + enabled = true; + autoSchedule = true; + dayTemp = "6000"; + nightTemp = "5500"; + forced = false; + manualSunrise = "06:30"; + manualSunset = "18:30"; + }; + notifications = { + backgroundOpacity = 1; + criticalUrgencyDuration = 15; + enableKeyboardLayoutToast = true; + enabled = true; + location = "bottom_right"; + lowUrgencyDuration = 3; + monitors = [ + ]; + normalUrgencyDuration = 8; + overlayLayer = true; + respectExpireTimeout = false; + }; + osd = { + autoHideMs = 1500; + backgroundOpacity = 1; + enabled = true; + enabledTypes = [ + 0 + 1 + 2 + ]; + location = "right"; + monitors = [ + ]; + overlayLayer = true; + }; + screenRecorder = { + audioCodec = "opus"; + audioSource = "default_output"; + colorRange = "limited"; + directory = "${config.home.homeDirectory}/Videos"; + frameRate = 60; + quality = "very_high"; + showCursor = true; + videoCodec = "h264"; + videoSource = "portal"; + }; + sessionMenu = import ./sessionMenu.nix; + systemMonitor = import ./systemMonitor.nix; + templates = import ./templates.nix; + ui = { + fontDefault = config.stylix.fonts.sansSerif.name; + fontDefaultScale = 1; + fontFixed = config.stylix.fonts.monospace.name; + fontFixedScale = 1; + panelBackgroundOpacity = 1; + panelsAttachedToBar = true; + settingsPanelAttachToBar = true; + tooltipsEnabled = true; + }; + wallpaper = { + directory = "${config.home.homeDirectory}/Pictures/Wallpapers"; + enableMultiMonitorDirectories = false; + enabled = true; + fillColor = "#000000"; + fillMode = "crop"; + hideWallpaperFilenames = true; + monitorDirectories = [ + ]; + overviewEnabled = false; + panelPosition = "follow_bar"; + randomEnabled = false; + randomIntervalSec = 300; + recursiveSearch = false; + setWallpaperOnAllMonitors = true; + transitionDuration = 1500; + transitionEdgeSmoothness = 0.05; + transitionType = "random"; + useWallhaven = false; + wallhavenCategories = "111"; + wallhavenOrder = "desc"; + wallhavenPurity = "100"; + wallhavenQuery = ""; + wallhavenResolutionHeight = ""; + wallhavenResolutionMode = "atleast"; + wallhavenResolutionWidth = ""; + wallhavenSorting = "relevance"; + }; + }; + }; + + programs.niri.settings = + with config.lib.niri.actions; + let + noctalia = spawn "noctalia-shell" "ipc" "call"; + in + { + binds = mapAttrs (name: value: mkForce value) { + # Core + "Mod+Slash".action = noctalia "controlCenter" "toggle"; + "Alt+Space".action = noctalia "launcher" "toggle"; + "Mod+Ctrl+M".action = noctalia "lockScreen" "lock"; + + # Utilities + "Mod+Comma".action = noctalia "launcher" "clipboard"; + "Mod+Period".action = noctalia "launcher" "emoji"; + "Mod+F12".action = noctalia "screenRecorder" "toggle"; + "Mod+N".action = noctalia "notifications" "toggleHistory"; + "Mod+Ctrl+N".action = noctalia "notifications" "toggleDND"; + "Mod+Ctrl+W".action = noctalia "wallpaper" "toggle"; + "Mod+Ctrl+C".action = noctalia "launcher" "calculator"; + "Mod+Ctrl+Slash".action = noctalia "wallpaper" "random"; + + # Media + "XF86AudioPlay".action = noctalia "media" "playPause"; + "XF86AudioStop".action = noctalia "media" "pause"; + "XF86AudioPrev".action = noctalia "media" "previous"; + "XF86AudioNext".action = noctalia "media" "next"; + "Mod+Ctrl+Comma".action = noctalia "media" "previous"; + "Mod+Ctrl+Period".action = noctalia "media" "next"; + "XF86AudioMute".action = noctalia "volume" "muteOutput"; + "XF86AudioRaiseVolume".action = noctalia "volume" "increase"; + "XF86AudioLowerVolume".action = noctalia "volume" "decrease"; + "XF86MonBrightnessDown".action = noctalia "brightness" "decrease"; + "XF86MonBrightnessUp".action = noctalia "brightness" "increase"; + }; + }; + }; +} diff --git a/system/modules/shells/noctalia/sessionMenu.nix b/system/modules/shells/noctalia/sessionMenu.nix new file mode 100644 index 0000000..747bdfa --- /dev/null +++ b/system/modules/shells/noctalia/sessionMenu.nix @@ -0,0 +1,38 @@ +{ + countdownDuration = 10000; + enableCountdown = true; + position = "bottom_center"; + powerOptions = [ + { + action = "lock"; + countdownEnabled = true; + enabled = true; + } + { + action = "suspend"; + countdownEnabled = true; + enabled = true; + } + { + action = "hibernate"; + countdownEnabled = true; + enabled = true; + } + { + action = "reboot"; + countdownEnabled = true; + enabled = true; + } + { + action = "logout"; + countdownEnabled = true; + enabled = true; + } + { + action = "shutdown"; + countdownEnabled = true; + enabled = true; + } + ]; + showHeader = false; +} diff --git a/system/modules/shells/noctalia/systemMonitor.nix b/system/modules/shells/noctalia/systemMonitor.nix new file mode 100644 index 0000000..46e038d --- /dev/null +++ b/system/modules/shells/noctalia/systemMonitor.nix @@ -0,0 +1,18 @@ +{ + cpuCriticalThreshold = 90; + cpuPollingInterval = 3000; + cpuWarningThreshold = 80; + criticalColor = ""; + diskCriticalThreshold = 90; + diskPollingInterval = 3000; + diskWarningThreshold = 80; + memCriticalThreshold = 90; + memPollingInterval = 3000; + memWarningThreshold = 80; + networkPollingInterval = 3000; + tempCriticalThreshold = 90; + tempPollingInterval = 3000; + tempWarningThreshold = 80; + useCustomColors = false; + warningColor = ""; +} diff --git a/system/modules/shells/noctalia/templates.nix b/system/modules/shells/noctalia/templates.nix new file mode 100644 index 0000000..0f53889 --- /dev/null +++ b/system/modules/shells/noctalia/templates.nix @@ -0,0 +1,22 @@ +{ + alacritty = false; + cava = false; + code = false; + discord = false; + emacs = false; + enableUserTemplates = false; + foot = false; + fuzzel = false; + ghostty = false; + gtk = false; + kcolorscheme = false; + kitty = false; + niri = false; + pywalfox = false; + qt = false; + spicetify = false; + telegram = false; + vicinae = false; + walker = false; + wezterm = false; +} diff --git a/system/modules/sound.nix b/system/modules/sound.nix index 077afd9..8b1b7cd 100644 --- a/system/modules/sound.nix +++ b/system/modules/sound.nix @@ -19,7 +19,7 @@ }; environment.systemPackages = with pkgs; [ - pavucontrol + pwvucontrol playerctl ]; } diff --git a/system/modules/stylix.nix b/system/modules/stylix.nix index f66acfd..3fd510f 100644 --- a/system/modules/stylix.nix +++ b/system/modules/stylix.nix @@ -20,6 +20,7 @@ in enable = true; base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-medium.yaml"; polarity = "dark"; + enableReleaseChecks = false; fonts = { serif = config.stylix.fonts.monospace; @@ -49,7 +50,6 @@ in noto-fonts-cjk-serif noto-fonts-color-emoji liberation_ttf - # dfkai-sb sf-pro-display-bold ]; @@ -57,6 +57,8 @@ in }; home-manager.users."${username}" = { + stylix.enableReleaseChecks = false; + stylix.targets.neovim.transparentBackground = { main = true; numberLine = true;