diff --git a/flake.lock b/flake.lock index 018c533..8d887e8 100644 --- a/flake.lock +++ b/flake.lock @@ -1,12 +1,60 @@ { "nodes": { + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1751740947, + "narHash": "sha256-35040CHH7P3JGmhGVfEb2oJHL/A5mI2IXumhkxrBnao=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "dfc1db15a08c4cd234288f66e1199c653495301f", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, "crane": { "locked": { - "lastModified": 1751562746, - "narHash": "sha256-smpugNIkmDeicNz301Ll1bD7nFOty97T79m4GUMUczA=", + "lastModified": 1750266157, + "narHash": "sha256-tL42YoNg9y30u7zAqtoGDNdTyXTi8EALDeCB13FtbQA=", "owner": "ipetkov", "repo": "crane", - "rev": "aed2020fd3dc26e1e857d4107a5a67a33ab6c1fd", + "rev": "e37c943371b73ed87faf33f7583860f81f1d5a48", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "crane_2": { + "locked": { + "lastModified": 1736032295, + "narHash": "sha256-QNRlMxQTT3rdgsQb3QxljO14kE8xxdDXNJ/4jIm4u3Q=", + "owner": "ipetkov", + "repo": "crane", + "rev": "9fa361afe873c740d5ca10ff526463d5807eab88", "type": "github" }, "original": { @@ -30,11 +78,11 @@ ] }, "locked": { - "lastModified": 1752331782, - "narHash": "sha256-eRDO93C2dXNVoLbnNECWwGcMErDKVAXNWWy6hFMPoE8=", + "lastModified": 1751571582, + "narHash": "sha256-px4+H0VI5H+kzHgfoyAD0haTNiAXhiVgXqCAgAjT16A=", "owner": "determinatesystems", "repo": "determinate", - "rev": "33ffc091037908049e9897dc8258efae81709cfd", + "rev": "e3f21c62aee2ccd25811be574c09e1de8a57a687", "type": "github" }, "original": { @@ -46,37 +94,37 @@ "determinate-nixd-aarch64-darwin": { "flake": false, "locked": { - "narHash": "sha256-T/kTCi8rrh1r5XMGQBymB4Hnk/KNNGkgtgma6bXXKy0=", + "narHash": "sha256-+O3K2pZRWkbL0DEh5HyV0+pyAkRmJ0z6NjYTvetrTtk=", "type": "file", - "url": "https://install.determinate.systems/determinate-nixd/tag/v3.8.2/macOS" + "url": "https://install.determinate.systems/determinate-nixd/tag/v3.7.0/macOS" }, "original": { "type": "file", - "url": "https://install.determinate.systems/determinate-nixd/tag/v3.8.2/macOS" + "url": "https://install.determinate.systems/determinate-nixd/tag/v3.7.0/macOS" } }, "determinate-nixd-aarch64-linux": { "flake": false, "locked": { - "narHash": "sha256-C+KvOykOIoXCWSsPBM2Hzy1skk2lgiKXQyb9fJdwSdQ=", + "narHash": "sha256-r8BSSNXss3EoCUV4gYJwAS18OO7fceWXCL2SPLwls50=", "type": "file", - "url": "https://install.determinate.systems/determinate-nixd/tag/v3.8.2/aarch64-linux" + "url": "https://install.determinate.systems/determinate-nixd/tag/v3.7.0/aarch64-linux" }, "original": { "type": "file", - "url": "https://install.determinate.systems/determinate-nixd/tag/v3.8.2/aarch64-linux" + "url": "https://install.determinate.systems/determinate-nixd/tag/v3.7.0/aarch64-linux" } }, "determinate-nixd-x86_64-linux": { "flake": false, "locked": { - "narHash": "sha256-cENobOVn0+FtON9bmr/QoUEpNGEyxW4YpFXkLyBTYDs=", + "narHash": "sha256-hSauxThw5pfDiiqdVeFv3QeL4e3DRI09hFYuGhTKQWU=", "type": "file", - "url": "https://install.determinate.systems/determinate-nixd/tag/v3.8.2/x86_64-linux" + "url": "https://install.determinate.systems/determinate-nixd/tag/v3.7.0/x86_64-linux" }, "original": { "type": "file", - "url": "https://install.determinate.systems/determinate-nixd/tag/v3.8.2/x86_64-linux" + "url": "https://install.determinate.systems/determinate-nixd/tag/v3.7.0/x86_64-linux" } }, "flake-compat": { @@ -96,6 +144,22 @@ } }, "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { "flake": false, "locked": { "lastModified": 1747046372, @@ -111,6 +175,22 @@ "type": "github" } }, + "flake-compat_4": { + "flake": false, + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-parts": { "inputs": { "nixpkgs-lib": [ @@ -140,11 +220,50 @@ ] }, "locked": { - "lastModified": 1751413152, - "narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=", + "lastModified": 1749398372, + "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "77826244401ea9de6e3bac47c2db46005e1f30b5", + "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "schizofox", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1735774679, + "narHash": "sha256-soePLBazJk0qQdDVhdbM98vYdssfs3WFedcq+raipRI=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f2f7418ce0ab4a5309a4596161d154cfc877af66", "type": "github" }, "original": { @@ -180,6 +299,28 @@ } }, "gitignore": { + "inputs": { + "nixpkgs": [ + "hyprland", + "pre-commit-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_2": { "inputs": { "nixpkgs": [ "lanzaboote", @@ -201,6 +342,317 @@ "type": "github" } }, + "hercules-ci-effects": { + "inputs": { + "flake-parts": [ + "schizofox", + "nixpak", + "flake-parts" + ], + "nixpkgs": [ + "schizofox", + "nixpak", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733333617, + "narHash": "sha256-nMMQXREGvLOLvUa0ByhYFdaL0Jov0t1wzLbKjr05P2w=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "56f8ea8d502c87cf62444bec4ee04512e8ea24ea", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "schizofox", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734344598, + "narHash": "sha256-wNX3hsScqDdqKWOO87wETUEi7a/QlPVgpC/Lh5rFOuA=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "83ecd50915a09dca928971139d3a102377a8d242", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hyprcursor": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1749155331, + "narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, + "hyprgraphics": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1751808145, + "narHash": "sha256-OXgL0XaKMmfX2rRQkt9SkJw+QNfv0jExlySt1D6O72g=", + "owner": "hyprwm", + "repo": "hyprgraphics", + "rev": "b841473a0bd4a1a74a0b64f1ec2ab199035c349f", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprgraphics", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "aquamarine": "aquamarine", + "hyprcursor": "hyprcursor", + "hyprgraphics": "hyprgraphics", + "hyprland-protocols": "hyprland-protocols", + "hyprland-qtutils": "hyprland-qtutils", + "hyprlang": "hyprlang", + "hyprutils": "hyprutils", + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks", + "systems": [ + "systems" + ], + "xdph": "xdph" + }, + "locked": { + "lastModified": 1751904574, + "narHash": "sha256-jXkava/9BRiY2JEVmB68mpkFd+JU3BnNbh2RtRBXfTA=", + "owner": "hyprwm", + "repo": "hyprland", + "rev": "bb958a9e139d6ae90d45fe360287d33e229f971e", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1749046714, + "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprland-qt-support": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprland-qtutils", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "hyprland-qtutils", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland-qtutils", + "systems" + ] + }, + "locked": { + "lastModified": 1749154592, + "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", + "owner": "hyprwm", + "repo": "hyprland-qt-support", + "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-qt-support", + "type": "github" + } + }, + "hyprland-qtutils": { + "inputs": { + "hyprland-qt-support": "hyprland-qt-support", + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprland-qtutils", + "hyprlang", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1750371812, + "narHash": "sha256-D868K1dVEACw17elVxRgXC6hOxY+54wIEjURztDWLk8=", + "owner": "hyprwm", + "repo": "hyprland-qtutils", + "rev": "b13c7481e37856f322177010bdf75fccacd1adc8", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-qtutils", + "type": "github" + } + }, + "hyprlang": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1750371198, + "narHash": "sha256-/iuJ1paQOBoSLqHflRNNGyroqfF/yvPNurxzcCT0cAE=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "cee01452bca58d6cadb3224e21e370de8bc20f0b", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprutils": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1751888065, + "narHash": "sha256-F2SV9WGqgtRsXIdUrl3sRe0wXlQD+kRRZcSfbepjPJY=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "a8229739cf36d159001cfc203871917b83fdf917", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1751881472, + "narHash": "sha256-meB0SnXbwIe2trD041MLKEv6R7NZ759QwBcVIhlSBfE=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "8fb426b3e5452fd9169453fd6c10f8c14ca37120", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, "impermanence": { "locked": { "lastModified": 1737831083, @@ -219,7 +671,7 @@ "lanzaboote": { "inputs": { "crane": "crane", - "flake-compat": "flake-compat_2", + "flake-compat": "flake-compat_3", "flake-parts": "flake-parts_2", "nixpkgs": [ "nixpkgs" @@ -228,11 +680,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1752673703, - "narHash": "sha256-9Cc0YqL9ZUpaybJsrRJfXex91QlPmQNqpTLgw/KvJGA=", + "lastModified": 1751381593, + "narHash": "sha256-js1XwtJpYhvQrrTaVzViybpztkHJVZ63aXOlFAcTENM=", "owner": "nix-community", "repo": "lanzaboote", - "rev": "5a776450d904b7ccd377c2a759703152b2553e98", + "rev": "f4eb75540307c2b33521322c04b7fea74e48a66f", "type": "github" }, "original": { @@ -250,18 +702,44 @@ "nixpkgs-regression": "nixpkgs-regression" }, "locked": { - "lastModified": 1752329813, - "narHash": "sha256-+PLMYzOLXmYtGUcUxIbJZpadAV/gO73EAhISc1kgvJM=", - "rev": "04045d5add7915ea9209a09833fae1aa3a3a9be1", - "revCount": 21488, + "lastModified": 1751568315, + "narHash": "sha256-52rbPxatlf/8BA3plVc87W8kyXdBr6iab+nQHe4QeJg=", + "rev": "81672fee2a84385d052c20982307bbd86fd031c4", + "revCount": 21102, "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/nix-src/3.8.2/0197ff19-42da-7beb-b8cf-902b39687ccf/source.tar.gz" + "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/nix-src/3.7.0/0197d1ca-253f-75ae-9f36-38c46bd107f4/source.tar.gz" }, "original": { "type": "tarball", "url": "https://flakehub.com/f/DeterminateSystems/nix-src/%2A" } }, + "nixpak": { + "inputs": { + "flake-parts": [ + "schizofox", + "flake-parts" + ], + "hercules-ci-effects": "hercules-ci-effects", + "nixpkgs": [ + "schizofox", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733970147, + "narHash": "sha256-63SguTBGenmU4jx7j44PVXlZMsWsALjaNPpRg9xlljs=", + "owner": "nixpak", + "repo": "nixpak", + "rev": "fbbb572e595decf5e749d7fbeb27e1ff09484ff8", + "type": "github" + }, + "original": { + "owner": "nixpak", + "repo": "nixpak", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1747179050, @@ -292,6 +770,18 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1735774519, + "narHash": "sha256-CewEm1o2eVAnoqb6Ml+Qi9Gg/EfNAxbRx1lANGVyoLI=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz" + } + }, "nixpkgs-regression": { "locked": { "lastModified": 1643052045, @@ -311,23 +801,62 @@ "nixpkgs_2": { "locked": { "lastModified": 315532800, - "narHash": "sha256-X5WIcIkFxPhw7mS219TbEOgrugbMx/2cin09OlWobT8=", - "rev": "dab3a6e781554f965bde3def0aa2fda4eb8f1708", + "narHash": "sha256-5EzvWAMTAf6m6Ynab7EnYz9OfJO2wHCb/yhtP8ACQQQ=", + "rev": "9b008d60392981ad674e04016d25619281550a9d", "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre830668.dab3a6e78155/nixexprs.tar.xz" + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre826760.9b008d603929/nixexprs.tar.xz" }, "original": { "type": "tarball", "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" } }, + "nixpkgs_3": { + "locked": { + "lastModified": 1736429638, + "narHash": "sha256-dDWqQqSgMQXw5eFtcyoVijv7HbYJZOIo+jWQdJtsxn4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f81eabd5dd7c9213516fa2d3fc1d108a751340d4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "gitignore": "gitignore", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1750779888, + "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "pre-commit-hooks-nix": { "inputs": { "flake-compat": [ "lanzaboote", "flake-compat" ], - "gitignore": "gitignore", + "gitignore": "gitignore_2", "nixpkgs": [ "lanzaboote", "nixpkgs" @@ -350,11 +879,13 @@ "root": { "inputs": { "determinate": "determinate", + "hyprland": "hyprland", "impermanence": "impermanence", "lanzaboote": "lanzaboote", "nixpkgs": "nixpkgs_2", "rust-overlay": "rust-overlay_2", - "systems": "systems", + "schizofox": "schizofox", + "systems": "systems_2", "watt": "watt" } }, @@ -366,11 +897,11 @@ ] }, "locked": { - "lastModified": 1751769931, - "narHash": "sha256-QR2Rp/41NkA5YxcpvZEKD1S2QE1Pb9U415aK8M/4tJc=", + "lastModified": 1751165203, + "narHash": "sha256-3QhlpAk2yn+ExwvRLtaixWsVW1q3OX3KXXe0l8VMLl4=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "3ac4f630e375177ea8317e22f5c804156de177e8", + "rev": "90f547b90e73d3c6025e66c5b742d6db51c418c3", "type": "github" }, "original": { @@ -386,11 +917,11 @@ ] }, "locked": { - "lastModified": 1752633862, - "narHash": "sha256-Bj7ozT1+5P7NmvDcuAXJvj56txcXuAhk3Vd9FdWFQzk=", + "lastModified": 1751856221, + "narHash": "sha256-/QE1eV0ckFvgRMcKjZqgdJDoXFNwSMepwRoBjaw2MCk=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "8668ca94858206ac3db0860a9dec471de0d995f8", + "rev": "34cae4b56929c5b340e1c5b10d9a98a425b2a51e", "type": "github" }, "original": { @@ -399,6 +930,53 @@ "type": "github" } }, + "schizofox": { + "inputs": { + "flake-compat": "flake-compat_4", + "flake-parts": "flake-parts_3", + "home-manager": "home-manager", + "nixpak": "nixpak", + "nixpkgs": "nixpkgs_3", + "searx-randomizer": "searx-randomizer", + "systems": "systems" + }, + "locked": { + "lastModified": 1744892989, + "narHash": "sha256-SwJiKlZSYSQhXQR4xxaItURuD+NTRbUxtoLNQFzgvUI=", + "owner": "schizofox", + "repo": "schizofox", + "rev": "e2702bd7a09fc9d6089901adb4e7ae4a9aeef5ef", + "type": "github" + }, + "original": { + "owner": "schizofox", + "repo": "schizofox", + "type": "github" + } + }, + "searx-randomizer": { + "inputs": { + "crane": "crane_2", + "flake-parts": "flake-parts_4", + "nixpkgs": [ + "schizofox", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1736054833, + "narHash": "sha256-fSvHee00LQpndvJ0N4ZahRuoAQd06g8ecdUzfNPLvLk=", + "owner": "schizofox", + "repo": "searx-randomizer", + "rev": "63d6fed21ae5a6608bac71665887a432781161c6", + "type": "github" + }, + "original": { + "owner": "schizofox", + "repo": "searx-randomizer", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1689347949, @@ -414,6 +992,21 @@ "type": "github" } }, + "systems_2": { + "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" + } + }, "watt": { "inputs": { "nixpkgs": [ @@ -433,6 +1026,47 @@ "repo": "watt", "type": "github" } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1751300244, + "narHash": "sha256-PFuv1TZVYvQhha0ac53E3YgdtmLShrN0t4T6xqHl0jE=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "6115f3fdcb2c1a57b4a80a69f3c797e47607b90a", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 064b3c7..a20d88f 100644 --- a/flake.nix +++ b/flake.nix @@ -48,6 +48,8 @@ impermanence.url = "github:nix-community/impermanence"; + schizofox.url = "github:schizofox/schizofox"; + watt = { url = "github:notashelf/watt"; inputs.nixpkgs.follows = "nixpkgs"; @@ -59,6 +61,12 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + hyprland = { + url = "github:hyprwm/hyprland"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.systems.follows = "systems"; + }; + # The things rust is making me do... rust-overlay = { url = "github:oxalica/rust-overlay"; diff --git a/hosts/default.nix b/hosts/default.nix index da17b48..001e1b0 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -42,10 +42,6 @@ inputs: let map toString (listFilesRecursive ../modules) |> filter (hasSuffix "module.nix") ) - ( - map toString (listFilesRecursive ../modules) - |> filter (hasSuffix ".mod.nix") - ) ] |> flatten ) diff --git a/hosts/hermit/configuration.nix b/hosts/hermit/configuration.nix index fa00c43..a311672 100644 --- a/hosts/hermit/configuration.nix +++ b/hosts/hermit/configuration.nix @@ -16,6 +16,10 @@ }; programs = { nix-ld.enable = false; + zsh = { + enable = true; + enableBashCompletion = true; + }; gnupg.agent = { enable = true; pinentryPackage = pkgs.pinentry-qt; diff --git a/hosts/temperance/configuration.nix b/hosts/temperance/configuration.nix index 2e74e8a..0856f5a 100644 --- a/hosts/temperance/configuration.nix +++ b/hosts/temperance/configuration.nix @@ -3,7 +3,24 @@ lib, pkgs, ... -}: { +}: let + inherit + ( + pkgs.callPackage ./kernel/xanmod.nix { + inherit lib; + inherit + (pkgs) + stdenv + fetchFromGitHub + kernelPatches + buildLinux + variant + ; + } + ) + xanmod_blox + ; +in { # Time Zone time.timeZone = "Europe/Zurich"; # Select internationalisation properties. @@ -12,18 +29,13 @@ security.polkit.enable = true; # boot.kernelPackages = pkgs.linuxPackagesFor xanmod_blox; - boot.kernelPackages = pkgs.linuxPackages_latest; + boot.kernelPackages = pkgs.linuxPackages_xanmod_latest; programs.nix-ld.enable = true; services = { fstrim.enable = lib.mkDefault true; udisks2.enable = true; - system76-scheduler = { - enable = true; - }; - gnome.gnome-keyring.enable = true; }; - security.pam.services.login.enableGnomeKeyring = true; - environment.systemPackages = [pkgs.seahorse]; + meta = { mainUser.gitSigningKey = ""; }; @@ -51,6 +63,7 @@ }; }; desktops.niri.enable = true; + desktops.hyprland.enable = true; theming = { gtk.enable = true; @@ -66,8 +79,8 @@ enable = true; musicDirectory = "/home/${config.modules.other.system.username}/cloud/media/Music"; }; - # uwsm.enable = true; - # greetd.enable = true; + uwsm.enable = true; + greetd.enable = true; }; other = { system = { diff --git a/hosts/temperance/programs.nix b/hosts/temperance/programs.nix index 2ba5492..c8b5800 100644 --- a/hosts/temperance/programs.nix +++ b/hosts/temperance/programs.nix @@ -6,13 +6,10 @@ anki asciinema beets - bitwarden-cli - bitwarden-desktop bubblewrap cachix calc calibre - carapace comma digikam difftastic @@ -40,7 +37,6 @@ librewolf libtool logiops - mergiraf mpv nautilus nicotine-plus @@ -62,17 +58,15 @@ ruby_3_2 signal-desktop spotify - starship + strawberry telegram-desktop texliveFull thunderbird - topiary tor-browser trash-cli tutanota-desktop typst vesktop - vivid walker wayneko wireguard-tools @@ -82,13 +76,6 @@ zathura zotero zoxide - # coreutils-full # All of the GNU coreutils - curl # I sometimes need to curl stuff - git # take a guess - wget - unzip # zipping and unzipping stuff - zip - util-linux ; inherit (pkgs.wineWowPackages) diff --git a/modules/options/system/options.mod.nix b/modules/options/system/module.nix similarity index 84% rename from modules/options/system/options.mod.nix rename to modules/options/system/module.nix index cd77ba7..3c5f9fd 100644 --- a/modules/options/system/options.mod.nix +++ b/modules/options/system/module.nix @@ -5,11 +5,35 @@ }: let inherit (builtins) elemAt; inherit (lib.options) mkOption mkEnableOption; - inherit (lib.types) enum listOf str nullOr bool; + inherit (lib.types) enum listOf str nullOr bool oneOf; inherit (lib.lists) elem; inherit (config.modules.system) systemType; in { + imports = [ + # configuration options for nixos activation scripts + # ./activation.nix + + # boot/impermanence mounts + # ./boot.nix + # ./impermanence.nix + + # network and overall hardening + ./networking + # ./security.nix + # ./encryption.nix + + # filesystems + # ./fs.nix + + # package and program related options + # ./services + ./programs + + # monitor configuration + ./monitors.nix + ]; + options.modules.system = { mainUser = mkOption { type = enum config.modules.system.users; diff --git a/modules/options/system/monitors.mod.nix b/modules/options/system/monitors.nix similarity index 100% rename from modules/options/system/monitors.mod.nix rename to modules/options/system/monitors.nix diff --git a/modules/options/system/networking/default.nix b/modules/options/system/networking/default.nix new file mode 100644 index 0000000..68fa733 --- /dev/null +++ b/modules/options/system/networking/default.nix @@ -0,0 +1,7 @@ +{lib, ...}: let + inherit (lib.options) mkEnableOption; +in { + options.modules.system.networking = { + nftbles.enable = mkEnableOption "Nftables firewall"; + }; +} diff --git a/modules/options/system/programs.mod.nix b/modules/options/system/programs/default.nix similarity index 100% rename from modules/options/system/programs.mod.nix rename to modules/options/system/programs/default.nix diff --git a/modules/other/git.mod.nix b/modules/other/git.nix similarity index 100% rename from modules/other/git.mod.nix rename to modules/other/git.nix diff --git a/modules/other/module.nix b/modules/other/module.nix new file mode 100644 index 0000000..6ddf05f --- /dev/null +++ b/modules/other/module.nix @@ -0,0 +1,8 @@ +_: { + imports = [ + ./system.nix + ./xdg.nix + ./git.nix + ./users.nix + ]; +} diff --git a/modules/other/system.mod.nix b/modules/other/system.nix similarity index 100% rename from modules/other/system.mod.nix rename to modules/other/system.nix diff --git a/modules/other/users.mod.nix b/modules/other/users.nix similarity index 96% rename from modules/other/users.mod.nix rename to modules/other/users.nix index 344a3e2..fc57ad3 100644 --- a/modules/other/users.mod.nix +++ b/modules/other/users.nix @@ -55,6 +55,10 @@ in { }; }; config = { + programs.zsh = { + enable = true; + enableBashCompletion = true; + }; users = { mutableUsers = true; users = { diff --git a/modules/other/xdg.mod.nix b/modules/other/xdg.nix similarity index 100% rename from modules/other/xdg.mod.nix rename to modules/other/xdg.nix diff --git a/modules/packages/hardware.nix b/modules/packages/hardware.nix new file mode 100644 index 0000000..cbaa95b --- /dev/null +++ b/modules/packages/hardware.nix @@ -0,0 +1,7 @@ +{ + config, + lib, + pkgs, + ... +}: { +} diff --git a/modules/packages/module.nix b/modules/packages/module.nix new file mode 100644 index 0000000..70b56b6 --- /dev/null +++ b/modules/packages/module.nix @@ -0,0 +1,22 @@ +{pkgs, ...}: { + imports = [ + ./hardware.nix + ./wayland.nix + # ./media.nix + ]; + # These are some standard packages I want to have installed on every system, regardless of type or use case. + environment.systemPackages = builtins.attrValues { + inherit + (pkgs) + calc # Calculator device + # coreutils-full # All of the GNU coreutils + curl # I sometimes need to curl stuff + git # take a guess + inetutils # internet stuff I need/want on every system. + wget + unzip # zipping and unzipping stuff + zip + util-linux + ; + }; +} diff --git a/modules/packages/wayland.nix b/modules/packages/wayland.nix new file mode 100644 index 0000000..eb0e2c3 --- /dev/null +++ b/modules/packages/wayland.nix @@ -0,0 +1,15 @@ +{ + config, + lib, + pkgs, + ... +}: { + # These are packages I only need in wayland environments, nowhere else. + environment.systemPackages = builtins.attrValues { + inherit + (pkgs) + wl-clipboard + grimblast + ; + }; +} diff --git a/modules/programs/cli/jj.mod.nix b/modules/programs/cli/jj/module.nix similarity index 100% rename from modules/programs/cli/jj.mod.nix rename to modules/programs/cli/jj/module.nix diff --git a/modules/programs/cli/module.nix b/modules/programs/cli/module.nix new file mode 100644 index 0000000..a987192 --- /dev/null +++ b/modules/programs/cli/module.nix @@ -0,0 +1,6 @@ +_: { + imports = [ + ./nh.nix + # ./beets.nix + ]; +} diff --git a/modules/programs/cli/nh.mod.nix b/modules/programs/cli/nh.nix similarity index 100% rename from modules/programs/cli/nh.mod.nix rename to modules/programs/cli/nh.nix diff --git a/modules/programs/cli/zodide.mod.nix b/modules/programs/cli/zodide.mod.nix deleted file mode 100644 index 08675c8..0000000 --- a/modules/programs/cli/zodide.mod.nix +++ /dev/null @@ -1,7 +0,0 @@ -_: { - programs.zoxide = { - enable = true; - enableFishIntegration = true; - enableBashIntegration = true; - }; -} diff --git a/modules/programs/gui/brave.mod.nix b/modules/programs/gui/brave/module.nix similarity index 98% rename from modules/programs/gui/brave.mod.nix rename to modules/programs/gui/brave/module.nix index 3e6592d..ff442a4 100644 --- a/modules/programs/gui/brave.mod.nix +++ b/modules/programs/gui/brave/module.nix @@ -20,7 +20,7 @@ "--use-angle=vulkan" ]; brave-wrapped = pkgs.symlinkJoin { - name = "brave"; + name = "fish"; paths = [ ( pkgs.brave.override {vulkanSupport = true;} @@ -201,9 +201,7 @@ in { # NoScript "doojmbjmlfjjnbmnoijecmcbfeoakpjm" # KeePassXC-Browser - # "oboonakemofpalcgghocfoadofidjkkk" - # Bitwarden Password Manager - "nngceckbapebfimnlniiiahkandclblb" + "oboonakemofpalcgghocfoadofidjkkk" # Catppuccin Mocha "bkkmolkhemgaeaeggcmfbghljjjoofoh" # Dark Reader diff --git a/modules/programs/gui/foot.mod.nix b/modules/programs/gui/foot.nix similarity index 100% rename from modules/programs/gui/foot.mod.nix rename to modules/programs/gui/foot.nix diff --git a/modules/programs/gui/fuzzel/module.nix b/modules/programs/gui/fuzzel/module.nix new file mode 100644 index 0000000..0eb6402 --- /dev/null +++ b/modules/programs/gui/fuzzel/module.nix @@ -0,0 +1,10 @@ +{ + config, + lib, + pkgs, + ... +}: { + environment.systemPackages = builtins.attrValues { + inherit (pkgs) fuzzel; + }; +} diff --git a/modules/programs/gui/ghostty.mod.nix b/modules/programs/gui/ghostty/module.nix similarity index 80% rename from modules/programs/gui/ghostty.mod.nix rename to modules/programs/gui/ghostty/module.nix index 19e702b..47c74ca 100644 --- a/modules/programs/gui/ghostty.mod.nix +++ b/modules/programs/gui/ghostty/module.nix @@ -20,44 +20,55 @@ else "none"; ghostty-settings = { - font-size = 14; font-family = "JetBrainsMonoNerdFont"; - # font-style-bold = JetBrainsMono NF Regular; - # font-style-bold-italic = JetBrainsMono NF Italic; + font-family-bold = "JetBrainsMonoNerdFontBold"; + font-family-italic = "JetBrainsMonoNerdFontItalic"; + font-family-bold-italic = "JetBrainsMonoNerdFontBoldItalic"; + font-size = 14; - app-notifications = "no-clipboard-copy"; - background-opacity = 0.75; - bold-is-bright = "true"; - confirm-close-surface = "false"; - cursor-style-blink = "false"; + window-padding-x = 8; + window-padding-y = 8; + background-opacity = 0.85; gtk-single-instance = "true"; gtk-tabs-location = "bottom"; gtk-wide-tabs = false; - mouse-hide-while-typing = "true"; - resize-overlay-duration = "0s"; - shell-integration-features = "cursor,sudo,no-title"; - term = "xterm-256color"; - theme = slug; - window-decoration = "none"; window-padding-balance = true; - window-padding-x = 8; - window-padding-y = 8; + window-decoration = "none"; + theme = slug; + resize-overlay-duration = "0s"; + cursor-style-blink = "false"; + confirm-close-surface = "false"; + mouse-hide-while-typing = "true"; + window-theme = "ghostty"; + bold-is-bright = "true"; + term = "xterm-256color"; + + app-notifications = "no-clipboard-copy"; + shell-integration-features = "cursor,sudo,no-title"; + # window-padding-y = 10; cursor-style = "block"; # Whether to automatically copy selected text to the clipboard. true will prefer to copy to the selection clipboard, otherwise it will copy to the system clipboard. # The value clipboard will always copy text to the selection clipboard as well as the system clipboard. copy-on-select = "clipboard"; - inherit shell-integration; + inherit shell-integration; command = getExe package; }; settingsFile = pkgs.writeText "config" <| concatStringsSep "\n" <| mapAttrsToList (name: value: "${name} = ${toString value}") ghostty-settings; + ghostty = pkgs.ghostty.overrideAttrs (_: { + preBuild = '' + shopt -s globstar + sed -i 's/^const xev = @import("xev");$/const xev = @import("xev").Epoll;/' **/*.zig + shopt -u globstar + ''; + }); ghostty-wrapped = pkgs.symlinkJoin { name = "ghostty-wrapped"; - paths = [pkgs.ghostty]; + paths = [ghostty]; nativeBuildInputs = [pkgs.makeWrapper]; postBuild = '' wrapProgram $out/bin/ghostty --add-flags "--config-file=${settingsFile}" diff --git a/modules/programs/gui/module.nix b/modules/programs/gui/module.nix new file mode 100644 index 0000000..4a53a47 --- /dev/null +++ b/modules/programs/gui/module.nix @@ -0,0 +1,9 @@ +_: { + imports = [ + ./foot.nix + ./steam.nix + # ./schizofox.nix + ./minecraft.nix + ./miniflux.nix + ]; +} diff --git a/modules/programs/gui/schizofox/module.nix b/modules/programs/gui/schizofox/module.nix new file mode 100644 index 0000000..181b896 --- /dev/null +++ b/modules/programs/gui/schizofox/module.nix @@ -0,0 +1,117 @@ +{ + config, + inputs, + lib, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.options) mkEnableOption; + inherit (builtins) listToAttrs; + + cfg = config.modules.programs.schizofox; +in { + options.modules.programs.schizofox.enable = mkEnableOption "Schizofox browser"; + imports = [ + inputs.schizofox.nixosModules.default + ]; + + config = mkIf cfg.enable { + programs.schizofox = { + enable = true; + theme = { + font = "Lexend"; + colors = { + background-darker = "181825"; + background = "1e1e2e"; + foreground = "cdd6f4"; + }; + }; + + security = { + sanitizeOnShutdown.enable = true; + sandbox.enable = true; + noSessionRestore = true; + userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0"; + }; + + misc = { + drm.enable = true; + disableWebgl = false; + bookmarks = [ + { + Title = "Noogle"; + URL = "https://noogle.dev"; + Placement = "toolbar"; + } + { + Title = "Nixpkgs Manual"; + URL = "https://nixos.org/manual/nixpkgs/stable"; + Placement = "toolbar"; + } + ]; + }; + + extensions = { + simplefox.enable = true; + darkreader.enable = true; + + enableDefaultExtensions = true; + enableExtraExtensions = true; + extraExtensions = let + extensions = [ + { + id = "{c2c003ee-bd69-42a2-b0e9-6f34222cb046}"; + name = "auto-tab-discard"; + } + { + id = "{a4c4eda4-fb84-4a84-b4a1-f7c1cbf2a1ad}"; + name = "refined-github-"; + } + { + id = "sponsorBlocker@ajay.app"; + name = "sponsorblock"; + } + { + id = "{446900e4-71c2-419f-a6a7-df9c091e268b}"; + name = "bitwarden-password-manager"; + } + { + id = "{74145f27-f039-47ce-a470-a662b129930a}"; + name = "clearurls"; + } + { + id = "{b86e4813-687a-43e6-ab65-0bde4ab75758}"; + name = "localcdn-fork-of-decentraleyes"; + } + { + id = "smart-referer@meh.paranoid.pk"; + name = "smart-referer"; + } + { + id = "skipredirect@sblask"; + name = "skip-redirect"; + } + { + id = "7esoorv3@alefvanoon.anonaddy.me"; + name = "libredirect"; + } + { + id = "DontFuckWithPaste@raim.ist"; + name = "dont-fuck-with-paste"; + } + ]; + + mappedExtensions = + map (extension: { + name = extension.id; + value = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/${extension.name}/latest.xpi"; + }; + }) + extensions; + in + listToAttrs mappedExtensions; + }; + }; + }; +} diff --git a/modules/programs/gui/steam.mod.nix b/modules/programs/gui/steam.nix similarity index 100% rename from modules/programs/gui/steam.mod.nix rename to modules/programs/gui/steam.nix diff --git a/modules/programs/gui/thunar.mod.nix b/modules/programs/gui/thunar/module.nix similarity index 100% rename from modules/programs/gui/thunar.mod.nix rename to modules/programs/gui/thunar/module.nix diff --git a/modules/programs/other/direnv.mod.nix b/modules/programs/other/direnv.nix similarity index 79% rename from modules/programs/other/direnv.mod.nix rename to modules/programs/other/direnv.nix index 90f6098..3698c77 100644 --- a/modules/programs/other/direnv.mod.nix +++ b/modules/programs/other/direnv.nix @@ -10,8 +10,8 @@ # We want direnv to load in our nix dev shells loadInNixShell = true; - enableBashIntegration = false; - enableFishIntegration = false; + enableBashIntegration = true; + enableFishIntegration = true; }; }; } diff --git a/modules/programs/other/module.nix b/modules/programs/other/module.nix new file mode 100644 index 0000000..5be7857 --- /dev/null +++ b/modules/programs/other/module.nix @@ -0,0 +1,3 @@ +_: { + imports = [./direnv.nix ./nix-index.nix]; +} diff --git a/modules/programs/other/nix-index.mod.nix b/modules/programs/other/nix-index.nix similarity index 100% rename from modules/programs/other/nix-index.mod.nix rename to modules/programs/other/nix-index.nix diff --git a/modules/programs/tui/btop.mod.nix b/modules/programs/tui/btop.nix similarity index 100% rename from modules/programs/tui/btop.mod.nix rename to modules/programs/tui/btop.nix diff --git a/modules/programs/tui/module.nix b/modules/programs/tui/module.nix new file mode 100644 index 0000000..5a5a318 --- /dev/null +++ b/modules/programs/tui/module.nix @@ -0,0 +1,3 @@ +_: { + imports = [./btop.nix]; +} diff --git a/modules/programs/tui/zellij/zellij.mod.nix b/modules/programs/tui/zellij/module.nix similarity index 100% rename from modules/programs/tui/zellij/zellij.mod.nix rename to modules/programs/tui/zellij/module.nix diff --git a/modules/programs/tui/zellij/zellij-good-scrolling.patch b/modules/programs/tui/zellij/zellij-good-scrolling.patch new file mode 100644 index 0000000..c7ba14d --- /dev/null +++ b/modules/programs/tui/zellij/zellij-good-scrolling.patch @@ -0,0 +1,22 @@ +--- a/zellij-server/src/panes/grid.rs ++++ b/zellij-server/src/panes/grid.rs +@@ -271,7 +271,7 @@ fn subtract_isize_from_usize(u: usize, i: isize) -> usize { + macro_rules! dump_screen { + ($lines:expr) => {{ + let mut is_first = true; +- let mut buf = "".to_owned(); ++ let mut buf = String::with_capacity($lines.iter().map(|l| l.len()).sum()); + + for line in &$lines { + if line.is_canonical && !is_first { +@@ -280,8 +280,7 @@ macro_rules! dump_screen { + let s: String = (&line.columns).into_iter().map(|x| x.character).collect(); + // Replace the spaces at the end of the line. Sometimes, the lines are + // collected with spaces until the end of the panel. +- let re = Regex::new("([^ ])[ ]*$").unwrap(); +- buf.push_str(&(re.replace(&s, "${1}"))); ++ buf.push_str(&s.trim_end_matches(' ')); + is_first = false; + } + buf + diff --git a/modules/services/acme.mod.nix b/modules/services/acme/module.nix similarity index 100% rename from modules/services/acme.mod.nix rename to modules/services/acme/module.nix diff --git a/modules/services/greetd.mod.nix b/modules/services/greetd/module.nix similarity index 100% rename from modules/services/greetd.mod.nix rename to modules/services/greetd/module.nix diff --git a/modules/services/locate.mod.nix b/modules/services/locate/module.nix similarity index 100% rename from modules/services/locate.mod.nix rename to modules/services/locate/module.nix diff --git a/modules/services/mako.mod.nix b/modules/services/mako/module.nix similarity index 100% rename from modules/services/mako.mod.nix rename to modules/services/mako/module.nix diff --git a/modules/services/mpd.mod.nix b/modules/services/mpd/module.nix similarity index 100% rename from modules/services/mpd.mod.nix rename to modules/services/mpd/module.nix diff --git a/modules/services/nginx.mod.nix b/modules/services/nginx/module.nix similarity index 100% rename from modules/services/nginx.mod.nix rename to modules/services/nginx/module.nix diff --git a/modules/services/owncloud.mod.nix b/modules/services/owncloud/module.nix similarity index 59% rename from modules/services/owncloud.mod.nix rename to modules/services/owncloud/module.nix index 7e1ec97..0239704 100644 --- a/modules/services/owncloud.mod.nix +++ b/modules/services/owncloud/module.nix @@ -26,6 +26,23 @@ in { ExecStart = "${getExe' pkgs.owncloud-client "owncloud"}"; Restart = "always"; RestartSec = 30; + + # User = "cr"; + # Group = "cr"; + + # Keyringmode = "shared"; + # DevicePolicy = "closed"; + # PrivateDevices = true; + # PrivateTmp = true; + # ProtectClock = true; + # ProtectControlGroups = true; + # ProtectControlGroup = true; + # ProtectKernelLogs = true; + # ProtectKernelModules = true; + # ProtectKernelTunables = true; + + # ProtectSystem = "strict"; + # SystemCallFilter = "~@clock @cpu-emulation @debug @obsolete @module @mount @raw-io @reboot @swap @privileged"; }; }; }; diff --git a/modules/services/pipewire.mod.nix b/modules/services/pipewire/module.nix similarity index 100% rename from modules/services/pipewire.mod.nix rename to modules/services/pipewire/module.nix diff --git a/modules/services/plausible/module.nix b/modules/services/plausible/module.nix new file mode 100644 index 0000000..fa1d2e9 --- /dev/null +++ b/modules/services/plausible/module.nix @@ -0,0 +1,39 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.options) mkEnableOption; + cfg = config.modules.system.services.plausible; + + port = 4030; + domain = "analytics.copeberg.org"; +in { + options.modules.system.services.plausible.enable = mkEnableOption "Plausible, an analytics service"; + config = mkIf cfg.enable { + services.plausible = { + enable = true; + server = { + baseUrl = "http://${domain}"; + secretKeybaseFile = "/run/secrets/plausible-secret-key-base"; + disableRegistration = false; + }; + database.postgres = { + dbname = "plausible"; + }; + }; + + services.nginx = { + enable = true; + virtualHosts.${domain} = { + addSSL = true; + enableACME = true; + locations."/" = { + proxyPass = "http://localhost:${toString port}"; + }; + }; + }; + }; +} diff --git a/modules/services/postgresql.mod.nix b/modules/services/postgresql/module.nix similarity index 100% rename from modules/services/postgresql.mod.nix rename to modules/services/postgresql/module.nix diff --git a/modules/services/printing.mod.nix b/modules/services/printing/module.nix similarity index 100% rename from modules/services/printing.mod.nix rename to modules/services/printing/module.nix diff --git a/modules/services/searxng/module.nix b/modules/services/searxng/module.nix new file mode 100644 index 0000000..bfc0e5d --- /dev/null +++ b/modules/services/searxng/module.nix @@ -0,0 +1,119 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib.options) mkEnableOption; + inherit (lib.modules) mkIf; + inherit (builtins) toString; + cfg = config.modules.services.searxng; + port = 4021; +in { + options.modules.services.searxng.enable = mkEnableOption "SearXNG, a private search engine"; + + config = mkIf cfg.enable { + networking.firewall.allowedTCPPorts = [port]; + + services = { + nginx.enable = true; + searx = { + enable = true; + package = pkgs.searxng; + environmentFile = "/srv/data/searxng/super_secret_file"; + settings = { + general = { + name = "Copesearch"; + privacypolicy_url = false; + debug = false; + enable_metrics = false; + }; + + search = { + safe_search = 1; + + formats = ["html" "json" "rss"]; + autocomplete = "google"; # "dbpedia", "duckduckgo", "google", "startpage", "swisscows", "qwant", "wikipedia" - leave blank to turn it off by default + default_lang = "en"; + }; + + ui = { + query_in_title = true; + theme_args.simple_style = "dark"; # auto, dark, light + results_on_new_tab = false; + }; + + server = { + inherit port; + limiter = false; + image_proxy = false; + + # taken from https://github.com/searx/searx/issues/715 + default_http_headers = { + X-Content-Type-Options = "nosniff"; + X-XSS-Protection = "1; mode=block"; + X-Download-Options = "noopen"; + X-Robots-Tag = "noindex, nofollow"; + Referrer-Policy = "no-referrer"; + }; + }; + + # shamelessly stolen from NotAShelf + engines = [ + { + name = "wikipedia"; + engine = "wikipedia"; + shortcut = "w"; + base_url = "https://wikipedia.org/"; + } + { + name = "duckduckgo"; + engine = "duckduckgo"; + shortcut = "ddg"; + } + { + name = "google"; + engine = "google"; + shortcut = "g"; + use_mobile_ui = false; + } + { + name = "archwiki"; + engine = "archlinux"; + shortcut = "aw"; + } + { + name = "github"; + engine = "github"; + categories = "it"; + shortcut = "gh"; + } + { + name = "nixpkgs"; + shortcut = "nx"; + engine = "elasticsearch"; + categories = "dev,nix"; + base_url = "https://nixos-search-5886075189.us-east-1.bonsaisearch.net:443"; + index = "latest-31-nixos-unstable"; + query_type = "match"; + } + ]; + }; + }; + nginx.virtualHosts."search.copeberg.org" = { + locations."/".proxyPass = "http://127.0.0.1:${toString port}"; + extraConfig = '' + access_log /dev/null; + error_log /dev/null; + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + ''; + + quic = true; + forceSSL = true; + enableACME = true; + }; + }; + }; +} diff --git a/modules/services/spotifyd.mod.nix b/modules/services/spotifyd.mod.nix deleted file mode 100644 index 396582f..0000000 --- a/modules/services/spotifyd.mod.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - config, - lib, - ... -}: let - inherit (lib.modules) mkIf; - inherit (config.modules.system) isGraphical; -in { - # TODO: setup - services.spotifyd = mkIf isGraphical { - enable = true; - settings = { - }; - config = { - }; - }; -} diff --git a/modules/services/ssh.mod.nix b/modules/services/ssh/module.nix similarity index 100% rename from modules/services/ssh.mod.nix rename to modules/services/ssh/module.nix diff --git a/modules/services/stalwart.mod.nix b/modules/services/stalwart/module.nix similarity index 100% rename from modules/services/stalwart.mod.nix rename to modules/services/stalwart/module.nix diff --git a/modules/services/usbguard.mod.nix b/modules/services/usbguard/module.nix similarity index 100% rename from modules/services/usbguard.mod.nix rename to modules/services/usbguard/module.nix diff --git a/modules/services/uwsm.mod.nix b/modules/services/uwsm/module.nix similarity index 100% rename from modules/services/uwsm.mod.nix rename to modules/services/uwsm/module.nix diff --git a/modules/services/wayneko.mod.nix b/modules/services/wayneko/module.nix similarity index 100% rename from modules/services/wayneko.mod.nix rename to modules/services/wayneko/module.nix diff --git a/modules/style/colors.mod.nix b/modules/style/colors.nix similarity index 100% rename from modules/style/colors.mod.nix rename to modules/style/colors.nix diff --git a/modules/style/fonts.mod.nix b/modules/style/fonts.nix similarity index 98% rename from modules/style/fonts.mod.nix rename to modules/style/fonts.nix index 1e9ba57..bcf8c43 100644 --- a/modules/style/fonts.mod.nix +++ b/modules/style/fonts.nix @@ -96,7 +96,7 @@ in { symbols-only ; - # inherit fancy-iosevka; + inherit fancy-iosevka; }; fontDir = { # Whether to create a directory with links to all fonts in diff --git a/modules/style/gtk.mod.nix b/modules/style/gtk.nix similarity index 100% rename from modules/style/gtk.mod.nix rename to modules/style/gtk.nix diff --git a/modules/style/module.nix b/modules/style/module.nix new file mode 100644 index 0000000..4bf0376 --- /dev/null +++ b/modules/style/module.nix @@ -0,0 +1,7 @@ +_: { + imports = [ + ./colors.nix + ./fonts.nix + ./gtk.nix + ]; +} diff --git a/modules/style/qt.mod.nix b/modules/style/qt.nix similarity index 100% rename from modules/style/qt.mod.nix rename to modules/style/qt.nix diff --git a/modules/style/quickshell/quickshell.mod.nix b/modules/style/quickshell/module.nix similarity index 100% rename from modules/style/quickshell/quickshell.mod.nix rename to modules/style/quickshell/module.nix diff --git a/modules/style/quickshell/shell/config/Config.qml b/modules/style/quickshell/shell/config/Config.qml index 7b4c1b5..28994a9 100644 --- a/modules/style/quickshell/shell/config/Config.qml +++ b/modules/style/quickshell/shell/config/Config.qml @@ -20,9 +20,9 @@ Singleton { } readonly property QtObject border: QtObject { - readonly property int thickness: 0 + readonly property int thickness: 8 readonly property color color: "#1e1e2e" - readonly property int rounding: 0 + readonly property int rounding: 25 } readonly property QtObject catppuccin: QtObject { diff --git a/modules/style/quickshell/shell/modules/BackgroundImage.qml b/modules/style/quickshell/shell/modules/BackgroundImage.qml deleted file mode 100644 index 9ade40c..0000000 --- a/modules/style/quickshell/shell/modules/BackgroundImage.qml +++ /dev/null @@ -1,28 +0,0 @@ -import QtQuick -import Quickshell -import Quickshell.Wayland - -PanelWindow { - id: root - - exclusionMode: ExclusionMode.Ignore - WlrLayershell.layer: WlrLayer.Background - WlrLayershell.namespace: "shell:background" - - anchors { - top: true - bottom: true - left: true - right: true - } - - Item { - id: background - anchors.fill: parent - Image { - id: image - asynchronous: true - source: "../../../wholefoods.png" - } - } -} diff --git a/modules/style/quickshell/shell/modules/drawers/Drawers.qml b/modules/style/quickshell/shell/modules/drawers/Drawers.qml index 2c6e920..4a53f95 100644 --- a/modules/style/quickshell/shell/modules/drawers/Drawers.qml +++ b/modules/style/quickshell/shell/modules/drawers/Drawers.qml @@ -2,13 +2,16 @@ pragma ComponentBehavior: Bound import Quickshell import Quickshell.Wayland +import Quickshell.Services.Notifications import QtQuick import QtQuick.Effects import "../bar" +import "../volume" +import "../notifications" +import "../../services" import "../../config" -import "../" Variants { model: Quickshell.screens @@ -46,10 +49,10 @@ Variants { // Setting the intersection mode to Xor will invert the mask and make everything in the mask region not clickable and pass through clicks inside it through the window. intersection: Intersection.Xor - // Region { - // item: volume - // intersection: Intersection.Subtract - // } + Region { + item: volume + intersection: Intersection.Subtract + } } anchors { @@ -85,16 +88,17 @@ Variants { id: bar screen: scope.modelData } - } - BackgroundImage { - id: backgroundimage - screen: scope.modelData - } - BackgroundImage { - id: background_overview - screen: scope.modelData - WlrLayershell.namespace: "shell:background-overview" + // VolumeSlider { + // id: volume + // screen: scope.modelData + // } + + // Hover { + // id: hover + // screen: scope.modelData + // bar: bar + // } } } } diff --git a/modules/style/wholefoods.png b/modules/style/wholefoods.png index 865da3d..2c22f75 100644 Binary files a/modules/style/wholefoods.png and b/modules/style/wholefoods.png differ diff --git a/modules/system/boot/lanzaboote.mod.nix b/modules/system/boot/lanzaboote/module.nix similarity index 100% rename from modules/system/boot/lanzaboote.mod.nix rename to modules/system/boot/lanzaboote/module.nix diff --git a/modules/system/boot/boot.mod.nix b/modules/system/boot/module.nix similarity index 100% rename from modules/system/boot/boot.mod.nix rename to modules/system/boot/module.nix diff --git a/modules/system/hardware/bluetooth.mod.nix b/modules/system/hardware/bluetooth.nix similarity index 100% rename from modules/system/hardware/bluetooth.mod.nix rename to modules/system/hardware/bluetooth.nix diff --git a/modules/system/hardware/intel.mod.nix b/modules/system/hardware/cpu/intel.nix similarity index 100% rename from modules/system/hardware/intel.mod.nix rename to modules/system/hardware/cpu/intel.nix diff --git a/modules/system/hardware/cpu/module.nix b/modules/system/hardware/cpu/module.nix new file mode 100644 index 0000000..9b5284e --- /dev/null +++ b/modules/system/hardware/cpu/module.nix @@ -0,0 +1,3 @@ +_: { + imports = [./intel.nix]; +} diff --git a/modules/system/hardware/graphics.mod.nix b/modules/system/hardware/graphics.nix similarity index 100% rename from modules/system/hardware/graphics.mod.nix rename to modules/system/hardware/graphics.nix diff --git a/modules/system/hardware/irqbalance.mod.nix b/modules/system/hardware/irqbalance.mod.nix deleted file mode 100644 index 56f3198..0000000 --- a/modules/system/hardware/irqbalance.mod.nix +++ /dev/null @@ -1,3 +0,0 @@ -_: { - services.irqbalance.enable = true; -} diff --git a/modules/system/hardware/keyboard.mod.nix b/modules/system/hardware/keyboard/default.nix similarity index 100% rename from modules/system/hardware/keyboard.mod.nix rename to modules/system/hardware/keyboard/default.nix diff --git a/modules/system/hardware/module.nix b/modules/system/hardware/module.nix new file mode 100644 index 0000000..0e50590 --- /dev/null +++ b/modules/system/hardware/module.nix @@ -0,0 +1,10 @@ +_: { + imports = [ + ./bluetooth.nix + ./keyboard + ./graphics.nix + ./power.nix + ]; + + services.irqbalance.enable = true; +} diff --git a/modules/system/hardware/power.mod.nix b/modules/system/hardware/power.nix similarity index 100% rename from modules/system/hardware/power.mod.nix rename to modules/system/hardware/power.nix diff --git a/modules/system/hardware/ram.mod.nix b/modules/system/hardware/ram/module.nix similarity index 100% rename from modules/system/hardware/ram.mod.nix rename to modules/system/hardware/ram/module.nix diff --git a/modules/system/hardware/pipewire.mod.nix b/modules/system/hardware/sound/pipewire/module.nix similarity index 100% rename from modules/system/hardware/pipewire.mod.nix rename to modules/system/hardware/sound/pipewire/module.nix diff --git a/modules/system/module.nix b/modules/system/module.nix new file mode 100644 index 0000000..d2ba40a --- /dev/null +++ b/modules/system/module.nix @@ -0,0 +1,14 @@ +{config, ...}: let + machine-id = builtins.substring 0 23 (builtins.hashString "sha256" config.networking.hostName); +in { + system = { + # faster rebuilds + # switch = { + # enable = false; + # }; + + # My state version. + stateVersion = "23.11"; + }; + environment.etc."machine-id".text = "${machine-id}\n"; +} diff --git a/modules/system/nix/documentation.mod.nix b/modules/system/nix/documentation.nix similarity index 100% rename from modules/system/nix/documentation.mod.nix rename to modules/system/nix/documentation.nix diff --git a/modules/system/nix/nix.mod.nix b/modules/system/nix/module.nix similarity index 98% rename from modules/system/nix/nix.mod.nix rename to modules/system/nix/module.nix index 20a9561..7c639af 100644 --- a/modules/system/nix/nix.mod.nix +++ b/modules/system/nix/module.nix @@ -10,6 +10,8 @@ inherit (lib.modules) mkForce; in { imports = [ + ./documentation.nix # nixos documentation + ./nixpkgs.nix # global nixpkgs configuration inputs.determinate.nixosModules.default ]; diff --git a/modules/system/nix/nixpkgs.mod.nix b/modules/system/nix/nixpkgs.nix similarity index 100% rename from modules/system/nix/nixpkgs.mod.nix rename to modules/system/nix/nixpkgs.nix diff --git a/modules/system/os/impermanence.mod.nix b/modules/system/os/impermanence/module.nix similarity index 100% rename from modules/system/os/impermanence.mod.nix rename to modules/system/os/impermanence/module.nix diff --git a/modules/system/os/networking/dns.mod.nix b/modules/system/os/networking/dns.nix similarity index 100% rename from modules/system/os/networking/dns.mod.nix rename to modules/system/os/networking/dns.nix diff --git a/modules/system/os/networking/firewall.mod.nix b/modules/system/os/networking/firewall.nix similarity index 100% rename from modules/system/os/networking/firewall.mod.nix rename to modules/system/os/networking/firewall.nix diff --git a/modules/system/os/networking/networking.mod.nix b/modules/system/os/networking/module.nix similarity index 92% rename from modules/system/os/networking/networking.mod.nix rename to modules/system/os/networking/module.nix index ee58659..00f6b6f 100644 --- a/modules/system/os/networking/networking.mod.nix +++ b/modules/system/os/networking/module.nix @@ -1,6 +1,11 @@ {config, ...}: let inherit (config.modules.other.system) username; in { + imports = [ + ./networkmanager.nix + ./dns.nix + ./firewall.nix + ]; networking = { enableIPv6 = true; diff --git a/modules/system/os/networking/networkmanager.mod.nix b/modules/system/os/networking/networkmanager.nix similarity index 100% rename from modules/system/os/networking/networkmanager.mod.nix rename to modules/system/os/networking/networkmanager.nix diff --git a/modules/system/os/security/security.mod.nix b/modules/system/os/security/module.nix similarity index 87% rename from modules/system/os/security/security.mod.nix rename to modules/system/os/security/module.nix index b609069..4ecdcf6 100644 --- a/modules/system/os/security/security.mod.nix +++ b/modules/system/os/security/module.nix @@ -1,4 +1,8 @@ {pkgs, ...}: { + imports = [ + ./sudo.nix + ]; + security = { polkit = { enable = true; diff --git a/modules/system/os/security/sudo.mod.nix b/modules/system/os/security/sudo.nix similarity index 100% rename from modules/system/os/security/sudo.mod.nix rename to modules/system/os/security/sudo.nix diff --git a/modules/system/os/systemd.mod.nix b/modules/system/os/systemd/module.nix similarity index 100% rename from modules/system/os/systemd.mod.nix rename to modules/system/os/systemd/module.nix diff --git a/modules/wms/wayland/hyprland/binds.nix b/modules/wms/wayland/hyprland/binds.nix new file mode 100644 index 0000000..92d4489 --- /dev/null +++ b/modules/wms/wayland/hyprland/binds.nix @@ -0,0 +1,125 @@ +{ + inputs, + lib, + pkgs, + ... +}: let + inherit (builtins) map genList toString; + inherit (lib.meta) getExe getExe'; +in { + programs.hyprland.settings = { + # Keybinds + bind = + # workspaces + # split-workspace is because of the split-workspace plugin + map ( + i: let + mod = a: b: a - (b * (a / b)); + key = toString (mod i 10); + workspace = toString i; + in "$mainMod, ${key}, split:workspace, ${workspace}" + ) (genList (i: i + 1) 10) + # split-movetoworkspacesilent + ++ map ( + i: let + mod = a: b: a - (b * (a / b)); + key = toString (mod i 10); + workspace = toString i; + in "$mainMod SHIFT, ${key}, split:movetoworkspacesilent, ${workspace}" + ) (genList (i: i + 1) 10) + ++ [ + "$mainMod, RETURN, exec, foot" + "$mainMod, Q, killactive" + "$mainMod, F, fullscreen, 0" + "$mainMod, D, exec, ${getExe' inputs.quickshell.packages.${pkgs.stdenv.system}.default "quickshell"} msg launcher open" + "$mainMod, SPACE, togglefloating, active" + "$mainMod ALT, L, exec, ${getExe pkgs.hyprlock}" + + # Screenshotting + "$mainMod, S, exec, ${getExe pkgs.grimblast} copy area" # only copy + "$mainMod SHIFT, S, exec, ${getExe pkgs.grimblast} save area - | ${getExe pkgs.satty} -f -" # edit with satty + + # Extract text from screen + "$mainMod, T, exec, ${getExe pkgs.grimblast} save area - | ${getExe pkgs.tesseract} - - | ${getExe' pkgs.wl-clipboard "wl-copy"}" + + # File manager + "$mainMod, E, exec, ${pkgs.xfce.thunar}/bin/thunar" + + # Toggle the three different special workspaces. + "$mainMod, N, togglespecialworkspace, nixos" + "$mainMod, X, togglespecialworkspace, keepassxc" + "$mainMod, V, togglespecialworkspace, audio" + + # Reload hyprland + "$mainMod, R, exec, ${getExe' pkgs.hyprland "hyprctl"} reload" + + # Grab rouge windows, which may persist after disconnecting a monitor. + "$mainMod, G, split:grabroguewindows" + + # Restart waybar + "$mainMod CONTROL, B, exec, ${pkgs.procps}/bin/pkill waybar || ${getExe pkgs.waybar}" + "$mainMod CONTROL, Q, exec, ${pkgs.procps}/bin/pkill quickshell || ${getExe' inputs.quickshell.packages.${pkgs.stdenv.system}.default "quickshell"}" + ]; + + binde = [ + # window focus + "$mainMod, H, movefocus, l" + "$mainMod, J, movefocus, d" + "$mainMod, K, movefocus, u" + "$mainMod, L, movefocus, r" + + # Move Windows + "$mainMod SHIFT, H, movewindow, l" + "$mainMod SHIFT, J, movewindow, d" + "$mainMod SHIFT, K, movewindow, u" + "$mainMod SHIFT, L, movewindow, r" + ]; + + # Media controls + bindl = let + volumectl = getExe' pkgs.avizo "volumectl"; + playerctl = getExe pkgs.playerctl; + play-pause = "${playerctl} play-pause"; + stop = "${playerctl} stop"; + prev = "${playerctl} previous"; + next = "${playerctl} next"; + toggle-mute = "${volumectl} toggle-mute"; + toggle-mic-mute = "${volumectl} toggle-mute"; + in [ + ", XF86AudioMedia, exec, ${play-pause}" + ", XF86AudioPlay, exec, ${play-pause}" + ", XF86AudioStop, exec, ${stop}" + ", XF86AudioPrev, exec, ${prev}" + ", XF86AudioNext, exec, ${next}" + ", XF86AudioMute, exec, ${toggle-mute}" + ", XF86AudioMicMute, exec, ${toggle-mic-mute}" + ]; + + # locked + repeat + bindle = let + volumectl = getExe' pkgs.avizo "volumectl"; + lightctl = getExe' pkgs.avizo "lightctl"; + volume_up = "${volumectl} -u up"; + volume_down = "${volumectl} -u down"; + brightness_up = "${lightctl} up"; + brightness_down = "${lightctl} down"; + in [ + ", XF86AudioRaiseVolume, exec, ${volume_up}" + ", XF86AudioLowerVolume, exec, ${volume_down}" + ", XF86MonBrightnessUp, exec, ${brightness_up}" + ", XF86MonBrightnessDown, exec, ${brightness_down}" + ]; + + # Mouse settings + bindm = [ + "$mainMod, mouse:272, movewindow" + "$mainMod, mouse:273, resizewindow" + ]; + + # Some more movement-related settings + binds = { + pass_mouse_when_bound = false; + movefocus_cycles_fullscreen = false; + }; + }; +} diff --git a/modules/wms/wayland/hyprland/decorations.nix b/modules/wms/wayland/hyprland/decorations.nix new file mode 100644 index 0000000..ebf53a8 --- /dev/null +++ b/modules/wms/wayland/hyprland/decorations.nix @@ -0,0 +1,70 @@ +_: { + programs.hyprland.settings = { + #Decoration settings + decoration = { + rounding = 10; + rounding_power = 3; + blur = { + enabled = true; + xray = true; + size = 3; + passes = 2; + }; + }; + # Bezier curves for aninmations. + # Generate your own at https://www.cssportal.com/css-cubic-bezier-generator/ + bezier = [ + "dupa, 0.1, 0.9, 0.1, 1.05" + ]; + # Hyprland anomations, using the above bezier curves + animations = { + enabled = true; + }; + animation = [ + "windows, 1, 4, dupa, popin" + "windowsOut, 1, 4, dupa, slide" + "border, 1, 15, default" + "fade, 1, 10, default" + "workspaces, 1, 5, dupa, slidevert" + ]; + + cursor = { + hide_on_key_press = true; + no_hardware_cursors = true; + }; + + misc = { + enable_swallow = true; + swallow_regex = "foot"; + focus_on_activate = true; + + vrr = 1; + vfr = true; + + animate_manual_resizes = false; + animate_mouse_windowdragging = false; + force_default_wallpaper = 0; + }; + + # Window rules for some programs. + windowrulev2 = [ + "float, class:^(Tor Browser)$" + "float, class:^(mpv)$" + "float, class:^(imv)$" + "float, title:^(Picture-in-Picture)$" + "float, title:^(.*)(Choose User Profile)(.*)$" + "float, title:^(blob:null/)(.*)$" + "float, class:^(xdg-desktop-portal-gtk)$" + "float, class:^(code), title: ^(Open*)" + "size 70% 70%, class:^(code), title: ^(Open*)" + "center, class: ^(code), title: ^(Open*)" + "float, class:^(org.keepassxc.KeePassXC)$" + ]; + + layerrule = [ + "blur, shell:launcher" + "ignorezero, shell:launcher" + "animation popin 90%, shell:launcher" + ]; + }; +} diff --git a/modules/wms/wayland/hyprland/exec.nix b/modules/wms/wayland/hyprland/exec.nix new file mode 100644 index 0000000..7d56010 --- /dev/null +++ b/modules/wms/wayland/hyprland/exec.nix @@ -0,0 +1,36 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: let + # inherit (config.modules.style) cursor; + inherit (lib.meta) getExe getExe'; +in { + programs.hyprland.settings = { + # Hyprland settings + # Programs which get executed at Hyprland start. + exec-once = [ + "uwsm finalize" + + "hyprctl setcursor BreezeX-RosePine-Linux 32" + "hyprctl seterror disable" + + "[workspace special:keepassxc; silent;tile] ${pkgs.keepassxc}/bin/keepassxc" + "[workspace special:audio; silent;tile] ${pkgs.pwvucontrol}/bin/pwvucontrol" + + "${pkgs.swww}/bin/swww-daemon" + + "${pkgs.avizo}/bin/avizo-service" + + "${pkgs.wlsunset}/bin/wlsunset -S 06:00 -s 20:00" + "${pkgs.lxqt.lxqt-policykit}/bin/lxqt-policykit-agent" + "hyprctl dispatch split-workspace 1" + + "${getExe pkgs.hyprlock}" + + "${getExe' inputs.quickshell.packages.${pkgs.stdenv.system}.default "quickshell"}" + ]; + }; +} diff --git a/modules/wms/wayland/hyprland/module.nix b/modules/wms/wayland/hyprland/module.nix new file mode 100644 index 0000000..2ecec85 --- /dev/null +++ b/modules/wms/wayland/hyprland/module.nix @@ -0,0 +1,58 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.options) mkOption; + inherit (lib.types) bool; + + cfg = config.modules.desktops.hyprland; +in { + imports = [ + ./binds.nix + ./decorations.nix + ./exec.nix + ./settings.nix + ./workspaces.nix + inputs.hyprland.nixosModules.default + ]; + + options.modules.desktops.hyprland = { + enable = mkOption { + type = bool; + default = false; + description = '' + Whether to enable Hyprland wayland compositor. + ''; + }; + }; + + config = mkIf cfg.enable { + programs.hyprland = { + enable = true; + xwayland.enable = true; + package = pkgs.hyprland; + portalPackage = pkgs.xdg-desktop-portal-hyprland; + plugins = [ + pkgs.hyprlandPlugins.hyprsplit + ]; + withUWSM = true; + }; + # xdg Portal + xdg.portal = { + enable = true; + xdgOpenUsePortal = true; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + pkgs.xdg-desktop-portal-hyprland + ]; + config = { + common.default = ["*"]; + hyprland.default = ["gtk" "hyprland"]; + }; + }; + }; +} diff --git a/modules/wms/wayland/hyprland/settings.nix b/modules/wms/wayland/hyprland/settings.nix new file mode 100644 index 0000000..fa65c2b --- /dev/null +++ b/modules/wms/wayland/hyprland/settings.nix @@ -0,0 +1,89 @@ +{ + config, + lib, + ... +}: let + inherit (builtins) toString; + inherit (lib.attrsets) mapAttrsToList; + + inherit (config.modules.style.colorScheme) colors; + inherit (config.modules.system.hardware) monitors; +in { + config = { + programs.hyprland = { + settings = { + # Hyprland settings + "$mainMod" = "SUPER"; + + # Monitor config + # Thanks Poz for inspiration, using an attrSet is actually much smarter + # than using a normal list. + monitor = + mapAttrsToList ( + name: m: let + w = toString m.resolution.x; + h = toString m.resolution.y; + refreshRate = toString m.refreshRate; + x = toString m.position.x; + y = toString m.position.y; + scale = toString m.scale; + in "${name},${w}x${h}@${refreshRate},${x}x${y},${scale}" + ) + monitors; + + # Input settings + input = { + kb_layout = "us,ru"; + kb_variant = ",phonetic_winkeys"; + kb_options = "grp:rctrl_rshift_toggle, compose:102"; + + follow_mouse = true; + + repeat_rate = 60; + repeat_delay = 200; + + touchpad = { + disable_while_typing = true; + }; + }; + + gestures = { + workspace_swipe = true; + }; + + general = { + layout = "dwindle"; + gaps_in = 0; + gaps_out = 0; + border_size = 2; + + "col.active_border" = "0xff${colors.base07}"; + no_border_on_floating = true; + }; + + # No annoying startup errors + debug.suppress_errors = true; + + ecosystem.no_update_news = true; + + plugin = { + hyprsplit = { + num_workspaces = 10; + persistent_workspaces = true; + }; + dynamic-cursors = { + enabled = true; + + mode = "rotate"; + rotate = { + length = 20; + offset = 0.0; + }; + threshhold = 2; + shake.enabled = false; + }; + }; + }; + }; + }; +} diff --git a/modules/wms/wayland/hyprland/workspaces.nix b/modules/wms/wayland/hyprland/workspaces.nix new file mode 100644 index 0000000..d04397d --- /dev/null +++ b/modules/wms/wayland/hyprland/workspaces.nix @@ -0,0 +1,48 @@ +{ + config, + lib, + ... +}: let + inherit (builtins) map genList attrNames toString; + inherit (lib.lists) imap0 flatten; + inherit (lib.strings) optionalString; + + inherit (config.modules.system.hardware) monitors; +in { + programs.hyprland.settings = { + # INFO: This is a custom function to map all of my monitors to workspaces. + # Since I use split-monitor-workspaces, I map 10 workspaces to each monitor + # and set the first one to be the default one. + # To be able to use this for a varying amount of monitors we do some nasty trickery. + # This was inspired by jacekpoz, whose configuration is linked in this project's README.md. + workspace = + ( + # We use imap0 insted of map because imap0 starts indexing at zero as oppsed to one with map. + (imap0 (monitorIndex: monitorName: ( + map ( + i: let + # we define our own modulo operation for this, + # since only the first workspace on each monitor is the default workspace. + mod = a: b: a - (b * (a / b)); + workspace = toString i; + isDefault = (mod i 10) == 1; # 11, 21, 31, ... + in "${workspace}, monitor:${monitorName}${optionalString isDefault ", default:true"}" + ) + # we generate a list of 10 elements for each monitor. We have to add 1 each time since genList starts indexing at 0. + # also, we add the monitorIndex * 10 to get 10 workspaces for each individual monitor. + (genList (i: i + 1 + (10 * monitorIndex)) 10) + )) + # our attrSet of different monitors + (attrNames monitors)) + # We're creating several lists of workspace assignments, one for each monitor, + # and have to merge them into one big list. + |> flatten + ) + # These are my two special workspaces + ++ [ + "special:nixos, decorate:false" + "special:keepassxc, decorate:false" + "special:audio, decorate:false" + ]; + }; +} diff --git a/modules/wms/portal.mod.nix b/modules/wms/wayland/module.nix similarity index 88% rename from modules/wms/portal.mod.nix rename to modules/wms/wayland/module.nix index 527d2d3..3dbc8c6 100644 --- a/modules/wms/portal.mod.nix +++ b/modules/wms/wayland/module.nix @@ -4,9 +4,14 @@ pkgs, ... }: let - inherit (lib.modules) mkIf; + inherit (lib.modules) mkForce mkIf; + inherit (lib.options) mkEnableOption; inherit (lib.lists) optional; in { + imports = [ + ./variables.nix + ]; + xdg.portal = { enable = true; # Sets environment variable NIXOS_XDG_OPEN_USE_PORTAL to 1. @@ -43,7 +48,8 @@ in { "org.freedesktop.impl.portal.FileChooser" = ["kde"]; }; }; - }; - environment.variables = { + configPackages = [ + # pkgs.niri + ]; }; } diff --git a/modules/wms/niri/config.kdl b/modules/wms/wayland/niri/config.kdl similarity index 88% rename from modules/wms/niri/config.kdl rename to modules/wms/wayland/niri/config.kdl index d7fffb0..d87585a 100644 --- a/modules/wms/niri/config.kdl +++ b/modules/wms/wayland/niri/config.kdl @@ -66,7 +66,6 @@ layout { default-column-width { proportion 0.5 } - background-color "transparent" } // xwayland stuff spawn-at-startup "xwayland-satellite" @@ -74,6 +73,8 @@ spawn-at-startup "avizo-service" spawn-at-startup "keepassxc" spawn-at-startup "startxfce4" spawn-at-startup "bash" "-c" "quickshell --path ~/repos/projects/nichts/modules/style/quickshell/shell" +spawn-at-startup "swww-daemon" +spawn-at-startup "swww-daemon" "--namespace" "overview" environment { DISPLAY ":0" } @@ -92,8 +93,27 @@ overview { zoom 0.65 backdrop-color "#777777" } +workspace "main" +workspace "scratch" +workspace "browser" +workspace "social" +workspace "keepassxc" +workspace "infra" +workspace "multimedia" animations { // off + +} +// Open the Firefox picture-in-picture player as floating by default. +window-rule { + match app-id="librewolf$" title="^Picture-in-Picture$" + open-floating true + open-on-workspace "browser" +} +window-rule { + match app-id="org.keepassxc.KeePassXC" + block-out-from "screen-capture" + open-on-workspace "keepassxc" } window-rule { match app-id="unset" @@ -107,14 +127,20 @@ window-rule { match app-id="org.freedesktop.impl.portal.desktop.kde" open-floating true } -window-rule { - draw-border-with-background false -} // Fix discord screencasting debug { wait-for-frame-completion-in-pipewire } +// Always focus the KeePassXC-Browser unlock dialog. +// +// This dialog opens parented to the KeePassXC window rather than the browser, +// so it doesn't get auto-focused by default. +window-rule { + match app-id="^org\\.keepassxc\\.KeePassXC$" title="^KeePassXC - Browser Access Request$" + match app-id="^org\\.keepassxc\\.KeePassXC$" title="^Unlock Database - KeePassXC$" + open-focused true +} hotkey-overlay { skip-at-startup } @@ -127,6 +153,9 @@ binds { Mod+Shift+Slash { show-hotkey-overlay } + // Mod+Return { + // spawn "foot" + // } Mod+Return { spawn "ghostty" } @@ -375,6 +404,9 @@ binds { Mod+C { center-column } + Mod+X { + focus-workspace "keepassxc" + } Mod+Minus { set-column-width "-10%" } @@ -407,13 +439,9 @@ binds { Ctrl+Print { screenshot-screen } - // Alt+Print { - // spawn "sh" "-c" "" - // } - Mod+T { - screenshot + Alt+Print { + screenshot } - // "$mainMod, T, exec, ${getExe pkgs.grimblast} save area - | ${getExe pkgs.tesseract} - - | ${getExe' pkgs.wl-clipboard "wl-copy"}" Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit } diff --git a/modules/wms/niri/niri.mod.nix b/modules/wms/wayland/niri/module.nix similarity index 64% rename from modules/wms/niri/niri.mod.nix rename to modules/wms/wayland/niri/module.nix index 320f273..e3bd50b 100644 --- a/modules/wms/niri/niri.mod.nix +++ b/modules/wms/wayland/niri/module.nix @@ -1,15 +1,37 @@ { config, + inputs, lib, pkgs, ... }: let inherit (lib.modules) mkForce mkIf; inherit (lib.options) mkEnableOption; - inherit (config.modules.system) isGraphical; + inherit (config.modules.system) isGraphical; cfg = config.modules.desktops.niri; + latestNightly = (inputs.rust-overlay.lib.mkRustBin {} pkgs).nightly.latest.default; + rustPlatform = pkgs.makeRustPlatform { + rustc = latestNightly; + cargo = latestNightly; + stdenv = pkgs.clangStdenv; + }; + + new-swww = (pkgs.swww.override {inherit rustPlatform;}).overrideAttrs (prev: { + src = pkgs.fetchFromGitHub { + inherit (prev.src) owner repo; + rev = "805a355da574fed46e664606660e2499f02e2174"; + hash = "sha256-+sdV7NFueCeBLrsl7lrqzlG5tPNqDe/zlcIb8TYxQl8="; + }; + doInstallCheck = false; + + cargoDeps = pkgs.rustPlatform.fetchCargoVendor { + inherit (new-swww) src; + hash = "sha256-YH2gcy/8EtUmTHzwt38bBOFX3saN1wHIGQ5/eWqvSeM="; + }; + }); + patched-niri = pkgs.niri.overrideAttrs (prev: { src = pkgs.fetchFromGitHub { inherit (prev.src) owner repo; @@ -45,13 +67,8 @@ in { environment.etc."niri/config.kdl".source = ./config.kdl; environment.systemPackages = builtins.attrValues { - inherit - (pkgs) - xwayland-satellite - avizo - playerctl - wl-clipboard - ; + inherit (pkgs) xwayland-satellite avizo playerctl; + inherit new-swww; }; }; } diff --git a/modules/wms/wayland/sway/module.nix b/modules/wms/wayland/sway/module.nix new file mode 100644 index 0000000..cbaa95b --- /dev/null +++ b/modules/wms/wayland/sway/module.nix @@ -0,0 +1,7 @@ +{ + config, + lib, + pkgs, + ... +}: { +} diff --git a/modules/wms/variables.mod.nix b/modules/wms/wayland/variables.nix similarity index 96% rename from modules/wms/variables.mod.nix rename to modules/wms/wayland/variables.nix index 0ed61cd..9fbf15f 100644 --- a/modules/wms/variables.mod.nix +++ b/modules/wms/wayland/variables.nix @@ -9,7 +9,7 @@ cfg = config.modules.wms.wayland; in { options.modules.wms.wayland.enable = mkEnableOption "wayland"; - config = mkIf true { + config = mkIf cfg.enable { environment.variables = { NIXOS_OZONE_WL = "1"; __GL_GSYNC_ALLOWED = "0"; diff --git a/packages/fish/packages.nix b/packages/fish/packages.nix index f4be9ad..b78b7d0 100644 --- a/packages/fish/packages.nix +++ b/packages/fish/packages.nix @@ -46,6 +46,7 @@ builtins.attrValues { inetutils tokei starship + onefetch wget cpufetch watchman diff --git a/packages/fish/starship.nix b/packages/fish/starship.nix index 915a0d4..a3175e7 100644 --- a/packages/fish/starship.nix +++ b/packages/fish/starship.nix @@ -1,57 +1,38 @@ { add_newline = false; - aws.symbol = " "; - buf.symbol = " "; - bun.symbol = " "; - c.symbol = " "; - cmake.symbol = " "; - conda.symbol = " "; - cpp.symbol = " "; - crystal.symbol = " "; - dart.symbol = " "; - deno.symbol = " "; - directory.read_only = " 󰌾"; - docker_context.symbol = " "; - elixir.symbol = " "; - elm.symbol = " "; - fennel = {symbol = " ";}; - fossil_branch = {symbol = " ";}; - gcloud = {symbol = " ";}; - git_branch = {symbol = " ";}; - git_commit = {tag_symbol = "  ";}; - golang.symbol = " "; - gradle = {symbol = " ";}; - guix_shell = {symbol = " ";}; - haskell = {symbol = " ";}; - haxe = {symbol = " ";}; - hg_branch = {symbol = " ";}; - hostname = {ssh_symbol = " ";}; - java = {symbol = " ";}; - julia = {symbol = " ";}; - kotlin = {symbol = " ";}; - lua = {symbol = " ";}; - memory_usage = {symbol = "󰍛 ";}; - meson = {symbol = "󰔷 ";}; - nim = {symbol = "󰆥 ";}; - nix_shell = {symbol = " ";}; - nodejs = {symbol = " ";}; - ocaml = {symbol = " ";}; - os = { - symbols = { - Linux = " "; - NixOS = " "; - }; + command_timeout = 2000; + format = "$hostname$username$directory$shell$nix_shell$jobs$character"; + scan_timeout = 1; + + character = { + error_symbol = "[λ](bold red)"; + success_symbol = "[λ](bold green)"; }; - package = {symbol = "󰏗 ";}; - perl = {symbol = " ";}; - php = {symbol = " ";}; - pijul_channel = {symbol = " ";}; - pixi = {symbol = "󰏗 ";}; - python = {symbol = " ";}; - rlang = {symbol = "󰟔 ";}; - ruby = {symbol = " ";}; - rust = {symbol = "󱘗 ";}; - scala = {symbol = " ";}; - swift = {symbol = " ";}; - zig = {symbol = " ";}; + directory = { + format = "[](bold green) [$path]($style) "; + truncation_length = 2; + }; + + direnv = { + disabled = false; + }; + + git_status = { + disabled = true; + }; + + hostname = { + disabled = false; + format = "@[$hostname](bold blue) "; + ssh_only = true; + }; + + c.symbol = "[ ](black)"; + lua.symbol = "[ ](blue) "; + nix_shell.symbol = "[󱄅 ](blue) "; + nodejs.symbol = "[󰎙 ](yellow)"; + package.symbol = "📦 "; + python.symbol = "[ ](blue) "; + rust.symbol = "[ ](red) "; + username.format = "[$user]($style) in "; } diff --git a/packages/helix/colorscheme.nix b/packages/helix/colorscheme.nix index b90f7c4..889f241 100644 --- a/packages/helix/colorscheme.nix +++ b/packages/helix/colorscheme.nix @@ -1,4 +1,4 @@ { - inherits = "gruvbox_dark_hard"; + inherits = "catppuccin_mocha"; "ui.background" = {}; } diff --git a/packages/helix/default.nix b/packages/helix/default.nix index 866684e..7f4bffb 100644 --- a/packages/helix/default.nix +++ b/packages/helix/default.nix @@ -44,27 +44,24 @@ custom-helix = (helix.override {inherit rustPlatform;}).overrideAttrs (finalAttrs: previousAttrs: { - version = "25.07.1"; + version = "25.06.1"; src = fetchzip { url = "https://github.com/bloxx12/helix/releases/download/${finalAttrs.version}/helix-${finalAttrs.version}-source.tar.xz"; - hash = "sha256-OLCJPleRHhQbHOm8EnMWDBV5qG4PKGCUhr4y8mSkvpg="; + hash = "sha256-941moaBUF+aGsbFapK1cp5+NFdecSfRCTdnVUtkDQps="; stripRoot = false; }; - RUSTFLAGS = "-Ctarget-cpu=native"; + cargoBuildFeatures = ["unicode-lines"]; + RUSTFLAGS = "-Ctarget-cpu=native -Clto=fat"; doInstallCheck = false; cargoDeps = rustPlatform.fetchCargoVendor { inherit (custom-helix) src; - hash = "sha256-eVZVPyIk+kBq5hh+bzTveng6mb+6XAnCp0OAI1c+ObI="; + hash = "sha256-w07ZV1tR3lzYz4N+hI9alvFp0AHCcsItPRhVt9Sluo8="; }; }); - new-deadnix = deadnix.overrideAttrs (finalAttrs: previousAttrs: { - - }); - toml = formats.toml {}; helix-languages = callPackage ./languages.nix {inherit lib;}; @@ -172,6 +169,7 @@ kdlfmt + deadnix # zig language server zls ]; diff --git a/packages/helix/languages.nix b/packages/helix/languages.nix index b585f6a..c71a6e0 100644 --- a/packages/helix/languages.nix +++ b/packages/helix/languages.nix @@ -28,7 +28,7 @@ toml = formats.toml {}; # a newer nil version, for pipes support. - new-nil = nil.overrideAttrs (_: { + newer-nil = nil.overrideAttrs (_: { version = "unstable-02-06-2025"; src = fetchFromGitHub { @@ -38,24 +38,11 @@ hash = "sha256-ggXU3RHv6NgWw+vc+HO4/9n0GPufhTIUjVuLci8Za8c="; }; cargoDeps = rustPlatform.fetchCargoVendor { - inherit (new-nil) src; + inherit (newer-nil) src; hash = "sha256-uZsLlFU9GKLvFllF7Kf5Q7HfN26KQojf4rvOb9p7Rjs="; }; }); - new-deadnix = deadnix.overrideAttrs (finalAttrs: previousAttrs: { - version = "unstable-15-07-2025"; - src = fetchFromGitHub { - owner = "astro"; - repo = "deadnix"; - rev = "d75457b95d7cfa82fcd60970939f76fccfce19e5"; - hash = "sha256-O/z2neAXL8JNkGosvxC+DyZnnJ8zYP9XHApxHVmlzfY="; - }; - cargoDeps = rustPlatform.fetchCargoVendor { - inherit (new-deadnix) src; - hash = "sha256-O8yhqyPflOvQXAA19k1XpbrHysgV5VNWLBX0l5Q5GkM="; - }; - }); helix-languages = { language = let mark = lang: { @@ -218,12 +205,12 @@ }; nil = { - command = getExe new-nil; + command = getExe newer-nil; # alejandro config.nil.formatting.command = ["${getExe alejandra}" "-q"]; }; deadnix = { - command = getExe new-deadnix; + command = getExe deadnix; }; scls = {