├── .gitignore ├── README.md ├── flake.lock ├── flake.nix ├── modules ├── cli.nix ├── design.nix ├── development.nix ├── eww │ ├── default.nix │ ├── eww.scss │ └── eww.yuck ├── framework.nix ├── ghostty │ ├── default.nix │ └── style.css ├── gnome.nix ├── hardware.nix ├── helix.nix ├── media.nix ├── niri.nix ├── nix.nix ├── nushell │ ├── config.nu │ ├── default.nix │ └── env.nu ├── waybar │ ├── default.nix │ └── waybar.css └── xserver.nix ├── static ├── boliviainteligente-GCShbHteITQ-unsplash.jpg ├── jr-korpa-9XngoIpxcEo-unsplash.jpg ├── jr-korpa-O-p6tKWPPig-unsplash.jpg └── markos-mant-Ln9wvXBDqr0-unsplash.jpg ├── system.nix ├── theme.nix └── user.nix /.gitignore: -------------------------------------------------------------------------------- 1 | secrets/* 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## my dotfiles 3 | 4 | This repo stores my dotfiles, organized as a NixOS config in a Nix flake, with 5 | Home-Manager is deployed as a NixOS module. 6 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "base16": { 4 | "inputs": { 5 | "fromYaml": "fromYaml" 6 | }, 7 | "locked": { 8 | "lastModified": 1746562888, 9 | "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", 10 | "owner": "SenchoPens", 11 | "repo": "base16.nix", 12 | "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", 13 | "type": "github" 14 | }, 15 | "original": { 16 | "owner": "SenchoPens", 17 | "repo": "base16.nix", 18 | "type": "github" 19 | } 20 | }, 21 | "base16-fish": { 22 | "flake": false, 23 | "locked": { 24 | "lastModified": 1622559957, 25 | "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", 26 | "owner": "tomyun", 27 | "repo": "base16-fish", 28 | "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", 29 | "type": "github" 30 | }, 31 | "original": { 32 | "owner": "tomyun", 33 | "repo": "base16-fish", 34 | "type": "github" 35 | } 36 | }, 37 | "base16-helix": { 38 | "flake": false, 39 | "locked": { 40 | "lastModified": 1736852337, 41 | "narHash": "sha256-esD42YdgLlEh7koBrSqcT7p2fsMctPAcGl/+2sYJa2o=", 42 | "owner": "tinted-theming", 43 | "repo": "base16-helix", 44 | "rev": "03860521c40b0b9c04818f2218d9cc9efc21e7a5", 45 | "type": "github" 46 | }, 47 | "original": { 48 | "owner": "tinted-theming", 49 | "repo": "base16-helix", 50 | "type": "github" 51 | } 52 | }, 53 | "base16-vim": { 54 | "flake": false, 55 | "locked": { 56 | "lastModified": 1732806396, 57 | "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", 58 | "owner": "tinted-theming", 59 | "repo": "base16-vim", 60 | "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", 61 | "type": "github" 62 | }, 63 | "original": { 64 | "owner": "tinted-theming", 65 | "repo": "base16-vim", 66 | "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", 67 | "type": "github" 68 | } 69 | }, 70 | "colmena": { 71 | "inputs": { 72 | "flake-compat": "flake-compat", 73 | "flake-utils": "flake-utils", 74 | "nix-github-actions": "nix-github-actions", 75 | "nixpkgs": [ 76 | "nixpkgs" 77 | ], 78 | "stable": "stable" 79 | }, 80 | "locked": { 81 | "lastModified": 1746816769, 82 | "narHash": "sha256-ymQzXrfHVT8/RJiGbfrNjEeuzXQan46lUJdxEhgivdM=", 83 | "owner": "zhaofengli", 84 | "repo": "colmena", 85 | "rev": "df694ee23be7ed7b2d8b42c245a640f0724eb06c", 86 | "type": "github" 87 | }, 88 | "original": { 89 | "owner": "zhaofengli", 90 | "repo": "colmena", 91 | "type": "github" 92 | } 93 | }, 94 | "firefox-gnome-theme": { 95 | "flake": false, 96 | "locked": { 97 | "lastModified": 1744642301, 98 | "narHash": "sha256-5A6LL7T0lttn1vrKsNOKUk9V0ittdW0VEqh6AtefxJ4=", 99 | "owner": "rafaelmardojai", 100 | "repo": "firefox-gnome-theme", 101 | "rev": "59e3de00f01e5adb851d824cf7911bd90c31083a", 102 | "type": "github" 103 | }, 104 | "original": { 105 | "owner": "rafaelmardojai", 106 | "repo": "firefox-gnome-theme", 107 | "type": "github" 108 | } 109 | }, 110 | "flake-compat": { 111 | "flake": false, 112 | "locked": { 113 | "lastModified": 1650374568, 114 | "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", 115 | "owner": "edolstra", 116 | "repo": "flake-compat", 117 | "rev": "b4a34015c698c7793d592d66adbab377907a2be8", 118 | "type": "github" 119 | }, 120 | "original": { 121 | "owner": "edolstra", 122 | "repo": "flake-compat", 123 | "type": "github" 124 | } 125 | }, 126 | "flake-compat_2": { 127 | "locked": { 128 | "lastModified": 1733328505, 129 | "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 130 | "owner": "edolstra", 131 | "repo": "flake-compat", 132 | "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 133 | "type": "github" 134 | }, 135 | "original": { 136 | "owner": "edolstra", 137 | "repo": "flake-compat", 138 | "type": "github" 139 | } 140 | }, 141 | "flake-parts": { 142 | "inputs": { 143 | "nixpkgs-lib": [ 144 | "stylix", 145 | "nur", 146 | "nixpkgs" 147 | ] 148 | }, 149 | "locked": { 150 | "lastModified": 1733312601, 151 | "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", 152 | "owner": "hercules-ci", 153 | "repo": "flake-parts", 154 | "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", 155 | "type": "github" 156 | }, 157 | "original": { 158 | "owner": "hercules-ci", 159 | "repo": "flake-parts", 160 | "type": "github" 161 | } 162 | }, 163 | "flake-utils": { 164 | "locked": { 165 | "lastModified": 1659877975, 166 | "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", 167 | "owner": "numtide", 168 | "repo": "flake-utils", 169 | "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", 170 | "type": "github" 171 | }, 172 | "original": { 173 | "owner": "numtide", 174 | "repo": "flake-utils", 175 | "type": "github" 176 | } 177 | }, 178 | "flake-utils_2": { 179 | "inputs": { 180 | "systems": [ 181 | "stylix", 182 | "systems" 183 | ] 184 | }, 185 | "locked": { 186 | "lastModified": 1731533236, 187 | "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 188 | "owner": "numtide", 189 | "repo": "flake-utils", 190 | "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 191 | "type": "github" 192 | }, 193 | "original": { 194 | "owner": "numtide", 195 | "repo": "flake-utils", 196 | "type": "github" 197 | } 198 | }, 199 | "fromYaml": { 200 | "flake": false, 201 | "locked": { 202 | "lastModified": 1731966426, 203 | "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", 204 | "owner": "SenchoPens", 205 | "repo": "fromYaml", 206 | "rev": "106af9e2f715e2d828df706c386a685698f3223b", 207 | "type": "github" 208 | }, 209 | "original": { 210 | "owner": "SenchoPens", 211 | "repo": "fromYaml", 212 | "type": "github" 213 | } 214 | }, 215 | "git-hooks": { 216 | "inputs": { 217 | "flake-compat": [ 218 | "stylix", 219 | "flake-compat" 220 | ], 221 | "gitignore": "gitignore", 222 | "nixpkgs": [ 223 | "stylix", 224 | "nixpkgs" 225 | ] 226 | }, 227 | "locked": { 228 | "lastModified": 1742649964, 229 | "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", 230 | "owner": "cachix", 231 | "repo": "git-hooks.nix", 232 | "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", 233 | "type": "github" 234 | }, 235 | "original": { 236 | "owner": "cachix", 237 | "repo": "git-hooks.nix", 238 | "type": "github" 239 | } 240 | }, 241 | "gitignore": { 242 | "inputs": { 243 | "nixpkgs": [ 244 | "stylix", 245 | "git-hooks", 246 | "nixpkgs" 247 | ] 248 | }, 249 | "locked": { 250 | "lastModified": 1709087332, 251 | "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", 252 | "owner": "hercules-ci", 253 | "repo": "gitignore.nix", 254 | "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", 255 | "type": "github" 256 | }, 257 | "original": { 258 | "owner": "hercules-ci", 259 | "repo": "gitignore.nix", 260 | "type": "github" 261 | } 262 | }, 263 | "gnome-shell": { 264 | "flake": false, 265 | "locked": { 266 | "lastModified": 1732369855, 267 | "narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=", 268 | "owner": "GNOME", 269 | "repo": "gnome-shell", 270 | "rev": "dadd58f630eeea41d645ee225a63f719390829dc", 271 | "type": "github" 272 | }, 273 | "original": { 274 | "owner": "GNOME", 275 | "ref": "47.2", 276 | "repo": "gnome-shell", 277 | "type": "github" 278 | } 279 | }, 280 | "home-manager": { 281 | "inputs": { 282 | "nixpkgs": [ 283 | "nixpkgs" 284 | ] 285 | }, 286 | "locked": { 287 | "lastModified": 1747374689, 288 | "narHash": "sha256-JT/aBZqmK1LbExzwT9cPkvxKc0IC4i6tZKOPjsSWFbI=", 289 | "owner": "nix-community", 290 | "repo": "home-manager", 291 | "rev": "d2263ce5f4c251c0f7608330e8fdb7d1f01f0667", 292 | "type": "github" 293 | }, 294 | "original": { 295 | "owner": "nix-community", 296 | "repo": "home-manager", 297 | "type": "github" 298 | } 299 | }, 300 | "home-manager_2": { 301 | "inputs": { 302 | "nixpkgs": [ 303 | "stylix", 304 | "nixpkgs" 305 | ] 306 | }, 307 | "locked": { 308 | "lastModified": 1747279714, 309 | "narHash": "sha256-UdxlE8yyrKiGq3bgGyJ78AdFwh+fuRAruKtyFY5Zq5I=", 310 | "owner": "nix-community", 311 | "repo": "home-manager", 312 | "rev": "954615c510c9faa3ee7fb6607ff72e55905e69f2", 313 | "type": "github" 314 | }, 315 | "original": { 316 | "owner": "nix-community", 317 | "repo": "home-manager", 318 | "type": "github" 319 | } 320 | }, 321 | "niri": { 322 | "inputs": { 323 | "niri-stable": "niri-stable", 324 | "niri-unstable": "niri-unstable", 325 | "nixpkgs": [ 326 | "nixpkgs" 327 | ], 328 | "nixpkgs-stable": "nixpkgs-stable", 329 | "xwayland-satellite-stable": "xwayland-satellite-stable", 330 | "xwayland-satellite-unstable": "xwayland-satellite-unstable" 331 | }, 332 | "locked": { 333 | "lastModified": 1747304844, 334 | "narHash": "sha256-aLS9HqdtAtioT2JJSWQ7cgWKozBmCtxzYWIEZb1RzkA=", 335 | "owner": "sodiboo", 336 | "repo": "niri-flake", 337 | "rev": "b8326b5bfb204d7b57802a218de1ebbb743bf8dc", 338 | "type": "github" 339 | }, 340 | "original": { 341 | "owner": "sodiboo", 342 | "repo": "niri-flake", 343 | "type": "github" 344 | } 345 | }, 346 | "niri-stable": { 347 | "flake": false, 348 | "locked": { 349 | "lastModified": 1740117926, 350 | "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=", 351 | "owner": "YaLTeR", 352 | "repo": "niri", 353 | "rev": "b94a5db8790339cf9134873d8b490be69e02ac71", 354 | "type": "github" 355 | }, 356 | "original": { 357 | "owner": "YaLTeR", 358 | "ref": "v25.02", 359 | "repo": "niri", 360 | "type": "github" 361 | } 362 | }, 363 | "niri-unstable": { 364 | "flake": false, 365 | "locked": { 366 | "lastModified": 1747289333, 367 | "narHash": "sha256-S2xNTAo0e87rK+sNDQCxOsBKtQEBAAVwgkzdpnWoQC0=", 368 | "owner": "YaLTeR", 369 | "repo": "niri", 370 | "rev": "46a8f81160708d05e9609c318cce64e3e5ac2538", 371 | "type": "github" 372 | }, 373 | "original": { 374 | "owner": "YaLTeR", 375 | "repo": "niri", 376 | "type": "github" 377 | } 378 | }, 379 | "nix-github-actions": { 380 | "inputs": { 381 | "nixpkgs": [ 382 | "colmena", 383 | "nixpkgs" 384 | ] 385 | }, 386 | "locked": { 387 | "lastModified": 1729742964, 388 | "narHash": "sha256-B4mzTcQ0FZHdpeWcpDYPERtyjJd/NIuaQ9+BV1h+MpA=", 389 | "owner": "nix-community", 390 | "repo": "nix-github-actions", 391 | "rev": "e04df33f62cdcf93d73e9a04142464753a16db67", 392 | "type": "github" 393 | }, 394 | "original": { 395 | "owner": "nix-community", 396 | "repo": "nix-github-actions", 397 | "type": "github" 398 | } 399 | }, 400 | "nixos-hardware": { 401 | "locked": { 402 | "lastModified": 1747129300, 403 | "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", 404 | "owner": "NixOS", 405 | "repo": "nixos-hardware", 406 | "rev": "e81fd167b33121269149c57806599045fd33eeed", 407 | "type": "github" 408 | }, 409 | "original": { 410 | "owner": "NixOS", 411 | "ref": "master", 412 | "repo": "nixos-hardware", 413 | "type": "github" 414 | } 415 | }, 416 | "nixpkgs": { 417 | "locked": { 418 | "lastModified": 1747179050, 419 | "narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=", 420 | "owner": "nixos", 421 | "repo": "nixpkgs", 422 | "rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e", 423 | "type": "github" 424 | }, 425 | "original": { 426 | "owner": "nixos", 427 | "ref": "nixos-unstable", 428 | "repo": "nixpkgs", 429 | "type": "github" 430 | } 431 | }, 432 | "nixpkgs-stable": { 433 | "locked": { 434 | "lastModified": 1747209494, 435 | "narHash": "sha256-fLise+ys+bpyjuUUkbwqo5W/UyIELvRz9lPBPoB0fbM=", 436 | "owner": "NixOS", 437 | "repo": "nixpkgs", 438 | "rev": "5d736263df906c5da72ab0f372427814de2f52f8", 439 | "type": "github" 440 | }, 441 | "original": { 442 | "owner": "NixOS", 443 | "ref": "nixos-24.11", 444 | "repo": "nixpkgs", 445 | "type": "github" 446 | } 447 | }, 448 | "nur": { 449 | "inputs": { 450 | "flake-parts": "flake-parts", 451 | "nixpkgs": [ 452 | "stylix", 453 | "nixpkgs" 454 | ], 455 | "treefmt-nix": "treefmt-nix" 456 | }, 457 | "locked": { 458 | "lastModified": 1746056780, 459 | "narHash": "sha256-/emueQGaoT4vu0QjU9LDOG5roxRSfdY0K2KkxuzazcM=", 460 | "owner": "nix-community", 461 | "repo": "NUR", 462 | "rev": "d476cd0972dd6242d76374fcc277e6735715c167", 463 | "type": "github" 464 | }, 465 | "original": { 466 | "owner": "nix-community", 467 | "repo": "NUR", 468 | "type": "github" 469 | } 470 | }, 471 | "root": { 472 | "inputs": { 473 | "colmena": "colmena", 474 | "home-manager": "home-manager", 475 | "niri": "niri", 476 | "nixos-hardware": "nixos-hardware", 477 | "nixpkgs": "nixpkgs", 478 | "stylix": "stylix" 479 | } 480 | }, 481 | "stable": { 482 | "locked": { 483 | "lastModified": 1746557022, 484 | "narHash": "sha256-QkNoyEf6TbaTW5UZYX0OkwIJ/ZMeKSSoOMnSDPQuol0=", 485 | "owner": "NixOS", 486 | "repo": "nixpkgs", 487 | "rev": "1d3aeb5a193b9ff13f63f4d9cc169fb88129f860", 488 | "type": "github" 489 | }, 490 | "original": { 491 | "owner": "NixOS", 492 | "ref": "nixos-24.11", 493 | "repo": "nixpkgs", 494 | "type": "github" 495 | } 496 | }, 497 | "stylix": { 498 | "inputs": { 499 | "base16": "base16", 500 | "base16-fish": "base16-fish", 501 | "base16-helix": "base16-helix", 502 | "base16-vim": "base16-vim", 503 | "firefox-gnome-theme": "firefox-gnome-theme", 504 | "flake-compat": "flake-compat_2", 505 | "flake-utils": "flake-utils_2", 506 | "git-hooks": "git-hooks", 507 | "gnome-shell": "gnome-shell", 508 | "home-manager": "home-manager_2", 509 | "nixpkgs": [ 510 | "nixpkgs" 511 | ], 512 | "nur": "nur", 513 | "systems": "systems", 514 | "tinted-foot": "tinted-foot", 515 | "tinted-kitty": "tinted-kitty", 516 | "tinted-schemes": "tinted-schemes", 517 | "tinted-tmux": "tinted-tmux", 518 | "tinted-zed": "tinted-zed" 519 | }, 520 | "locked": { 521 | "lastModified": 1747365543, 522 | "narHash": "sha256-r5HRe9CRFe6qvy7KLkTX9WySTqkNmvlobTR8g5AHLHA=", 523 | "owner": "danth", 524 | "repo": "stylix", 525 | "rev": "7566bc015064ed3eb50b436f2225ddab06132beb", 526 | "type": "github" 527 | }, 528 | "original": { 529 | "owner": "danth", 530 | "repo": "stylix", 531 | "type": "github" 532 | } 533 | }, 534 | "systems": { 535 | "locked": { 536 | "lastModified": 1681028828, 537 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 538 | "owner": "nix-systems", 539 | "repo": "default", 540 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 541 | "type": "github" 542 | }, 543 | "original": { 544 | "owner": "nix-systems", 545 | "repo": "default", 546 | "type": "github" 547 | } 548 | }, 549 | "tinted-foot": { 550 | "flake": false, 551 | "locked": { 552 | "lastModified": 1726913040, 553 | "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", 554 | "owner": "tinted-theming", 555 | "repo": "tinted-foot", 556 | "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", 557 | "type": "github" 558 | }, 559 | "original": { 560 | "owner": "tinted-theming", 561 | "repo": "tinted-foot", 562 | "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", 563 | "type": "github" 564 | } 565 | }, 566 | "tinted-kitty": { 567 | "flake": false, 568 | "locked": { 569 | "lastModified": 1716423189, 570 | "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=", 571 | "owner": "tinted-theming", 572 | "repo": "tinted-kitty", 573 | "rev": "eb39e141db14baef052893285df9f266df041ff8", 574 | "type": "github" 575 | }, 576 | "original": { 577 | "owner": "tinted-theming", 578 | "repo": "tinted-kitty", 579 | "rev": "eb39e141db14baef052893285df9f266df041ff8", 580 | "type": "github" 581 | } 582 | }, 583 | "tinted-schemes": { 584 | "flake": false, 585 | "locked": { 586 | "lastModified": 1744974599, 587 | "narHash": "sha256-Fg+rdGs5FAgfkYNCs74lnl8vkQmiZVdBsziyPhVqrlY=", 588 | "owner": "tinted-theming", 589 | "repo": "schemes", 590 | "rev": "28c26a621123ad4ebd5bbfb34ab39421c0144bdd", 591 | "type": "github" 592 | }, 593 | "original": { 594 | "owner": "tinted-theming", 595 | "repo": "schemes", 596 | "type": "github" 597 | } 598 | }, 599 | "tinted-tmux": { 600 | "flake": false, 601 | "locked": { 602 | "lastModified": 1745111349, 603 | "narHash": "sha256-udV+nHdpqgkJI9D0mtvvAzbqubt9jdifS/KhTTbJ45w=", 604 | "owner": "tinted-theming", 605 | "repo": "tinted-tmux", 606 | "rev": "e009f18a01182b63559fb28f1c786eb027c3dee9", 607 | "type": "github" 608 | }, 609 | "original": { 610 | "owner": "tinted-theming", 611 | "repo": "tinted-tmux", 612 | "type": "github" 613 | } 614 | }, 615 | "tinted-zed": { 616 | "flake": false, 617 | "locked": { 618 | "lastModified": 1725758778, 619 | "narHash": "sha256-8P1b6mJWyYcu36WRlSVbuj575QWIFZALZMTg5ID/sM4=", 620 | "owner": "tinted-theming", 621 | "repo": "base16-zed", 622 | "rev": "122c9e5c0e6f27211361a04fae92df97940eccf9", 623 | "type": "github" 624 | }, 625 | "original": { 626 | "owner": "tinted-theming", 627 | "repo": "base16-zed", 628 | "type": "github" 629 | } 630 | }, 631 | "treefmt-nix": { 632 | "inputs": { 633 | "nixpkgs": [ 634 | "stylix", 635 | "nur", 636 | "nixpkgs" 637 | ] 638 | }, 639 | "locked": { 640 | "lastModified": 1733222881, 641 | "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", 642 | "owner": "numtide", 643 | "repo": "treefmt-nix", 644 | "rev": "49717b5af6f80172275d47a418c9719a31a78b53", 645 | "type": "github" 646 | }, 647 | "original": { 648 | "owner": "numtide", 649 | "repo": "treefmt-nix", 650 | "type": "github" 651 | } 652 | }, 653 | "xwayland-satellite-stable": { 654 | "flake": false, 655 | "locked": { 656 | "lastModified": 1739246919, 657 | "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", 658 | "owner": "Supreeeme", 659 | "repo": "xwayland-satellite", 660 | "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", 661 | "type": "github" 662 | }, 663 | "original": { 664 | "owner": "Supreeeme", 665 | "ref": "v0.5.1", 666 | "repo": "xwayland-satellite", 667 | "type": "github" 668 | } 669 | }, 670 | "xwayland-satellite-unstable": { 671 | "flake": false, 672 | "locked": { 673 | "lastModified": 1747111562, 674 | "narHash": "sha256-GAqhWoxaBIk0tgoecZPa8gTHDHxNc0JtlwWHZN2iOOo=", 675 | "owner": "Supreeeme", 676 | "repo": "xwayland-satellite", 677 | "rev": "ec9ff64c1e0cbec42710b580b7c0f759b1694e72", 678 | "type": "github" 679 | }, 680 | "original": { 681 | "owner": "Supreeeme", 682 | "repo": "xwayland-satellite", 683 | "type": "github" 684 | } 685 | } 686 | }, 687 | "root": "root", 688 | "version": 7 689 | } 690 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "contingent - ixxie's Framework 13 Ryzen 7040 series"; 3 | inputs = { 4 | nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; 5 | nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 6 | home-manager = { 7 | url = "github:nix-community/home-manager"; 8 | inputs.nixpkgs.follows = "nixpkgs"; 9 | }; 10 | stylix = { 11 | url = "github:danth/stylix"; 12 | inputs.nixpkgs.follows = "nixpkgs"; 13 | }; 14 | niri = { 15 | url = "github:sodiboo/niri-flake"; 16 | inputs.nixpkgs.follows = "nixpkgs"; 17 | }; 18 | colmena = { 19 | url = "github:zhaofengli/colmena"; 20 | inputs.nixpkgs.follows = "nixpkgs"; 21 | }; 22 | }; 23 | outputs = 24 | inputs@{ 25 | self, 26 | nixpkgs, 27 | ... 28 | }: 29 | let 30 | system = "x86_64-linux"; 31 | in 32 | { 33 | nixosConfigurations.contingent = nixpkgs.lib.nixosSystem { 34 | inherit system; 35 | specialArgs = { inherit inputs; }; 36 | modules = [ 37 | ./system.nix 38 | ./user.nix 39 | ./theme.nix 40 | # modules 41 | ./modules/cli.nix 42 | ./modules/design.nix 43 | ./modules/development.nix 44 | ./modules/framework.nix 45 | ./modules/ghostty 46 | ./modules/gnome.nix 47 | ./modules/hardware.nix 48 | ./modules/helix.nix 49 | ./modules/media.nix 50 | ./modules/niri.nix 51 | ./modules/nix.nix 52 | ./modules/nushell 53 | ./modules/waybar 54 | #./modules/eww 55 | ./modules/xserver.nix 56 | ]; 57 | }; 58 | }; 59 | } 60 | -------------------------------------------------------------------------------- /modules/cli.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | # Basic Package Suite 5 | environment.systemPackages = with pkgs; [ 6 | ddate 7 | dig 8 | file 9 | gnumake 10 | gparted 11 | htop 12 | isoimagewriter 13 | ledger 14 | lm_sensors 15 | lshw 16 | lsof 17 | man-pages 18 | ngrok 19 | openssh 20 | p7zip-rar 21 | rar 22 | ripgrep 23 | screenkey 24 | simple-scan 25 | testdisk 26 | tree 27 | unzip 28 | wget 29 | xclip 30 | ]; 31 | } 32 | -------------------------------------------------------------------------------- /modules/design.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | with pkgs; 4 | { 5 | environment.systemPackages = [ 6 | krita 7 | inkscape 8 | gimp-with-plugins 9 | ffmpeg 10 | pdftk 11 | gthumb 12 | imagemagick 13 | scribus 14 | libreoffice 15 | ]; 16 | fonts.packages = with pkgs; [ 17 | source-code-pro 18 | google-fonts 19 | ]; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /modules/development.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | environment.systemPackages = with pkgs; [ 5 | # general 6 | gh 7 | # ai 8 | aider-chat 9 | # python 10 | python312Packages.python-lsp-server 11 | ruff 12 | uv 13 | # web 14 | nodejs_22 15 | vscode-langservers-extracted # html/css/json 16 | nodePackages.typescript-language-server 17 | nodePackages.svelte-language-server 18 | nodePackages."@vue/language-server" 19 | nodePackages.prettier 20 | prettierd 21 | eslint_d 22 | postman 23 | markdown-oxide 24 | bun 25 | # data 26 | duckdb 27 | sqlitebrowser 28 | # system 29 | nixd 30 | nodePackages.bash-language-server 31 | ]; 32 | 33 | # version control 34 | home-manager.users.ixxie = { 35 | home.file.".aider.conf.yml".text = '' 36 | dark-mode: false 37 | code-theme: monokai 38 | map-tokens: 1024 39 | # git 40 | auto-commits: false 41 | attribute-committer: false 42 | gitignore: false 43 | 44 | ''; 45 | programs.git = { 46 | enable = true; 47 | userName = "Matan Bendix Shenhav"; 48 | userEmail = "matan@shenhav.fyi"; 49 | extraConfig = { 50 | init = { 51 | defaultBranch = "main"; 52 | }; 53 | push = { 54 | autoSetupRemote = true; 55 | }; 56 | core.editor = "hx"; 57 | color = { 58 | branch = { 59 | current = "green bold"; 60 | local = "green"; 61 | remote = "yellow"; 62 | }; 63 | diff = { 64 | frag = "cyan bold"; 65 | meta = "yellow bold"; 66 | new = "green"; 67 | old = "red"; 68 | }; 69 | }; 70 | diff.bin = { 71 | textconv = "hexdump -v -C"; 72 | }; 73 | alias = { 74 | squash = "!git add $1 && git commit --amend --no-edit && :"; 75 | up = "push origin HEAD"; 76 | shove = "push -f origin HEAD"; 77 | graph = "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'"; 78 | stats = "diff --ignore-all-space --stat"; 79 | base = "rebase -i develop"; 80 | comm = "!git add . && git commit -m $1 && :"; 81 | wat = "config --get-regexp ^alias"; 82 | rm = "branch -D"; 83 | ls = "branch -v"; 84 | cd = "switch $1"; 85 | new = "switch -c"; 86 | root = "!gr && :"; 87 | }; 88 | }; 89 | }; 90 | }; 91 | 92 | # docker daemon 93 | virtualisation.docker.enable = true; 94 | 95 | # android debug bridge 96 | programs.adb.enable = true; 97 | } 98 | -------------------------------------------------------------------------------- /modules/eww/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | ... 4 | }: 5 | 6 | { 7 | home-manager.users.ixxie = { 8 | programs.eww = { 9 | enable = true; 10 | configDir = ./.; # Use the current directory for config 11 | package = pkgs.eww; 12 | }; 13 | 14 | # Add dependencies for the eww bar 15 | home.packages = with pkgs; [ 16 | jq 17 | brightnessctl 18 | pamixer 19 | ]; 20 | 21 | # Add systemd service for eww 22 | systemd.user.services.eww = { 23 | Unit = { 24 | Description = "Eww Daemon"; 25 | PartOf = [ "graphical-session.target" ]; 26 | After = [ "graphical-session.target" ]; 27 | }; 28 | Service = { 29 | ExecStart = "${pkgs.eww}/bin/eww daemon --no-daemonize"; 30 | Restart = "on-failure"; 31 | }; 32 | Install = { 33 | WantedBy = [ "graphical-session.target" ]; 34 | }; 35 | }; 36 | }; 37 | } 38 | -------------------------------------------------------------------------------- /modules/eww/eww.scss: -------------------------------------------------------------------------------- 1 | * { 2 | all: unset; 3 | font-family: "MonaspiceNe Nerd Font"; 4 | font-size: 10pt; 5 | } 6 | 7 | .left-bar { 8 | background-color: rgba(34, 34, 34, 0.8); 9 | border-radius: 8px; 10 | padding: 8px; 11 | margin: 8px; 12 | } 13 | 14 | // Launcher 15 | .launcher { 16 | font-size: 16pt; 17 | margin: 8px 0; 18 | color: rgba(255, 255, 255, 0.8); 19 | } 20 | 21 | // Clock 22 | .clock { 23 | font-size: 12pt; 24 | margin: 8px 0; 25 | color: rgba(255, 255, 255, 0.8); 26 | } 27 | 28 | .calendar { 29 | background-color: rgba(40, 40, 40, 0.9); 30 | border-radius: 8px; 31 | padding: 8px; 32 | margin-top: 4px; 33 | } 34 | 35 | // Workspaces 36 | .workspaces { 37 | margin: 16px 0; 38 | } 39 | 40 | .workspace-indicator { 41 | background-color: rgba(255, 255, 255, 0.5); 42 | border-radius: 2px; 43 | margin: 4px 0; 44 | min-height: 1px; 45 | min-width: 24px; 46 | } 47 | 48 | .workspace-indicator.active { 49 | background-color: rgba(255, 255, 255, 0.8); 50 | min-height: 2px; 51 | } 52 | 53 | // Volume 54 | .volume-icon { 55 | font-size: 14pt; 56 | margin: 8px 0; 57 | color: rgba(255, 255, 255, 0.8); 58 | } 59 | 60 | .volume-slider { 61 | min-height: 100px; 62 | background-color: rgba(255, 255, 255, 0.2); 63 | border-radius: 4px; 64 | } 65 | 66 | .volume-slider trough highlight { 67 | background-color: rgba(255, 255, 255, 0.8); 68 | border-radius: 4px; 69 | } 70 | 71 | // Brightness 72 | .brightness-icon { 73 | font-size: 14pt; 74 | margin: 8px 0; 75 | color: rgba(255, 255, 255, 0.8); 76 | } 77 | 78 | .brightness-slider { 79 | min-height: 100px; 80 | background-color: rgba(255, 255, 255, 0.2); 81 | border-radius: 4px; 82 | } 83 | 84 | .brightness-slider trough highlight { 85 | background-color: rgba(255, 255, 255, 0.8); 86 | border-radius: 4px; 87 | } 88 | 89 | // Battery 90 | .battery { 91 | margin: 8px 0; 92 | color: rgba(255, 255, 255, 0.8); 93 | } 94 | 95 | // Power menu 96 | .power-icon { 97 | font-size: 14pt; 98 | margin: 8px 0; 99 | color: rgba(255, 255, 255, 0.8); 100 | } 101 | 102 | .power-option { 103 | padding: 8px; 104 | margin: 4px 0; 105 | background-color: rgba(40, 40, 40, 0.9); 106 | border-radius: 4px; 107 | color: rgba(255, 255, 255, 0.8); 108 | } 109 | 110 | .power-option:hover { 111 | background-color: rgba(60, 60, 60, 0.9); 112 | } 113 | 114 | // Expanded bar 115 | .left-bar:hover { 116 | min-width: 200px; 117 | transition: 300ms ease; 118 | } -------------------------------------------------------------------------------- /modules/eww/eww.yuck: -------------------------------------------------------------------------------- 1 | ;; Variables 2 | (defvar eww_expanded false) 3 | 4 | ;; Polls 5 | (defpoll time :interval "1s" "date +%H:%M") 6 | (defpoll date :interval "1m" "date +%d/%m/%Y") 7 | (defpoll volume :interval "1s" "pamixer --get-volume") 8 | (defpoll brightness :interval "1s" "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") 9 | (defpoll battery :interval "30s" "cat /sys/class/power_supply/BAT0/capacity") 10 | 11 | ;; Get active workspaces from Niri 12 | (deflisten workspaces :initial "[]" "niri-msg -t get_workspaces | jq -c '.workspaces | map({id: .id, focused: .focused})'") 13 | 14 | ;; Widgets 15 | (defwidget launcher [] 16 | (button :class "launcher" 17 | :onclick "fuzzel &" 18 | :timeout "500ms" 19 | " ")) 20 | 21 | (defwidget clock [] 22 | (box :orientation "h" :space-evenly false 23 | (label :class "clock" :text time) 24 | (revealer :transition "slideright" 25 | :reveal eww_expanded 26 | :duration "300ms" 27 | (calendar :class "calendar" 28 | :day 1 29 | :month 1 30 | :year 2023)))) 31 | 32 | (defwidget workspaces [] 33 | (box :class "workspaces" 34 | :orientation "h" 35 | :space-evenly false 36 | (for workspace in workspaces 37 | (box :class "workspace-indicator ${workspace.focused ? 'active' : 'inactive'}")))) 38 | 39 | (defwidget volume-widget [] 40 | (eventbox :onhover "${EWW_CMD} update eww_expanded=true" 41 | :onhoverlost "${EWW_CMD} update eww_expanded=false" 42 | (box :orientation "h" :space-evenly false 43 | (label :class "volume-icon" :text "") 44 | (revealer :transition "slideright" 45 | :reveal eww_expanded 46 | :duration "300ms" 47 | (scale :class "volume-slider" 48 | :orientation "h" 49 | :value volume 50 | :min 0 51 | :max 100 52 | :onchange "pamixer --set-volume {}"))))) 53 | 54 | (defwidget brightness-widget [] 55 | (eventbox :onhover "${EWW_CMD} update eww_expanded=true" 56 | :onhoverlost "${EWW_CMD} update eww_expanded=false" 57 | (box :orientation "h" :space-evenly false 58 | (label :class "brightness-icon" :text "") 59 | (revealer :transition "slideright" 60 | :reveal eww_expanded 61 | :duration "300ms" 62 | (scale :class "brightness-slider" 63 | :orientation "h" 64 | :value brightness 65 | :min 0 66 | :max 100 67 | :onchange "brightnessctl set {}%"))))) 68 | 69 | (defwidget power-menu [] 70 | (eventbox :onhover "${EWW_CMD} update eww_expanded=true" 71 | :onhoverlost "${EWW_CMD} update eww_expanded=false" 72 | (box :orientation "h" :space-evenly false 73 | (button :class "power-icon" 74 | :onclick "shutdown now" 75 | :timeout "500ms" 76 | "") 77 | (revealer :transition "slideright" 78 | :reveal eww_expanded 79 | :duration "300ms" 80 | (box :orientation "h" :space-evenly false 81 | (button :class "power-option" 82 | :onclick "systemctl poweroff" 83 | :timeout "500ms" 84 | "⏻ Shutdown") 85 | (button :class "power-option" 86 | :onclick "systemctl reboot" 87 | :timeout "500ms" 88 | "⟳ Reboot") 89 | (button :class "power-option" 90 | :onclick "systemctl suspend" 91 | :timeout "500ms" 92 | "⏾ Suspend") 93 | (button :class "power-option" 94 | :onclick "niri-msg quit" 95 | :timeout "500ms" 96 | "⏏ Logout")))))) 97 | 98 | (defwidget battery-widget [] 99 | (box :class "battery" 100 | :orientation "h" 101 | (label :text "${battery}%"))) 102 | 103 | (defwidget top-bar [] 104 | (eventbox :onhover "${EWW_CMD} update eww_expanded=true" 105 | :onhoverlost "${EWW_CMD} update eww_expanded=false" 106 | (box :class "top-bar" 107 | :orientation "v" 108 | :space-evenly true 109 | (box :orientation "h" :space-evenly false :class "left-modules" 110 | (launcher) 111 | (clock) 112 | (workspaces)) 113 | (box :orientation "h" :space-evenly false :class "right-modules" 114 | (battery-widget) 115 | (volume-widget) 116 | (brightness-widget) 117 | (power-menu))))) 118 | 119 | ;; Windows 120 | (defwindow bar 121 | :monitor 0 122 | :exclusive true 123 | :geometry (geometry :x "8px" 124 | :y "8px" 125 | :width "auto" 126 | :height "100%" 127 | :anchor "top center") 128 | :stacking "fg" 129 | :wm-ignore false 130 | (top-bar)) 131 | -------------------------------------------------------------------------------- /modules/framework.nix: -------------------------------------------------------------------------------- 1 | { inputs, ... }: 2 | 3 | { 4 | imports = [ 5 | inputs.nixos-hardware.nixosModules.framework-13-7040-amd 6 | ]; 7 | services.fwupd.enable = true; # firmware 8 | services.power-profiles-daemon.enable = true; # battery 9 | boot.initrd.kernelModules = [ "amdgpu" ]; # graphics 10 | services.fprintd.enable = false; 11 | hardware = { 12 | # disable framework kernel module 13 | # https://github.com/NixOS/nixos-hardware/issues/1330 14 | framework.enableKmod = false; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /modules/ghostty/default.nix: -------------------------------------------------------------------------------- 1 | { ... }: 2 | 3 | { 4 | home-manager.users.ixxie.programs = { 5 | ghostty = { 6 | enable = true; 7 | settings = { 8 | window-padding-x = 10; 9 | window-padding-y = 10; 10 | gtk-wide-tabs = false; 11 | gtk-custom-css = "/home/ixxie/repos/dotfiles/modules/ghostty/style.css"; 12 | }; 13 | }; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /modules/ghostty/style.css: -------------------------------------------------------------------------------- 1 | headerbar { 2 | margin: -5px; 3 | padding: 0; 4 | background: none; 5 | height: 10px; 6 | } 7 | 8 | tabbox, 9 | tab, 10 | button { 11 | min-height: 10px; 12 | height: 10px; 13 | margin: 0px; 14 | } -------------------------------------------------------------------------------- /modules/gnome.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services = { 5 | xserver.desktopManager.gnome.enable = true; 6 | gnome.core-utilities.enable = false; 7 | illum.enable = true; 8 | }; 9 | 10 | environment.systemPackages = with pkgs; [ 11 | gnome-tweaks 12 | gtk-engine-murrine 13 | gnomeExtensions.dash-to-dock 14 | gnomeExtensions.paperwm 15 | gnomeExtensions.vertical-workspaces 16 | gnomeExtensions.clipboard-indicator 17 | gnomeExtensions.dash-to-panel 18 | dconf 19 | dconf-editor 20 | ]; 21 | } 22 | -------------------------------------------------------------------------------- /modules/hardware.nix: -------------------------------------------------------------------------------- 1 | # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 | # and may be overwritten by future invocations. Please make changes 3 | # to /etc/nixos/configuration.nix instead. 4 | { 5 | config, 6 | lib, 7 | pkgs, 8 | modulesPath, 9 | ... 10 | }: 11 | 12 | { 13 | imports = [ 14 | (modulesPath + "/installer/scan/not-detected.nix") 15 | ]; 16 | 17 | boot.initrd.availableKernelModules = [ 18 | "nvme" 19 | "xhci_pci" 20 | "thunderbolt" 21 | "usb_storage" 22 | "sd_mod" 23 | ]; 24 | boot.initrd.kernelModules = [ ]; 25 | boot.kernelModules = [ "kvm-amd" ]; 26 | boot.extraModulePackages = [ ]; 27 | 28 | fileSystems."/" = { 29 | device = "/dev/disk/by-uuid/e7a0aeba-78d8-4ee2-b759-934afd4770d0"; 30 | fsType = "ext4"; 31 | }; 32 | 33 | fileSystems."/boot" = { 34 | device = "/dev/disk/by-uuid/E9A0-97C6"; 35 | fsType = "vfat"; 36 | options = [ 37 | "fmask=0077" 38 | "dmask=0077" 39 | ]; 40 | }; 41 | 42 | swapDevices = [ ]; 43 | 44 | # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 45 | # (the default) this is the recommended approach. When using systemd-networkd it's 46 | # still possible to use this option, but it's recommended to use it in conjunction 47 | # with explicit per-interface declarations with `networking.interfaces..useDHCP`. 48 | networking.useDHCP = lib.mkDefault true; 49 | # networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true; 50 | 51 | nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 52 | hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 53 | } 54 | -------------------------------------------------------------------------------- /modules/helix.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | environment.systemPackages = with pkgs; [ 5 | helix-gpt 6 | ]; 7 | home-manager.users.ixxie = { 8 | programs.helix = { 9 | enable = true; 10 | settings = { 11 | editor = { 12 | shell = [ 13 | "nu" 14 | "--stdin" 15 | "-c" 16 | ]; 17 | true-color = true; 18 | file-picker.hidden = false; 19 | inline-diagnostics = { 20 | cursor-line = "hint"; 21 | other-lines = "disable"; 22 | }; 23 | lsp.auto-signature-help = false; 24 | }; 25 | }; 26 | languages = { 27 | language-server = { 28 | ruff = { 29 | command = "ruff"; 30 | args = [ "server" ]; 31 | }; 32 | eslint = { 33 | command = "vscode-eslint-language-server"; 34 | args = [ "--stdio" ]; 35 | config = { 36 | validate = "on"; 37 | }; 38 | }; 39 | vls = { 40 | command = "vue-language-server"; 41 | args = [ "--stdio" ]; 42 | }; 43 | llm = { 44 | command = "helix-gpt"; 45 | }; 46 | }; 47 | language = [ 48 | { 49 | name = "nix"; 50 | auto-format = true; 51 | language-servers = [ 52 | "nixd" 53 | "llm" 54 | ]; 55 | file-types = [ "nix" ]; 56 | } 57 | { 58 | name = "svelte"; 59 | auto-format = true; 60 | file-types = [ 61 | "svelte" 62 | "llm" 63 | ]; 64 | } 65 | { 66 | name = "vue"; 67 | file-types = [ "vue" ]; 68 | language-servers = [ 69 | "eslint" 70 | "vls" 71 | "llm" 72 | ]; 73 | injection-regex = "vue"; 74 | scope = "text.html.vue"; 75 | formatter = { 76 | command = "prettierd"; 77 | args = [ 78 | "--stdin-filepath" 79 | "x.vue" 80 | ]; 81 | }; 82 | auto-format = true; 83 | } 84 | { 85 | name = "javascript"; 86 | file-types = [ 87 | "js" 88 | "mjs" 89 | ]; 90 | formatter = { 91 | command = "prettierd"; 92 | args = [ 93 | "--stdin-filepath" 94 | "x.js" 95 | ]; 96 | }; 97 | language-servers = [ 98 | "typescript-language-server" 99 | "llm" 100 | ]; 101 | auto-format = true; 102 | } 103 | { 104 | name = "typescript"; 105 | file-types = [ 106 | "ts" 107 | ]; 108 | auto-format = true; 109 | formatter = { 110 | command = "prettierd"; 111 | args = [ 112 | "--stdin-filepath" 113 | "x.ts" 114 | ]; 115 | }; 116 | } 117 | { 118 | name = "markdown"; 119 | file-types = [ 120 | "md" 121 | "mdx" 122 | "llm" 123 | ]; 124 | auto-format = true; 125 | soft-wrap.enable = true; 126 | } 127 | { 128 | name = "python"; 129 | auto-format = true; 130 | 131 | language-servers = [ 132 | "ruff" 133 | "llm" 134 | ]; 135 | file-types = [ "py" ]; 136 | } 137 | { 138 | name = "bash"; 139 | language-servers = [ 140 | "bash-language-server" 141 | "llm" 142 | ]; 143 | file-types = [ "sh" ]; 144 | } 145 | ]; 146 | }; 147 | }; 148 | }; 149 | } 150 | -------------------------------------------------------------------------------- /modules/media.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | environment = { 5 | systemPackages = with pkgs; [ 6 | # browsers 7 | firefox 8 | chromium 9 | tor-browser 10 | # messaging 11 | signal-desktop-bin 12 | element-desktop 13 | discord 14 | vesktop 15 | # media 16 | spotify 17 | celluloid 18 | # p2p 19 | transmission_4-gtk 20 | ]; 21 | }; 22 | 23 | # audio 24 | services.pipewire = { 25 | enable = true; 26 | pulse.enable = true; 27 | jack.enable = true; 28 | alsa.enable = true; 29 | wireplumber.enable = true; 30 | }; 31 | services.pulseaudio.enable = false; 32 | } 33 | -------------------------------------------------------------------------------- /modules/niri.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | ... 5 | }: 6 | 7 | let 8 | niri = pkgs.niri-unstable; 9 | in 10 | { 11 | nixpkgs.overlays = [ 12 | inputs.niri.overlays.niri 13 | ]; 14 | environment.systemPackages = with pkgs; [ 15 | xwayland-satellite 16 | swaybg 17 | pamixer 18 | brightnessctl 19 | wl-clipboard-rs 20 | fyi 21 | libinput 22 | ]; 23 | 24 | programs.niri = { 25 | enable = true; 26 | package = niri; 27 | }; 28 | 29 | home-manager.users.ixxie = 30 | { config, ... }: 31 | { 32 | imports = [ 33 | inputs.niri.homeModules.config 34 | inputs.niri.homeModules.stylix 35 | ]; 36 | services.mako = { 37 | enable = true; 38 | settings = { 39 | border-radius = 5; 40 | default-timeout = 5; 41 | border-size = 2; 42 | }; 43 | }; 44 | programs = { 45 | niri = { 46 | package = niri; 47 | settings = { 48 | environment = { 49 | NIXOS_OZONE_WL = "1"; 50 | QT_QPA_PLATFORM = "wayland"; 51 | DISPLAY = ":0"; 52 | }; 53 | switch-events = { 54 | lid-close.action.spawn = [ 55 | "fyi" 56 | "-t" 57 | "3000" 58 | "laptop lid closed" 59 | ]; 60 | }; 61 | outputs = { 62 | eDP-1 = { 63 | position = { 64 | x = 0; 65 | y = 0; 66 | }; 67 | }; 68 | DP-2 = { 69 | position = { 70 | x = -2560; 71 | y = 0; 72 | }; 73 | }; 74 | }; 75 | spawn-at-startup = [ 76 | { command = [ "xwayland-satellite" ]; } 77 | { command = [ "mako" ]; } 78 | # { 79 | # command = [ 80 | # "eww" 81 | # "open" 82 | # "bar" 83 | # ]; 84 | # } 85 | { 86 | command = [ 87 | "systemctl" 88 | "--user" 89 | "start" 90 | "waybar.service" 91 | ]; 92 | } 93 | { 94 | command = [ 95 | "swaybg" 96 | "-m" 97 | "fill" 98 | "-i" 99 | "${config.stylix.image}" 100 | ]; 101 | } 102 | ]; 103 | input = { 104 | keyboard = { 105 | #repeat-delay = 200; 106 | #repeat-rate = 60; 107 | xkb = { 108 | layout = "us"; 109 | variant = "altgr-intl"; 110 | options = "compose:altgr"; 111 | }; 112 | }; 113 | touchpad = { 114 | tap = true; 115 | #dwt = true; 116 | natural-scroll = true; 117 | #click-method = "clickfinger"; 118 | }; 119 | }; 120 | prefer-no-csd = true; 121 | layout = { 122 | gaps = 8; 123 | preset-column-widths = [ 124 | { proportion = 1. / 5.; } 125 | { proportion = 2. / 5.; } 126 | { proportion = 3. / 5.; } 127 | { proportion = 4. / 5.; } 128 | ]; 129 | preset-window-heights = [ 130 | { proportion = 1. / 3.; } 131 | { proportion = 1. / 2.; } 132 | { proportion = 2. / 3.; } 133 | ]; 134 | focus-ring = { 135 | enable = true; 136 | active.gradient = { 137 | from = "#057ff7"; 138 | to = "#e03961"; 139 | angle = -45; 140 | }; 141 | width = 3; 142 | }; 143 | border.enable = false; 144 | }; 145 | window-rules = [ 146 | { 147 | matches = [ ]; 148 | geometry-corner-radius = { 149 | bottom-left = 5.0; 150 | bottom-right = 5.0; 151 | top-left = 5.0; 152 | top-right = 5.0; 153 | }; 154 | clip-to-geometry = true; 155 | } 156 | ]; 157 | binds = with config.lib.niri.actions; { 158 | # apps 159 | "Mod+Return".action.spawn = "ghostty"; 160 | "Mod+Space".action.spawn = "firefox"; 161 | "Mod+L".action.spawn = "fuzzel"; 162 | # session 163 | "Mod+Alt+P".action.spawn = "shutdown now"; 164 | "Mod+Alt+R".action.spawn = "shutdown -r now"; 165 | "Mod+Alt+Q".action = quit; 166 | # workspaces 167 | "Mod+Tab".action = toggle-overview; 168 | "Mod+1".action.focus-workspace = 1; 169 | "Mod+2".action.focus-workspace = 2; 170 | "Mod+3".action.focus-workspace = 3; 171 | "Mod+4".action.focus-workspace = 4; 172 | "Mod+5".action.focus-workspace = 5; 173 | "Mod+6".action.focus-workspace = 6; 174 | "Mod+7".action.focus-workspace = 7; 175 | "Mod+8".action.focus-workspace = 8; 176 | "Mod+9".action.focus-workspace = 9; 177 | "Mod+Shift+1".action.move-column-to-workspace = 1; 178 | "Mod+Shift+2".action.move-column-to-workspace = 2; 179 | "Mod+Shift+3".action.move-column-to-workspace = 3; 180 | "Mod+Shift+4".action.move-column-to-workspace = 4; 181 | "Mod+Shift+5".action.move-column-to-workspace = 5; 182 | "Mod+Shift+6".action.move-column-to-workspace = 6; 183 | "Mod+Shift+7".action.move-column-to-workspace = 7; 184 | "Mod+Shift+8".action.move-column-to-workspace = 8; 185 | "Mod+Shift+9".action.move-column-to-workspace = 9; 186 | # sizing 187 | "Mod+F".action = maximize-column; 188 | "Mod+Shift+F".action = fullscreen-window; 189 | "Mod+BackSpace".action = close-window; 190 | "Mod+C".action = center-column; 191 | "Mod+Shift+W".action = switch-preset-column-width; 192 | "Mod+Shift+H".action = switch-preset-window-height; 193 | "Mod+Ctrl+H".action = reset-window-height; 194 | "Mod+Minus".action.set-column-width = "-10%"; 195 | "Mod+Equal".action.set-column-width = "+10%"; 196 | "Mod+Shift+Minus".action.set-window-height = "-10%"; 197 | "Mod+Shift+Equal".action.set-window-height = "+10%"; 198 | # focus 199 | "Mod+Left".action = focus-column-left-or-last; 200 | "Mod+Right".action = focus-column-right-or-first; 201 | "Mod+Down".action = focus-window-or-workspace-down; 202 | "Mod+Up".action = focus-window-or-workspace-up; 203 | "Mod+Alt+Left".action = focus-monitor-left; 204 | "Mod+Alt+Down".action = focus-monitor-down; 205 | "Mod+Alt+Up".action = focus-monitor-up; 206 | "Mod+Alt+Right".action = focus-monitor-right; 207 | "Mod+WheelScrollUp".action = focus-column-left-or-last; 208 | "Mod+WheelScrollDown".action = focus-column-right-or-first; 209 | "Mod+Shift+WheelScrollUp".action = focus-window-or-workspace-up; 210 | "Mod+Shift+WheelScrollDown".action = focus-window-or-workspace-down; 211 | "Mod+U".action = focus-workspace-down; 212 | "Mod+I".action = focus-workspace-up; 213 | # move 214 | "Mod+Ctrl+Left".action = move-column-left; 215 | "Mod+Ctrl+Down".action = move-window-down-or-to-workspace-down; 216 | "Mod+Ctrl+Up".action = move-window-up-or-to-workspace-up; 217 | "Mod+Ctrl+Right".action = move-column-right; 218 | "Mod+Ctrl+Alt+Left".action = move-column-to-monitor-left; 219 | "Mod+Ctrl+Alt+Down".action = move-column-to-monitor-down; 220 | "Mod+Ctrl+Alt+Up".action = move-column-to-monitor-up; 221 | "Mod+Ctrl+Alt+Right".action = move-column-to-monitor-right; 222 | "Mod+Shift+U".action = move-column-to-workspace-down; 223 | "Mod+Shift+I".action = move-column-to-workspace-up; 224 | # float 225 | "Mod+V".action = toggle-window-floating; 226 | "Mod+Shift+V".action = switch-focus-between-floating-and-tiling; 227 | # tabs 228 | "Mod+W".action = toggle-column-tabbed-display; 229 | "Mod+BracketLeft".action = consume-or-expel-window-left; 230 | "Mod+BracketRight".action = consume-or-expel-window-right; 231 | "Mod+Comma".action = consume-window-into-column; 232 | "Mod+Period".action = expel-window-from-column; 233 | # screenshots 234 | "Print".action.screenshot = { }; 235 | "Shift+Print".action.screenshot-screen = { }; 236 | # fn 237 | "XF86AudioRaiseVolume".action.spawn = [ 238 | "pamixer" 239 | "--increase" 240 | "5" 241 | ]; 242 | "XF86AudioLowerVolume".action.spawn = [ 243 | "pamixer" 244 | "--decrease" 245 | "5" 246 | ]; 247 | "XF86AudioMute".action.spawn = [ 248 | "pamixer" 249 | "--toggle-mute" 250 | ]; 251 | "XF86MonBrightnessDown".action.spawn = [ 252 | "brightnessctl" 253 | "s" 254 | "5%-" 255 | ]; 256 | "XF86MonBrightnessUp".action.spawn = [ 257 | "brightnessctl" 258 | "s" 259 | "+5%" 260 | ]; 261 | # docs 262 | "Mod+H".action.spawn = [ 263 | "firefox" 264 | "https://github.com/YaLTeR/niri/wiki/Getting-Started" 265 | "https://github.com/sodiboo/niri-flake" 266 | "https://github.com/sodiboo/niri-flake/blob/main/docs.md" 267 | "https://github.com/Alexays/Waybar/wiki" 268 | ]; 269 | }; 270 | hotkey-overlay.skip-at-startup = true; 271 | }; 272 | }; 273 | fuzzel = { 274 | enable = true; 275 | }; 276 | }; 277 | }; 278 | } 279 | -------------------------------------------------------------------------------- /modules/nix.nix: -------------------------------------------------------------------------------- 1 | { pkgs, inputs, ... }: 2 | 3 | let 4 | colmena = inputs.colmena.packages.x86_64-linux.colmena; 5 | in 6 | { 7 | # Basic Package Suite 8 | environment.systemPackages = with pkgs; [ 9 | nixVersions.latest 10 | nix-prefetch-git 11 | nixfmt-rfc-style 12 | glibcLocales # nix locale bug 13 | nixos-anywhere 14 | colmena 15 | ]; 16 | 17 | nix = { 18 | gc.automatic = true; 19 | settings.experimental-features = [ 20 | "nix-command" 21 | "flakes" 22 | ]; 23 | }; 24 | 25 | nixpkgs.config.allowBroken = true; 26 | 27 | # home-manager.users.ixxie.programs = { 28 | # direnv = { 29 | # enable = true; 30 | # enableNushellIntegration = true; 31 | # enableBashIntegration = true; 32 | # nix-direnv.enable = true; 33 | # }; 34 | # }; 35 | } 36 | -------------------------------------------------------------------------------- /modules/nushell/config.nu: -------------------------------------------------------------------------------- 1 | # COMMANDS 2 | 3 | # NixOS helper commands 4 | def nixos [] { 5 | } 6 | 7 | # Clean up the Nix store 8 | def "nixos gc" [] { 9 | sudo nix-collect-garbage --delete-older-than 7d 10 | nix-store --optimise 11 | } 12 | 13 | # Update the NixOS config's flake 14 | def "nixos update" [] { 15 | (cd ~/repos/dotfiles; sudo nix flake update) 16 | } 17 | 18 | # Rebuild the NixOS profile and switch to it 19 | def "nixos switch" [--update] { 20 | if $update { 21 | nixos update 22 | } 23 | sudo nixos-rebuild switch --flake '/home/ixxie/repos/dotfiles#contingent' 24 | } 25 | 26 | def rip [ 27 | pattern: string 28 | replacement: string 29 | --dry 30 | ] { 31 | let expr = $"s/($pattern)/($replacement)/g" 32 | if $dry { 33 | rg --pretty $pattern | sed $expr 34 | } else { 35 | rg -l $pattern | lines | each {|$file| 36 | sed -i $expr $file; 37 | } 38 | } 39 | } 40 | 41 | # ALIASES 42 | 43 | # go to git root 44 | alias gr = cd (git rev-parse --show-toplevel) 45 | 46 | 47 | # COMPLETERS 48 | 49 | # main completer for most commands 50 | let carapace_completer = {|spans: list| 51 | carapace $spans.0 nushell ...$spans 52 | | from json 53 | | if ($in | default [] | where value =~ '^-.*ERR$' | is-empty) { $in } else { null } 54 | } 55 | 56 | # used for some specific commands (e.g. git) 57 | let fish_completer = {|spans| 58 | fish --command $'complete "--do-complete=($spans | str join " ")"' 59 | | from tsv --flexible --noheaders --no-infer 60 | | rename value description 61 | } 62 | 63 | # learns from my input 64 | let zoxide_completer = {|spans| 65 | $spans | skip 1 | zoxide query -l ...$in | lines | where {|x| $x != $env.PWD} 66 | } 67 | 68 | # combining all completes 69 | let external_completer = {|spans| 70 | let expanded_alias = scope aliases 71 | | where name == $spans.0 72 | | get -i 0.expansion 73 | 74 | let spans = if $expanded_alias != null { 75 | $spans 76 | | skip 1 77 | | prepend ($expanded_alias | split row ' ' | take 1) 78 | } else { 79 | $spans 80 | } 81 | 82 | match $spans.0 { 83 | # carapace completions are incorrect for nu 84 | nu => $fish_completer 85 | # fish completes commits and branch names in a nicer way 86 | git => $fish_completer 87 | # carapace doesn't have completions for asdf 88 | asdf => $fish_completer 89 | # use zoxide completions for zoxide commands 90 | __zoxide_z | __zoxide_zi => $zoxide_completer 91 | _ => $carapace_completer 92 | } | do $in $spans 93 | } 94 | 95 | $env.config = { 96 | show_banner: false, 97 | completions: { 98 | external: { 99 | enable: true 100 | completer: $external_completer 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /modules/nushell/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | environment.systemPackages = with pkgs; [ 5 | # nushell 6 | starship 7 | nushellPlugins.query 8 | # completers 9 | carapace 10 | zoxide 11 | fish 12 | ]; 13 | 14 | home-manager.users.ixxie.programs = { 15 | nushell = { 16 | enable = true; 17 | envFile.text = builtins.readFile ./env.nu; 18 | configFile.text = 19 | builtins.readFile ./config.nu 20 | + '' 21 | # PLUGINS 22 | 23 | plugin add ${pkgs.nushellPlugins.query}/bin/nu_plugin_query 24 | ''; 25 | }; 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /modules/nushell/env.nu: -------------------------------------------------------------------------------- 1 | $env.STARSHIP_SHELL = "nu" 2 | 3 | def create_left_prompt [] { 4 | starship prompt --cmd-duration $env.CMD_DURATION_MS $'--status=($env.LAST_EXIT_CODE)' 5 | } 6 | 7 | $env.PROMPT_COMMAND = { || create_left_prompt } 8 | $env.PROMPT_COMMAND_RIGHT = "" 9 | 10 | $env.PROMPT_INDICATOR = "" 11 | $env.PROMPT_INDICATOR_VI_INSERT = ": " 12 | $env.PROMPT_INDICATOR_VI_NORMAL = "〉" 13 | $env.PROMPT_MULTILINE_INDICATOR = "::: " 14 | 15 | $env.MASCOPE_PATH = "/home/ixxie/repos/mascope" 16 | 17 | $env.HANDLER = "codeium" 18 | $env.TERMINAL = "ghostty" 19 | 20 | $env.QT_QPA_PLATFORM = "wayland" 21 | 22 | $env.DOTFILES = "/home/ixxie/repos/dotfiles" 23 | 24 | cat $"($env.DOTFILES)/secrets/anthropic_key.txt" | $env.ANTHROPIC_API_KEY = $in 25 | cat $"($env.DOTFILES)/secrets/github_token.txt" | $env.CR_PAT = $in 26 | -------------------------------------------------------------------------------- /modules/waybar/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | home-manager.users.ixxie = { 3 | programs.waybar = { 4 | enable = true; 5 | systemd = { 6 | enable = true; 7 | }; 8 | settings = [ 9 | { 10 | layer = "top"; 11 | position = "top"; 12 | modules-left = [ 13 | "custom/launcher" 14 | "niri/workspaces" 15 | ]; 16 | modules-center = [ 17 | "clock" 18 | ]; 19 | modules-right = [ 20 | "pulseaudio" 21 | "memory" 22 | "temperature" 23 | "cpu" 24 | "network" 25 | "battery" 26 | "custom/powermenu" 27 | #"tray" 28 | ]; 29 | battery = { 30 | interval = 1; 31 | format = "{icon}"; 32 | format-icons = [ 33 | "󰂎" 34 | "󰁺" 35 | "󰁻" 36 | "󰁼" 37 | "󰁽" 38 | "󰁾" 39 | "󰁿" 40 | "󰂀" 41 | "󰂁" 42 | "󰂂" 43 | "󰁹" 44 | ]; 45 | format-charging = "󰂄"; 46 | format-plugged = "󰂄"; 47 | states = { 48 | warning = 30; 49 | critical = 15; 50 | }; 51 | tooltip-format = "{capacity}%"; 52 | }; 53 | "niri/workspaces" = { 54 | disable-markup = true; 55 | format = "{icon}"; 56 | format-icons = { 57 | default = ""; 58 | focused = ""; 59 | active = ""; 60 | }; 61 | }; 62 | "custom/launcher" = { 63 | format = " "; 64 | on-click = "fuzzel"; 65 | on-click-middle = "exec default_wall"; 66 | on-click-right = "exec wallpaper_random"; 67 | tooltip = false; 68 | }; 69 | pulseaudio = { 70 | scroll-step = 1; 71 | format = "{icon}"; 72 | format-muted = "󰖁"; 73 | format-icons = { 74 | "default" = [ 75 | "" 76 | "" 77 | "" 78 | ]; 79 | }; 80 | on-click = "pamixer -t"; 81 | tooltip = false; 82 | }; 83 | clock = { 84 | interval = 1; 85 | format = "{:%H:%M}"; 86 | format-alt = "{:%H:%M:%S}"; 87 | timezone = "Europe/Paris"; 88 | tooltip = true; 89 | tooltip-format = '' 90 | 91 | {:%a %d %b %H:%M:%S} 92 | {calendar} 93 | 94 | ''; 95 | calendar = { 96 | mode = "month"; 97 | mode-mon-col = 3; 98 | weeks-pos = "right"; 99 | on-scroll = 1; 100 | format = { 101 | months = "{}"; 102 | days = "{}"; 103 | weeks = "W{}"; 104 | weekdays = "{}"; 105 | today = "{}"; 106 | }; 107 | }; 108 | actions = { 109 | on-click-right = "mode"; 110 | on-click-forward = "tz_up"; 111 | on-click-backward = "tz_down"; 112 | on-scroll-up = "shift_up"; 113 | on-scroll-down = "shift_down"; 114 | }; 115 | }; 116 | memory = { 117 | format = "󰻠 {percentage}%"; 118 | states = { 119 | warning = 85; 120 | }; 121 | interval = 1; 122 | }; 123 | cpu = { 124 | format = "{icon}"; 125 | format-icons = [ 126 | "" 127 | "" 128 | "" 129 | "" 130 | "" 131 | "" 132 | "" 133 | "" 134 | ]; 135 | interval = 1; 136 | }; 137 | network = { 138 | format-disconnected = "󰯡"; 139 | format-ethernet = "󰒢"; 140 | format-linked = "󰖪"; 141 | format-wifi = "󰖩"; 142 | tooltip = true; 143 | tooltip-format = "{essid}"; 144 | interval = 1; 145 | }; 146 | "custom/powermenu" = { 147 | format = ""; 148 | on-click = "shutdown now"; 149 | tooltip = false; 150 | }; 151 | tray = { 152 | icon-size = 15; 153 | spacing = 5; 154 | }; 155 | } 156 | ]; 157 | style = builtins.readFile ./waybar.css; 158 | }; 159 | }; 160 | 161 | # settings = [ 162 | # { 163 | # layer = "top"; 164 | # modules-left = [ 165 | # "niri/workspaces" 166 | # "niri/window" 167 | # # "mpd" 168 | # ]; 169 | # modules-center = [ "clock" ]; 170 | # modules-right = [ 171 | # "network" 172 | # "cpu" 173 | # "memory" 174 | # "temperature" 175 | # "pulseaudio" 176 | # "battery" 177 | # "tray" 178 | # ]; 179 | # "niri/workspaces" = { 180 | # "all-outputs" = false; 181 | # }; 182 | # mpd = { 183 | # "max-length" = 30; 184 | # "format" = " {artist} - {title}"; 185 | # "format-paused" = " {artist} - {title}"; 186 | # "format-stopped" = ""; 187 | # "format-disconnected" = ""; 188 | # "on-click" = "mpc --quiet toggle"; 189 | # "on-click-right" = "mpc ls | mpc add"; 190 | # "on-scroll-up" = "mpc --quiet prev"; 191 | # "on-scroll-down" = "mpc --quiet next"; 192 | # "smooth-scrolling-threshold" = 5; 193 | # "tooltip" = false; 194 | # }; 195 | # wireplumber = { 196 | # "tooltip" = false; 197 | # "format" = "VOL {volume}%"; 198 | # "format-muted" = "VOL mute"; 199 | # }; 200 | # pulseaudio = { 201 | # "tooltip" = false; 202 | # "scroll-step" = 5; 203 | # "on-click" = ""; 204 | # "format" = "VOL {volume}%"; 205 | # "format-muted" = "VOL mute"; 206 | # }; 207 | # battery = { 208 | # "format" = "BAT {capacity}% "; 209 | # "on-click" = ""; 210 | # "states" = { 211 | # "warning" = 30; 212 | # "critical" = 15; 213 | # }; 214 | # "tooltip-format" = "{timeTo} ({power}W, {health}%)"; 215 | # }; 216 | # clock = { 217 | # "interval" = 1; 218 | # "format" = "{:%a %d %b %H:%M:%S}"; 219 | # "format-alt" = "{:%H:%M}"; 220 | # "locale" = "fr_FR.UTF-8"; 221 | # "timezone" = "Europe/Paris"; 222 | # "tooltip-format" = "{calendar}"; 223 | # "calendar" = { 224 | # "mode" = "year"; 225 | # "mode-mon-col" = 3; 226 | # "weeks-pos" = "right"; 227 | # "on-scroll" = 1; 228 | # "format" = { 229 | # "months" = "{}"; 230 | # "days" = "{}"; 231 | # "weeks" = "W{}"; 232 | # "weekdays" = "{}"; 233 | # "today" = "{}"; 234 | # }; 235 | # }; 236 | # "actions" = { 237 | # "on-click-right" = "mode"; 238 | # "on-click-forward" = "tz_up"; 239 | # "on-click-backward" = "tz_down"; 240 | # "on-scroll-up" = "shift_up"; 241 | # "on-scroll-down" = "shift_down"; 242 | # }; 243 | # }; 244 | # cpu = { 245 | # "format" = "CPU {usage}%"; 246 | # "on-click" = ""; 247 | # "tooltip" = false; 248 | # }; 249 | # memory = { 250 | # "on-click" = ""; 251 | # "format" = "RAM {}%"; 252 | # }; 253 | # temperature = { 254 | # "on-click" = ""; 255 | # "format" = " {temperatureC}°C"; 256 | # }; 257 | # network = { 258 | # "tooltip" = true; 259 | # "interval" = 5; 260 | # "format" = "DOWN {bandwidthDownOctets} | UP {bandwidthUpOctets}"; 261 | # "on-click" = ""; 262 | # "tooltip-format" = "{ifname} via {gwaddr}"; 263 | # }; 264 | # tray = { 265 | # "icon-size" = 12; 266 | # "spacing" = 10; 267 | # }; 268 | # } 269 | # ]; 270 | } 271 | -------------------------------------------------------------------------------- /modules/waybar/waybar.css: -------------------------------------------------------------------------------- 1 | * { 2 | font-family: "MonaspiceNe Nerd Font"; 3 | font-size: 10pt; 4 | padding: 0; 5 | margin: 0; 6 | background-color: transparent; 7 | transition-property: background-color; 8 | transition-duration: 0.5s; 9 | border: none; 10 | box-shadow: none; 11 | } 12 | 13 | window#waybar { 14 | background-color: transparent; 15 | } 16 | 17 | window#waybar>box { 18 | background-color: #222; 19 | opacity: 0.7; 20 | margin: 4px; 21 | margin-bottom: 0; 22 | margin-top: 8px; 23 | padding-left: 4px; 24 | padding-right: 4px; 25 | border: none; 26 | border-radius: 15px; 27 | } 28 | 29 | widget { 30 | color: white; 31 | padding-left: 10px; 32 | padding-right: 10px; 33 | } 34 | 35 | widget>* { 36 | opacity: 0.3; 37 | } 38 | 39 | widget>*:hover { 40 | opacity: 1; 41 | } 42 | 43 | #custom-launcher, 44 | #custom-powermenu, 45 | #clock { 46 | font-weight: bold; 47 | font-size: 12px; 48 | padding-left: 8px; 49 | padding-right: 8px; 50 | opacity: 0.7; 51 | } 52 | 53 | #custom-launcher { 54 | margin-right: 16px; 55 | } 56 | 57 | #custom-powermenu { 58 | margin-left: 16px; 59 | } 60 | 61 | tooltip { 62 | border: 1px solid #222; 63 | color: #fff; 64 | opacity: 0.7; 65 | } 66 | 67 | /* alerts */ 68 | 69 | @keyframes blink { 70 | to { 71 | opacity: 1; 72 | } 73 | } 74 | 75 | .warning, 76 | .critical, 77 | .urgent { 78 | animation-name: blink; 79 | animation-duration: 3s; 80 | animation-timing-function: linear; 81 | animation-iteration-count: infinite; 82 | animation-direction: alternate; 83 | } 84 | 85 | /* workspace module */ 86 | 87 | #workspaces { 88 | padding: 0; 89 | margin: 0; 90 | opacity: 1; 91 | } 92 | 93 | #workspaces>button { 94 | padding: 0; 95 | border: 0; 96 | opacity: 0.3; 97 | border-radius: 0; 98 | } 99 | 100 | 101 | #workspaces>button.active { 102 | opacity: 7; 103 | } -------------------------------------------------------------------------------- /modules/xserver.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services = { 5 | xserver = { 6 | enable = true; 7 | displayManager.lightdm = { 8 | enable = true; 9 | }; 10 | }; 11 | #displayManager.ly.enable = true; 12 | }; 13 | 14 | environment.systemPackages = with pkgs; [ 15 | xfce.tumbler 16 | xarchiver 17 | nautilus 18 | where-is-my-sddm-theme 19 | ]; 20 | environment.sessionVariables = { 21 | QT_QPA_PLATFORM = "wayland"; 22 | }; 23 | 24 | programs.thunar = { 25 | enable = true; 26 | plugins = with pkgs.xfce; [ 27 | thunar-archive-plugin 28 | thunar-media-tags-plugin 29 | ]; 30 | }; 31 | 32 | services.printing.enable = true; 33 | 34 | xdg.portal.config = { 35 | common = { 36 | # Electron apps and chromium fail to open the file picker for some reason. 37 | "org.freedesktop.impl.portal.FileChooser" = "gtk"; 38 | }; 39 | gnome = { 40 | default = [ 41 | "gnome" 42 | "gtk" 43 | ]; 44 | "org.freedesktop.impl.portal.Secret" = [ 45 | "gnome-keyring" 46 | ]; 47 | "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; 48 | }; 49 | }; 50 | } 51 | -------------------------------------------------------------------------------- /static/boliviainteligente-GCShbHteITQ-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ixxie/dotfiles/aabfcd1ba20fdb2ca56f462cf96cd70b89c4377a/static/boliviainteligente-GCShbHteITQ-unsplash.jpg -------------------------------------------------------------------------------- /static/jr-korpa-9XngoIpxcEo-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ixxie/dotfiles/aabfcd1ba20fdb2ca56f462cf96cd70b89c4377a/static/jr-korpa-9XngoIpxcEo-unsplash.jpg -------------------------------------------------------------------------------- /static/jr-korpa-O-p6tKWPPig-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ixxie/dotfiles/aabfcd1ba20fdb2ca56f462cf96cd70b89c4377a/static/jr-korpa-O-p6tKWPPig-unsplash.jpg -------------------------------------------------------------------------------- /static/markos-mant-Ln9wvXBDqr0-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ixxie/dotfiles/aabfcd1ba20fdb2ca56f462cf96cd70b89c4377a/static/markos-mant-Ln9wvXBDqr0-unsplash.jpg -------------------------------------------------------------------------------- /system.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | # host 5 | system.stateVersion = "24.05"; 6 | networking.hostName = "contingent"; 7 | security.sudo.wheelNeedsPassword = false; 8 | networking.enableIPv6 = true; 9 | 10 | boot = { 11 | # Use latest kernel 12 | kernelPackages = pkgs.linuxPackages_latest; 13 | # Use the gummiboot efi boot loader. 14 | loader = { 15 | systemd-boot.enable = true; 16 | efi.canTouchEfiVariables = true; 17 | }; 18 | }; 19 | 20 | # environment 21 | time.timeZone = "Europe/Paris"; 22 | i18n.defaultLocale = "en_IE.UTF-8"; 23 | environment.variables.EDITOR = "hx"; 24 | 25 | # enable swap file 26 | swapDevices = [ 27 | { 28 | device = "/var/lib/swapfile"; 29 | size = 64 * 1024; 30 | } 31 | ]; 32 | 33 | # firmware support 34 | nixpkgs.config.allowUnfree = true; 35 | } 36 | -------------------------------------------------------------------------------- /theme.nix: -------------------------------------------------------------------------------- 1 | { pkgs, inputs, ... }: 2 | 3 | { 4 | imports = [ 5 | inputs.stylix.nixosModules.stylix 6 | ]; 7 | 8 | stylix = { 9 | enable = true; 10 | autoEnable = true; 11 | base16Scheme = "${pkgs.base16-schemes}/share/themes/unikitty-dark.yaml"; 12 | opacity.terminal = 0.8; 13 | cursor = { 14 | size = 8; 15 | name = "graphite-dark"; 16 | package = pkgs.graphite-cursors; 17 | }; 18 | image = ./static/jr-korpa-O-p6tKWPPig-unsplash.jpg; 19 | fonts = { 20 | serif = { 21 | package = pkgs.nerd-fonts.monaspace; 22 | name = "MonaspiceXe Nerd Font"; 23 | }; 24 | sansSerif = { 25 | package = pkgs.nerd-fonts.monaspace; 26 | name = "MonaspiceNe Nerd Font"; 27 | }; 28 | monospace = { 29 | package = pkgs.nerd-fonts.monaspace; 30 | name = "MonaspiceKr Nerd Font"; 31 | }; 32 | emoji = { 33 | package = pkgs.twemoji-color-font; 34 | name = "Twemoji Color"; 35 | }; 36 | sizes = { 37 | applications = 11; 38 | terminal = 11; 39 | popups = 11; 40 | desktop = 11; 41 | }; 42 | }; 43 | }; 44 | home-manager.users.ixxie.stylix.iconTheme = { 45 | enable = true; 46 | package = pkgs.numix-icon-theme-circle; 47 | dark = "Numix-Circle"; 48 | light = "Numix-Circle-Light"; 49 | }; 50 | } 51 | -------------------------------------------------------------------------------- /user.nix: -------------------------------------------------------------------------------- 1 | { pkgs, inputs, ... }: 2 | 3 | { 4 | imports = [ 5 | inputs.home-manager.nixosModules.home-manager 6 | ]; 7 | home-manager = { 8 | backupFileExtension = "backup"; 9 | users.ixxie.home = { 10 | stateVersion = "24.05"; 11 | username = "ixxie"; 12 | sessionVariables = { 13 | EDITOR = "helix"; 14 | BROWSER = "firefox"; 15 | TERMINAL = "ghostty"; 16 | NIXOS_OZONE_WL = "1"; 17 | }; 18 | }; 19 | }; 20 | users.users.ixxie = { 21 | home = "/home/ixxie"; 22 | extraGroups = [ 23 | "wheel" 24 | "networkmanager" 25 | "adbusers" 26 | "audio" 27 | "docker" 28 | ]; 29 | isNormalUser = true; 30 | shell = pkgs.nushell; 31 | useDefaultShell = false; 32 | }; 33 | } 34 | --------------------------------------------------------------------------------