diff --git a/README.md b/README.md index 6977516..90191cd 100644 --- a/README.md +++ b/README.md @@ -168,6 +168,7 @@ Now, lets add a file to define your home. Create a file at `homes/x86_64-linux/< dircolors = { enable = true; enableZshIntegration = true; + enableNushellIntegration = true; }; }; diff --git a/catpuccin.omp.json b/catpuccin.omp.json deleted file mode 100644 index 2accb92..0000000 --- a/catpuccin.omp.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "palette": { - "os": "#ACB0BE", - "pink": "#F5BDE6", - "lavender": "#B7BDF8", - "blue": "#8AADF4", - "wight": "#FFFFFF", - "text": "#494D64" - }, - "blocks": [ - { - "alignment": "left", - "segments": [ - { - "background": "p:blue", - "foreground": "p:wight", - "powerline_symbol": "\ue0b4", - "leading_diamond": "\ue0b6", - "style": "diamond", - "template": "{{.Icon}} ", - "type": "os" - }, - { - "background": "p:blue", - "foreground": "p:text", - "powerline_symbol": "\ue0b4", - "style": "diamond", - "template": "{{ .UserName }}@{{ .HostName }}", - "type": "session" - }, - { - "background": "p:pink", - "foreground": "p:text", - "properties": { - "folder_icon": "..\ue5fe..", - "home_icon": "~", - "style": "agnoster_short" - }, - "powerline_symbol": "\ue0b4", - "style": "powerline", - "template": " {{ .Path }}", - "type": "path" - }, - { - "background": "p:lavender", - "foreground": "p:text", - "style": "powerline", - "properties": { - "branch_icon": "\ue725 ", - "cherry_pick_icon": "\ue29b ", - "commit_icon": "\uf417 ", - "fetch_status": false, - "fetch_upstream_icon": false, - "merge_icon": "\ue727 ", - "no_commits_icon": "\uf0c3 ", - "rebase_icon": "\ue728 ", - "revert_icon": "\uf0e2 ", - "tag_icon": "\uf412 " - }, - "powerline_symbol": "\ue0b4", - "template": " {{ .HEAD }}", - "type": "git" - } - ], - "type": "prompt" - } - ], - "final_space": true, - "version": 2 -} diff --git a/flake.lock b/flake.lock index d5860a1..df5784e 100644 --- a/flake.lock +++ b/flake.lock @@ -2,7 +2,7 @@ "nodes": { "agenix": { "inputs": { - "darwin": [], + "darwin": "darwin", "home-manager": "home-manager", "nixpkgs": [ "nixpkgs" @@ -10,11 +10,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1736955230, - "narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=", + "lastModified": 1747575206, + "narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=", "owner": "ryantm", "repo": "agenix", - "rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c", + "rev": "4835b1dc898959d8547a871ef484930675cb47f1", "type": "github" }, "original": { @@ -45,28 +45,6 @@ "type": "github" } }, - "anyrun": { - "inputs": { - "flake-parts": "flake-parts", - "nixpkgs": [ - "nixpkgs" - ], - "systems": "systems_3" - }, - "locked": { - "lastModified": 1735301051, - "narHash": "sha256-jU88Q9tP4vuvWYGQcmOdFwI9e2uMPVYJHbXdiklIH9o=", - "owner": "anyrun-org", - "repo": "anyrun", - "rev": "06017e753c8886d5296768dca80745ee09402a2d", - "type": "github" - }, - "original": { - "owner": "anyrun-org", - "repo": "anyrun", - "type": "github" - } - }, "aquamarine": { "inputs": { "hyprutils": [ @@ -87,11 +65,11 @@ ] }, "locked": { - "lastModified": 1742213273, - "narHash": "sha256-0l0vDb4anfsBu1rOs94bC73Hub+xEivgBAo6QXl2MmU=", + "lastModified": 1745357003, + "narHash": "sha256-jYwzQkv1r7HN/4qrAuKp+NR4YYNp2xDrOX5O9YVqkWo=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "484b732195cc53f4536ce4bd59a5c6402b1e7ccf", + "rev": "a19cf76ee1a15c1c12083fa372747ce46387289f", "type": "github" }, "original": { @@ -140,20 +118,17 @@ "inputs": { "nixpkgs": "nixpkgs_2", "pnpm2nix": "pnpm2nix", - "systems": "systems_6" + "systems": "systems_5" }, "locked": { - "lastModified": 1738787341, - "narHash": "sha256-7vUNfr5hmqwisNSLAWBnrXaJROFvGqDKGmhfQnwuYS4=", - "ref": "refs/heads/main", - "rev": "2b2a2ff39f372a2c31e0af343a5bca8759e79492", - "revCount": 28, - "type": "git", - "url": "https://git.zoeys.cloud/zoey/web" + "lastModified": 1745808560, + "narHash": "sha256-tCEg7taEdCsZ+p1A3/nHbIsGR8ucuRW4HQ+d80VS508=", + "path": "/home/zoey/dev/web", + "type": "path" }, "original": { - "type": "git", - "url": "https://git.zoeys.cloud/zoey/web" + "path": "/home/zoey/dev/web", + "type": "path" } }, "catppuccin": { @@ -161,11 +136,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1742599566, - "narHash": "sha256-xr6ntmiUPXSh9o9mJ7og9vxALMQs1EQhIhWUAO2D1M0=", + "lastModified": 1747519437, + "narHash": "sha256-uv9Wv59d+mckS2CkorOF484wp2G5TNGijdoBZ5RkAk0=", "owner": "catppuccin", "repo": "nix", - "rev": "5e303e8d7e251868fa79f83bbda69da90aa62402", + "rev": "3ba714046ee32373e88166e6e9474d6ae6a5b734", "type": "github" }, "original": { @@ -174,6 +149,29 @@ "type": "github" } }, + "chaotic": { + "inputs": { + "fenix": "fenix", + "flake-schemas": "flake-schemas", + "home-manager": "home-manager_2", + "jovian": "jovian", + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1747576719, + "narHash": "sha256-a+QFKYlsgWZyuCdFqjRout85mZjrtkq1dmMEPuB50qA=", + "owner": "chaotic-cx", + "repo": "nyx", + "rev": "a5137694fccd0a36dc0c578c3ce9b02278a8f198", + "type": "github" + }, + "original": { + "owner": "chaotic-cx", + "ref": "nyxpkgs-unstable", + "repo": "nyx", + "type": "github" + } + }, "crane": { "locked": { "lastModified": 1733016477, @@ -210,18 +208,25 @@ "type": "github" } }, - "crane_3": { + "darwin": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1731098351, - "narHash": "sha256-HQkYvKvaLQqNa10KEFGgWHfMAbWBfFp+4cAgkut+NNE=", - "owner": "ipetkov", - "repo": "crane", - "rev": "ef80ead953c1b28316cc3f8613904edc2eb90c28", + "lastModified": 1744478979, + "narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "43975d782b418ebf4969e9ccba82466728c2851b", "type": "github" }, "original": { - "owner": "ipetkov", - "repo": "crane", + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", "type": "github" } }, @@ -232,11 +237,11 @@ ] }, "locked": { - "lastModified": 1741786315, - "narHash": "sha256-VT65AE2syHVj6v/DGB496bqBnu1PXrrzwlw07/Zpllc=", + "lastModified": 1747274630, + "narHash": "sha256-87RJwXbfOHyzTB9LYagAQ6vOZhszCvd8Gvudu+gf3qo=", "owner": "nix-community", "repo": "disko", - "rev": "0d8c6ad4a43906d14abd5c60e0ffe7b587b213de", + "rev": "ec7c109a4f794fce09aad87239eab7f66540b888", "type": "github" }, "original": { @@ -247,15 +252,15 @@ }, "emacs-overlay": { "inputs": { - "nixpkgs": "nixpkgs_5", + "nixpkgs": "nixpkgs_6", "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1742663916, - "narHash": "sha256-aLpOsp8iyuHFO6fZfCn0xkssHCYyrPqANVJWx86yb1g=", + "lastModified": 1747618089, + "narHash": "sha256-mbzwxQlxNamIMErEfwWRZ+ECmlQzxJ4eJvOM6/fxV5s=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "19f9488c8af0a0572e610d1bbf9d9b833df57524", + "rev": "1b2bc802bbac29f4695e39fbf982944c0999b45d", "type": "github" }, "original": { @@ -264,6 +269,28 @@ "type": "github" } }, + "fenix": { + "inputs": { + "nixpkgs": [ + "chaotic", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1747392669, + "narHash": "sha256-zky3+lndxKRu98PAwVK8kXPdg+Q1NVAhaI7YGrboKYA=", + "owner": "nix-community", + "repo": "fenix", + "rev": "c3c27e603b0d9b5aac8a16236586696338856fbb", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -331,11 +358,11 @@ "flake-compat_4": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -347,11 +374,11 @@ "flake-compat_5": { "flake": false, "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -425,27 +452,6 @@ } }, "flake-parts": { - "inputs": { - "nixpkgs-lib": [ - "anyrun", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1727826117, - "narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_2": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" }, @@ -463,7 +469,7 @@ "type": "github" } }, - "flake-parts_3": { + "flake-parts_2": { "inputs": { "nixpkgs-lib": [ "lanzaboote", @@ -484,7 +490,7 @@ "type": "github" } }, - "flake-parts_4": { + "flake-parts_3": { "inputs": { "nixpkgs-lib": [ "neovim-nightly-overlay", @@ -492,11 +498,11 @@ ] }, "locked": { - "lastModified": 1741352980, - "narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=", + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", "type": "github" }, "original": { @@ -505,7 +511,7 @@ "type": "github" } }, - "flake-parts_5": { + "flake-parts_4": { "inputs": { "nixpkgs-lib": [ "neovim-nightly-overlay", @@ -514,11 +520,11 @@ ] }, "locked": { - "lastModified": 1741352980, - "narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=", + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", "type": "github" }, "original": { @@ -526,16 +532,34 @@ "type": "indirect" } }, - "flake-parts_6": { + "flake-parts_5": { "inputs": { "nixpkgs-lib": "nixpkgs-lib_2" }, "locked": { - "lastModified": 1741352980, - "narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=", + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", "type": "github" }, "original": { @@ -546,7 +570,7 @@ }, "flake-parts_7": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib_3" + "nixpkgs-lib": "nixpkgs-lib_4" }, "locked": { "lastModified": 1727826117, @@ -564,7 +588,7 @@ }, "flake-parts_8": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib_4" + "nixpkgs-lib": "nixpkgs-lib_5" }, "locked": { "lastModified": 1719994518, @@ -580,9 +604,23 @@ "type": "github" } }, + "flake-schemas": { + "locked": { + "lastModified": 1721999734, + "narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=", + "rev": "0a5c42297d870156d9c57d8f99e476b738dcd982", + "revCount": 75, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz" + } + }, "flake-utils": { "inputs": { - "systems": "systems_4" + "systems": "systems_3" }, "locked": { "lastModified": 1701680307, @@ -600,7 +638,7 @@ }, "flake-utils-plus": { "inputs": { - "flake-utils": "flake-utils_8" + "flake-utils": "flake-utils_7" }, "locked": { "lastModified": 1715533576, @@ -619,7 +657,7 @@ }, "flake-utils-plus_2": { "inputs": { - "flake-utils": "flake-utils_9" + "flake-utils": "flake-utils_8" }, "locked": { "lastModified": 1715533576, @@ -638,7 +676,7 @@ }, "flake-utils_2": { "inputs": { - "systems": "systems_5" + "systems": "systems_4" }, "locked": { "lastModified": 1701680307, @@ -656,7 +694,7 @@ }, "flake-utils_3": { "inputs": { - "systems": "systems_7" + "systems": "systems_6" }, "locked": { "lastModified": 1731533236, @@ -674,7 +712,7 @@ }, "flake-utils_4": { "inputs": { - "systems": "systems_11" + "systems": "systems_10" }, "locked": { "lastModified": 1710146030, @@ -692,7 +730,7 @@ }, "flake-utils_5": { "inputs": { - "systems": "systems_12" + "systems": "systems_11" }, "locked": { "lastModified": 1726560853, @@ -710,25 +748,7 @@ }, "flake-utils_6": { "inputs": { - "systems": "systems_13" - }, - "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_7": { - "inputs": { - "systems": "systems_14" + "systems": "systems_12" }, "locked": { "lastModified": 1701680307, @@ -744,9 +764,9 @@ "type": "github" } }, - "flake-utils_8": { + "flake-utils_7": { "inputs": { - "systems": "systems_18" + "systems": "systems_16" }, "locked": { "lastModified": 1694529238, @@ -762,9 +782,9 @@ "type": "github" } }, - "flake-utils_9": { + "flake-utils_8": { "inputs": { - "systems": "systems_19" + "systems": "systems_17" }, "locked": { "lastModified": 1694529238, @@ -805,11 +825,11 @@ "zon2nix": "zon2nix" }, "locked": { - "lastModified": 1742589311, - "narHash": "sha256-YCAEmOPDSHVKygFov2zOg3Fkb060SRgjiGi4P7y9+kc=", + "lastModified": 1747426608, + "narHash": "sha256-ygRFvCVdVEAU95tH2EMMacYH/T42tC3mtDkt5lBJT9U=", "owner": "ghostty-org", "repo": "ghostty", - "rev": "747c43ffa0047aa2ef550aa361ba63f4060a85ba", + "rev": "b1af4a597f359491f4b3197a845b39ec86db475a", "type": "github" }, "original": { @@ -820,19 +840,45 @@ }, "git-hooks": { "inputs": { - "flake-compat": "flake-compat_6", + "flake-compat": [ + "mailserver", + "flake-compat" + ], "gitignore": "gitignore_3", + "nixpkgs": [ + "mailserver", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1742649964, + "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "git-hooks_2": { + "inputs": { + "flake-compat": "flake-compat_6", + "gitignore": "gitignore_4", "nixpkgs": [ "neovim-nightly-overlay", "nixpkgs" ] }, "locked": { - "lastModified": 1742300892, - "narHash": "sha256-QmF0proyjXI9YyZO9GZmc7/uEu5KVwCtcdLsKSoxPAI=", + "lastModified": 1747372754, + "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "ea26a82dda75bee6783baca6894040c8e6599728", + "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", "type": "github" }, "original": { @@ -886,6 +932,28 @@ } }, "gitignore_3": { + "inputs": { + "nixpkgs": [ + "mailserver", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_4": { "inputs": { "nixpkgs": [ "neovim-nightly-overlay", @@ -909,18 +977,18 @@ }, "hercules-ci-effects": { "inputs": { - "flake-parts": "flake-parts_5", + "flake-parts": "flake-parts_4", "nixpkgs": [ "neovim-nightly-overlay", "nixpkgs" ] }, "locked": { - "lastModified": 1742014779, - "narHash": "sha256-I6fG1zrfdLFcp/imGZElig0BJO3YU0QEXLgvwWoOpJ8=", + "lastModified": 1747284884, + "narHash": "sha256-lTSKhRrassMcJ1ZsuUVunyl/F04vvCKY80HB/4rvvm4=", "owner": "hercules-ci", "repo": "hercules-ci-effects", - "rev": "524637ef84c177661690b924bf64a1ce18072a2c", + "rev": "7168f6002a6b48a9b6151e1e97e974a0722ecfdc", "type": "github" }, "original": { @@ -937,11 +1005,11 @@ ] }, "locked": { - "lastModified": 1703113217, - "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", + "lastModified": 1745494811, + "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=", "owner": "nix-community", "repo": "home-manager", - "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", + "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be", "type": "github" }, "original": { @@ -953,15 +1021,57 @@ "home-manager_2": { "inputs": { "nixpkgs": [ + "chaotic", "nixpkgs" ] }, "locked": { - "lastModified": 1742670145, - "narHash": "sha256-xQ2F9f+ICAGBp/nNv3ddD2U4ZvzuLOci0u/5lyMXPvk=", + "lastModified": 1747439237, + "narHash": "sha256-5rCGrnkglKKj4cav1U3HC+SIUNJh08pqOK4spQv9RjA=", "owner": "nix-community", "repo": "home-manager", - "rev": "63e77d09a133ac641a0c204e7cfb0c97e133706d", + "rev": "ae755329092c87369b9e9a1510a8cf1ce2b1c708", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_3": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747565775, + "narHash": "sha256-B6jmKHUEX1jxxcdoYHl7RVaeohtAVup8o3nuVkzkloA=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "97118a310eb8e13bc1b9b12d67267e55b7bee6c8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_4": { + "inputs": { + "nixpkgs": [ + "zen-browser", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1743604125, + "narHash": "sha256-ZD61DNbsBt1mQbinAaaEqKaJk2RFo9R/j+eYWeGMx7A=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "180fd43eea296e62ae68e079fcf56aba268b9a1a", "type": "github" }, "original": { @@ -986,11 +1096,11 @@ ] }, "locked": { - "lastModified": 1742215578, - "narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=", + "lastModified": 1745948457, + "narHash": "sha256-lzTV10FJTCGNtMdgW5YAhCAqezeAzKOd/97HbQK8GTU=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "2fd36421c21aa87e2fe3bee11067540ae612f719", + "rev": "ac903e80b33ba6a88df83d02232483d99f327573", "type": "github" }, "original": { @@ -1015,11 +1125,11 @@ ] }, "locked": { - "lastModified": 1739049071, - "narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=", + "lastModified": 1745015490, + "narHash": "sha256-apEJ9zoSzmslhJ2vOKFcXTMZLUFYzh1ghfB6Rbw3Low=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73", + "rev": "60754910946b4e2dc1377b967b7156cb989c5873", "type": "github" }, "original": { @@ -1037,14 +1147,14 @@ "nixpkgs": [ "nixpkgs" ], - "systems": "systems_8" + "systems": "systems_7" }, "locked": { - "lastModified": 1742397293, - "narHash": "sha256-WVREToubLhIlogCoNJzo+HdatLKkEushwStDU1uyRnc=", + "lastModified": 1747052241, + "narHash": "sha256-X979gxgClu/MnL0vcBaKDkpFIWg2KhOZfAI8BFlNsEM=", "owner": "hyprwm", "repo": "hypridle", - "rev": "71e875e49e583c7b8b1364b55dfe494375c4e3ea", + "rev": "ecf2a3649dfb2e8a45aa63757ed571f1bfedb320", "type": "github" }, "original": { @@ -1067,15 +1177,15 @@ "nixpkgs" ], "pre-commit-hooks": "pre-commit-hooks", - "systems": "systems_9", + "systems": "systems_8", "xdph": "xdph" }, "locked": { - "lastModified": 1742664841, - "narHash": "sha256-+ENSZyoLdLIdHg/A49osnJq8tcsljCTDjGUXK9E7Eqo=", + "lastModified": 1747610850, + "narHash": "sha256-eGOtDlq3h+r/X/j4oSNo6cmQlt67TVolgUJMnGKTRt4=", "ref": "refs/heads/main", - "rev": "6ab5a0befb45e90eb45b8d6582e68d13147297dc", - "revCount": 5919, + "rev": "eb3b38d40baca5c05ddbc1507b3d3f02a0ccb164", + "revCount": 6127, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -1123,11 +1233,11 @@ ] }, "locked": { - "lastModified": 1738422629, - "narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=", + "lastModified": 1743714874, + "narHash": "sha256-yt8F7NhMFCFHUHy/lNjH/pjZyIDFNk52Q4tivQ31WFo=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed", + "rev": "3a5c2bda1c1a4e55cc1330c782547695a93f05b2", "type": "github" }, "original": { @@ -1191,11 +1301,11 @@ ] }, "locked": { - "lastModified": 1739048983, - "narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=", + "lastModified": 1745951494, + "narHash": "sha256-2dModE32doiyQMmd6EDAQeZnz+5LOs6KXyE0qX76WIg=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8", + "rev": "4be1d324faf8d6e82c2be9f8510d299984dfdd2e", "type": "github" }, "original": { @@ -1249,11 +1359,11 @@ ] }, "locked": { - "lastModified": 1741191527, - "narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=", + "lastModified": 1746655412, + "narHash": "sha256-kVQ0bHVtX6baYxRWWIh4u3LNJZb9Zcm2xBeDPOGz5BY=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "72df3861f1197e41b078faa3e38eedd60e00018d", + "rev": "557241780c179cf7ef224df392f8e67dab6cef83", "type": "github" }, "original": { @@ -1299,11 +1409,11 @@ ] }, "locked": { - "lastModified": 1741534688, - "narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=", + "lastModified": 1746635225, + "narHash": "sha256-W9G9bb0zRYDBRseHbVez0J8qVpD5QbizX67H/vsudhM=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3", + "rev": "674ea57373f08b7609ce93baff131117a0dfe70d", "type": "github" }, "original": { @@ -1362,15 +1472,37 @@ "type": "github" } }, + "jovian": { + "inputs": { + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "chaotic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747466853, + "narHash": "sha256-/evYltwuF8Kz1odgocWnguh/8VQV1i76VB4yMTU9m7k=", + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "rev": "0ba1a34fa6d995fe433109f0ad66de8d5613d46e", + "type": "github" + }, + "original": { + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "type": "github" + } + }, "kb-gui": { "inputs": { "crane": "crane", - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts", "nixpkgs": [ "nixpkgs" ], "rust-overlay": "rust-overlay", - "systems": "systems_10", + "systems": "systems_9", "treefmt-nix": "treefmt-nix" }, "locked": { @@ -1391,7 +1523,7 @@ "inputs": { "crane": "crane_2", "flake-compat": "flake-compat_3", - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_2", "flake-utils": "flake-utils_4", "nixpkgs": [ "nixpkgs" @@ -1417,8 +1549,8 @@ "lexical": { "inputs": { "flake-parts": "flake-parts_8", - "nixpkgs": "nixpkgs_18", - "systems": "systems_22" + "nixpkgs": "nixpkgs_22", + "systems": "systems_21" }, "locked": { "lastModified": 1727126932, @@ -1473,15 +1605,16 @@ "inputs": { "blobs": "blobs", "flake-compat": "flake-compat_4", - "nixpkgs": "nixpkgs_8", + "git-hooks": "git-hooks", + "nixpkgs": "nixpkgs_9", "nixpkgs-24_11": "nixpkgs-24_11" }, "locked": { - "lastModified": 1742413977, - "narHash": "sha256-NkhM9GVu3HL+MiXtGD0TjuPCQ4GFVJPBZ8KyI2cFDGU=", + "lastModified": 1747320434, + "narHash": "sha256-wOW99SCOovRlX5y8+W1cRrS3mEN1QA0XTHMRfr3NMB8=", "owner": "simple-nixos-mailserver", "repo": "nixos-mailserver", - "rev": "b4fbffe79c00f19be94b86b4144ff67541613659", + "rev": "433520257af7170824ab6e567d49b8e305e776e9", "type": "gitlab" }, "original": { @@ -1490,43 +1623,22 @@ "type": "gitlab" } }, - "mc-honeypot": { - "inputs": { - "crane": "crane_3", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1732194526, - "narHash": "sha256-qgPm10THq0V3yc26TXU0RO2LFLAH3qpWKAbm9SNU66Q=", - "owner": "Duckulus", - "repo": "mc-honeypot", - "rev": "f0611215c6cea398736bbb2af4b5ad38c77d5c47", - "type": "github" - }, - "original": { - "owner": "Duckulus", - "repo": "mc-honeypot", - "type": "github" - } - }, "neovim-nightly-overlay": { "inputs": { "flake-compat": "flake-compat_5", - "flake-parts": "flake-parts_4", - "git-hooks": "git-hooks", + "flake-parts": "flake-parts_3", + "git-hooks": "git-hooks_2", "hercules-ci-effects": "hercules-ci-effects", "neovim-src": "neovim-src", - "nixpkgs": "nixpkgs_9", + "nixpkgs": "nixpkgs_10", "treefmt-nix": "treefmt-nix_2" }, "locked": { - "lastModified": 1742576680, - "narHash": "sha256-A9Yo0HZyANBdplEAVpY72Ml4EV32MCgk6Hlacz0/0Ak=", + "lastModified": 1747554936, + "narHash": "sha256-LBFEVTt3JISA/HDHznJanvlNvKllNfILr1nfI8KZmVM=", "owner": "nix-community", "repo": "neovim-nightly-overlay", - "rev": "e0208ec30864247b6614e08051151a649044e93c", + "rev": "5a732bf3edb47767a25c3b05436e4c21f91edf91", "type": "github" }, "original": { @@ -1538,11 +1650,11 @@ "neovim-src": { "flake": false, "locked": { - "lastModified": 1742426477, - "narHash": "sha256-MLlU8s/lVKHfYcl9g8Q4nOl3BVWc627fVII58qtL9d8=", + "lastModified": 1747523215, + "narHash": "sha256-55RIMak4EwDaLdNTkM+4d3LjC90wlkNRaaG8DupK3AM=", "owner": "neovim", "repo": "neovim", - "rev": "175c09bd660d0cea62288e74cea925a9b15bee55", + "rev": "5661f74ab2a6ef0c497ef2ea49bc58ea89b6ab6b", "type": "github" }, "original": { @@ -1551,6 +1663,138 @@ "type": "github" } }, + "niri": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": "nixpkgs_11", + "nixpkgs-stable": "nixpkgs-stable_4", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1747600015, + "narHash": "sha256-ztNwDGru5Z/wu5I5SgkU03cx3Vz9gwLeFwcmlzeDwiA=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "1db4f11c1d3e30e29ef87162a6137bccbcf8e18f", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "type": "github" + } + }, + "niri-src": { + "inputs": { + "nix-filter": "nix-filter", + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay_3" + }, + "locked": { + "lastModified": 1747486745, + "narHash": "sha256-ngQ+iTHmBJkEbsjYfCWTJdV8gHhOCTkV8K0at6Y+YHI=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "ae89cb6017668f3a81ccd92461cbbc70ab8377d0", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1740117926, + "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "b94a5db8790339cf9134873d8b490be69e02ac71", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v25.02", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1747486745, + "narHash": "sha256-ngQ+iTHmBJkEbsjYfCWTJdV8gHhOCTkV8K0at6Y+YHI=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "ae89cb6017668f3a81ccd92461cbbc70ab8377d0", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, + "nix-filter": { + "locked": { + "lastModified": 1731533336, + "narHash": "sha256-oRam5PS1vcrr5UPgALW0eo1m/5/pls27Z/pabHNy2Ms=", + "owner": "numtide", + "repo": "nix-filter", + "rev": "f7653272fd234696ae94229839a99b73c9ab7de0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nix-filter", + "type": "github" + } + }, + "nix-gaming": { + "inputs": { + "flake-parts": "flake-parts_5", + "nixpkgs": "nixpkgs_12" + }, + "locked": { + "lastModified": 1746818569, + "narHash": "sha256-kFuLmXX/3zVCz0wlyN8ZfXdt3Ri/cOOqXYgDKwVi0lk=", + "path": "/home/zoey/dev/nix-gaming", + "type": "path" + }, + "original": { + "path": "/home/zoey/dev/nix-gaming", + "type": "path" + } + }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "chaotic", + "jovian", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729697500, + "narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=", + "owner": "zhaofengli", + "repo": "nix-github-actions", + "rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf", + "type": "github" + }, + "original": { + "owner": "zhaofengli", + "ref": "matrix-name", + "repo": "nix-github-actions", + "type": "github" + } + }, "nixlib": { "locked": { "lastModified": 1736643958, @@ -1589,11 +1833,11 @@ }, "nixos-stable": { "locked": { - "lastModified": 1742512142, - "narHash": "sha256-8XfURTDxOm6+33swQJu/hx6xw1Tznl8vJJN5HwVqckg=", + "lastModified": 1747485343, + "narHash": "sha256-YbsZyuRE1tobO9sv0PUwg81QryYo3L1F3R3rF9bcG38=", "owner": "nixos", "repo": "nixpkgs", - "rev": "7105ae3957700a9646cc4b766f5815b23ed0c682", + "rev": "9b5ac7ad45298d58640540d0323ca217f32a6762", "type": "github" }, "original": { @@ -1605,11 +1849,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1742422364, - "narHash": "sha256-mNqIplmEohk5jRkqYqG19GA8MbQ/D4gQSK0Mu4LvfRQ=", + "lastModified": 1747542820, + "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "a84ebe20c6bc2ecbcfb000a50776219f48d134cc", + "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", "type": "github" }, "original": { @@ -1619,17 +1863,18 @@ }, "nixpkgs-24_11": { "locked": { - "lastModified": 1734083684, - "narHash": "sha256-5fNndbndxSx5d+C/D0p/VF32xDiJCJzyOqorOYW4JEo=", + "lastModified": 1747209494, + "narHash": "sha256-fLise+ys+bpyjuUUkbwqo5W/UyIELvRz9lPBPoB0fbM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "314e12ba369ccdb9b352a4db26ff419f7c49fa84", + "rev": "5d736263df906c5da72ab0f372427814de2f52f8", "type": "github" }, "original": { - "id": "nixpkgs", + "owner": "NixOS", "ref": "nixos-24.11", - "type": "indirect" + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs-lib": { @@ -1646,11 +1891,11 @@ }, "nixpkgs-lib_2": { "locked": { - "lastModified": 1740877520, - "narHash": "sha256-oiwv/ZK/2FhGxrCkQkB83i7GnWXPPLzoqFHpDD3uYpk=", + "lastModified": 1743296961, + "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "147dee35aab2193b174e4c0868bd80ead5ce755c", + "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", "type": "github" }, "original": { @@ -1660,6 +1905,21 @@ } }, "nixpkgs-lib_3": { + "locked": { + "lastModified": 1743296961, + "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-lib_4": { "locked": { "lastModified": 1727825735, "narHash": "sha256-0xHYkMkeLVQAMa7gvkddbPqpxph+hDzdu1XdGPJR+Os=", @@ -1671,7 +1931,7 @@ "url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" } }, - "nixpkgs-lib_4": { + "nixpkgs-lib_5": { "locked": { "lastModified": 1719876945, "narHash": "sha256-Fm2rDDs86sHy0/1jxTOKB1118Q0O3Uc7EC0iXvXKpbI=", @@ -1685,11 +1945,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1742512142, - "narHash": "sha256-8XfURTDxOm6+33swQJu/hx6xw1Tznl8vJJN5HwVqckg=", + "lastModified": 1747485343, + "narHash": "sha256-YbsZyuRE1tobO9sv0PUwg81QryYo3L1F3R3rF9bcG38=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7105ae3957700a9646cc4b766f5815b23ed0c682", + "rev": "9b5ac7ad45298d58640540d0323ca217f32a6762", "type": "github" }, "original": { @@ -1731,6 +1991,22 @@ "type": "github" } }, + "nixpkgs-stable_4": { + "locked": { + "lastModified": 1747485343, + "narHash": "sha256-YbsZyuRE1tobO9sv0PUwg81QryYo3L1F3R3rF9bcG38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9b5ac7ad45298d58640540d0323ca217f32a6762", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-unstable": { "locked": { "lastModified": 1741865919, @@ -1749,27 +2025,27 @@ }, "nixpkgs_10": { "locked": { - "lastModified": 1742422364, - "narHash": "sha256-mNqIplmEohk5jRkqYqG19GA8MbQ/D4gQSK0Mu4LvfRQ=", - "owner": "nixos", + "lastModified": 1747426788, + "narHash": "sha256-N4cp0asTsJCnRMFZ/k19V9akkxb7J/opG+K+jU57JGc=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "a84ebe20c6bc2ecbcfb000a50776219f48d134cc", + "rev": "12a55407652e04dcf2309436eb06fef0d3713ef3", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_11": { "locked": { - "lastModified": 1720031269, - "narHash": "sha256-rwz8NJZV+387rnWpTYcXaRNvzUSnnF9aHONoJIYmiUQ=", + "lastModified": 1747542820, + "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9f4128e00b0ae8ec65918efeba59db998750ead6", + "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", "type": "github" }, "original": { @@ -1780,6 +2056,38 @@ } }, "nixpkgs_12": { + "locked": { + "lastModified": 1746269363, + "narHash": "sha256-Q0lKWway9OmZnkDTpAoAE9VLXHOHqCqdJ3N0tkSM99g=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b6aef6c3553f849e1e6c08f1bcd3061df2b69fc4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_13": { + "locked": { + "lastModified": 1747542820, + "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { "locked": { "lastModified": 1702151865, "narHash": "sha256-9VAt19t6yQa7pHZLDbil/QctAgVsA66DLnzdRGqDisg=", @@ -1795,7 +2103,7 @@ "type": "github" } }, - "nixpkgs_13": { + "nixpkgs_15": { "locked": { "lastModified": 1736189585, "narHash": "sha256-GBC2LIBk9BuJR4HXfjuNlIWeY15U6jFvaqc7PeToGLw=", @@ -1811,7 +2119,7 @@ "type": "github" } }, - "nixpkgs_14": { + "nixpkgs_16": { "locked": { "lastModified": 1712883908, "narHash": "sha256-icE1IJE9fHcbDfJ0+qWoDdcBXUoZCcIJxME4lMHwvSM=", @@ -1827,13 +2135,13 @@ "type": "github" } }, - "nixpkgs_15": { + "nixpkgs_17": { "locked": { - "lastModified": 1736320768, - "narHash": "sha256-nIYdTAiKIGnFNugbomgBJR+Xv5F1ZQU+HfaBqJKroC0=", + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4bc9c909d9ac828a039f288cf872d16d38185db8", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", "type": "github" }, "original": { @@ -1843,7 +2151,23 @@ "type": "github" } }, - "nixpkgs_16": { + "nixpkgs_18": { + "locked": { + "lastModified": 1744868846, + "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_19": { "locked": { "lastModified": 1740547748, "narHash": "sha256-Ly2fBL1LscV+KyCqPRufUBuiw+zmWrlJzpWOWbahplg=", @@ -1859,36 +2183,6 @@ "type": "github" } }, - "nixpkgs_17": { - "locked": { - "lastModified": 1742288794, - "narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_18": { - "locked": { - "lastModified": 1719931832, - "narHash": "sha256-0LD+KePCKKEb4CcPsTBOwf019wDtZJanjoKm1S8q3Do=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "0aeab749216e4c073cece5d34bc01b79e717c3e0", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, "nixpkgs_2": { "locked": { "lastModified": 1712883908, @@ -1905,6 +2199,52 @@ "type": "github" } }, + "nixpkgs_20": { + "locked": { + "lastModified": 1738142207, + "narHash": "sha256-NGqpVVxNAHwIicXpgaVqJEJWeyqzoQJ9oc8lnK9+WC4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9d3ae807ebd2981d593cddd0080856873139aa40", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_21": { + "locked": { + "lastModified": 1743448293, + "narHash": "sha256-bmEPmSjJakAp/JojZRrUvNcDX2R5/nuX6bm+seVaGhs=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "77b584d61ff80b4cef9245829a6f1dfad5afdfa3", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_22": { + "locked": { + "lastModified": 1719931832, + "narHash": "sha256-0LD+KePCKKEb4CcPsTBOwf019wDtZJanjoKm1S8q3Do=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0aeab749216e4c073cece5d34bc01b79e717c3e0", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, "nixpkgs_3": { "locked": { "lastModified": 1702151865, @@ -1923,11 +2263,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1742288794, - "narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=", + "lastModified": 1744463964, + "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42", + "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", "type": "github" }, "original": { @@ -1939,11 +2279,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1742422364, - "narHash": "sha256-mNqIplmEohk5jRkqYqG19GA8MbQ/D4gQSK0Mu4LvfRQ=", + "lastModified": 1747327360, + "narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a84ebe20c6bc2ecbcfb000a50776219f48d134cc", + "rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46", "type": "github" }, "original": { @@ -1954,6 +2294,22 @@ } }, "nixpkgs_6": { + "locked": { + "lastModified": 1747542820, + "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { "locked": { "lastModified": 1728538411, "narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=", @@ -1969,7 +2325,7 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { "lastModified": 1731890469, "narHash": "sha256-D1FNZ70NmQEwNxpSSdTXCSklBH1z2isPR84J6DQrJGs=", @@ -1985,56 +2341,22 @@ "type": "github" } }, - "nixpkgs_8": { - "locked": { - "lastModified": 1732014248, - "narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "23e89b7da85c3640bbc2173fe04f4bd114342367", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, "nixpkgs_9": { "locked": { - "lastModified": 1742395137, - "narHash": "sha256-WWNNjCSzQCtATpCFEijm81NNG1xqlLMVbIzXAiZysbs=", + "lastModified": 1747179050, + "narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2a725d40de138714db4872dc7405d86457aa17ad", + "rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixpkgs-unstable", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, - "opnix": { - "inputs": { - "flake-utils": "flake-utils_6", - "nixpkgs": "nixpkgs_11" - }, - "locked": { - "lastModified": 1733770284, - "narHash": "sha256-cZha5DPsmr1H007pn/95t2wIktEUSepjmLm0RL/bu50=", - "owner": "brizzbuzz", - "repo": "opnix", - "rev": "4696993a9ef5f37f7d75b8aa64db0053c85eaa10", - "type": "github" - }, - "original": { - "owner": "brizzbuzz", - "repo": "opnix", - "type": "github" - } - }, "pnpm2nix": { "inputs": { "flake-utils": "flake-utils_2", @@ -2056,8 +2378,8 @@ }, "pnpm2nix_2": { "inputs": { - "flake-utils": "flake-utils_7", - "nixpkgs": "nixpkgs_12" + "flake-utils": "flake-utils_6", + "nixpkgs": "nixpkgs_14" }, "locked": { "lastModified": 1706694632, @@ -2075,7 +2397,7 @@ }, "posting": { "inputs": { - "nixpkgs": "nixpkgs_13", + "nixpkgs": "nixpkgs_15", "utils": "utils" }, "locked": { @@ -2102,11 +2424,11 @@ ] }, "locked": { - "lastModified": 1742058297, - "narHash": "sha256-b4SZc6TkKw8WQQssbN5O2DaCEzmFfvSTPYHlx/SFW9Y=", + "lastModified": 1747372754, + "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "59f17850021620cd348ad2e9c0c64f4e6325ce2a", + "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", "type": "github" }, "original": { @@ -2159,21 +2481,18 @@ }, "resume": { "inputs": { - "nixpkgs": "nixpkgs_14", - "systems": "systems_16" + "nixpkgs": "nixpkgs_16", + "systems": "systems_14" }, "locked": { - "lastModified": 1741033401, - "narHash": "sha256-VXEG88hZcNnWXkC9k9OHnYR20b0w8WnnhNVHhXfUtTs=", - "ref": "refs/heads/main", - "rev": "e2efd198fd0cb9202e1f034b71e26af20284ac8c", - "revCount": 31, - "type": "git", - "url": "https://git.zoeys.cloud/zoey/resume" + "lastModified": 1744680618, + "narHash": "sha256-sGJjcRalbMdWB5LjH21oQ5BIYG9t+8PkkrlSIFnSErc=", + "path": "/home/zoey/dev/resume", + "type": "path" }, "original": { - "type": "git", - "url": "https://git.zoeys.cloud/zoey/resume" + "path": "/home/zoey/dev/resume", + "type": "path" } }, "rio-term": { @@ -2182,15 +2501,15 @@ "nixpkgs": [ "nixpkgs" ], - "rust-overlay": "rust-overlay_3", - "systems": "systems_17" + "rust-overlay": "rust-overlay_4", + "systems": "systems_15" }, "locked": { - "lastModified": 1742634895, - "narHash": "sha256-vWxkx9/dGzAzaVo177H2VO796pc3UTUqwOqH1J9xUyM=", + "lastModified": 1747559815, + "narHash": "sha256-8hVMUrue1shGUEqnJ/yWzbgxjy0390XgbQONo0YfUbA=", "owner": "raphamorim", "repo": "rio", - "rev": "d0ff00eca8d0a9f096d4245e4ec7af850d19d1a9", + "rev": "13434cbbb8f0fc74e71e6fbc66db35fe6698f2ac", "type": "github" }, "original": { @@ -2203,44 +2522,64 @@ "inputs": { "agenix": "agenix", "ags": "ags", - "anyrun": "anyrun", "awsvpnclient": "awsvpnclient", "blog": "blog", "catppuccin": "catppuccin", + "chaotic": "chaotic", "disko": "disko", "emacs-overlay": "emacs-overlay", "ghostty": "ghostty", - "home-manager": "home-manager_2", + "home-manager": "home-manager_3", "hypridle": "hypridle", "hyprland": "hyprland", "kb-gui": "kb-gui", "lanzaboote": "lanzaboote", "lix-module": "lix-module", "mailserver": "mailserver", - "mc-honeypot": "mc-honeypot", "neovim-nightly-overlay": "neovim-nightly-overlay", + "niri": "niri", + "niri-src": "niri-src", + "nix-gaming": "nix-gaming", "nixos-generators": "nixos-generators", "nixos-stable": "nixos-stable", - "nixpkgs": "nixpkgs_10", - "opnix": "opnix", + "nixpkgs": "nixpkgs_13", "pnpm2nix": "pnpm2nix_2", "posting": "posting", "resume": "resume", "rio-term": "rio-term", - "rust-overlay": "rust-overlay_4", + "rust-overlay": "rust-overlay_5", "snowfall-lib": "snowfall-lib", "solaar": "solaar", + "sops-nix": "sops-nix", "spicetify-nix": "spicetify-nix", - "systems": "systems_21", + "systems": "systems_19", "umu": "umu", + "walker": "walker", "waybar": "waybar", "zen-browser": "zen-browser", "zoeycomputer": "zoeycomputer" } }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1747323949, + "narHash": "sha256-G4NwzhODScKnXqt2mEQtDFOnI0wU3L1WxsiHX3cID/0=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "f8e784353bde7cbf9a9046285c1caf41ac484ebe", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, "rust-overlay": { "inputs": { - "nixpkgs": "nixpkgs_6" + "nixpkgs": "nixpkgs_7" }, "locked": { "lastModified": 1733279627, @@ -2283,14 +2622,17 @@ }, "rust-overlay_3": { "inputs": { - "nixpkgs": "nixpkgs_15" + "nixpkgs": [ + "niri-src", + "nixpkgs" + ] }, "locked": { - "lastModified": 1741400194, - "narHash": "sha256-tEpgT+q5KlGjHSm8MnINgTPErEl8YDzX3Eps8PVc09g=", + "lastModified": 1742697269, + "narHash": "sha256-Lpp0XyAtIl1oGJzNmTiTGLhTkcUjwSkEb0gOiNzYFGM=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "16b6045a232fea0e9e4c69e55a6e269607dd8e3f", + "rev": "01973c84732f9275c50c5f075dd1f54cc04b3316", "type": "github" }, "original": { @@ -2300,17 +2642,35 @@ } }, "rust-overlay_4": { + "inputs": { + "nixpkgs": "nixpkgs_17" + }, + "locked": { + "lastModified": 1747449297, + "narHash": "sha256-veyXchTz6eWwvuW5X49UluHkheHkFcqHJSwGuKBhrmQ=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "f44db7d7cea4528288780c6347756173a8248225", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_5": { "inputs": { "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1742610648, - "narHash": "sha256-9jWi3gw3fEIgEslnFjH/s1I+Iyf1+4t5B1Ed1FOiy8o=", + "lastModified": 1747535902, + "narHash": "sha256-rKWBtLcqQeu8PpfKIBn1ORXS2udSH/MwnQFwfSpFOLg=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "c60d41987df3c853e2a842de2c63ded40400979b", + "rev": "b7a99615d26b82c39b73ccc9026545c3f3403b71", "type": "github" }, "original": { @@ -2388,19 +2748,37 @@ "type": "github" } }, + "sops-nix": { + "inputs": { + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1747603214, + "narHash": "sha256-lAblXm0VwifYCJ/ILPXJwlz0qNY07DDYdLD+9H+Wc8o=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "8d215e1c981be3aa37e47aeabd4e61bb069548fd", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, "spicetify-nix": { "inputs": { "nixpkgs": [ "nixpkgs" ], - "systems": "systems_20" + "systems": "systems_18" }, "locked": { - "lastModified": 1742512598, - "narHash": "sha256-nFPhSSxrPrpkmFR6vQq8OpUS+lGIAxDCUKg+5/qcnR8=", + "lastModified": 1747607404, + "narHash": "sha256-xj2Ji+rE+oYjf0BsTDT7K/StnYuZQK9MTbX8U1DUcC0=", "owner": "Gerg-L", "repo": "spicetify-nix", - "rev": "610654a0afe56766e639077d9d267148667a25e8", + "rev": "8c1be0e5e9a7f35ccd6f7b10bcfa08f2734dad91", "type": "github" }, "original": { @@ -2500,6 +2878,7 @@ } }, "systems_15": { + "flake": false, "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -2530,7 +2909,6 @@ } }, "systems_17": { - "flake": false, "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -2592,16 +2970,16 @@ }, "systems_20": { "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" } }, @@ -2635,7 +3013,7 @@ "type": "github" } }, - "systems_23": { + "systems_3": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -2650,21 +3028,6 @@ "type": "github" } }, - "systems_3": { - "locked": { - "lastModified": 1689347949, - "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", - "owner": "nix-systems", - "repo": "default-linux", - "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default-linux", - "type": "github" - } - }, "systems_4": { "locked": { "lastModified": 1681028828, @@ -2712,16 +3075,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" } }, @@ -2742,22 +3105,22 @@ }, "systems_9": { "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" } }, "treefmt-nix": { "inputs": { - "nixpkgs": "nixpkgs_7" + "nixpkgs": "nixpkgs_8" }, "locked": { "lastModified": 1733222881, @@ -2781,11 +3144,11 @@ ] }, "locked": { - "lastModified": 1742370146, - "narHash": "sha256-XRE8hL4vKIQyVMDXykFh4ceo3KSpuJF3ts8GKwh5bIU=", + "lastModified": 1747469671, + "narHash": "sha256-bo1ptiFoNqm6m1B2iAhJmWCBmqveLVvxom6xKmtuzjg=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "adc195eef5da3606891cedf80c0d9ce2d3190808", + "rev": "ab0378b61b0d85e73a8ab05d5c6029b5bd58c9fb", "type": "github" }, "original": { @@ -2796,15 +3159,15 @@ }, "umu": { "inputs": { - "nixpkgs": "nixpkgs_16" + "nixpkgs": "nixpkgs_19" }, "locked": { "dir": "packaging/nix", - "lastModified": 1742441912, - "narHash": "sha256-8379sxse20nhUT6VcjjpsDmYoT8EJQCy0E8bLZZdos8=", + "lastModified": 1747242981, + "narHash": "sha256-MFvG2fiPdmkNU88A7RzPjcHfexOiJxRwAX0SxeC0C5k=", "owner": "Open-Wine-Components", "repo": "umu-launcher", - "rev": "28eef5f5638d5660fb2d7c1811c8f2915a5e8c5b", + "rev": "eff12416f0e8135031a62579910608e442d83d22", "type": "github" }, "original": { @@ -2816,7 +3179,7 @@ }, "utils": { "inputs": { - "systems": "systems_15" + "systems": "systems_13" }, "locked": { "lastModified": 1726560853, @@ -2832,6 +3195,25 @@ "type": "github" } }, + "walker": { + "inputs": { + "nixpkgs": "nixpkgs_20", + "systems": "systems_20" + }, + "locked": { + "lastModified": 1746253489, + "narHash": "sha256-Lsegrsus7oZLLglhjYDUWKSh544Rylkc9y2GBnsD4TE=", + "owner": "abenz1267", + "repo": "walker", + "rev": "65fd786cf25c207efe0b5f2963d4cb5b2125bc22", + "type": "github" + }, + "original": { + "owner": "abenz1267", + "repo": "walker", + "type": "github" + } + }, "waybar": { "inputs": { "flake-compat": "flake-compat_10", @@ -2840,11 +3222,11 @@ ] }, "locked": { - "lastModified": 1740125099, - "narHash": "sha256-VpT3ePqmo75Ni6/02KFGV6ltnpiV70/ovG/p1f2wKkU=", + "lastModified": 1745487176, + "narHash": "sha256-eF1l/KB8eXKTNf+CJ34gh5si3RZCZzme/W9StA+oTiw=", "owner": "Alexays", "repo": "Waybar", - "rev": "8490a1d9b9a5c8770dd63e9faca0a5e01acedcae", + "rev": "0332d2ebf84392c82c86d615079f762f27de94ba", "type": "github" }, "original": { @@ -2881,11 +3263,11 @@ ] }, "locked": { - "lastModified": 1741934139, - "narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=", + "lastModified": 1745871725, + "narHash": "sha256-M24SNc2flblWGXFkGQfqSlEOzAGZnMc9QG3GH4K/KbE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "150b0b6f52bb422a1b232a53698606fe0320dde0", + "rev": "76bbf1a6b1378e4ab5230bad00ad04bc287c969e", "type": "github" }, "original": { @@ -2894,16 +3276,50 @@ "type": "github" } }, + "xwayland-satellite-stable": { + "flake": false, + "locked": { + "lastModified": 1739246919, + "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "ref": "v0.5.1", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1747111562, + "narHash": "sha256-GAqhWoxaBIk0tgoecZPa8gTHDHxNc0JtlwWHZN2iOOo=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "ec9ff64c1e0cbec42710b580b7c0f759b1694e72", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } + }, "zen-browser": { "inputs": { - "nixpkgs": "nixpkgs_17" + "home-manager": "home-manager_4", + "nixpkgs": "nixpkgs_21" }, "locked": { - "lastModified": 1742614294, - "narHash": "sha256-bZbYlP/xqGyW2aVle742dFbc0npFnwJBzcEnXNywJgY=", + "lastModified": 1747592715, + "narHash": "sha256-2rq/h8xHOuGi+Vhi4cfioN1HA06qFssiIN2ZgMTITnM=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "7fa9ec4e14d89e568ebaac302049980df7cf0cc9", + "rev": "16e095bf03d26fd26d22f589b96e7b8853a05b70", "type": "github" }, "original": { @@ -2948,20 +3364,17 @@ "nixpkgs" ], "process-compose-flake": "process-compose-flake", - "systems": "systems_23" + "systems": "systems_22" }, "locked": { - "lastModified": 1731607548, - "narHash": "sha256-a0xLkdgQ4TIJVtY8fXnidtmsqlg63V9YYM7Hf32m7pk=", - "ref": "refs/heads/main", - "rev": "49677f2d9b2cb94c36fe7a9df2bd5e9a8c00b94f", - "revCount": 75, - "type": "git", - "url": "https://git.zoeys.cloud/zoey/zoeys.computer" + "lastModified": 1744598309, + "narHash": "sha256-yjJnKlZSTmvmZddjgxntqmufCZwgZyuUSUZphh3jpRQ=", + "path": "/home/zoey/dev/zoeys.computer", + "type": "path" }, "original": { - "type": "git", - "url": "https://git.zoeys.cloud/zoey/zoeys.computer" + "path": "/home/zoey/dev/zoeys.computer", + "type": "path" } }, "zon2nix": { diff --git a/flake.nix b/flake.nix index 1710869..89fc84c 100644 --- a/flake.nix +++ b/flake.nix @@ -28,14 +28,16 @@ inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; }; - resume.url = "git+https://git.zoeys.cloud/zoey/resume"; - anyrun.url = "github:anyrun-org/anyrun"; - anyrun.inputs.nixpkgs.follows = "nixpkgs"; + walker.url = "github:abenz1267/walker"; + + resume.url = "path:/home/zoey/dev/resume"; ags.url = "github:Aylur/ags/v1"; ags.inputs.nixpkgs.follows = "nixpkgs"; agenix.url = "github:ryantm/agenix"; agenix.inputs.nixpkgs.follows = "nixpkgs"; - agenix.inputs.darwin.follows = ""; + + # to replace with sops-nix + sops-nix.url = "github:Mic92/sops-nix"; pnpm2nix.url = "github:nzbr/pnpm2nix-nzbr"; @@ -49,7 +51,7 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - blog.url = "git+https://git.zoeys.cloud/zoey/web"; + blog.url = "path:/home/zoey/dev/web"; lanzaboote = { url = "github:nix-community/lanzaboote/v0.4.1"; @@ -98,12 +100,11 @@ }; umu.url = "github:Open-Wine-Components/umu-launcher?dir=packaging/nix"; - # umu.inputs.nixpkgs.follows = "nixpkgs"; zen-browser.url = "github:0xc000022070/zen-browser-flake"; zoeycomputer = { - url = "git+https://git.zoeys.cloud/zoey/zoeys.computer"; + url = "path:/home/zoey/dev/zoeys.computer"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -128,10 +129,14 @@ disko.url = "github:nix-community/disko"; disko.inputs.nixpkgs.follows = "nixpkgs"; - opnix.url = "github:brizzbuzz/opnix"; + nix-gaming.url = "path:/home/zoey/dev/nix-gaming"; - mc-honeypot.url = "github:Duckulus/mc-honeypot"; - mc-honeypot.inputs.nixpkgs.follows = "nixpkgs"; + niri-src.url = "github:YaLTeR/niri"; + niri-src.inputs.nixpkgs.follows = "nixpkgs"; + + niri.url = "github:sodiboo/niri-flake"; + + chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; }; outputs = inputs @ {self, ...}: let @@ -139,10 +144,10 @@ inherit inputs; src = ./.; - overlays = [ - inputs.rust-overlay.overlays.default + overlays = with inputs; [ + rust-overlay.overlays.default (final: prev: { - ghostty = inputs.ghostty.packages."x86_64-linux".default; + ghostty = ghostty.packages."x86_64-linux".default; }) (final: prev: { shadps4 = prev.shadps4.overrideAttrs { @@ -156,6 +161,7 @@ patches = []; }; }) + niri.overlays.niri ]; snowfall = { @@ -171,10 +177,9 @@ homes.modules = with inputs; [ spicetify-nix.homeManagerModules.default - catppuccin.homeManagerModules.catppuccin - anyrun.homeManagerModules.default + catppuccin.homeModules.default ags.homeManagerModules.default - opnix.homeManagerModules.default + walker.homeManagerModules.default ]; systems.modules.nixos = with inputs; [ @@ -183,13 +188,14 @@ catppuccin.nixosModules.catppuccin blog.nixosModule agenix.nixosModules.default + sops-nix.nixosModules.sops solaar.nixosModules.default zoeycomputer.nixosModules.default lix-module.nixosModules.default mailserver.nixosModule disko.nixosModules.disko - mc-honeypot.nixosModules.default - opnix.nixosModules.default + niri.nixosModules.niri + chaotic.nixosModules.default ]; }; in diff --git a/genkey.sh b/genkey.sh deleted file mode 100755 index cbb023b..0000000 --- a/genkey.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# Generate client keys -wg genkey | tee client-private.key | wg pubkey >client-public.key - -# Get the keys -CLIENT_PRIVATE_KEY=$(cat client-private.key) -CLIENT_PUBLIC_KEY=$(cat client-public.key) -SERVER_PUBLIC_KEY=$(sudo cat /home/zoey/wg-keys/private | wg pubkey) - -# Your server's public IP -SERVER_IP="66.227.177.15" - -# Create the client configuration -cat >wg0-client.conf <= zeroCode && charCode <= nineCode + then charCode - zeroCode + else if charCode >= aCode && charCode <= fCode + then charCode - aCode + 10 + else if charCode >= ACode && charCode <= FCode + then charCode - ACode + 10 + else builtins.throw "Invalid hex character: ${builtins.toString char}"; - colors = { - "base" = "191724"; - "surface" = "1f1d2e"; - "overlay" = "26233a"; - "muted" = "6e6a86"; - "subtle" = "6e6a86"; - "text" = "e0def4"; - "love" = "eb6f92"; - "gold" = "f6c177"; - "rose" = "ebbcba"; - "pine" = "31748f"; - "foam" = "9ccfd8"; - "iris" = "c4a7e7"; - "highlightlow" = "21202e"; - "highlightmed" = "403d52"; - "highlighthigh" = "524f67"; + hexCompToInt = hexComp: let + trimmedStr = lib.strings.removePrefix "0x" hexComp; + + chars = lib.strings.stringToCharacters trimmedStr; + + op = acc: char: (acc * 16) + (hexCharToInt char); + in + if trimmedStr == "" + then 0 + else builtins.foldl' op 0 chars; + + intCompToHex = intComp: let + clampedInt = lib.max 0 (lib.min 255 (builtins.floor (intComp + 0.5))); + hexString = lib.trivial.toHexString clampedInt; + in + lib.strings.fixedWidthString 2 "0" hexString; + + hexToRgb = hexColor: let + hex = lib.strings.removePrefix "#" hexColor; + in { + r = hexCompToInt (lib.strings.substring 0 2 hex); + g = hexCompToInt (lib.strings.substring 2 2 hex); + b = hexCompToInt (lib.strings.substring 4 2 hex); }; + rgbToHex = rgbColor: "#${intCompToHex rgbColor.r}${intCompToHex rgbColor.g}${intCompToHex rgbColor.b}"; + + /** + * Linearly interpolates between two hex colors. + * + * @param color1Hex - The starting color hex string (e.g., "#RRGGBB"). + * @param color2Hex - The ending color hex string (e.g., "#RRGGBB"). + * @param t - The interpolation factor (float, typically 0.0 to 1.0). + * @return The blended color as a hex string "#RRGGBB". + */ + lerpColorFunc = color1Hex: color2Hex: t: let + rgb1 = hexToRgb color1Hex; + rgb2 = hexToRgb color2Hex; + lerpedR = (rgb1.r * (1.0 - t)) + (rgb2.r * t); + lerpedG = (rgb1.g * (1.0 - t)) + (rgb2.g * t); + lerpedB = (rgb1.b * (1.0 - t)) + (rgb2.b * t); + resultRgb = { + r = lerpedR; + g = lerpedG; + b = lerpedB; + }; + in + rgbToHex resultRgb; +in { + x = c: "#${c}"; + fonts = { - mono = { - normal = "Iosevka Bold"; - bold = "Iosevka ExtraBold"; - italic = "Iosevka Bold Italic"; - bold_italic = "Iosevka ExtraBold Italic"; + mono = "Iosevka"; + ui = "SF Pro Display"; + }; + + colors = rec { + bg = crust; + fg = text; + primary = red; + + rosewater = { + hex = "#f5e0dc"; + rgb = "rgb(245, 224, 220)"; + hsl = "hsl(10, 56%, 91%)"; + }; + flamingo = { + hex = "#f2cdcd"; + rgb = "rgb(242, 205, 205)"; + hsl = "hsl(0, 59%, 88%)"; + }; + pink = { + hex = "#f5c2e7"; + rgb = "rgb(245, 194, 231)"; + hsl = "hsl(316, 72%, 86%)"; + }; + mauve = { + hex = "#cba6f7"; + rgb = "rgb(203, 166, 247)"; + hsl = "hsl(267, 84%, 81%)"; + }; + red = { + hex = "#f38ba8"; + rgb = "rgb(243, 139, 168)"; + hsl = "hsl(343, 81%, 75%)"; + }; + maroon = { + hex = "#eba0ac"; + rgb = "rgb(235, 160, 172)"; + hsl = "hsl(350, 65%, 77%)"; + }; + peach = { + hex = "#fab387"; + rgb = "rgb(250, 179, 135)"; + hsl = "hsl(25, 92%, 75%)"; + }; + yellow = { + hex = "#f9e2af"; + rgb = "rgb(249, 226, 175)"; + hsl = "hsl(41, 86%, 83%)"; + }; + green = { + hex = "#a6e3a1"; + rgb = "rgb(166, 227, 161)"; + hsl = "hsl(115, 54%, 76%)"; + }; + teal = { + hex = "#94e2d5"; + rgb = "rgb(148, 226, 213)"; + hsl = "hsl(170, 57%, 73%)"; + }; + sky = { + hex = "#89dceb"; + rgb = "rgb(137, 220, 235)"; + hsl = "hsl(190, 71%, 73%)"; + }; + sapphire = { + hex = "#74c7ec"; + rgb = "rgb(116, 199, 236)"; + hsl = "hsl(200, 77%, 69%)"; + }; + blue = { + hex = "#89b4fa"; + rgb = "rgb(137, 180, 250)"; + hsl = "hsl(217, 91%, 76%)"; + }; + lavender = { + hex = "#b4befe"; + rgb = "rgb(180, 190, 254)"; + hsl = "hsl(232, 97%, 85%)"; + }; + text = { + hex = "#cdd6f4"; + rgb = "rgb(205, 214, 244)"; + hsl = "hsl(226, 64%, 88%)"; + }; + subtext1 = { + hex = "#bac2de"; + rgb = "rgb(186, 194, 222)"; + hsl = "hsl(227, 36%, 80%)"; + }; + subtext0 = { + hex = "#a6adc8"; + rgb = "rgb(166, 173, 200)"; + hsl = "hsl(228, 26%, 72%)"; + }; + overlay2 = { + hex = "#9399b2"; + rgb = "rgb(147, 153, 178)"; + hsl = "hsl(228, 19%, 64%)"; + }; + overlay1 = { + hex = "#7f849c"; + rgb = "rgb(127, 132, 156)"; + hsl = "hsl(230, 15%, 55%)"; + }; + overlay0 = { + hex = "#6c7086"; + rgb = "rgb(108, 112, 134)"; + hsl = "hsl(232, 11%, 47%)"; + }; + surface2 = { + hex = "#585b70"; + rgb = "rgb(88, 91, 112)"; + hsl = "hsl(233, 12%, 39%)"; + }; + surface1 = { + hex = "#45475a"; + rgb = "rgb(69, 71, 90)"; + hsl = "hsl(234, 13%, 31%)"; + }; + surface0 = { + hex = "#313244"; + rgb = "rgb(49, 50, 68)"; + hsl = "hsl(237, 16%, 23%)"; + }; + base = { + hex = "#1e1e2e"; + rgb = "rgb(30, 30, 46)"; + hsl = "hsl(240, 21%, 15%)"; + }; + mantle = { + hex = "#181825"; + rgb = "rgb(24, 24, 37)"; + hsl = "hsl(240, 21%, 12%)"; + }; + crust = { + hex = "#11111b"; + rgb = "rgb(17, 17, 27)"; + hsl = "hsl(240, 23%, 9%)"; }; }; - wallpaper = ./favs-98.png; + wallpaper = ./svema_26_big.jpg; + + lerpColor = lerpColorFunc; } diff --git a/lib/theme/svema_26_big.jpg b/lib/theme/svema_26_big.jpg new file mode 100644 index 0000000..d60ec4b Binary files /dev/null and b/lib/theme/svema_26_big.jpg differ diff --git a/lib/theme/wall4p.jpg b/lib/theme/wall4p.jpg new file mode 100644 index 0000000..ce8ef4f Binary files /dev/null and b/lib/theme/wall4p.jpg differ diff --git a/lib/theme/wallp.jpg b/lib/theme/wallp.jpg new file mode 100644 index 0000000..d7be673 Binary files /dev/null and b/lib/theme/wallp.jpg differ diff --git a/modules/home/apps/helpers/ags/default.nix b/modules/home/apps/helpers/ags/default.nix index 6db7f8e..904d930 100644 --- a/modules/home/apps/helpers/ags/default.nix +++ b/modules/home/apps/helpers/ags/default.nix @@ -48,7 +48,43 @@ in { programs.ags = { enable = true; - configDir = ./cfg; + # Generate _colors.scss with our theme colors + configDir = pkgs.runCommand "ags-config" {} '' + cp -r ${./cfg} $out + chmod -R +w $out + cat > $out/scss/_colors.scss << EOF + /* Generated from lib/theme/default.nix */ + $rosewater: ${colors.rosewater.hex}; + $flamingo: ${colors.flamingo.hex}; + $pink: ${colors.pink.hex}; + $mauve: ${colors.mauve.hex}; + $red: ${colors.red.hex}; + $maroon: ${colors.maroon.hex}; + $peach: ${colors.peach.hex}; + $yellow: ${colors.yellow.hex}; + $green: ${colors.green.hex}; + $teal: ${colors.teal.hex}; + $sky: ${colors.sky.hex}; + $sapphire: ${colors.sapphire.hex}; + $blue: ${colors.blue.hex}; + $lavender: ${colors.lavender.hex}; + $text: ${colors.text.hex}; + $subtext1: ${colors.subtext1.hex}; + $subtext0: ${colors.subtext0.hex}; + $overlay2: ${colors.overlay2.hex}; + $overlay1: ${colors.overlay1.hex}; + $overlay0: ${colors.overlay0.hex}; + $surface2: ${colors.surface2.hex}; + $surface1: ${colors.surface1.hex}; + $surface0: ${colors.surface0.hex}; + $base: ${colors.base.hex}; + $mantle: ${colors.mantle.hex}; + $crust: ${colors.crust.hex}; + + /* Default accent color */ + $accent: ${colors.sapphire.hex}; + EOF + ''; extraPackages = dependencies; }; diff --git a/modules/home/apps/helpers/anyrun/default.nix b/modules/home/apps/helpers/anyrun/default.nix index 7de301c..0b7a44a 100644 --- a/modules/home/apps/helpers/anyrun/default.nix +++ b/modules/home/apps/helpers/anyrun/default.nix @@ -14,100 +14,102 @@ in { enable = mkBoolOpt false "Enable Anyrun"; }; - config = mkIf cfg.enable { - programs.anyrun = { - enable = true; - config = { - plugins = [ - inputs.anyrun.packages.${pkgs.system}.applications - inputs.anyrun.packages.${pkgs.system}.shell - inputs.anyrun.packages.${pkgs.system}.websearch - inputs.anyrun.packages.${pkgs.system}.rink - inputs.anyrun.packages.${pkgs.system}.stdin - ]; - x = {fraction = 0.5;}; - y = {absolute = 0;}; - hideIcons = false; - ignoreExclusiveZones = false; - layer = "overlay"; - hidePluginInfo = true; - closeOnClick = true; - showResultsImmediately = false; - maxEntries = null; - }; - extraCss = '' - *{ - all: unset; - color: #cdd6f4; - font-family: "JetBrainsMono Nerd Font"; - font-weight: bold; - } - #window{ - background-color: transparent; - } - #entry{ - background-color: #1e1e2e; - border-radius: 15px; - border: 3px solid #11111b; - font-size: 16px; - margin-top: 10px; - padding: 1px 15px; - } - #match { - margin-bottom: 2px; - margin-top: 2px; - padding: 1px 15px; - } - #match-desc{ - color: #bac2de; - font-size: 12px; - font-weight: normal; - } - #match:selected { - background: #313244; - border-radius: 15px; - } - #plugin{ - background-color: #1e1e2e; - border-radius: 15px; - border: 3px solid #11111b; - margin-top:10px; - padding: 10px 1px; - } - #plugin > *{ - all:unset; - } - ''; - - extraConfigFiles."applications.ron".text = '' - Config( - desktop_actions: false, - max_entries: 5, - terminal: Some("Kitty"), - ) - ''; - - extraConfigFiles."shell.ron".text = '' - Config( - prefix: ">", - ) - ''; - - extraConfigFiles."websearch.ron".text = '' - Config( - prefix: "", - // Options: Google, Ecosia, Bing, DuckDuckGo, Custom - // - // Custom engines can be defined as such: - // Custom( - // name: "Searx", - // url: "searx.be/?q={}", - // ) - // - // NOTE: `{}` is replaced by the search query and `https://` is automatically added in front. - engines: [DuckDuckGo] - ) - ''; + config = + mkIf cfg.enable { }; - }; + # programs.anyrun = { + # enable = true; + # config = { + # plugins = [ + # inputs.anyrun.packages.${pkgs.system}.applications + # inputs.anyrun.packages.${pkgs.system}.shell + # inputs.anyrun.packages.${pkgs.system}.websearch + # inputs.anyrun.packages.${pkgs.system}.rink + # inputs.anyrun.packages.${pkgs.system}.stdin + # ]; + # x = {fraction = 0.5;}; + # y = {absolute = 0;}; + # hideIcons = false; + # ignoreExclusiveZones = false; + # layer = "overlay"; + # hidePluginInfo = true; + # closeOnClick = true; + # showResultsImmediately = false; + # maxEntries = null; + # }; + # extraCss = '' + # *{ + # all: unset; + # color: #cdd6f4; + # font-family: "JetBrainsMono Nerd Font"; + # font-weight: bold; + # } + # #window{ + # background-color: transparent; + # } + # #entry{ + # background-color: #1e1e2e; + # border-radius: 15px; + # border: 3px solid #11111b; + # font-size: 16px; + # margin-top: 10px; + # padding: 1px 15px; + # } + # #match { + # margin-bottom: 2px; + # margin-top: 2px; + # padding: 1px 15px; + # } + # #match-desc{ + # color: #bac2de; + # font-size: 12px; + # font-weight: normal; + # } + # #match:selected { + # background: #313244; + # border-radius: 15px; + # } + # #plugin{ + # background-color: #1e1e2e; + # border-radius: 15px; + # border: 3px solid #11111b; + # margin-top:10px; + # padding: 10px 1px; + # } + # #plugin > *{ + # all:unset; + # } + # ''; + # + # extraConfigFiles."applications.ron".text = '' + # Config( + # desktop_actions: false, + # max_entries: 5, + # terminal: Some("Kitty"), + # ) + # ''; + # + # extraConfigFiles."shell.ron".text = '' + # Config( + # prefix: ">", + # ) + # ''; + # + # extraConfigFiles."websearch.ron".text = '' + # Config( + # prefix: "", + # // Options: Google, Ecosia, Bing, DuckDuckGo, Custom + # // + # // Custom engines can be defined as such: + # // Custom( + # // name: "Searx", + # // url: "searx.be/?q={}", + # // ) + # // + # // NOTE: `{}` is replaced by the search query and `https://` is automatically added in front. + # engines: [DuckDuckGo] + # ) + # ''; + # }; + # }; } diff --git a/modules/home/apps/helpers/notifications/default.nix b/modules/home/apps/helpers/notifications/default.nix deleted file mode 100644 index 0727c94..0000000 --- a/modules/home/apps/helpers/notifications/default.nix +++ /dev/null @@ -1,80 +0,0 @@ -{ - options, - config, - lib, - inputs, - pkgs, - ... -}: -with lib; -with lib.custom; let - cfg = config.apps.helpers.snc; -in { - options.apps.helpers.snc = with types; { - enable = mkBoolOpt false "Enable Sway Notification Center"; - }; - - config = mkIf cfg.enable { - home = { - packages = with pkgs; [swaynotificationcenter]; - - # Copy the theme file to the correct location - file.".config/swaync/style.css".source = ./theme/ctp.css; - - # Create default config file - file.".config/swaync/config.json".text = builtins.toJSON { - "$schema" = "/etc/xdg/swaync/configSchema.json"; - "positionX" = "right"; - "positionY" = "top"; - "layer" = "overlay"; - "control-center-margin-top" = 0; - "control-center-margin-bottom" = 0; - "control-center-margin-right" = 0; - "control-center-margin-left" = 0; - "notification-icon-size" = 64; - "notification-body-image-height" = 100; - "notification-body-image-width" = 200; - "timeout" = 10; - "timeout-low" = 5; - "timeout-critical" = 0; - "fit-to-screen" = true; - "control-center-width" = 500; - "notification-window-width" = 500; - "keyboard-shortcuts" = true; - "image-visibility" = "when-available"; - "transition-time" = 200; - "hide-on-clear" = false; - "hide-on-action" = true; - "script-fail-notify" = true; - "scripts" = {}; - "notification-visibility" = {}; - "widgets" = [ - "title" - "dnd" - "notifications" - ]; - }; - }; - - # Add systemd user service - systemd.user.services.swaync = { - Unit = { - Description = "Sway Notification Center"; - PartOf = ["graphical-session.target"]; - After = ["graphical-session.target"]; - }; - - Service = { - Type = "simple"; - ExecStart = "${pkgs.swaynotificationcenter}/bin/swaync"; - ExecReload = "${pkgs.swaynotificationcenter}/bin/swaync-client --reload-config"; - Restart = "always"; - RestartSec = 3; - }; - - Install = { - WantedBy = ["graphical-session.target"]; - }; - }; - }; -} diff --git a/modules/home/apps/helpers/notifications/theme/ctp.css b/modules/home/apps/helpers/notifications/theme/ctp.css deleted file mode 100644 index 4a21929..0000000 --- a/modules/home/apps/helpers/notifications/theme/ctp.css +++ /dev/null @@ -1,451 +0,0 @@ -* { - all: unset; - font-size: 14px; - font-family: "Iosevka"; - transition: 200ms; -} - -trough highlight { - background: #cdd6f4; -} - -scale trough { - margin: 0rem 1rem; - background-color: #313244; - min-height: 8px; - min-width: 70px; -} - -slider { - background-color: #89b4fa; -} - -.floating-notifications.background .notification-row .notification-background { - box-shadow: - 0 0 8px 0 rgba(0, 0, 0, 0.8), - inset 0 0 0 1px #313244; - border-radius: 12.6px; - margin: 18px; - background-color: #1e1e2e; - color: #cdd6f4; - padding: 0; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification { - padding: 7px; - border-radius: 12.6px; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification.critical { - box-shadow: inset 0 0 7px 0 #f38ba8; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification - .notification-content { - margin: 7px; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification - .notification-content - .summary { - color: #cdd6f4; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification - .notification-content - .time { - color: #a6adc8; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification - .notification-content - .body { - color: #cdd6f4; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification - > *:last-child - > * { - min-height: 3.4em; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action { - border-radius: 7px; - color: #cdd6f4; - background-color: #313244; - box-shadow: inset 0 0 0 1px #45475a; - margin: 7px; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action:hover { - box-shadow: inset 0 0 0 1px #45475a; - background-color: #313244; - color: #cdd6f4; -} - -.floating-notifications.background - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action:active { - box-shadow: inset 0 0 0 1px #45475a; - background-color: #74c7ec; - color: #cdd6f4; -} - -.floating-notifications.background - .notification-row - .notification-background - .close-button { - margin: 7px; - padding: 2px; - border-radius: 6.3px; - color: #1e1e2e; - background-color: #f38ba8; -} - -.floating-notifications.background - .notification-row - .notification-background - .close-button:hover { - background-color: #eba0ac; - color: #1e1e2e; -} - -.floating-notifications.background - .notification-row - .notification-background - .close-button:active { - background-color: #f38ba8; - color: #1e1e2e; -} - -.control-center { - box-shadow: - 0 0 8px 0 rgba(0, 0, 0, 0.8), - inset 0 0 0 1px #313244; - border-radius: 12.6px; - margin: 18px; - background-color: #1e1e2e; - color: #cdd6f4; - padding: 14px; -} - -.control-center .widget-title > label { - color: #cdd6f4; - font-size: 1.3em; -} - -.control-center .widget-title button { - border-radius: 7px; - color: #cdd6f4; - background-color: #313244; - box-shadow: inset 0 0 0 1px #45475a; - padding: 8px; -} - -.control-center .widget-title button:hover { - box-shadow: inset 0 0 0 1px #45475a; - background-color: #585b70; - color: #cdd6f4; -} - -.control-center .widget-title button:active { - box-shadow: inset 0 0 0 1px #45475a; - background-color: #74c7ec; - color: #1e1e2e; -} - -.control-center .notification-row .notification-background { - border-radius: 7px; - color: #cdd6f4; - background-color: #313244; - box-shadow: inset 0 0 0 1px #45475a; - margin-top: 14px; -} - -.control-center .notification-row .notification-background .notification { - padding: 7px; - border-radius: 7px; -} - -.control-center - .notification-row - .notification-background - .notification.critical { - box-shadow: inset 0 0 7px 0 #f38ba8; -} - -.control-center - .notification-row - .notification-background - .notification - .notification-content { - margin: 7px; -} - -.control-center - .notification-row - .notification-background - .notification - .notification-content - .summary { - color: #cdd6f4; -} - -.control-center - .notification-row - .notification-background - .notification - .notification-content - .time { - color: #a6adc8; -} - -.control-center - .notification-row - .notification-background - .notification - .notification-content - .body { - color: #cdd6f4; -} - -.control-center - .notification-row - .notification-background - .notification - > *:last-child - > * { - min-height: 3.4em; -} - -.control-center - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action { - border-radius: 7px; - color: #cdd6f4; - background-color: #11111b; - box-shadow: inset 0 0 0 1px #45475a; - margin: 7px; -} - -.control-center - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action:hover { - box-shadow: inset 0 0 0 1px #45475a; - background-color: #313244; - color: #cdd6f4; -} - -.control-center - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action:active { - box-shadow: inset 0 0 0 1px #45475a; - background-color: #74c7ec; - color: #cdd6f4; -} - -.control-center .notification-row .notification-background .close-button { - margin: 7px; - padding: 2px; - border-radius: 6.3px; - color: #1e1e2e; - background-color: #eba0ac; -} - -.close-button { - border-radius: 6.3px; -} - -.control-center .notification-row .notification-background .close-button:hover { - background-color: #f38ba8; - color: #1e1e2e; -} - -.control-center - .notification-row - .notification-background - .close-button:active { - background-color: #f38ba8; - color: #1e1e2e; -} - -.control-center .notification-row .notification-background:hover { - box-shadow: inset 0 0 0 1px #45475a; - background-color: #7f849c; - color: #cdd6f4; -} - -.control-center .notification-row .notification-background:active { - box-shadow: inset 0 0 0 1px #45475a; - background-color: #74c7ec; - color: #cdd6f4; -} - -.notification.critical progress { - background-color: #f38ba8; -} - -.notification.low progress, -.notification.normal progress { - background-color: #89b4fa; -} - -.control-center-dnd { - margin-top: 5px; - border-radius: 8px; - background: #313244; - border: 1px solid #45475a; - box-shadow: none; -} - -.control-center-dnd:checked { - background: #313244; -} - -.control-center-dnd slider { - background: #45475a; - border-radius: 8px; -} - -.widget-dnd { - margin: 0px; - font-size: 1.1rem; -} - -.widget-dnd > switch { - font-size: initial; - border-radius: 8px; - background: #313244; - border: 1px solid #45475a; - box-shadow: none; -} - -.widget-dnd > switch:checked { - background: #313244; -} - -.widget-dnd > switch slider { - background: #45475a; - border-radius: 8px; - border: 1px solid #6c7086; -} - -.widget-mpris .widget-mpris-player { - background: #313244; - padding: 7px; -} - -.widget-mpris .widget-mpris-title { - font-size: 1.2rem; -} - -.widget-mpris .widget-mpris-subtitle { - font-size: 0.8rem; -} - -.widget-menubar > box > .menu-button-bar > button > label { - font-size: 3rem; - padding: 0.5rem 2rem; -} - -.widget-menubar > box > .menu-button-bar > :last-child { - color: #f38ba8; -} - -.power-buttons button:hover, -.powermode-buttons button:hover, -.screenshot-buttons button:hover { - background: #313244; -} - -.control-center .widget-label > label { - color: #cdd6f4; - font-size: 2rem; -} - -.widget-buttons-grid { - padding-top: 1rem; -} - -.widget-buttons-grid > flowbox > flowboxchild > button label { - font-size: 2.5rem; -} - -.widget-volume { - padding-top: 1rem; -} - -.widget-volume label { - font-size: 1.5rem; - color: #74c7ec; -} - -.widget-volume trough highlight { - background: #74c7ec; -} - -.widget-backlight trough highlight { - background: #f9e2af; -} - -.widget-backlight label { - font-size: 1.5rem; - color: #f9e2af; -} - -.widget-backlight .KB { - padding-bottom: 1rem; -} - -.image { - padding-right: 0.5rem; -} diff --git a/modules/home/apps/helpers/rofi/default.nix b/modules/home/apps/helpers/rofi/default.nix index 1657c82..f51b318 100644 --- a/modules/home/apps/helpers/rofi/default.nix +++ b/modules/home/apps/helpers/rofi/default.nix @@ -51,12 +51,12 @@ in { inherit (config.lib.formats.rasi) mkLiteral; in { "*" = { - background = "#181825"; - prompt = "#1e1e2e"; - border = "#313244"; - text = "#cdd6f4"; - stext = "#45475a"; - select = "#1e1e2e"; + background = colors.mantle.hex; + prompt = colors.base.hex; + border = colors.surface0.hex; + text = colors.text.hex; + stext = colors.surface1.hex; + select = colors.base.hex; "background-color" = mkLiteral "transparent"; "text-color" = mkLiteral "@text"; margin = 0; @@ -143,15 +143,42 @@ in { }; }; - # Create the colors.rasi file + # Create the colors.rasi file with our theme colors xdg.configFile."rofi/colors.rasi".text = '' * { - background: #181825; - prompt: #1e1e2e; - border: #313244; - text: #cdd6f4; - stext: #45475a; - select: #1e1e2e; + background: ${colors.mantle.hex}; + prompt: ${colors.base.hex}; + border: ${colors.surface0.hex}; + text: ${colors.text.hex}; + stext: ${colors.surface1.hex}; + select: ${colors.base.hex}; + + /* Full color palette */ + rosewater: ${colors.rosewater.hex}; + flamingo: ${colors.flamingo.hex}; + pink: ${colors.pink.hex}; + mauve: ${colors.mauve.hex}; + red: ${colors.red.hex}; + maroon: ${colors.maroon.hex}; + peach: ${colors.peach.hex}; + yellow: ${colors.yellow.hex}; + green: ${colors.green.hex}; + teal: ${colors.teal.hex}; + sky: ${colors.sky.hex}; + sapphire: ${colors.sapphire.hex}; + blue: ${colors.blue.hex}; + lavender: ${colors.lavender.hex}; + subtext0: ${colors.subtext0.hex}; + subtext1: ${colors.subtext1.hex}; + overlay0: ${colors.overlay0.hex}; + overlay1: ${colors.overlay1.hex}; + overlay2: ${colors.overlay2.hex}; + surface0: ${colors.surface0.hex}; + surface1: ${colors.surface1.hex}; + surface2: ${colors.surface2.hex}; + base: ${colors.base.hex}; + mantle: ${colors.mantle.hex}; + crust: ${colors.crust.hex}; } ''; diff --git a/modules/home/apps/helpers/swaync/default.nix b/modules/home/apps/helpers/swaync/default.nix new file mode 100644 index 0000000..fcefdf1 --- /dev/null +++ b/modules/home/apps/helpers/swaync/default.nix @@ -0,0 +1,366 @@ +{ + options, + config, + lib, + inputs, + pkgs, + ... +}: +with lib; +with lib.custom; let + cfg = config.apps.helpers.swaync; +in { + options.apps.helpers.swaync = with types; { + enable = mkBoolOpt false "Enable SwayNC"; + }; + + config = mkIf cfg.enable { + services.swaync = { + enable = true; + style = lib.mkForce '' + * { + all: unset; + font-size: 14px; + font-family: "Adwaita Sans", "JetBrains Mono Nerd Font"; + transition: 200ms; + } + + trough highlight { + background: ${colors.text.hex}; + } + + scale trough { + margin: 0rem 1rem; + background-color: ${colors.surface0.hex}; + min-height: 8px; + min-width: 70px; + } + + slider { + background-color: ${colors.blue.hex}; + } + + .floating-notifications.background .notification-row .notification-background { + box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px ${colors.surface0.hex}; + border-radius: 12.6px; + margin: 18px; + background-color: ${colors.base.hex}; + color: ${colors.text.hex}; + padding: 0; + } + + .floating-notifications.background .notification-row .notification-background .notification { + padding: 7px; + border-radius: 12.6px; + } + + .floating-notifications.background .notification-row .notification-background .notification.critical { + box-shadow: inset 0 0 7px 0 ${colors.red.hex}; + } + + .floating-notifications.background .notification-row .notification-background .notification .notification-content { + margin: 7px; + } + + .floating-notifications.background .notification-row .notification-background .notification .notification-content .summary { + color: ${colors.text.hex}; + } + + .floating-notifications.background .notification-row .notification-background .notification .notification-content .time { + color: ${colors.subtext0.hex}; + } + + .floating-notifications.background .notification-row .notification-background .notification .notification-content .body { + color: ${colors.text.hex}; + } + + .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * { + min-height: 3.4em; + } + + .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action { + border-radius: 7px; + color: ${colors.text.hex}; + background-color: ${colors.surface0.hex}; + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + margin: 7px; + } + + .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover { + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + background-color: ${colors.surface0.hex}; + color: ${colors.text.hex}; + } + + .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active { + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + background-color: ${colors.sky.hex}; + color: ${colors.text.hex}; + } + + .floating-notifications.background .notification-row .notification-background .close-button { + margin: 7px; + padding: 2px; + border-radius: 6.3px; + color: ${colors.base.hex}; + background-color: ${colors.red.hex}; + } + + .floating-notifications.background .notification-row .notification-background .close-button:hover { + background-color: ${colors.maroon.hex}; + color: ${colors.base.hex}; + } + + .floating-notifications.background .notification-row .notification-background .close-button:active { + background-color: ${colors.red.hex}; + color: ${colors.base.hex}; + } + + .control-center { + box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px ${colors.surface0.hex}; + border-radius: 12.6px; + margin: 18px; + background-color: ${colors.base.hex}; + color: ${colors.text.hex}; + padding: 14px; + } + + .control-center .widget-title > label { + color: ${colors.text.hex}; + font-size: 1.3em; + } + + .control-center .widget-title button { + border-radius: 7px; + color: ${colors.text.hex}; + background-color: ${colors.surface0.hex}; + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + padding: 8px; + } + + .control-center .widget-title button:hover { + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + background-color: ${colors.surface2.hex}; + color: ${colors.text.hex}; + } + + .control-center .widget-title button:active { + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + background-color: ${colors.sky.hex}; + color: ${colors.base.hex}; + } + + .control-center .notification-row .notification-background { + border-radius: 7px; + color: ${colors.text.hex}; + background-color: ${colors.surface0.hex}; + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + margin-top: 14px; + } + + .control-center .notification-row .notification-background .notification { + padding: 7px; + border-radius: 7px; + } + + .control-center .notification-row .notification-background .notification.critical { + box-shadow: inset 0 0 7px 0 ${colors.red.hex}; + } + + .control-center .notification-row .notification-background .notification .notification-content { + margin: 7px; + } + + .control-center .notification-row .notification-background .notification .notification-content .summary { + color: ${colors.text.hex}; + } + + .control-center .notification-row .notification-background .notification .notification-content .time { + color: ${colors.subtext0.hex}; + } + + .control-center .notification-row .notification-background .notification .notification-content .body { + color: ${colors.text.hex}; + } + + .control-center .notification-row .notification-background .notification > *:last-child > * { + min-height: 3.4em; + } + + .control-center .notification-row .notification-background .notification > *:last-child > * .notification-action { + border-radius: 7px; + color: ${colors.text.hex}; + background-color: ${colors.crust.hex}; + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + margin: 7px; + } + + .control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover { + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + background-color: ${colors.surface0.hex}; + color: ${colors.text.hex}; + } + + .control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active { + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + background-color: ${colors.sky.hex}; + color: ${colors.text.hex}; + } + + .control-center .notification-row .notification-background .close-button { + margin: 7px; + padding: 2px; + border-radius: 6.3px; + color: ${colors.base.hex}; + background-color: ${colors.maroon.hex}; + } + + .close-button { + border-radius: 6.3px; + } + + .control-center .notification-row .notification-background .close-button:hover { + background-color: ${colors.red.hex}; + color: ${colors.base.hex}; + } + + .control-center .notification-row .notification-background .close-button:active { + background-color: ${colors.red.hex}; + color: ${colors.base.hex}; + } + + .control-center .notification-row .notification-background:hover { + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + background-color: ${colors.overlay1.hex}; + color: ${colors.text.hex}; + } + + .control-center .notification-row .notification-background:active { + box-shadow: inset 0 0 0 1px ${colors.surface1.hex}; + background-color: ${colors.sky.hex}; + color: ${colors.text.hex}; + } + + .notification.critical progress { + background-color: ${colors.red.hex}; + } + + .notification.low progress, + .notification.normal progress { + background-color: ${colors.blue.hex}; + } + + .control-center-dnd { + margin-top: 5px; + border-radius: 8px; + background: ${colors.surface0.hex}; + border: 1px solid ${colors.surface1.hex}; + box-shadow: none; + } + + .control-center-dnd:checked { + background: ${colors.surface0.hex}; + } + + .control-center-dnd slider { + background: ${colors.surface1.hex}; + border-radius: 8px; + } + + .widget-dnd { + margin: 0px; + font-size: 1.1rem; + } + + .widget-dnd > switch { + font-size: initial; + border-radius: 8px; + background: ${colors.surface0.hex}; + border: 1px solid ${colors.surface1.hex}; + box-shadow: none; + } + + .widget-dnd > switch:checked { + background: ${colors.surface0.hex}; + } + + .widget-dnd > switch slider { + background: ${colors.surface1.hex}; + border-radius: 8px; + border: 1px solid ${colors.overlay0.hex}; + } + + .widget-mpris .widget-mpris-player .widget-mpd { + background: ${colors.surface0.hex}; + padding: 7px; + } + + .widget-mpris .widget-mpris-title .widget-mpd .widget-mpd-title { + font-size: 1.2rem; + } + + .widget-mpris .widget-mpris-subtitle .widget-mpd .widget-mpd-subtitle { + font-size: 0.8rem; + } + + .widget-menubar > box > .menu-button-bar > button > label { + font-size: 3rem; + padding: 0.5rem 2rem; + } + + .widget-menubar > box > .menu-button-bar > :last-child { + color: ${colors.red.hex}; + } + + .power-buttons button:hover, + .powermode-buttons button:hover, + .screenshot-buttons button:hover { + background: ${colors.surface0.hex}; + } + + .control-center .widget-label > label { + color: ${colors.text.hex}; + font-size: 2rem; + } + + .widget-buttons-grid { + padding-top: 1rem; + } + + .widget-buttons-grid > flowbox > flowboxchild > button label { + font-size: 2.5rem; + } + + .widget-volume { + padding-top: 1rem; + } + + .widget-volume label { + font-size: 1.5rem; + color: ${colors.sky.hex}; + } + + .widget-volume trough highlight { + background: ${colors.sky.hex}; + } + + .widget-backlight trough highlight { + background: ${colors.yellow.hex}; + } + + .widget-backlight label { + font-size: 1.5rem; + color: ${colors.yellow.hex}; + } + + .widget-backlight .KB { + padding-bottom: 1rem; + } + + .image { + padding-right: 0.5rem; + } + ''; + }; + }; +} diff --git a/modules/home/apps/helpers/walker/default.nix b/modules/home/apps/helpers/walker/default.nix new file mode 100644 index 0000000..6c46e23 --- /dev/null +++ b/modules/home/apps/helpers/walker/default.nix @@ -0,0 +1,611 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; +with lib.custom; let + cfg = config.apps.helpers.walker; +in { + options.apps.helpers.walker = with types; { + enable = mkBoolOpt false "Enable Walker"; + }; + + config = mkIf cfg.enable { + programs.walker = { + enable = true; + runAsService = true; + + theme = { + layout = { + ui = { + anchors = { + bottom = true; + left = true; + right = true; + top = true; + }; + + window = { + h_align = "fill"; + v_align = "fill"; + + box = { + h_align = "center"; + width = 450; + + bar = { + orientation = "horizontal"; + position = "end"; + + entry = { + h_align = "fill"; + h_expand = true; + + icon = { + h_align = "center"; + h_expand = true; + pixel_size = 24; + theme = ""; + }; + }; + }; + + margins = { + top = 450; + }; + + ai_scroll = { + name = "aiScroll"; + h_align = "fill"; + v_align = "fill"; + max_height = 300; + min_width = 400; + height = 300; + width = 400; + + margins = { + top = 8; + }; + + list = { + name = "aiList"; + orientation = "vertical"; + width = 400; + spacing = 10; + + item = { + name = "aiItem"; + h_align = "fill"; + v_align = "fill"; + x_align = 0; + y_align = 0; + wrap = true; + }; + }; + }; + + scroll = { + list = { + marker_color = "#1BFFE1"; + max_height = 300; + max_width = 400; + min_width = 400; + width = 400; + + item = { + activation_label = { + h_align = "fill"; + v_align = "fill"; + width = 20; + x_align = 0.5; + y_align = 0.5; + }; + + icon = { + pixel_size = 26; + theme = ""; + }; + }; + + margins = { + top = 8; + }; + }; + }; + + search = { + prompt = { + name = "prompt"; + icon = "edit-find"; + theme = ""; + pixel_size = 18; + h_align = "center"; + v_align = "center"; + }; + + clear = { + name = "clear"; + icon = "edit-clear"; + theme = ""; + pixel_size = 18; + h_align = "center"; + v_align = "center"; + }; + + input = { + h_align = "fill"; + h_expand = true; + icons = true; + }; + + spinner = { + hide = true; + }; + }; + }; + }; + }; + }; + + style = '' + @define-color foreground ${colors.fg.hex}; /* text */ + @define-color background ${colors.bg.hex}; /* base */ + @define-color cursor ${colors.primary.hex}; /* rosewater */ + + @define-color color0 ${colors.surface0.hex}; /* surface0 */ + @define-color color1 ${colors.red.hex}; /* red */ + @define-color color2 ${colors.green.hex}; /* green */ + @define-color color3 ${colors.yellow.hex}; /* yellow */ + @define-color color4 ${colors.blue.hex}; /* blue */ + @define-color color5 ${colors.pink.hex}; /* pink */ + @define-color color6 ${colors.teal.hex}; /* teal */ + @define-color color7 ${colors.subtext1.hex}; /* subtext1 */ + @define-color color8 ${colors.surface1.hex}; /* surface1 */ + @define-color color9 ${colors.red.hex}; /* red */ + @define-color color10 ${colors.green.hex}; /* green */ + @define-color color11 ${colors.yellow.hex}; /* yellow */ + @define-color color12 ${colors.blue.hex}; /* blue */ + @define-color color13 ${colors.pink.hex}; /* pink */ + @define-color color14 ${colors.teal.hex}; /* teal */ + @define-color color15 ${colors.subtext0.hex}; /* subtext0 */ + + #window, + #box, + #aiScroll, + #aiList, + #search, + #password, + #input, + #prompt, + #clear, + #typeahead, + #list, + child, + scrollbar, + slider, + #item, + #text, + #label, + #bar, + #sub, + #activationlabel { + all: unset; + } + + #cfgerr { + background: rgba(255, 0, 0, 0.4); + margin-top: 20px; + padding: 8px; + font-size: 1.2em; + } + + #window { + color: @foreground; + } + + #box { + border-radius: 2px; + background: @background; + padding: 32px; + border: 1px solid lighter(@background); + box-shadow: + 0 19px 38px rgba(0, 0, 0, 0.3), + 0 15px 12px rgba(0, 0, 0, 0.22); + } + + #search { + box-shadow: + 0 1px 3px rgba(0, 0, 0, 0.1), + 0 1px 2px rgba(0, 0, 0, 0.22); + background: lighter(@background); + padding: 8px; + } + + #prompt { + margin-left: 4px; + margin-right: 12px; + color: @foreground; + opacity: 0.2; + } + + #clear { + color: @foreground; + opacity: 0.8; + } + + #password, + #input, + #typeahead { + border-radius: 2px; + } + + #input { + background: none; + } + + #password { + } + + #spinner { + padding: 8px; + } + + #typeahead { + color: @foreground; + opacity: 0.8; + } + + #input placeholder { + opacity: 0.5; + } + + #list { + } + + child { + padding: 8px; + border-radius: 2px; + } + + child:selected, + child:hover { + background: alpha(@color1, 0.4); + } + + #item { + } + + #icon { + margin-right: 8px; + } + + #text { + } + + #label { + font-weight: 500; + } + + #sub { + opacity: 0.5; + font-size: 0.8em; + } + + #activationlabel { + } + + #bar { + } + + .barentry { + } + + .activation #activationlabel { + } + + .activation #text, + .activation #icon, + .activation #search { + opacity: 0.5; + } + + .aiItem { + padding: 10px; + border-radius: 2px; + color: @foreground; + background: @background; + } + + .aiItem.user { + padding-left: 0; + padding-right: 0; + } + + .aiItem.assistant { + background: lighter(@background); + } + ''; + }; + + config = { + app_launch_prefix = ""; + terminal_title_flag = ""; + locale = ""; + close_when_open = false; + theme = "nixos"; + monitor = ""; + hotreload_theme = false; + as_window = false; + timeout = 0; + disable_click_to_close = false; + force_keyboard_focus = false; + + keys = { + accept_typeahead = ["tab"]; + trigger_labels = "lalt"; + next = ["down"]; + prev = ["up"]; + close = ["esc"]; + remove_from_history = ["shift backspace"]; + resume_query = ["ctrl r"]; + toggle_exact_search = ["ctrl m"]; + + activation_modifiers = { + keep_open = "shift"; + alternate = "alt"; + }; + + ai = { + clear_session = ["ctrl x"]; + copy_last_response = ["ctrl c"]; + resume_session = ["ctrl r"]; + run_last_response = ["ctrl e"]; + }; + }; + + events = { + on_activate = ""; + on_selection = ""; + on_exit = ""; + on_launch = ""; + on_query_change = ""; + }; + + list = { + dynamic_sub = true; + keyboard_scroll_style = "emacs"; + max_entries = 50; + show_initial_entries = true; + single_click = true; + visibility_threshold = 20; + placeholder = "No Results"; + }; + + search = { + argument_delimiter = "#"; + placeholder = "Search..."; + delay = 0; + resume_last_query = false; + }; + + activation_mode = { + labels = "jkl;asdf"; + }; + + builtins = { + applications = { + weight = 5; + name = "applications"; + placeholder = "Applications"; + prioritize_new = true; + hide_actions_with_empty_query = true; + context_aware = true; + refresh = true; + show_sub_when_single = true; + show_icon_when_single = true; + show_generic = true; + history = true; + + actions = { + enabled = true; + hide_category = false; + hide_without_query = true; + }; + }; + + bookmarks = { + weight = 5; + placeholder = "Bookmarks"; + name = "bookmarks"; + icon = "bookmark"; + switcher_only = true; + + entries = [ + { + label = "Walker"; + url = "https://github.com/abenz1267/walker"; + keywords = ["walker" "github"]; + } + ]; + }; + + xdph_picker = { + hidden = true; + weight = 5; + placeholder = "Screen/Window Picker"; + show_sub_when_single = true; + name = "xdphpicker"; + switcher_only = true; + }; + + ai = { + weight = 5; + placeholder = "AI"; + name = "ai"; + icon = "help-browser"; + switcher_only = true; + show_sub_when_single = true; + + anthropic = { + prompts = [ + { + model = "claude-3-7-sonnet-20250219"; + temperature = 1; + max_tokens = 1000; + label = "General Assistant"; + prompt = "You are a helpful general assistant. Keep your answers short and precise."; + } + ]; + }; + }; + + calc = { + require_number = true; + weight = 5; + name = "calc"; + icon = "accessories-calculator"; + placeholder = "Calculator"; + min_chars = 4; + }; + + windows = { + weight = 5; + icon = "view-restore"; + name = "windows"; + placeholder = "Windows"; + show_icon_when_single = true; + }; + + clipboard = { + always_put_new_on_top = true; + exec = "wl-copy"; + weight = 5; + name = "clipboard"; + avoid_line_breaks = true; + placeholder = "Clipboard"; + image_height = 300; + max_entries = 10; + switcher_only = true; + }; + + commands = { + weight = 5; + icon = "utilities-terminal"; + switcher_only = true; + name = "commands"; + placeholder = "Commands"; + }; + + custom_commands = { + weight = 5; + icon = "utilities-terminal"; + name = "custom_commands"; + placeholder = "Custom Commands"; + }; + + emojis = { + exec = "wl-copy"; + weight = 5; + name = "emojis"; + placeholder = "Emojis"; + switcher_only = true; + history = true; + typeahead = true; + show_unqualified = false; + }; + + symbols = { + after_copy = ""; + weight = 5; + name = "symbols"; + placeholder = "Symbols"; + switcher_only = true; + history = true; + typeahead = true; + }; + + finder = { + use_fd = false; + fd_flags = "--ignore-vcs --type file"; + weight = 5; + icon = "file"; + name = "finder"; + placeholder = "Finder"; + switcher_only = true; + ignore_gitignore = true; + refresh = true; + concurrency = 8; + show_icon_when_single = true; + preview_images = false; + }; + + runner = { + eager_loading = true; + weight = 5; + icon = "utilities-terminal"; + name = "runner"; + placeholder = "Runner"; + typeahead = true; + history = true; + generic_entry = false; + refresh = true; + use_fd = false; + }; + + ssh = { + weight = 5; + icon = "preferences-system-network"; + name = "ssh"; + placeholder = "SSH"; + switcher_only = true; + history = true; + refresh = true; + }; + + switcher = { + weight = 5; + name = "switcher"; + placeholder = "Switcher"; + prefix = "/"; + }; + + websearch = { + keep_selection = true; + weight = 5; + icon = "applications-internet"; + name = "websearch"; + placeholder = "Websearch"; + + entries = [ + { + name = "searx"; + url = "https://search.zoeys.cloud/searx/search?q=%TERM%"; + } + ]; + }; + + dmenu = { + hidden = true; + weight = 5; + name = "dmenu"; + placeholder = "Dmenu"; + switcher_only = true; + show_icon_when_single = true; + }; + + translation = { + delay = 1000; + weight = 5; + name = "translation"; + icon = "accessories-dictionary"; + placeholder = "Translation"; + switcher_only = true; + provider = "googlefree"; + }; + }; + }; + }; + }; +} diff --git a/modules/home/apps/helpers/waybar/bar.sh b/modules/home/apps/helpers/waybar/bar.sh new file mode 100644 index 0000000..4510e01 --- /dev/null +++ b/modules/home/apps/helpers/waybar/bar.sh @@ -0,0 +1,83 @@ +#! /bin/bash + +# --- Configuration --- +bar="▁▂▃▄▅▆▇█" +# Number of bars Cava should output +num_bars=8 +# Max height for ASCII output (should match length of bar string - 1) +ascii_max_range=$((${#bar} - 1)) +# Temporary config file path (using PID $$ for uniqueness) +config_file="/tmp/polybar_cava_config_$$" + +# --- Argument Handling --- +if [ $# -lt 1 ]; then + # Print error message to stderr + echo "Error: Please provide the PulseAudio source name as an argument." >&2 + echo "Usage: $0 " >&2 + echo "Example: $0 alsa_output.pci-0000_00_1f.3.analog-stereo.monitor" >&2 + echo "You can find source names using: pactl list sources | grep 'Name:'" >&2 + exit 1 +fi + +# Assign the first argument to the pulse_source variable +pulse_source="$1" + +# --- Functions --- + +# Function to clean up the temporary config file on exit +cleanup() { + rm -f "$config_file" +} + +# --- Main Script --- + +# Set trap to call cleanup function on script exit (including Ctrl+C) +trap cleanup EXIT + +# Build the sed dictionary string to replace numbers with bar characters +dict="s/;//g;" +i=0 +# Use modern arithmetic expansion and loop condition +while ((i < ${#bar})); do + # Safely append to the dictionary string + dict="${dict}s/$i/${bar:$i:1}/g;" + # Use modern arithmetic increment + ((i++)) +done + +# Create the Cava configuration file using printf for safety +# Note: Using the pulse_source variable passed as an argument +printf '%s\n' " +[general] +bars = $num_bars +sleep_timer = 10 + +[input] +method = pulse +source = \"$pulse_source\" + +[output] +method = raw +raw_target = /dev/stdout +data_format = ascii +channels = mono +mono_option = average +ascii_max_range = $ascii_max_range + +[smoothing] +noise_reduction = 25 +" >"$config_file" || { + echo "Error: Failed to write Cava config." >&2 + exit 1 +} # Exit if write fails + +# Run Cava with the generated config and process its output +# Use 'exec cava' if you don't need the script to do anything after cava finishes +cava -p "$config_file" | while IFS= read -r line; do + # Translate numbers to bars using sed + echo "$line" | sed "$dict" +done + +# The trap will handle cleanup automatically here +# If 'exec cava' was used above, this part is unreachable +exit 0 diff --git a/modules/home/apps/helpers/waybar/default.nix b/modules/home/apps/helpers/waybar/default.nix index 719e39b..b1e1c82 100644 --- a/modules/home/apps/helpers/waybar/default.nix +++ b/modules/home/apps/helpers/waybar/default.nix @@ -15,479 +15,62 @@ in { }; config = mkIf cfg.enable { - services.swaync = { - enable = true; - style = lib.mkForce '' - * { - all: unset; - font-size: 14px; - font-family: "Adwaita Sans", "JetBrains Mono Nerd Font"; - transition: 200ms; - } - - trough highlight { - background: #cad3f5; - } - - scale trough { - margin: 0rem 1rem; - background-color: #363a4f; - min-height: 8px; - min-width: 70px; - } - - slider { - background-color: #8aadf4; - } - - .floating-notifications.background .notification-row .notification-background { - box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #363a4f; - border-radius: 12.6px; - margin: 18px; - background-color: #24273a; - color: #cad3f5; - padding: 0; - } - - .floating-notifications.background .notification-row .notification-background .notification { - padding: 7px; - border-radius: 12.6px; - } - - .floating-notifications.background .notification-row .notification-background .notification.critical { - box-shadow: inset 0 0 7px 0 #ed8796; - } - - .floating-notifications.background .notification-row .notification-background .notification .notification-content { - margin: 7px; - } - - .floating-notifications.background .notification-row .notification-background .notification .notification-content .summary { - color: #cad3f5; - } - - .floating-notifications.background .notification-row .notification-background .notification .notification-content .time { - color: #a5adcb; - } - - .floating-notifications.background .notification-row .notification-background .notification .notification-content .body { - color: #cad3f5; - } - - .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * { - min-height: 3.4em; - } - - .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action { - border-radius: 7px; - color: #cad3f5; - background-color: #363a4f; - box-shadow: inset 0 0 0 1px #494d64; - margin: 7px; - } - - .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover { - box-shadow: inset 0 0 0 1px #494d64; - background-color: #363a4f; - color: #cad3f5; - } - - .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active { - box-shadow: inset 0 0 0 1px #494d64; - background-color: #7dc4e4; - color: #cad3f5; - } - - .floating-notifications.background .notification-row .notification-background .close-button { - margin: 7px; - padding: 2px; - border-radius: 6.3px; - color: #24273a; - background-color: #ed8796; - } - - .floating-notifications.background .notification-row .notification-background .close-button:hover { - background-color: #ee99a0; - color: #24273a; - } - - .floating-notifications.background .notification-row .notification-background .close-button:active { - background-color: #ed8796; - color: #24273a; - } - - .control-center { - box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #363a4f; - border-radius: 12.6px; - margin: 18px; - background-color: #24273a; - color: #cad3f5; - padding: 14px; - } - - .control-center .widget-title > label { - color: #cad3f5; - font-size: 1.3em; - } - - .control-center .widget-title button { - border-radius: 7px; - color: #cad3f5; - background-color: #363a4f; - box-shadow: inset 0 0 0 1px #494d64; - padding: 8px; - } - - .control-center .widget-title button:hover { - box-shadow: inset 0 0 0 1px #494d64; - background-color: #5b6078; - color: #cad3f5; - } - - .control-center .widget-title button:active { - box-shadow: inset 0 0 0 1px #494d64; - background-color: #7dc4e4; - color: #24273a; - } - - .control-center .notification-row .notification-background { - border-radius: 7px; - color: #cad3f5; - background-color: #363a4f; - box-shadow: inset 0 0 0 1px #494d64; - margin-top: 14px; - } - - .control-center .notification-row .notification-background .notification { - padding: 7px; - border-radius: 7px; - } - - .control-center .notification-row .notification-background .notification.critical { - box-shadow: inset 0 0 7px 0 #ed8796; - } - - .control-center .notification-row .notification-background .notification .notification-content { - margin: 7px; - } - - .control-center .notification-row .notification-background .notification .notification-content .summary { - color: #cad3f5; - } - - .control-center .notification-row .notification-background .notification .notification-content .time { - color: #a5adcb; - } - - .control-center .notification-row .notification-background .notification .notification-content .body { - color: #cad3f5; - } - - .control-center .notification-row .notification-background .notification > *:last-child > * { - min-height: 3.4em; - } - - .control-center .notification-row .notification-background .notification > *:last-child > * .notification-action { - border-radius: 7px; - color: #cad3f5; - background-color: #181926; - box-shadow: inset 0 0 0 1px #494d64; - margin: 7px; - } - - .control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover { - box-shadow: inset 0 0 0 1px #494d64; - background-color: #363a4f; - color: #cad3f5; - } - - .control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active { - box-shadow: inset 0 0 0 1px #494d64; - background-color: #7dc4e4; - color: #cad3f5; - } - - .control-center .notification-row .notification-background .close-button { - margin: 7px; - padding: 2px; - border-radius: 6.3px; - color: #24273a; - background-color: #ee99a0; - } - - .close-button { - border-radius: 6.3px; - } - - .control-center .notification-row .notification-background .close-button:hover { - background-color: #ed8796; - color: #24273a; - } - - .control-center .notification-row .notification-background .close-button:active { - background-color: #ed8796; - color: #24273a; - } - - .control-center .notification-row .notification-background:hover { - box-shadow: inset 0 0 0 1px #494d64; - background-color: #8087a2; - color: #cad3f5; - } - - .control-center .notification-row .notification-background:active { - box-shadow: inset 0 0 0 1px #494d64; - background-color: #7dc4e4; - color: #cad3f5; - } - - .notification.critical progress { - background-color: #ed8796; - } - - .notification.low progress, - .notification.normal progress { - background-color: #8aadf4; - } - - .control-center-dnd { - margin-top: 5px; - border-radius: 8px; - background: #363a4f; - border: 1px solid #494d64; - box-shadow: none; - } - - .control-center-dnd:checked { - background: #363a4f; - } - - .control-center-dnd slider { - background: #494d64; - border-radius: 8px; - } - - .widget-dnd { - margin: 0px; - font-size: 1.1rem; - } - - .widget-dnd > switch { - font-size: initial; - border-radius: 8px; - background: #363a4f; - border: 1px solid #494d64; - box-shadow: none; - } - - .widget-dnd > switch:checked { - background: #363a4f; - } - - .widget-dnd > switch slider { - background: #494d64; - border-radius: 8px; - border: 1px solid #6e738d; - } - - .widget-mpris .widget-mpris-player .widget-mpd { - background: #363a4f; - padding: 7px; - } - - .widget-mpris .widget-mpris-title .widget-mpd .widget-mpd-title { - font-size: 1.2rem; - } - - .widget-mpris .widget-mpris-subtitle .widget-mpd .widget-mpd-subtitle { - font-size: 0.8rem; - } - - .widget-menubar > box > .menu-button-bar > button > label { - font-size: 3rem; - padding: 0.5rem 2rem; - } - - .widget-menubar > box > .menu-button-bar > :last-child { - color: #ed8796; - } - - .power-buttons button:hover, - .powermode-buttons button:hover, - .screenshot-buttons button:hover { - background: #363a4f; - } - - .control-center .widget-label > label { - color: #cad3f5; - font-size: 2rem; - } - - .widget-buttons-grid { - padding-top: 1rem; - } - - .widget-buttons-grid > flowbox > flowboxchild > button label { - font-size: 2.5rem; - } - - .widget-volume { - padding-top: 1rem; - } - - .widget-volume label { - font-size: 1.5rem; - color: #7dc4e4; - } - - .widget-volume trough highlight { - background: #7dc4e4; - } - - .widget-backlight trough highlight { - background: #eed49f; - } - - .widget-backlight label { - font-size: 1.5rem; - color: #eed49f; - } - - .widget-backlight .KB { - padding-bottom: 1rem; - } - - .image { - padding-right: 0.5rem; - } - ''; - }; - programs.waybar = { enable = true; systemd.enable = true; systemd.target = "graphical-session.target"; style = '' - * { - min-height: 0; - min-width: 0; - font-family: Cantarell; - font-size: 16px; - font-weight: 600; - } + /* Custom colors from lib/theme/default.nix */ + @define-color rosewater ${colors.rosewater.hex}; + @define-color flamingo ${colors.flamingo.hex}; + @define-color pink ${colors.pink.hex}; + @define-color mauve ${colors.mauve.hex}; + @define-color red ${colors.red.hex}; + @define-color maroon ${colors.maroon.hex}; + @define-color peach ${colors.peach.hex}; + @define-color yellow ${colors.yellow.hex}; + @define-color green ${colors.green.hex}; + @define-color teal ${colors.teal.hex}; + @define-color sky ${colors.sky.hex}; + @define-color sapphire ${colors.sapphire.hex}; + @define-color blue ${colors.blue.hex}; + @define-color lavender ${colors.lavender.hex}; + @define-color text ${colors.text.hex}; + @define-color subtext1 ${colors.subtext1.hex}; + @define-color subtext0 ${colors.subtext0.hex}; + @define-color overlay2 ${colors.overlay2.hex}; + @define-color overlay1 ${colors.overlay1.hex}; + @define-color overlay0 ${colors.overlay0.hex}; + @define-color surface2 ${colors.surface2.hex}; + @define-color surface1 ${colors.surface1.hex}; + @define-color surface0 ${colors.surface0.hex}; + @define-color base ${colors.base.hex}; + @define-color mantle ${colors.mantle.hex}; + @define-color crust ${colors.crust.hex}; - window#waybar { - transition-property: background-color; - transition-duration: 0.5s; - /* background-color: #1e1e2e; */ - /* background-color: #181825; */ - background-color: #11111b; - /* background-color: rgba(24, 24, 37, 0.6); */ - } - - #workspaces button { - padding: 0.3rem 0.6rem; - margin: 0.4rem 0.25rem; - border-radius: 6px; - /* background-color: #181825; */ - background-color: #1e1e2e; - color: #cdd6f4; - } - - #workspaces button:hover { - color: #1e1e2e; - background-color: #cdd6f4; - } - - #workspaces button.active { - background-color: #1e1e2e; - color: #89b4fa; - } - - #workspaces button.urgent { - background-color: #1e1e2e; - color: #f38ba8; - } - - #clock, - #pulseaudio, - #custom-logo, - #custom-power, - #custom-spotify, - #custom-notification, - #cpu, - #tray, - #memory, - #window, - #mpd - #mpris { - padding: 0.3rem 0.6rem; - margin: 0.4rem 0.25rem; - border-radius: 6px; - /* background-color: #181825; */ - background-color: #1e1e2e; - } - - #mpris.playing { - color: #a6e3a1; - } - - #mpris.paused { - color: #9399b2; - } - - #custom-sep { - padding: 0px; - color: #585b70; - } - - window#waybar.empty #window { - background-color: transparent; - } - - #cpu { - color: #94e2d5; - } - - #memory { - color: #cba6f7; - } - - #clock { - color: #74c7ec; - } - - #clock.simpleclock { - color: #89b4fa; - } - - #window { - color: #cdd6f4; - } - - #pulseaudio { - color: #b4befe; - } - - #pulseaudio.muted { - color: #a6adc8; - } - - #custom-logo { - color: #89b4fa; - } - - #custom-power { - color: #f38ba8; - } - - tooltip { - background-color: #181825; - border: 2px solid #89b4fa; - } + ${builtins.readFile ./mullvad-style.css} + ${builtins.readFile ./style.css} ''; + settings = let + # Import the Mullvad scripts + mullvad-status = import ./mullvad-status.nix {inherit pkgs;}; + mullvad-server-list = import ./mullvad-server-list.nix {inherit pkgs;}; + mullvad-menu = import ./mullvad-menu.nix {inherit pkgs;}; - settings = { + # Script to toggle Mullvad connection + mullvad-toggle = pkgs.writeShellScriptBin "mullvad-toggle" '' + set -euo pipefail + if mullvad status | grep -q "Connected"; then + mullvad disconnect + else + mullvad connect + fi + # Optional: trigger a Waybar refresh if needed, though interval should handle it + # pkill -SIGRTMIN+8 waybar + ''; + + cava = pkgs.writeShellScriptBin "cava" "${builtins.readFile ./bar.sh}"; + in { mainBar = { layer = "bottom"; position = "top"; @@ -497,12 +80,18 @@ in { "gtk-layer-shell" = true; passthrough = false; "fixed-center" = true; - "modules-left" = ["hyprland/workspaces" "hyprland/window"]; + "modules-left" = ["hyprland/workspaces" "hyprland/window" "niri/workspaces" "niri/window" "network#speed" "custom/cava-system" "custom/cava-tt"]; "modules-center" = ["mpris"]; "modules-right" = [ "cpu" "memory" + "temperature" + "custom/gpu-usage" + "custom/gpu-mem" + "custom/gpu-temp" "pulseaudio" + "custom/mullvad" + "custom/weather" "clock" "clock#simpleclock" "tray" @@ -511,7 +100,7 @@ in { ]; "custom/spotify" = { - format = " {}"; + format = "{}"; "return-type" = "json"; "on-click" = "playerctl -p spotify play-pause"; "on-click-right" = "spotifatius toggle-liked"; @@ -519,6 +108,16 @@ in { exec = "spotifatius monitor"; }; + "custom/mullvad" = { + format = "{}"; + return-type = "json"; + interval = 1; + exec = "${mullvad-status}/bin/mullvad-status-waybar"; + "on-click" = "${mullvad-toggle}/bin/mullvad-toggle"; + "on-click-right" = "${mullvad-menu}/bin/mullvad-menu"; + tooltip = true; + }; + mpd = { format = "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {title}"; "format-disconnected" = "Disconnected "; @@ -558,6 +157,60 @@ in { }; }; + "custom/cava-system" = { + format = "{}"; + exec = "${cava}/bin/cava alsa_output.usb-MOTU_M4_M4MA03F7DV-00.HiFi__Line1__sink.monitor"; + }; + + "custom/cava-tt" = { + format = "{}"; + exec = "${cava}/bin/cava cava-line-in.monitor"; + }; + + "custom/weather" = { + "format" = "{}°F"; + interval = 3600; + exec = "${lib.getExe pkgs.wttrbar} --location 'Holland,MI' --fahrenheit --mph"; + return-type = "json"; + }; + + "custom/gpu-temp" = { + interval = 10; + exec = "nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits"; + format = "{}°C "; + tooltip = false; + }; + + "custom/gpu-mem" = { + interval = 10; + exec = "nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits | awk '{printf \"%.1f\", $1/1024}'"; + format = "{}Gi"; + tooltip = false; + }; + + "custom/gpu-usage" = { + interval = 2; + exec = "nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits"; + format = "{}%"; + tooltip = false; + }; + + "network#speed" = { + interval = 1; + format = "{ifname}%%"; + format-wifi = " {bandwidthDownBytes} {bandwidthUpBytes}"; + format-ethernet = " {bandwidthDownBytes} {bandwidthUpBytes}"; + format-disconnected = "󰌙"; + tooltip-format = "{ipaddr}"; + format-linked = "󰈁 {ifname} (No IP)"; + tooltip-format-wifi = "{essid} {icon} {signalStrength}%"; + tooltip-format-ethernet = "{ifname} 󰌘"; + tooltip-format-disconnected = "󰌙 Disconnected"; + max-length = 22; + min-length = 20; + format-icons = ["󰤯" "󰤟" "󰤢" "󰤥" "󰤨"]; + }; + "hyprland/workspaces" = { "on-click" = "activate"; format = "{id}"; @@ -572,16 +225,24 @@ in { tray = { "show-passive-items" = true; - spacing = 10; + spacing = 2; }; "clock#simpleclock" = { tooltip = false; - format = " {:%H:%M}"; + format = "{:%H:%M}"; + }; + + "temperature" = { + hwmon-path-abs = "/sys/devices/platform/asus-ec-sensors/hwmon/hwmon3"; + input_filename = "temp2_input"; + critical-threshold = 70; + format = "{temperatureC}°C "; + format-critical = "󰸁 {temperatureC}°C"; }; clock = { - format = " {:L%a %d %b}"; + format = "{:L%a %d %b}"; calendar = { format = { days = "{}"; @@ -598,21 +259,22 @@ in { }; cpu = { - format = " {usage}%"; + format = "{usage}%"; tooltip = true; interval = 1; }; memory = { - format = " {used:0.1f}Gi"; + interval = 1; + format = "{used:0.1f}Gi"; }; pulseaudio = { - format = "{icon} {volume}%"; - "format-muted" = " muted"; + format = "{icon} {volume}%"; + "format-muted" = ""; "format-icons" = { headphone = ""; - default = [" " " " " "]; + default = ["" ""]; }; "on-click" = "pavucontrol"; }; diff --git a/modules/home/apps/helpers/waybar/mullvad-menu.nix b/modules/home/apps/helpers/waybar/mullvad-menu.nix new file mode 100644 index 0000000..ec8c242 --- /dev/null +++ b/modules/home/apps/helpers/waybar/mullvad-menu.nix @@ -0,0 +1,7 @@ +{pkgs}: let + script = ./mullvad-menu.sh; +in + pkgs.writeScriptBin "mullvad-menu" '' + #!${pkgs.runtimeShell} + exec ${pkgs.bash}/bin/bash ${script} + '' diff --git a/modules/home/apps/helpers/waybar/mullvad-menu.sh b/modules/home/apps/helpers/waybar/mullvad-menu.sh new file mode 100755 index 0000000..5e647b6 --- /dev/null +++ b/modules/home/apps/helpers/waybar/mullvad-menu.sh @@ -0,0 +1,126 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Helper: pick a relay (country [city] [hostname]) via fuzzel + jq +pick_relay() { + local api="$API_RESPONSE" + local country_list country_sel country_code + local city_list city_sel city_code loc_key + local host_list host_sel + + # Build "Country Name (cc)" array + mapfile -t country_list < <( + jq -r ' + .locations + | to_entries[] + | "\(.value.country) (\(.key|split("-")[0]))" + ' <<<"$api" | sort -u + ) + country_sel=$(printf '%s\n' "${country_list[@]}" | + fuzzel --dmenu --prompt="Select country:") + [[ -z "$country_sel" ]] && return 1 + country_code=$(grep -oP '(?<=\()[^)]+(?=\))' <<<"$country_sel") + + # Build "City Name (ccc)" array for that country + mapfile -t city_list < <( + jq -r --arg cc "$country_code" ' + .locations + | to_entries[] + | select(.key|startswith("\($cc)-")) + | "\(.value.city) (\(.key|split("-")[1]))" + ' <<<"$api" | sort -u + ) + if ((${#city_list[@]})); then + city_sel=$(printf '%s\n' "${city_list[@]}" | + fuzzel --dmenu --prompt="Select city in $country_sel:") + [[ -z "$city_sel" ]] && return 1 + city_code=$(grep -oP '(?<=\()[^)]+(?=\))' <<<"$city_sel") + loc_key="$country_code-$city_code" + fi + + # Optional hostname picker + mapfile -t host_list < <( + jq -r --arg loc "${loc_key:-}" ' + ( .openvpn.relays[] + , .wireguard.relays[] + , .bridge.relays[] ) + | select(.location == $loc) + | .hostname + ' <<<"$api" | sort -u + ) + if ((${#host_list[@]})); then + host_sel=$(printf '%s\n' "${host_list[@]}" | + fuzzel --dmenu --prompt="Select hostname (optional):") + # if they pick a hostname, we switch to pure-hostname mode + [[ -n "$host_sel" ]] && { + RELAY_CMD_ARGS=("$host_sel") + return 0 + } + fi + + # Assemble country [city] + RELAY_CMD_ARGS=("$country_code") + [[ -n "${city_code-}" ]] && RELAY_CMD_ARGS+=("$city_code") + return 0 +} + +# Ensure mullvad CLI exists +if ! command -v mullvad >/dev/null 2>&1; then + echo "Mullvad CLI not found" | fuzzel --dmenu + exit 1 +fi + +# Fetch status and API once +STATUS_RAW=$(mullvad status 2>/dev/null || echo "Disconnected") +API_RESPONSE=$(curl -s "https://api.mullvad.net/app/v1/relays") + +# Determine state and current relay (if any) +if [[ $STATUS_RAW == Connecting* ]]; then + STATE=Connecting +elif grep -q "^Connected" <<<"$STATUS_RAW"; then + STATE=Connected +else + STATE=Disconnected +fi + +# Try to parse the current relay hostname for Connected/Connecting +if [[ $STATE != Disconnected ]]; then + CURRENT_RELAY=$(grep -E 'Relay:' <<<"$STATUS_RAW" | + sed -E 's/.*Relay:[[:space:]]*//') +fi + +# Main menu +case $STATE in +Connected | Connecting) + # Offer Disconnect or Change Location + CHOICE=$(printf "Disconnect\nChange Location" | + fuzzel --dmenu --prompt="$STATE ${CURRENT_RELAY:-}") + case "$CHOICE" in + Disconnect) + mullvad disconnect + ;; + "Change Location") + if pick_relay; then + mullvad relay set location "${RELAY_CMD_ARGS[@]}" + fi + ;; + esac + ;; +Disconnected) + # Offer Connect or Connect to Location + CHOICE=$(printf "Connect\nConnect to Location" | + fuzzel --dmenu --prompt="Disconnected") + case "$CHOICE" in + Connect) + mullvad connect + ;; + "Connect to Location") + if pick_relay; then + mullvad relay set location "${RELAY_CMD_ARGS[@]}" + mullvad connect + fi + ;; + esac + ;; +esac + diff --git a/modules/home/apps/helpers/waybar/mullvad-server-list.nix b/modules/home/apps/helpers/waybar/mullvad-server-list.nix new file mode 100644 index 0000000..1dc0a25 --- /dev/null +++ b/modules/home/apps/helpers/waybar/mullvad-server-list.nix @@ -0,0 +1,57 @@ +{pkgs}: +pkgs.writeShellScriptBin "mullvad-server-list" '' + #!${pkgs.runtimeShell} + set -euo pipefail + + # Check if mullvad is installed + if ! command -v mullvad >/dev/null 2>&1; then + echo "Mullvad CLI not found" | fuzzel --dmenu + exit 1 + fi + + # Get the list of countries + COUNTRIES=$(mullvad relay list | grep -E "^[[:space:]]+[[:alpha:]]" | sed 's/^[[:space:]]*//g') + + # If no argument is provided, show the list of countries + if [ $# -eq 0 ]; then + echo "$COUNTRIES" | sort | fuzzel --dmenu --prompt="Select country: " + exit 0 + fi + + COUNTRY="$1" + + # If country is provided but no city, show cities for that country + if [ $# -eq 1 ]; then + CITIES=$(mullvad relay list | grep -A 100 "^[[:space:]]*$COUNTRY" | grep -E "^[[:space:]]{4}[[:alpha:]]" | sed 's/^[[:space:]]*//g' | head -n $(mullvad relay list | grep -A 100 "^[[:space:]]*$COUNTRY" | grep -E "^[[:space:]]{4}[[:alpha:]]" | wc -l)) + + if [ -z "$CITIES" ]; then + # If no cities found, show servers for this country + SERVERS=$(mullvad relay list | grep -A 100 "^[[:space:]]*$COUNTRY" | grep -E "^[[:space:]]{8}[a-z0-9]+" | sed 's/^[[:space:]]*//g' | cut -d' ' -f1-2) + echo "$SERVERS" | fuzzel --dmenu --prompt="Select server in $COUNTRY: " + else + echo "$CITIES" | fuzzel --dmenu --prompt="Select city in $COUNTRY: " + fi + exit 0 + fi + + # If both country and city are provided, show servers in that city + CITY="$2" + SERVERS=$(mullvad relay list | grep -A 100 "^[[:space:]]*$COUNTRY" | grep -A 100 "^[[:space:]]*$CITY" | grep -E "^[[:space:]]{8}[a-z0-9]+" | sed 's/^[[:space:]]*//g') + + # Extract server information and load (where available) + SERVER_INFO="" + while read -r server; do + # Get server details + SERVER_NAME=$(echo "$server" | awk '{print $1}') + SERVER_TYPE=$(echo "$server" | awk '{print $2}') + + # Get server load if available (using 'mullvad relay list --location all') + LOAD_INFO=$(mullvad relay list --location all | grep "$SERVER_NAME" | grep -o '[0-9]\+%' || echo "N/A") + + # Add server with load info to the list + SERVER_INFO="${SERVER_INFO}${SERVER_NAME} (${SERVER_TYPE}) - Load: ${LOAD_INFO}"$'\n' + done <<< "$SERVERS" + + # Display the server list with load information + echo "$SERVER_INFO" | grep -v "^$" | fuzzel --dmenu --prompt="Select server in $CITY: " +'' diff --git a/modules/home/apps/helpers/waybar/mullvad-status.nix b/modules/home/apps/helpers/waybar/mullvad-status.nix new file mode 100644 index 0000000..5d2edcf --- /dev/null +++ b/modules/home/apps/helpers/waybar/mullvad-status.nix @@ -0,0 +1,4 @@ +{pkgs}: +pkgs.writeShellScriptBin "mullvad-status-waybar" '' + exec ${pkgs.bash}/bin/bash ${./mullvad-status.sh} | jq -c +'' diff --git a/modules/home/apps/helpers/waybar/mullvad-status.sh b/modules/home/apps/helpers/waybar/mullvad-status.sh new file mode 100755 index 0000000..bfc3438 --- /dev/null +++ b/modules/home/apps/helpers/waybar/mullvad-status.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Get status (fall back to “Disconnected” on error) +STATUS=$(mullvad status 2>/dev/null || echo "Disconnected") + +if echo "$STATUS" | grep -q "^Connected"; then + # Extract relay hostname + SERVER=$(echo "$STATUS" | + sed -n 's/^[[:space:]]*Relay:[[:space:]]*//p' | + sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + + # Grab the entire Visible location line (location + IPs) + FULL_LOC=$(echo "$STATUS" | + sed -n 's/^[[:space:]]*Visible location:[[:space:]]*//p') + + # Split off the human‐readable location (before first dot) + LOCATION=${FULL_LOC%%.*} + + # The part after the first “. ” is the IP info + IPS=${FULL_LOC#*. } + + TOOLTIP="Connected via ${SERVER} (${IPS})" + + # Emit JSON for Waybar + echo '{"text": "'"${LOCATION}"'" + , "tooltip": "'"${TOOLTIP}"'" + , "class": "connected" + }' +else + echo '{"text": "Disconnected" + , "tooltip": "Mullvad: Disconnected" + , "class": "disconnected" + }' +fi diff --git a/modules/home/apps/helpers/waybar/mullvad-style.css b/modules/home/apps/helpers/waybar/mullvad-style.css new file mode 100644 index 0000000..de1975c --- /dev/null +++ b/modules/home/apps/helpers/waybar/mullvad-style.css @@ -0,0 +1,14 @@ +/* Mullvad specific styles */ +#custom-mullvad.connected { + color: @green; +} + +#custom-mullvad.disconnected { + color: @red; +} + +#custom-mullvad { + margin: 0 8px; + padding: 0 5px; + min-width: 100px; +} diff --git a/modules/home/apps/helpers/waybar/style.css b/modules/home/apps/helpers/waybar/style.css new file mode 100644 index 0000000..73e084f --- /dev/null +++ b/modules/home/apps/helpers/waybar/style.css @@ -0,0 +1,199 @@ +* { + font-family: Iosevka Nerd Font, monospace; + min-height: 14px; + font-size: 14px; + border: none; + border-radius: 6px; + padding: 4px; + margin: 0; + box-shadow: none; + text-shadow: none; + background-color: transparent; +} + +window#waybar { + padding: 8px; + background-color: @crust; +} + +#custom-cava-system, #custom-cava-tt { + color: @mauve; + border-left: 0px; + border-right: 0px; + padding: 6px; + font-family: 'bargraph'; + background: @base; + margin: 0px 2px; +} + +#window { + padding: 0px 8px 0px 8px; + background-color: @base; +} + +#cpu { + color: @green; + padding: 0px 12px; + background: @base; + margin-left: 1px; + border-radius: 6px 0 0 6px; +} + +#memory { + color: @green; + padding: 0px 12px; + background: @base; + margin: 0; + border-radius: 0; +} + +#temperature { + color: @green; + padding: 0px 12px; + background: @base; + margin-right: 1px; + border-radius: 0 6px 6px 0; +} + +#custom-gpu-temp { + padding: 0px 12px; + margin-right: 2px; + color: @blue; + background: @base; + border-radius: 0 6px 6px 0; +} + +#custom-gpu-mem { + padding: 0px 12px; + margin: 0; + color: @blue; + background: @base; + border-radius: 0; +} + +#custom-gpu-usage { + padding: 0px 12px; + margin-left: 1px; + color: @blue; + background: @base; + border-radius: 6px 0 0 6px; +} + +#tray { + background: @base; + padding: 4px; +} + +/* General Styling */ +tooltip, +menu, +#workspaces, +#clock, +#pulseaudio, +#backlight, +#bluetooth, +#network, +#battery, +#custom-power, +#custom-notification, +#custom-mullvad, +#custom-weather { + background: @base; + padding: 8px 8px; + margin-left: 1px; + margin-right: 1px; + border-radius: 6px; +} + +#custom-mullvad, +#custom-notification { + padding-left: 12px; + padding-right: 18px; +} + +#custom-power { + color: @red; + padding-left: 12px; + padding-right: 18px; +} + +#workspaces { + background: @base; + margin: 0; + margin-left: 3px; + padding: 0; + font-weight: bold; + font-style: normal; + opacity: 1; + font-size: 16px; + color: @surface0; + border-radius: 6px; +} + +#workspaces button { + padding: 0px 5px; + margin: 3px; + border-radius: 6px; + border: none; + transition: all 0.3s ease-in-out; + opacity: 0.4; +} + +#workspaces button.active { + color: @base; + background: @mauve; + min-width: 20px; + opacity: 1; +} + +#workspaces button:hover { + color: @text; + background: @mantle; + opacity: 1; + animation: none; +} + +#clock { + padding: 0 15px; + color: @lavender; + border-radius: 6px; +} + +#custom-launcher { + font-size: 18px; + transition: none; + padding: 0px 10px; + margin-right: 2px; + background: @base; + color: @sky; + border-radius: 0 6px 6px 0; +} + +#pulseaudio { + padding: 0 8px; + margin-right: 1px; + color: @yellow; + border-radius: 6px 6px; +} + +#bluetooth, +#network { + color: @mauve; + border-radius: 6px; + margin: 0 1px; +} + +#network.speed { + background: @base; + padding: 0px 6px; + min-width: 10px; + color: @teal; + border-radius: 6px; +} + +#network { + min-width: 30px; + padding: 0 7px 0 2px; + border-radius: 6px; +} + diff --git a/modules/home/apps/term/alacritty/default.nix b/modules/home/apps/term/alacritty/default.nix index 20d8a1a..726b0fc 100644 --- a/modules/home/apps/term/alacritty/default.nix +++ b/modules/home/apps/term/alacritty/default.nix @@ -12,22 +12,56 @@ in { enable = mkBoolOpt false "Enable Alacritty Term"; fonts = { + # normal = { + # family = mkStringOpt "Cozette" "The Family of the font"; + # # style = mkStringOpt "ExtraBold" "The Style of the font"; + # }; + # bold = { + # family = mkStringOpt "Cozette" "The Family of the font"; + # # style = mkStringOpt "Heavy" "The Style of the font"; + # }; + # italic = { + # family = mkStringOpt "Cozette" "The Family of the font"; + # # style = mkStringOpt "ExtraBold Italic" "The Style of the font"; + # }; + # bold_italic = { + # family = mkStringOpt "Cozette" "The Family of the font"; + # # style = mkStringOpt "Heavy Italic" "The Style of the font"; + # }; + normal = { - family = mkStringOpt "Iosevka" "The Family of the font"; - style = mkStringOpt "ExtraBold" "The Style of the font"; + family = mkStringOpt "Iosevka Nerd Font Mono" "The Family of the font"; + style = mkStringOpt "SemiBold" "The Style of the font"; }; bold = { - family = mkStringOpt "Iosevka" "The Family of the font"; - style = mkStringOpt "Heavy" "The Style of the font"; + family = mkStringOpt "Iosevka Nerd Font Mono" "The Family of the font"; + style = mkStringOpt "Bold" "The Style of the font"; }; italic = { - family = mkStringOpt "Iosevka" "The Family of the font"; - style = mkStringOpt "ExtraBold Italic" "The Style of the font"; + family = mkStringOpt "Iosevka Nerd Font Mono" "The Family of the font"; + style = mkStringOpt "SemiBold Italic" "The Style of the font"; }; bold_italic = { - family = mkStringOpt "Iosevka" "The Family of the font"; - style = mkStringOpt "Heavy Italic" "The Style of the font"; + family = mkStringOpt "Iosevka Nerd Font Mono" "The Family of the font"; + style = mkStringOpt "Bold Italic" "The Style of the font"; }; + + # normal = { + # family = mkStringOpt "PragmataPro" "The Family of the font"; + # # style = mkStringOpt "" "The Style of the font"; + # }; + # bold = { + # family = mkStringOpt "PragmataPro" "The Family of the font"; + # style = mkStringOpt "Bold" "The Style of the font"; + # }; + # italic = { + # family = mkStringOpt "PragmataPro" "The Family of the font"; + # style = mkStringOpt "Italic" "The Style of the font"; + # }; + # bold_italic = { + # family = mkStringOpt "PragmataPro" "The Family of the font"; + # style = mkStringOpt "Bold Italic" "The Style of the font"; + # }; }; }; @@ -37,18 +71,38 @@ in { catppuccin.enable = true; settings = { + colors = { + primary.background = colors.crust.hex; + }; + env = { + term = "xterm-256color"; + }; + cursor = { + style = { + shape = "Beam"; + }; + vi_mode_style = { + shape = "Beam"; + }; + }; window = { - opacity = 0.95; + # opacity = 0.95; padding = { x = 20; y = 20; }; }; font = { - normal = cfg.fonts.normal; - bold = cfg.fonts.bold; - italic = cfg.fonts.italic; - bold_italic = cfg.fonts.bold_italic; + size = 16.0; + normal = fonts.mono; + bold = "${fonts.mono} Bold"; + italic = "${fonts.mono} Italic"; + bold_italic = "${fonts.mono} Bold Italic"; + + offset = { + x = 0; + y = 0; + }; }; }; }; diff --git a/modules/home/apps/term/foot/default.nix b/modules/home/apps/term/foot/default.nix index be05d62..ad29f01 100644 --- a/modules/home/apps/term/foot/default.nix +++ b/modules/home/apps/term/foot/default.nix @@ -17,10 +17,34 @@ in { enable = true; settings = { main = { - font = "Iosevka:weight=bold:size=20"; + font = "${fonts.mono}:weight=bold:size=20"; }; colors = { alpha = "0.9"; + + # Custom colors from lib/theme/default.nix + foreground = "${colors.text.hex}"; + background = "${colors.crust.hex}"; + + # Normal colors + regular0 = "${colors.surface1.hex}"; # black + regular1 = "${colors.red.hex}"; # red + regular2 = "${colors.green.hex}"; # green + regular3 = "${colors.yellow.hex}"; # yellow + regular4 = "${colors.blue.hex}"; # blue + regular5 = "${colors.mauve.hex}"; # magenta + regular6 = "${colors.teal.hex}"; # cyan + regular7 = "${colors.text.hex}"; # white + + # Bright colors + bright0 = "${colors.surface2.hex}"; # bright black + bright1 = "${colors.red.hex}"; # bright red + bright2 = "${colors.green.hex}"; # bright green + bright3 = "${colors.yellow.hex}"; # bright yellow + bright4 = "${colors.blue.hex}"; # bright blue + bright5 = "${colors.mauve.hex}"; # bright magenta + bright6 = "${colors.teal.hex}"; # bright cyan + bright7 = "${colors.text.hex}"; # bright white }; }; }; diff --git a/modules/home/apps/term/ghostty/default.nix b/modules/home/apps/term/ghostty/default.nix index 7dcc845..274d703 100644 --- a/modules/home/apps/term/ghostty/default.nix +++ b/modules/home/apps/term/ghostty/default.nix @@ -10,17 +10,6 @@ with lib.custom; let in { options.apps.term.ghostty = with types; { enable = mkBoolOpt false "Enable Ghostty Term"; - - fonts = { - # normal = mkStringOpt "JetBrainsMonoNL Nerd Font Mono Bold" "Normal Font"; - # bold = mkStringOpt "JetBrainsMonoNL Nerd Font Mono ExtraBold" "Bold Font"; - # italic = mkStringOpt "JetBrainsMonoNL Nerd Font Mono Bold Italic" "Italic Font"; - # bold_italic = mkStringOpt "JetBrainsMonoNL Nerd Font Mono ExtraBold Italic" "Bold Italic Font"; - normal = mkStringOpt "Pragmata Pro Mono" "Normal Font"; - bold = mkStringOpt "Iosevka ExtraBold" "Bold Font"; - italic = mkStringOpt "Iosevka Bold Italic" "Italic Font"; - bold_italic = mkStringOpt "Iosevka ExtraBold Italic" "Bold Italic Font"; - }; }; config = mkIf cfg.enable { @@ -28,9 +17,19 @@ in { enable = true; settings = { - font-family = cfg.fonts.normal; + font-family = fonts.mono; gtk-single-instance = true; gtk-titlebar = false; + + background = colors.crust.hex; + + window-padding-x = 20; + window-padding-y = 20; + window-padding-balance = true; + font-style = "SemiBold"; + font-style-bold = "Bold"; + font-style-italic = "SemiBold Italic"; + font-style-bold-italic = "Bold Italic"; }; }; }; diff --git a/modules/home/apps/term/kitty/default.nix b/modules/home/apps/term/kitty/default.nix index 6f0bae0..fd89b18 100644 --- a/modules/home/apps/term/kitty/default.nix +++ b/modules/home/apps/term/kitty/default.nix @@ -1,5 +1,6 @@ { options, + pkgs, config, lib, ... @@ -10,39 +11,51 @@ with lib.custom; let in { options.apps.term.kitty = with types; { enable = mkBoolOpt false "Enable Kitty Term"; - - fonts = { - normal = mkStringOpt "JetBrainsMonoNL Nerd Font Mono Bold" "Normal Font"; - bold = mkStringOpt "JetBrainsMonoNL Nerd Font Mono ExtraBold" "Bold Font"; - italic = mkStringOpt "JetBrainsMonoNL Nerd Font Mono Bold Italic" "Italic Font"; - bold_italic = mkStringOpt "JetBrainsMonoNL Nerd Font Mono ExtraBold Italic" "Bold Italic Font"; - # normal = mkStringOpt "Iosevka Bold" "Normal Font"; - # bold = mkStringOpt "Iosevka ExtraBold" "Bold Font"; - # italic = mkStringOpt "Iosevka Bold Italic" "Italic Font"; - # bold_italic = mkStringOpt "Iosevka ExtraBold Italic" "Bold Italic Font"; - }; }; config = mkIf cfg.enable { programs.kitty = { enable = true; font = { - name = cfg.fonts.normal; - size = 14; + name = fonts.mono; + size = 16; }; extraConfig = '' - bold_font ${cfg.fonts.bold} - italic_font ${cfg.fonts.italic} - bold_italic_font ${cfg.fonts.bold_italic} + bold_font ${fonts.mono} Bold Italic + italic_font ${fonts.mono} Italic + bold_italic_font ${fonts.mono} Bold Italic + + shell ${lib.getExe pkgs.nushell} ''; catppuccin.enable = true; settings = { - window_padding_width = 12; - background_opacity = "0.9"; - # background = "#000000"; + window_padding_width = 20; + # background_opacity = "0.9"; + background = colors.crust.hex; + foreground = colors.text.hex; + + # Normal colors + color0 = colors.surface1.hex; # black + color1 = colors.red.hex; # red + color2 = colors.green.hex; # green + color3 = colors.yellow.hex; # yellow + color4 = colors.blue.hex; # blue + color5 = colors.mauve.hex; # magenta + color6 = colors.teal.hex; # cyan + color7 = colors.text.hex; # white + + # Bright colors + color8 = colors.surface2.hex; # bright black + color9 = colors.red.hex; # bright red + color10 = colors.green.hex; # bright green + color11 = colors.yellow.hex; # bright yellow + color12 = colors.blue.hex; # bright blue + color13 = colors.mauve.hex; # bright magenta + color14 = colors.teal.hex; # bright cyan + color15 = colors.text.hex; # bright white }; }; }; diff --git a/modules/home/apps/term/rio/default.nix b/modules/home/apps/term/rio/default.nix index 72cd2a8..5d62949 100644 --- a/modules/home/apps/term/rio/default.nix +++ b/modules/home/apps/term/rio/default.nix @@ -16,7 +16,6 @@ in { config = mkIf cfg.enable { programs.rio = { enable = true; - package = inputs.rio-term.packages.${pkgs.system}.default; settings = { window = { opacity = 0.9; @@ -32,27 +31,27 @@ in { fonts = { regular = { - family = "Iosevka"; + family = fonts.mono; style = "Normal"; - weight = 700; + weight = 400; }; bold = { - family = "Iosevka"; + family = fonts.mono; style = "Normal"; - weight = 800; - }; - - italic = { - family = "Iosevka"; - style = "Italic"; weight = 700; }; - bold-italic = { - family = "Iosevka"; + italic = { + family = fonts.mono; style = "Italic"; - weight = 800; + weight = 400; + }; + + bold-italic = { + family = fonts.mono; + style = "Italic"; + weight = 700; }; }; }; diff --git a/modules/home/apps/tools/direnv/default.nix b/modules/home/apps/tools/direnv/default.nix index 5f77244..6a2ca7b 100644 --- a/modules/home/apps/tools/direnv/default.nix +++ b/modules/home/apps/tools/direnv/default.nix @@ -1,8 +1,6 @@ { - options, config, lib, - pkgs, ... }: with lib; @@ -18,6 +16,12 @@ in { direnv = { enable = true; nix-direnv.enable = true; + config = { + global = { + log_format = "-"; + log_filter = "^$"; + }; + }; }; }; home.sessionVariables = { diff --git a/modules/home/apps/tools/neovim/config/lazyvim.json b/modules/home/apps/tools/neovim/config/lazyvim.json index 044f553..f2fecfc 100644 --- a/modules/home/apps/tools/neovim/config/lazyvim.json +++ b/modules/home/apps/tools/neovim/config/lazyvim.json @@ -14,6 +14,7 @@ "lazyvim.plugins.extras.lang.toml", "lazyvim.plugins.extras.lang.json", "lazyvim.plugins.extras.lang.clangd", + "lazyvim.plugins.extras.lang.rust", "lazyvim.plugins.extras.lang.markdown", "lazyvim.plugins.extras.lang.nix", "lazyvim.plugins.extras.lang.sql", @@ -32,8 +33,9 @@ "lazyvim.plugins.extras.coding.luasnip", "lazyvim.plugins.extras.coding.blink" ], + "install_version": 8, "news": { - "NEWS.md": "6520" + "NEWS.md": "10960" }, "version": 8 } diff --git a/modules/home/apps/tools/neovim/config/lua/config/lazy.lua b/modules/home/apps/tools/neovim/config/lua/config/lazy.lua index 7f21316..580d5dd 100644 --- a/modules/home/apps/tools/neovim/config/lua/config/lazy.lua +++ b/modules/home/apps/tools/neovim/config/lua/config/lazy.lua @@ -3,34 +3,7 @@ require("lazy").setup({ -- add LazyVim and import its plugins { "LazyVim/LazyVim", import = "lazyvim.plugins" }, -- import/override with your plugins - -- { import = "lazyvim.plugins.extras.lang.rust" }, - -- { import = "lazyvim.plugins.extras.lang.json" }, - -- { import = "lazyvim.plugins.extras.lang.astro" }, - -- { import = "lazyvim.plugins.extras.lang.git" }, - -- { import = "lazyvim.plugins.extras.lang.docker" }, - -- { import = "lazyvim.plugins.extras.lang.clangd" }, - -- { import = "lazyvim.plugins.extras.lang.cmake" }, - -- { import = "lazyvim.plugins.extras.lang.haskell" }, - -- { import = "lazyvim.plugins.extras.lang.java" }, - -- { import = "lazyvim.plugins.extras.lang.markdown" }, - -- { import = "lazyvim.plugins.extras.lang.nix" }, - -- { import = "lazyvim.plugins.extras.lang.sql" }, - -- { import = "lazyvim.plugins.extras.lang.svelte" }, - -- { import = "lazyvim.plugins.extras.lang.tailwind" }, - -- { import = "lazyvim.plugins.extras.lang.tex" }, - -- { import = "lazyvim.plugins.extras.lang.typescript" }, - -- { import = "lazyvim.plugins.extras.lang.toml" }, - -- { import = "lazyvim.plugins.extras.lang.angular" }, - -- - -- { import = "lazyvim.plugins.extras.formatting.prettier" }, - -- - -- { import = "lazyvim.plugins.extras.coding.luasnip" }, - -- { import = "lazyvim.plugins.extras.coding.yanky" }, - -- - -- { import = "lazyvim.plugins.extras.dap.core" }, { import = "plugins" }, - { import = "plugins.extras.rust" }, - -- { import = "plugins.extras.clangd" }, }, defaults = { -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. diff --git a/modules/home/apps/tools/neovim/config/lua/config/options.lua b/modules/home/apps/tools/neovim/config/lua/config/options.lua index a2fd6f4..329fdd6 100644 --- a/modules/home/apps/tools/neovim/config/lua/config/options.lua +++ b/modules/home/apps/tools/neovim/config/lua/config/options.lua @@ -9,3 +9,7 @@ end -- in this case. vim.g.lazyvim_blink_main = true + +vim.o.termguicolors = true + +vim.g.lazyvim_python_lsp = "basedpyright" diff --git a/modules/home/apps/tools/neovim/config/lua/plugins/core.lua b/modules/home/apps/tools/neovim/config/lua/plugins/core.lua index ef2df27..436b23a 100644 --- a/modules/home/apps/tools/neovim/config/lua/plugins/core.lua +++ b/modules/home/apps/tools/neovim/config/lua/plugins/core.lua @@ -6,61 +6,51 @@ return { news = { lazyvim = false }, }, }, - { - "drewxs/ash.nvim", - lazy = false, - priority = 1000, - }, - { - "dgox16/oldworld.nvim", - lazy = false, - priority = 1000, - }, - { - "snacks.nvim", - opts = { - scroll = { - enabled = false, - }, - dashboard = { - preset = { - header = [[ - /l、 - (゚、 。 7 - l ~ヽ - じしf_,)ノ - ]], - }, - }, - }, - }, - -- { - -- "uZer/pywal16.nvim", - -- -- for local dev replace with: - -- -- dir = '~/your/path/pywal16.nvim', - -- config = function() - -- vim.cmd.colorscheme("pywal16") - -- end, - -- }, { "catppuccin", - opts = { - transparent_background = true, - integrations = { - blink_cmp = true, - }, - -- color_overrides = { - -- mocha = { - -- base = "#000000", - -- mantle = "#000000", - -- crust = "#000000", - -- }, - -- }, - }, + config = function() + require("catppuccin").setup({ + transparent_background = false, + integrations = { + blink_cmp = true, + nvimtree = true, + }, + custom_highlights = function(colors) + return { + Normal = { bg = colors.crust }, + NormalFloat = { bg = colors.crust }, + + -- Completion menu (nvim-cmp) + Pmenu = { bg = colors.crust }, + PmenuSel = { bg = colors.surface0 }, + CmpItemAbbr = { bg = colors.crust }, + CmpItemAbbrMatch = { bg = colors.crust }, + + -- Tabs + TabLine = { bg = colors.crust }, + TabLineFill = { bg = colors.crust }, + TabLineSel = { bg = colors.crust }, + + -- Status line + StatusLine = { bg = colors.crust }, + StatusLineNC = { bg = colors.crust }, + + -- Line numbers + LineNr = { bg = colors.crust }, + SignColumn = { bg = colors.crust }, + } + end, + color_overrides = { + mocha = { + base = "#11111b", + mantle = "#11111b", + crust = "#11111b", + }, + }, + }) + end, }, "f-person/git-blame.nvim", - { "nvim-lualine/lualine.nvim", enabled = false }, - { "echasnovski/mini.statusline", opts = {} }, { "stevearc/conform.nvim", opts = { @@ -76,40 +66,47 @@ return { }, }, { - "folke/snacks.nvim", - priority = 1000, - lazy = false, + "christoomey/vim-tmux-navigator", + cmd = { + "TmuxNavigateLeft", + "TmuxNavigateDown", + "TmuxNavigateUp", + "TmuxNavigateRight", + "TmuxNavigatePrevious", + "TmuxNavigatorProcessList", + }, keys = { - { - "z", - function() - Snacks.zen() - end, - desc = "Toggle Zen Mode", - }, + { "", "TmuxNavigateLeft" }, + { "", "TmuxNavigateDown" }, + { "", "TmuxNavigateUp" }, + { "", "TmuxNavigateRight" }, + { "", "TmuxNavigatePrevious" }, }, }, { - "lukas-reineke/indent-blankline.nvim", - main = "ibl", - tag = "v3.8.2", - ---@module "ibl" - ---@type ibl.config - -- opts = { - -- debounce = 100, - -- indent = { char = "|" }, - -- whitespace = { highlight = "Whitespace", "NonText" }, - -- }, + "m4xshen/hardtime.nvim", + lazy = false, + dependencies = { "MunifTanjim/nui.nvim" }, + opts = {}, }, { "neovim/nvim-lspconfig", + ---@class PluginLspOpts opts = { servers = { - emmet_ls = {}, - slang = { - inlayHints = { - deducedTypes = true, - paramaterNames = true, + jinja_lsp = {}, + emmet_ls = { + filetypes = { "html", "jinja" }, + }, + somesass_ls = {}, + slangd = { + settings = { + slangd = { + inlayHints = { + deducedTypes = true, + paramaterNames = true, + }, + }, }, }, nil_ls = { @@ -145,10 +142,4 @@ return { require("force-cul").setup() end, }, - -- { - -- "supermaven-inc/supermaven-nvim", - -- config = function() - -- require("supermaven-nvim").setup({}) - -- end, - -- }, } diff --git a/modules/home/apps/tools/starship/default.nix b/modules/home/apps/tools/starship/default.nix index a68fd52..2b5f420 100644 --- a/modules/home/apps/tools/starship/default.nix +++ b/modules/home/apps/tools/starship/default.nix @@ -16,6 +16,7 @@ in { programs.starship = { enable = true; enableZshIntegration = config.programs.zsh.enable; + enableNushellIntegration = config.programs.nushell.enable; settings = { add_newline = false; format = "$username$directory$git_branch$git_status$python$rust$nodejs$nix_shell$cmd_duration$line_break$character"; diff --git a/modules/home/apps/tools/tmux/default.nix b/modules/home/apps/tools/tmux/default.nix index 25b62ec..a2ef3c9 100644 --- a/modules/home/apps/tools/tmux/default.nix +++ b/modules/home/apps/tools/tmux/default.nix @@ -16,15 +16,15 @@ in { config = mkIf cfg.enable { catppuccin.tmux = { enable = true; - # extraConfig = '' - # set -g @catppuccin_window_status_style "basic" - # set -g @catppuccin_status_background "#000000" - # ''; + extraConfig = '' + set -g @catppuccin_window_status_style "basic" + set -g @catppuccin_status_background "#11111b" + ''; }; programs.tmux = { enable = true; - shell = "${pkgs.zsh}/bin/zsh"; + shell = "${lib.getExe pkgs.nushell}"; historyLimit = 100000; plugins = with pkgs; [ tmuxPlugins.sensible @@ -42,7 +42,8 @@ in { set-window-option -g pane-base-index 1 set-option -g renumber-windows on - set -g default-terminal "tmux-256color" + set -g default-terminal "$TERM" + set -ag terminal-overrides ",$TERM:Tc" set -g allow-passthrough on set -g status-right-length 100 diff --git a/modules/home/apps/web/librewolf/default.nix b/modules/home/apps/web/librewolf/default.nix index a96afd1..b6864c5 100644 --- a/modules/home/apps/web/librewolf/default.nix +++ b/modules/home/apps/web/librewolf/default.nix @@ -61,7 +61,7 @@ in { } ]; - iconUpdateURL = "https://www.openstreetmap.org/favicon.ico"; + icon = "https://www.openstreetmap.org/favicon.ico"; definedAliases = ["@openstreetmap" "@osm"]; }; @@ -72,7 +72,7 @@ in { } ]; - iconUpdateURL = "https://search.zoeys.computer/searx/static/themes/simple/img/favicon.svg"; + icon = "https://search.zoeys.computer/searx/static/themes/simple/img/favicon.svg"; definedAliases = ["@searx"]; }; @@ -83,7 +83,7 @@ in { } ]; - iconUpdateURL = "https://docs.rs/-/static/favicon.ico"; + icon = "https://docs.rs/-/static/favicon.ico"; definedAliases = ["@docs"]; }; @@ -94,7 +94,7 @@ in { } ]; - iconUpdateURL = "https://crates.io/assets/cargo.png"; + icon = "https://crates.io/assets/cargo.png"; definedAliases = ["@crates"]; }; }; diff --git a/modules/home/apps/web/zen/default.nix b/modules/home/apps/web/zen/default.nix new file mode 100644 index 0000000..e61cb9a --- /dev/null +++ b/modules/home/apps/web/zen/default.nix @@ -0,0 +1,24 @@ +{ + lib, + config, + pkgs, + ... +}: +with lib; +with lib.custom; let + cfg = config.apps.web.zen; +in { + options.apps.web.zen = with types; { + enable = mkBoolOpt false "Enable or disable zen"; + + setDefault = mkBoolOpt false "Set zen as default browser"; + }; + + config = mkIf cfg.enable { + xdg.mimeApps.defaultApplications = mkIf cfg.setDefault { + "text/html" = "zen-beta.desktop"; + "x-scheme-handler/http" = "zen-beta.desktop"; + "x-scheme-handler/https" = "zen-beta.desktop"; + }; + }; +} diff --git a/modules/home/rice/gtk/default.nix b/modules/home/rice/gtk/default.nix index e175b11..c584f05 100644 --- a/modules/home/rice/gtk/default.nix +++ b/modules/home/rice/gtk/default.nix @@ -26,8 +26,8 @@ in { enable = true; font = { - name = "Adwaita Sans"; - size = 11; + name = fonts.ui; + size = 12; }; theme = { diff --git a/modules/home/services/hypridle/default.nix b/modules/home/services/hypridle/default.nix index e2c70f7..0d4d7ca 100644 --- a/modules/home/services/hypridle/default.nix +++ b/modules/home/services/hypridle/default.nix @@ -21,7 +21,7 @@ in { package = pkgs.swaylock-effects; settings = with colors; { clock = true; - color = base; + color = base.hex; font = "Work Sans"; image = "${wallpaper}"; show-failed-attempts = false; @@ -33,21 +33,21 @@ in { inside-color = "00000000"; key-hl-color = "f2cdcd"; separator-color = "00000000"; - text-color = text; + text-color = text.hex; text-caps-lock-color = ""; - line-ver-color = love; - ring-ver-color = rose; - inside-ver-color = base; - text-ver-color = text; - ring-wrong-color = foam; - text-wrong-color = foam; - inside-wrong-color = base; - inside-clear-color = base; - text-clear-color = text; - ring-clear-color = iris; - line-clear-color = base; - line-wrong-color = base; - bs-hl-color = foam; + line-ver-color = rosewater.hex; + ring-ver-color = rosewater.hex; + inside-ver-color = base.hex; + text-ver-color = text.hex; + ring-wrong-color = teal.hex; + text-wrong-color = teal.hex; + inside-wrong-color = base.hex; + inside-clear-color = base.hex; + text-clear-color = text.hex; + ring-clear-color = lavender.hex; + line-clear-color = base.hex; + line-wrong-color = base.hex; + bs-hl-color = teal.hex; line-uses-ring = false; grace = 2; grace-no-mouse = true; diff --git a/modules/home/shells/zsh/aliases.nix b/modules/home/shells/aliases.nix similarity index 100% rename from modules/home/shells/zsh/aliases.nix rename to modules/home/shells/aliases.nix diff --git a/modules/home/shells/fish/aliases.nix b/modules/home/shells/fish/aliases.nix deleted file mode 100644 index f245343..0000000 --- a/modules/home/shells/fish/aliases.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: -with lib; -with pkgs; { - ytmp3 = '' - ${getExe yt-dlp} -x --continue --add-metadata --embed-thumbnail --audio-format mp3 --audio-quality 0 --metadata-from-title="%(artist)s - %(title)s" --prefer-ffmpeg -o "%(title)s.%(ext)s"''; - cat = "${getExe bat} --style=plain"; - vpn = "mullvad"; - uuid = "cat /proc/sys/kernel/random/uuid"; - grep = getExe ripgrep; - fzf = getExe skim; - untar = "tar -xvf"; - untargz = "tar -xzf"; - du = getExe du-dust; - ps = getExe procs; - lb = "pw-loopback -C \"alsa_input.pci-0000_0d_00.4.analog-stereo\" -P \"Scarlett Solo (3rd Gen.) Headphones / Line 1-2\""; - deploy = "nixos-rebuild switch --flake ~/nixos#pluto --target-host zoeys.computer --use-remote-sudo"; - m = "mkdir -p"; - fcd = "cd $(find -type d | fzf)"; - l = "ls -lF --time-style=long-iso --icons"; - sc = "sudo systemctl"; - scu = "systemctl --user "; - la = "${getExe eza} -lah --tree"; - ls = "${getExe eza} -h --git --icons --color=auto --group-directories-first -s extension"; - tree = "${getExe eza} --tree --icons --tree"; - kys = "shutdown now"; - gpl = "curl https://www.gnu.org/licenses/gpl-3.0.txt -o LICENSE"; - agpl = "curl https://www.gnu.org/licenses/agpl-3.0.txt -o LICENSE"; - tsm = "transmission-remote"; - g = "git"; - n = "nix"; - r = "rebuild"; - vm = "nixos-rebuild build-vm --flake ~/nixos#earth"; - mnt = "udisksctl mount -b"; - umnt = "udisksctl unmount -b"; - burn = "pkill -9"; - diff = "diff --color=auto"; - wu = "vpn disconnect -w && awsvpnclient start --config ~/Downloads/cvpn-endpoint-085400ccc19bb4a17.ovpn"; - "v" = "nvim"; - ".." = "cd .."; - "..." = "cd ../../"; - "...." = "cd ../../../"; - "....." = "cd ../../../../"; - "......" = "cd ../../../../../"; -} diff --git a/modules/home/shells/fish/default.nix b/modules/home/shells/fish/default.nix index a14b78c..77fda66 100644 --- a/modules/home/shells/fish/default.nix +++ b/modules/home/shells/fish/default.nix @@ -66,7 +66,7 @@ in { ''; }; - shellAliases = import ./aliases.nix {inherit pkgs lib config;}; + shellAliases = import ../aliases.nix {inherit pkgs lib config;}; }; home.packages = with pkgs; [ diff --git a/modules/home/shells/nu/aliases.nix b/modules/home/shells/nu/aliases.nix index 9066270..f96d667 100644 --- a/modules/home/shells/nu/aliases.nix +++ b/modules/home/shells/nu/aliases.nix @@ -17,16 +17,13 @@ with pkgs; { untargz = "tar -xzf"; MANPAGER = "sh -c 'col -bx | bat -l man -p'"; du = getExe du-dust; - ps = getExe procs; lb = "pw-loopback -C \"alsa_input.pci-0000_0d_00.4.analog-stereo\" -P \"Scarlett Solo (3rd Gen.) Headphones / Line 1-2\""; deploy = "nixos-rebuild switch --flake ~/nixos#pluto --target-host zoeys.computer --use-remote-sudo"; - m = "mkdir -p"; - fcd = "cd $(find -type d | fzf)"; - l = "ls -lF --time-style=long-iso --icons"; + m = "mkdir"; + l = "exa -lF --time-style=long-iso --icons"; sc = "sudo systemctl"; scu = "systemctl --user "; la = "${getExe eza} -lah --tree"; - ls = "${getExe eza} -h --git --icons --color=auto --group-directories-first -s extension"; tree = "${getExe eza} --tree --icons --tree"; kys = "shutdown now"; lv = "nvim -c \"normal '\''0\""; @@ -37,11 +34,8 @@ with pkgs; { n = "nix"; r = "rebuild"; vm = "nixos-rebuild build-vm --flake ~/nixos#earth"; - mnt = "udisksctl mount -b"; - umnt = "udisksctl unmount -b"; burn = "pkill -9"; diff = "diff --color=auto"; - wu = "vpn disconnect -w && awsvpnclient start --config ~/Downloads/cvpn-endpoint-085400ccc19bb4a17.ovpn"; "v" = "nvim"; ".." = "cd .."; "..." = "cd ../../"; diff --git a/modules/home/shells/nu/default.nix b/modules/home/shells/nu/default.nix index 30dcc29..3b6fa8d 100644 --- a/modules/home/shells/nu/default.nix +++ b/modules/home/shells/nu/default.nix @@ -17,47 +17,35 @@ in { programs.nushell = { enable = true; - # Nushell doesn't need generateCompletions like fish - extraConfig = '' - # Environment variables - let-env LC_ALL = "en_US.UTF-8" - let-env SSH_AUTH_SOCK = "/run/user/1000/keyring/ssh" - let-env FLAKE = "/home/zoey/nixos/" + $env.config.show_banner = false - # FZF settings - let-env FZF_PREVIEW_FILE_CMD = "head -n 10" - let-env FZF_PREVIEW_DIR_CMD = "ls" - - def pf [] { - fzf --bind ctrl-y:preview-up,ctrl-e:preview-down \ - --bind ctrl-b:preview-page-up,ctrl-f:preview-page-down \ - --bind ctrl-u:preview-half-page-up,ctrl-d:preview-half-page-down \ - --bind ctrl-k:up,ctrl-j:down \ - --preview='bat --style=numbers --color=always --line-range :100 {}' + if ('TMUX' in $env == false) { + exec tmux } - def ff [] { - let files = (pf) - for file in $files { - let cmd = $"v ($file)" - echo $cmd - nu -c $cmd - } - } + fastfetch --config minimal ''; - # Nushell handles plugins differently, you might want to use modules instead - # or configure external tools directly - extraEnv = '' - # Add any environment-specific configuration here + # Environment variables + $env.LC_ALL = "en_US.UTF-8" + + $env.SSH_AUTH_SOCK = "/run/user/1000/keyring/ssh" + $env.FLAKE = "/home/zoey/nixos/" + + # FZF settings + $env.FZF_PREVIEW_FILE_CMD = "head -n 10" + $env.FZF_PREVIEW_DIR_CMD = "ls" ''; # Import aliases (you'll need to convert fish aliases to Nushell format) shellAliases = import ./aliases.nix {inherit pkgs lib config;}; }; + programs.carapace.enable = true; + programs.carapace.enableNushellIntegration = true; + home.packages = with pkgs; [ gnumake comma diff --git a/modules/home/shells/zsh/default.nix b/modules/home/shells/zsh/default.nix index 8e12e8c..fe91f21 100644 --- a/modules/home/shells/zsh/default.nix +++ b/modules/home/shells/zsh/default.nix @@ -22,7 +22,7 @@ in { LC_ALL = "en_US.UTF-8"; ZSH_AUTOSUGGEST_USE_ASYNC = "true"; SSH_AUTH_SOCK = "/run/user/1000/keyring/ssh"; - FLAKE = "/home/zoey/nixos/"; + NH_FLAKE = "/home/zoey/nixos/"; }; # zprof.enable = true; history = { @@ -33,7 +33,7 @@ in { ignoreSpace = true; }; - initExtra = let + initContent = let sources = with pkgs; [ "${zsh-nix-shell}/share/zsh-nix-shell/nix-shell.plugin.zsh" "${zsh-history}/share/zsh/init.zsh" @@ -77,7 +77,7 @@ in { media = "/run/media/$USER"; }; - shellAliases = import ./aliases.nix {inherit pkgs lib config;}; + shellAliases = import ../aliases.nix {inherit pkgs lib config;}; }; home.packages = with pkgs; [ diff --git a/modules/home/wms/hyprland/default.nix b/modules/home/wms/hyprland/default.nix index 1d6d28d..2602d18 100644 --- a/modules/home/wms/hyprland/default.nix +++ b/modules/home/wms/hyprland/default.nix @@ -54,10 +54,7 @@ in { wayland.windowManager.hyprland.settings = with colors; { exec-once = [ - # "pw-loopback -C \"alsa_input.pci-0000_0d_00.4.analog-stereo\" -P \"Scarlett Solo (3rd Gen.) Headphones / Line 1-2\"" - # "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" - # "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" - "librewolf" + "zen" "thunderbird" "vesktop" "spotify" @@ -65,20 +62,31 @@ in { "signal-desktop" ]; - env = [ - "XDG_SESSION_TYPE,wayland" - "XDG_SESSION_DESKTOP,Hyprland" - "XDG_CURRENT_DESKTOP,Hyprland" - ]; + # env = [ + # "XDG_SESSION_TYPE,wayland" + # "XDG_SESSION_DESKTOP,Hyprland" + # "XDG_CURRENT_DESKTOP,Hyprland" + # ]; bind = [ - ''${mod},RETURN,exec,${lib.getExe pkgs.kitty}'' + "${mod},RETURN,exec,${lib.getExe pkgs.kitty}" - "${mod},D,exec,rofi -show drun" + "${mod},D,exec,fuzzel" "${mod},Q,killactive" "${mod},M,exit" "${mod},P,pseudo" + "${mod},Z,exec,${pkgs.writeShellScriptBin "zen-launcher" '' + ZEN_RESULT=$(${inputs.hyprland.packages.${pkgs.system}.default}/bin/hyprctl clients -j | ${lib.getExe pkgs.jq} '.[] | select(.class | contains("zen"))') + + if [ -z "$ZEN_RESULT" ]; then + ${lib.getExe inputs.zen-browser.packages.${pkgs.system}.beta} & + disown + else + ZEN_WORKSPACE=$(echo "$ZEN_RESULT" | ${lib.getExe pkgs.jq} '.workspace.id') + ${pkgs.hyprland}/bin/hyprctl dispatch workspace "$ZEN_WORKSPACE" + fi + ''}/bin/zen-launcher" "${mod},J,togglesplit," @@ -116,13 +124,13 @@ in { gaps_out = 8; # border thiccness - border_size = 2; + border_size = 4; allow_tearing = true; # active border color - "col.active_border" = "rgb(${rose})"; - "col.inactive_border" = "rgb(${muted})"; + "col.active_border" = "${colors.lavender.rgb}"; + "col.inactive_border" = "${colors.base.rgb}"; }; input = { @@ -138,7 +146,7 @@ in { decoration = { # fancy corners - rounding = 4; + rounding = 0; # blur blur = { enabled = true; @@ -191,7 +199,7 @@ in { }; # for 10 bit color: DP-3,2560x1440@240,0x0,1,bitdepth,10,cm,hdr,sdrbrightness,1.2,sdrsaturation,1.0 - monitor = ["DP-3,2560x1440@240,0x0,1" "HDMI-A-1,disable" "DP-1,disable"]; + monitor = ["DP-1,2560x1440@240,0x0,1" "HDMI-A-1,disable"]; layerrule = [ "blur, ^(gtk-layer-shell)$" @@ -249,14 +257,14 @@ in { # }; # }; - systemd.user.services = { - swaybg = mkService { - Unit.Description = "Wallpaper chooser"; - Service = { - ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}"; - Restart = "always"; - }; - }; - }; + # systemd.user.services = { + # swaybg = mkService { + # Unit.Description = "Wallpaper chooser"; + # Service = { + # ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}"; + # Restart = "always"; + # }; + # }; + # }; }; } diff --git a/modules/home/wms/niri/default.nix b/modules/home/wms/niri/default.nix new file mode 100644 index 0000000..45a2d72 --- /dev/null +++ b/modules/home/wms/niri/default.nix @@ -0,0 +1,515 @@ +{ + lib, + config, + pkgs, + inputs, + ... +}: +with lib; +with lib.custom; let + cfg = config.wms.niri; + + mkService = recursiveUpdate { + Unit.PartOf = ["graphical-session.target"]; + Unit.After = ["graphical-session.target"]; + Install.WantedBy = ["graphical-session.target"]; + }; + + actions = config.lib.niri.actions; + + niri = "${config.programs.niri.package}/bin/niri"; + + mkColor = color: {inherit color;}; + mkGradient = from: to: { + angle ? 180, + relative-to ? "window", + in' ? null, + }: { + gradient = {inherit from to angle relative-to in';}; + }; + + spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" '' + # Get the day of the week (1=Monday, ..., 7=Sunday) + DAY_OF_WEEK=$(${pkgs.coreutils}/bin/date +%u) + + # Check if it's a weekday (between 1 and 5 inclusive) + if [ "$DAY_OF_WEEK" -ge 1 ] && [ "$DAY_OF_WEEK" -le 5 ]; then + # Execute Slack. Use the full path for robustness. + # Ensure pkgs.slack is available (e.g., via environment.systemPackages) + exec ${pkgs.slack}/bin/slack + fi + # Exit successfully if not a weekday or after exec replaces the process + exit 0 + ''; +in { + options.wms.niri = with types; { + enable = mkBoolOpt false "Enable niri"; + }; + + config = mkIf cfg.enable { + programs.niri = { + package = pkgs.niri; + + settings = { + # Input device configuration + input = { + keyboard = { + # xkb settings are empty in KDL, using defaults/empty strings + xkb = { + rules = ""; + model = ""; + layout = ""; + variant = ""; + options = null; # Or "" if you prefer explicit empty + }; + }; + + touchpad = { + enable = true; # Not explicitly 'off' in KDL + tap = true; + dwt = false; # Commented out in KDL + dwtp = false; # Commented out in KDL + natural-scroll = true; + # accel-speed = 0.2; # Commented out + # accel-profile = "flat"; # Commented out + # scroll-method = "two-finger"; # Commented out + disabled-on-external-mouse = true; + }; + + mouse = { + enable = true; # Not explicitly 'off' in KDL + natural-scroll = false; # Commented out in KDL + accel-speed = 0.2; + accel-profile = "flat"; + # scroll-method = "no-scroll"; # Commented out + }; + + trackpoint = { + enable = true; # Not explicitly 'off' in KDL + natural-scroll = false; # Commented out + # accel-speed = 0.2; # Commented out + # accel-profile = "flat"; # Commented out + # scroll-method = "on-button-down"; # Commented out + # scroll-button = 273; # Commented out + middle-emulation = false; # Commented out + }; + + warp-mouse-to-focus = true; + + focus-follows-mouse = { + enable = false; # Commented out in KDL + # max-scroll-amount = "0%"; # Only relevant if enabled + }; + }; + + # Output configuration + outputs."DP-1" = { + enable = true; # Not explicitly 'off' + mode = { + width = 2560; + height = 1440; + refresh = 239.972; + }; + scale = 1; + transform = { + # "normal" + rotation = 0; + flipped = false; + }; + position = { + x = 0; + y = 0; + }; + }; + + # Environment variables + environment = { + DISPLAY = ":0"; # for applications using xwayland-satillite + }; + + hotkey-overlay = { + skip-at-startup = true; + }; + + # Layout settings + layout = { + gaps = 16; + center-focused-column = "never"; + + preset-column-widths = [ + {proportion = 0.33333;} + {proportion = 0.5;} + {proportion = 0.66667;} + # { fixed = 1920; } # Example if needed + ]; + + # preset-window-heights = []; # Empty in KDL + + default-column-width = {proportion = 0.5;}; + # default-column-width = {}; # Alternative from KDL comments + + focus-ring = { + enable = true; # Not explicitly 'off' + width = 4; + active = mkGradient colors.blue.hex colors.sky.hex {angle = 45;}; + # active = mkColor "#7fc8ff"; # Alternative solid color from KDL + inactive = mkGradient colors.surface1.hex colors.surface2.hex { + angle = 45; + relative-to = "workspace-view"; + }; + # inactive = mkColor "#505050"; # Alternative solid color from KDL + }; + + border = { + enable = true; # Explicitly 'off' in KDL + width = 0; + active = mkColor colors.blue.hex; + inactive = mkColor colors.base.hex; + # active-gradient = ... # Commented out in KDL + # inactive-gradient = ... # Commented out in KDL + }; + + struts = { + # left = 64; # Commented out + # right = 64; # Commented out + # top = 64; # Commented out + # bottom = 64; # Commented out + }; + }; + + # Spawn processes at startup + spawn-at-startup = [ + {command = ["xwayland-satellite"];} + {command = ["${pkgs.writeShellScriptBin "thunderbird-delayed" ''sleep 5; thunderbird''}/bin/thunderbird-delayed"];} + {command = ["${pkgs.writeShellScriptBin "zen-delayed" ''sleep 5; zen''}/bin/zen-delayed"];} + {command = ["vesktop"];} + {command = ["spotify"];} + + {command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];} + ]; + + # Prefer server-side decorations + prefer-no-csd = true; + + # Screenshot path + screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"; + # screenshot-path = null; # Alternative from KDL comments + + # Animation settings + animations = { + enable = true; # Not explicitly 'off' + # slowdown = 3.0; # Commented out + # Individual animation settings can be added here if needed + }; + + debug = { + wait-for-frame-completion-in-pipewire = []; + }; + + layer-rules = [ + { + matches = [ + {namespace = "notifications$";} + ]; + + block-out-from = "screen-capture"; + } + ]; + + # Window rules + window-rules = [ + # Password manager rule (example from KDL comments) + { + matches = [ + {app-id = "^org\\.keepassxc\\.KeePassXC$";} + {app-id = "^org\\.gnome\\.World\\.Secrets$";} + {app-id = "^1Password$";} + {app-id = "^thunderbird$";} + {app-id = "^signal$";} + {app-id = "^vesktop$";} + {app-id = "^slack$";} + ]; + block-out-from = "screen-capture"; + } + # Rounded corners rule (example from KDL comments) + { + # No matches means apply to all windows + geometry-corner-radius = { + top-left = 12.0; + top-right = 12.0; + bottom-left = 12.0; + bottom-right = 12.0; + }; + clip-to-geometry = true; + } + # Window cast target rule + { + matches = [{is-window-cast-target = true;}]; + focus-ring = { + active = mkColor colors.red.hex; + inactive = mkColor (lerpColor colors.red.hex colors.base.hex 0.5); + }; + shadow = { + # Only color is specified in KDL rule + color = "#7d0d2d70"; + }; + tab-indicator = { + active = mkColor colors.red.hex; + inactive = mkColor (lerpColor colors.red.hex colors.base.hex 0.5); + }; + } + + # fix steam popups holy fuck they're annoying + { + matches = [ + {app-id = "^steam$";} + ]; + + excludes = [{title = "^Steam$";}]; + + open-floating = true; + + open-focused = false; + + default-floating-position = { + relative-to = "bottom-right"; + x = 16; + y = 16; + }; + } + + { + matches = [ + { + at-startup = true; + app-id = "^zen$"; + } + ]; + + open-maximized = true; + + open-on-workspace = "browser"; + } + { + matches = [ + { + at-startup = true; + app-id = "^spotify$"; + } + { + at-startup = true; + app-id = "^vesktop$"; + } + ]; + + open-on-workspace = "chat"; + } + { + matches = [ + { + at-startup = true; + app-id = "^Slack$"; + } + { + at-startup = true; + app-id = "^thunderbird$"; + } + ]; + + open-on-workspace = "work"; + } + ]; + + workspaces."01-browser" = { + name = "browser"; + }; + workspaces."02-code" = { + name = "code"; + }; + workspaces."03-chat" = { + name = "chat"; + }; + workspaces."04-work" = { + name = "work"; + }; + + # Keybindings + binds = + { + "Mod+Shift+Slash" = {action = actions.show-hotkey-overlay;}; + + "Mod+Return" = {action = actions.spawn "kitty";}; + "Mod+D" = {action = actions.spawn "fuzzel";}; + "Super+Alt+L" = {action = actions.spawn "swaylock";}; + # "Mod+T" = { action = actions.spawn "bash" "-c" "notify-send hello && exec alacritty"; }; + + # "Mod+S" = {action = actions.set-dynamic-cast-window;}; + # + # "Mod+Shift+S" = {action = actions.set-dynamic-cast-monitor;}; + # + # "Mod+Z" = {action = actions.clear-dynamic-cast-target;}; + + "XF86AudioRaiseVolume" = { + allow-when-locked = true; + action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; + }; + "XF86AudioLowerVolume" = { + allow-when-locked = true; + action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; + }; + "XF86AudioMute" = { + allow-when-locked = true; + action = actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; + }; + "XF86AudioMicMute" = { + allow-when-locked = true; + action = + actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; + }; + + "Mod+Q" = {action = actions.close-window;}; + + "Mod+Left" = {action = actions.focus-column-left;}; + "Mod+Down" = {action = actions.focus-window-down;}; + "Mod+Up" = {action = actions.focus-window-up;}; + "Mod+Right" = {action = actions.focus-column-right;}; + "Mod+H" = {action = actions.focus-column-left;}; + "Mod+J" = {action = actions.focus-window-down;}; + "Mod+K" = {action = actions.focus-window-up;}; + "Mod+L" = {action = actions.focus-column-right;}; + + "Mod+Ctrl+Left" = {action = actions.move-column-left;}; + "Mod+Ctrl+Down" = {action = actions.move-window-down;}; + "Mod+Ctrl+Up" = {action = actions.move-window-up;}; + "Mod+Ctrl+Right" = {action = actions.move-column-right;}; + "Mod+Ctrl+H" = {action = actions.move-column-left;}; + "Mod+Ctrl+J" = {action = actions.move-window-down;}; + "Mod+Ctrl+K" = {action = actions.move-window-up;}; + "Mod+Ctrl+L" = {action = actions.move-column-right;}; + + # Alternative commands (commented out in KDL) + # "Mod+J" = { action = actions.focus-window-or-workspace-down; }; + # "Mod+K" = { action = actions.focus-window-or-workspace-up; }; + # "Mod+Ctrl+J" = { action = actions.move-window-down-or-to-workspace-down; }; + # "Mod+Ctrl+K" = { action = actions.move-window-up-or-to-workspace-up; }; + + "Mod+Home" = {action = actions.focus-column-first;}; + "Mod+End" = {action = actions.focus-column-last;}; + "Mod+Ctrl+Home" = {action = actions.move-column-to-first;}; + "Mod+Ctrl+End" = {action = actions.move-column-to-last;}; + + "Mod+Shift+Left" = {action = actions.focus-monitor-left;}; + "Mod+Shift+Down" = {action = actions.focus-monitor-down;}; + "Mod+Shift+Up" = {action = actions.focus-monitor-up;}; + "Mod+Shift+Right" = {action = actions.focus-monitor-right;}; + "Mod+Shift+H" = {action = actions.focus-monitor-left;}; + "Mod+Shift+J" = {action = actions.focus-workspace-down;}; + "Mod+Shift+K" = {action = actions.focus-workspace-up;}; + "Mod+Shift+L" = {action = actions.focus-monitor-right;}; + + "Mod+Ctrl+Shift+F" = {action = actions.toggle-windowed-fullscreen;}; + + "Mod+Shift+Ctrl+Left" = {action = actions.move-column-to-monitor-left;}; + "Mod+Shift+Ctrl+Down" = {action = actions.move-column-to-monitor-down;}; + "Mod+Shift+Ctrl+Up" = {action = actions.move-column-to-monitor-up;}; + "Mod+Shift+Ctrl+Right" = {action = actions.move-column-to-monitor-right;}; + "Mod+Shift+Ctrl+H" = {action = actions.move-column-to-monitor-left;}; + "Mod+Shift+Ctrl+J" = {action = actions.move-column-to-monitor-down;}; + "Mod+Shift+Ctrl+K" = {action = actions.move-column-to-monitor-up;}; + "Mod+Shift+Ctrl+L" = {action = actions.move-column-to-monitor-right;}; + + "Mod+Page_Down" = {action = actions.focus-workspace-down;}; + "Mod+Page_Up" = {action = actions.focus-workspace-up;}; + "Mod+U" = {action = actions.focus-workspace-down;}; + "Mod+I" = {action = actions.focus-workspace-up;}; + "Mod+Ctrl+Page_Down" = {action = actions.move-column-to-workspace-down;}; + "Mod+Ctrl+Page_Up" = {action = actions.move-column-to-workspace-up;}; + "Mod+Ctrl+U" = {action = actions.move-column-to-workspace-down;}; + "Mod+Ctrl+I" = {action = actions.move-column-to-workspace-up;}; + + "Mod+Shift+Page_Down" = {action = actions.move-workspace-down;}; + "Mod+Shift+Page_Up" = {action = actions.move-workspace-up;}; + "Mod+Shift+U" = {action = actions.move-workspace-down;}; + "Mod+Shift+I" = {action = actions.move-workspace-up;}; + + "Mod+WheelScrollDown" = { + cooldown-ms = 150; + action = actions.focus-workspace-down; + }; + "Mod+WheelScrollUp" = { + cooldown-ms = 150; + action = actions.focus-workspace-up; + }; + "Mod+Ctrl+WheelScrollDown" = { + cooldown-ms = 150; + action = actions.move-column-to-workspace-down; + }; + "Mod+Ctrl+WheelScrollUp" = { + cooldown-ms = 150; + action = actions.move-column-to-workspace-up; + }; + + "Mod+WheelScrollRight" = {action = actions.focus-column-right;}; + "Mod+WheelScrollLeft" = {action = actions.focus-column-left;}; + "Mod+Ctrl+WheelScrollRight" = {action = actions.move-column-right;}; + "Mod+Ctrl+WheelScrollLeft" = {action = actions.move-column-left;}; + + "Mod+Shift+WheelScrollDown" = {action = actions.focus-column-right;}; + "Mod+Shift+WheelScrollUp" = {action = actions.focus-column-left;}; + "Mod+Ctrl+Shift+WheelScrollDown" = {action = actions.move-column-right;}; + "Mod+Ctrl+Shift+WheelScrollUp" = {action = actions.move-column-left;}; + + "Mod+Comma" = {action = actions.consume-window-into-column;}; + "Mod+Period" = {action = actions.expel-window-from-column;}; + + "Mod+BracketLeft" = {action = actions.consume-or-expel-window-left;}; + "Mod+BracketRight" = {action = actions.consume-or-expel-window-right;}; + + "Mod+R" = {action = actions.switch-preset-column-width;}; + "Mod+Shift+R" = {action = actions.switch-preset-window-height;}; + "Mod+Ctrl+R" = {action = actions.reset-window-height;}; + "Mod+F" = {action = actions.maximize-column;}; + "Mod+Shift+F" = {action = actions.fullscreen-window;}; + "Mod+C" = {action = actions.center-column;}; + "Mod+Ctrl+F" = {action = actions.expand-column-to-available-width;}; + + "Mod+V" = {action = actions.toggle-window-floating;}; + + "Mod+Minus" = {action = actions.set-column-width "-10%";}; + "Mod+Equal" = {action = actions.set-column-width "+10%";}; + + "Mod+Shift+Minus" = {action = actions.set-window-height "-10%";}; + "Mod+Shift+Equal" = {action = actions.set-window-height "+10%";}; + + "Print" = {action = actions.screenshot {};}; # Empty attrset for default args + "Mod+Shift+E" = {action = actions.quit {};}; # Default: no skip-confirmation + "Ctrl+Alt+Delete" = {action = actions.quit {};}; + + "Mod+Shift+P" = {action = actions.power-off-monitors;}; + } + // lib.attrsets.listToAttrs (builtins.concatMap (i: + with actions; [ + { + name = "Mod+${toString i}"; + value.action = focus-workspace i; + } + # FIXME: use this action directly untril sodiboo/niri-flake#1018 is fixed. + { + name = "Mod+Shift+${toString i}"; + value.action = spawn [niri "msg" "action" "move-column-to-workspace" (toString i)]; + } + ]) (lib.range 1 9)); + }; + }; + + systemd.user.services = { + swaybg = mkService { + Unit.Description = "Wallpaper Chooser"; + Service = { + ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}"; + Restart = "always"; + }; + }; + }; + }; +} diff --git a/modules/home/work/vpn/default.nix b/modules/home/work/vpn/default.nix index 42432a9..d3ceba9 100644 --- a/modules/home/work/vpn/default.nix +++ b/modules/home/work/vpn/default.nix @@ -16,8 +16,6 @@ in { config = mkIf cfg.enable { xdg.configFile."vpn/work.ovpn" = { text = '' - conifg /home/zoey/cvpn-client.ovpn - up ${pkgs.update-resolv-conf}/libexec/openvpn/update-resolv-conf down ${pkgs.update-resolv-conf}/libexec/openvpn/update-resolv-conf ''; diff --git a/modules/nixos/hardware/audio/default.nix b/modules/nixos/hardware/audio/default.nix index 23b9e8d..dae04eb 100644 --- a/modules/nixos/hardware/audio/default.nix +++ b/modules/nixos/hardware/audio/default.nix @@ -13,7 +13,7 @@ in { }; config = mkIf cfg.enable { - hardware.pulseaudio.enable = false; + services.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { enable = true; @@ -22,100 +22,42 @@ in { pulse.enable = true; wireplumber.enable = true; jack.enable = true; + }; - # extraConfig.pipewire.adjust-sample-rate = { - # "context.properties" = { - # "default.clock.rate" = 41000; - # "default.clock.allowed-rates" = [44100]; - # }; - # }; + systemd.user.services.cava-combine-inputs = { + description = "Combine MOTU M4 Line Inputs L/R for Cava"; - # wireplumber.extraConfig = { - # "custom" = { - # "monitor.alsa.rules" = [ - # { - # matches = [ - # { - # "node.name" = "alsa_output.usb-Focusrite_Scarlett_Solo_USB_Y76P5M4160A866-00.HiFi__Line1__sink"; - # } - # ]; - # actions = { - # update-props = { - # "audio.format" = "S32LE"; - # "audio.rate" = 192000; - # "api.alsa.period-size" = 1024; - # }; - # }; - # } - # { - # matches = [ - # { - # "node.name" = "alsa_input.pci-0000_0d_00.4.analog-stereo"; - # } - # ]; - # actions = { - # update-props = { - # "audio.format" = "S32LE"; - # "audio.rate" = 192000; - # "api.alsa.period-size" = 1024; - # }; - # }; - # } - # { - # matches = [ - # { - # "node.name" = "~alsa_output.*"; - # } - # ]; - # actions = { - # update-props = { - # "api.alsa.period-size" = 1024; - # "api.alsa.headroom" = 8192; - # }; - # }; - # } - # ]; - # }; - # - # "99-connect-tt" = { - # "wireplumber.components" = [ - # { - # name = "auto-connect-tt.lua"; - # type = "script/lua"; - # provides = "custom.connect-tt"; - # } - # ]; - # - # "wireplumber.profiles" = { - # main = { - # "custom.connect-tt" = "required"; - # }; - # }; - # }; - # }; + # Ensure this runs after pipewire-pulse is started + after = ["pipewire-pulse.service"]; + wants = ["pipewire-pulse.service"]; # Start pipewire-pulse if not already running - # wireplumber.extraScripts = { - # "auto-connect-tt.lua" = builtins.readFile ./auto-connect-tt.lua; - # }; - # }; - # - # # PulseAudio compatibility layer configuration for 44.1kHz - # services.pipewire.extraConfig.pipewire-pulse."92-steam-config" = { - # context.modules = [ - # { - # name = "libpipewire-module-protocol-pulse"; - # args = { - # pulse.min.req = "32/44100"; - # pulse.default.req = "32/44100"; - # pulse.min.quantum = "32/44100"; - # pulse.max.quantum = "8192/44100"; - # }; - # } - # ]; - # }; - # - # environment.sessionVariables = { - # PIPEWIRE_LATENCY = "1024/44100"; + # Make it part of the default user session target + wantedBy = ["default.target"]; + + # Service configuration details + serviceConfig = { + Type = "oneshot"; # Run the command once and exit + # Use RemainAfterExit if you want the service to show as 'active' after running + # RemainAfterExit = true; + + # Command to execute. Use full paths for robustness. + # We use sh -c to run multiple commands sequentially. + # pactl is provided by the pulseaudio package. + ExecStart = "${pkgs.writeShellScriptBin "cava-start" '' + echo "Attempting to load Cava combine modules..." + # Load null sink (returns non-zero if it fails AND module doesn't exist) + ${pkgs.pulseaudio}/bin/pactl load-module module-null-sink sink_name=cava-line-in sink_properties=device.description="Cava_Combined_LineIn" + # Load loopbacks (returns non-zero on failure) + ${pkgs.pulseaudio}/bin/pactl load-module module-loopback source="alsa_input.usb-MOTU_M4_M4MA03F7DV-00.HiFi__Line3__source" sink=cava-line-in latency_msec=10 + ${pkgs.pulseaudio}/bin/pactl load-module module-loopback source="alsa_input.usb-MOTU_M4_M4MA03F7DV-00.HiFi__Line4__source" sink=cava-line-in latency_msec=10 + echo "Finished loading Cava combine modules (ignore errors if already loaded)." + # Exit successfully even if modules were already loaded (pactl might return 0) + exit 0 + ''}/bin/cava-start"; + + # Prevent service from restarting automatically + Restart = "no"; + }; }; }; } diff --git a/modules/nixos/hardware/gpu-passthru/default.nix b/modules/nixos/hardware/gpu-passthru/default.nix index 12a22de..fd24086 100644 --- a/modules/nixos/hardware/gpu-passthru/default.nix +++ b/modules/nixos/hardware/gpu-passthru/default.nix @@ -8,15 +8,132 @@ with lib; with lib.custom; let cfg = config.hardware.gpu-passthru; + + startScript = '' + #!/run/current-system/sw/bin/bash + + # Debugging + exec 19>/home/zoey/Desktop/startlogfile + BASH_XTRACEFD=19 + set -x + + # Load variables we defined + source "/etc/libvirt/hooks/kvm.conf" + + # Change to performance governor + echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor + + # Isolate host to core 0 + systemctl set-property --runtime -- user.slice AllowedCPUs=0-8 + systemctl set-property --runtime -- system.slice AllowedCPUs=0-8 + systemctl set-property --runtime -- init.scope AllowedCPUs=0-8 + + # disable vpn + mullvad disconnect -w + + # Logout + # source "/home/owner/Desktop/Sync/Files/Tools/logout.sh" + + # Stop display manager + systemctl stop display-manager.service + killall gdm-wayland-session + killall niri + killall niri-session + + # Unbind VTconsoles + echo 0 > /sys/class/vtconsole/vtcon0/bind + echo 0 > /sys/class/vtconsole/vtcon1/bind + + # Unbind EFI Framebuffer + echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind + + # Avoid race condition + sleep 5 + + # Unload NVIDIA kernel modules + modprobe -r nvidia_drm nvidia_modeset nvidia_uvm nvidia + + # Detach GPU devices from host + virsh nodedev-detach $VIRSH_GPU_VIDEO + virsh nodedev-detach $VIRSH_GPU_AUDIO + + # Load vfio module + modprobe vfio-pci + ''; + + stopScript = '' + #!/run/current-system/sw/bin/bash + + # Debugging + exec 19>/home/zoey/Desktop/stoplogfile + BASH_XTRACEFD=19 + set -x + + # Load variables we defined + source "/etc/libvirt/hooks/kvm.conf" + + # Unload vfio module + modprobe -r vfio-pci + + # Attach GPU devices from host + virsh nodedev-reattach $VIRSH_GPU_VIDEO + virsh nodedev-reattach $VIRSH_GPU_AUDIO + + # Read nvidia x config + nvidia-xconfig --query-gpu-info > /dev/null 2>&1 + + # Load NVIDIA kernel modules + modprobe nvidia_drm nvidia_modeset nvidia_uvm nvidia + + # Avoid race condition + sleep 5 + + # Bind EFI Framebuffer + echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/bind + + # Bind VTconsoles + echo 1 > /sys/class/vtconsole/vtcon0/bind + echo 1 > /sys/class/vtconsole/vtcon1/bind + + # Start display manager + systemctl start display-manager.service + + # Return host to all cores + systemctl set-property --runtime -- user.slice AllowedCPUs=0-31 + systemctl set-property --runtime -- system.slice AllowedCPUs=0-31 + systemctl set-property --runtime -- init.scope AllowedCPUs=0-31 + + # Change to powersave governor + echo powersave | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor + ''; in { options.hardware.gpu-passthru = with types; { enable = mkBoolOpt false "Enable support for single gpu-passthru"; }; config = mkIf cfg.enable { - boot.kernelParams = ["intel_iommu=on" "iommu=pt"]; + boot.kernelParams = ["intel_iommu=on" "iommu=pt" "transparent_hugepage=always"]; boot.kernelModules = ["vfio-pci"]; + # CachyOS-inspired system performance tweaks + boot.kernel.sysctl = { + # Virtual memory tweaks + "vm.swappiness" = 10; + "vm.dirty_background_ratio" = 5; + "vm.dirty_ratio" = 10; + "vm.vfs_cache_pressure" = 50; + "vm.max_map_count" = 16777216; + + # Network optimizations + "net.core.netdev_max_backlog" = 16384; + "net.ipv4.tcp_fastopen" = 3; + "net.ipv4.tcp_max_syn_backlog" = 8192; + "net.core.somaxconn" = 8192; + + # IO scheduler optimizations + "kernel.sched_autogroup_enabled" = 0; + }; + virtualisation.libvirtd = { enable = true; onBoot = "ignore"; @@ -56,6 +173,10 @@ in { in [env]; }; + systemd.services.libvirtd-config = { + enable = lib.mkForce false; + }; + system.activationScripts.libvirt-hooks.text = '' ln -Tfs /etc/libvirt/hooks /var/lib/libvirt/hooks ''; @@ -113,104 +234,12 @@ in { }; "libvirt/hooks/qemu.d/win10/prepare/begin/start.sh" = { - text = '' - #!/run/current-system/sw/bin/bash - - # Debugging - exec 19>/home/zoey/Desktop/startlogfile - BASH_XTRACEFD=19 - set -x - - # Load variables we defined - source "/etc/libvirt/hooks/kvm.conf" - - # Change to performance governor - echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor - - # Isolate host to core 0 - systemctl set-property --runtime -- user.slice AllowedCPUs=0-8 - systemctl set-property --runtime -- system.slice AllowedCPUs=0-8 - systemctl set-property --runtime -- init.scope AllowedCPUs=0-8 - - # disable vpn - mullvad disconnect -w - - # Logout - # source "/home/owner/Desktop/Sync/Files/Tools/logout.sh" - - # Stop display manager - systemctl stop display-manager.service - killall gdm-wayland-session - - # Unbind VTconsoles - echo 0 > /sys/class/vtconsole/vtcon0/bind - echo 0 > /sys/class/vtconsole/vtcon1/bind - - # Unbind EFI Framebuffer - echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind - - # Avoid race condition - sleep 5 - - # Unload NVIDIA kernel modules - modprobe -r nvidia_drm nvidia_modeset nvidia_uvm nvidia - - # Detach GPU devices from host - virsh nodedev-detach $VIRSH_GPU_VIDEO - virsh nodedev-detach $VIRSH_GPU_AUDIO - - # Load vfio module - modprobe vfio-pci - ''; + text = startScript; mode = "0755"; }; "libvirt/hooks/qemu.d/win10/release/end/stop.sh" = { - text = '' - #!/run/current-system/sw/bin/bash - - # Debugging - exec 19>/home/zoey/Desktop/stoplogfile - BASH_XTRACEFD=19 - set -x - - # Load variables we defined - source "/etc/libvirt/hooks/kvm.conf" - - # Unload vfio module - modprobe -r vfio-pci - - # Attach GPU devices from host - virsh nodedev-reattach $VIRSH_GPU_VIDEO - virsh nodedev-reattach $VIRSH_GPU_AUDIO - - # Read nvidia x config - nvidia-xconfig --query-gpu-info > /dev/null 2>&1 - - # Load NVIDIA kernel modules - modprobe nvidia_drm nvidia_modeset nvidia_uvm nvidia - - # Avoid race condition - sleep 5 - - # Bind EFI Framebuffer - echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/bind - - # Bind VTconsoles - echo 1 > /sys/class/vtconsole/vtcon0/bind - echo 1 > /sys/class/vtconsole/vtcon1/bind - - # Start display manager - systemctl start display-manager.service - - # Return host to all cores - systemctl set-property --runtime -- user.slice AllowedCPUs=0-31 - systemctl set-property --runtime -- system.slice AllowedCPUs=0-31 - systemctl set-property --runtime -- init.scope AllowedCPUs=0-31 - - # Change to powersave governor - echo powersave | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor - ''; + text = stopScript; mode = "0755"; }; }; diff --git a/modules/nixos/hardware/nvidia/default.nix b/modules/nixos/hardware/nvidia/default.nix index c27d05b..90a75ce 100644 --- a/modules/nixos/hardware/nvidia/default.nix +++ b/modules/nixos/hardware/nvidia/default.nix @@ -44,7 +44,43 @@ in { nvidiaSettings = false; # Optionally, you may need to select the appropriate driver version for your specific GPU. - package = config.boot.kernelPackages.nvidiaPackages.beta; + package = config.boot.kernelPackages.nvidiaPackages.stable; + # package = config.boot.kernelPackages.nvidiaPackages.beta.overrideAttrs { + # patchesOpen = with pkgs; [ + # (fetchpatch { + # url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0001-Enable-atomic-kernel-modesetting-by-default.patch"; + # hash = "sha256-tvdm8nxxXslPUun33zj1kkYZOiWKK3F4nwcCkdzPW9s="; + # }) + # (fetchpatch { + # url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0002-Add-IBT-support.patch"; + # hash = "sha256-JUT8FwBhyRhOWxwET7Zw/xkIl8g6UCLMXSTofr0OuSg="; + # }) + # (fetchpatch { + # url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0003-Kbuild-Convert-EXTRA_CFLAGS-to-ccflags-y.patch"; + # hash = "sha256-W+yyiK6TpEs9IACMr/0V7EIP++u7MPOfa9ko3w8Gqtc="; + # }) + # (fetchpatch { + # url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0004-kernel-open-nvidia-Use-new-timer-functions-for-6.15.patch"; + # hash = "sha256-T3SY2O6Pmc8BA0oana5xGGDhBxCizwmRqMyPvgF3j8A="; + # }) + # (fetchpatch { + # url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0005-nvidia-uvm-Use-__iowrite64_hi_lo.patch"; + # hash = "sha256-T8BNr1H1vgEQoKB0S5cqcbq6fSQxiDK9bb/MCvMtzTI"; + # }) + # (fetchpatch { + # url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0006-nvidia-uvm-Use-page_pgmap.patch"; + # hash = "sha256-YucFZ2Z7YSgUiah82uLOmd4Z/c5YLOXxzEZNO6ZvQQg="; + # }) + # (fetchpatch { + # url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0007-nvidia-uvm-Convert-make_device_exclusive_range-to-ma.patch"; + # hash = "sha256-AehV7D+yYBmE8FWsUiagnjB8V7S8RJSTNcVMwZIgw/I="; + # }) + # (fetchpatch { + # url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0008-kbuild-Add-workaround-for-GCC-15-Compilation.patch"; + # hash = "sha256-HrYBiAFy62Jll+ceVnGuJKGKDoaRObjAGIYa+yrAogA="; + # }) + # ]; + # }; }; environment.variables = { diff --git a/modules/nixos/protocols/wayland/default.nix b/modules/nixos/protocols/wayland/default.nix index cb1c1b8..5fd0e3a 100644 --- a/modules/nixos/protocols/wayland/default.nix +++ b/modules/nixos/protocols/wayland/default.nix @@ -15,35 +15,35 @@ in { }; config = mkIf cfg.enable { - environment.etc."greetd/environments".text = '' - sway - ''; - - services = { - greetd = { - enable = false; - settings = rec { - initial_session = { - # command = "sway --unsupported-gpu"; - command = "Hyprland"; - user = "zoey"; - }; - default_session = initial_session; + services.greetd = { + enable = false; + settings = { + default_session = { + command = "niri-session"; + user = "zoey"; }; }; }; services.xserver.displayManager.gdm.enable = true; + services.xserver.displayManager.gdm.wayland = true; + + # services.displayManager.sddm.enable = true; + # services.displayManager.sddm.package = lib.mkForce pkgs.kdePackages.sddm; programs.uwsm = { - enable = true; - # waylandCompositors = { - # "mwc" = { - # prettyName = "MWC"; - # binPath = "/run/current-system/sw/bin/mwc"; - # comment = "previously owl"; - # }; - # }; + waylandCompositors = { + # "mwc" = { + # prettyName = "MWC"; + # binPath = "/run/current-system/sw/bin/mwc"; + # comment = "previously owl"; + # }; + # niri = { + # prettyName = "niri"; + # binPath = "/run/current-system/sw/bin/niri"; + # comment = "niri"; + # }; + }; }; # environment.systemPackages = [ @@ -51,14 +51,15 @@ in { # ]; programs.hyprland = { - withUWSM = true; - enable = true; + withUWSM = false; + enable = false; xwayland.enable = true; package = inputs.hyprland.packages.${pkgs.system}.hyprland; portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland; }; - programs.niri.enable = false; + programs.niri.enable = true; + programs.niri.package = inputs.niri-src.packages.${pkgs.system}.niri; environment = { variables = { @@ -78,26 +79,31 @@ in { WLR_BACKEND = "wayland"; WLR_RENDERER = "wayland"; XDG_SESSION_TYPE = "wayland"; - SDL_VIDEODRIVER = "wayland"; + SDL_VIDEODRIVER = "wayland,x11"; XDG_CACHE_HOME = "/home/zoey/.cache"; CLUTTER_BACKEND = "wayland"; - DEFAULT_BROWSER = "${pkgs.firefox}/bin/firefox"; + + # # CachyOS-inspired Nvidia optimizations for gaming + # __GL_THREADED_OPTIMIZATIONS = "1"; + # __GL_SHADER_DISK_CACHE = "1"; + # __GL_SHADER_DISK_CACHE_SIZE = "1000000000"; + # __GL_MaxFramesAllowed = "1"; # Reduces input latency + # __GL_YIELD = "USLEEP"; # Better CPU usage when GPU-bound + # DXVK_ASYNC = "1"; + # DXVK_FRAME_RATE = "0"; # No frame rate cap from DXVK + # PROTON_ENABLE_NVAPI = "1"; + # PROTON_HIDE_NVIDIA_GPU = "0"; + # WINE_FULLSCREEN_FSR = "1"; # Enable FSR upscaling for Wine/Proton games + # MANGOHUD = "1"; # Enable MangoHud by default + # MANGOHUD_CONFIG = "cpu_temp,gpu_temp,vram,ram,position=top-left,height=500,font_size=20"; }; - loginShellInit = '' - dbus-update-activation-environment --systemd DISPLAY - eval $(gnome-keyring-daemon --start --components=ssh,secrets) - eval $(ssh-agent) - ''; }; - hardware.pulseaudio.support32Bit = true; + services.pulseaudio.support32Bit = true; xdg.portal = { enable = true; - wlr.enable = false; - config.common.default = "*"; extraPortals = [ - pkgs.xdg-desktop-portal-gtk # pkgs.xwaylandvideobridge ]; }; diff --git a/modules/nixos/services/gdm-fuckery/default.nix b/modules/nixos/services/gdm-fuckery/default.nix new file mode 100644 index 0000000..f2ba4b8 --- /dev/null +++ b/modules/nixos/services/gdm-fuckery/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + pkgs, + ... +}: +with lib; +with lib.custom; let + cfg = config.services.gdm-monitors; + + montiorsXmlContent = builtins.readFile ./monitors.xml; + monitorsConfig = pkgs.writeText "gdm_monitors.xml" montiorsXmlContent; +in { + options.services.gdm-monitors = with types; { + enable = mkBoolOpt false "Enable Monitors config for GDM"; + }; + + config = mkIf cfg.enable { + systemd.tmpfiles.rules = [ + "L+ /run/gdm/.config/monitors.xml - - - - ${monitorsConfig}" + ]; + }; +} diff --git a/modules/nixos/services/gdm-fuckery/monitors.xml b/modules/nixos/services/gdm-fuckery/monitors.xml new file mode 100644 index 0000000..bc50b84 --- /dev/null +++ b/modules/nixos/services/gdm-fuckery/monitors.xml @@ -0,0 +1,24 @@ + + + physical + + 0 + 0 + 1 + yes + + + DP-1 + AUS + PG27AQDM + R5LMRS022182 + + + 2560 + 1440 + 239.972 + + + + + diff --git a/modules/nixos/services/mail/default.nix b/modules/nixos/services/mail/default.nix index 21e6929..5afc4ef 100644 --- a/modules/nixos/services/mail/default.nix +++ b/modules/nixos/services/mail/default.nix @@ -27,6 +27,10 @@ in { }; zach-pw.file = ./sec/zach-pw.age; emily-pw.file = ./sec/emily-piccat.age; + + smtp-password.file = ./sec/smtpPassword.age; + + gitlab-email-pw-hashed.file = ./sec/gitlab-email-pw-hashed.age; }; mailserver = { @@ -37,7 +41,7 @@ in { loginAccounts = { "zoey@zoeys.email" = { hashedPasswordFile = sec.webmaster-pw.path; - aliases = ["zoey@zoeys.cloud" "postmaster@zoeys.email" "abuse@zoeys.email"]; + aliases = ["zoey@zoeys.cloud" "errors@zoeys.cloud" "admin@zoeys.cloud" "postmaster@zoeys.email" "abuse@zoeys.email"]; }; "hi@zoeys.computer" = { hashedPasswordFile = sec.zoeycomputer-pw.path; @@ -51,6 +55,13 @@ in { hashedPasswordFile = sec.emily-pw.path; aliases = ["emily@pictureofcat.com"]; }; + "gitlab@zoeys.cloud" = { + hashedPasswordFile = sec.gitlab-email-pw-hashed.path; + aliases = ["noreply@zoeys.cloud"]; + }; + "no-reply@code.zoeys.cloud" = { + hashedPasswordFile = sec.smtp-password.path; + }; }; certificateScheme = "acme-nginx"; diff --git a/modules/nixos/services/mail/sec/gitlab-email-pw-hashed.age b/modules/nixos/services/mail/sec/gitlab-email-pw-hashed.age new file mode 100644 index 0000000..b5210b0 Binary files /dev/null and b/modules/nixos/services/mail/sec/gitlab-email-pw-hashed.age differ diff --git a/modules/nixos/services/mail/sec/smtpPassword.age b/modules/nixos/services/mail/sec/smtpPassword.age new file mode 100644 index 0000000..a8959b0 --- /dev/null +++ b/modules/nixos/services/mail/sec/smtpPassword.age @@ -0,0 +1,7 @@ +age-encryption.org/v1 +-> ssh-ed25519 CtmR6w 5VDFuttJ1VBYa4fBxMv/Ws96h3lQMtDtt4kift5TggY +iHhoBRnhFOG7AYWAWcgEbX0ABUNgIWHHUpterkkMunc +-> ssh-ed25519 +be3hg zpo9T3n1X5PipJjEgOqgSJSwhIZu19rLcQP3zPILWRM +SJp+lVPB997tCMucqfGgqXOougiSoMoGMd/tozTTT0Q +--- /uEWB/Q4G4hy0t+hEIeID0Ymqy+qGrnrK5AgwPhs82Y +I?袐._Q}l3/˳398J KřaJ:k*-;5%7y \ No newline at end of file diff --git a/modules/nixos/services/vpn/default.nix b/modules/nixos/services/vpn/default.nix index 97c630e..f2c4be0 100644 --- a/modules/nixos/services/vpn/default.nix +++ b/modules/nixos/services/vpn/default.nix @@ -19,24 +19,6 @@ in { enable = cfg.mullvad; package = nixos-stable.mullvad; }; - # - # # Create a specific network namespace for VPN traffic - # systemd.services.mullvad-daemon = { - # serviceConfig = { - # NetworkNamespacePath = "/run/netns/mullvad"; - # }; - # }; - # - # # Configure transmission to use Mullvad's SOCKS5 proxy - # # Configure transmission to use the Mullvad network namespace - # systemd.services.transmission = mkIf config.services.transmission.enable { - # serviceConfig = { - # NetworkNamespacePath = "/run/netns/mullvad"; - # }; - # # Make sure Mullvad is running before transmission starts - # requires = ["mullvad-daemon.service"]; - # after = ["mullvad-daemon.service"]; - # }; services.openvpn = { servers = { @@ -48,22 +30,5 @@ in { }; systemd.services.openvpn-work.wantedBy = lib.mkForce []; - - # # Add necessary networking tools - # environment.systemPackages = with pkgs; [ - # iproute2 # for ip netns commands - # ]; - # - # # Setup network namespace - # systemd.services.setup-mullvad-netns = { - # description = "Setup Mullvad Network Namespace"; - # before = ["mullvad-daemon.service"]; - # serviceConfig = { - # Type = "oneshot"; - # RemainAfterExit = true; - # ExecStart = "${pkgs.iproute2}/bin/ip netns add mullvad"; - # ExecStop = "${pkgs.iproute2}/bin/ip netns delete mullvad"; - # }; - # }; }; } diff --git a/modules/nixos/sites/cache/default.nix b/modules/nixos/sites/cache/default.nix index 1a3c8ba..623ca99 100644 --- a/modules/nixos/sites/cache/default.nix +++ b/modules/nixos/sites/cache/default.nix @@ -24,6 +24,7 @@ in { services.nix-serve = { enable = true; secretKeyFile = sec.cache_key.path; + port = 12024; }; services.nginx.virtualHosts."cache.zoeys.computer" = { diff --git a/modules/nixos/sites/code/default.nix b/modules/nixos/sites/code/default.nix new file mode 100644 index 0000000..57cd0b3 --- /dev/null +++ b/modules/nixos/sites/code/default.nix @@ -0,0 +1,107 @@ +{ + lib, + config, + pkgs, + inputs, + ... +}: +with lib; +with lib.custom; let + cfg = config.sites.forgejo; + frg = config.services.forgejo; + srv = frg.settings.server; +in { + options.sites.forgejo = with types; { + enable = mkBoolOpt false "Enable Forgejo site"; + + domain = mkStringOpt "code.zoeys.cloud" "The domain for the site"; + }; + + config = mkIf cfg.enable { + services.nginx.virtualHosts.${frg.settings.server.DOMAIN} = { + forceSSL = true; + enableACME = true; + extraConfig = '' + client_max_body_size 512M; + ''; + locations."/".proxyPass = "http://localhost:${toString srv.HTTP_PORT}"; + }; + + catppuccin.forgejo.enable = true; + + services.gitea-actions-runner = { + package = pkgs.forgejo-actions-runner; + instances.default = { + enable = true; + name = "monolith"; + url = "https://code.zoeys.cloud"; + # Obtaining the path to the runner token file may differ + # tokenFile should be in format TOKEN=, since it's EnvironmentFile for systemd + tokenFile = config.age.secrets.forgejo-runner-token.path; + labels = [ + "ubuntu-latest:docker://node:16-bullseye" + "ubuntu-22.04:docker://node:16-bullseye" + "ubuntu-20.04:docker://node:16-bullseye" + "ubuntu-18.04:docker://node:16-buster" + ## optionally provide native execution on the host: + # "native:host" + ]; + }; + }; + + services.forgejo = { + enable = true; + database.type = "postgres"; + + lfs.enable = true; + settings = { + server = { + DOMAIN = cfg.domain; + ROOT_URL = "https://${srv.DOMAIN}"; + HTTP_PORT = 7201; + }; + service.DISABLE_REGISTRATION = true; + actions = { + ENABLED = true; + DEFAULT_ACTIONS_URL = "github"; + }; + mailer = { + ENABLED = true; + SMTP_ADDR = "mail.zoeys.cloud"; + FROM = "no-reply@${srv.DOMAIN}"; + USER = "no-reply@${srv.DOMAIN}"; + }; + }; + secrets = { + mailer = { + PASSWD = config.age.secrets.forgejo-mailer-password.path; + }; + }; + }; + + systemd.services.forgejo.preStart = let + adminCmd = "${lib.getExe frg.package} admin user"; + pwd = config.age.secrets.forgejo-pw; + user = "zoey"; + in '' + ${adminCmd} create --admin --email "hi@zoeys.computer" --username ${user} --password "$(tr -d '\n' < ${pwd.path})" || true''; + + age.secrets = { + forgejo-mailer-password = { + file = ../sourcehut/sec/smtpPassword.age; + mode = "400"; + owner = "forgejo"; + }; + forgejo-pw = { + file = ./forgejoPw.age; + mode = "400"; + owner = "forgejo"; + }; + forgejo-runner-token = { + file = ./forgejoRunner.age; + mode = "400"; + owner = "forgejo"; + }; + }; + }; +} diff --git a/modules/nixos/sites/code/forgejoPw.age b/modules/nixos/sites/code/forgejoPw.age new file mode 100644 index 0000000..afa3af0 Binary files /dev/null and b/modules/nixos/sites/code/forgejoPw.age differ diff --git a/modules/nixos/sites/code/forgejoRunner.age b/modules/nixos/sites/code/forgejoRunner.age new file mode 100644 index 0000000..d605aae --- /dev/null +++ b/modules/nixos/sites/code/forgejoRunner.age @@ -0,0 +1,7 @@ +age-encryption.org/v1 +-> ssh-ed25519 CtmR6w oShhq0zXjjMoDW0+AZx/ro5x3XZ/Smf//Han2rZdA0o +ucJn5M9x66gxKPmkVg1E4F/PsZ7rBTA8MlUAbmIC+2s +-> ssh-ed25519 RMNffg GBNcFhRuZyme2t/yrWDS/lrQzpm1wHUkAhjLz86ZG3I +bpsZdqqP205zT9F7Ca5jtCn/qfKcI/gTxANQOPLWnnA +--- JbJQpU8FaE6TPHMyX4SmDQLEI8b67SaFG73nUc+Ud3s +"'xtophh5]|j1_e#mD~mvȢosRffoՁ"Rf8uuU? \ No newline at end of file diff --git a/modules/nixos/sites/gitlab/default.nix b/modules/nixos/sites/gitlab/default.nix index 33495d1..7039bc8 100644 --- a/modules/nixos/sites/gitlab/default.nix +++ b/modules/nixos/sites/gitlab/default.nix @@ -48,48 +48,15 @@ in { gitlab_runner = { file = ./sec/gitlab_runner.age; }; + gitlab_email_pw = { + file = ./sec/gitlab-email-pw.age; + owner = user; + group = group; + }; }; boot.kernel.sysctl."net.ipv4.ip_forward" = true; # 1 - services.gitlab-runner = { - enable = true; - services = { - nix = with lib; { - authenticationTokenConfigFile = sec.gitlab_runner.path; - dockerImage = "alpine"; - dockerVolumes = [ - "/nix/store:/nix/store:ro" - "/nix/var/nix/db:/nix/var/nix/db:ro" - "/nix/var/nix/daemon-socket:/nix/var/nix/daemon-socket:ro" - ]; - dockerDisableCache = true; - preBuildScript = pkgs.writeScript "setup-container" '' - mkdir -p -m 0755 /nix/var/log/nix/drvs - mkdir -p -m 0755 /nix/var/nix/gcroots - mkdir -p -m 0755 /nix/var/nix/profiles - mkdir -p -m 0755 /nix/var/nix/temproots - mkdir -p -m 0755 /nix/var/nix/userpool - mkdir -p -m 1777 /nix/var/nix/gcroots/per-user - mkdir -p -m 1777 /nix/var/nix/profiles/per-user - mkdir -p -m 0755 /nix/var/nix/profiles/per-user/root - mkdir -p -m 0700 "$HOME/.nix-defexpr" - . ${pkgs.nix}/etc/profile.d/nix-daemon.sh - ${pkgs.nix}/bin/nix-channel --add https://nixos.org/channels/nixos-24.11 nixpkgs # 3 - ${pkgs.nix}/bin/nix-channel --update nixpkgs - ${pkgs.nix}/bin/nix-env -i ${concatStringsSep " " (with pkgs; [nix cacert git openssh])} - ''; - environmentVariables = { - ENV = "/etc/profile"; - USER = "root"; - NIX_REMOTE = "daemon"; - PATH = "/nix/var/nix/profiles/default/bin:/nix/var/nix/profiles/default/sbin:/bin:/sbin:/usr/bin:/usr/sbin"; - NIX_SSL_CERT_FILE = "/nix/var/nix/profiles/default/etc/ssl/certs/ca-bundle.crt"; - }; - }; - }; - }; - services.gitlab = { enable = true; databasePasswordFile = sec.gitlab_db.path; @@ -97,6 +64,15 @@ in { port = 443; https = true; host = cfg.domain; + + smtp = { + enable = true; + address = "mail.zoeys.cloud"; + username = "gitlab@zoeys.cloud"; + passwordFile = sec.gitlab_email_pw.path; + port = 465; + }; + secrets = { secretFile = sec.gitlab_sec.path; otpFile = sec.gitlab_otp.path; diff --git a/modules/nixos/sites/gitlab/sec/gitlab-email-pw.age b/modules/nixos/sites/gitlab/sec/gitlab-email-pw.age new file mode 100644 index 0000000..50a7cb8 --- /dev/null +++ b/modules/nixos/sites/gitlab/sec/gitlab-email-pw.age @@ -0,0 +1,8 @@ +age-encryption.org/v1 +-> ssh-ed25519 CtmR6w wfPgH83/+qjITFELir/Q/zjH+wjlgrU+HNC5eOsFhg8 +orHZwCQOmlK9TFHOEOb/K2FszXoMbQfwHdYAbKIOnR0 +-> ssh-ed25519 RMNffg E7mah8eqt9cDw2SKQTah25M4j/iIWhPHtrtmJpSPDgo +eeoo3cfoiVh8xF9TVy9cKUlAw6NBhMg1iFs8JlpquPA +--- NB2RNduULAMPoBmfRByWGL1hdK5/b5kDe4vnzdW1Hb0 +H"y=,е5|V01qAsNIɗRqNY!l׮b\LGe{En'͔Fh ssh-ed25519 CtmR6w sWwNYqQ3g9UMu35p8kvAXj4uEy35g0///7gpHFO69zs +1lQ0r74sGR+K/ynikwClNB5UZ3ZD1fTpxSdJE5Dk0nM +-> ssh-ed25519 RMNffg vqaQVHXN7yjv10wz2xZCpJ6O7fqXaNYCPqKEdufkdCc +FLFvodvpQGPYbjv8yoyjHE2+a+YyZkBGZZbOx33GpRo +--- H3zEDss69sqnW3LM5GlWR11xx9E8u04/id6jlZqNgfg +J^s=YЭ_Œ/ ȤZi#?Lu3~vHc9^Cup[cCSSvS \ No newline at end of file diff --git a/modules/nixos/sites/sourcehut/sec/pgpPrivKey.age b/modules/nixos/sites/sourcehut/sec/pgpPrivKey.age new file mode 100644 index 0000000..c2ef9ca Binary files /dev/null and b/modules/nixos/sites/sourcehut/sec/pgpPrivKey.age differ diff --git a/modules/nixos/sites/sourcehut/sec/pgpPubKey.age b/modules/nixos/sites/sourcehut/sec/pgpPubKey.age new file mode 100644 index 0000000..3f88d00 Binary files /dev/null and b/modules/nixos/sites/sourcehut/sec/pgpPubKey.age differ diff --git a/modules/nixos/sites/sourcehut/sec/serviceKey.age b/modules/nixos/sites/sourcehut/sec/serviceKey.age new file mode 100644 index 0000000..3f4b935 Binary files /dev/null and b/modules/nixos/sites/sourcehut/sec/serviceKey.age differ diff --git a/modules/nixos/sites/sourcehut/sec/smtpPassword.age b/modules/nixos/sites/sourcehut/sec/smtpPassword.age new file mode 100644 index 0000000..4c2dd14 --- /dev/null +++ b/modules/nixos/sites/sourcehut/sec/smtpPassword.age @@ -0,0 +1,7 @@ +age-encryption.org/v1 +-> ssh-ed25519 CtmR6w ExpktzFWkofB1qmGIexwu0UAnUeGzQIeeEMHiZNXQkY +YDNPPLtB8N7A0NB0VwVkQAN3DNeknLo3rv+WdcUdLD0 +-> ssh-ed25519 RMNffg GFHzl2/nPuIVH4RzUnbUl/LHFmkXQ+pPUGuQzcEZi3o +Z6iMUjgD0K7LCYWV0qZMbyzWmUsbhp0anr3niecdyPs +--- wjP9Fn9/VIrsgwbTVZv/vzbEskwMKmQbHohtNyfF02w +ݞsz KQb #&T3v/gը%f\^jQqh \ No newline at end of file diff --git a/modules/nixos/sites/sourcehut/sec/webhookKey.age b/modules/nixos/sites/sourcehut/sec/webhookKey.age new file mode 100644 index 0000000..45cfc24 Binary files /dev/null and b/modules/nixos/sites/sourcehut/sec/webhookKey.age differ diff --git a/modules/nixos/ui/fonts/default.nix b/modules/nixos/ui/fonts/default.nix index 48ea195..f860026 100644 --- a/modules/nixos/ui/fonts/default.nix +++ b/modules/nixos/ui/fonts/default.nix @@ -29,35 +29,117 @@ in { lexend jost dejavu_fonts - iosevka + # iosevka cantarell-fonts - # (iosevka.override - # { - # set = "Custom"; - # privateBuildPlan = '' - # [buildPlans.IosevkaCustom] - # family = "Iosevka" - # spacing = "normal" - # serifs = "sans" - # noCvSs = true - # exportGlyphNames = true - # - # [buildPlans.IosevkaCustom.variants] - # inherits = "ss08" - # - # [buildPlans.IosevkaCustom.widths.Normal] - # shape = 500 - # menu = 5 - # css = "normal" - # ''; - # }) + (iosevka.override + { + set = "Custom"; + privateBuildPlan = '' + # [buildPlans.IosevkaCustom] + # family = "Iosevka" + # spacing = "fontconfig-mono" + # serifs = "sans" + # noCvSs = true + # exportGlyphNames = true + # + # [buildPlans.IosevkaCustom.variants] + # inherits = "ss08" + # + # [buildPlans.IosevkaCustom.widths.Normal] + # shape = 500 + # menu = 5 + # css = "normal" + # + # [buildPlans.IosevkaCustom.widths.Extended] + # shape = 600 + # menu = 7 + # css = "expanded" + + [buildPlans.IosevkaCustom] + family = "Iosevka" + spacing = "normal" + serifs = "sans" + noCvSs = true + exportGlyphNames = true + + [buildPlans.IosevkaCustom.variants.design] + one = "base-flat-top-serif" + two = "straight-neck-serifless" + four = "closed-serifless" + five = "oblique-arched-serifless" + six = "closed-contour" + seven = "bend-serifless" + eight = "crossing-asymmetric" + nine = "closed-contour" + zero = "oval-dotted" + capital-d = "more-rounded-serifless" + capital-g = "toothless-corner-serifless-hooked" + a = "double-storey-serifless" + g = "double-storey" + i = "hooky" + l = "serifed-semi-tailed" + r = "hookless-serifless" + t = "bent-hook-short-neck" + w = "straight-flat-top-serifless" + y = "straight-turn-serifless" + capital-eszet = "rounded-serifless" + long-s = "bent-hook-middle-serifed" + eszet = "longs-s-lig-serifless" + lower-lambda = "straight-turn" + lower-tau = "short-tailed" + lower-phi = "straight" + partial-derivative = "closed-contour" + cyrl-capital-u = "straight-turn-serifless" + cyrl-u = "straight-turn-serifless" + cyrl-ef = "split-serifless" + asterisk = "penta-low" + caret = "high" + guillemet = "straight" + number-sign = "slanted" + dollar = "open" + cent = "through-cap" + bar = "force-upright" + micro-sign = "tailed-serifless" + lig-ltgteq = "slanted" + lig-neq = "more-slanted-dotted" + lig-equal-chain = "without-notch" + lig-hyphen-chain = "without-notch" + lig-plus-chain = "with-notch" + + [buildPlans.IosevkaCustom.weights.Regular] + shape = 400 + menu = 400 + css = 400 + + [buildPlans.IosevkaCustom.weights.Bold] + shape = 700 + menu = 700 + css = 700 + + [buildPlans.IosevkaCustom.slopes.Upright] + angle = 0 + shape = "upright" + menu = "upright" + css = "normal" + + [buildPlans.IosevkaCustom.slopes.Italic] + angle = 9.4 + shape = "italic" + menu = "italic" + css = "italic" + ''; + }) noto-fonts noto-fonts-cjk-sans noto-fonts-emoji jetbrains-mono nerd-fonts.iosevka nerd-fonts.zed-mono + nerd-fonts.fira-code + nerd-fonts.jetbrains-mono adwaita-fonts + cozette + scientifica # (nerdfonts.override {fonts = ["ZedMono" "Iosevka"];}) ]; @@ -67,12 +149,11 @@ in { fontconfig = { defaultFonts = { monospace = [ - # "Pragmata Pro Mono" - "Iosevka" + fonts.mono "Noto Color Emoji" ]; - sansSerif = ["Adwaita Sans" "Noto Color Emoji"]; - serif = ["Noto Serif" "Noto Color Emoji"]; + sansSerif = [fonts.ui "Noto Color Emoji"]; + serif = [fonts.ui "Noto Color Emoji"]; emoji = ["Noto Color Emoji"]; }; }; diff --git a/overlays/libvirt-hooks/defualt.nix b/overlays/libvirt-hooks/defualt.nix new file mode 100644 index 0000000..07c8caa --- /dev/null +++ b/overlays/libvirt-hooks/defualt.nix @@ -0,0 +1,23 @@ +self: super: { + nixosModules = + super.nixosModules + // { + libvirtd = { + config, + lib, + pkgs, + ... + } @ args: let + originalModule = import super.nixosModules.libvirtd args; + in + lib.mkMerge [ + originalModule + + { + config = lib.mkIf config.virtualisation.libvirtd.enable { + virtualisation.libvirtd.hooks = lib.mkForce {}; + }; + } + ]; + }; +} diff --git a/packages/zen-browser-unwrapped/default.nix b/packages/zen-browser-unwrapped/default.nix deleted file mode 100644 index 3f26e00..0000000 --- a/packages/zen-browser-unwrapped/default.nix +++ /dev/null @@ -1,430 +0,0 @@ -{ - buildNpmPackage, - buildPackages, - fetchFromGitHub, - fetchurl, - lib, - overrideCC, - stdenv, - # build time - autoconf, - cargo, - dump_syms, - git, - gnum4, - nodejs, - patchelf, - pkg-config, - pkgsBuildBuild, - pkgsCross, - python3, - runCommand, - rsync, - rustc, - rust-cbindgen, - rustPlatform, - unzip, - vips, - wrapGAppsHook3, - writeShellScript, - # runtime - alsa-lib, - atk, - cairo, - cups, - dbus, - dbus-glib, - ffmpeg, - fontconfig, - freetype, - gdk-pixbuf, - gtk3, - glib, - icu73, - jemalloc, - libGL, - libGLU, - libdrm, - libevent, - libffi, - libglvnd, - libjack2, - libjpeg, - libkrb5, - libnotify, - libpng, - libpulseaudio, - libstartup_notification, - libva, - libvpx, - libwebp, - libxkbcommon, - libxml2, - makeWrapper, - mesa, - nasm, - nspr, - nss_latest, - pango, - pciutils, - pipewire, - sndio, - udev, - xcb-util-cursor, - xorg, - zlib, - # Generic changes the compatibility mode of the final binaries. - # - # Enabling generic will make the browser compatible with more devices at the - # cost of disabling hardware-specific optimizations. It is highly recommended - # to leave `generic` disabled. - generic ? false, - debugBuild ? false, - # On 32bit platforms, we disable adding "-g" for easier linking. - enableDebugSymbols ? !stdenv.hostPlatform.is32bit, - alsaSupport ? stdenv.hostPlatform.isLinux, - ffmpegSupport ? true, - gssSupport ? true, - jackSupport ? stdenv.hostPlatform.isLinux, - jemallocSupport ? !stdenv.hostPlatform.isMusl, - pipewireSupport ? waylandSupport && webrtcSupport, - pulseaudioSupport ? stdenv.hostPlatform.isLinux, - sndioSupport ? stdenv.hostPlatform.isLinux, - waylandSupport ? true, - privacySupport ? false, - # WARNING: NEVER set any of the options below to `true` by default. - # Set to `!privacySupport` or `false`. - crashreporterSupport ? !privacySupport && !stdenv.hostPlatform.isRiscV && !stdenv.hostPlatform.isMusl, - geolocationSupport ? !privacySupport, - webrtcSupport ? !privacySupport, -}: let - surfer = buildNpmPackage { - pname = "surfer"; - version = "1.5.0"; - - src = fetchFromGitHub { - owner = "zen-browser"; - repo = "surfer"; - rev = "50af7094ede6e9f0910f010c531f8447876a6464"; - hash = "sha256-wmAWg6hoICNHfoXJifYFHmyFQS6H22u3GSuRW4alexw="; - }; - - patches = [./surfer-dont-check-update.patch]; - - npmDepsHash = "sha256-p0RVqn0Yfe0jxBcBa/hYj5g9XSVMFhnnZT+au+bMs18="; - makeCacheWritable = true; - - SHARP_IGNORE_GLOBAL_LIBVIPS = false; - nativeBuildInputs = [pkg-config]; - buildInputs = [vips]; - }; - - llvmPackages0 = rustc.llvmPackages; - llvmPackagesBuildBuild0 = pkgsBuildBuild.rustc.llvmPackages; - - llvmPackages = llvmPackages0.override { - bootBintoolsNoLibc = null; - bootBintools = null; - }; - llvmPackagesBuildBuild = llvmPackagesBuildBuild0.override { - bootBintoolsNoLibc = null; - bootBintools = null; - }; - - buildStdenv = overrideCC llvmPackages.stdenv ( - llvmPackages.stdenv.cc.override {bintools = buildPackages.rustc.llvmPackages.bintools;} - ); - - inherit (pkgsCross) wasi32; - - wasiSysRoot = runCommand "wasi-sysroot" {} '' - mkdir -p "$out"/lib/wasm32-wasi - for lib in ${wasi32.llvmPackages.libcxx}/lib/*; do - ln -s "$lib" "$out"/lib/wasm32-wasi - done - ''; - - firefox-l10n = fetchFromGitHub { - owner = "mozilla-l10n"; - repo = "firefox-l10n"; - rev = "9d639cd79d6b73081fadb3474dd7d73b89732e7b"; - hash = "sha256-+2JCaPp+c2BRM60xFCeY0pixIyo2a3rpTPaSt1kTfDw="; - }; -in - buildStdenv.mkDerivation (finalAttrs: { - pname = "zen-browser-unwrapped"; - version = "1.0.2-b.0"; - - src = fetchFromGitHub { - owner = "zen-browser"; - repo = "desktop"; - rev = "df4ea8794f957c8e409adef9b2c3325be710c626"; - hash = "sha256-vPe/hTJozJdCbq5GK87MGBh+Nybs8et+6ukm0Fdz3uA="; - fetchSubmodules = true; - }; - - # DO NOT UPDATE THE FIREFOX VERSION MANUALLY! - # - # Both `firefoxVersion` and `firefoxSrc` are managed by the `update.sh` script. - # The Firefox version is specified by `zen-browser` in the `surfer.json` file. - # - # We need to manually set the version here to avoid IFD. - firefoxVersion = "133.0.3"; - firefoxSrc = fetchurl { - url = "mirror://mozilla/firefox/releases/${finalAttrs.firefoxVersion}/source/firefox-${finalAttrs.firefoxVersion}.source.tar.xz"; - hash = "sha256-8TSlQgIAuwOrRg+dKGdQfA7bIiznP69AZM2+oCoKyhs="; - }; - - SURFER_COMPAT = generic; - - nativeBuildInputs = - [ - autoconf - cargo - git - gnum4 - llvmPackagesBuildBuild.bintools - makeWrapper - nasm - nodejs - pkg-config - python3 - rsync - rust-cbindgen - rustPlatform.bindgenHook - rustc - surfer - unzip - wrapGAppsHook3 - xorg.xvfb - ] - ++ lib.optionals crashreporterSupport [ - dump_syms - patchelf - ]; - - buildInputs = - [ - atk - cairo - cups - dbus - dbus-glib - ffmpeg - fontconfig - freetype - gdk-pixbuf - gtk3 - glib - icu73 - libGL - libGLU - libevent - libffi - libglvnd - libjpeg - libnotify - libpng - libstartup_notification - libva - libvpx - libwebp - libxml2 - mesa - nspr - nss_latest - pango - pciutils - pipewire - udev - xcb-util-cursor - xorg.libX11 - xorg.libXcursor - xorg.libXdamage - xorg.libXext - xorg.libXft - xorg.libXi - xorg.libXrender - xorg.libXt - xorg.libXtst - xorg.pixman - xorg.xorgproto - xorg.libxcb - xorg.libXrandr - xorg.libXcomposite - xorg.libXfixes - xorg.libXScrnSaver - zlib - ] - ++ lib.optional alsaSupport alsa-lib - ++ lib.optional jackSupport libjack2 - ++ lib.optional pulseaudioSupport libpulseaudio - ++ lib.optional sndioSupport sndio - ++ lib.optional gssSupport libkrb5 - ++ lib.optional jemallocSupport jemalloc - ++ lib.optionals waylandSupport [ - libdrm - libxkbcommon - ]; - - configureFlags = - [ - "--disable-bootstrap" - "--disable-updater" - "--enable-default-toolkit=cairo-gtk3${lib.optionalString waylandSupport "-wayland"}" - "--enable-system-pixman" - "--with-distribution-id=org.nixos" - "--with-libclang-path=${llvmPackagesBuildBuild.libclang.lib}/lib" - "--with-system-ffi" - "--with-system-icu" - "--with-system-jpeg" - "--with-system-libevent" - "--with-system-libvpx" - "--with-system-nspr" - "--with-system-nss" - "--with-system-png" # needs APNG support - "--with-system-webp" - "--with-system-zlib" - "--with-wasi-sysroot=${wasiSysRoot}" - "--host=${buildStdenv.buildPlatform.config}" - "--target=${buildStdenv.hostPlatform.config}" - (lib.enableFeature alsaSupport "alsa") - (lib.enableFeature ffmpegSupport "ffmpeg") - (lib.enableFeature geolocationSupport "necko-wifi") - (lib.enableFeature gssSupport "negotiateauth") - (lib.enableFeature jackSupport "jack") - (lib.enableFeature jemallocSupport "jemalloc") - (lib.enableFeature pulseaudioSupport "pulseaudio") - (lib.enableFeature sndioSupport "sndio") - (lib.enableFeature webrtcSupport "webrtc") - # --enable-release adds -ffunction-sections & LTO that require a big amount - # of RAM, and the 32-bit memory space cannot handle that linking - (lib.enableFeature (!debugBuild && !stdenv.hostPlatform.is32bit) "release") - (lib.enableFeature enableDebugSymbols "debug-symbols") - ] - ++ lib.optional stdenv.hostPlatform.isAarch "--disable-wasm-avx"; - - configureScript = writeShellScript "configureMozconfig" ( - (lib.optionalString stdenv.hostPlatform.isAarch '' - echo "ac_add_options --with-libclang-path=/usr/lib64" >> ./configs/linux/mozconfig - - # linux mozconfig - sed -i 's/x86-\(64\|64-v3\)/native/g' ./configs/linux/mozconfig - sed -i 's/x86_64-pc-linux/aarch64-linux-gnu/g' ./configs/linux/mozconfig - - # eme/widevine must be disabled on arm64 (thx google) - sed -i '/--enable-eme/s/^/# /' ./configs/common/mozconfig - sed -i 's/-msse3//g' ./configs/linux/mozconfig - sed -i 's/-mssse3//g' ./configs/linux/mozconfig - sed -i 's/-msse4.1//g' ./configs/linux/mozconfig - sed -i 's/-msse4.2//g' ./configs/linux/mozconfig - sed -i 's/-mavx2//g' ./configs/linux/mozconfig - sed -i 's/-mavx//g' ./configs/linux/mozconfig - sed -i 's/-mfma//g' ./configs/linux/mozconfig - sed -i 's/-maes//g' ./configs/linux/mozconfig - sed -i 's/-mpopcnt//g' ./configs/linux/mozconfig - sed -i 's/-mpclmul//g' ./configs/linux/mozconfig - sed -i 's/+avx2//g' ./configs/linux/mozconfig - sed -i 's/+sse4.1//g' ./configs/linux/mozconfig - - '') - + '' - for flag in $@; do - echo "ac_add_options $flag" >> mozconfig - done - '' - ); - - # To the person reading this wondering what is going on here, this is what - # happens when a build process relies on Git. Normally you would use `fetchgit` - # with `leaveDotGit = true`, however that leads to reproducibility issues, so - # instead we create our own Git repo with a single commit. - # - # `surfer` (the build tool made for zen-browser) uses git to read the latest - # HEAD commit, `git apply`, and likely a few other operations. - preConfigure = '' - export HOME="$TMPDIR" - git config --global user.email "nixbld@localhost" - git config --global user.name "nixbld" - git init - git add --all - git commit -m 'nixpkgs' - - export LLVM_PROFDATA=llvm-profdata - export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system - export WASM_CC=${wasi32.stdenv.cc}/bin/${wasi32.stdenv.cc.targetPrefix}cc - export WASM_CXX=${wasi32.stdenv.cc}/bin/${wasi32.stdenv.cc.targetPrefix}c++ - - export ZEN_RELEASE=1 - surfer ci --brand beta --display-version ${finalAttrs.version} - - install -D ${finalAttrs.firefoxSrc} .surfer/engine/firefox-${finalAttrs.firefoxVersion}.source.tar.xz - surfer download - surfer import - patchShebangs engine/mach engine/build engine/tools - ''; - - preBuild = '' - cp -r ${firefox-l10n} l10n/firefox-l10n - - for lang in $(cat ./l10n/supported-languages); do - rsync -av --progress l10n/firefox-l10n/"$lang"/ l10n/"$lang" --exclude .git - done - - sh scripts/copy-language-pack.sh en-US - - for lang in $(cat ./l10n/supported-languages); do - sh scripts/copy-language-pack.sh "$lang" - done - - Xvfb :2 -screen 0 1024x768x24 & - export DISPLAY=:2 - ''; - - buildPhase = '' - runHook preBuild - - surfer build - - runHook postBuild - ''; - - preInstall = '' - cd engine/obj-* - ''; - - meta = { - mainProgram = "zen"; - description = "Firefox based browser with a focus on privacy and customization"; - homepage = "https://www.zen-browser.app/"; - license = lib.licenses.mpl20; - maintainers = with lib.maintainers; [ - matthewpi - titaniumtown - ]; - platforms = [ - "aarch64-linux" - "x86_64-linux" - ]; - }; - - enableParallelBuilding = true; - requiredSystemFeatures = ["big-parallel"]; - - passthru = { - updateScript = ./update.sh; - - # These values are used by `wrapFirefox`. - # ref; `pkgs/applications/networking/browsers/firefox/wrapper.nix' - binaryName = finalAttrs.meta.mainProgram; - inherit alsaSupport; - inherit jackSupport; - inherit pipewireSupport; - inherit sndioSupport; - inherit nspr; - inherit ffmpegSupport; - inherit gssSupport; - inherit gtk3; - inherit wasiSysRoot; - }; - }) diff --git a/packages/zen-browser-unwrapped/surfer-dont-check-update.patch b/packages/zen-browser-unwrapped/surfer-dont-check-update.patch deleted file mode 100644 index 355e7c9..0000000 --- a/packages/zen-browser-unwrapped/surfer-dont-check-update.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/src/index.ts b/src/index.ts -index 3d41389..f6bfb95 100644 ---- a/src/index.ts -+++ b/src/index.ts -@@ -19,7 +19,6 @@ import { resolve } from 'node:path' - import { errorHandler, config as configInited, versionFormatter } from './utils' - import { commands } from './cmds' - import { BIN_NAME, ENGINE_DIR } from './constants' --import { updateCheck } from './middleware/update-check' - import { registerCommand } from './middleware/register-command' - import { log } from './log' - -@@ -83,7 +82,6 @@ async function middleware(command: commander.Command) { - // If the program is verbose, store that fact within the logger - log.isDebug = program.opts().verbose - -- await updateCheck() - registerCommand(command.name()) - } diff --git a/packages/zen-browser-unwrapped/update.sh b/packages/zen-browser-unwrapped/update.sh deleted file mode 100755 index 1a4c004..0000000 --- a/packages/zen-browser-unwrapped/update.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p curl jq common-updater-scripts nix-prefetch-git nix-prefetch-github - -# Define the package file -PACKAGE_FILE="default.nix" - -# Function to get the latest version of zen-browser/desktop -get_latest_version() { - curl --silent "https://api.github.com/repos/zen-browser/desktop/releases" | - jq -r '[.[] | select(.prerelease==false)][0].tag_name' -} - -# Get the latest version -latest_version=$(get_latest_version) - -if [ -z "$latest_version" ] || [ "$latest_version" == "null" ]; then - echo "Failed to get the latest version." - exit 1 -fi - -echo "Latest version: $latest_version" - -# Update the 'version' variable in the Nix expression -sed -i "/pname = \"zen-browser-unwrapped\";/,/version = \".*\";/s/version = \".*\";/version = \"$latest_version\";/" "$PACKAGE_FILE" - -# Fetch the new 'src' hash -echo "Fetching new source hash..." -src_info=$(nix-prefetch-github zen-browser desktop --rev "$latest_version" --fetch-submodules) -src_hash=$(echo "$src_info" | jq -r .sha256) - -echo "New source hash: $src_hash" - -# Update 'rev' and 'hash' in the 'src' fetchFromGitHub -sed -i "/src = fetchFromGitHub {/,/};/{ - /owner = \"zen-browser\";/,/};/{ - s/rev = \".*\";/rev = \"$latest_version\";/ - s/hash = \".*\";/hash = \"$src_hash\";/ - } -}" "$PACKAGE_FILE" - -# Clone the repository to extract 'firefoxVersion' -tmpdir=$(mktemp -d) -trap 'rm -rf "$tmpdir"' EXIT - -git clone --depth 1 --branch "$latest_version" https://github.com/zen-browser/desktop.git "$tmpdir" - -# Extract 'firefoxVersion' from 'surfer.json' -firefoxVersion=$(jq --raw-output '.version.version' "$tmpdir/surfer.json") -echo "Firefox version: $firefoxVersion" - -# Update the 'firefoxVersion' in the Nix expression -sed -i "s/firefoxVersion = \".*\";/firefoxVersion = \"$firefoxVersion\";/" "$PACKAGE_FILE" - -# Fetch the new 'firefoxSrc' hash -firefox_url="mirror://mozilla/firefox/releases/$firefoxVersion/source/firefox-$firefoxVersion.source.tar.xz" -echo "Fetching Firefox source hash..." -firefox_hash=$(nix-prefetch-url --unpack "$firefox_url") - -echo "Firefox source hash: $firefox_hash" - -# Update the 'firefoxSrc' hash in the Nix expression -sed -i "/firefoxSrc = fetchurl {/,/};/{ - s/hash = \".*\";/hash = \"$firefox_hash\";/ -}" "$PACKAGE_FILE" - -echo "Update complete!" diff --git a/packages/zen-browser/default.nix b/packages/zen-browser/default.nix deleted file mode 100644 index 91c71fb..0000000 --- a/packages/zen-browser/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - wrapFirefox, - custom, -}: -wrapFirefox custom.zen-browser-unwrapped { - pname = "zen-browser"; - libName = "zen"; -} diff --git a/systems/x86_64-linux/earth/default.nix b/systems/x86_64-linux/earth/default.nix index 9becc76..3cb2eee 100644 --- a/systems/x86_64-linux/earth/default.nix +++ b/systems/x86_64-linux/earth/default.nix @@ -30,11 +30,6 @@ hardware.keyboard.qmk.enable = true; programs.nix-ld.enable = true; - # services.monero.mining.enable = true; - # services.monero.enable = true; - # services.monero.mining.address = "485XKPKG38bSJBUa4SPenAEFt8Wgj2hWC97PNBpFHniwNXnDNZ9xar5hHb6qLQeyK2Kk3Fw2cxxPSLjgyqr5CxXAUkUsDDx"; - # services.monero.mining.threads = 4; - hardware.march = { arch = "znver3"; enableNativeOptimizations = true; @@ -42,10 +37,27 @@ memory.total = 32; }; + # CachyOS-inspired additional native optimizations + nixpkgs.config.packageOverrides = pkgs: { + # Override performance-critical packages with native optimizations + steam = pkgs.steam.override { + extraPkgs = pkgs: + with pkgs; [ + libva + mesa + vulkan-loader + ]; + }; + }; + + services.gdm-monitors.enable = true; + specialisation = { plasma6 = { configuration = { - services.xserver.desktopManager.plasma6.enable = true; + services.desktopManager.plasma6.enable = true; + services.displayManager.sddm.enable = true; + services.xserver.displayManager.gdm.enable = lib.mkForce false; programs.seahorse.enable = lib.mkForce false; }; @@ -62,7 +74,29 @@ localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers }; programs.steam.gamescopeSession.enable = true; - programs.gamemode.enable = true; + # programs.gamemode = { + # enable = true; + # settings = { + # general = { + # renice = 10; # Higher process priority for games + # ioprio = 0; # Highest I/O priority + # inhibit_screensaver = 1; # Prevent screensaver + # }; + # + # gpu = { + # gpu_device = 0; # GPU device index to use + # apply_gpu_optimisations = 1; # Apply GPU optimizations + # gpu_core_clock_mhz = 0; # Don't override core clock + # gpu_mem_clock_mhz = 0; # Don't override memory clock + # gpu_powermizer_mode = 1; # Maximum performance mode + # }; + # + # custom = { + # start = "${pkgs.libnotify}/bin/notify-send 'GameMode enabled' 'System optimizations activated'"; + # end = "${pkgs.libnotify}/bin/notify-send 'GameMode disabled' 'System returned to normal'"; + # }; + # }; + # }; ui.fonts.enable = true; @@ -117,23 +151,28 @@ # insertNameservers = ["1.1.1.1" "1.0.0.1"]; }; - boot.kernelPackages = pkgs.linuxPackages_zen; - boot.kernelPatches = [ - { - name = "bsb-patches"; - patch = pkgs.fetchpatch { - url = "https://gist.githubusercontent.com/galister/08cddf10ac18929647d5fb6308df3e4b/raw/0f6417b6cb069f19d6c28b730499c07de06ec413/combined-bsb-6-10.patch"; - hash = "sha256-u8O4foBHhU+T3yYkguBZ14EyCKujPzHh1TwFRg6GMsA="; - }; - } + services.scx.enable = true; + services.scx.scheduler = "scx_rusty"; + services.scx.package = pkgs.scx_git.full; + + boot.kernelPackages = pkgs.linuxPackages_cachyos-lto; + # CachyOS-inspired kernel parameters for better desktop responsiveness and gaming + boot.kernelParams = [ + "nowatchdog" + "preempt=full" + "threadirqs" + "tsc=reliable" + "clocksource=tsc" + "preempt=voluntary" + "futex.futex2_interface=1" # Better Wine/Proton compatibility + "NVreg_UsePageAttributeTable=1" # Improved GPU memory management + "io_uring.sqpoll=2" # Modern I/O scheduler polling + "transparent_hugepage=madvise" # Better memory management + "elevator=bfq" # Better I/O scheduling for gaming ]; boot.supportedFilesystems = ["ntfs"]; services.dlna.enable = false; - # services.openssh = { - # enable = true; - # PasswordAuthentication = true; - # }; time.timeZone = "America/Detroit"; @@ -150,9 +189,13 @@ environment.systemPackages = [ pkgs.sbctl - lib.custom.nixos-stable.vesktop pkgs.mangohud - pkgs.lutris + (pkgs.lutris.override { + extraPkgs = pkgs: [ + inputs.nix-gaming.packages.${pkgs.system}.wine-tkg-zoey + pkgs.winetricks + ]; + }) pkgs.bottles pkgs.file-roller pkgs.podman-tui @@ -162,60 +205,17 @@ pkgs.transmission_4 pkgs.protonup-qt pkgs.restic - inputs.opnix.packages.${system}.default pkgs.qt5.qtwayland - (inputs.umu.packages.${system}.umu.override { - version = inputs.umu.shortRev; - truststore = true; - cbor2 = true; + pkgs.vkBasalt # Vulkan post-processing layer for better visuals + pkgs.goverlay # MangoHud and vkBasalt GUI configurator + pkgs.cpupower-gui # CPU frequency control GUI + pkgs.ananicy-cpp # Process priority daemon + (inputs.umu.packages.${system}.umu-launcher.override { + withTruststore = true; + withDeltaUpdates = true; }) inputs.agenix.packages.${system}.agenix inputs.awsvpnclient.packages.${system}.awsvpnclient - - pkgs.nautilus-python - (pkgs.writeTextFile { - name = "nautilus-open-kitty-here"; - destination = "/share/nautilus-python/extensions/open-kitty-here.py"; - text = '' - import os - import gi - gi.require_version('Nautilus', '3.0') - from gi.repository import Nautilus, GObject - - class OpenKittyTerminalExtension(GObject.GObject, Nautilus.MenuProvider): - def __init__(self): - pass - - def menu_activate_cb(self, menu, file): - if file.is_directory(): - path = file.get_location().get_path() - else: - path = file.get_parent_location().get_path() - os.system(f'kitty --directory "{path}" &') - - def get_file_items(self, window, files): - if len(files) != 1: - return - - file = files[0] - item = Nautilus.MenuItem( - name='OpenKittyTerminalExtension::OpenKitty', - label='Open in Kitty', - tip='Opens Kitty terminal in this location' - ) - item.connect('activate', self.menu_activate_cb, file) - return [item] - - def get_background_items(self, window, file): - item = Nautilus.MenuItem( - name='OpenKittyTerminalExtension::OpenKitty', - label='Open in Kitty', - tip='Opens Kitty terminal in this location' - ) - item.connect('activate', self.menu_activate_cb, file) - return [item] - ''; - }) ]; programs.zsh.enable = true; @@ -253,7 +253,7 @@ services.samba = { enable = true; openFirewall = true; - shares = { + settings = { "SteamLibrary" = { path = "/mnt/bk"; # Update this path to your drive's mount point browseable = true; @@ -269,6 +269,18 @@ catppuccin.enable = true; programs.virt-manager.enable = true; + # Enable Ananicy for automatic process priority management + services.ananicy = { + enable = true; + package = pkgs.ananicy-cpp; + rulesProvider = pkgs.ananicy-rules-cachyos; + }; + + # CPU frequency governor always set to performance for desktop + powerManagement.cpuFreqGovernor = "performance"; + + systemd.services.NetworkManager-wait-online.enable = false; + sites.jellyfin.enable = true; sites.mealie.enable = false; @@ -278,7 +290,6 @@ dockerCompat = true; defaultNetwork.settings.dns_enabled = true; }; - virtualisation.waydroid.enable = true; hardware.gpu-passthru.enable = true; system.stateVersion = "24.05"; diff --git a/systems/x86_64-linux/pluto/default.nix b/systems/x86_64-linux/pluto/default.nix index 67e0b91..79db280 100644 --- a/systems/x86_64-linux/pluto/default.nix +++ b/systems/x86_64-linux/pluto/default.nix @@ -2,9 +2,12 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). { + lib, pkgs, inputs, config, + specialArgs, + system, ... }: { imports = [ @@ -12,6 +15,8 @@ ./hardware-configuration.nix ]; + # nixpkgs.pkgs = lib.mkForce inputs.nixos-stable.legacyPackages.${system}; + nix.settings = { trusted-users = ["zoey"]; }; @@ -97,6 +102,8 @@ minio.enable = true; immich.enable = true; polaris.enable = false; + sourcehut.enable = false; + forgejo.enable = true; zoeycomputer = { enable = true; domain = "zoeys.computer"; @@ -112,6 +119,8 @@ }; }; + catppuccin.flavor = "mocha"; + zmio.blog.enable = true; zmio.blog.domain = "zackmyers.io"; diff --git a/systems/x86_64-linux/venus/default.nix b/systems/x86_64-linux/venus/default.nix index fee5213..790b834 100644 --- a/systems/x86_64-linux/venus/default.nix +++ b/systems/x86_64-linux/venus/default.nix @@ -10,6 +10,17 @@ ./disk-config.nix ]; + nix.optimise = { + automatic = true; + dates = ["03:45"]; + }; + + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 14d"; + }; + boot.loader.grub = { efiSupport = true; efiInstallAsRemovable = true; @@ -64,16 +75,6 @@ }; }; - services.mc-honeypot = { - enable = true; - - openFirewall = true; - - settings = { - "webhook-url" = "https://discord.com/api/webhooks/1348850542398410834/1fqV4QLh4uTTuwZ0DjOczZa6gkDjsYECSlmWBwTXHWcYTHhwsE1ZLTP17z5v-vh6nn7H"; - }; - }; - networking.firewall.allowedTCPPorts = [80 443]; system.stateVersion = "24.05";