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;