diff --git a/flake.lock b/flake.lock index 6f0571b..f40b388 100644 --- a/flake.lock +++ b/flake.lock @@ -55,7 +55,8 @@ "devenv" ], "flake-compat": [ - "devenv" + "devenv", + "flake-compat" ], "git-hooks": [ "devenv", @@ -67,11 +68,11 @@ ] }, "locked": { - "lastModified": 1752264895, - "narHash": "sha256-1zBPE/PNAkPNUsOWFET4J0cjlvziH8DOekesDmjND+w=", + "lastModified": 1760971495, + "narHash": "sha256-IwnNtbNVrlZIHh7h4Wz6VP0Furxg9Hh0ycighvL5cZc=", "owner": "cachix", "repo": "cachix", - "rev": "47053aef762f452e816e44eb9a23fbc3827b241a", + "rev": "c5bfd933d1033672f51a863c47303fc0e093c2d2", "type": "github" }, "original": { @@ -86,11 +87,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1760953099, - "narHash": "sha256-sOKx2YcHa+lWEvaEOIGqLN2WWk1Wf5z6KM02tdfhMtw=", + "lastModified": 1761553912, + "narHash": "sha256-3UOEQPBlZo9OixT9L1zoD67QheopTG8/EfRPGKyP9bg=", "owner": "catppuccin", "repo": "nix", - "rev": "f5b21876888265d2fee7fb0640d1b66a1c1c6503", + "rev": "7b42c91911c143ae3ea32a79cc8582b5920f24e3", "type": "github" }, "original": { @@ -109,11 +110,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1761156818, - "narHash": "sha256-IScY9PpnF48Q/Z17YG5/ZcYWiWOkY2zCKLqsx1CJESM=", + "lastModified": 1761583935, + "narHash": "sha256-vJ0ylFdPPESUCBYZvEtVmVemSp4G0WH8CbVIkboHIJs=", "owner": "cachix", "repo": "devenv", - "rev": "949fc6dc8f36f38e1cceb1bf1673c4e995a6a766", + "rev": "b7e3b2aeb90ce37517fb8da09ceff8ab587a9fcf", "type": "github" }, "original": { @@ -130,11 +131,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1761201787, - "narHash": "sha256-RQG899vzsoRIMQ6ZR5bi1W9HOomUgID7tk3COQf/OaY=", + "lastModified": 1761547629, + "narHash": "sha256-4OH1CVm2PdjKRqEJ3RLfkQMDSBdn7VId6iyYCwKOK+U=", "owner": "nix-community", "repo": "fenix", - "rev": "1ab39eca6ce37b1db23b595c2a754c81ebf49507", + "rev": "d82a7c64ea441e397914577c9a18f2867e5b364b", "type": "github" }, "original": { @@ -208,6 +209,22 @@ } }, "flake-compat_5": { + "flake": false, + "locked": { + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_6": { "flake": false, "locked": { "lastModified": 1696426674, @@ -231,11 +248,11 @@ ] }, "locked": { - "lastModified": 1756770412, - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "lastModified": 1760948891, + "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "4524271976b625a4a605beefd893f270620fd751", + "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", "type": "github" }, "original": { @@ -293,11 +310,11 @@ ] }, "locked": { - "lastModified": 1758108966, - "narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=", + "lastModified": 1760663237, + "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b", + "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", "type": "github" }, "original": { @@ -307,12 +324,34 @@ } }, "git-hooks_2": { + "inputs": { + "flake-compat": "flake-compat_2", + "gitignore": "gitignore_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1760663237, + "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "git-hooks_3": { "inputs": { "flake-compat": [ "simple-nixos-mailserver", "flake-compat" ], - "gitignore": "gitignore_3", + "gitignore": "gitignore_4", "nixpkgs": [ "simple-nixos-mailserver", "nixpkgs" @@ -355,6 +394,27 @@ } }, "gitignore_2": { + "inputs": { + "nixpkgs": [ + "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_3": { "inputs": { "nixpkgs": [ "hyprland", @@ -376,7 +436,7 @@ "type": "github" } }, - "gitignore_3": { + "gitignore_4": { "inputs": { "nixpkgs": [ "simple-nixos-mailserver", @@ -398,7 +458,7 @@ "type": "github" } }, - "gitignore_4": { + "gitignore_5": { "inputs": { "nixpkgs": [ "zls", @@ -443,11 +503,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1761141169, - "narHash": "sha256-5IZjbTvP5dNTD8CbEYlNbicdGcbCN9SC9ksMm2ZEXH0=", + "lastModified": 1761440613, + "narHash": "sha256-eQTH5iTkEQptZqVGyTPgpMYL7zj6QkI/uGo+1/PkAQY=", "owner": "helix-editor", "repo": "helix", - "rev": "d79cce4e4bfc24dd204f1b294c899ed73f7e9453", + "rev": "7c4ff9c39dbd3dd7d6e2cb3e26cb34212202bb1b", "type": "github" }, "original": { @@ -463,11 +523,11 @@ ] }, "locked": { - "lastModified": 1761235135, - "narHash": "sha256-cux9xeceLIER1lBxUa1gMafkz7gg5ntcUmJBynWdBWI=", + "lastModified": 1761584077, + "narHash": "sha256-dISPEZahlfs5K6d58zR4akRRyogfE9P4WSyPPNT7HiE=", "owner": "nix-community", "repo": "home-manager", - "rev": "0adf9ba3f567da2d53af581a857aacf671aaa547", + "rev": "e82585308aef3d4cc2c36c7b6946051c8cdf24ef", "type": "github" }, "original": { @@ -623,11 +683,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1761129162, - "narHash": "sha256-vJYlThaqdSYRKn1HcaMbkHeB95bXQwgG1ugrlSKQjHg=", + "lastModified": 1761572054, + "narHash": "sha256-NuDXgcyWa9EfQZXs+7mXKTimzlxEdLV0kJR6gGcFU/8=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "057695bc3f7de5e8841c15252fc51029590895e4", + "rev": "560c53d87dedf7df8185eb370cfbf3575826e85c", "type": "github" }, "original": { @@ -653,11 +713,11 @@ ] }, "locked": { - "lastModified": 1760659005, - "narHash": "sha256-wyS6tXYJuzbwckOeaCoRtT4qIG2UZ0YvSZx7EBNjTV0=", + "lastModified": 1761249285, + "narHash": "sha256-70dEwL5p3CB/00ODs2RHWUKTyafB+PF4Ld7IEMuO+no=", "owner": "hyprwm", "repo": "hyprland-plugins", - "rev": "a5a6f93d72d5fb37e78b98c756cfd8b340e71a19", + "rev": "81f6d1426537981fcbb921f8b5e470b1280ef8f3", "type": "github" }, "original": { @@ -985,11 +1045,11 @@ "rust-overlay": [] }, "locked": { - "lastModified": 1760940149, - "narHash": "sha256-KbM47vD6E0cx+v4jYQZ8mD5N186AKm2CQlyh34TW58U=", + "lastModified": 1761460429, + "narHash": "sha256-pJeM23DGMD5AK4gdNaDM1qsIv87NYQJgEh2E8tRd7es=", "owner": "YaLTeR", "repo": "niri", - "rev": "b3245b81a6ed8edfaf5388a74d2e0a23c24941e5", + "rev": "e6f3c538da0c646bda43fcde7ef7dc3b771e0c8b", "type": "github" }, "original": { @@ -1012,11 +1072,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1761187190, - "narHash": "sha256-5ln16iOeWpEX5MO7M3jzFEBNFE42gpFsCvSvPjtF6tQ=", + "lastModified": 1761542689, + "narHash": "sha256-l4TQRcQyp6hoUVQL/R4UBHvYX9whHTntaz5NxHi0PH4=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "77a07f5d3b775fba67550c38122ebb8d3ee3ba1c", + "rev": "75768e54ca2591bb0be17fa310992628e5efce2d", "type": "github" }, "original": { @@ -1028,11 +1088,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1760940149, - "narHash": "sha256-KbM47vD6E0cx+v4jYQZ8mD5N186AKm2CQlyh34TW58U=", + "lastModified": 1761460429, + "narHash": "sha256-pJeM23DGMD5AK4gdNaDM1qsIv87NYQJgEh2E8tRd7es=", "owner": "YaLTeR", "repo": "niri", - "rev": "b3245b81a6ed8edfaf5388a74d2e0a23c24941e5", + "rev": "e6f3c538da0c646bda43fcde7ef7dc3b771e0c8b", "type": "github" }, "original": { @@ -1088,11 +1148,11 @@ ] }, "locked": { - "lastModified": 1760948931, - "narHash": "sha256-guAocn26kDPdkl6tPXJt5pPaIIsrGI4taw+1U3+FM7E=", + "lastModified": 1761554027, + "narHash": "sha256-LMnsUobJtqhNnHc9FAp4V/MPMb82+YiXnjbUreg/0n8=", "owner": "Mic92", "repo": "nix-ld", - "rev": "a48b2dc9a256bcef9182f0f92c481de975302b1e", + "rev": "e7d1eba1d561ada0bdb1177ff5d7ce2f8447e974", "type": "github" }, "original": { @@ -1118,17 +1178,17 @@ }, "nixos-wsl": { "inputs": { - "flake-compat": "flake-compat_3", + "flake-compat": "flake-compat_4", "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1760536587, - "narHash": "sha256-wfWqt+igns/VazjPLkyb4Z/wpn4v+XIjUeI3xY/1ENg=", + "lastModified": 1761563673, + "narHash": "sha256-d+1TpVAmRjcNBfjZsh2yQSdwUfN7Xgz1blJ185g73+A=", "owner": "nix-community", "repo": "NixOS-WSL", - "rev": "f98ee1de1fa36eca63c67b600f5d617e184e82ea", + "rev": "a518cf710e5ebb935518dc7ac98e07e7ee5014c3", "type": "github" }, "original": { @@ -1202,11 +1262,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1761016216, - "narHash": "sha256-G/iC4t/9j/52i/nm+0/4ybBmAF4hzR8CNHC75qEhjHo=", + "lastModified": 1761468971, + "narHash": "sha256-vY2OLVg5ZTobdroQKQQSipSIkHlxOTrIF1fsMzPh8w8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "481cf557888e05d3128a76f14c76397b7d7cc869", + "rev": "78e34d1667d32d8a0ffc3eba4591ff256e80576e", "type": "github" }, "original": { @@ -1234,11 +1294,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1761114652, - "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", + "lastModified": 1761373498, + "narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=", "owner": "nixos", "repo": "nixpkgs", - "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", + "rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce", "type": "github" }, "original": { @@ -1250,11 +1310,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1758532697, - "narHash": "sha256-bhop0bR3u7DCw9/PtLCwr7GwEWDlBSxHp+eVQhCW9t4=", + "lastModified": 1761313199, + "narHash": "sha256-wCIACXbNtXAlwvQUo1Ed++loFALPjYUA3dpcUJiXO44=", "owner": "cachix", "repo": "devenv-nixpkgs", - "rev": "207a4cb0e1253c7658c6736becc6eb9cace1f25f", + "rev": "d1c30452ebecfc55185ae6d1c983c09da0c274ff", "type": "github" }, "original": { @@ -1266,11 +1326,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1761114652, - "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", + "lastModified": 1761373498, + "narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=", "owner": "nixos", "repo": "nixpkgs", - "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", + "rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce", "type": "github" }, "original": { @@ -1313,6 +1373,22 @@ } }, "nixpkgs_6": { + "locked": { + "lastModified": 1761236834, + "narHash": "sha256-+pthv6hrL5VLW2UqPdISGuLiUZ6SnAXdd2DdUE+fV2Q=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d5faa84122bc0a1fd5d378492efce4e289f8eac1", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { "locked": { "lastModified": 1755615617, "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", @@ -1330,8 +1406,8 @@ }, "pre-commit-hooks": { "inputs": { - "flake-compat": "flake-compat_2", - "gitignore": "gitignore_2", + "flake-compat": "flake-compat_3", + "gitignore": "gitignore_3", "nixpkgs": [ "hyprland", "nixpkgs" @@ -1357,6 +1433,7 @@ "devenv": "devenv", "fenix": "fenix", "flake-parts": "flake-parts_2", + "git-hooks": "git-hooks_2", "gpg-base-conf": "gpg-base-conf", "helix": "helix", "home-manager": "home-manager", @@ -1378,7 +1455,7 @@ "simple-nixos-mailserver": "simple-nixos-mailserver", "sops-nix": "sops-nix", "systems": "systems_3", - "tuya-vaccum-maps": "tuya-vaccum-maps", + "treefmt-nix": "treefmt-nix", "zen-browser": "zen-browser", "zig-overlay": "zig-overlay", "zls": "zls" @@ -1387,11 +1464,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1761178311, - "narHash": "sha256-M5VeAtfip2zdqHKG9Su+5vlDG8AhtTk1ktxUGXdARc8=", + "lastModified": 1761500479, + "narHash": "sha256-syeBTCCU96qPJHcVpwHeCwmPCiLTDHHgYQYhpZ0iwLo=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "f362735f822fe66ed2e357db53717b3db69dc6c9", + "rev": "049767e6faa84b2d1a951d8f227e6ebd99d728a2", "type": "github" }, "original": { @@ -1425,8 +1502,8 @@ "simple-nixos-mailserver": { "inputs": { "blobs": "blobs", - "flake-compat": "flake-compat_4", - "git-hooks": "git-hooks_2", + "flake-compat": "flake-compat_5", + "git-hooks": "git-hooks_3", "nixpkgs": "nixpkgs_4", "nixpkgs-25_05": "nixpkgs-25_05" }, @@ -1522,19 +1599,21 @@ "type": "github" } }, - "tuya-vaccum-maps": { - "flake": false, + "treefmt-nix": { + "inputs": { + "nixpkgs": "nixpkgs_6" + }, "locked": { - "lastModified": 1752975474, - "narHash": "sha256-MTCOspRIjDKJkMPgwoKgTRtcc6rgJRGxDBwfMD/QZ7g=", - "owner": "jaidenlabelle", - "repo": "tuya-vacuum-maps", - "rev": "c8a96ff1afa62d6cec448f3b7cf6b869a50b20eb", + "lastModified": 1761311587, + "narHash": "sha256-Msq86cR5SjozQGCnC6H8C+0cD4rnx91BPltZ9KK613Y=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "2eddae033e4e74bf581c2d1dfa101f9033dbd2dc", "type": "github" }, "original": { - "owner": "jaidenlabelle", - "repo": "tuya-vacuum-maps", + "owner": "numtide", + "repo": "treefmt-nix", "type": "github" } }, @@ -1599,11 +1678,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1761173223, - "narHash": "sha256-FumZh+fPRaKXkl9Y1uTh5KV7Io/AyOZso+UkqLhLArs=", + "lastModified": 1761422250, + "narHash": "sha256-+pN8VAh8OVUSj8zPoI8QfC93JMIKPaAOABrbeeiO/Hk=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "bf745144acda1343934e9a094cf9458a54d57889", + "rev": "2dd40ecfe882c1659e0e46c761974702c7ab5fde", "type": "github" }, "original": { @@ -1615,14 +1694,14 @@ "zen-browser": { "inputs": { "home-manager": "home-manager_2", - "nixpkgs": "nixpkgs_6" + "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1761180075, - "narHash": "sha256-V4WLeUQ4gCGZiVihlXWBOZ/1FNcL0jM4zgTY1haJLvY=", + "lastModified": 1761535208, + "narHash": "sha256-E1PobJMiFmVUX2YdqYk/MpKb0LXavOYvlg8DCBBzlHc=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "771a2604606905d8c0ffe3b818dc2cc5bd1405d8", + "rev": "79a94872a3e6993a051c4e22a2dcb02c1d088acf", "type": "github" }, "original": { @@ -1633,7 +1712,7 @@ }, "zig-overlay": { "inputs": { - "flake-compat": "flake-compat_5", + "flake-compat": "flake-compat_6", "flake-utils": "flake-utils", "nixpkgs": [ "nixpkgs" @@ -1655,7 +1734,7 @@ }, "zls": { "inputs": { - "gitignore": "gitignore_4", + "gitignore": "gitignore_5", "nixpkgs": [ "nixpkgs" ], @@ -1664,11 +1743,11 @@ ] }, "locked": { - "lastModified": 1760550770, - "narHash": "sha256-MIz62mvGfANGn4pPQV1DVocZPb2JTzyi1xDFYKzZOvc=", + "lastModified": 1761562676, + "narHash": "sha256-yREsDfqZ7JIC2hxQm94DQfNCyhm/KPdxWd3IVJ6zJ2s=", "owner": "zigtools", "repo": "zls", - "rev": "f486e884f479dd816f1c57a4be7f445f3d3b279c", + "rev": "67177e3d64b8ab0f358303ee6ed4bac4654e2fdb", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 2c0832a..4f704c1 100644 --- a/flake.nix +++ b/flake.nix @@ -14,6 +14,7 @@ flake-parts.url = "github:hercules-ci/flake-parts"; import-tree.url = "github:vic/import-tree"; + treefmt-nix.url = "github:numtide/treefmt-nix"; nixpkgs-latest-factorio.url = "github:Daholli/nixpkgs/e880129391be2f558d6c205cfd931be338b3b707"; nixpkgs-tuya-vacuum.url = "github:Daholli/nixpkgs/84b34e39e7a0879367189f34401191f6a0364bcf"; @@ -97,17 +98,13 @@ simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; catppuccin.url = "github:catppuccin/nix"; - ############### - # homeassitant - - tuya-vaccum-maps = { - url = "github:jaidenlabelle/tuya-vacuum-maps"; - flake = false; - }; - ################ ## inputs for dev shells - # + git-hooks = { + url = "github:cachix/git-hooks.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + devenv = { url = "github:cachix/devenv"; # inputs.nixpkgs.follows = "nixpkgs"; diff --git a/modules/apps/1password.nix b/modules/apps/1password.nix new file mode 100644 index 0000000..f519112 --- /dev/null +++ b/modules/apps/1password.nix @@ -0,0 +1,30 @@ +topLevel: { + flake.modules = { + nixos._1password = + { ... }: + { + programs = { + _1password.enable = true; + _1password-gui = { + enable = true; + polkitPolicyOwners = [ topLevel.config.flake.meta.users.cholli.username ]; + }; + }; + }; + + homeManager.cholli = + { lib, osConfig, ... }: + { + home.file = lib.mkIf osConfig.programs._1password.enable { + ".ssh/config".text = '' + Host * + ForwardAgent yes + IdentityAgent /home/cholli/.1password/agent.sock + + Host loptland + Hostname christophhollizeck.dev + ''; + }; + }; + }; +} diff --git a/modules/base/fish.nix b/modules/base/fish.nix new file mode 100644 index 0000000..07424dc --- /dev/null +++ b/modules/base/fish.nix @@ -0,0 +1,73 @@ +{ + flake.modules = { + nixos.base = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + fastfetch + + fd + tree + ripgrep + fzf + eza + + #optional + pciutils + usbutils + btop + + zip + unzip + nettools + ]; + }; + + homeManager.base = + { lib, pkgs, ... }: + { + catppuccin.fish.enable = true; + + programs = { + fish = { + enable = true; + shellInit = '' + set -x LESS_TERMCAP_mb \e'[01;32m' + set -x LESS_TERMCAP_md \e'[01;32m' + set -x LESS_TERMCAP_me \e'[0m' + set -x LESS_TERMCAP_se \e'[0m' + set -x LESS_TERMCAP_so \e'[01;47;34m' + set -x LESS_TERMCAP_ue \e'[0m' + set -x LESS_TERMCAP_us \e'[01;36m' + set -x LESS -R + set -x GROFF_NO_SGR 1 + ''; + shellAliases = { + vim = "hx"; + ls = "eza -lah --icons --git"; + lss = "ls --total-size"; + lt = "ls -T --git-ignore"; + }; + functions = { + checkHash = "nix hash to-sri --type sha256 $(nix-prefetch-url --unpack $argv)"; + deployNixberry = "nixos-rebuild switch --flake .#nixberry --target-host nixberry --sudo --ask-sudo-password"; + deployLoptland = "nixos-rebuild switch --flake .#loptland --target-host christophhollizeck.dev --sudo --ask-sudo-password"; + checkPR = ''cd /home/cholli/projects/nixpkgs && ${lib.getExe pkgs.nixpkgs-review} pr $argv --post-result --systems "x86_64-linux aarch64-linux"''; + }; + plugins = with pkgs.fishPlugins; [ + { + name = "forgit"; + src = forgit.src; + } + ]; + }; + + zoxide = { + enable = true; + options = [ "--cmd cd" ]; + }; + + }; + }; + }; +} diff --git a/modules/base/git.nix b/modules/base/git.nix new file mode 100644 index 0000000..4917fce --- /dev/null +++ b/modules/base/git.nix @@ -0,0 +1,129 @@ +topLevel: { + flake.modules = { + nixos.base = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + git + ]; + + }; + + homeManager.cholli = + { + config, + lib, + ... + }: + let + username = topLevel.config.flake.meta.users.cholli.username; + in + { + programs.git = { + enable = true; + lfs.enable = true; + signing = { + key = topLevel.config.flake.meta.users.cholli.key; + signByDefault = true; + }; + ignores = [ + ".direnv/" + ".devenv/" + "result" + ]; + + settings = { + user = { + name = topLevel.config.flake.meta.users.cholli.name; + email = topLevel.config.flake.meta.users.cholli.email; + }; + core = { + fsmonitor = true; + }; + init = { + defaultBranch = "main"; + }; + pull = { + rebase = true; + }; + push = { + autoSetupRemote = true; + }; + rebase = { + autoStash = true; + }; + safe = { + directory = "/home/${username}/projects/config"; + }; + maintenance = { + repo = [ + "home/${username}/projects/nixpkgs" + "home/${username}/projects/config" + ]; + strategy = "incremental"; + }; + lfs."https://git.christophhollizeck.dev/Daholli/nixos-config.git/info/lfs".locksverify = true; + }; + }; + + systemd.user = { + services."git-maintenance@" = { + Unit = { + Description = "Optimize Git repositories data"; + }; + Service = { + Type = "oneshot"; + ExecStart = ''"${lib.getExe config.programs.git.package}" --exec-path="${lib.getBin config.programs.git.package}/bin" -c credential.interactive=false -c core.askPass=true for-each-repo --config=maintenance.repo maintenance run --schedule=%i''; + LockPersonality = "yes"; + MemoryDenyWriteExecute = "yes"; + NoNewPrivileges = "yes"; + RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_VSOCK"; + RestrictNamespaces = "yes"; + RestrictRealtime = "yes"; + RestrictSUIDSGID = "yes"; + SystemCallArchitectures = "native"; + SystemCallFilter = "@system-service"; + }; + }; + timers = { + "git-maintenance@hourly" = { + Unit = { + Description = "Optimize Git repositories data"; + }; + Timer = { + OnCalendar = "*-*-* *:00:00"; + Persistent = true; + }; + Install = { + WantedBy = [ "timers.target" ]; + }; + }; + "git-maintenance@daily" = { + Unit = { + Description = "Optimize Git repositories data"; + }; + Timer = { + OnCalendar = "*-*-* 20:00:00"; + Persistent = true; + }; + Install = { + WantedBy = [ "timers.target" ]; + }; + }; + "git-maintenance@weekly" = { + Unit = { + Description = "Optimize Git repositories data"; + }; + Timer = { + OnCalendar = "Sun *-*-* 20:00:00"; + Persistent = true; + }; + Install = { + WantedBy = [ "timers.target" ]; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/base/home.nix b/modules/base/home.nix index 09bd480..3daf24f 100644 --- a/modules/base/home.nix +++ b/modules/base/home.nix @@ -1,12 +1,23 @@ { - flake.modules.homeManager.base = { - programs.home-manager.enable = true; + flake.modules = { + nixos.base = { + nixpkgs.config.allowUnFree = true; + home-manager = { + backupFileExtension = "bak"; + useUserPackages = true; + useGlobalPkgs = true; + }; + }; - services = { - home-manager.autoExpire = { - enable = true; - frequency = "weekly"; - store.cleanup = true; + homeManager.base = { + programs.home-manager.enable = true; + + services = { + home-manager.autoExpire = { + enable = true; + frequency = "weekly"; + store.cleanup = true; + }; }; }; }; diff --git a/modules/base/kitty.nix b/modules/base/kitty.nix new file mode 100644 index 0000000..810b609 --- /dev/null +++ b/modules/base/kitty.nix @@ -0,0 +1,49 @@ +{ + flake.modules = { + homeManager.cholli = + { pkgs, ... }: + { + catppuccin.kitty.enable = true; + + home.packages = [ + pkgs.kitty + pkgs.xfce.thunar + ]; + home.sessionVariables.TERMINAL = "kitty"; + + home.file.".config/Thunar/uca.xml".text = '' + + + + kitty + Open Kitty here + + 1726095927116900-1 + ${pkgs.kitty}/bin/kitty %f + Example for a custom action + + * + + + + + ''; + + programs.kitty = { + enable = true; + # themeFile = "tokyo_night_night"; + font = { + name = "FiraCode Nerd Font"; + size = 15; + }; + shellIntegration.enableFishIntegration = true; + settings = { + "background_opacity" = "0.90"; + "shell" = "fish"; + "confirm_os_window_close" = "0"; + }; + }; + + }; + }; +} diff --git a/modules/base/network/default.nix b/modules/base/network/default.nix index 2da7708..9e31b67 100644 --- a/modules/base/network/default.nix +++ b/modules/base/network/default.nix @@ -8,14 +8,12 @@ networkmanager = { enable = true; }; - - useDHCP = false; }; - systemd = { - services.NetworkManager-wait-online.enable = false; - network.wait-online.enable = false; - }; + # systemd = { + # services.NetworkManager-wait-online.enable = false; + # network.wait-online.enable = false; + # }; services.resolved = { enable = true; diff --git a/modules/base/starship.nix b/modules/base/starship.nix new file mode 100644 index 0000000..0a0b38e --- /dev/null +++ b/modules/base/starship.nix @@ -0,0 +1,57 @@ +{ + flake.modules.homeManager.cholli = + { ... }: + { + catppuccin.starship.enable = false; + programs = { + starship = { + enable = true; + enableTransience = true; + settings = { + character = { + error_symbol = "[ ](bold red)"; + }; + time = { + disabled = false; + time_format = "%T"; + utc_time_offset = "+2"; + }; + username = { + style_user = "#00de00"; + style_root = "red"; + format = "[$user]($style) "; + disabled = false; + show_always = true; + }; + hostname = { + ssh_only = false; + format = "@ [$hostname](bold yellow) "; + disabled = false; + }; + directory = { + home_symbol = "󰋞 ~"; + read_only_style = "197"; + read_only = "  "; + format = "at [$path]($style)[$read_only]($read_only_style) "; + }; + git_metrics = { + disabled = false; + added_style = "bold blue"; + format = "[+$added]($added_style)/[-$deleted]($deleted_style) "; + }; + git_status = { + format = "([$all_status$ahead_behind]($style) )"; + ahead = "[↑$count](bold green)"; + behind = "[↓$count](bold red)"; + diverged = "[↕↓$ahead_count↑$behind_count](red)"; + deleted = "[✘$count](red) "; + modified = "[!$count](yellow) "; + staged = "[+$count](green) "; + renamed = "[➜$count](green) "; + untracked = "[?$count](blue) "; + }; + }; + }; + }; + }; +} diff --git a/modules/base/system/default.nix b/modules/base/system/default.nix index b2b3327..dd2c164 100644 --- a/modules/base/system/default.nix +++ b/modules/base/system/default.nix @@ -40,6 +40,13 @@ ssh-to-age ]; + services.gnome.gnome-keyring.enable = true; + + services.dbus.packages = [ + pkgs.gnome-keyring + pkgs.gcr + ]; + sops = { defaultSopsFile = ../../../secrets/secrets.yaml; defaultSopsFormat = "yaml"; diff --git a/modules/base/system/fonts.nix b/modules/base/system/fonts.nix new file mode 100644 index 0000000..2ac798c --- /dev/null +++ b/modules/base/system/fonts.nix @@ -0,0 +1,22 @@ +{ + + flake.modules.nixos.base = + { pkgs, ... }: + { + environment.variables = { + # Enable icons in tooling since we have nerdfonts. + LOG_ICONS = "true"; + }; + + fonts.packages = with pkgs; [ + font-awesome + powerline-fonts + powerline-symbols + nerd-fonts.code-new-roman + nerd-fonts.fira-code + nerd-fonts.symbols-only + fira + ]; + + }; +} diff --git a/modules/base/system/gpg.nix b/modules/base/system/gpg.nix new file mode 100644 index 0000000..30898a7 --- /dev/null +++ b/modules/base/system/gpg.nix @@ -0,0 +1,61 @@ +{ + flake.modules = { + nixos.base = + { pkgs, ... }: + let + + reload-yubikey = pkgs.writeShellScriptBin "reload-yubikey" '' + ${pkgs.gnupg}/bin/gpg-connect-agent "scd serialno" "learn --force" /bye + ''; + in + { + services.pcscd.enable = true; + services.udev.packages = with pkgs; [ yubikey-personalization ]; + + environment.systemPackages = with pkgs; [ + cryptsetup + paperkey + gnupg + pinentry-curses + pinentry-qt + + yubikey-manager + yubioath-flutter + reload-yubikey + ]; + + programs = { + ssh.startAgent = false; + + gnupg.agent = { + enable = true; + enableSSHSupport = true; + enableExtraSocket = true; + }; + }; + + }; + + homeManager.base = + { inputs, pkgs, ... }: + let + gpgConf = "${inputs.gpg-base-conf}/gpg.conf"; + + gpgAgentConf = '' + enable-ssh-support + default-cache-ttl 60 + max-cache-ttl 120 + pinentry-program ${pkgs.pinentry-qt}/bin/pinentry-qt + ''; + in + { + home.file = { + ".gnupg/.keep".text = ""; + + ".gnupg/gpg.conf".source = gpgConf; + ".gnupg/gpg-agent.conf".text = gpgAgentConf; + ".gnupg/scdeamon.conf".text = "disable-ccid"; + }; + }; + }; +} diff --git a/modules/base/system/helix.nix b/modules/base/system/helix.nix index 0b7e4d3..1d801b1 100644 --- a/modules/base/system/helix.nix +++ b/modules/base/system/helix.nix @@ -18,7 +18,7 @@ }; - homeManager.base = + homeManager.cholli = { inputs, pkgs, ... }: let helix-pkg = inputs.helix.packages.${pkgs.system}.default; diff --git a/modules/base/system/locale.nix b/modules/base/system/locale.nix new file mode 100644 index 0000000..fc43f59 --- /dev/null +++ b/modules/base/system/locale.nix @@ -0,0 +1,27 @@ +{ + flake.modules.nixos.base = + { lib, ... }: + { + time.timeZone = "Europe/Berlin"; + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LANG = "en_US.UTF-8"; + LC_ALL = "en_US.UTF-8"; + LC_ADDRESS = "de_DE.UTF-8"; + LC_IDENTIFICATION = "de_DE.UTF-8"; + LC_MEASUREMENT = "de_DE.UTF-8"; + LC_MONETARY = "de_DE.UTF-8"; + LC_NAME = "de_DE.UTF-8"; + LC_NUMERIC = "de_DE.UTF-8"; + LC_PAPER = "de_DE.UTF-8"; + LC_TELEPHONE = "de_DE.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; + + console = { + keyMap = lib.mkForce "us"; + useXkbConfig = true; + }; + }; +} diff --git a/modules/base/system/nixdaemon.nix b/modules/base/system/nixdaemon.nix new file mode 100644 index 0000000..8eb56a9 --- /dev/null +++ b/modules/base/system/nixdaemon.nix @@ -0,0 +1,61 @@ +{ + flake.modules.nixos.base = + { + config, + inputs, + lib, + pkgs, + ... + }: + let + username = "cholli"; + in + { + environment.systemPackages = with pkgs; [ + nixfmt-rfc-style + nix-prefetch-git + + nix-index + nix-output-monitor + ]; + + programs.nh = { + enable = true; + package = inputs.nh-flake.packages.${pkgs.system}.nh; + flake = "/home/${username}/projects/config"; + }; + + nix = { + settings = + let + users = [ + "root" + username + ] + ++ lib.optional (builtins.hasAttr "native" config.services.gitea-actions-runner) "gitea-runner" + ++ lib.optional config.services.hydra.enable "hydra hydra-www hydra-evaluator hydra-queue-runner"; + in + { + experimental-features = "nix-command flakes"; + http-connections = 50; + warn-dirty = false; + log-lines = 50; + sandbox = "relaxed"; + auto-optimise-store = true; + trusted-users = users; + allowed-users = users; + allowed-uris = "github: https://github.com/ git+https://github.com/ gitlab: https://gitlab.com/ git+https://gitlab.com/"; + } + // (lib.optionalAttrs config.programs.direnv.enable { + keep-outputs = true; + keep-derivations = true; + }); + + gc = { + automatic = true; + dates = "daily"; + options = "--delete-older-than 7d"; + }; + }; + }; +} diff --git a/modules/desktop/addons/app-runner.nix b/modules/desktop/addons/app-runner.nix new file mode 100644 index 0000000..072ef30 --- /dev/null +++ b/modules/desktop/addons/app-runner.nix @@ -0,0 +1,9 @@ +{ + flake.modules.homeManager.desktop = + { pkgs, ... }: + { + home.packages = with pkgs; [ + fuzzel + ]; + }; +} diff --git a/modules/desktop/addons/firewatch.jpg b/modules/desktop/addons/firewatch.jpg new file mode 100644 index 0000000..107b180 Binary files /dev/null and b/modules/desktop/addons/firewatch.jpg differ diff --git a/modules/desktop/addons/hypridle.nix b/modules/desktop/addons/hypridle.nix new file mode 100644 index 0000000..7d7121c --- /dev/null +++ b/modules/desktop/addons/hypridle.nix @@ -0,0 +1,28 @@ +{ + flake.modules.homeManager.cholli = + { ... }: + { + services.hypridle = { + enable = true; + settings = { + general = { + after_sleep_cmd = "hyprctl dispatch dpms on"; + ignore_dbus_inhibit = false; + lock_cmd = "hyprlock-blur"; + }; + + listener = [ + { + timeout = 600; + on-timeout = "loginctl lock-session"; + } + { + timeout = 1200; + on-timeout = "hyprctl dispatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + ]; + }; + }; + }; +} diff --git a/modules/desktop/addons/hyprlock.nix b/modules/desktop/addons/hyprlock.nix new file mode 100644 index 0000000..3ceb547 --- /dev/null +++ b/modules/desktop/addons/hyprlock.nix @@ -0,0 +1,118 @@ +{ + flake.modules = { + nixos.desktop = + { pkgs, ... }: + let + hyprlock-blur = pkgs.writeShellScriptBin "hyprlock-blur" '' + ${pkgs.grim}/bin/grim -o DP-1 -l 0 /tmp/screenshot1.png & + ${pkgs.grim}/bin/grim -o HDMI-A-1 -l 0 /tmp/screenshot2.png & + wait && + hyprlock + ''; + in + { + security.pam.services.hyprlock = { + allowNullPassword = false; + startSession = false; + text = '' + auth include login + account include login + ''; + }; + + environment.systemPackages = [ hyprlock-blur ]; + + }; + + homeManager.cholli = + { inputs, pkgs, ... }: + let + hyprlock-package = inputs.hyprlock.packages.${pkgs.system}.hyprlock; + in + { + programs.hyprlock = { + enable = true; + package = hyprlock-package; + settings = { + # inspiration from https://github.com/justinmdickey/publicdots/blob/main/.config/hypr/hyprlock.conf + background = [ + { + monitor = "DP-1"; + path = "/tmp/screenshot1.png"; + + blur_passes = 1; # 0 disables blurring + blur_size = 7; + noise = 1.17e-2; + } + { + monitor = "HDMI-A-1"; + path = "/tmp/screenshot2.png"; + + blur_passes = 2; # 0 disables blurring + blur_size = 7; + noise = 1.17e-2; + } + ]; + + label = [ + { + monitor = "DP-1"; + text = "$TIME"; + color = "rgba(242, 243, 244, 0.75)"; + font_size = 95; + font_family = "JetBrains Mono"; + position = "0, 300"; + halign = "center"; + valign = "center"; + } + { + + monitor = "DP-1"; + text = ''cmd[update:1000] echo $(date +"%A, %B %d")''; + color = "rgba(242, 243, 244, 0.75)"; + font_size = 22; + font_family = "JetBrains Mono"; + position = "0, 200"; + halign = "center"; + valign = "center"; + + } + ]; + + image = { + monitor = "DP-1"; + path = "/home/cholli/Pictures/profile.png"; + + position = "0, 50"; + halign = "center"; + valign = "center"; + }; + + input-field = { + monitor = "DP-1"; + size = "200,50"; + outline_thickness = 2; + dots_size = 0.2; # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.35; # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true; + outer_color = "rgba(0, 0, 0, 0)"; + inner_color = "rgba(0, 0, 0, 0.2)"; + font_color = "rgb(111, 45, 104)"; + fade_on_empty = false; + rounding = -1; + check_color = "rgb(30, 107, 204)"; + placeholder_text = ''Input Password...''; + hide_input = false; + position = "0, -100"; + halign = "center"; + valign = "center"; + }; + + general = { + auth_method = "pam"; + }; + }; + }; + }; + }; +} diff --git a/modules/desktop/addons/hyprpanel.nix b/modules/desktop/addons/hyprpanel.nix new file mode 100644 index 0000000..ef6e5c5 --- /dev/null +++ b/modules/desktop/addons/hyprpanel.nix @@ -0,0 +1,494 @@ +{ + flake.modules.homeManager.cholli = + { + lib, + osConfig, + pkgs, + ... + }: + { + config = lib.mkIf osConfig.programs.hyprland.enable { + wayland.windowManager.hyprland.settings.exec-once = [ + "${pkgs.hyprpanel}/bin/hyprpanel" + ]; + + programs.hyprpanel = { + enable = true; + settings = { + menus.dashboard.powermenu.avatar.image = "/home/cholli/Pictures/profile.png"; + + bar = { + launcher.autoDetectIcon = true; + workspaces = { + show_icons = false; + show_numbered = true; + }; + layouts = { + "0" = { + "left" = [ + "dashboard" + "workspaces" + ]; + "middle" = [ + "windowtitle" + ]; + "right" = [ + "volume" + "bluetooth" + "cputemp" + "cpu" + "ram" + "systray" + "clock" + "notifications" + ]; + }; + "1" = { + "left" = [ + "workspaces" + ]; + "right" = [ + "clock" + ]; + }; + }; + customModules = { + ram = { + icon = " "; + labelType = "used/total"; + }; + cpu = { + icon = " "; + leftClick = "kitty --hold btop"; + }; + cpuTemp = { + sensor = "/sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon2/temp3_input"; + unit = "metric"; + showUnit = true; + + }; + }; + clock.format = "%a %b %d %H:%M:%S"; + notifications = { + show_total = true; + hideCountWhenZero = false; + }; + }; + + layouts = { + "0" = { + left = [ + "dashboard" + "workspaces" + ]; + middle = [ "windowtitle" ]; + right = [ + "volume" + "bluetooth" + "cputemp" + "cpu" + "ram" + "systray" + "clock" + "notifications" + ]; + }; + "1" = { + left = [ "workspaces" ]; + right = [ "clock" ]; + }; + }; + theme = { + bar = { + floating = true; + background = "#11111b"; + border.color = "#b4befe"; + buttons = { + background = "#242438"; + battery.background = "#242438"; + battery.border = "#f9e2af"; + battery.icon = "#242438"; + battery.icon_background = "#f9e2af"; + battery.text = "#f9e2af"; + bluetooth.background = "#242438"; + bluetooth.border = "#89dceb"; + bluetooth.icon = "#1e1e2e"; + bluetooth.icon_background = "#89dbeb"; + bluetooth.text = "#89dceb"; + borderColor = "#b4befe"; + clock.background = "#242438"; + clock.border = "#f5c2e7"; + clock.icon = "#232338"; + clock.icon_background = "#f5c2e7"; + clock.text = "#f5c2e7"; + dashboard.background = "#f9e2af"; + dashboard.border = "#f9e2af"; + dashboard.icon = "#1e1e2e"; + hover = "#45475a"; + icon = "#242438"; + icon_background = "#b4befe"; + media.background = "#242438"; + media.border = "#b4befe"; + media.icon = "#1e1e2e"; + media.icon_background = "#b4befe"; + media.text = "#b4befe"; + modules.cava.background = "#242438"; + modules.cava.border = "#94e2d5"; + modules.cava.icon = "#242438"; + modules.cava.icon_background = "#94e2d5"; + modules.cava.text = "#94e2d5"; + modules.cpu.background = "#242438"; + modules.cpu.border = "#f38ba8"; + modules.cpu.icon = "#181825"; + modules.cpu.icon_background = "#f38ba8"; + modules.cpu.text = "#f38ba8"; + modules.hypridle.background = "#242438"; + modules.hypridle.border = "#f5c2e7"; + modules.hypridle.icon = "#242438"; + modules.hypridle.icon_background = "#f5c2e7"; + modules.hypridle.text = "#f5c2e7"; + modules.hyprsunset.background = "#242438"; + modules.hyprsunset.border = "#fab387"; + modules.hyprsunset.icon = "#242438"; + modules.hyprsunset.icon_background = "#fab387"; + modules.hyprsunset.text = "#fab387"; + modules.kbLayout.background = "#242438"; + modules.kbLayout.border = "#89dceb"; + modules.kbLayout.icon = "#181825"; + modules.kbLayout.icon_background = "#89dceb"; + modules.kbLayout.text = "#89dceb"; + modules.microphone.background = "#242438"; + modules.microphone.border = "#a6e3a1"; + modules.microphone.icon = "#242438"; + modules.microphone.icon_background = "#a6e3a1"; + modules.microphone.text = "#a6e3a1"; + modules.netstat.background = "#242438"; + modules.netstat.border = "#a6e3a1"; + modules.netstat.icon = "#181825"; + modules.netstat.icon_background = "#a6e3a1"; + modules.netstat.text = "#a6e3a1"; + modules.power.background = "#242438"; + modules.power.border = "#f38ba8"; + modules.power.icon = "#181825"; + modules.power.icon_background = "#f38ba8"; + modules.ram.background = "#242438"; + modules.ram.border = "#f9e2af"; + modules.ram.icon = "#181825"; + modules.ram.icon_background = "#f9e2af"; + modules.ram.text = "#f9e2af"; + modules.storage.background = "#242438"; + modules.storage.border = "#f5c2e7"; + modules.storage.icon = "#181825"; + modules.storage.icon_background = "#f5c2e7"; + modules.storage.text = "#f5c2e7"; + modules.submap.background = "#242438"; + modules.submap.border = "#94e2d5"; + modules.submap.icon = "#181825"; + modules.submap.icon_background = "#94e2d5"; + modules.submap.text = "#94e2d5"; + modules.updates.background = "#242438"; + modules.updates.border = "#cba6f7"; + modules.updates.icon = "#181825"; + modules.updates.icon_background = "#cba6f7"; + modules.updates.text = "#cba6f7"; + modules.weather.background = "#242438"; + modules.weather.border = "#b4befe"; + modules.weather.icon = "#242438"; + modules.weather.icon_background = "#b4befe"; + modules.weather.text = "#b4befe"; + modules.worldclock.background = "#242438"; + modules.worldclock.border = "#f5c2e7"; + modules.worldclock.icon = "#242438"; + modules.worldclock.icon_background = "#f5c2e7"; + modules.worldclock.text = "#f5c2e7"; + network.background = "#242438"; + network.border = "#cba6f7"; + network.icon = "#242438"; + network.icon_background = "#caa6f7"; + network.text = "#cba6f7"; + notifications.background = "#242438"; + notifications.border = "#b4befe"; + notifications.icon = "#1e1e2e"; + notifications.icon_background = "#b4befe"; + notifications.total = "#b4befe"; + style = "split"; + systray.background = "#242438"; + systray.border = "#b4befe"; + systray.customIcon = "#cdd6f4"; + text = "#b4befe"; + volume.background = "#242438"; + volume.border = "#eba0ac"; + volume.icon = "#242438"; + volume.icon_background = "#eba0ac"; + volume.text = "#eba0ac"; + windowtitle.background = "#242438"; + windowtitle.border = "#f5c2e7"; + windowtitle.icon = "#1e1e2e"; + windowtitle.icon_background = "#f5c2e7"; + windowtitle.text = "#f5c2e7"; + workspaces.active = "#f5c2e7"; + workspaces.available = "#89dceb"; + workspaces.background = "#242438"; + workspaces.border = "#f5c2e7"; + workspaces.hover = "#f5c2e7"; + workspaces.numbered_active_highlighted_text_color = "#181825"; + workspaces.numbered_active_underline_color = "#f5c2e7"; + workspaces.occupied = "#f2cdcd"; + y_margins = "0.2em"; + }; + menus = { + background = "#11111b"; + border.color = "#313244"; + buttons.active = "#f5c2e6"; + buttons.default = "#b4befe"; + buttons.disabled = "#585b71"; + buttons.text = "#181824"; + cards = "#1e1e2e"; + check_radio_button.active = "#b4beff"; + check_radio_button.background = "#45475a"; + dimtext = "#585b70"; + dropdownmenu.background = "#11111b"; + dropdownmenu.divider = "#1e1e2e"; + dropdownmenu.text = "#cdd6f4"; + feinttext = "#313244"; + iconbuttons.active = "#b4beff"; + iconbuttons.passive = "#cdd6f3"; + icons.active = "#b4befe"; + icons.passive = "#585b70"; + label = "#b4befe"; + listitems.active = "#b4befd"; + listitems.passive = "#cdd6f4"; + menu = { + battery.background.color = "#11111b"; + battery.border.color = "#313244"; + battery.card.color = "#1e1e2e"; + battery.icons.active = "#f9e2af"; + battery.icons.passive = "#9399b2"; + battery.label.color = "#f9e2af"; + battery.listitems.active = "#f9e2af"; + battery.listitems.passive = "#cdd6f3"; + battery.slider.background = "#585b71"; + battery.slider.backgroundhover = "#45475a"; + battery.slider.primary = "#f9e2af"; + battery.slider.puck = "#6c7086"; + battery.text = "#cdd6f4"; + bluetooth.background.color = "#11111b"; + bluetooth.border.color = "#313244"; + bluetooth.card.color = "#1e1e2e"; + bluetooth.iconbutton.active = "#89dceb"; + bluetooth.iconbutton.passive = "#cdd6f4"; + bluetooth.icons.active = "#89dceb"; + bluetooth.icons.passive = "#9399b2"; + bluetooth.label.color = "#89dceb"; + bluetooth.listitems.active = "#89dcea"; + bluetooth.listitems.passive = "#cdd6f4"; + bluetooth.scroller.color = "#89dceb"; + bluetooth.status = "#6c7086"; + bluetooth.switch.disabled = "#313245"; + bluetooth.switch.enabled = "#89dceb"; + bluetooth.switch.puck = "#454759"; + bluetooth.switch_divider = "#45475a"; + bluetooth.text = "#cdd6f4"; + clock.background.color = "#11111b"; + clock.border.color = "#313244"; + clock.calendar.contextdays = "#585b70"; + clock.calendar.currentday = "#f5c2e7"; + clock.calendar.days = "#cdd6f4"; + clock.calendar.paginator = "#f5c2e6"; + clock.calendar.weekdays = "#f5c2e7"; + clock.calendar.yearmonth = "#94e2d5"; + clock.card.color = "#1e1e2e"; + clock.text = "#cdd6f4"; + clock.time.time = "#f5c2e7"; + clock.time.timeperiod = "#94e2d5"; + clock.weather.hourly.icon = "#f5c2e7"; + clock.weather.hourly.temperature = "#f5c2e7"; + clock.weather.hourly.time = "#f5c2e7"; + clock.weather.icon = "#f5c2e7"; + clock.weather.stats = "#f5c2e7"; + clock.weather.status = "#94e2d5"; + clock.weather.temperature = "#cdd6f4"; + clock.weather.thermometer.cold = "#89b4fa"; + clock.weather.thermometer.extremelycold = "#89dceb"; + clock.weather.thermometer.extremelyhot = "#f38ba8"; + clock.weather.thermometer.hot = "#fab387"; + clock.weather.thermometer.moderate = "#b4befe"; + dashboard.background.color = "#11111b"; + dashboard.border.color = "#313244"; + dashboard.card.color = "#1e1e2e"; + dashboard.controls.bluetooth.background = "#89dceb"; + dashboard.controls.bluetooth.text = "#181824"; + dashboard.controls.disabled = "#585b70"; + dashboard.controls.input.background = "#f5c2e7"; + dashboard.controls.input.text = "#181824"; + dashboard.controls.notifications.background = "#f9e2af"; + dashboard.controls.notifications.text = "#181824"; + dashboard.controls.volume.background = "#eba0ac"; + dashboard.controls.volume.text = "#181824"; + dashboard.controls.wifi.background = "#cba6f7"; + dashboard.controls.wifi.text = "#181824"; + dashboard.directories.left.bottom.color = "#eba0ac"; + dashboard.directories.left.middle.color = "#f9e2af"; + dashboard.directories.left.top.color = "#f5c2e7"; + dashboard.directories.right.bottom.color = "#b4befe"; + dashboard.directories.right.middle.color = "#cba6f7"; + dashboard.directories.right.top.color = "#94e2d5"; + dashboard.monitors.bar_background = "#45475a"; + dashboard.monitors.cpu.bar = "#eba0ad"; + dashboard.monitors.cpu.icon = "#eba0ac"; + dashboard.monitors.cpu.label = "#eba0ac"; + dashboard.monitors.disk.bar = "#f5c2e8"; + dashboard.monitors.disk.icon = "#f5c2e7"; + dashboard.monitors.disk.label = "#f5c2e7"; + dashboard.monitors.gpu.bar = "#a6e3a2"; + dashboard.monitors.gpu.icon = "#a6e3a1"; + dashboard.monitors.gpu.label = "#a6e3a1"; + dashboard.monitors.ram.bar = "#f9e2ae"; + dashboard.monitors.ram.icon = "#f9e2af"; + dashboard.monitors.ram.label = "#f9e2af"; + dashboard.powermenu.confirmation.background = "#11111b"; + dashboard.powermenu.confirmation.body = "#cdd6f4"; + dashboard.powermenu.confirmation.border = "#313244"; + dashboard.powermenu.confirmation.button_text = "#11111a"; + dashboard.powermenu.confirmation.card = "#1e1e2e"; + dashboard.powermenu.confirmation.confirm = "#a6e3a1"; + dashboard.powermenu.confirmation.deny = "#f38ba8"; + dashboard.powermenu.confirmation.label = "#b4befe"; + dashboard.powermenu.logout = "#a6e3a1"; + dashboard.powermenu.restart = "#fab387"; + dashboard.powermenu.shutdown = "#f38ba8"; + dashboard.powermenu.sleep = "#89dceb"; + dashboard.profile.name = "#f5c2e7"; + dashboard.shortcuts.background = "#b4befe"; + dashboard.shortcuts.recording = "#a6e3a1"; + dashboard.shortcuts.text = "#181824"; + media.album = "#f5c2e8"; + media.artist = "#94e2d6"; + media.background.color = "#11111b"; + media.border.color = "#313244"; + media.buttons.background = "#b4beff"; + media.buttons.enabled = "#94e2d4"; + media.buttons.inactive = "#585b70"; + media.buttons.text = "#11111b"; + media.card.color = "#1e1e2e"; + media.slider.background = "#585b71"; + media.slider.backgroundhover = "#45475a"; + media.slider.primary = "#f5c2e7"; + media.slider.puck = "#6c7086"; + media.song = "#b4beff"; + media.timestamp = "#cdd6f4"; + network.background.color = "#11111b"; + network.border.color = "#313244"; + network.card.color = "#1e1e2e"; + network.iconbuttons.active = "#cba6f7"; + network.iconbuttons.passive = "#cdd6f4"; + network.icons.active = "#cba6f7"; + network.icons.passive = "#9399b2"; + network.label.color = "#cba6f7"; + network.listitems.active = "#cba6f6"; + network.listitems.passive = "#cdd6f4"; + network.scroller.color = "#cba6f7"; + network.status.color = "#6c7086"; + network.switch.disabled = "#313245"; + network.switch.enabled = "#cba6f7"; + network.switch.puck = "#454759"; + network.text = "#cdd6f4"; + notifications.background = "#11111b"; + notifications.border = "#313244"; + notifications.card = "#1e1e2e"; + notifications.clear = "#f38ba8"; + notifications.label = "#b4befe"; + notifications.no_notifications_label = "#313244"; + notifications.pager.background = "#11111b"; + notifications.pager.button = "#b4befe"; + notifications.pager.label = "#9399b2"; + notifications.scrollbar.color = "#b4befe"; + notifications.switch.disabled = "#313245"; + notifications.switch.enabled = "#b4befe"; + notifications.switch.puck = "#454759"; + notifications.switch_divider = "#45475a"; + power.background.color = "#11111b"; + power.border.color = "#313244"; + power.buttons.logout.background = "#1e1e2e"; + power.buttons.logout.icon = "#181824"; + power.buttons.logout.icon_background = "#a6e3a1"; + power.buttons.logout.text = "#a6e3a1"; + power.buttons.restart.background = "#1e1e2e"; + power.buttons.restart.icon = "#181824"; + power.buttons.restart.icon_background = "#fab387"; + power.buttons.restart.text = "#fab387"; + power.buttons.shutdown.background = "#1e1e2e"; + power.buttons.shutdown.icon = "#181824"; + power.buttons.shutdown.icon_background = "#f38ba7"; + power.buttons.shutdown.text = "#f38ba8"; + power.buttons.sleep.background = "#1e1e2e"; + power.buttons.sleep.icon = "#181824"; + power.buttons.sleep.icon_background = "#89dceb"; + power.buttons.sleep.text = "#89dceb"; + systray.dropdownmenu.background = "#11111b"; + systray.dropdownmenu.divider = "#1e1e2e"; + systray.dropdownmenu.text = "#cdd6f4"; + volume.audio_slider.background = "#585b71"; + volume.audio_slider.backgroundhover = "#45475a"; + volume.audio_slider.primary = "#eba0ac"; + volume.audio_slider.puck = "#585b70"; + volume.background.color = "#11111b"; + volume.border.color = "#313244"; + volume.card.color = "#1e1e2e"; + volume.iconbutton.active = "#eba0ac"; + volume.iconbutton.passive = "#cdd6f4"; + volume.icons.active = "#eba0ac"; + volume.icons.passive = "#9399b2"; + volume.input_slider.background = "#585b71"; + volume.input_slider.backgroundhover = "#45475a"; + volume.input_slider.primary = "#eba0ac"; + volume.input_slider.puck = "#585b70"; + volume.label.color = "#eba0ac"; + volume.listitems.active = "#eba0ab"; + volume.listitems.passive = "#cdd6f4"; + volume.text = "#cdd6f4"; + }; + popover.background = "#181824"; + popover.border = "#181824"; + popover.text = "#b4befe"; + progressbar.background = "#45475a"; + progressbar.foreground = "#b4befe"; + slider.background = "#585b71"; + slider.backgroundhover = "#45475a"; + slider.primary = "#b4befe"; + slider.puck = "#6c7086"; + switch.disabled = "#313245"; + switch.enabled = "#b4befe"; + switch.puck = "#454759"; + text = "#cdd6f4"; + tooltip.background = "#11111b"; + tooltip.text = "#cdd6f4"; + }; + outer_spacing = "0.0em"; + transparent = true; + + }; + notification.actions.background = "#b4befd"; + notification.actions.text = "#181825"; + notification.background = "#181826"; + notification.border = "#313243"; + notification.close_button.background = "#f38ba7"; + notification.close_button.label = "#11111b"; + notification.label = "#b4befe"; + notification.labelicon = "#b4befe"; + notification.text = "#cdd6f4"; + notification.time = "#7f849b"; + osd.bar_color = "#b4beff"; + osd.bar_container = "#11111b"; + osd.bar_empty_color = "#313244"; + osd.bar_overflow_color = "#f38ba7"; + osd.icon = "#11111b"; + osd.icon_container = "#b4beff"; + osd.label = "#b4beff"; + + }; + }; + }; + }; + }; +} diff --git a/modules/desktop/addons/hyprpaper.nix b/modules/desktop/addons/hyprpaper.nix new file mode 100644 index 0000000..737eef8 --- /dev/null +++ b/modules/desktop/addons/hyprpaper.nix @@ -0,0 +1,26 @@ +{ + flake.modules.homeManager.cholli = + { ... }: + let + picture-path = "/home/cholli/Pictures/firewatch.jpg"; + in + { + home.file = { + # https://www.reddit.com/r/WidescreenWallpaper/comments/13hib3t/purple_firewatch_3840x1620/ + "Pictures/firewatch.jpg".source = ./firewatch.jpg; + }; + + wayland.windowManager.hyprland.settings.exec-once = [ + ''hyprctl hyprpaper wallpaper "DP-1,${picture-path}"'' + ]; + + services.hyprpaper = { + enable = true; + settings = { + preload = [ picture-path ]; + wallpaper = "DP-1,${picture-path}"; + }; + }; + + }; +} diff --git a/modules/desktop/addons/waybar.nix b/modules/desktop/addons/waybar.nix new file mode 100644 index 0000000..0db3279 --- /dev/null +++ b/modules/desktop/addons/waybar.nix @@ -0,0 +1,3 @@ +{ + +} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix new file mode 100644 index 0000000..7e053f0 --- /dev/null +++ b/modules/desktop/default.nix @@ -0,0 +1,62 @@ +{ + flake.modules = { + nixos.desktop = + { + config, + inputs, + lib, + pkgs, + ... + }: + let + zenbrowser = inputs.zen-browser.packages."${pkgs.system}".default; + in + + { + environment = { + systemPackages = [ + zenbrowser + ]; + + sessionVariables = { + DEFAULT_BROWSER = "${zenbrowser}/bin/zen-beta"; + BROWSER = "zen-beta"; + }; + + etc = lib.mkIf config.programs._1password.enable { + "1password/custom_allowed_browsers" = { + text = '' + zen + ''; + mode = "0755"; + }; + }; + }; + }; + + homeManager.cholli = + { pkgs, osConfig, ... }: + { + dconf = { + settings."org/gnome/desktop/interface".color-scheme = "prefer-dark"; + }; + + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + }; + + # qt = { + # enable = true; + # platformTheme.name = "gnome"; + # style.name = "adwaita-dark"; + # }; + + systemd.user.sessionVariables = osConfig.home-manager.users.cholli.home.sessionVariables; + + }; + }; +} diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix new file mode 100644 index 0000000..501d408 --- /dev/null +++ b/modules/desktop/hyprland.nix @@ -0,0 +1,345 @@ +{ + flake.modules = { + nixos.hyprland = + { + config, + inputs, + pkgs, + ... + }: + let + hyprland-package = inputs.hyprland.packages.${pkgs.system}.hyprland; + + focus-1password = pkgs.writeShellScriptBin "focus-or-open-1pass" '' + running=$(hyprctl -j clients | jq -r '.[] | select(.class == "1password") | .workspace.id') + + if [[ $running != "" ]]; then + hyprctl dispatch workspace $running + else + # always open on w/space 4 + hyprctl dispatch workspace 9 + ELECTRON_OZONE_PLATFORM_HINT=x11 1password& + fi + ''; + in + { + environment.systemPackages = + with pkgs; + [ + # Auth Agent + hyprpolkitagent + + # Notification daemon + libnotify + + # Wayland Utilities + wlr-randr + + # Clipboard Stuff + wl-clipboard + xclip + clipnotify + # clipsync + + # Screenshot Utility + grimblast + + # File Manager + xfce.thunar + + # clean sddm theme + elegant-sddm + + # json cli parser for bash script to focus 1password + jq + + hyprpanel + + ##### + xdg-dbus-proxy + ] + ++ lib.optional config.programs._1password.enable focus-1password; + + programs = { + hyprland = { + enable = true; + package = hyprland-package; + portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland; + withUWSM = true; + }; + }; + + xdg = { + autostart.enable = true; + portal = { + enable = true; + extraPortals = [ + pkgs.xdg-desktop-portal + pkgs.xdg-desktop-portal-gtk + ]; + xdgOpenUsePortal = true; + + config = { + common = { + default = [ "*" ]; + "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; + }; + hyprland = { + default = [ + "hyprland" + "gtk" + ]; + "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; + "org.freedesktop.impl.portal.OpenURI" = [ "gtk" ]; + }; + }; + }; + }; + + security.pam.services.gdm.enableGnomeKeyring = true; + services.displayManager.gdm = { + enable = true; + wayland = true; + }; + + environment.sessionVariables = { + NIXOS_OZONE_WL = "1"; # Hint electron apps to use wayland + ELECTRON_OZONE_PLATFORM_HINT = "auto"; + + XDG_SESSION_TYPE = "wayland"; + + QT_AUTO_SCREEN_SCALE_FACTOR = "1"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + QT_QPA_PLATFORM = "wayland;xcb"; + }; + + }; + + homeManager.cholli = + { + inputs, + lib, + pkgs, + osConfig, + ... + }: + let + hyprland-package = inputs.hyprland.packages.${pkgs.system}.hyprland; + in + { + config = lib.mkIf osConfig.programs.hyprland.enable { + wayland.windowManager.hyprland = { + enable = true; + package = hyprland-package; + plugins = [ inputs.hy3.packages.${pkgs.system}.hy3 ]; + systemd.variables = [ "--all" ]; + settings = { + "$mod" = "SUPER"; + + exec-once = [ + "systemctl --user start hyprpolkitagent" + + "[workspace 1 silent] zen-beta" + "[workspace 2 silent] steam" + "[workspace 7 silent] obsidian" + "[workspace 8 silent] discord" + "[workspace 9 silent] ELECTRON_OZONE_PLATFORM_HINT=x11 1password" # fix for promts not showing up anymore + "${pkgs.xorg.xhost}/bin/xhost +" + + "${lib.getExe pkgs.xorg.xrandr} --output DP-1 --primary" + ]; + + windowrulev2 = [ + #steam is a bit wierd, since it opens in multiple phases, so just move the last window to the workspace + "workspace 2 silent, class:^(steam)$, title:^(Steam)" + + "workspace 7 silent, class:^(com.obsproject.Studio)$" + "workspace 8 silent, class:^(steam)$, title:^(Friends List)" + "workspace 8 silent, class:^(discord)$, title:^(Discord)" + ]; + + monitor = lib.mkIf (osConfig.networking.hostName == "yggdrasil") [ + #Ultrawide + "DP-1,3440x1440@144, 0x0, 1" + #Vertical + "HDMI-A-1, 1920x1080@144, auto-right, 1, transform, 1" + ]; + + workspace = lib.mkIf (osConfig.networking.hostName == "yggdrasil") [ + "1, monitor:DP-1" + "2, monitor:DP-1" + "3, monitor:DP-1" + "4, monitor:DP-1" + "5, monitor:DP-1" + "6, monitor:DP-1" + "7, monitor:HDMI-A-1" + "8, monitor:HDMI-A-1" + "9, monitor:HDMI-A-1" + ]; + + general = { + layout = "hy3"; + gaps_in = 5; + gaps_out = 5; + border_size = 1; + "col.active_border" = "rgba(88888888)"; + "col.inactive_border" = "rgba(00000088)"; + + allow_tearing = true; + resize_on_border = true; + }; + + misc = { + # hyprchan + force_default_wallpaper = 2; + # focus new windows that want to be focused + focus_on_activate = true; + }; + + decoration = { + rounding = 16; + blur = { + enabled = true; + brightness = 1.0; + contrast = 1.0; + noise = 1.0e-2; + + vibrancy = 0.2; + vibrancy_darkness = 0.5; + + passes = 4; + size = 7; + + popups = true; + popups_ignorealpha = 0.2; + }; + + shadow = { + enabled = true; + range = 100; + render_power = 2; + ignore_window = true; + color = "rgba(00000055)"; + offset = "0 15"; + scale = 0.97; + }; + + }; + + animations = { + enabled = true; + animation = [ + "border, 1, 2, default" + "fade, 1, 4, default" + "windows, 1, 3, default, popin 80%" + "workspaces, 1, 2, default, slide" + ]; + }; + + bind = [ + # compositor commands + "$mod SHIFT, R, exec, hyprctl reload" + "$mod SHIFT, Q, killactive," + "$mod SHIFT, E, exec, pkill Hyprland" + "$mod CTRL, l, exec, hyprlock-blur" + + "$mod, F, fullscreen," + "$mod, G, togglegroup," + "$mod SHIFT, N, changegroupactive, f" + "$mod SHIFT, P, changegroupactive, b" + "$mod, R, togglesplit," + "$mod, T, togglefloating," + "$mod ALT, ,resizeactive," + + "$mod CTRL, left, movecurrentworkspacetomonitor, l" + "$mod CTRL, right, movecurrentworkspacetomonitor, r" + + # move focus + "$mod, h, hy3:movefocus, l" + "$mod, j, hy3:movefocus, d" + "$mod, k, hy3:movefocus, u" + "$mod, l, hy3:movefocus, r" + "$mod, left, hy3:movefocus, l" + "$mod, down, hy3:movefocus, d" + "$mod, up, hy3:movefocus, u" + "$mod, right, hy3:movefocus, r" + + # move focus + "$mod SHIFT, h, hy3:movewindow, l, once" + "$mod SHIFT, j, hy3:movewindow, d, once" + "$mod SHIFT, k, hy3:movewindow, u, once" + "$mod SHIFT, l, hy3:movewindow, r, once" + "$mod SHIFT, left, hy3:movewindow, l, once" + "$mod SHIFT, down, hy3:movewindow, d, once" + "$mod SHIFT, up, hy3:movewindow, u, once" + "$mod SHIFT, right, hy3:movewindow, r, once" + + #run important programs + "$mod, Return, exec, kitty" + "$mod, D, exec, rofi -show drun" + "$mod, P, exec, focus-or-open-1pass" + # "$mod, D, exec, rofi -show combi" + + #screenshot + ", Print, exec, grimblast copy area" + ] + ++ ( + # workspaces + # binds $mod + [shift +] {1..9} to [move to] workspace {1..9} + builtins.concatLists ( + builtins.genList ( + i: + let + ws = i + 1; + in + [ + "$mod, code:1${toString i}, workspace, ${toString ws}" + "$mod SHIFT, code:1${toString i}, hy3:movetoworkspace, ${toString ws}" + ] + ) 9 + ) + ); + + # mouse movements + bindm = [ + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + "$mod ALT, mouse:272, resizewindow" + ]; + + bindl = [ + # volume + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ]; + + bindle = [ + # volume + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%-" + ]; + + input = { + kb_layout = "us"; + + # focus change on cursor move + follow_mouse = 2; + force_no_accel = 1; + accel_profile = "flat"; + }; + + plugin = { + hy3 = { + autotile = { + enable = true; + trigger_width = 800; + trigger_height = 500; + }; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/desktop/niri.nix b/modules/desktop/niri.nix new file mode 100644 index 0000000..a0d81f3 --- /dev/null +++ b/modules/desktop/niri.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.niri = { ... }: { }; +} diff --git a/modules/dev/devenv.nix b/modules/dev/devenv.nix new file mode 100644 index 0000000..edca6dc --- /dev/null +++ b/modules/dev/devenv.nix @@ -0,0 +1,9 @@ +{ + flake.modules.nixos.dev = + { inputs, pkgs, ... }: + { + environment.systemPackages = [ + inputs.devenv.packages.${pkgs.system}.devenv + ]; + }; +} diff --git a/modules/dev/direnv.nix b/modules/dev/direnv.nix new file mode 100644 index 0000000..9e1189b --- /dev/null +++ b/modules/dev/direnv.nix @@ -0,0 +1,20 @@ +{ + flake.modules = { + nixos.dev = + { ... }: + { + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; + }; + homeManager.dev = + { ... }: + { + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; + }; + }; +} diff --git a/modules/dev/gh.nix b/modules/dev/gh.nix new file mode 100644 index 0000000..a6dcb1e --- /dev/null +++ b/modules/dev/gh.nix @@ -0,0 +1,64 @@ +{ + flake.modules = { + homeManager.dev = + { pkgs, ... }: + { + programs = { + gh-dash = { + enable = true; + settings = { + prSections = [ + { + title = "To review"; + filters = "repo:NixOS/nixpkgs is:open draft:false status:success"; + } + { + title = "1st contribution"; + filters = ''repo:NixOS/nixpkgs is:open draft:false label:"12. first-time contribution"''; + } + { + title = "1st approval"; + filters = ''repo:NixOS/nixpkgs is:open draft:false status:success label:"12.approvals: 1"''; + } + { + title = "From r-ryantm only"; + filters = ''repo:NixOS/nixpkgs is:open draft:false status:success base:master -label:"1.severity: mass-rebuild" -label:"1.severity: mass-darwin-rebuild" author:r-ryantm''; + } + { + title = "My PRs"; + filters = "is:open author:@me"; + } + { + title = "Needs my review"; + filters = "is:open review-requested:@me"; + } + { + title = "Involved"; + filters = "is:open involves:@me -author:@me"; + } + ]; + defaults = { + prsLimit = 25; + issuesLimit = 10; + view = "prs"; + preview = { + open = false; + width = 100; + }; + refetchIntervalMinutes = 10; + }; + theme.ui.table.showSeparator = false; + }; + }; + + gh = { + enable = true; + extensions = [ + pkgs.gh-dash + pkgs.gh-copilot + ]; + }; + }; + }; + }; +} diff --git a/modules/flake-parts/formatter.nix b/modules/flake-parts/formatter.nix new file mode 100644 index 0000000..b503808 --- /dev/null +++ b/modules/flake-parts/formatter.nix @@ -0,0 +1,50 @@ +{ + inputs, + lib, + ... +}: +{ + imports = [ + inputs.treefmt-nix.flakeModule + inputs.git-hooks.flakeModule + ]; + + perSystem = + { self', ... }: + { + treefmt = { + projectRootFile = "flake.nix"; + programs = { + deadnix.enable = true; + jsonfmt.enable = true; + nixfmt.enable = true; + prettier.enable = true; + shfmt.enable = true; + statix.enable = true; + yamlfmt.enable = true; + }; + settings = { + on-unmatched = "fatal"; + global.excludes = [ + "*.envrc" + ".editorconfig" + "*.directory" + "*.face" + "*.fish" + "*.png" + "*.toml" + "*.svg" + "*.xml" + "*/.gitignore" + "_to_migrate/*" + "LICENSE" + ]; + }; + }; + + pre-commit.settings.hooks.nix-fmt = { + enable = true; + entry = lib.getExe self'.formatter; + }; + }; +} diff --git a/modules/games/communication.nix b/modules/games/communication.nix new file mode 100644 index 0000000..3ef9199 --- /dev/null +++ b/modules/games/communication.nix @@ -0,0 +1,18 @@ +{ + flake.modules.nixos.games = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + discord + teamspeak6-client + ]; + + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-move-transition + ]; + }; + }; +} diff --git a/modules/games/steam.nix b/modules/games/steam.nix new file mode 100644 index 0000000..019b105 --- /dev/null +++ b/modules/games/steam.nix @@ -0,0 +1,16 @@ +{ + flake.modules.nixos.games = + { pkgs, ... }: + { + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + extraCompatPackages = with pkgs; [ proton-ge-bin ]; + }; + + environment.systemPackages = with pkgs; [ + protontricks + ]; + }; +} diff --git a/modules/games/various-games.nix b/modules/games/various-games.nix new file mode 100644 index 0000000..7f542e7 --- /dev/null +++ b/modules/games/various-games.nix @@ -0,0 +1,10 @@ +{ + flake.modules.nixos.games = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + prismlauncher + starsector + ]; + }; +} diff --git a/modules/hosts/yggdrasil/default.nix b/modules/hosts/yggdrasil/default.nix index 74a0069..d08d755 100644 --- a/modules/hosts/yggdrasil/default.nix +++ b/modules/hosts/yggdrasil/default.nix @@ -8,11 +8,45 @@ in flake.modules.nixos."hosts/yggdrasil" = { lib, pkgs, ... }: { + nixpkgs.config.allowUnfree = true; + + environment.systemPackages = with pkgs; [ + teamviewer + teams-for-linux + + pyfa + obsidian + diebahn + + path-of-building + ]; + + services.teamviewer.enable = true; + environment.pathsToLink = [ "/libexec" ]; + + programs.ssh.extraConfig = '' + AddressFamily inet + ''; + imports = with config.flake.modules.nixos; [ # System modules base + dev + desktop + games + + # hardware + audio + bluetooth + amdgpu + + # dektops + hyprland + + # apps + _1password # Users cholli @@ -22,12 +56,36 @@ in home-manager.users.cholli = { imports = with config.flake.modules.homeManager; [ base + dev + + # Activate all user based config + cholli ]; }; } ]; + nix = { + distributedBuilds = true; + settings.builders-use-substitutes = true; + buildMachines = [ + { + hostName = "nixberry"; + sshUser = "remotebuild"; + sshKey = "/root/.ssh/remotebuild"; + systems = [ "aarch64-linux" ]; + protocol = "ssh-ng"; + + supportedFeatures = [ + "nixos-test" + "big-parallel" + "kvm" + ]; + } + ]; + }; + boot = { kernelPackages = pkgs.linuxPackages_latest; @@ -69,6 +127,16 @@ in device = "/dev/disk/by-uuid/c3c1dec1-7716-4c37-a3f2-bb60f9af84fd"; fsType = "ext4"; }; + + "/var/lib/bluetooth" = { + device = "/persist/var/lib/bluetooth"; + options = [ + "bind" + "noauto" + "x-systemd.automount" + ]; + noCheck = true; + }; }; swapDevices = [ diff --git a/modules/server/acme.nix b/modules/server/acme.nix new file mode 100644 index 0000000..23b47fa --- /dev/null +++ b/modules/server/acme.nix @@ -0,0 +1,60 @@ +{ + flake.modules.nixos.server = + { + config, + lib, + ... + }: + let + sopsFile = ../../secrets/secrets-loptland.yaml; + domainname = "christophhollizeck.dev"; + in + { + sops = { + secrets = { + "netcup/customer_number" = { + inherit sopsFile; + }; + + "netcup/api/key" = { + inherit sopsFile; + }; + + "netcup/api/password" = { + inherit sopsFile; + }; + }; + + templates = { + "netcup.env" = { + content = '' + NETCUP_CUSTOMER_NUMBER=${config.sops.placeholder."netcup/customer_number"} + NETCUP_API_KEY=${config.sops.placeholder."netcup/api/key"} + NETCUP_API_PASSWORD=${config.sops.placeholder."netcup/api/password"} + NETCUP_PROPAGATION_TIMEOUT=1200 + ''; + }; + }; + + }; + + security.acme = { + acceptTerms = true; + defaults = { + inherit (config.flake.meta.users.cholli) email; + + group = lib.optional config.services.nginx.enable "nginx"; + reloadServices = lib.optional config.services.nginx.enable "nginx.service"; + + dnsProvider = "netcup"; + environmentFile = config.sops.templates."netcup.env".path; + }; + + certs."${domainname}" = { + dnsResolver = "1.1.1.1:53"; + extraDomainNames = [ "*.${domainname}" ]; + }; + }; + + }; +} diff --git a/modules/server/factorio-server.nix b/modules/server/factorio-server.nix new file mode 100644 index 0000000..3339e4a --- /dev/null +++ b/modules/server/factorio-server.nix @@ -0,0 +1,63 @@ +{ + flake.modules.nixos.factorio-server = + { config, ... }: + let + sopsFile = ../../secrets/secrets-loptland.yaml; + in + { + sops = { + secrets = { + "factorio/token" = { + restartUnits = [ "factorio.service" ]; + inherit sopsFile; + }; + "factorio/username" = { + restartUnits = [ "factorio.service" ]; + inherit sopsFile; + }; + "factorio/game_password" = { + restartUnits = [ "factorio.service" ]; + inherit sopsFile; + }; + }; + templates."extraSettingsFile.json".content = '' + { + "name": "Pyanodons Holli", + "description": "Trying to run a factorio-headless-server on my nix system", + "tags": ["vanilla"], + "max_players": 10, + "game_password": "${config.sops.placeholder."factorio/game_password"}", + "allow_commands": "admins-only", + "autosave_slots": 5, + "ignore_player_limit_for_returning_players": true, + "username" : "${config.sops.placeholder."factorio/username"}", + "token": "${config.sops.placeholder."factorio/token"}" + } + ''; + templates."extraSettingsFile.json".mode = "0444"; + }; + + systemd.tmpfiles.rules = [ + "Z /var/lib/factorio/mods 770 65400 65400 - -" + "Z /var/lib/factorio/saves 770 65400 65400 - -" + ]; + + services.factorio = { + enable = true; + openFirewall = true; + public = true; + lan = true; + nonBlockingSaving = true; + autosave-interval = 5; + saveName = "Pyanodons"; + loadLatestSave = true; + admins = [ + "daholli" + "galbrain" + "geigeabc" + ]; + extraSettingsFile = config.sops.templates."extraSettingsFile.json".path; + }; + + }; +} diff --git a/modules/server/hydra.nix b/modules/server/hydra.nix new file mode 100644 index 0000000..97d0f3e --- /dev/null +++ b/modules/server/hydra.nix @@ -0,0 +1,25 @@ +{ + flake.modules.nixos.hydra = + { ... }: + let + httpPort = 2000; + in + { + services.nix-serve = { + enable = true; + secretKeyFile = "/var/cache-priv-key.pem"; + }; + + services.hydra = { + enable = true; + hydraURL = "http://localhost:${toString httpPort}"; + port = httpPort; + notificationSender = "hydra@localhost"; + useSubstitutes = true; + extraConfig = '' + allow-import-from-derivation = 1 + ''; + }; + + }; +} diff --git a/modules/server/remotebuild.nix b/modules/server/remotebuild.nix new file mode 100644 index 0000000..03b8148 --- /dev/null +++ b/modules/server/remotebuild.nix @@ -0,0 +1,41 @@ +{ + flake.modules.nixos.server = + { lib, ... }: + { + users.users.remotebuild = { + isNormalUser = true; + createHome = false; + group = "remotebuild"; + + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJYZjG+XPNoVHVdCel5MK4mwvtoFCqDY1WMI1yoU71Rd root@yggdrasil" + ]; + }; + + users.groups.remotebuild = { }; + + nix = { + nrBuildUsers = 64; + settings = { + trusted-users = [ "remotebuild" ]; + + min-free = 10 * 1024 * 1024; + max-free = 200 * 1024 * 1024; + + max-jobs = "auto"; + cores = 0; + }; + + daemonIOSchedClass = lib.mkDefault "idle"; + daemonCPUSchedPolicy = lib.mkDefault "idle"; + }; + + systemd.services.nix-daemon.serviceConfig = { + MemoryAccounting = true; + MemoryMax = "90%"; + OOMScoreAdjust = 500; + Slice = "-.slice"; + }; + + }; +} diff --git a/modules/server/ssh.nix b/modules/server/ssh.nix new file mode 100644 index 0000000..f604f82 --- /dev/null +++ b/modules/server/ssh.nix @@ -0,0 +1,17 @@ +{ + flake.modules.nixos.server = + { ... }: + { + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + }; + }; + + services.fail2ban = { + enable = true; + }; + }; +} diff --git a/modules/systems/amdgpu.nix b/modules/systems/amdgpu.nix new file mode 100644 index 0000000..440a580 --- /dev/null +++ b/modules/systems/amdgpu.nix @@ -0,0 +1,16 @@ +{ + flake.modules.nixos.amdgpu = + { ... }: + { + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + + environment = { + variables = { + AMD_VULKAN_ICD = "RADV"; + }; + }; + }; +} diff --git a/modules/systems/audio.nix b/modules/systems/audio.nix new file mode 100644 index 0000000..3712a11 --- /dev/null +++ b/modules/systems/audio.nix @@ -0,0 +1,307 @@ +{ + flake.modules = { + nixos.audio = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + pavucontrol + easyeffects + ]; + + services.pulseaudio.enable = false; + security.rtkit.enable = true; + + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + + wireplumber.configPackages = [ + (pkgs.writeTextDir "share/wireplumber/wireplumber.conf.d/11-bluetooth-policy.conf" '' + wireplumber.settings = { + bluetooth.autoswitch-to-headset-profile = false + } + '') + (pkgs.writeTextDir "share/wireplumber/policy.lua.d/11-bluetooth-policy.conf" '' + bluetooth_policy.policy["media-role.use-headset-profile"] = false + '') + ]; + }; + }; + + homeManager.cholli = + { lib, osConfig, ... }: + { + services.easyeffects = lib.mkIf osConfig.services.pipewire.enable { + enable = true; + preset = "jtrv-preset"; + extraPresets = { + jtrv-preset = { + input = { + blocklist = [ + + ]; + "compressor#0" = { + attack = 5; + boost-amount = 6; + boost-threshold = -72; + bypass = false; + dry = -100; + hpf-frequency = 10; + hpf-mode = "off"; + input-gain = 0; + knee = -6; + lpf-frequency = 20000; + lpf-mode = "off"; + makeup = 0; + mode = "Downward"; + output-gain = 0; + ratio = 4; + release = 75; + release-threshold = -40; + sidechain = { + lookahead = 0; + mode = "RMS"; + preamp = 0; + reactivity = 10; + source = "Middle"; + stereo-split-source = "Left/Right"; + type = "Feed-forward"; + }; + stereo-split = false; + threshold = -20; + wet = 0; + }; + "deesser#0" = { + bypass = false; + detection = "RMS"; + f1-freq = 3000.0; + f1-level = -6.0; + f2-freq = 5000.0; + f2-level = -6.0; + f2-q = 1.5000000000000004; + input-gain = 0.0; + laxity = 15; + makeup = 0; + mode = "Wide"; + output-gain = 0; + ratio = 5; + sc-listen = false; + threshold = -20; + }; + "equalizer#0" = { + balance = 0; + bypass = false; + input-gain = 0; + left = { + band0 = { + frequency = 50; + gain = 3; + mode = "RLC (BT)"; + mute = false; + q = 0.7; + slope = "x1"; + solo = false; + type = "Hi-pass"; + width = 4; + }; + band1 = { + frequency = 90; + gain = 3; + mode = "RLC (MT)"; + mute = false; + q = 0.7; + slope = "x1"; + solo = false; + type = "Lo-shelf"; + width = 4; + }; + band2 = { + frequency = 425; + gain = -2; + mode = "BWC (MT)"; + mute = false; + q = 0.9999999999999998; + slope = "x2"; + solo = false; + type = "Bell"; + width = 4; + }; + band3 = { + frequency = 3500; + gain = 3; + mode = "BWC (BT)"; + mute = false; + q = 0.7; + slope = "x2"; + solo = false; + type = "Bell"; + width = 4; + }; + band4 = { + frequency = 9000; + gain = 2; + mode = "LRX (MT)"; + mute = false; + q = 0.7; + slope = "x1"; + solo = false; + type = "Hi-shelf"; + width = 4; + }; + }; + mode = "IIR"; + num-bands = 5; + output-gain = 0; + pitch-left = 0; + pitch-right = 0; + right = { + band0 = { + frequency = 50; + gain = 3; + mode = "RLC (BT)"; + mute = false; + q = 0.7; + slope = "x1"; + solo = false; + type = "Hi-pass"; + width = 4; + }; + band1 = { + frequency = 90; + gain = 3; + mode = "RLC (MT)"; + mute = false; + q = 0.9999999999999998; + slope = "x1"; + solo = false; + type = "Lo-shelf"; + width = 4; + }; + band2 = { + frequency = 425; + gain = -2; + mode = "BWC (MT)"; + mute = false; + q = 0.7; + slope = "x2"; + solo = false; + type = "Bell"; + width = 4; + }; + band3 = { + frequency = 3500; + gain = 3; + mode = "BWC (BT)"; + mute = false; + q = 0.7; + slope = "x2"; + solo = false; + type = "Bell"; + width = 4; + }; + band4 = { + frequency = 9000; + gain = 2; + mode = "LRX (MT)"; + mute = false; + q = 0.7; + slope = "x1"; + solo = false; + type = "Hi-shelf"; + width = 4; + }; + }; + split-channels = false; + }; + "gate#0" = { + attack = 1; + bypass = false; + curve-threshold = -50; + curve-zone = -2; + dry = -100; + hpf-frequency = 10; + hpf-mode = "off"; + hysteresis = true; + hysteresis-threshold = -3; + hysteresis-zone = -1; + input-gain = 0; + lpf-frequency = 20000; + lpf-mode = "off"; + makeup = 1; + output-gain = 0; + reduction = -15; + release = 200; + sidechain = { + input = "Internal"; + lookahead = 0; + mode = "RMS"; + preamp = 0; + reactivity = 10; + source = "Middle"; + stereo-split-source = "Left/Right"; + }; + stereo-split = false; + wet = -1; + }; + "limiter#0" = { + alr = false; + alr-attack = 5; + alr-knee = 0; + alr-release = 50; + attack = 1; + bypass = false; + dithering = "16bit"; + external-sidechain = false; + gain-boost = true; + input-gain = 0; + lookahead = 5; + mode = "Herm Wide"; + output-gain = 0; + oversampling = "Half x2(2L)"; + release = 5; + sidechain-preamp = 0; + stereo-link = 100; + threshold = -1; + }; + plugins_order = [ + "rnnoise#0" + "gate#0" + "deesser#0" + "compressor#0" + "equalizer#0" + "speex#0" + "limiter#0" + ]; + "rnnoise#0" = { + bypass = false; + enable-vad = false; + input-gain = 0; + model-path = ""; + output-gain = 0; + release = 20; + vad-thres = 50; + wet = 0; + }; + "speex#0" = { + bypass = false; + enable-agc = false; + enable-denoise = false; + enable-dereverb = false; + input-gain = 0; + noise-suppression = -70; + output-gain = 0; + vad = { + enable = true; + probability-continue = 90; + probability-start = 95; + }; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/systems/bluetooth.nix b/modules/systems/bluetooth.nix new file mode 100644 index 0000000..223a5ca --- /dev/null +++ b/modules/systems/bluetooth.nix @@ -0,0 +1,18 @@ +{ + flake.modules.nixos.bluetooth = + { ... }: + { + hardware.bluetooth = { + enable = true; + powerOnBoot = true; + settings = { + General = { + Experimental = true; + KernelExperimental = true; + Enable = "Source,Sink,Media,Socket"; + }; + }; + }; + + }; +} diff --git a/modules/users/cholli/default.nix b/modules/users/cholli/default.nix index 7c5c75e..c98b79e 100644 --- a/modules/users/cholli/default.nix +++ b/modules/users/cholli/default.nix @@ -19,29 +19,53 @@ }; }; - modules.nixos.cholli = - { pkgs, ... }: - { - programs.fish.enable = true; + modules = { + nixos.cholli = + { pkgs, ... }: + { + programs.fish.enable = true; + + users.users.cholli = { + description = config.flake.meta.users.cholli.name; + isNormalUser = true; + createHome = true; + extraGroups = [ + "audio" + "input" + "networkmanager" + "sound" + "tty" + "wheel" + ]; + shell = pkgs.fish; + # TODO: fix this with sops + initialPassword = "asdf"; + }; + + nix.settings.trusted-users = [ config.flake.meta.users.cholli.username ]; - users.users.cholli = { - description = config.flake.meta.users.cholli.name; - isNormalUser = true; - createHome = true; - extraGroups = [ - "audio" - "input" - "networkmanager" - "sound" - "tty" - "wheel" - ]; - shell = pkgs.fish; - # TODO: fix this with sops - initialPassword = "asdf"; }; - nix.settings.trusted-users = [ config.flake.meta.users.cholli.username ]; - }; + homeManager.cholli = + { ... }: + let + defaultIconFileName = "profile.png"; + in + { + home = { + file = { + "Desktop/.keep".text = ""; + "Documents/.keep".text = ""; + "Downloads/.keep".text = ""; + "Music/.keep".text = ""; + "Pictures/.keep".text = ""; + "Videos/.keep".text = ""; + "projects/.keep".text = ""; + ".face".source = ./${defaultIconFileName}; + "Pictures/${defaultIconFileName}".source = ./${defaultIconFileName}; + }; + }; + }; + }; }; } diff --git a/modules/users/cholli/profile.png b/modules/users/cholli/profile.png new file mode 100644 index 0000000..de33904 Binary files /dev/null and b/modules/users/cholli/profile.png differ