diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml index a2224c0..925cf06 100644 --- a/.forgejo/workflows/build.yaml +++ b/.forgejo/workflows/build.yaml @@ -7,15 +7,5 @@ jobs: steps: - uses: actions/checkout@v4 name: Checkout repository - - name: Attic login - run: attic login nixfleet http://sisko.wg.aciceri.dev:8081 ${{secrets.ATTIC_NIXFLEET_TOKEN}} - - name: Setup SSH - run: | - mkdir -p ~/.ssh - echo "${{secrets.FORGEJO_SSH_KEY}}" > ~/.ssh/id_ed25519 - chmod 600 ~/.ssh/id_ed25519 - ssh-keyscan github.com >> ~/.ssh/known_hosts - - name: Build with nix (x86_64-linux) - run: nix-fast-build --no-nom --systems "x86_64-linux aarch64-linux" --attic-cache "nixfleet" --skip-cached --result-file result.json || true - - name: Report checks - run: report-checks + - name: Build with nix + run: nix-fast-build --no-nom --systems "x86_64-linux aarch64-linux" diff --git a/.forgejo/workflows/update-flake-lock.yaml b/.forgejo/workflows/update-flake-lock.yaml index abe16bd..eadba29 100644 --- a/.forgejo/workflows/update-flake-lock.yaml +++ b/.forgejo/workflows/update-flake-lock.yaml @@ -1,7 +1,7 @@ name: update-flake-lock on: schedule: - - cron: "0 15 * * 1" # weekly on Monday at 15:00 + - cron: '0 15 * * *' # daily at 15:00 jobs: lockfile: @@ -32,4 +32,4 @@ jobs: --title "Update flake's lockfile" \ --description "Check the commit description for inputs deltas" \ --assignees aciceri \ - || echo "PR already existing" + || echo "PR already existing" diff --git a/.gitignore b/.gitignore index f7fb3ae..6aecdb6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ result .direnv .pre-commit-config.yaml *.qcow2 -result* \ No newline at end of file diff --git a/checks/default.nix b/checks/default.nix index f82204c..38df4ee 100644 --- a/checks/default.nix +++ b/checks/default.nix @@ -3,67 +3,33 @@ self, lib, ... -}: -{ +}: { imports = [ inputs.treefmt-nix.flakeModule - inputs.git-hooks-nix.flakeModule + inputs.pre-commit-hooks.flakeModule ]; - perSystem = - { config, pkgs, ... }: - { - treefmt.config = { - projectRootFile = ".git/config"; - flakeFormatter = true; - flakeCheck = true; - programs = { - nixfmt.enable = true; - prettier.enable = true; - black.enable = true; - shfmt.enable = true; - }; - settings.global.excludes = [ - "*.age" - "*.svg" - "*.png" - "*.jpg" - "*.bin" - "*.el" - "*.org" - ".envrc" - "*.conf" - ]; - }; - - pre-commit.settings = { - hooks.treefmt = { - enable = true; - package = config.treefmt.build.wrapper; - }; - }; - packages.push-to-cache = - let - allChecks = with self.checks; x86_64-linux // aarch64-linux; - checks = builtins.removeAttrs allChecks [ "push-to-cache" ]; - in - pkgs.writeShellScriptBin "push-to-cache.sh" '' - attic push $1 --stdin --jobs 64 << EOF - ${lib.concatStringsSep "\n" ( - builtins.map (builtins.unsafeDiscardStringContext) (builtins.attrValues checks) - )} - EOF - ''; + perSystem = _: { + treefmt.config = { + projectRootFile = ".git/config"; + programs.alejandra.enable = true; }; - flake.checks = - let - build = _: nc: nc.config.system.build.toplevel; - in - { - x86_64-linux = (lib.mapAttrs build { inherit (self.nixosConfigurations) picard pike kirk; }); - aarch64-linux = lib.mapAttrs build { - inherit (self.nixosConfigurations) sisko; # pbp; - }; + pre-commit.settings.hooks = { + alejandra.enable = true; + # deadnix.enable = true; + # statix.enable = true; }; + }; + + flake.checks = let + build = _: nc: nc.config.system.build.toplevel; + in { + x86_64-linux = lib.mapAttrs build { + inherit (self.nixosConfigurations) picard; + }; + aarch64-linux = lib.mapAttrs build { + inherit (self.nixosConfigurations) sisko; #pbp; + }; + }; } diff --git a/ci/default.nix b/ci/default.nix new file mode 100644 index 0000000..48a1ad1 --- /dev/null +++ b/ci/default.nix @@ -0,0 +1,24 @@ +{inputs, ...}: { + imports = [ + inputs.hercules-ci-effects.flakeModule + ]; + herculesCI.ciSystems = [ + "x86_64-linux" + "aarch64-linux" + ]; + hercules-ci.flake-update = { + enable = true; + updateBranch = "updated-flake-lock"; + createPullRequest = true; + autoMergeMethod = "rebase"; + baseMerge = { + enable = true; + method = "rebase"; + }; + when = { + minute = 45; + hour = 13; + dayOfWeek = ["Mon" "Tue" "Wed" "Thu" "Fri" "Sat" "Sun"]; + }; + }; +} diff --git a/flake.lock b/flake.lock index 8a943e3..af746a1 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1747575206, - "narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=", + "lastModified": 1718371084, + "narHash": "sha256-abpBi61mg0g+lFFU0zY4C6oP6fBwPzbHPKBGw676xsA=", "owner": "ryantm", "repo": "agenix", - "rev": "4835b1dc898959d8547a871ef484930675cb47f1", + "rev": "3a56735779db467538fb2e577eda28a9daacaca6", "type": "github" }, "original": { @@ -21,37 +21,58 @@ "type": "github" } }, - "catppuccin": { + "arion": { "inputs": { + "flake-parts": "flake-parts", + "haskell-flake": "haskell-flake", + "hercules-ci-effects": "hercules-ci-effects", "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1749223974, - "narHash": "sha256-/GAQYRW1duU81KG//2wI9ax8EkHVG/e1UOD97NdwLOY=", - "owner": "catppuccin", - "repo": "nix", - "rev": "3a42cd79c647360ee8742659e42aeec0947dd3b4", + "lastModified": 1719208883, + "narHash": "sha256-Iu4tTrxobGwOAdwf67unaZtUJ2ETREi34bnZRotT0T4=", + "owner": "hercules-ci", + "repo": "arion", + "rev": "01777136c6e15251d2a2f2b72a5609cea7d42f29", "type": "github" }, "original": { - "owner": "catppuccin", - "repo": "nix", + "owner": "hercules-ci", + "repo": "arion", "type": "github" } }, - "crane": { + "ccrEmacs": { + "inputs": { + "emacs-overlay": "emacs-overlay", + "extra-package-agenix-el": "extra-package-agenix-el", + "extra-package-combobulate": "extra-package-combobulate", + "extra-package-copilot": "extra-package-copilot", + "extra-package-gptel": "extra-package-gptel", + "extra-package-indent-bars": "extra-package-indent-bars", + "extra-package-meow-tree-sitter": "extra-package-meow-tree-sitter", + "extra-package-nix-ts-mode": "extra-package-nix-ts-mode", + "extra-package-notmuch-notify": "extra-package-notmuch-notify", + "flake-parts": "flake-parts_3", + "hercules-ci-effects": "hercules-ci-effects_2", + "nixpkgs": [ + "ccrEmacs", + "emacs-overlay", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1748970125, - "narHash": "sha256-UDyigbDGv8fvs9aS95yzFfOKkEjx1LO3PL3DsKopohA=", - "owner": "ipetkov", - "repo": "crane", - "rev": "323b5746d89e04b22554b061522dfce9e4c49b18", - "type": "github" + "lastModified": 1719319453, + "narHash": "sha256-a7kxJj8Mshck62/G9WizDfvAAJDT1XP6MIFyFPFIa8I=", + "ref": "refs/heads/master", + "rev": "a65c1478cf8406f1e524944b0f646ace1979910b", + "revCount": 188, + "type": "git", + "url": "https://git.aciceri.dev/aciceri/emacs.git" }, "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" + "type": "git", + "url": "https://git.aciceri.dev/aciceri/emacs.git" } }, "darwin": { @@ -62,11 +83,11 @@ ] }, "locked": { - "lastModified": 1744478979, - "narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=", + "lastModified": 1700795494, + "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "43975d782b418ebf4969e9ccba82466728c2851b", + "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", "type": "github" }, "original": { @@ -79,15 +100,15 @@ "disko": { "inputs": { "nixpkgs": [ - "nixpkgs" + "nixpkgsUnstable" ] }, "locked": { - "lastModified": 1749436314, - "narHash": "sha256-CqmqU5FRg5AadtIkxwu8ulDSOSoIisUMZRLlcED3Q5w=", + "lastModified": 1719236180, + "narHash": "sha256-VZAfBk2Lo8hQy/NQ4XVSpTICT0ownXBUi1QvGfdlxaM=", "owner": "nix-community", "repo": "disko", - "rev": "dfa4d1b9c39c0342ef133795127a3af14598017a", + "rev": "dd4d1663ccf7fbdb32361b9afe9e71206584cd4c", "type": "github" }, "original": { @@ -98,16 +119,16 @@ }, "dream2nix": { "inputs": { - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_5", "purescript-overlay": "purescript-overlay", "pyproject-nix": "pyproject-nix" }, "locked": { - "lastModified": 1748838242, - "narHash": "sha256-wORL3vLIJdBF8hz73yuD7DVsrbOvFgtH96hQIetXhfg=", + "lastModified": 1719340684, + "narHash": "sha256-h2F30XztjIlkcelVhekvqby/Q5KXqAXsyk43KbDi86M=", "owner": "nix-community", "repo": "dream2nix", - "rev": "e92dacdc57acaa6b2ae79592c1a62c2340931410", + "rev": "aa983fd908a0d7e235a8c8a77b803231b9ff2e4a", "type": "github" }, "original": { @@ -118,15 +139,16 @@ }, "emacs-overlay": { "inputs": { - "nixpkgs": "nixpkgs_4", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_3", "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1749547298, - "narHash": "sha256-2H1CgaACA+RUlUf942FvsmobSoSpmlkovQSOkbvX1zE=", + "lastModified": 1719303695, + "narHash": "sha256-SqJTGKtJEzkQdHEUWeMHwQ5vyAg4wE1kRbjTRjzfAUI=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "5c793af459e1f5d4a36d41f32a4841a3d76b7e9e", + "rev": "fd904f28fb1d3d3a3d87db312fac97cb4a146db4", "type": "github" }, "original": { @@ -135,6 +157,151 @@ "type": "github" } }, + "extra-package-agenix-el": { + "flake": false, + "locked": { + "lastModified": 1717247083, + "narHash": "sha256-PexGtluh0V8WVTaDJJurt2xAYfTEJPN5L+bUZomfK14=", + "owner": "t4ccer", + "repo": "agenix.el", + "rev": "b9c7ad33b534d80af207949cc06c0bcd1e60fd63", + "type": "github" + }, + "original": { + "owner": "t4ccer", + "repo": "agenix.el", + "type": "github" + } + }, + "extra-package-combobulate": { + "flake": false, + "locked": { + "lastModified": 1710175386, + "narHash": "sha256-rww0/6304xZWTFRo1BVcfSDdXOXtlgmfZOxAoOIjYsk=", + "owner": "mickeynp", + "repo": "combobulate", + "rev": "ee82c568ad639605518f62f82fae4bcc0dfdbb81", + "type": "github" + }, + "original": { + "owner": "mickeynp", + "repo": "combobulate", + "type": "github" + } + }, + "extra-package-copilot": { + "flake": false, + "locked": { + "lastModified": 1714572852, + "narHash": "sha256-Knp36PtgA73gtYO+W1clQfr570bKCxTFsGW3/iH86A0=", + "owner": "zerolfx", + "repo": "copilot.el", + "rev": "733bff26450255e092c10873580e9abfed8a81b8", + "type": "github" + }, + "original": { + "owner": "zerolfx", + "repo": "copilot.el", + "type": "github" + } + }, + "extra-package-gptel": { + "flake": false, + "locked": { + "lastModified": 1719293003, + "narHash": "sha256-2UArv9fvZEMC6lf3HE6c9onXkRroX0HgX5C/kTHM/ls=", + "owner": "karthink", + "repo": "gptel", + "rev": "a834adbcba46197f4a59b0208e48dd3e80f15c46", + "type": "github" + }, + "original": { + "owner": "karthink", + "repo": "gptel", + "type": "github" + } + }, + "extra-package-indent-bars": { + "flake": false, + "locked": { + "lastModified": 1717788473, + "narHash": "sha256-gcqFMjgWktfGFKeiW6uwWbBtEM1Om2ezMI7W/ZGUFkE=", + "owner": "jdtsmith", + "repo": "indent-bars", + "rev": "2d1d854ddaa5b0e19b69e73553675c2aaaed1641", + "type": "github" + }, + "original": { + "owner": "jdtsmith", + "repo": "indent-bars", + "type": "github" + } + }, + "extra-package-meow-tree-sitter": { + "flake": false, + "locked": { + "lastModified": 1719316197, + "narHash": "sha256-PJotdHWmnBlfQfVSZQAfwxhQfXM/U338wl5QZu/RWMI=", + "owner": "skissue", + "repo": "meow-tree-sitter", + "rev": "8b4e91de05e82fee3535be67d0e9cbd9239b73bb", + "type": "github" + }, + "original": { + "owner": "skissue", + "repo": "meow-tree-sitter", + "type": "github" + } + }, + "extra-package-nix-ts-mode": { + "flake": false, + "locked": { + "lastModified": 1705596103, + "narHash": "sha256-jEUmhfLE7cFan4/PF4qBiEOLsjM3Q4iSDTlM+0CYwZg=", + "owner": "antifuchs", + "repo": "nix-ts-mode", + "rev": "0ef4e663add03d026a1804f57ac7d5453a635b15", + "type": "github" + }, + "original": { + "owner": "antifuchs", + "ref": "improve-indented-string-indentation", + "repo": "nix-ts-mode", + "type": "github" + } + }, + "extra-package-notmuch-notify": { + "flake": false, + "locked": { + "lastModified": 1615303739, + "narHash": "sha256-7REFHQ5+cCK7EGIvs2CnoWu9a7WPxX4W6eFql2nNYP8=", + "owner": "firmart", + "repo": "notmuch-notify", + "rev": "c10012e38b0093bc3a304b90a30dd09c81b3eb75", + "type": "github" + }, + "original": { + "owner": "firmart", + "repo": "notmuch-notify", + "type": "github" + } + }, + "fan-control": { + "flake": false, + "locked": { + "lastModified": 1669548492, + "narHash": "sha256-qqPmOEF+r10VGz3izAnHZW6aJk1mOXy9BrpR9FvWSt0=", + "owner": "pymumu", + "repo": "fan-control-rock5b", + "rev": "8419990c6c0f47a3ed0b55255d7e3591cc5fdab9", + "type": "github" + }, + "original": { + "owner": "pymumu", + "repo": "fan-control-rock5b", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -151,51 +318,19 @@ "type": "github" } }, - "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, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, "flake-parts": { "inputs": { "nixpkgs-lib": [ - "lanzaboote", + "arion", "nixpkgs" ] }, "locked": { - "lastModified": 1749398372, - "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "lastModified": 1717285511, + "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", "type": "github" }, "original": { @@ -204,16 +339,225 @@ "type": "github" } }, + "flake-parts_10": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_5" + }, + "locked": { + "lastModified": 1714606777, + "narHash": "sha256-bMkNmAXLj8iyTvxaaD/StcLSadbj1chPcJOjtuVnLmA=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "4d34ce6412bc450b1d4208c953dc97c7fc764f1a", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_11": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_6" + }, + "locked": { + "lastModified": 1678379998, + "narHash": "sha256-TZdfNqftHhDuIFwBcN9MUThx5sQXCTeZk9je5byPKRw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c13d60b89adea3dc20704c045ec4d50dd964d447", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "arion", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1717285511, + "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": [ + "ccrEmacs", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_5": { + "inputs": { + "nixpkgs-lib": [ + "hercules-ci-agent", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1717285511, + "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": [ + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_7": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1714641030, + "narHash": "sha256-yzcRNDoyVP7+SCNX0wmuDju1NUCt8Dz9+lyUXEI0dbI=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "e5d10a24b66c3ea8f150e47dfdb0416ab7c3390e", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_8": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_4" + }, + "locked": { + "lastModified": 1701473968, + "narHash": "sha256-YcVE5emp1qQ8ieHUnxt1wCZCC3ZfAS+SRRWZ2TMda7E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_9": { + "inputs": { + "nixpkgs-lib": [ + "nixThePlanet", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1696343447, + "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-root": { + "locked": { + "lastModified": 1713493429, + "narHash": "sha256-ztz8JQkI08tjKnsTpfLqzWoKFQF4JGu2LRz8bkdnYUk=", + "owner": "srid", + "repo": "flake-root", + "rev": "bc748b93b86ee76e2032eecda33440ceb2532fcd", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "flake-root", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems_2" }, "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -227,11 +571,11 @@ "systems": "systems_3" }, "locked": { - "lastModified": 1681202837, - "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "cfacdce06f30d2b68473a46042957675eebb3401", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -242,14 +586,14 @@ }, "flakeParts": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib" + "nixpkgs-lib": "nixpkgs-lib_2" }, "locked": { - "lastModified": 1749398372, - "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "lastModified": 1717285511, + "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", "type": "github" }, "original": { @@ -273,32 +617,10 @@ "type": "github" } }, - "git-hooks-nix": { - "inputs": { - "flake-compat": "flake-compat_2", - "gitignore": "gitignore", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1747372754, - "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, "gitignore": { "inputs": { "nixpkgs": [ - "git-hooks-nix", + "pre-commit-hooks", "nixpkgs" ] }, @@ -316,25 +638,134 @@ "type": "github" } }, - "gitignore_2": { + "haskell-flake": { + "locked": { + "lastModified": 1675296942, + "narHash": "sha256-u1X1sblozi5qYEcLp1hxcyo8FfDHnRUVX3dJ/tW19jY=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "c2cafce9d57bfca41794dc3b99c593155006c71e", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "0.1.0", + "repo": "haskell-flake", + "type": "github" + } + }, + "haskell-flake_2": { + "locked": { + "lastModified": 1684780604, + "narHash": "sha256-2uMZsewmRn7rRtAnnQNw1lj0uZBMh4m6Cs/7dV5YF08=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "74210fa80a49f1b6f67223debdbf1494596ff9f2", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "0.3.0", + "repo": "haskell-flake", + "type": "github" + } + }, + "hercules-ci-agent": { "inputs": { - "nixpkgs": [ - "lanzaboote", - "pre-commit-hooks-nix", - "nixpkgs" - ] + "flake-parts": "flake-parts_5", + "haskell-flake": "haskell-flake_2", + "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "lastModified": 1718196252, + "narHash": "sha256-Ni73uHEjw9xzJhzonxgiW1RPHb9nAp7PypBSjCv2nAw=", "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "repo": "hercules-ci-agent", + "rev": "42cfc9fe1593e1bcabbcd643a926cd2efc5339e9", "type": "github" }, "original": { "owner": "hercules-ci", - "repo": "gitignore.nix", + "repo": "hercules-ci-agent", + "type": "github" + } + }, + "hercules-ci-effects": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "arion", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713898448, + "narHash": "sha256-6q6ojsp/Z9P2goqnxyfCSzFOD92T3Uobmj8oVAicUOs=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "c0302ec12d569532a6b6bd218f698bc402e93adc", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_2": { + "inputs": { + "flake-parts": "flake-parts_4", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1719226092, + "narHash": "sha256-YNkUMcCUCpnULp40g+svYsaH1RbSEj6s4WdZY/SHe38=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "11e4b8dc112e2f485d7c97e1cee77f9958f498f5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_3": { + "inputs": { + "flake-parts": "flake-parts_6", + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1719226092, + "narHash": "sha256-YNkUMcCUCpnULp40g+svYsaH1RbSEj6s4WdZY/SHe38=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "11e4b8dc112e2f485d7c97e1cee77f9958f498f5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_4": { + "inputs": { + "flake-parts": "flake-parts_9", + "nixpkgs": "nixpkgs_9" + }, + "locked": { + "lastModified": 1701009247, + "narHash": "sha256-GuX16rzRze2y7CsewJLTV6qXkXWyEwp6VCZXi8HLruU=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "31b6cd7569191bfcd0a548575b0e2ef953ed7d09", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", "type": "github" } }, @@ -346,11 +777,11 @@ ] }, "locked": { - "lastModified": 1745494811, - "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=", + "lastModified": 1703113217, + "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", "owner": "nix-community", "repo": "home-manager", - "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be", + "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", "type": "github" }, "original": { @@ -383,15 +814,15 @@ "homeManager": { "inputs": { "nixpkgs": [ - "nixpkgs" + "nixpkgsUnstable" ] }, "locked": { - "lastModified": 1749526396, - "narHash": "sha256-UL9F76abAk87llXOrcQRjhd5OaOclUd6MIltsqcUZmo=", + "lastModified": 1719180626, + "narHash": "sha256-vZAzm5KQpR6RGple1dzmSJw5kPivES2heCFM+ZWkt0I=", "owner": "nix-community", "repo": "home-manager", - "rev": "427c96044f11a5da50faf6adaf38c9fa47e6d044", + "rev": "6b1f90a8ff92e81638ae6eb48cd62349c3e387bb", "type": "github" }, "original": { @@ -403,7 +834,7 @@ "homeManagerGitWorkspace": { "inputs": { "nixpkgs": [ - "nixpkgs" + "nixpkgsUnstable" ] }, "locked": { @@ -421,54 +852,31 @@ "type": "github" } }, - "impermanence": { + "kernel-src": { + "flake": false, "locked": { - "lastModified": 1737831083, - "narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=", - "owner": "nix-community", - "repo": "impermanence", - "rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170", + "lastModified": 1676631659, + "narHash": "sha256-TjAF7BPSDy5iHSk8byp+vsKop0V+rqrmr+TXLqXLB2M=", + "owner": "radxa", + "repo": "kernel", + "rev": "a9583fb47e9b96c552f458a376207141602c0025", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "impermanence", - "type": "github" - } - }, - "lanzaboote": { - "inputs": { - "crane": "crane", - "flake-compat": "flake-compat_3", - "flake-parts": "flake-parts", - "nixpkgs": [ - "nixpkgs" - ], - "pre-commit-hooks-nix": "pre-commit-hooks-nix", - "rust-overlay": "rust-overlay" - }, - "locked": { - "lastModified": 1749471908, - "narHash": "sha256-uGfPqd43KTomeIVWUzHu3hGLWFsqYibhWLt2OaRic28=", - "owner": "nix-community", - "repo": "lanzaboote", - "rev": "00292388ad3b497763b81568d6ee5e1c4a2bcf85", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "lanzaboote", + "owner": "radxa", + "repo": "kernel", + "rev": "a9583fb47e9b96c552f458a376207141602c0025", "type": "github" } }, "lix": { "flake": false, "locked": { - "lastModified": 1749471044, - "narHash": "sha256-a1KdOuDF2NJj+tM/2fufIyW5dDX0cHdmXWjli+0GRh4=", + "lastModified": 1719353906, + "narHash": "sha256-Tb0qMlbG/+DvnnBtgJtByBF1vh8pGIUXv0lhivYCCH8=", "ref": "refs/heads/main", - "rev": "d8b1bb58622ee7af6cfa260d32d84859b3dc2ea2", - "revCount": 17998, + "rev": "4ac2c496d499a4a0e2d64edf32eb855268e7aa8d", + "revCount": 15890, "type": "git", "url": "https://git@git.lix.systems/lix-project/lix" }, @@ -479,21 +887,21 @@ }, "lix-module": { "inputs": { - "flake-utils": "flake-utils", + "flake-utils": "flake-utils_2", "flakey-profile": "flakey-profile", "lix": [ "lix" ], "nixpkgs": [ - "nixpkgs" + "nixpkgsUnstable" ] }, "locked": { - "lastModified": 1747667424, - "narHash": "sha256-7EICjbmG6lApWKhFtwvZovdcdORY1CEe6/K7JwtpYfs=", + "lastModified": 1719353937, + "narHash": "sha256-86NBqDxAP20ET/UoKX0WvSItblNQ97czXb2q7lkMrwk=", "ref": "refs/heads/main", - "rev": "3c23c6ae2aecc1f76ae7993efe1a78b5316f0700", - "revCount": 144, + "rev": "5d9d94089fb1ca96222a34bfe245ef5c5ebefd37", + "revCount": 92, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -505,11 +913,11 @@ "mobile-nixos": { "flake": false, "locked": { - "lastModified": 1749499850, - "narHash": "sha256-Fyy9ySTJ7jJ7z2h5+KHJU6OUhPJvy12OlVOichkwmZ0=", + "lastModified": 1715627339, + "narHash": "sha256-HJ6V7hc64iBqXlZ8kH4sXmUzPH+0Hn6wYURmZmL5LFk=", "owner": "NixOS", "repo": "mobile-nixos", - "rev": "26faf325d6efb169e2e4a2c435346b46c19d08bc", + "rev": "655c8830d5fe2eae79c8fc0bab8033b34c8456eb", "type": "github" }, "original": { @@ -518,16 +926,35 @@ "type": "github" } }, + "nix-fast-build": { + "inputs": { + "flake-parts": "flake-parts_7", + "nixpkgs": [ + "nixpkgsUnstable" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1719305207, + "narHash": "sha256-gxJ1xgkXe/iHpyYBtx96D7AKccQYqutC6R7cKv2uBNY=", + "owner": "Mic92", + "repo": "nix-fast-build", + "rev": "02c50df6881266f5425f06f475d504e90e491767", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "nix-fast-build", + "type": "github" + } + }, "nix-formatter-pack": { "inputs": { "nixpkgs": [ "nix-on-droid", "nixpkgs" ], - "nmd": [ - "nix-on-droid", - "nmd" - ], + "nmd": "nmd", "nmt": "nmt" }, "locked": { @@ -548,17 +975,17 @@ "inputs": { "home-manager": "home-manager_2", "nix-formatter-pack": "nix-formatter-pack", - "nixpkgs": "nixpkgs_5", + "nixpkgs": "nixpkgs_8", "nixpkgs-docs": "nixpkgs-docs", "nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap", - "nmd": "nmd" + "nmd": "nmd_2" }, "locked": { - "lastModified": 1747382160, - "narHash": "sha256-nlHPjA5GH4wdwnAoOzCt7BVLUKtIAAW2ClNGz2OxTrs=", + "lastModified": 1710434231, + "narHash": "sha256-yrWnsG28518tbIapJWiluweHORuuIwAQrA8lga0Sqlw=", "owner": "nix-community", "repo": "nix-on-droid", - "rev": "40b8c7465f78887279a0a3c743094fa6ea671ab1", + "rev": "2d93311c4f3f300154d2085e4b4b1d550237da92", "type": "github" }, "original": { @@ -567,13 +994,77 @@ "type": "github" } }, + "nixDarwin": { + "inputs": { + "nixpkgs": [ + "nixpkgsUnstable" + ] + }, + "locked": { + "lastModified": 1719128254, + "narHash": "sha256-I7jMpq0CAOZA/i70+HDQO/ulLttyQu/K70cSESiMX7A=", + "owner": "LnL7", + "repo": "nix-darwin", + "rev": "50581970f37f06a4719001735828519925ef8310", + "type": "github" + }, + "original": { + "owner": "LnL7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nixThePlanet": { + "inputs": { + "flake-parts": "flake-parts_8", + "hercules-ci-effects": "hercules-ci-effects_4", + "nixpkgs": [ + "nixpkgsUnstable" + ], + "osx-kvm": "osx-kvm" + }, + "locked": { + "lastModified": 1708168451, + "narHash": "sha256-loWlwexnfQGFsEHeJbXpWbnmeDFkBwZB38+4BkUcGhM=", + "owner": "aciceri", + "repo": "NixThePlanet", + "rev": "e8c91035d01f5082ccf30e351dcd993a5b480a72", + "type": "github" + }, + "original": { + "owner": "aciceri", + "ref": "nix-in-darwin", + "repo": "NixThePlanet", + "type": "github" + } + }, + "nixd": { + "inputs": { + "flake-parts": "flake-parts_10", + "flake-root": "flake-root", + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1719301507, + "narHash": "sha256-31CCcoTEi6JFMZTl+nBXy2irjSD3G4tjzHMaAK0YBC8=", + "owner": "nix-community", + "repo": "nixd", + "rev": "61075576703ed1e1c82134ec780c768b4c3d4e00", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixd", + "type": "github" + } + }, "nixosHardware": { "locked": { - "lastModified": 1749195551, - "narHash": "sha256-W5GKQHgunda/OP9sbKENBZhMBDNu2QahoIPwnsF6CeM=", + "lastModified": 1719322773, + "narHash": "sha256-BqPxtFwXrpJQDh65NOIHX99pz2rtIMshG9Mt2xnnc5c=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "4602f7e1d3f197b3cb540d5accf5669121629628", + "rev": "caabc425565bbd5c8640630b0bf6974961a49242", "type": "github" }, "original": { @@ -584,11 +1075,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1745391562, - "narHash": "sha256-sPwcCYuiEopaafePqlG826tBhctuJsLx/mhKKM5Fmjo=", + "lastModified": 1703013332, + "narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8a2f738d9d1f1d986b5a4cd2fd2061a7127237d7", + "rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6", "type": "github" }, "original": { @@ -616,74 +1107,229 @@ }, "nixpkgs-for-bootstrap": { "locked": { - "lastModified": 1720244366, - "narHash": "sha256-WrDV0FPMVd2Sq9hkR5LNHudS3OSMmUrs90JUTN+MXpA=", + "lastModified": 1708105575, + "narHash": "sha256-sS4AItZeUnAei6v8FqxNlm+/27MPlfoGym/TZP0rmH0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "49ee0e94463abada1de470c9c07bfc12b36dcf40", + "rev": "1d1817869c47682a6bee85b5b0a6537b6c0fba26", "type": "github" }, "original": { "owner": "NixOS", "repo": "nixpkgs", - "rev": "49ee0e94463abada1de470c9c07bfc12b36dcf40", + "rev": "1d1817869c47682a6bee85b5b0a6537b6c0fba26", + "type": "github" + } + }, + "nixpkgs-kernel": { + "locked": { + "lastModified": 1656239181, + "narHash": "sha256-wW1xRFBn376yGloXZ4QzBE4hjipMawpV18Lshd9QSPw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "f2537a505d45c31fe5d9c27ea9829b6f4c4e6ac5", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "f2537a505d45c31fe5d9c27ea9829b6f4c4e6ac5", "type": "github" } }, "nixpkgs-lib": { "locked": { - "lastModified": 1748740939, - "narHash": "sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc=", - "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "656a64127e9d791a334452c6b6606d17539476e2", + "lastModified": 1717284937, + "narHash": "sha256-lIbdfCsf8LMFloheeE6N31+BMIeixqyQWbSr2vk79EQ=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz" + } + }, + "nixpkgs-lib_2": { + "locked": { + "lastModified": 1717284937, + "narHash": "sha256-lIbdfCsf8LMFloheeE6N31+BMIeixqyQWbSr2vk79EQ=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz" + } + }, + "nixpkgs-lib_3": { + "locked": { + "lastModified": 1714640452, + "narHash": "sha256-QBx10+k6JWz6u7VsohfSw8g8hjdBZEf8CFzXH1/1Z94=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + } + }, + "nixpkgs-lib_4": { + "locked": { + "dir": "lib", + "lastModified": 1701253981, + "narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "nixpkgs.lib", + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_5": { + "locked": { + "dir": "lib", + "lastModified": 1714253743, + "narHash": "sha256-mdTQw2XlariysyScCv2tTE45QSU9v/ezLcHJ22f0Nxc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "58a1abdbae3217ca6b702f03d3b35125d88a2994", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_6": { + "locked": { + "dir": "lib", + "lastModified": 1678375444, + "narHash": "sha256-XIgHfGvjFvZQ8hrkfocanCDxMefc/77rXeHvYdzBMc8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "130fa0baaa2b93ec45523fdcde942f6844ee9f6e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", "type": "github" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1749173751, - "narHash": "sha256-ENY3y3v6S9ZmLDDLI3LUT8MXmfXg/fSt2eA4GCnMVCE=", + "lastModified": 1719122173, + "narHash": "sha256-aEMsNUtqSPwn6l+LIZ/rX++nCgun3E9M3uSZs6Rwb7w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ed29f002b6d6e5e7e32590deb065c34a31dc3e91", + "rev": "906320ae02f769d13a646eb3605a9821df0d6ea2", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-24.11", + "ref": "nixos-23.11", "repo": "nixpkgs", "type": "github" } }, - "nixpkgsSisko": { + "nixpkgsStable": { "locked": { - "lastModified": 1747542820, - "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", + "lastModified": 1719122173, + "narHash": "sha256-aEMsNUtqSPwn6l+LIZ/rX++nCgun3E9M3uSZs6Rwb7w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", + "rev": "906320ae02f769d13a646eb3605a9821df0d6ea2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgsUnstable": { + "locked": { + "lastModified": 1719254875, + "narHash": "sha256-ECni+IkwXjusHsm9Sexdtq8weAq/yUyt1TWIemXt3Ko=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2893f56de08021cffd9b6b6dfc70fd9ccd51eb60", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgsUnstableForSisko": { + "locked": { + "lastModified": 1708475490, + "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0e74ca98a74bc7270d28838369593635a5db3260", "type": "github" }, "original": { "owner": "NixOS", "repo": "nixpkgs", - "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", + "rev": "0e74ca98a74bc7270d28838369593635a5db3260", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1714562304, + "narHash": "sha256-Mr3U37Rh6tH0FbaDFu0aZDwk9mPAe7ASaqDOGgLqqLU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bcd44e224fd68ce7d269b4f44d24c2220fd821e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1678470307, + "narHash": "sha256-OEeMUr3ueLIXyW/OaFUX5jUdimyQwMg/7e+/Q0gC/QE=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "0c4800d579af4ed98ecc47d464a5e7b0870c4b1f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", "type": "github" } }, "nixpkgs_2": { "locked": { - "lastModified": 1744463964, - "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", + "lastModified": 1717196966, + "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", + "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", "type": "github" }, "original": { @@ -695,27 +1341,27 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1729850857, - "narHash": "sha256-WvLXzNNnnw+qpFOmgaM3JUlNEH+T4s22b5i2oyyCpXE=", + "lastModified": 1719075281, + "narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "41dea55321e5a999b17033296ac05fe8a8b5a257", + "rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixpkgs-unstable", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_4": { "locked": { - "lastModified": 1749285348, - "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "lastModified": 1713714899, + "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "rev": "6143fc5eeb9c4f00163267708e26191d1e918932", "type": "github" }, "original": { @@ -726,6 +1372,54 @@ } }, "nixpkgs_5": { + "locked": { + "lastModified": 1719285171, + "narHash": "sha256-kOUKtKfYEh8h8goL/P6lKF4Jb0sXnEkFyEganzdTGvo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cfb89a95f19bea461fc37228dc4d07b22fe617c2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1717974879, + "narHash": "sha256-GTO3C88+5DX171F/gVS3Qga/hOs/eRMxPFpiHq2t+D8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c7b821ba2e1e635ba5a76d299af62821cbcb09f3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1713714899, + "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6143fc5eeb9c4f00163267708e26191d1e918932", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { "locked": { "lastModified": 1708172716, "narHash": "sha256-3M94oln0b61m3dUmLyECCA9hYAHXZEszM4saE3CmQO4=", @@ -740,13 +1434,13 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_9": { "locked": { - "lastModified": 1749285348, - "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "lastModified": 1697723726, + "narHash": "sha256-SaTWPkI8a5xSHX/rrKzUe+/uVNy6zCGMXgoeMb7T9rg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "rev": "7c9cc5a6e5d38010801741ac830a3f8fd667a7a0", "type": "github" }, "original": { @@ -756,21 +1450,23 @@ "type": "github" } }, - "nixpkgs_7": { + "nmd": { + "flake": false, "locked": { - "lastModified": 1682134069, - "narHash": "sha256-TnI/ZXSmRxQDt2sjRYK/8j8iha4B4zP2cnQCZZ3vp7k=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "fd901ef4bf93499374c5af385b2943f5801c0833", - "type": "github" + "lastModified": 1666190571, + "narHash": "sha256-Z1hc7M9X6L+H83o9vOprijpzhTfOBjd0KmUTnpHAVjA=", + "owner": "rycee", + "repo": "nmd", + "rev": "b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169", + "type": "gitlab" }, "original": { - "id": "nixpkgs", - "type": "indirect" + "owner": "rycee", + "repo": "nmd", + "type": "gitlab" } }, - "nmd": { + "nmd_2": { "inputs": { "nixpkgs": [ "nix-on-droid", @@ -808,24 +1504,71 @@ "type": "gitlab" } }, - "pre-commit-hooks-nix": { + "nur": { + "locked": { + "lastModified": 1715146663, + "narHash": "sha256-SiCdZF3dwRBgTlHOSB5GCKBcTmkGmyDmVRwr6cHCdgE=", + "owner": "nix-community", + "repo": "NUR", + "rev": "324a5f3b9fbfdb77336dc9fa1c0a02f33a6acf6d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "rev": "324a5f3b9fbfdb77336dc9fa1c0a02f33a6acf6d", + "type": "github" + } + }, + "osx-kvm": { + "flake": false, + "locked": { + "lastModified": 1701316418, + "narHash": "sha256-Sk8LYhFovoMX1ln7DWYArJQphW2a4h8Xg7/ZEZXwZv4=", + "owner": "kholia", + "repo": "OSX-KVM", + "rev": "09daff670a7eb9ff616073df329586c5995623a9", + "type": "github" + }, + "original": { + "owner": "kholia", + "repo": "OSX-KVM", + "type": "github" + } + }, + "panfork": { + "flake": false, + "locked": { + "lastModified": 1670633863, + "narHash": "sha256-4eZHMiYS+sRDHNBtLZTA8ELZnLns7yT3USU5YQswxQ0=", + "owner": "panfork", + "repo": "mesa", + "rev": "120202c675749c5ef81ae4c8cdc30019b4de08f4", + "type": "gitlab" + }, + "original": { + "owner": "panfork", + "repo": "mesa", + "type": "gitlab" + } + }, + "pre-commit-hooks": { "inputs": { - "flake-compat": [ - "lanzaboote", - "flake-compat" - ], - "gitignore": "gitignore_2", + "flake-compat": "flake-compat", + "gitignore": "gitignore", "nixpkgs": [ - "lanzaboote", - "nixpkgs" + "nixpkgsUnstable" + ], + "nixpkgs-stable": [ + "nixpkgsStable" ] }, "locked": { - "lastModified": 1747372754, - "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", + "lastModified": 1719259945, + "narHash": "sha256-F1h+XIsGKT9TkGO3omxDLEb/9jOOsI6NnzsXFsZhry4=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", + "rev": "0ff4381bbb8f7a52ca4a851660fc7a437a4c6e07", "type": "github" }, "original": { @@ -836,7 +1579,6 @@ }, "purescript-overlay": { "inputs": { - "flake-compat": "flake-compat", "nixpkgs": [ "dream2nix", "nixpkgs" @@ -844,11 +1586,11 @@ "slimlock": "slimlock" }, "locked": { - "lastModified": 1728546539, - "narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=", + "lastModified": 1696022621, + "narHash": "sha256-eMjFmsj2G1E0Q5XiibUNgFjTiSz0GxIeSSzzVdoN730=", "owner": "thomashoneyman", "repo": "purescript-overlay", - "rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4", + "rev": "047c7933abd6da8aa239904422e22d190ce55ead", "type": "github" }, "original": { @@ -874,51 +1616,61 @@ "type": "github" } }, - "root": { + "rock5b": { "inputs": { - "agenix": "agenix", - "catppuccin": "catppuccin", - "disko": "disko", - "dream2nix": "dream2nix", - "emacs-overlay": "emacs-overlay", - "flakeParts": "flakeParts", - "git-hooks-nix": "git-hooks-nix", - "homeManager": "homeManager", - "homeManagerGitWorkspace": "homeManagerGitWorkspace", - "impermanence": "impermanence", - "lanzaboote": "lanzaboote", - "lix": "lix", - "lix-module": "lix-module", - "mobile-nixos": "mobile-nixos", - "nix-on-droid": "nix-on-droid", - "nixosHardware": "nixosHardware", - "nixpkgs": "nixpkgs_6", - "nixpkgsSisko": "nixpkgsSisko", - "treefmt-nix": "treefmt-nix", - "vscode-server": "vscode-server" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "lanzaboote", - "nixpkgs" - ] + "fan-control": "fan-control", + "flake-parts": "flake-parts_11", + "kernel-src": "kernel-src", + "nixpkgs": "nixpkgs_11", + "nixpkgs-kernel": "nixpkgs-kernel", + "panfork": "panfork", + "tow-boot": "tow-boot", + "treefmt-nix": "treefmt-nix_2" }, "locked": { - "lastModified": 1749436897, - "narHash": "sha256-OkDtaCGQQVwVFz5HWfbmrMJR99sFIMXHCHEYXzUJEJY=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "e7876c387e35dc834838aff254d8e74cf5bd4f19", + "lastModified": 1685695782, + "narHash": "sha256-zBQFjZhFWsxCA31jI4Ui3l8KhrqQaG0dHi/v/vIvZcM=", + "owner": "aciceri", + "repo": "rock5b-nixos", + "rev": "3868939df4a6d5292077e154c8cb36de1fde4d30", "type": "github" }, "original": { - "owner": "oxalica", - "repo": "rust-overlay", + "owner": "aciceri", + "repo": "rock5b-nixos", "type": "github" } }, + "root": { + "inputs": { + "agenix": "agenix", + "arion": "arion", + "ccrEmacs": "ccrEmacs", + "disko": "disko", + "dream2nix": "dream2nix", + "flakeParts": "flakeParts", + "hercules-ci-agent": "hercules-ci-agent", + "hercules-ci-effects": "hercules-ci-effects_3", + "homeManager": "homeManager", + "homeManagerGitWorkspace": "homeManagerGitWorkspace", + "lix": "lix", + "lix-module": "lix-module", + "mobile-nixos": "mobile-nixos", + "nix-fast-build": "nix-fast-build", + "nix-on-droid": "nix-on-droid", + "nixDarwin": "nixDarwin", + "nixThePlanet": "nixThePlanet", + "nixd": "nixd", + "nixosHardware": "nixosHardware", + "nixpkgsStable": "nixpkgsStable", + "nixpkgsUnstable": "nixpkgsUnstable", + "nixpkgsUnstableForSisko": "nixpkgsUnstableForSisko", + "nur": "nur", + "pre-commit-hooks": "pre-commit-hooks", + "rock5b": "rock5b", + "treefmt-nix": "treefmt-nix_3" + } + }, "scss-reset": { "flake": false, "locked": { @@ -944,11 +1696,11 @@ ] }, "locked": { - "lastModified": 1688756706, - "narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=", + "lastModified": 1688610262, + "narHash": "sha256-Wg0ViDotFWGWqKIQzyYCgayeH8s4U1OZcTiWTQYdAp4=", "owner": "thomashoneyman", "repo": "slimlock", - "rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c", + "rev": "b5c6cdcaf636ebbebd0a1f32520929394493f1a6", "type": "github" }, "original": { @@ -1002,18 +1754,36 @@ "type": "github" } }, + "tow-boot": { + "flake": false, + "locked": { + "lastModified": 1677346757, + "narHash": "sha256-3SKlcZhfUaNz1bd/l/1B3D66NUk3sALVIyP8DHv41SU=", + "owner": "aciceri", + "repo": "Tow-Boot", + "rev": "85d099f3473effdeca409bd165175d64dfb37ecc", + "type": "github" + }, + "original": { + "owner": "aciceri", + "ref": "rock5b", + "repo": "Tow-Boot", + "type": "github" + } + }, "treefmt-nix": { "inputs": { "nixpkgs": [ + "nix-fast-build", "nixpkgs" ] }, "locked": { - "lastModified": 1749194973, - "narHash": "sha256-eEy8cuS0mZ2j/r/FE0/LYBSBcIs/MKOIVakwHVuqTfk=", + "lastModified": 1714058656, + "narHash": "sha256-Qv4RBm4LKuO4fNOfx9wl40W2rBbv5u5m+whxRYUMiaA=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "a05be418a1af1198ca0f63facb13c985db4cb3c5", + "rev": "c6aaf729f34a36c445618580a9f95a48f5e4e03f", "type": "github" }, "original": { @@ -1022,22 +1792,44 @@ "type": "github" } }, - "vscode-server": { + "treefmt-nix_2": { "inputs": { - "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_7" + "nixpkgs": [ + "rock5b", + "nixpkgs" + ] }, "locked": { - "lastModified": 1729422940, - "narHash": "sha256-DlvJv33ml5UTKgu4b0HauOfFIoDx6QXtbqUF3vWeRCY=", - "owner": "nix-community", - "repo": "nixos-vscode-server", - "rev": "8b6db451de46ecf9b4ab3d01ef76e59957ff549f", + "lastModified": 1678277086, + "narHash": "sha256-fQ1G72KhLWWf2z+ug9+4ErTEayvlcVQMul0qusKKBgk=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "ec39cfa24342fdf0b04ae44592a191c4765f9c74", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "nixos-vscode-server", + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_3": { + "inputs": { + "nixpkgs": [ + "nixpkgsUnstable" + ] + }, + "locked": { + "lastModified": 1719243788, + "narHash": "sha256-9T9mSY35EZSM1KAwb7K9zwQ78qTlLjosZgtUGnw4rn4=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "065a23edceff48f948816b795ea8cc6c0dee7cdf", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", "type": "github" } } diff --git a/flake.nix b/flake.nix index 145218e..3f4cc1d 100644 --- a/flake.nix +++ b/flake.nix @@ -3,59 +3,74 @@ inputs = { flakeParts.url = "github:hercules-ci/flake-parts"; - nixpkgsSisko.url = "github:NixOS/nixpkgs/292fa7d4f6519c074f0a50394dbbe69859bb6043"; - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + nixpkgsUnstable.url = "github:NixOS/nixpkgs/nixos-unstable"; + nixpkgsUnstableForSisko.url = "github:NixOS/nixpkgs/0e74ca98a74bc7270d28838369593635a5db3260"; + nixpkgsStable.url = "github:NixOS/nixpkgs/nixos-23.11"; nixosHardware.url = "github:NixOS/nixos-hardware"; homeManager = { url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgsUnstable"; }; # TODO: remove after https://github.com/nix-community/home-manager/pull/3811 homeManagerGitWorkspace = { url = "github:aciceri/home-manager/git-workspace"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgsUnstable"; }; disko = { url = "github:nix-community/disko"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgsUnstable"; }; - git-hooks-nix = { - url = "github:cachix/git-hooks.nix"; - inputs.nixpkgs.follows = "nixpkgs"; + pre-commit-hooks = { + url = "github:cachix/pre-commit-hooks.nix"; + inputs = { + nixpkgs.follows = "nixpkgsUnstable"; + nixpkgs-stable.follows = "nixpkgsStable"; + }; }; + # FIXME go back to master after nltch's repository is re-added + nur.url = "github:nix-community/NUR/324a5f3b9fbfdb77336dc9fa1c0a02f33a6acf6d"; agenix.url = "github:ryantm/agenix"; + rock5b.url = "github:aciceri/rock5b-nixos"; + ccrEmacs.url = "git+https://git.aciceri.dev/aciceri/emacs.git"; treefmt-nix = { url = "github:numtide/treefmt-nix"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgsUnstable"; }; + hercules-ci-effects.url = "github:hercules-ci/hercules-ci-effects"; dream2nix.url = "github:nix-community/dream2nix"; + hercules-ci-agent.url = "github:hercules-ci/hercules-ci-agent"; + nix-fast-build = { + url = "github:Mic92/nix-fast-build"; + inputs.nixpkgs.follows = "nixpkgsUnstable"; + }; + nixThePlanet = { + url = "github:aciceri/NixThePlanet/nix-in-darwin"; + inputs.nixpkgs.follows = "nixpkgsUnstable"; + }; + nixDarwin = { + url = "github:LnL7/nix-darwin"; + inputs.nixpkgs.follows = "nixpkgsUnstable"; + }; nix-on-droid.url = "github:nix-community/nix-on-droid"; + nixd.url = "github:nix-community/nixd"; lix = { - url = "git+https://git@git.lix.systems/lix-project/lix"; # FIXME update + url = "git+https://git@git.lix.systems/lix-project/lix"; flake = false; }; lix-module = { url = "git+https://git.lix.systems/lix-project/nixos-module"; inputs.lix.follows = "lix"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgsUnstable"; }; mobile-nixos = { url = "github:NixOS/mobile-nixos"; flake = false; }; - impermanence.url = "github:nix-community/impermanence"; - vscode-server.url = "github:nix-community/nixos-vscode-server"; - lanzaboote = { - url = "github:nix-community/lanzaboote"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - catppuccin.url = "github:catppuccin/nix"; - emacs-overlay.url = "github:nix-community/emacs-overlay"; + arion.url = "github:hercules-ci/arion"; }; - outputs = - inputs@{ flakeParts, ... }: - flakeParts.lib.mkFlake { inherit inputs; } { + outputs = inputs @ {flakeParts, ...}: + flakeParts.lib.mkFlake {inherit inputs;} { imports = [ # TODO export modules as flake outputs # ./modules @@ -64,10 +79,8 @@ ./packages ./shell ./checks + ./ci ]; - systems = [ - "x86_64-linux" - "aarch64-linux" - ]; + systems = ["x86_64-linux" "aarch64-linux"]; }; } diff --git a/hmModules/aerc/default.nix b/hmModules/aerc/default.nix index 1c3c122..6c3e65b 100644 --- a/hmModules/aerc/default.nix +++ b/hmModules/aerc/default.nix @@ -1,5 +1,5 @@ { - imports = [ ../email ]; + imports = [../email]; config = { accounts.email.accounts = { autistici.aerc = { diff --git a/hmModules/binance/default.nix b/hmModules/binance/default.nix index 07c6759..c0aa5d2 100644 --- a/hmModules/binance/default.nix +++ b/hmModules/binance/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.binance ]; +{pkgs, ...}: { + home.packages = [pkgs.binance]; } diff --git a/hmModules/btop/default.nix b/hmModules/btop/default.nix index 5d23dec..08fc3a7 100644 --- a/hmModules/btop/default.nix +++ b/hmModules/btop/default.nix @@ -1,9 +1,18 @@ -{ +{pkgs, ...}: { programs.btop = { enable = true; settings = { update_ms = 100; theme_background = false; + # color_theme = "${config.programs.btop.package}/share/btop/themes/dracula.theme"; + color_theme = let + catppuccin-theme = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "btop"; + rev = "21b8d5956a8b07fa52519e3267fb3a2d2e693d17"; + hash = "sha256-UXeTypc15MhjgGUiCrDUZ40m32yH2o1N+rcrEgY6sME="; + }; + in "${catppuccin-theme}/themes/catppuccin_mocha.theme"; }; }; } diff --git a/hmModules/calibre/default.nix b/hmModules/calibre/default.nix index b2fd97a..dca9687 100644 --- a/hmModules/calibre/default.nix +++ b/hmModules/calibre/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.calibre ]; +{pkgs, ...}: { + home.packages = [pkgs.calibre]; } diff --git a/hmModules/catppuccin/default.nix b/hmModules/catppuccin/default.nix deleted file mode 100644 index 4d485ac..0000000 --- a/hmModules/catppuccin/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ lib, ... }: -{ - catppuccin = { - enable = true; - flavor = "mocha"; - accent = "sapphire"; - }; - - qt = { - platformTheme.name = lib.mkForce "kvantum"; - style.name = lib.mkForce "kvantum"; - }; -} diff --git a/hmModules/chirp/default.nix b/hmModules/chirp/default.nix deleted file mode 100644 index f6ff45e..0000000 --- a/hmModules/chirp/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.chirp ]; -} diff --git a/hmModules/chrome/default.nix b/hmModules/chrome/default.nix index 595c255..f90f3ce 100644 --- a/hmModules/chrome/default.nix +++ b/hmModules/chrome/default.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { programs.chromium = { enable = true; package = pkgs.google-chrome; diff --git a/hmModules/cura/default.nix b/hmModules/cura/default.nix index a4999b8..2dcb042 100644 --- a/hmModules/cura/default.nix +++ b/hmModules/cura/default.nix @@ -1,6 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ - pkgs.cura-appimage - ]; +{pkgs, ...}: { + home.packages = [pkgs.cura]; } diff --git a/hmModules/digikam/default.nix b/hmModules/digikam/default.nix index a2f5b1e..928dde1 100644 --- a/hmModules/digikam/default.nix +++ b/hmModules/digikam/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.digikam ]; +{pkgs, ...}: { + home.packages = [pkgs.digikam]; } diff --git a/hmModules/discord/default.nix b/hmModules/discord/default.nix index f766f1a..2dde8bf 100644 --- a/hmModules/discord/default.nix +++ b/hmModules/discord/default.nix @@ -1,11 +1,5 @@ -{ pkgs, ... }: -{ - home.packages = [ - (pkgs.discord.override { - withOpenASAR = true; - withVencord = true; - }) - ]; +{pkgs, ...}: { + home.packages = [pkgs.discord]; home.file.".config/discord/settings.json".text = builtins.toJSON { SKIP_HOST_UPDATE = true; }; diff --git a/hmModules/dolphin/default.nix b/hmModules/dolphin/default.nix index 0b68c57..e24cc30 100644 --- a/hmModules/dolphin/default.nix +++ b/hmModules/dolphin/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.dolphin-emu ]; +{pkgs, ...}: { + home.packages = [pkgs.dolphin-emu]; } diff --git a/hmModules/element/default.nix b/hmModules/element/default.nix index 0246fe5..e0f4282 100644 --- a/hmModules/element/default.nix +++ b/hmModules/element/default.nix @@ -1,17 +1,18 @@ -{ pkgs, lib, ... }: -{ - home.packages = [ pkgs.element-desktop ]; +{pkgs, ...}: { + # home.packages = [pkgs.schildichat-desktop]; + home.packages = [pkgs.element-desktop-wayland]; systemd.user.services.element-desktop = { - Install.WantedBy = [ "graphical-session.target" ]; + Install.WantedBy = ["graphical-session.target"]; Unit = { Description = "Element"; - PartOf = [ "graphical-session.target" ]; + PartOf = ["graphical-session.target"]; }; Service = { - ExecStart = lib.getExe pkgs.element-desktop; + # ExecStart = "${pkgs.schildichat-desktop}/bin/schildichat-desktop"; # TODO I preferred SchildiChat but it was removed from nixpkgs becuase unsafe + ExecStart = "${pkgs.element-desktop-wayland}/bin/element-desktop"; Restart = "on-failure"; RestartSec = 3; }; diff --git a/hmModules/emacs/default.nix b/hmModules/emacs/default.nix index 3e46174..69d5607 100644 --- a/hmModules/emacs/default.nix +++ b/hmModules/emacs/default.nix @@ -1,67 +1,10 @@ { lib, - fleetFlake, - pkgs, age, + pkgs, ... -}: -let - emacs = fleetFlake.packages.${pkgs.system}.emacs; - inherit (emacs.passthru) treesitGrammars; -in -{ - systemd.user.sessionVariables = { - EDITOR = lib.mkForce "emacsclient -c"; - OPENROUTER_API_KEY_PATH = age.secrets.openrouter-api-key.path; - }; - programs.emacs = { - enable = true; - package = emacs; - }; - services.emacs = { - enable = true; - client.enable = true; - defaultEditor = true; - socketActivation.enable = false; - startWithUserSession = true; - package = emacs; - }; - home.packages = - with pkgs; - [ - binutils - delta - (ripgrep.override { withPCRE2 = true; }) - gnutls - fd - hunspell - python3 - imagemagick - ghostscript_headless - mupdf-headless - poppler_utils - ffmpegthumbnailer - mediainfo - unzipNLS - nodejs_20 - qadwaitadecorations - kdePackages.qtwayland - copilot-language-server.fhs - math-preview - emacs-lsp-booster - texlive.combined.scheme-full - aider-chat-full - ] - ++ (with hunspellDicts; [ - en_US-large - it_IT - ]); - home.activation.linkEmacsConfig = lib.hm.dag.entryAnywhere '' - if [ ! -d "$HOME/.config/emacs" ]; then - $DRY_RUN_CMD mkdir "$HOME/.config/emacs" - $DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/emacs/init.el" "$HOME/.config/emacs/init.el" - $DRY_RUN_CMD ln -s "$HOME/.config/emacs" "$HOME/emacs" - fi - $DRY_RUN_CMD ln -sfn ${treesitGrammars} "$HOME/.config/emacs/tree-sitter" - ''; +}: { + ccrEmacs.enable = true; + home.sessionVariables.EDITOR = lib.mkForce "emacsclient"; + systemd.user.services.emacs.Service.EnvironmentFile = age.secrets.chatgpt-token.path; } diff --git a/hmModules/emacs/init.el b/hmModules/emacs/init.el deleted file mode 100644 index 0ff7de5..0000000 --- a/hmModules/emacs/init.el +++ /dev/null @@ -1,1358 +0,0 @@ -;; package --- My Emacs config -*- lexical-binding:t -*- -;; Author: Andrea Ciceri -;;; Commentary: -;; TODO org goodies -;; TODO understand how to configure cape -;; TODO org-roam-protocol to capture notes from the browser -;; TODO attach documents (like PDFs) to my Zettelkasten notes -;;; Code: - - -(use-package flymake - :config - ;; TODO write "E", "W" or "N" in margins overriding the margin created by diff-hl - ;; (push `(before-string . ,(propertize " " 'display '((margin left-margin) "E"))) (get :error 'flymake-overlay-control)) - ;; (push `(before-string . ,(propertize " " 'display '((margin left-margin) "W"))) (get :warning 'flymake-overlay-control)) - ;; (push `(before-string . ,(propertize " " 'display '((margin left-margin) "N"))) (get :note 'flymake-overlay-control)) - ;; TODO set following only when on terminal (where wavy underlines are not shown) - ;; (set-face-attribute 'flymake-error nil :inverse-video t) - ;; (set-face-attribute 'flymake-warning nil :inverse-video t) - ;; (set-face-attribute 'flymake-note nil :inverse-video t) - :custom - (flymake-mode-line-lighter "Fly") - :hook prog-mode) - -(use-package eglot - :custom - ;; Tricks that should make Emacs faster - (eglot-events-buffer-size 0) ; disable events logging, it should be enabled only when debuggigng LSP servers - (eglot-sync-connect-nil 0) ; disable UI freeze when opening big files - (eglot-connect-timeout nil) ; never timeout - :bind (("C-q" . eglot-code-action-quickfix)) - ) - -(use-package consult-eglot - :after (consult eglot embark) - :config - (require 'consult-eglot-embark) - (consult-eglot-embark-mode) - ) - -(use-package eglot-booster - :after eglot - :config (eglot-booster-mode)) - -(use-package emacs - :bind (("" . scroll-down-line) - ("" . scroll-up-line) - (("C-x F" . recentf-open))) - :hook (server-after-make-frame . (lambda () (xterm-mouse-mode +1))) ;; FIXME why is this needed? - :custom - (use-dialog-box nil) - (use-short-answers t) - (native-comp-async-report-warnings-errors nil) - (inhibit-startup-message t) - (visible-bell t) - (temporary-file-directory "~/.emacs-saves/") - (backup-directory-alist `(("." . ,temporary-file-directory))) - (auto-save-files-name-transforms `((".*" ,temporary-file-directory t))) - (backup-by-copying t) - (focus-follows-mouse t) - (mouse-autoselect-window t) - (treesit-font-lock-level 4) - (custom-file "~/.config/emacs/custom.el") - (frame-title-format "%b - Emacs") - (indent-tabs-mode nil) - (tab-width 4) - :config - (set-face-background 'vertical-border (face-background 'default)) - (set-display-table-slot standard-display-table 'vertical-border (make-glyph-code ?┃)) - (menu-bar-mode -1) - (scroll-bar-mode -1) - (xterm-mouse-mode +1) - (tool-bar-mode -1) - (global-hl-line-mode -1) - (global-auto-revert-mode t) - (show-paren-mode +1) - (column-number-mode +1) - (add-to-list 'default-frame-alist '(font . "Iosevka Comfy-13")) - (recentf-mode +1) - (fset #'jsonrpc--log-event #'ignore) ; this should be enabled only when needed, otherwise makes Emacs slower - (setq save-interprogram-paste-before-kill 't) ; system clipboard will be saved in the kill ring - (defun ccr/reload-emacs () - (interactive) - (load-file "~/.config/emacs/init.el")) - (load-theme 'catppuccin 't) - (defun ccr/nixos-rebuild () - (interactive) - (let* ((operation (completing-read "nixos-rebuild " '("switch" "boot" "test" "dry-activate"))) - (buffer-name (format "nixos-rebuild-%s" operation))) - (async-shell-command (format "sudo nixos-rebuild --flake fleet %s -L" operation) buffer-name))) - ) - -(use-package ultra-scroll - :init - (setq scroll-conservatively 101 ; important! - scroll-margin 0) - :config - (ultra-scroll-mode 1)) - -(use-package doc-view - :custom - (doc-view-scale-internally nil) - (doc-view-imenu-enabled 't) - (doc-view-continuous t)) - -(use-package tramp - :config - ;; TODO ugly `ccr' hardcoded, moreover this makes sense only when connecting to NixOS machines - (add-to-list 'tramp-remote-path "/home/ccr/.nix-profile/bin" 't) - (add-to-list 'tramp-remote-path "/etc/profiles/per-user/ccr/bin" 't) - (add-to-list 'tramp-remote-path "/run/current-system/sw/bin" 't) - (add-to-list 'tramp-remote-path 'tramp-own-remote-path) - :custom - (tramp-use-ssh-controlmaster-options nil) ;; makes tramp use ~/.ssh/config - ) - -(use-package ligature - :config - (ligature-set-ligatures 't '("www")) - (ligature-set-ligatures 'eww-mode '("ff" "fi" "ffi")) - (ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "" "---" "-<<" - "<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->" - "<--" "<-<" "<<=" "<<-" "<<<" "<+>" "" "###" "#_(" "..<" - "..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~=" - "~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|" - "[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:" - ">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:" - "<$" "<=" "<>" "<-" "<<" "<+" "" "++" "?:" - "?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)" - "\\\\" "://")) - (global-ligature-mode t)) - -(use-package rainbow-delimiters - :hook (prog-mode . rainbow-delimiters-mode)) - -(use-package pulsar - :after (consult imenu) - :config - (pulsar-global-mode) - ;; TODO use :hook (I've tried but it didn't work, why?) - (add-hook 'consult-after-jump-hook #'pulsar-recenter-top) - (add-hook 'consult-after-jump-hook #'pulsar-reveal-entry) - (add-hook 'imenu-after-jump-hook #'pulsar-recenter-top) - (add-hook 'imenu-after-jump-hook #'pulsar-reveal-entry) - (add-hook 'next-error-hook #'pulsar-pulse-line) - ) - -(use-package visual-replace - :defer t - :bind (("C-c r" . visual-replace) - :map isearch-mode-map - ("C-c r" . visual-replace-from-isearch))) - -(use-package clipetty - :delight - :hook (after-init . global-clipetty-mode)) - -(use-package nerd-icons) - -(use-package nerd-icons-completion - :after marginalia - :config (nerd-icons-completion-mode +1) - :hook ( - (marginalia-mode . nerd-icons-completion-marginalia-setup) - (ibuffer-mode . nerd-icons-completion-marginalia-setup))) - -(use-package nerd-icons-ibuffer - :hook (ibuffer-mode . nerd-icons-ibuffer-mode)) - -(use-package treemacs-nerd-icons - :config - (treemacs-load-theme "nerd-icons")) - -(use-package nerd-icons-dired - :hook - (dired-mode . nerd-icons-dired-mode)) - -(use-package indent-bars - :config - (require 'indent-bars-ts) - :custom - (indent-bars-treesit-support t) - (indent-bars-spacing-override 2) - ;; (indent-bars-treesit-wrap '()) - (indent-bars-color-by-depth '(:regexp "outline-\\([0-9]+\\)" :blend 0.4)) - (indent-bars-no-stipple-char (string-to-char "┋")) - (indent-bars-prefer-character 't) ;; so it works also in terminal - ) - -(use-package copilot - :custom - (copilot-max-char -1) - (copilot-indent-offset-warning-disable 't) - :hook (prog-mode org-mode) - :bind (("C-" . copilot-accept-completion))) - -(use-package diredfl - :config (diredfl-global-mode)) - -(use-package treemacs - :after solaire-mode - :custom - (treemacs-show-cursor nil) - (treemacs-display-current-project-exclusively t) - (treemacs-project-followlinto-home nil) - (treemacs-display-current-project-exclusively t) - (treemacs-git-mode 'deferred) - :bind (("C-c w t" . treemacs-select-window) - ("C-c o T" . treemacs)) - ) - -(use-package meow - :hook (server-after-make-frame . (lambda () (meow--prepare-face))) - :custom - (meow-use-clipboard 't) - :config - (require 'meow-tree-sitter) - (meow-tree-sitter-register-defaults) - (add-hook 'after-make-frame-functions (defun ccr/meow--prepare-face (_) - (meow--prepare-face) - (remove-hook 'after-make-frame-functions 'ccr/meow--prepare-face))) - (add-to-list 'meow-mode-state-list '(eshell-mode . insert)) - (add-to-list 'meow-mode-state-list '(eat-mode . insert)) - (add-to-list 'meow-mode-state-list '(notmuch-hello-mode . insert)) - (add-to-list 'meow-mode-state-list '(notmuch-search-mode . insert)) - :init - (meow-global-mode 1) - (meow-motion-overwrite-define-key - '("j" . meow-next) - '("k" . meow-prev) - '("" . ignore)) - (meow-leader-define-key - ;; SPC j/k will run the original command in MOTION state. - '("j" . "H-j") - '("k" . "H-k") - ;; Use SPC (0-9) for digit arguments. - '("1" . meow-digit-argument) - '("2" . meow-digit-argument) - '("3" . meow-digit-argument) - '("4" . meow-digit-argument) - '("5" . meow-digit-argument) - '("6" . meow-digit-argument) - '("7" . meow-digit-argument) - '("8" . meow-digit-argument) - '("9" . meow-digit-argument) - '("0" . meow-digit-argument) - '("/" . meow-keypad-describe-key) - '("?" . meow-cheatsheet)) - (meow-normal-define-key - '("0" . meow-expand-0) - '("9" . meow-expand-9) - '("8" . meow-expand-8) - '("7" . meow-expand-7) - '("6" . meow-expand-6) - '("5" . meow-expand-5) - '("4" . meow-expand-4) - '("3" . meow-expand-3) - '("2" . meow-expand-2) - '("1" . meow-expand-1) - '("-" . negative-argument) - '(";" . meow-reverse) - '("," . meow-inner-of-thing) - '("." . meow-bounds-of-thing) - '("[" . meow-beginning-of-thing) - '("]" . meow-end-of-thing) - '(">" . indent-rigidly-right) - '("<" . indent-rigidly-left) - '("a" . meow-append) - '("A" . meow-open-below) - '("b" . meow-back-word) - '("B" . meow-back-symbol) - '("c" . meow-change) - '("d" . meow-delete) - '("D" . meow-backward-delete) - '("e" . meow-next-word) - '("E" . meow-next-symbol) - '("f" . meow-find) - '("g" . meow-cancel-selection) - '("G" . meow-grab) - '("h" . meow-left) - '("H" . meow-left-expand) - '("i" . meow-insert) - '("I" . meow-open-above) - '("j" . meow-next) - '("J" . meow-next-expand) - '("k" . meow-prev) - '("K" . meow-prev-expand) - '("l" . meow-right) - '("L" . meow-right-expand) - '("m" . meow-join) - '("n" . meow-search) - '("o" . meow-block) - '("O" . meow-to-block) - '("p" . meow-yank) - '("q" . meow-quit) - '("Q" . meow-goto-line) - '("r" . meow-replace) - '("R" . meow-swap-grab) - '("s" . meow-kill) - '("t" . meow-till) - '("u" . meow-undo) - '("U" . vundo) - '("/" . meow-visit) - '("v" . meow-visit) - '("w" . meow-mark-word) - '("W" . meow-mark-symbol) - '("x" . meow-line) - '("X" . meow-goto-line) - '("y" . meow-save) - '("Y" . meow-sync-grab) - '("z" . meow-pop-selection) - '("'" . repeat) - '("" . ignore))) - - -(use-package windmove - :config - (windmove-mode +1) - (defcustom ccr/v-resize-amount 4 - "How smany rows move when calling `ccr/v-resize`" - :type 'integer - :group 'ccr) - (defcustom ccr/h-resize-amount 4 - "How many columns move when calling `ccr/h-resize`" - :type 'integer - :group 'ccr - ) - (defun ccr/v-resize (key) - "Interactively vertically resize the window" - (interactive "cHit >/< to enlarge/shrink") - (cond ((eq key (string-to-char ">")) - (enlarge-window-horizontally ccr/v-resize-amount) - (call-interactively 'ccr/v-resize)) - ((eq key (string-to-char "<")) - (enlarge-window-horizontally (- ccr/v-resize-amount)) - (call-interactively 'ccr/v-resize)) - (t (push key unread-command-events)))) - (defun ccr/h-resize (key) - "Interactively horizontally resize the window" - (interactive "cHit >/< to enlarge/shrink") - (cond ((eq key (string-to-char ">")) - (enlarge-window ccr/h-resize-amount) - (call-interactively 'ccr/h-resize)) - ((eq key (string-to-char "<")) - (enlarge-window (- ccr/h-resize-amount)) - (call-interactively 'ccr/h-resize)) - (t (push key unread-command-events)))) - :bind (("C-c w k" . windmove-up) - ("C-c w l" . windmove-right) - ("C-c w j" . windmove-down) - ("C-c w h" . windmove-left) - ("M-k" . windmove-up) - ("M-l" . windmove-right) - ("M-j" . windmove-down) - ("M-h" . windmove-left) - ("C-c w " . windmove-up) - ("C-c w " . windmove-right) - ("C-c w " . windmove-down) - ("C-c w " . windmove-left) - ("C-c w q" . delete-window) - ("C-c w K" . windmove-delete-up) - ("C-c w L" . windmove-delete-right) - ("C-c w J" . windmove-delete-down) - ("C-c w H" . windmove-delete-left) - ("C-c w x" . kill-buffer-and-window) - ("C-c w v" . split-window-right) - ("C-c w s" . split-window-below) - ("C-c w V" . ccr/v-resize) - ("C-c w S" . ccr/h-resize))) - -(use-package vertico - :custom - (vertico-mouse-mode t) - ;; (vertico-reverse-mode t) ;; FIXME breaks vertico-posframe - (vertico-count 16) - (vertico-resize t) - (vertico-cycle t) - (vertico-mode t) - :bind (:map vertico-map - (("DEL" . vertico-directory-delete-char) - ("C-DEL" . vertico-directory-delete-word) - ("M-q" . vertico-quick-insert) - ("C-q" . vertico-quick-exit)))) - -;; (use-package vertico-posframe -;; :after vertico -;; :config -;; (vertico-posframe-mode +1) -;; :custom -;; (vertico-multiform-commands -;; '((t -;; posframe -;; (vertico-posframe-poshandler . posframe-poshandler-frame-center) -;; (vertico-posframe-fallback-mode . vertico-buffer-mode)))) -;; (vertico-posframe-min-height 1) -;; ;; (vertico-posframe-min-width 80) -;; (vertico-posframe-parameters '((alpha-background . 80))) -;; ) - -(use-package marginalia - :init - (marginalia-mode +1) - :custom - (marginalia-aligh 'right)) - -(use-package consult - :bind (([remap switch-to-buffer] . consult-buffer) - ([remap goto-line] . consult-goto-line) - ([remazp imenu] . consult-imenu) - ([remap project-switch-to-buffer] . consult-project-buffer) - ("C-c b b" . consult-project-buffer) - ("C-c b B" . consult-buffer) - ("C-c g l" . consult-goto-line) - ("C-c b i" . consult-imenu) - ("C-c f f" . consult-find) - ("C-c F" . consult-ripgrep) - ("C-c f" . consult-find) - ("C-c l" . consult-line) - ("C-c L" . consult-focus-lines) - ("C-c m" . consult-mark) - ("C-c o o" . consult-outline) - ("C-c e" . consult-flymake)) - :custom - (xref-show-xrefs-function #'consult-xref) - (xref-show-definitions-function #'consult-xref)) - -(use-package orderless - :custom - (completion-styles '(orderless basic)) - (completion-category-overrides '((file (styles basic partial-completion))))) - -(use-package embark - :bind (("C-'" . embark-act) - ("C-=" . embark-dwim))) - -(use-package corfu - :config - (corfu-terminal-mode) - (corfu-popupinfo-mode) - (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter) - :custom - (completion-cycle-threshold nil) - (tab-always-indent 'complete) - (kind-icon-default-face 'corfu-default) - :bind (:map corfu-map - (("M-d" . corfu-doc-toggle) - ("M-l" . corfu-show-location) - ("SPC" . corfu-insert-separator))) - :init - (global-corfu-mode)) - -(use-package cape - :config - (add-to-list 'completion-at-point-functions #'cape-dabbrev) - (add-to-list 'completion-at-point-functions #'cape-file)) - -(use-package prog-mode - :hook ((prog-mode . hl-line-mode) - (prog-mode . display-line-numbers-mode))) - -(use-package which-key :delight :config - (which-key-mode) - (which-key-setup-side-window-right)) - -(use-package p-search) - -(use-package magit - :bind (("C-c o g" . magit))) - -(use-package magit-delta - :hook (magit-mode . magit-delta-mode)) - -(use-package magit-todos - :after magit - :custom (magit-todos-keyword-suffix "\\(?:([^)]+)\\)?:?") - :config (magit-todos-mode 1)) - -(use-package difftastic - :demand t - :bind (:map magit-blame-read-only-mode-map - ("D" . difftastic-magit-show) - ("S" . difftastic-magit-show)) - :config - (eval-after-load 'magit-diff - '(transient-append-suffix 'magit-diff '(-1 -1) - [("D" "Difftastic diff (dwim)" difftastic-magit-diff) - ("S" "Difftastic show" difftastic-magit-show)]))) - -;; FIXME there is something deeply wrong about how nix is configured here -;; (use-package nix-mode -;; :delight nix-prettify-mode -;; :config -;; (global-nix-prettify-mode)) - -(use-package agenix - :after envrc - :hook (agenix-pre-mode . envrc-mode)) - -(use-package nix-ts-mode - :hook ( - (nix-ts-mode . (lambda () - (require 'eglot) - (add-to-list 'eglot-server-programs - '(nix-ts-mode . ("nixd"))) - (eglot-ensure))) - (nix-ts-mode . electric-pair-mode) - (nix-ts-mode . (lambda () (setq-local indent-bars-spacing-override 2) (indent-bars-mode))) - (nix-ts-mode . (lambda () - (setq-local - treesit-font-lock-settings - (append treesit-font-lock-settings - (treesit-font-lock-rules - :language 'nix - :feature 'function - :override t - `((formal) @font-lock-type-face) - - :language 'nix - :feature 'function - `((attrpath) @font-lock-function-name-face) - ))))) - ) - :mode "\\.nix\\'" - ) - -(use-package dockerfile-ts-mode - :mode "Dockerfile\\'") - -(use-package lean4-mode - :mode "\\.lean\\'") - -(use-package python-ts-mode - :hook ((python-ts-mode . (lambda () - (require 'eglot) - (add-to-list 'eglot-server-programs - '(python-ts-mode . ("jedi-language-server"))) - (eglot-ensure)))) - :mode "\\.py\\'") - -(use-package solidity-mode - :hook ((solidity-mode . (lambda () - (require 'eglot) - (add-to-list 'eglot-server-programs - '(solidity-mode . ("nomicfoundation-solidity-language-server" "--stdio"))) - (eglot-ensure)))) - :mode "\\.sol\\'") - - -(use-package typescript-ts-mode - :hook ((typescript-ts-mode . (lambda () - (require 'eglot) - (eglot-ensure)))) - :mode "\\.ts\\'") - -(use-package rust-mode - :init - (setq rust-mode-treesitter-derive t) - :hook ((rust-mode . (lambda () - (require 'eglot) - (eglot-ensure))))) - -(use-package haskell-ts-mode - :hook ((haskell--ts-mode . eglot-ensure)) - :mode "\\.hs\\'" - :config - (add-to-list 'eglot-server-programs - '(haskell-ts-mode . ("haskell-language-server" "--lsp")))) - -(use-package tidal - :custom ((tidal-interpreter "tidal"))) - -(use-package purescript-mode - :custom ((project-vc-extra-root-markers '("spago.dhall"))) - :hook ((purescript-mode . eglot-ensure) - (purescript-mode . turn-on-purescript-indentation) - (purescript-mode . (lambda () (setq project-vc-extra-root-markers '("spago.dhall")))))) - -(use-package terraform-mode - :after eglot - :config - (add-to-list 'eglot-server-programs - '(terraform-mode . ("terraform-lsp"))) - :hook ((terraform-mode . eglot-ensure) - ;; (terraform-mode . tree-sitter-hl-mode) - (terraform-mode . (lambda () (setq indent-bars-spacing-override 2) (indent-bars-mode))) - )) - -(use-package yaml-mode - :hook (yaml-mode . yaml-ts-mode)) - -(use-package sh-mode - :hook (sh-mode . bash-ts-mode)) - -(use-package kdl-ts-mode - :mode "\\.kdl\\'") - -(use-package gptscript-mode - :mode "\\.gpt\\'") - -(use-package gptscript-mode - :mode "\\.gpt\\'") - -(use-package typst-ts-mode - :config - (add-to-list 'eglot-server-programs - '(typst-ts-mode . ("tinymist" "lsp"))) - :mode "\\.typ\\'") - -;; FIXME -;; (use-package mmm-mode -;; :config -;; (mmm-add-group 'nix-sh -;; '((sh-command -;; :submode sh-mode -;; :face mmm-output-submode-face -;; :front "[^'a-zA-Z]''[^']" -;; :back "''[^$\\']" -;; :include-front t -;; :front-offset 4 -;; :end-not-begin t))) -;; (mmm-add-mode-ext-class 'nix-mode "\\.nix\\'" 'nix-sh)) - -(use-package paredit - :delight - :hook ((lisp-mode . enable-paredit-mode) - (emacs-lisp-mode . enable-paredit-mode))) - -(use-package aggressive-indent - :hook ((lisp-mode . aggressive-indent-mode) - (emacs-lisp-mode . aggressive-indent-mode))) - -(use-package eldoc - :delight) - -(use-package eldoc-box - :after eglot - :custom - (eldoc-box-only-multiline nil) - (eldoc-box-lighter "ElBox") - :bind (("C-c h" . eldoc-box-help-at-point))) - -(use-package diff-hl - :init - (global-diff-hl-mode 1) - (diff-hl-margin-mode 1)) - -(use-package envrc - :config - (envrc-global-mode +1)) - -(use-package hl-todo - :init - (global-hl-todo-mode)) - -(use-package eat - :init - ;; FIXME if we not load eat on startup then adding more non bound keys in :config - ;; will a cause "nesting exceeds `max-lisp-eval-depth'" on (eat-reload) - (eat) - :custom - (eat-kill-buffer-on-exit t) - :config - (add-to-list 'eat-semi-char-non-bound-keys '[?\e 104]) ; M-h - (add-to-list 'eat-semi-char-non-bound-keys '[?\e 106]) ; M-j - (add-to-list 'eat-semi-char-non-bound-keys '[?\e 107]) ; M-k - (add-to-list 'eat-semi-char-non-bound-keys '[?\e 108]) ; M-l - (eat-update-semi-char-mode-map) - (eat-reload) - :bind (("C-c o t" . eat-project)) - ;; FIXME doesn't work well - ;; ((eat-mode . compilation-shell-minor-mode)) - ) - -(use-package eshell - :init (require 'eshell) ;; this slows down Emacs startup but it's needed when starting eshell with - ;; emacsclient --eval before opening another eshell buffer directly from inside Emacs - (eat-eshell-mode) - (eat-eshell-visual-command-mode) - :custom ((eshell-prefer-lisp-functions t) - (eshell-history-size 10000) - (eshell-banner-message "")) - :config - (defun ccr/start-eshell () ;; Used from outside Emacs by emacsclient --eval - (eshell 'N) - (add-hook 'kill-buffer-hook 'delete-frame nil 't)) ;; destroy frame on exit - - ;; Wrapping this in order to merge histories from different shells - ;; (advice-add 'eshell-write-history - ;; :around #'ccr/wrap-eshell-write-history) - - (add-to-list 'eshell-modules-list 'eshell-tramp) ;; to use sudo in eshell - ;; (add-to-list 'eshell-modules-list 'eshell-smart) ;; plan 9 style - - (setq ccr/eshell-aliases - '((g . magit) - (gl . magit-log) - (d . dired) - (o . find-file) - (oo . find-file-other-window) - (l . (lambda () (eshell/ls '-la))) - (eshell/clear . eshell/clear-scrollback))) - - (mapc (lambda (alias) - (defalias (car alias) (cdr alias))) - ccr/eshell-aliases) - - - (defun ccr/eshell-get-current-input () - "Restituisce l'input corrente dell'utente nella riga Eshell." - (when (eq major-mode 'eshell-mode) - (let ((start (save-excursion (eshell-bol) (point))) - (end (point-at-eol))) - (buffer-substring-no-properties start end)))) - - (defun ccr/eshell-replace-current-input (new-input) - (when (eq major-mode 'eshell-mode) - (let ((inhibit-read-only t)) - (eshell-bol) - (delete-region (point) (point-at-eol)) - (insert new-input) - (end-of-line)))) - - (defun ccr/eshell-history () - (interactive) - (when (eq major-mode 'eshell-mode) - (let* ((current-input (ccr/eshell-get-current-input)) - (eshell-history (when (and eshell-history-file-name - (file-readable-p eshell-history-file-name)) - (f-read-text eshell-history-file-name))) - (bash-history (when (file-readable-p "~/.bash_history") - (f-read-text "~/.bash_history"))) - (history (split-string (concat (or eshell-history "") "\n" - (or bash-history "")) "\n" t)) - (selection (completing-read "History: " history nil t current-input))) - (ccr/eshell-replace-current-input selection)))) - - :bind (("C-c o e" . project-eshell) - (:map eshell-mode-map - ("C-r" . ccr/eshell-history) - ("C-" . corfu-send) - ))) ;; i.e. just C-r in semi-char-mode - -(use-package eshell-command-not-found - :custom ((eshell-command-not-found-command "command-not-found")) - :hook ((eshell-mode . eshell-command-not-found-mode))) - -;; (use-package eshell-atuin -;; :hook ((eshell-mode . eshell-atuin-mode))) - -(use-package eshell-syntax-highlighting - :custom - ((eshell-syntax-highlighting-highlight-in-remote-dirs nil)) - :config - (eshell-syntax-highlighting-global-mode +1)) - -(use-package eshell-prompt-extras - :custom ((eshell-highlight-prompt nil) - (eshell-prompt-function 'epe-theme-lambda))) - -(use-package popper - :custom - (popper-reference-buffers - '("\*Messages\*" - "Output\*$" - "\\*Async Shell Command\\*" - (completion-list-mode . hide) - help-mode - compilation-mode - "^\\*Nix-REPL*\\*$" nix-repl-mode - "^\\*.+-eshell.*\\*$" eshell-mode - "^\\*shell.*\\*$" shell-mode - "^\\*term.*\\*$" term-mode - "^\\*eat.*\\*$" eat-mode - )) - (popper-window-height 0.33) - (popper-echo-lines 1) - (popper-mode-line nil) - :init - (popper-mode 1) - (popper-echo-mode 1) - :bind (("C-c t t" . popper-toggle-latest) - ("C-c t c" . popper-cycle) - ("C-c t p" . popper-toggle-type))) - -(use-package org - :hook ((org-mode . variable-pitch-mode) - (org-mode . visual-line-mode) - (org-mode . visual-fill-column-mode)) - :custom ((org-log-done nil) - (org-return-follows-link t) - (org-hide-emphasis-markers t) - (visual-fill-column-center-text t) - (visual-fill-column-width 100) - (fill-column 100) - (org-capture-templates '( - ("j" "Work Log Entry" - entry (file+datetree "~/org/work-log.org") - "* %?" - :empty-lines 0) - ("n" "Note" - entry (file+headline "~/org/notes.org" "Random Notes") - "** %?" - :empty-lines 0) - )) - (org-auto-align-tags nil) - (org-tags-column 0) - (org-catch-invisible-edits 'show-and-error) - (org-special-ctrl-a/e t) - (org-insert-heading-respect-content t) - (org-pretty-entities t) - (org-ellipsis "…") - (org-use-sub-superscripts nil) - ) - :bind (("C-c o l" . org-store-link) - ("C-c o c" . org-capture) - ("C-c b o" . org-switchb)) - :config - (defun ccr/org-capture (key) - "Capture a note using the template KEY and close the frame when done. -This is meant to be an helper to be called from the window manager." - (interactive) - (org-capture nil key) - (add-hook 'kill-buffer-hook 'delete-frame nil 't) ;; destroy frame on exit - (delete-other-windows)) - - (dolist (face '(org-block-begin-line - org-block-end-line - org-verbatim - org-code - )) - (set-face-attribute face nil :inherit 'fixed-pitch)) - - (org-babel-do-load-languages - 'org-babel-load-languages '((haskell . t))) - - (defun ccr/org-attach-save-file-list-to-property (dir) - "Save list of attachments to ORG_ATTACH_FILES property." - (when-let* ((files (org-attach-file-list dir))) - (org-set-property "ORG_ATTACH_FILES" (mapconcat #'identity files ", ")))) - (add-hook 'org-attach-after-change-hook #'ccr/org-attach-save-file-list-to-property)) - -(use-package org-agenda - :after org-super-agenda - :custom - (org-agenda-files '("~/org")) - (org-agenda-tags-column 0) - (org-agenda-block-separator ?─) - (org-agenda-time-grid - '((daily today require-timed) - (800 1000 1200 1400 1600 1800 2000) - " ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄")) - (org-agenda-current-time-string - "◀── now ─────────────────────────────────────────────────") - (org-super-agenda-groups - '(;; Each group has an implicit boolean OR operator between its selectors. - (:name "Today" ; Optionally specify section name - :time-grid t ; Items that appear on the time grid - :todo "TODAY") ; Items that have this TODO keyword - (:name "Important" - ;; Single arguments given alone - :tag "bills" - :priority "A") - ;; Set order of multiple groups at once - (:order-multi (2 (:name "Shopping in town" - ;; Boolean AND group matches items that match all subgroups - :and (:tag "shopping" :tag "@town")) - (:name "Food-related" - ;; Multiple args given in list with implicit OR - :tag ("food" "dinner")) - (:name "Personal" - :habit t - :tag "personal") - (:name "Space-related (non-moon-or-planet-related)" - ;; Regexps match case-insensitively on the entire entry - :and (:regexp ("space" "NASA") - ;; Boolean NOT also has implicit OR between selectors - :not (:regexp "moon" :tag "planet"))))) - ;; Groups supply their own section names when none are given - (:todo "WAITING" :order 8) ; Set order of this section - (:todo ("SOMEDAY" "TO-READ" "CHECK" "TO-WATCH" "WATCHING") - ;; Show this group at the end of the agenda (since it has the - ;; highest number). If you specified this group last, items - ;; with these todo keywords that e.g. have priority A would be - ;; displayed in that group instead, because items are grouped - ;; out in the order the groups are listed. - :order 9) - (:priority<= "B" - ;; Show this section after "Today" and "Important", because - ;; their order is unspecified, defaulting to 0. Sections - ;; are displayed lowest-number-first. - :order 1) - ;; After the last group, the agenda will display items that didn't - ;; match any of these groups, with the default order position of 99 - )) - :bind (("C-c o a" . org-agenda)) - :config - (org-super-agenda-mode) - ) - -(use-package org-modern - :after org - :init - (global-org-modern-mode) - ;; FIXME the following doesn't work when using the daemon, it should be executed only - ;; one time after the first frame is created - :hook (server-after-make-frame . (lambda () - (set-face-font 'variable-pitch "Dejavu Serif-14") - (set-face-font 'fixed-pitch "Iosevka Comfy-14") - (set-face-font 'org-table "Iosevka Comfy-14") - (set-face-font 'org-meta-line "Iosevka Comfy-14") - (set-face-font 'org-drawer "Iosevka Comfy-14") - (set-face-font 'org-special-keyword "Iosevka Comfy-14") - (set-face-font 'org-property-value "Iosevka Comfy-14") - (set-face-font 'org-block "Iosevka Comfy-14") - (set-face-font 'org-modern-tag "Iosevka Comfy-14") - (set-face-font 'org-modern-date-active "Iosevka Comfy-14") - (set-face-font 'org-modern-date-inactive "Iosevka Comfy-14"))) - ) - -(use-package org-roam - :init - (require 'org) - (require 'org-roam) - (require 'org-roam-dailies) - (require 'org-protocol) - (require 'org-roam-protocol) - :custom - (org-roam-v2-ack t) - (org-roam-directory (file-truename "~/roam")) - (org-roam-completion-everywhere 't) - (org-roam-dailies-capture-templates - '( - ("d" "Generic entry" entry - "* %?" - :target (file+head "%<%Y-%m-%d>.org" "#+TITLE: %<%Y-%m-%d>")) - ("b" "Billable entry" entry - "* TODO ${Entry} :billable:${Client}:\n:PROPERTIES:\n:SPENT: ${Spent}\n:END:\n%?" - :target (file+head "%<%Y-%m-%d>.org" "#+TITLE: %<%Y-%m-%d>") - :create-id t) - ) - ) - (org-roam-capture-ref-templates - '( - ("r" "Web entry" entry - "** %i \n:PROPERTIES:\n:URL: ${ref}\n:END:" - :target (file+olp "inbox.org" ("Web entries")) - :create-id t) - ) - ) - :config - (org-roam-db-autosync-mode) - - ;; The following functions name are relevant because org-roam-ql columns in queries use their suffix - (defun org-roam-node-spent (node) - "Return the hours spent as number" - (string-to-number (cdr (assoc "SPENT" (org-roam-node-properties node))))) - (defun org-roam-node-date (node) - "Return the org datestring when a node was created (obtained from the filename)" - (format "<%s>" (file-name-sans-extension (file-name-nondirectory (org-roam-node-file node))))) - - (org-roam-ql-defpred - 'date-range - "Check if node was created in given time range" - #'org-roam-node-date - #'(lambda (node-date start-date end-date) - (let ((node-date (condition-case nil - ;; if the entry is not from the journal (i.e. the filename is not something like "2024-10-10.org") - ;; then it's always discarded (the epoch time is given to it) - (encode-time (org-parse-time-string node-date)) - (error (encode-time (org-parse-time-string "<1970-01-01>"))))) - (start-date (encode-time (org-parse-time-string start-date))) - (end-date (encode-time (org-parse-time-string end-date)))) - (and (time-less-p start-date node-date) - (time-less-p node-date end-date))) - )) - - (defun ccr/org-roam-spent-hours (client &optional date-start date-end) - "Return the total spent hours on something (usually a client)" - (let* ((query-tags `(tags ,client "billable")) - (query (if (and date-start date-end) - `(and ,query-tags (date-range ,date-start ,date-end)) - query-tags))) - (apply #'+(mapcar #'org-roam-node-spent (org-roam-ql-nodes query))))) - :bind - (("C-c n i" . org-roam-node-insert))) - -(use-package org-roam-ql - :after org-roam - :bind ((:map org-roam-mode-map - ("v" . org-roam-ql-buffer-dispatch) - :map minibuffer-mode-map - ("C-c n i" . org-roam-ql-insert-node-title)))) - -(use-package consult-org-roam - :delight - :after org-roam - :init - (require 'consult-org-roam) - ;; Activate the minor mode - (consult-org-roam-mode 1) - :custom - (consutl-org-roam-grep-func #'consult-ripgrep) - (consult-org-roam-buffer-narrow-key ?r) - (consult-org-roam-buffer-after-buffers t) - (setq org-roam-database-connector 'sqlite-builtin) - :config - (consult-customize - consult-org-roam-forward-links - :preview-key (kbd "M-.")) - :bind - ("C-c n f" . consult-org-roam-file-find) - ("C-c n b" . consult-org-roam-backlinks) - ("C-c n l" . consult-org-roam-forward-links) - ("C-c n s" . consult-org-roam-search)) - -(use-package org-roam-ui - :after org-roam - :hook (after-init . org-roam-ui-mode) ;; don't care about startup time since I'm using Emacs daemonized - :config - (setq org-roam-ui-sync-theme t - org-roam-ui-follow t - org-roam-ui-update-on-save t - org-roam-ui-open-on-start nil)) - -(use-package org-download - :after org - :custom (org-download-image-dir (concat org-roam-directory "/images")) - :bind - (:map org-mode-map - (("M-p" . org-download-clipboard)))) - -(use-package aidermacs - :bind (("C-c A" . aidermacs-transient-menu)) - :init - (require 'f) - (setenv "OPENROUTER_API_KEY" (f-read-text (getenv "OPENROUTER_API_KEY_PATH"))) - :custom - (aidermacs-use-architect-mode t) - (aidermacs-default-model "openrouter/deepseek/deepseek-chat-v3-0324")) - -(use-package gptel - :custom - (gptel-model 'google/gemini-2.5-flash-preview) - (gptel-backend (gptel-make-openai "OpenRouter" - :host "openrouter.ai" - :endpoint "/api/v1/chat/completions" - :key (lambda () (require 'f) (f-read-text (getenv "OPENROUTER_API_KEY_PATH"))) - :stream t - :models '(google/gemini-2.5-flash-preview)) - ) - (gptel-default-mode 'org-mode) - (gptel-org-branching-context nil) ;; this is cool but I don't feel comfortable with it - (gptel-use-tools 't) - - :bind - ("C-c a a" . gptel-add) - ("C-c a f" . gptel-add-file) - ("C-c a r" . gptel-context-remove-all) - ("C-c a " . gptel-menu) - - - :config - (require 'gptel-curl) - - ;; (add-hook 'gptel-post-response-functions 'gptel-end-of-response) - ;; (add-hook 'gptel-post-stream-hook 'gptel-auto-scroll) - - (defun ccr/edit-buffer (buffer-name old-string new-string) - "In BUFFER-NAME, replace OLD-STRING with NEW-STRING." - (with-current-buffer buffer-name - (let ((case-fold-search nil)) ;; Case-sensitive search - (save-excursion - (goto-char (point-min)) - (let ((count 0)) - (while (search-forward old-string nil t) - (setq count (1+ count))) - (if (= count 0) - (format "Error: Could not find text to replace in buffer %s" buffer-name) - (if (> count 1) - (format "Error: Found %d matches for the text to replace in buffer %s" count buffer-name) - (goto-char (point-min)) - (search-forward old-string) - (replace-match new-string t t) - (format "Successfully edited buffer %s" buffer-name)))))))) - - (defun ccr/replace-buffer (buffer-name content) - "Completely replace contents of BUFFER-NAME with CONTENT." - (with-current-buffer buffer-name - (erase-buffer) - (insert content) - (format "Buffer replaced: %s" buffer-name))) - - (setq gptel-tools `( - ,(gptel-make-tool - :function (lambda (url) - (with-current-buffer (url-retrieve-synchronously url) - (goto-char (point-min)) - (forward-paragraph) - (let ((dom (libxml-parse-html-region (point) (point-max)))) - (run-at-time 0 nil #'kill-buffer (current-buffer)) - (with-temp-buffer - (shr-insert-document dom) - (buffer-substring-no-properties (point-min) (point-max)))))) - :name "read_url" - :description "Fetch and read the contents of a URL" - :args (list '(:name "url" - :type string - :description "The URL to read")) - :category "web") - ,(gptel-make-tool - :function (lambda (filepath) - (with-temp-buffer - (insert-file-contents (expand-file-name filepath)) - (buffer-string))) - :name "read_file" - :description "Read and display the contents of a file" - :args (list '(:name "filepath" - :type string - :description "Path to the file to read. Supports relative paths and ~.")) - :category "filesystem") - ,(gptel-make-tool - :function (lambda (directory) - (mapconcat #'identity - (directory-files directory) - "\n")) - :name "list_directory" - :description "List the contents of a given directory" - :args (list '(:name "directory" - :type string - :description "The path to the directory to list")) - :category "filesystem") - ,(gptel-make-tool - :function (lambda () (mapcar 'buffer-name (buffer-list))) - :name "list_buffers" - :description "Return a list containing all the Emacs buffers" - :category "emacs") - ,(gptel-make-tool - :function (lambda (buffer) - (unless (buffer-live-p (get-buffer buffer)) - (error "Error: buffer %s is not live." buffer)) - (with-current-buffer buffer - (buffer-substring-no-properties (point-min) (point-max)))) - :name "read_buffer" - :description "Return the contents of an Emacs buffer" - :args (list '(:name "buffer" - :type string - :description "The name of the buffer whose contents are to be retrieved")) - :category "emacs") - ,(gptel-make-tool - :function (lambda (buffer text) - (with-current-buffer (get-buffer-create buffer) - (save-excursion - (goto-char (point-max)) - (insert text))) - (format "Appended text to buffer %s" buffer)) - :name "append_to_buffer" - :description "Append text to an Emacs buffer. If the buffer does not exist, it will be created." - :confirm t - :args (list '(:name "buffer" - :type string - :description "The name of the buffer to append text to.") - '(:name "text" - :type string - :description "The text to append to the buffer.")) - :category "emacs") - ,(gptel-make-tool - :function (lambda (buffer text) - (with-current-buffer (get-buffer-create buffer) - (save-excursion - (goto-char (point-max)) - (insert text))) - (format "Appended text to buffer %s" buffer)) - :name "append_to_buffer" - :description "Append text to an Emacs buffer. If the buffer does not exist, it will be created." - :confirm t - :args (list '(:name "buffer" - :type string - :description "The name of the buffer to append text to.") - '(:name "text" - :type string - :description "The text to append to the buffer.")) - :category "emacs") - ,(gptel-make-tool - :name "EditBuffer" - :function #'ccr/edit-buffer - :description "Edits Emacs buffers" - :confirm t - :args '((:name "buffer_name" - :type string - :description "Name of the buffer to modify" - :required t) - (:name "old_string" - :type string - :description "Text to replace (must match exactly)" - :required t) - (:name "new_string" - :type string - :description "Text to replace old_string with" - :required t)) - :category "edit") - , - (gptel-make-tool - :name "ReplaceBuffer" - :function #'ccr/replace-buffer - :description "Completely overwrites buffer contents" - :confirm t - :args '((:name "buffer_name" - :type string - :description "Name of the buffer to overwrite" - :required t) - (:name "content" - :type string - :description "Content to write to the buffer" - :required t)) - :category "edit") - ,(gptel-make-tool - :function (lambda (title body) - (org-roam-capture- - :templates `(("d" "" plain "%?" :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org" ,(concat "#+title: ${title}\n\n" body)))) ; override default template - :node (org-roam-node-create :title title) - :props '(:unnarrowed 't :tags "gptel")) - ) - :name "create_org_roam_note" - :description "Create a new org-roam note." - :args (list '(:name "title" - :type string - :description "The name of the note to create. Try to automatically infere it and ask only if dubious.") - '(:name "body" - :type string - :description "The body of the note write in an org language, aovoid starting with an headline as first line. Feel free to exploit the org syntax.")) - :category "org-roam") - )) - - - (defun ccr/suggest-eshell-command () - (interactive) - (save-excursion - (eshell-bol) - (let ((start-pos (point)) - (end-pos (line-end-position))) - (gptel-request - (buffer-substring-no-properties start-pos end-pos) ;the prompt - :system "You are proficient with emacs shell (eshell), translate the following to something I could directly prompt to the shell. Your responses should only be code, without explanation or formatting or quoting." - :buffer (current-buffer) - :context (cons (set-marker (make-marker) start-pos) - (set-marker (make-marker) end-pos)) - :callback - (lambda (response info) - (if (not response) - (message "ChatGPT response failed with: %s" (plist-get info :status)) - (kill-region start-pos end-pos) - (insert response))))))) - - (add-to-list 'display-buffer-alist - '("^\\*ChatGPT\\*" - (display-buffer-full-frame) - (name . "floating"))) - - (defun ccr/start-chatgpt () ;; Used from outside Emacs by emacsclient --eval - (display-buffer (gptel "*ChatGPT*")) - (set-frame-name "floating") - ) - ) - -(use-package mixed-pitch - :hook (text-mode . mixed-pitch-mode)) - -(use-package pass - :config - (require 'password-store-otp) ;; FIXME use `use-pacakge' idiomatic way - - :bind (("C-c p p" . password-store-copy) - ("C-c p o" . password-store-otp-token-copy) - ("C-c p e" . password-store-edit) - ("C-c p i" . password-store-insert))) - -(use-package with-editor - :init (shell-command-with-editor-mode +1)) - -(use-package go-translate - :custom - (gts-translate-list '(("it" "en") ("en" "it"))) - (gts-default-translator - (gts-translator - :picker (gts-prompt-picker) - :engines `(,(gts-bing-engine) - ,(gts-google-engine :parser (gts-google-summary-parser))) - :render (gts-buffer-render))) - (gts-buffer-follow-p 't) - :bind (("C-c T t" . gts-do-translate))) - -(use-package message - :custom - (message-send-mail-function 'smtpmail-send-it) - (send-mail-function 'smtpmail-send-it) - (user-mail-address "andrea.ciceri@autistici.org") - (smtpmail-smtp-server "mail.autistici.org") - (smtpmail-stream-type 'ssl) - (smtpmail-smtp-service 465) - ;; also the following line is needeed in ~/.authinfo.gpg - ;; machine mail.autistici.org login andrea.ciceri@autistici.org password - ) - -(use-package notmuch - :custom - (notmuch-show-logo nil) - (send-mail-function 'sendmail-send-it) - (notmuch-archive-tags '("-new")) - (notmuch-saved-searches - '((:name "Inbox" :query "tag:new" :key "i") - (:name "Sent" :query "tag:sent" :key "s") - (:name "Draft" :query "tag:draft" :key "s") - (:name "GitHub" :query "tag:github" :key "g") - (:name "Trash" :query "tag:trash" :key "t")))) - -;;; Experiments, remove from here - -(defun ccr/test (niri-socket) - "Select a window and focus it based on `niri msg` output." - (interactive) - (let* ((niri-output (ccr/niri-get-windows niri-socket)) - (display-list (mapcar (lambda (entry) - (let ((title (cdr (assoc 'title entry))) - (app-id (cdr (assoc 'app_id entry))) - (id (cdr (assoc 'id entry)))) - (cons (format "%s - %s" title app-id) id))) - niri-output))) - (with-selected-frame - (make-frame '((name . "Emacs Selector") - (minibuffer . only) - (fullscreen . 0) - (undecorated . t) - (internal-border-width . 10) - (width . 120) - (height . 20))) - (unwind-protect - (let* ((entry (completing-read "Select window: " (mapcar #'car display-list) nil t "")) - (entry-id (cdr (assoc entry display-list))) ;; Get the ID associated with the selected entry - (command (format "NIRI_SOCKET=\"%s\" niri msg action focus-window --id %s" niri-socket entry-id))) - (message command) - (shell-command command)) - (delete-frame))))) - - -(defun ccr/niri-get-windows (niri-socket) - "Esegue `niri msg --json windows` e parse l'output JSON in una alist." - (let* ((command (format "NIRI_SOCKET=\"%s\" niri msg --json windows" niri-socket)) - (output (shell-command-to-string command)) - (json-object-type 'alist) ; Usa alist per rappresentare gli oggetti JSON - (parsed-json (json-read-from-string output))) - parsed-json)) - - -(provide 'init) -;;; init.el ends here diff --git a/hmModules/email/default.nix b/hmModules/email/default.nix index ab37b05..d3b9d2a 100644 --- a/hmModules/email/default.nix +++ b/hmModules/email/default.nix @@ -1,271 +1,17 @@ { pkgs, secrets, - fleetFlake, - lib, ... -}: -{ +}: { programs.mbsync.enable = true; programs.msmtp.enable = true; - services.mbsync = { - enable = true; - postExec = lib.getExe ( - pkgs.writeShellScriptBin "mbsync-post-exec" '' - ${lib.getExe pkgs.notmuch} new - for _ in _ _ - do - afew -C ~/.config/notmuch/default/config --tag --new -vv - afew -C ~/.config/notmuch/default/config --move --new -vv - done - '' - ); - }; - - # home.file.".config/aerc/stylesets" = - # let - # catppuccin-aerc = pkgs.fetchFromGitHub { - # owner = "catppuccin"; - # repo = "aerc"; - # rev = "ca404a9f2d125ef12db40db663d43c9d94116a05"; - # hash = "sha256-OWIkHsKFts/zkrDUtbBPXHVSrHL/F0v3LB1rnlFAKmE="; - # }; - # in - # { - # source = "${catppuccin-aerc}/dist"; - # recursive = true; - # }; - - # programs.aerc = { - # enable = true; - # extraBinds = { - # global = { - # "" = ":prev-tab"; - # "" = ":next-tab"; - # "?" = ":help keys"; - # }; - - # messages = { - # "h" = ":prev-tab"; - # "l" = ":next-tab"; - - # "j" = ":next"; - # "" = ":next"; - # "" = ":next 50%"; - # "" = ":next 100%"; - # "" = ":next 100%"; - - # "k" = ":prev"; - # "" = ":prev"; - # "" = ":prev 50%"; - # "" = ":prev 100%"; - # "" = ":prev 100%"; - # "g" = ":select 0"; - # "G" = ":select -1"; - - # "J" = ":next-folder"; - # "K" = ":prev-folder"; - # "H" = ":collapse-folder"; - # "L" = ":expand-folder"; - - # "v" = ":mark -t"; - # "x" = ":mark -t:next"; - # "V" = ":mark -v"; - - # "T" = ":toggle-threads"; - - # "" = ":view"; - # "d" = ":prompt 'Really delete this message?' 'delete-message'"; - # "D" = ":delete"; - # "A" = ":archive flat"; - - # "C" = ":compose"; - - # "rr" = ":reply -a"; - # "rq" = ":reply -aq"; - # "Rr" = ":reply"; - # "Rq" = ":reply -q"; - - # "c" = ":cf"; - # "$" = ":term"; - # "!" = ":term"; - # "|" = ":pipe"; - - # "/" = ":search"; - # "\\" = ":filter"; - # "n" = ":next-result"; - # "N" = ":prev-result"; - # "" = ":clear"; - # }; - - # "messages:folder=Drafts" = { - # "" = ":recall"; - # }; - - # view = { - # "/" = ":toggle-key-passthrough/"; - # "q" = ":close"; - # "O" = ":open"; - # "S" = ":save"; - # "|" = ":pipe"; - # "D" = ":delete"; - # "A" = ":archive flat"; - - # "" = ":open-link "; - - # "f" = ":forward"; - # "rr" = ":reply -a"; - # "rq" = ":reply -aq"; - # "Rr" = ":reply"; - # "Rq" = ":reply -q"; - - # "H" = ":toggle-headers"; - # "" = ":prev-part"; - # "" = ":next-part"; - # "J" = ":next"; - # "K" = ":prev"; - # }; - - # "view::passthrough" = { - # "$noinherit" = true; - # "$ex" = ""; - # "" = ":toggle-key-passthrough"; - # }; - - # compose = { - # "$noinherit" = "true"; - # "$ex" = ""; - # "" = ":prev-field"; - # "" = ":next-field"; - # "" = ":switch-account -p"; - # "" = ":switch-account -n"; - # "" = ":next-field"; - # "" = ":prev-tab"; - # "" = ":next-tab"; - # }; - - # "compose::editor" = { - # "$noinherit" = "true"; - # "$ex" = ""; - # "" = ":prev-field"; - # "" = ":next-field"; - # "" = ":prev-tab"; - # "" = ":next-tab"; - # }; - - # "compose::review" = { - # "y" = ":send"; - # "n" = ":abort"; - # "p" = ":postpone"; - # "q" = ":choose -o d discard abort -o p postpone postpone"; - # "e" = ":edit"; - # "a" = ":attach"; - # "d" = ":detach"; - # }; - - # terminal = { - # "$noinherit" = "true"; - # "$ex" = ""; - - # "" = ":prev-tab"; - # "" = ":next-tab"; - # }; - # }; - # extraConfig = { - # general.unsafe-accounts-conf = true; - # ui = { - # styleset-name = "catppuccin-mocha"; - # this-day-time-format = ''" 15:04"''; - # this-year-time-format = "Mon Jan 02 15:04"; - # timestamp-format = "2006-01-02 15:04"; - - # spinner = "[ ⡿ ],[ ⣟ ],[ ⣯ ],[ ⣷ ],[ ⣾ ],[ ⣽ ],[ ⣻ ],[ ⢿ ]"; - # border-char-vertical = "┃"; - # border-char-horizontal = "━"; - # }; - # viewer = { - # always-show-mime = true; - # }; - # compose = { - # no-attachment-warning = "^[^>]*attach(ed|ment)"; - # }; - # filters = { - # "text/plain" = "colorize"; - # "text/html" = "html"; - # "text/calendar" = "calendar"; - # "message/delivery-status" = "colorize"; - # "message/rfc822" = "colorize"; - # "image/*" = "${pkgs.catimg}/bin/catimg -"; - # }; - # }; - # }; - programs.notmuch = { enable = true; - new.tags = [ "new" ]; - search.excludeTags = [ - "trash" - "deleted" - "spam" - ]; - maildir.synchronizeFlags = true; + hooks.preNew = "mbsync --all"; }; - - programs.afew = { - enable = true; - extraConfig = '' - [Filter.1] - message = "Tag GitHub notifications" - tags = +github - query = from:noreply@github.com OR from:notifications@github.com - - [Filter.2] - query = "folder:autistici/Inbox" - tags = +autistici - message = "Tag personal autistici emails" - - [Filter.3] - query = "not folder:autistici/Inbox" - tag = -new - message = "Sanity check: remove the new tag for emails moved out from Inbox" - - [Filter.4] - query = "not folder:autistici/Inbox" - tag = -new - message = "Sanity check: remove the new tag for emails moved out from Inbox" - - [Filter.5] - query = "not folder:autistici/Sent" - tag = +sent - message = "Sanity check: add the sent tag for emails in Sent" - - [Filter.6] - query = "not folder:autistici/Drafts" - tag = +draft - message = "Sanity check: add the draft tag for emails in Draft" - - [MailMover] - folders = autistici/Inbox - rename = true - - autistici/Inbox = 'tag:archive':autistici/Archive 'tag:github':autistici/GitHub 'NOT tag:new':autistici/Trash - ''; - }; - - systemd.user.services.emails-watcher = { - Unit.Description = "Send notifications when new emails arrive"; - Install = { - WantedBy = [ "default.target" ]; - }; - Service = { - ExecStart = "${lib.getExe fleetFlake.packages.${pkgs.system}.emails-watcher}"; - Environment = [ "INBOX_NEW=~/Maildir/autistici/Inbox/new" ]; - }; - }; - + services.mbsync.enable = true; accounts.email = { accounts.autistici = { - aerc.enable = true; address = "andrea.ciceri@autistici.org"; gpg = { key = "7A66EEA1E6C598D07D361287A1FC89532D1C565"; @@ -278,8 +24,6 @@ mbsync = { enable = true; create = "maildir"; - expunge = "both"; - remove = "both"; }; msmtp.enable = true; notmuch.enable = true; diff --git a/hmModules/firefox/catppuccin.css b/hmModules/firefox/catppuccin.css deleted file mode 100644 index 6085f2a..0000000 --- a/hmModules/firefox/catppuccin.css +++ /dev/null @@ -1,193 +0,0 @@ -:root { - /* Catppuccin Colors */ - --bg: #1e1e2e; - --currentline: #302d41; - --fg: #d9e0ee; - --comment: #575268; - --flamingo: #f2cdcd; - --mauve: #ddb6f2; - --pink: #f5c2e7; - --maroon: #e8a2af; - --red: #f28fad; - --peach: #f8bd96; - --yellow: #fae3b0; - --green: #abe9b3; - --teal: #b5e8e0; - --blue: #96cdfb; - --sky: #89dceb; - --lavender: #c9cbff; - --rosewater: #f5e0dc; - --font: monospace; /*"FiraCode Nerd Font Mono";*/ - - /* vimium theme uses colors: flamingo, peach, rosewater, green, blue, lavender */ - --tridactyl-fg: var(--fg); - --tridactyl-bg: var(--bg); - --tridactyl-url-fg: var(--rosewater); - --tridactyl-url-bg: var(--bg); - --tridactyl-highlight-box-bg: var(--currentline); - --tridactyl-highlight-box-fg: var(--fg); - --tridactyl-of-fg: var(--fg); - --tridactyl-of-bg: var(--currentline); - --tridactyl-cmdl-fg: var(--bg); - --tridactyl-cmdl-font-family: var(--font); - --tridactyl-cmplt-font-family: var(--font); - --tridactyl-hintspan-font-family: var(--font); - - /* Hint character tags */ - --tridactyl-hintspan-fg: var(--bg) !important; - --tridactyl-hintspan-bg: var(--green) !important; - - /* Element Highlights */ - --tridactyl-hint-active-fg: none; - --tridactyl-hint-active-bg: none; - --tridactyl-hint-active-outline: none; - --tridactyl-hint-bg: none; - --tridactyl-hint-outline: none; -} - -#command-line-holder { - order: 1; - border: 2px solid var(--lavender); - background: var(--tridactyl-bg); -} - -#tridactyl-input { - padding: 1rem; - color: var(--tridactyl-fg); - width: 90%; - font-size: 1.5rem; - line-height: 1.5; - background: var(--tridactyl-bg); - padding-left: unset; - padding: 1rem; -} - -#completions table { - font-size: 0.8rem; - font-weight: 200; - border-spacing: 0; - table-layout: fixed; - padding: 1rem 0; - /* padding-top: 1rem; */ - /* padding-bottom: 1rem; */ -} - -#completions > div { - max-height: calc(20 * var(--option-height)); - min-height: calc(10 * var(--option-height)); -} - -/* COMPLETIONS */ - -#completions { - --option-height: 1.4em; - color: var(--tridactyl-fg); - background: var(--tridactyl-bg); - display: inline-block; - font-size: unset; - font-weight: 200; - overflow: hidden; - width: 100%; - border-top: unset; - order: 2; -} - -/* Olie doesn't know how CSS inheritance works */ -#completions .HistoryCompletionSource { - max-height: unset; - min-height: unset; -} - -#completions .HistoryCompletionSource table { - width: 100%; - font-size: 9pt; - border-spacing: 0; - table-layout: fixed; -} - -/* redundancy 2: redundancy 2: more redundancy */ -#completions .BmarkCompletionSource { - max-height: unset; - min-height: unset; -} - -#completions table tr td.prefix, -#completions table tr td.privatewindow, -#completions table tr td.container, -#completions table tr td.icon { - display: none; -} - -#completions .BufferCompletionSource table { - width: unset; - font-size: unset; - border-spacing: unset; - table-layout: unset; -} - -#completions table tr .title, -#completions table tr td.excmd { - width: 50%; - padding-left: 1rem; - color: var(--blue); -} - -#completions table tr .content, -#completions table tr td.documentation { - padding-right: 1rem; -} - -#completions table tr { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -#completions table tr td { - padding: 0.5rem 0; -} - -#completions .sectionHeader { - background: unset; - font-weight: bold; - border-bottom: unset; - padding: 1rem 1rem 0 !important; - padding-left: unset; - padding-bottom: 0.2rem; - color: var(--peach); -} - -#cmdline_iframe { - position: fixed !important; - bottom: unset; - top: 25% !important; - left: 10% !important; - z-index: 2147483647 !important; - width: 80% !important; - box-shadow: rgba(0, 0, 0, 0.5) 0px 0px 20px !important; -} - -.TridactylStatusIndicator { - position: fixed !important; - bottom: 0 !important; - background: var(--tridactyl-bg) !important; - border: unset !important; - border: 1px var(--purple) solid !important; - font-size: 12pt !important; - /*font-weight: 200 !important;*/ - padding: 0.8ex !important; -} - -#completions .focused { - background: var(--currentline); - /* color: var(--blue); */ - font-weight: bold; -} -#completions .focused td.title { - color: var(--pink); -} - -#completions .focused .url { - background: var(--currentline); - color: var(--green); -} diff --git a/hmModules/firefox/default.nix b/hmModules/firefox/default.nix index 50ff899..9732957 100644 --- a/hmModules/firefox/default.nix +++ b/hmModules/firefox/default.nix @@ -1,72 +1,34 @@ { pkgs, + username, ... -}: -let - mkExtension = shortId: uuid: { - name = uuid; - value = { - install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi"; - installation_mode = "normal_installed"; - }; - }; -in -{ +}: { programs.firefox = { enable = true; - nativeMessagingHosts = [ - pkgs.tridactyl-native - pkgs.vdhcoapp - ]; - policies = { - DisableTelemetry = true; - DisableFirefoxStudies = true; - EnableTrackingProtection = { - Value = true; - Locked = true; - Cryptomining = true; - Fingerprinting = true; - EmailTracking = true; + package = pkgs.wrapFirefox pkgs.firefox-unwrapped { + extraPolicies = { + ExtensionSettings = {}; }; - HardwareAcceleration = true; - FirefoxHome = { - TopSites = false; - SponsoredTopSites = false; - Highlights = false; - Pocket = false; - SponsoredPocket = false; - Snippets = false; - Locked = false; - }; - FirefoxSuggest = { - WebSuggestions = true; - SponsoredSuggestions = false; - ImproveSuggest = false; - Locked = true; - }; - OverrideFirstRunPage = ""; - OverridePostUpdatePage = ""; - DontCheckDefaultBrowser = true; - DisplayMenuBar = "default-off"; # alternatives: "always", "never" or "default-on" - SearchBar = "unified"; # alternative: "separate" - HttpsOnlyMode = "force_enabled"; - NoDefaultBookmarks = true; - OfferToSaveLogins = false; - OfferToSaveLoginsDefault = false; - PasswordManagerEnabled = true; - DefaultDownloadDirectory = "\${home}/Downloads"; - PromptForDownloadLocation = false; - RequestedLocales = "en-US"; - - ExtensionSettings = builtins.listToAttrs [ - (mkExtension "ublock-origin" "uBlock0@raymondhill.net") - (mkExtension "tridactyl-vim" "tridactyl.vim@cmcaine.co.uk") - (mkExtension "styl-us" "7a7a4a92-a2a0-41d1-9fd7-1e92480d612d") - ]; + nativeMessagingHosts = [pkgs.tridactyl-native]; }; - profiles.default = { + profiles.${username} = { + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + privacy-badger + ublock-origin + tridactyl + ]; + settings = { + "browser.startup.homepage" = "https://google.it"; + "browser.search.region" = "IT"; + "browser.search.isUS" = false; + "distribution.searchplugins.defaultLocale" = "it-IT"; + "general.useragent.locale" = "it-IT"; + "browser.bookmarks.showMobileBookmarks" = true; + "browser.download.folderList" = 2; + "browser.download.lastDir" = "/home/${username}/Downloads/"; + "browser.shell.checkDefaultBrowser" = false; + }; search.force = true; - search.default = "google"; search.engines = { "Searx" = { urls = [ @@ -82,18 +44,10 @@ in ]; }; }; - extensions = [ ]; - userChrome = builtins.readFile ./userchrome.css; }; }; - - xdg.configFile."tridactyl/tridactylrc".text = '' - set editorcmd emacsclient -c %f - - colors catppuccin - ''; - - xdg.configFile."tridactyl/themes/catppuccin.css" = { - source = ./catppuccin.css; + home.sessionVariables = { + MOZ_ENABLE_WAYLAND = 1; + NIXOS_OZONE_WL = 1; }; } diff --git a/hmModules/firefox/userchrome.css b/hmModules/firefox/userchrome.css deleted file mode 100644 index 8e27216..0000000 --- a/hmModules/firefox/userchrome.css +++ /dev/null @@ -1,73 +0,0 @@ -/* * Do not remove the @namespace line -- it's required for correct functioning */ -/* set default namespace to XUL */ -@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); - -/* Remove Back button when there's nothing to go Back to */ -#back-button[disabled="true"] { - display: none; -} - -/* Remove Forward button when there's nothing to go Forward to */ -#forward-button[disabled="true"] { - display: none; -} - -/* Remove Home button (never use it) */ -#home-button { - display: none; -} - -.titlebar-spacer { - display: none !important; -} - -/* Remove import bookmarks button */ -#import-button { - display: none; -} - -/* Remove bookmark toolbar */ -toolbarbutton.bookmark-item:not(.subviewbutton) { - display: none; -} - -/* Remove whitespace in toolbar */ -#nav-bar toolbarpaletteitem[id^="wrapper-customizableui-special-spring"], -#nav-bar toolbarspring { - display: none; -} - -/* Hide dumb Firefox View button */ -#firefox-view-button { - visibility: hidden; -} - -/* Hide Firefox tab icon */ -.tab-icon-image { - display: none; -} - -/* Linux stuff to keep GNOME system theme */ -.titlebar-min { - appearance: auto !important; - -moz-default-appearance: -moz-window-button-minimize !important; -} - -.titlebar-max { - appearance: auto !important; - -moz-default-appearance: -moz-window-button-maximize !important; -} - -.titlebar-restore { - appearance: auto !important; - -moz-default-appearance: -moz-window-button-restore !important; -} - -.titlebar-close { - appearance: auto !important; - -moz-default-appearance: -moz-window-button-close !important; -} - -.titlebar-button { - list-style-image: none !important; -} diff --git a/hmModules/foot/default.nix b/hmModules/foot/default.nix index 840b866..d5cc61b 100644 --- a/hmModules/foot/default.nix +++ b/hmModules/foot/default.nix @@ -1,66 +1,40 @@ { lib, - config, + pkgs, ... -}: -lib.mkMerge [ - { - programs.foot = { - enable = true; - server.enable = true; - settings = { - main = { - term = "xterm-direct"; - login-shell = "yes"; - dpi-aware = "no"; - horizontal-letter-offset = "1"; - pad = "1x1"; - font = - let - size = "13"; - in - lib.mkForce ( - lib.concatStringsSep ", " [ - "Iosevka Comfy:size=${size}" - "Symbols Nerd Font:size=${size}" - "JoyPixels:size=${size}" - ] - ); - }; - cursor = { - blink = true; - }; - tweak = { - overflowing-glyphs = true; - }; +}: { + programs.foot = let + catppuccin = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "foot"; + rev = "307611230661b7b1787feb7f9d122e851bae97e9"; + hash = "sha256-mkPYHDJtfdfDnqLr1YOjaBpn4lCceok36LrnkUkNIE4="; + }; + in { + enable = true; + server.enable = true; + settings = { + main = { + term = "xterm-256color"; + login-shell = "yes"; + # Using dpi-aware = "yes" font size is too small on my external monitor + # Scaling that output in sway is inefficient and make XWayland apps blurred + dpi-aware = "no"; + horizontal-letter-offset = "1"; + include = "${catppuccin}/themes/catppuccin-mocha.ini"; + font = let + size = "13"; + in + lib.concatStringsSep ", " [ + "Iosevka Comfy:size=${size}" + "Symbols Nerd Font:size=${size}" + "JoyPixels:size=${size}" + ]; + }; - key-bindings = { - scrollback-up-page = "Control+Shift+k"; - scrollback-down-page = "Control+Shift+j"; - search-start = "Control+Shift+s"; - pipe-command-output = ''[sh -c 'f=$(mktemp); cat - > $f; footclient hx $f; rm $f'] Control+Shift+g''; - }; - - mouse = { - hide-when-typing = "yes"; - }; + mouse = { + hide-when-typing = "yes"; }; }; - } - (lib.mkIf config.programs.fish.enable { - programs.fish.functions = { - mark_prompt_start = { - body = ''echo -en "\e]133;A\e\\"''; - onEvent = "fish_prompt"; - }; - foot_cmd_start = { - body = ''echo -en "\e]133;C\e\\"''; - onEvent = "fish_preexec"; - }; - foot_cmd_end = { - body = ''echo -en "\e]133;D\e\\"''; - onEvent = "fish_postexec"; - }; - }; - }) -] + }; +} diff --git a/hmModules/freecad/default.nix b/hmModules/freecad/default.nix deleted file mode 100644 index ef86027..0000000 --- a/hmModules/freecad/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.freecad-wayland ]; -} diff --git a/hmModules/gimp/default.nix b/hmModules/gimp/default.nix deleted file mode 100644 index 2785649..0000000 --- a/hmModules/gimp/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.gimp ]; -} diff --git a/hmModules/git-workspace/default.nix b/hmModules/git-workspace/default.nix index 25f37ca..ac8cc85 100644 --- a/hmModules/git-workspace/default.nix +++ b/hmModules/git-workspace/default.nix @@ -2,8 +2,7 @@ age, username, ... -}: -{ +}: { services.git-workspace = { enable = true; frequency = "04:00:00"; diff --git a/hmModules/git/default.nix b/hmModules/git/default.nix index 5544eb1..52786b2 100644 --- a/hmModules/git/default.nix +++ b/hmModules/git/default.nix @@ -2,21 +2,13 @@ pkgs, username, ... -}: -let +}: let config = { name = "Andrea Ciceri"; email = "andrea.ciceri@autistici.org"; }; -in -{ - imports = [ - ../gitui - ../lazygit - ]; - - home.packages = [ pkgs.git-credential-manager ]; - +in { + imports = [../gitui ../lazygit]; programs.git = { enable = true; package = pkgs.gitAndTools.gitFull; @@ -27,18 +19,11 @@ in rebase.autostash = true; github.user = "aciceri"; - user.signingKey = "/home/${username}/.ssh/id_ed25519"; + user.signingKey = "/home/${username}/.ssh/id_rsa"; gpg.format = "ssh"; commit.gpgsign = true; - credential.helper = "libsecret"; - credential.credentialStore = "cache"; - - core = { - fsmonitor = true; - untrackedcache = true; - }; - fetch.writeCommitGraph = true; + core.editor = "emacsclient"; }; userName = config.name; @@ -47,8 +32,7 @@ in extraConfig.url = { "ssh://git@github.com/".insteadOf = "https://github.com/"; # Workaround for https://github.com/rust-lang/cargo/issues/3381#issuecomment-1193730972 - "https://github.com/rust-lang/crates.io-index".insteadOf = - "https://github.com/rust-lang/crates.io-index"; + "https://github.com/rust-lang/crates.io-index".insteadOf = "https://github.com/rust-lang/crates.io-index"; "https://github.com/RustSec/advisory-db".insteadOf = "https://github.com/RustSec/advisory-db"; }; diff --git a/hmModules/gnome-keyring/default.nix b/hmModules/gnome-keyring/default.nix index 9426154..b0135ff 100644 --- a/hmModules/gnome-keyring/default.nix +++ b/hmModules/gnome-keyring/default.nix @@ -1,9 +1,9 @@ { pkgs, lib, + config, ... -}: -{ +}: { services.gnome-keyring = { enable = false; # Is this broken? https://github.com/nix-community/home-manager/issues/1454 components = lib.mkForce [ @@ -12,7 +12,7 @@ ]; }; - home.packages = [ pkgs.gcr ]; # Needed in PATH + home.packages = [pkgs.gcr]; # Needed in PATH # Workaround wayland.windowManager.hyprland.extraConfig = '' diff --git a/hmModules/gpg/default.nix b/hmModules/gpg/default.nix index abef97c..a28eb67 100644 --- a/hmModules/gpg/default.nix +++ b/hmModules/gpg/default.nix @@ -1,18 +1,25 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { services.gpg-agent = { enable = true; - pinentry.package = pkgs.pinentry-rofi.override { - rofi = pkgs.rofi-wayland; - }; - extraConfig = '' + enableSshSupport = true; + sshKeys = ["CE2FD0D9BECBD8876811714925066CC257413416"]; + extraConfig = let + pinentryRofi = pkgs.writeShellApplication { + name = "pinentry-rofi-with-env"; + runtimeInputs = with pkgs; [coreutils rofi]; + text = '' + "${pkgs.pinentry-rofi}/bin/pinentry-rofi" "$@" + ''; + }; + in '' allow-emacs-pinentry allow-loopback-pinentry + pinentry-program ${pinentryRofi}/bin/pinentry-rofi-with-env ''; }; programs.gpg = { enable = true; - settings = { }; + settings = {}; }; } diff --git a/hmModules/headless-hyprland/default.nix b/hmModules/headless-hyprland/default.nix index 44d7fdb..e15b20a 100644 --- a/hmModules/headless-hyprland/default.nix +++ b/hmModules/headless-hyprland/default.nix @@ -1,12 +1,11 @@ { + config, lib, ... -}: -let +}: let originalConfig = config.wayland.windowManager.hyprland.extraConfig; - config = builtins.replaceStrings [ "SUPER" ] [ "" ] originalConfig; -in -{ + config = builtins.replaceStrings ["SUPER"] [""] originalConfig; +in { systemd.user.services.headless-hyprland = { Unit.Description = "Headless Hyprland"; Service = { diff --git a/hmModules/helix/default.nix b/hmModules/helix/default.nix index ee9cc32..89f0e01 100644 --- a/hmModules/helix/default.nix +++ b/hmModules/helix/default.nix @@ -1,16 +1,8 @@ -{ pkgs, ... }: { - home.packages = with pkgs; [ - zk - nixd - terraform-ls - python3Packages.python-lsp-server - nodePackages.typescript-language-server - ]; - programs.helix = { enable = true; settings = { + theme = "catppuccin_mocha"; editor = { indent-guides.render = true; cursor-shape = { @@ -18,36 +10,7 @@ normal = "block"; select = "underline"; }; - color-modes = true; true-color = true; # to make colors coherent when in ssh - # inline-diagnostic = { - # cursor-line = "hint"; - # other-lines = "error"; - # }; - }; - }; - languages = { - language = [ - { - name = "nix"; - language-servers = [ "nixd" ]; - formatter.command = "nixfmt"; - } - { - name = "markdown"; - language-servers = [ "zk" ]; - } - { - name = "typescript"; - language-servers = [ "vtsls" ]; - } - ]; - language-server = { - nixd.command = "nixd"; - zk = { - command = "zk"; - args = [ "lsp" ]; - }; }; }; }; diff --git a/hmModules/hyprland/default.nix b/hmModules/hyprland/default.nix index fee30aa..c973adf 100644 --- a/hmModules/hyprland/default.nix +++ b/hmModules/hyprland/default.nix @@ -3,16 +3,15 @@ pkgs, lib, ... -}: -let - screenshotScript = pkgs.writeShellScriptBin "screenshot.sh" '' +}: let + screenshotScript = pkgs.writeShellScript "screenshot.sh" '' filename="$HOME/shots/$(date --iso-8601=seconds).png" coords="$(${pkgs.slurp}/bin/slurp)" ${pkgs.grim}/bin/grim -t png -g "$coords" "$filename" wl-copy -t image/png < $filename ''; hyprland = config.wayland.windowManager.hyprland.package; - switchMonitorScript = pkgs.writeShellScriptBin "switch-monitor.sh" '' + switchMonitorScript = pkgs.writeShellScript "switch-monitor.sh" '' if [[ "$(${hyprland}/bin/hyprctl monitors) | grep '\sDP-[0-9]+'" ]]; then if [[ $1 == "open" ]]; then ${hyprland}/bin/hyprctl keyword monitor "eDP-1,1920x1080,3760x230,1" @@ -21,26 +20,19 @@ let fi fi ''; -in -{ +in { imports = [ ./hyprpaper.nix ../waybar ../swayidle ../gammastep + # ../wezterm + ../wayvnc ../swaync ../foot ]; - home.packages = with pkgs; [ - wl-clipboard - waypipe - switchMonitorScript - screenshotScript - hyprpaper - fuzzel - brightnessctl - ]; + home.packages = with pkgs; [wl-clipboard waypipe]; systemd.user.sessionVariables = { NIXOS_OZONE_WL = "1"; @@ -55,41 +47,160 @@ in gtk = { enable = true; - theme = { - name = "Catppuccin-GTK-Purple-Dark-Compact"; - package = pkgs.magnetic-catppuccin-gtk.override { - accent = [ "purple" ]; - shade = "dark"; - size = "compact"; - }; - }; + font.name = "Sans,Symbols Nerd Font"; iconTheme = { name = "Adwaita"; - package = pkgs.adwaita-icon-theme; - }; - cursorTheme = { - name = "catppuccin-mocha-sapphire"; - package = pkgs.catppuccin-cursors; - size = 38; + package = pkgs.gnome.adwaita-icon-theme; }; }; - home.file.".icons/catppuccin-mocha-sapphire" = { - source = "${pkgs.catppuccin-cursors.mochaSapphire}/share/icons/catppuccin-mocha-sapphire-cursors"; - recursive = true; - }; - - qt = { - enable = true; - }; + # services.kanshi = { + # enable = true; + # systemdTarget = "hyprland-session.target"; + # profiles = { + # undocked = { + # outputs = [ + # { + # status = "enable"; + # criteria = "eDP-1"; + # } + # ]; + # }; + # docked = { + # outputs = [ + # { + # status = "disable"; + # criteria = "eDP-1"; + # } + # { + # status = "enable"; + # criteria = "DP-1"; + # } + # ]; + # }; + # }; + # }; wayland.windowManager.hyprland = { - enable = false; - plugins = with pkgs.hyprlandPlugins; [ - hy3 - hyprspace - ]; - # TODO migrate to structured options - extraConfig = builtins.readFile ./hyprland.conf; + enable = true; + extraConfig = '' + $mod = SUPER + + input { + touchpad { + disable_while_typing = true # set to true while playing + } + } + + monitor = HDMI-A-1, 2560x1440, 0x0, 1 # picard + monitor = eDP-1, 1920x1080, 0x0, 1 # kirk + + bindl=,switch:off:Lid Switch,exec,${switchMonitorScript} open + bindl=,switch:on:Lid Switch,exec,${switchMonitorScript} close + + exec-once = ${pkgs.hyprpaper}/bin/hyprpaper + + windowrulev2 = tile, class:^(Spotify)$ + windowrulev2 = workspace 9, class:^(Spotify)$ + windowrulev2 = tile, class:^(fluffychat)$ + windowrulev2 = workspace 8, class:^(fluffychat)$ + windowrulev2 = tile, class:^(WhatsApp for Linux)$ + windowrulev2 = workspace 7, class:^(WhatsApp for Linux)$ + windowrulev2 = float, title:^(floating)$ + + bind = $mod, b, exec, firefox + bind = $mod, t, exec, foot + bind = $mod, RETURN, exec, emacsclient -c --eval "(ccr/start-eshell)" + bind = $mod, x, exec, emacsclient -c + bind = $mod SHIFT, n, exec, emacsclient --eval '(ccr/org-capture "n")' -c -F '((name . "floating"))' + bind = $mod SHIFT, w, exec, emacsclient --eval '(ccr/org-capture "j")' -c -F '((name . "floating"))' + bind = $mod, y, exec, ${pkgs.waypipe}/bin/waypipe --compress lz4=10 ssh picard.fleet emacsclient -c + bind = $mod, d, exec, ${pkgs.fuzzel}/bin/fuzzel --background-color=253559cc --border-radius=5 --border-width=0 + bind = $mod, s, exec, ${screenshotScript} + bind = , XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl s +5% + bind = , XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl s 5%- + bind = $mod, code:60, exec, ${pkgs.brightnessctl}/bin/brightnessctl s +5% + bind = $mod, code:59, exec, ${pkgs.brightnessctl}/bin/brightnessctl s 5%- + + + bind = $mod SHIFT, q, killactive + bind = $mod SHIFT, f, fullscreen, 0 + bind = $mod SHIFT, e, exit + + bind = $mod, h, movefocus, l + bind = $mod, l, movefocus, r + bind = $mod, k, movefocus, u + bind = $mod, j, movefocus, d + + bind = $mod SHIFT, h, movewindow, l + bind = $mod SHIFT, l, movewindow, r + bind = $mod SHIFT, k, movewindow, u + bind = $mod SHIFT, j ,movewindow, d + + bind = $mod, p, movecurrentworkspacetomonitor, r + bind = $mod, o, movecurrentworkspacetomonitor, l + + bindm=ALT,mouse:272,movewindow + + bind = $mod, 1, workspace, 1 + bind = $mod, 2, workspace, 2 + bind = $mod, 3, workspace, 3 + bind = $mod, 4, workspace, 4 + bind = $mod, 5, workspace, 5 + bind = $mod, 6, workspace, 6 + bind = $mod, 7, workspace, 7 + bind = $mod, 8, workspace, 8 + bind = $mod, 9, workspace, 9 + bind = $mod, 0, workspace, 10 + + bind = $mod SHIFT, 1, movetoworkspace, 1 + bind = $mod SHIFT, 2, movetoworkspace, 2 + bind = $mod SHIFT, 3, movetoworkspace, 3 + bind = $mod SHIFT, 4, movetoworkspace, 4 + bind = $mod SHIFT, 5, movetoworkspace, 5 + bind = $mod SHIFT, 6, movetoworkspace, 6 + bind = $mod SHIFT, 7, movetoworkspace, 7 + bind = $mod SHIFT, 8, movetoworkspace, 8 + bind = $mod SHIFT, 9, movetoworkspace, 9 + bind = $mod SHIFT, 0, movetoworkspace, 10 + + general { + gaps_in = 0 + gaps_out = 0 + border_size = 1 + col.active_border = rgba(AF8D61FF) rgba(CEB153FF) rgba(7B8387FF) 45deg + col.inactive_border = rgba(AF8D6166) + } + + decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 2 + # blur = true + # blur_size = 8 + # blur_passes = 1 + # blur_new_optimizations = true + + drop_shadow = true + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(a8cfee11) + } + + animations { + enabled = true + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 3, myBezier + animation = windowsOut, 1, 3, default, popin 80% + animation = border, 1, 5, default + animation = borderangle, 1, 4, default + animation = fade, 1, 3, default + animation = workspaces, 1, 3, default + } + ''; }; } diff --git a/hmModules/hyprland/hyprland.conf b/hmModules/hyprland/hyprland.conf deleted file mode 100644 index 0e250d6..0000000 --- a/hmModules/hyprland/hyprland.conf +++ /dev/null @@ -1,190 +0,0 @@ -cursor { - hide_on_key_press = true - enable_hyprcursor = true - zoom_rigid = true -} - -env = HYPRCURSOR_THEME,catppuccin-mocha-sapphire -env = HYPRCURSOR_SIZE,40 -env = XCURSOR_THEME,catppuccin-mocha-sapphire -env = XCURSOR_SIZE,40 - -$mod = SUPER - -input { - touchpad { - disable_while_typing = true # set to true while playing - } -} - -monitor = HDMI-A-1, 2560x1440, 0x0, 1 # picard -monitor = eDP-1, 1920x1080, 0x0, 1, mirror, DP-1 # kirk - -bindl=,switch:off:Lid Switch,exec,switch-monitor.sh open -bindl=,switch:on:Lid Switch,exec,switch-monitor.sh close - -exec-once = hyprpaper - -windowrulev2 = tile, class:^(Spotify)$ -windowrulev2 = workspace 9, class:^(Spotify)$ -windowrulev2 = float, title:^(floating)$ - -bind = $mod, b, exec, firefox -# bind = $mod, t, exec, footclient $SHELL -C "zellij" -bind = $mod, t, exec, footclient $SHELL -bind = $mod, RETURN, exec, emacsclient -c --eval "(ccr/start-eshell)" -bind = $mod, m, exec, emacsclient -c --eval '(notmuch-search "tag:new")' -bind = $mod, g, exec, emacsclient -c --eval '(switch-to-buffer (gptel "*ChatGPT*"))' -bind = $mod, c, exec, emacsclient -c --eval '(org-roam-dailies-capture-today)' -bind = $mod, d, exec, fuzzel --background-color=253559cc --border-radius=5 --border-width=0 -bind = $mod, s, exec, screenshot.sh -bind = $mod, n, exec, logseq -bind = $mod, x, exec, emacsclient -c -bind = , XF86MonBrightnessUp, exec, brightnessctl s +5% -bind = , XF86MonBrightnessDown, exec, brightnessctl s 5%- -bind = $mod, code:60, exec, brightnessctl s +5% -bind = $mod, code:59, exec, brightnessctl s 5%- - -bind = $mod SHIFT, t, hy3:makegroup, tab, ephemeral -bind = $mod SHIFT, q, killactive -bind = $mod SHIFT, f, fullscreen, 0 -bind = $mod SHIFT, e, exit - -bind = $mod, h, hy3:movefocus, l -bind = $mod, l, hy3:movefocus, r -bind = $mod, k, hy3:movefocus, u -bind = $mod, j, hy3:movefocus, d - -bind = $mod SHIFT, h, hy3:movewindow, l -bind = $mod SHIFT, l, hy3:movewindow, r -bind = $mod SHIFT, k, hy3:movewindow, u -bind = $mod SHIFT, j ,hy3:movewindow, d - -bind = $mod, v, hy3:makegroup, v -bind = $mod SHIFT, v, hy3:makegroup, h - -bind = $mod, p, movecurrentworkspacetomonitor, r -bind = $mod, o, movecurrentworkspacetomonitor, l - -bindm=ALT,mouse:272,hy3:movewindow - -bind = $mod, 1, workspace, 1 -bind = $mod, 2, workspace, 2 -bind = $mod, 3, workspace, 3 -bind = $mod, 4, workspace, 4 -bind = $mod, 5, workspace, 5 -bind = $mod, 6, workspace, 6 -bind = $mod, 7, workspace, 7 -bind = $mod, 8, workspace, 8 -bind = $mod, 9, workspace, 9 -bind = $mod, 0, workspace, 10 - -bind = $mod SHIFT, 1, movetoworkspace, 1 -bind = $mod SHIFT, 2, movetoworkspace, 2 -bind = $mod SHIFT, 3, movetoworkspace, 3 -bind = $mod SHIFT, 4, movetoworkspace, 4 -bind = $mod SHIFT, 5, movetoworkspace, 5 -bind = $mod SHIFT, 6, movetoworkspace, 6 -bind = $mod SHIFT, 7, movetoworkspace, 7 -bind = $mod SHIFT, 8, movetoworkspace, 8 -bind = $mod SHIFT, 9, movetoworkspace, 9 -bind = $mod SHIFT, 0, movetoworkspace, 10 - -general { - layout = hy3 - gaps_in = 8 - gaps_out = 5 -} - -decoration { - rounding = 8 - - # drop_shadow = true - # shadow_range = 4 - # shadow_render_power = 3 - # col.shadow = rgba(a8cfee11) -} - -animations { - enabled = true - - bezier = myBezier, 0.05, 0.9, 0.1, 1.05 - - animation = windows, 1, 3, myBezier - animation = windowsOut, 1, 3, default, popin 80% - animation = border, 1, 5, default - animation = borderangle, 1, 4, default - animation = fade, 1, 3, default - animation = workspaces, 1, 3, default -} - -plugin { - hy3 { - # disable gaps when only one window is onscreen - # 0 - always show gaps - # 1 - hide gaps with a single window onscreen - # 2 - 1 but also show the window border - no_gaps_when_only = 0 # default: 0 - - # policy controlling what happens when a node is removed from a group, - # leaving only a group - # 0 = remove the nested group - # 1 = keep the nested group - # 2 = keep the nested group only if its parent is a tab group - node_collapse_policy = 2 # default: 2 - - # offset from group split direction when only one window is in a group - group_inset = 0 # default: 10 - - # if a tab group will automatically be created for the first window spawned in a workspace - tab_first_window = false - - # tab group settings - tabs { - # height of the tab bar - height = 20 - - # padding between the tab bar and its focused node - padding = 10 - - # the tab bar should animate in/out from the top instead of below the window - from_top = false - - # rounding of tab bar corners - rounding = 4 - - # render the window title on the bar - render_text = true - - # center the window title - text_center = true - - # font to render the window title with - text_font = Fira Code - - # height of the window title - text_height = 14 - - # left padding of the window title - text_padding = 4 - - # active tab bar segment color - # col.active = # default: 0xff32b4ff - - # urgent tab bar segment color - # col.urgent = # default: 0xffff4f4f - - # inactive tab bar segment color - # col.inactive = # default: 0x80808080 - - # active tab bar text color - # col.text.active = # default: 0xff000000 - - # urgent tab bar text color - # col.text.urgent = # default: 0xff000000 - - # inactive tab bar text color - # col.text.inactive = # default: 0xff000000 - } - } -} diff --git a/hmModules/hyprland/hyprpaper.nix b/hmModules/hyprland/hyprpaper.nix index 5264414..d6ab105 100644 --- a/hmModules/hyprland/hyprpaper.nix +++ b/hmModules/hyprland/hyprpaper.nix @@ -1,9 +1,7 @@ let wallpaper = ./wallpaper.png; -in -{ +in { xdg.configFile."hypr/hyprpaper.conf".text = '' - splash = false preload = ${wallpaper} wallpaper = eDP-1,${wallpaper} wallpaper = DP-1,${wallpaper} diff --git a/hmModules/ib-tws/default.nix b/hmModules/ib-tws/default.nix deleted file mode 100644 index b08f930..0000000 --- a/hmModules/ib-tws/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ fleetFlake, pkgs, ... }: -{ - home.packages = [ fleetFlake.packages.${pkgs.system}.ib-tws ]; -} diff --git a/hmModules/imv/default.nix b/hmModules/imv/default.nix deleted file mode 100644 index 02ebcb3..0000000 --- a/hmModules/imv/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - programs.imv.enable = true; -} diff --git a/hmModules/jellyfin/default.nix b/hmModules/jellyfin/default.nix deleted file mode 100644 index 77d23c3..0000000 --- a/hmModules/jellyfin/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.jellyfin-media-player ]; -} diff --git a/hmModules/kicad/default.nix b/hmModules/kicad/default.nix index 9acc796..280d450 100644 --- a/hmModules/kicad/default.nix +++ b/hmModules/kicad/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.kicad-small ]; +{pkgs, ...}: { + home.packages = [pkgs.kicad-small]; } diff --git a/hmModules/kitty/default.nix b/hmModules/kitty/default.nix index da36cd0..49a60e8 100644 --- a/hmModules/kitty/default.nix +++ b/hmModules/kitty/default.nix @@ -1,5 +1,4 @@ -{ ... }: -{ +{pkgs, ...}: { programs.kitty = { enable = true; font = { diff --git a/hmModules/lazygit/default.nix b/hmModules/lazygit/default.nix index 6b16376..1689ddc 100644 --- a/hmModules/lazygit/default.nix +++ b/hmModules/lazygit/default.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { programs.lazygit = { enable = true; settings = { diff --git a/hmModules/libreoffice/default.nix b/hmModules/libreoffice/default.nix deleted file mode 100644 index 1e846d4..0000000 --- a/hmModules/libreoffice/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.libreoffice ]; -} diff --git a/hmModules/logseq/default.nix b/hmModules/logseq/default.nix deleted file mode 100644 index dffb462..0000000 --- a/hmModules/logseq/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ pkgs, lib, ... }: -let - logseq = pkgs.appimageTools.wrapType2 { - name = "logseq"; - version = "nightly-20240909"; - src = pkgs.fetchurl { - url = "https://github.com/logseq/logseq/releases/download/nightly/Logseq-linux-x64-0.10.10-alpha+nightly.20240909.AppImage"; - hash = "sha256-Hy/zk8ZCkWajsMRUMsewLvkKpMpsBZYnFootPU9y6Z0="; - }; - }; - logseq-wayland = pkgs.writeScriptBin "logseq" "${lib.getExe' logseq "logseq"} --enable-features=UseOzonePlatform --ozone-platform=wayland"; -in -{ - home.packages = [ logseq-wayland ]; -} diff --git a/hmModules/lutris/default.nix b/hmModules/lutris/default.nix index 475abdf..13c2b29 100644 --- a/hmModules/lutris/default.nix +++ b/hmModules/lutris/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.lutris ]; +{pkgs, ...}: { + home.packages = [pkgs.lutris]; } diff --git a/hmModules/monero/default.nix b/hmModules/monero/default.nix index 5bf4116..427658b 100644 --- a/hmModules/monero/default.nix +++ b/hmModules/monero/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.monero-gui ]; +{pkgs, ...}: { + home.packages = [pkgs.monero-gui]; } diff --git a/hmModules/moonlight/default.nix b/hmModules/moonlight/default.nix index 0637001..653f421 100644 --- a/hmModules/moonlight/default.nix +++ b/hmModules/moonlight/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.moonlight-qt ]; +{pkgs, ...}: { + home.packages = [pkgs.moonlight-qt]; } diff --git a/hmModules/mopidy/default.nix b/hmModules/mopidy/default.nix index 007cecc..fa2ebcb 100644 --- a/hmModules/mopidy/default.nix +++ b/hmModules/mopidy/default.nix @@ -1,6 +1,5 @@ # TODO: use upstream ytmusic when updated: https://github.com/OzymandiasTheGreat/mopidy-ytmusic/issues/68 -{ pkgs, ... }: -let +{pkgs, ...}: let ytmusicapi = pkgs.python310Packages.buildPythonPackage rec { pname = "ytmusicapi"; version = "0.24.0"; @@ -39,20 +38,14 @@ let python310Packages.pytube ]; - pythonImportsCheck = [ "mopidy_ytmusic" ]; + pythonImportsCheck = ["mopidy_ytmusic"]; doCheck = false; }; -in -{ +in { services.mopidy = { enable = true; - extensionPackages = - [ mopidy-ytmusic ] - ++ (with pkgs; [ - mopidy-mpd - mopidy-mpris - ]); + extensionPackages = [mopidy-ytmusic] ++ (with pkgs; [mopidy-mpd mopidy-mpris]); settings = { mpd = { enabled = true; diff --git a/hmModules/nheko/default.nix b/hmModules/nheko/default.nix index b921d3a..9a4a89e 100644 --- a/hmModules/nheko/default.nix +++ b/hmModules/nheko/default.nix @@ -1,6 +1,5 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.nheko ]; +{pkgs, ...}: { + home.packages = [pkgs.nheko]; # systemd.user.services.nheko = { # Install.WantedBy = ["graphical-session.target"]; diff --git a/hmModules/niri/config.kdl b/hmModules/niri/config.kdl deleted file mode 100644 index 06f54e1..0000000 --- a/hmModules/niri/config.kdl +++ /dev/null @@ -1,580 +0,0 @@ -// This config is in the KDL format: https://kdl.dev -// "/-" comments out the following node. -// Check the wiki for a full description of the configuration: -// https://github.com/YaLTeR/niri/wiki/Configuration:-Overview - -// Input device configuration. -// Find the full list of options on the wiki: -// https://github.com/YaLTeR/niri/wiki/Configuration:-Input -input { - keyboard { - xkb { - layout "us" - // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps" - } - } - - // Next sections include libinput settings. - // Omitting settings disables them, or leaves them at their default values. - touchpad { - // off - tap - dwt - // dwtp - natural-scroll - // accel-speed 0.2 - // accel-profile "flat" - // scroll-method "two-finger" - // disabled-on-external-mouse - } - - mouse { - // off - // natural-scroll - // accel-speed 0.2 - // accel-profile "flat" - // scroll-method "no-scroll" - } - - trackpoint { - // off - // natural-scroll - // accel-speed 0.2 - // accel-profile "flat" - // scroll-method "on-button-down" - // scroll-button 273 - // middle-emulation - } - - // Uncomment this to make the mouse warp to the center of newly focused windows. - warp-mouse-to-focus - - // Focus windows and outputs automatically when moving the mouse into them. - // Setting max-scroll-amount="0%" makes it work only on windows already fully on screen. - focus-follows-mouse max-scroll-amount="0%" -} - -cursor { - xcursor-theme "catppuccin-mocha-sapphire" - xcursor-size 38 - hide-when-typing - hide-after-inactive-ms 10000 -} - -spawn-at-startup "xwayland-satellite" - -environment { - QT_QPA_PLATFORM "wayland" - DISPLAY ":0" -} - -hotkey-overlay { - skip-at-startup -} - -// You can configure outputs by their name, which you can find -// by running `niri msg outputs` while inside a niri instance. -// The built-in laptop monitor is usually called "eDP-1". -// Find more information on the wiki: -// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs -// Remember to uncomment the node by removing "/-"! -output "eDP-1" { - // Uncomment this line to disable this output. - // off - - // Resolution and, optionally, refresh rate of the output. - // The format is "x" or "x@". - // If the refresh rate is omitted, niri will pick the highest refresh rate - // for the resolution. - // If the mode is omitted altogether or is invalid, niri will pick one automatically. - // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes. - mode "1920x1080@59.999" - - // You can use integer or fractional scale, for example use 1.5 for 150% scale. - scale 1.1 - - // Transform allows to rotate the output counter-clockwise, valid values are:monitor - // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270. - transform "normal" - - // Position of the output in the global coordinate space. - // This affects directional monitor actions like "focus-monitor-left", and cursor movement. - // The cursor can only move between directly adjacent outputs. - // Output scale and rotation has to be taken into account for positioning: - // outputs are sized in logical, or scaled, pixels. - // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080, - // so to put another output directly adjacent to it on the right, set its x to 1920. - // If the position is unset or results in an overlap, the output is instead placed - // automatically. - // position x=1280 y=0 -} - -output "Dell Inc. DELL U2515H 9X2VY5170PJL" { - mode "2560x1440@59.951" - scale 1 - transform "normal" -} - -// Settings that influence how windows are positioned and sized. -// Find more information on the wiki: -// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout -layout { - // Set gaps around windows in logical pixels. - gaps 16 - - // When to center a column when changing focus, options are: - // - "never", default behavior, focusing an off-screen column will keep at the left - // or right edge of the screen. - // - "always", the focused column will always be centered. - // - "on-overflow", focusing a column will center it if it doesn't fit - // together with the previously focused column. - center-focused-column "never" - - // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. - preset-column-widths { - // Proportion sets the width as a fraction of the output width, taking gaps into account. - // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. - // The default preset widths are 1/3, 1/2 and 2/3 of the output. - proportion 0.33333 - proportion 0.5 - proportion 0.66667 - - // Fixed sets the width in logical pixels exactly. - // fixed 1920 - } - - // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between. - // preset-window-heights { } - - // You can change the default width of the new windows. - default-column-width { proportion 0.5; } - // If you leave the brackets empty, the windows themselves will decide their initial width. - // default-column-width {} - - // By default focus ring and border are rendered as a solid background rectangle - // behind windows. That is, they will show up through semitransparent windows. - // This is because windows using client-side decorations can have an arbitrary shape. - // - // If you don't like that, you should uncomment `prefer-no-csd` below. - // Niri will draw focus ring and border *around* windows that agree to omit their - // client-side decorations. - // - // Alternatively, you can override it with a window rule called - // `draw-border-with-background`. - - // You can change how the focus ring looks. - focus-ring { - // Uncomment this line to disable the focus ring. - // off - - // How many logical pixels the ring extends out from the windows. - width 2 - - // Colors can be set in a variety of ways: - // - CSS named colors: "red" - // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa" - // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others. - - // Color of the ring on the active monitor. - active-color "#7fc8ff" - - // Color of the ring on inactive monitors. - inactive-color "#505050" - - // You can also use gradients. They take precedence over solid colors. - // Gradients are rendered the same as CSS linear-gradient(angle, from, to). - // The angle is the same as in linear-gradient, and is optional, - // defaulting to 180 (top-to-bottom gradient). - // You can use any CSS linear-gradient tool on the web to set these up. - // Changing the color space is also supported, check the wiki for more info. - // - // active-gradient from="#80c8ff" to="#bbddff" angle=45 - - // You can also color the gradient relative to the entire view - // of the workspace, rather than relative to just the window itself. - // To do that, set relative-to="workspace-view". - // - // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" - } - - // You can also add a border. It's similar to the focus ring, but always visible. - border { - // The settings are the same as for the focus ring. - // If you enable the border, you probably want to disable the focus ring. - off - - width 4 - active-color "#ffc87f" - inactive-color "#505050" - - // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" - // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" - } - - // Struts shrink the area occupied by windows, similarly to layer-shell panels. - // You can think of them as a kind of outer gaps. They are set in logical pixels. - // Left and right struts will cause the next window to the side to always be visible. - // Top and bottom struts will simply add outer gaps in addition to the area occupied by - // layer-shell panels and regular gaps. - struts { - // left 64 - // right 64 - // top 64 - // bottom 64 - } - - shadow { - on - } -} - -layer-rule { - match namespace="^rofi$" - shadow { - on - } -} - -// Add lines like this to spawn processes at startup. -// Note that running niri as a session supports xdg-desktop-autostart, -// which may be more convenient to use. -// See the binds section below for more spawn examples. -spawn-at-startup "waypaper" "--wallpaper" "~/.config/niri/wallpaper.png" - -// Uncomment this line to ask the clients to omit their client-side decorations if possible. -// If the client will specifically ask for CSD, the request will be honored. -// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. -// This option will also fix border/focus ring drawing behind some semitransparent windows. -// After enabling or disabling this, you need to restart the apps for this to take effect. -prefer-no-csd - -// You can change the path where screenshots are saved. -// A ~ at the front will be expanded to the home directory. -// The path is formatted with strftime(3) to give you the screenshot date and time. -screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" - -// You can also set this to null to disable saving screenshots to disk. -// screenshot-path null - -// Animation settings. -// The wiki explains how to configure individual animations: -// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations -animations { - // Uncomment to turn off all animations. - // off - - // Slow down all animations by this factor. Values below 1 speed them up instead. - // slowdown 3.0 -} - -// Window rules let you adjust behavior for individual windows. -// Find more information on the wiki: -// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules - -// Work around WezTerm's initial configure bug -// by setting an empty default-column-width. -window-rule { - // This regular expression is intentionally made as specific as possible, - // since this is the default config, and we want no false positives. - // You can get away with just app-id="wezterm" if you want. - match app-id=r#"^org\.wezfurlong\.wezterm$"# - default-column-width {} -} - -// Example: block out two password managers from screen capture. -// (This example rule is commented out with a "/-" in front.) -/-window-rule { - match app-id=r#"^org\.keepassxc\.KeePassXC$"# - match app-id=r#"^org\.gnome\.World\.Secrets$"# - - block-out-from "screen-capture" - - // Use this instead if you want them visible on third-party screenshot tools. - // block-out-from "screencast" -} - -window-rule { - geometry-corner-radius 4 - clip-to-geometry true -} - -window-rule { - match app-id=r#"^spotify$"# - open-maximized true - open-on-workspace "spotify" -} - -window-rule { - match app-id=r#"^Slack$"# - open-maximized true -} - -window-rule { - match app-id=r#"^Element"# - open-maximized true -} - -window-rule { - match title=r#"^Emacs Selector$"# - opacity 0.95 - open-floating true - open-focused true -} - -window-rule { - match title=r#"^bTop$"# - opacity 0.95 - open-floating true - open-focused true -} - -window-rule { - match title=r#"^GPTel - Emacs$"# - opacity 0.95 - open-floating true - open-focused true -} - -window-rule { - match title=r#"^Authentication Required"# - open-floating true - open-focused true -} - - - -binds { - // Keys consist of modifiers separated by + signs, followed by an XKB key name - // in the end. To find an XKB name for a particular key, you may use a program - // like wev. - // - // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt - // when running as a winit window. - // - // Most actions that you can bind here can also be invoked programmatically with - // `niri msg action do-something`. - - // Mod-Shift-/, which is usually the same as Mod-?, - // shows a list of important hotkeys. - Mod+Shift+Slash { show-hotkey-overlay; } - - // Suggested binds for running programs: terminal, app launcher, screen locker. - Mod+T { spawn "footclient"; } - Mod+D { spawn "rofi" "-show" "drun"; } - Mod+W { spawn "rofi" "-show" "window"; } - Mod+P { spawn "rofi-pass" "--clip"; } - Mod+X { spawn "emacsclient" "-c"; } - Mod+B { spawn "firefox"; } - Mod+RETURN { spawn "emacsclient" "-c" "--eval" "(ccr/start-eshell)"; } - Mod+M { spawn "emacsclient" "-c" "--eval" "(notmuch-search \"tag:new\")"; } - // Mod+G { spawn "emacsclient" "-c" "--eval" "(switch-to-buffer (gptel \"*ChatGPT*\"))" "-F" "((name . \"GPTel - Emacs\") (width . $NIRI_GPTEL_COLS) (height . $NIRI_GPTEL_ROWS))'"; } - Mod+G { spawn "run-floating-gptel"; } - Mod+Shift+C { spawn "emacsclient" "-c" "--eval" "(org-roam-dailies-capture-today)"; } - Mod+Alt+L { spawn "swaylock"; } - Mod+Space { spawn "rofi" "-show" "menu" "-modi" "menu:rofi-power-menu"; } - // Mod+Ctrl+b { spawn "foot" "--title='bTop'" "-W" "$NIRI_BTOP_COLSx$NIRI_BTOP_ROWS" "btop";} - Mod+Ctrl+b { spawn "run-floating-btop"; } - - // Example volume keys mappings for PipeWire & WirePlumber. - // The allow-when-locked=true property makes them work even when the session is locked. - XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; } - XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; } - XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } - XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } - - Mod+Shift+period { spawn "brightnessctl" "s" "5%+"; } - Mod+Shift+comma { spawn "brightnessctl" "s" "5%-"; } - Mod+XF86MonBrightnessUp { spawn "brightnessctl" "s" "5%+"; } - Mod+XF86MonBrightnessDown { spawn "brightnessctl" "s" "5%-"; } - - Mod+Q { close-window; } - - Mod+Left { focus-column-left; } - Mod+Down { focus-window-down; } - Mod+Up { focus-window-up; } - Mod+Right { focus-column-right; } - Mod+H { focus-column-left; } - Mod+J { focus-window-down; } - Mod+K { focus-window-up; } - Mod+L { focus-column-right; } - - Mod+Ctrl+Left { move-column-left; } - Mod+Ctrl+Down { move-window-down; } - Mod+Ctrl+Up { move-window-up; } - Mod+Ctrl+Right { move-column-right; } - Mod+Ctrl+H { move-column-left; } - Mod+Ctrl+J { move-window-down; } - Mod+Ctrl+K { move-window-up; } - Mod+Ctrl+L { move-column-right; } - - // Alternative commands that move across workspaces when reaching - // the first or last window in a column. - // Mod+J { focus-window-or-workspace-down; } - // Mod+K { focus-window-or-workspace-up; } - // Mod+Ctrl+J { move-window-down-or-to-workspace-down; } - // Mod+Ctrl+K { move-window-up-or-to-workspace-up; } - - Mod+Home { focus-column-first; } - Mod+End { focus-column-last; } - Mod+Ctrl+Home { move-column-to-first; } - Mod+Ctrl+End { move-column-to-last; } - - Mod+Shift+Left { focus-monitor-left; } - Mod+Shift+Down { focus-monitor-down; } - Mod+Shift+Up { focus-monitor-up; } - Mod+Shift+Right { focus-monitor-right; } - Mod+Shift+H { focus-monitor-left; } - Mod+Shift+J { focus-monitor-down; } - Mod+Shift+K { focus-monitor-up; } - Mod+Shift+L { focus-monitor-right; } - - Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } - Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } - Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } - Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } - Mod+Shift+Ctrl+H { move-column-to-monitor-left; } - Mod+Shift+Ctrl+J { move-column-to-monitor-down; } - Mod+Shift+Ctrl+K { move-column-to-monitor-up; } - Mod+Shift+Ctrl+L { move-column-to-monitor-right; } - - // Alternatively, there are commands to move just a single window: - // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } - // ... - - // And you can also move a whole workspace to another monitor: - // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } - // ... - - Mod+Page_Down { focus-workspace-down; } - Mod+Page_Up { focus-workspace-up; } - Mod+U { focus-workspace-down; } - Mod+I { focus-workspace-up; } - Mod+Ctrl+Page_Down { move-column-to-workspace-down; } - Mod+Ctrl+Page_Up { move-column-to-workspace-up; } - Mod+Ctrl+U { move-column-to-workspace-down; } - Mod+Ctrl+I { move-column-to-workspace-up; } - - // Alternatively, there are commands to move just a single window: - // Mod+Ctrl+Page_Down { move-window-to-workspace-down; } - // ... - - Mod+Shift+Page_Down { move-workspace-down; } - Mod+Shift+Page_Up { move-workspace-up; } - Mod+Shift+U { move-workspace-down; } - Mod+Shift+I { move-workspace-up; } - - // You can bind mouse wheel scroll ticks using the following syntax. - // These binds will change direction based on the natural-scroll setting. - // - // To avoid scrolling through workspaces really fast, you can use - // the cooldown-ms property. The bind will be rate-limited to this value. - // You can set a cooldown on any bind, but it's most useful for the wheel. - Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } - Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } - Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } - Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } - - Mod+WheelScrollRight { focus-column-right; } - Mod+WheelScrollLeft { focus-column-left; } - Mod+Ctrl+WheelScrollRight { move-column-right; } - Mod+Ctrl+WheelScrollLeft { move-column-left; } - - // Usually scrolling up and down with Shift in applications results in - // horizontal scrolling; these binds replicate that. - Mod+Shift+WheelScrollDown { focus-column-right; } - Mod+Shift+WheelScrollUp { focus-column-left; } - Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } - Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } - - // Similarly, you can bind touchpad scroll "ticks". - // Touchpad scrolling is continuous, so for these binds it is split into - // discrete intervals. - // These binds are also affected by touchpad's natural-scroll, so these - // example binds are "inverted", since we have natural-scroll enabled for - // touchpads by default. - // Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; } - // Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; } - - // You can refer to workspaces by index. However, keep in mind that - // niri is a dynamic workspace system, so these commands are kind of - // "best effort". Trying to refer to a workspace index bigger than - // the current workspace count will instead refer to the bottommost - // (empty) workspace. - // - // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on - // will all refer to the 3rd workspace. - Mod+1 { focus-workspace 1; } - Mod+2 { focus-workspace 2; } - Mod+3 { focus-workspace 3; } - Mod+4 { focus-workspace 4; } - Mod+5 { focus-workspace 5; } - Mod+6 { focus-workspace 6; } - Mod+7 { focus-workspace 7; } - Mod+8 { focus-workspace 8; } - Mod+9 { focus-workspace 9; } - Mod+Ctrl+1 { move-column-to-workspace 1; } - Mod+Ctrl+2 { move-column-to-workspace 2; } - Mod+Ctrl+3 { move-column-to-workspace 3; } - Mod+Ctrl+4 { move-column-to-workspace 4; } - Mod+Ctrl+5 { move-column-to-workspace 5; } - Mod+Ctrl+6 { move-column-to-workspace 6; } - Mod+Ctrl+7 { move-column-to-workspace 7; } - Mod+Ctrl+8 { move-column-to-workspace 8; } - Mod+Ctrl+9 { move-column-to-workspace 9; } - - // Alternatively, there are commands to move just a single window: - // Mod+Ctrl+1 { move-window-to-workspace 1; } - - // Switches focus between the current and the previous workspace. - // Mod+Tab { focus-workspace-previous; } - - // Consume one window from the right into the focused column. - Mod+Comma { consume-window-into-column; } - // Expel one window from the focused column to the right. - Mod+Period { expel-window-from-column; } - - // There are also commands that consume or expel a single window to the side. - Mod+BracketLeft { consume-or-expel-window-left; } - Mod+BracketRight { consume-or-expel-window-right; } - - Mod+R { switch-preset-column-width; } - Mod+Shift+R { switch-preset-window-height; } - Mod+Ctrl+R { reset-window-height; } - Mod+F { maximize-column; } - Mod+Shift+F { fullscreen-window; } - Mod+C { center-column; } - - // Finer width adjustments. - // This command can also: - // * set width in pixels: "1000" - // * adjust width in pixels: "-5" or "+5" - // * set width as a percentage of screen width: "25%" - // * adjust width as a percentage of screen width: "-10%" or "+10%" - // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, - // set-column-width "100" will make the column occupy 200 physical screen pixels. - Mod+Minus { set-column-width "-10%"; } - Mod+Equal { set-column-width "+10%"; } - - // Finer height adjustments when in column with other windows. - Mod+Shift+Minus { set-window-height "-10%"; } - Mod+Shift+Equal { set-window-height "+10%"; } - - // Actions to switch layouts. - // Note: if you uncomment these, make sure you do NOT have - // a matching layout switch hotkey configured in xkb options above. - // Having both at once on the same hotkey will break the switching, - // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). - // Mod+Space { switch-layout "next"; } - // Mod+Shift+Space { switch-layout "prev"; } - - Mod+S { screenshot; } - Mod+Ctrl+S { screenshot-window; } - - // The quit action will show a confirmation dialog to avoid accidental exits. - Mod+Shift+E { quit; } - Ctrl+Alt+Delete { quit; } - - // Powers off the monitors. To turn them back on, do any input like - // moving the mouse or pressing any other key. - Mod+Shift+P { power-off-monitors; } -} diff --git a/hmModules/niri/default.nix b/hmModules/niri/default.nix deleted file mode 100644 index 61a3301..0000000 --- a/hmModules/niri/default.nix +++ /dev/null @@ -1,284 +0,0 @@ -{ - pkgs, - lib, - config, - hostname, - ... -}: -let - niriVars = - { - picard = { - floating-gptel = { - rows = "60"; - cols = "150"; - }; - floating-btop = { - rows = "60"; - cols = "210"; - }; - }; - kirk = { - floating-gptel = { - rows = "40"; - cols = "140"; - }; - floating-btop = { - rows = "40"; - cols = "140"; - }; - }; - } - ."${hostname}" or { - floating-gptel = { - rows = "40"; - cols = "140"; - }; - floating-btop = { - rows = "40"; - cols = "140"; - }; - }; - run-floating-gptel = - with niriVars.floating-gptel; - pkgs.writeScriptBin "run-floating-gptel" '' - emacsclient -c --eval '(switch-to-buffer (gptel "*GptEl*"))' -F '((name . "GPTel - Emacs") (width . ${cols}) (height . ${rows}))' - ''; - run-floating-btop = - with niriVars.floating-btop; - pkgs.writeScriptBin "run-floating-btop" '' - foot --title='bTop' -W ${cols}x${rows} btop - ''; -in -{ - home.packages = with pkgs; [ - niri - waypaper - xwayland-satellite - run-floating-gptel - run-floating-btop - ]; - systemd.user.targets.niri-session = { - Unit = { - Description = "Niri session"; - BindsTo = [ "graphical-session.target" ]; - Wants = [ - "graphical-session-pre.target" - "xdg-desktop-autostart.target" - ]; - After = [ "graphical-session-pre.target" ]; - Before = [ "xdg-desktop-autostart.target" ]; - }; - }; - - home.file."${config.xdg.configHome}/niri/wallpaper.png" = { - source = ../hyprland/wallpaper.png; - }; - - home.activation.linkNiriConfig = lib.hm.dag.entryAnywhere '' - if [ ! -e "$HOME/.config/niri/config.kdl" ]; then - $DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/niri/config.kdl" "$HOME/.config/niri/config.kdl" - fi - ''; - - home.sessionVariables = { - DISPLAY = ":0"; - QT_QPA_PLATFORM = "wayland"; - }; - - programs.rofi = { - enable = true; - package = pkgs.rofi-wayland; - theme = - let - inherit (config.lib.formats.rasi) mkLiteral; - cfg = config.catppuccin.fzf; - palette = (lib.importJSON "${config.catppuccin.sources.palette}/palette.json").${cfg.flavor}.colors; - selectColor = color: palette.${color}.hex; - - in - lib.mkForce { - "*" = { - # blue = mkLiteral "#0000FF"; - # white = mkLiteral "#FFFFFF"; - # black = mkLiteral "#000000"; - # grey = mkLiteral "#eeeeee"; - - blue = mkLiteral (selectColor "blue"); - white = mkLiteral "#FFFFFF"; - black = mkLiteral "#000000"; - grey = mkLiteral "#eeeeee"; - - spacing = 2; - background-color = mkLiteral "#00000000"; - border-color = mkLiteral "#444444FF"; - anchor = mkLiteral "north"; - location = mkLiteral "center"; - }; - - "window" = { - transparency = "real"; - background-color = mkLiteral "#00000000"; - border = 0; - padding = mkLiteral "0% 0% 1em 0%"; - x-offset = 0; - y-offset = mkLiteral "-10%"; - }; - - "mainbox" = { - padding = mkLiteral "0px"; - border = 0; - spacing = mkLiteral "1%"; - }; - - "message" = { - border = 0; - border-radius = mkLiteral "4px"; - padding = mkLiteral "1em"; - background-color = mkLiteral "@white"; - text-color = mkLiteral "@black"; - }; - - "textbox normal" = { - text-color = mkLiteral "#002B36FF"; - padding = 0; - border = 0; - }; - - "listview" = { - fixed-height = 1; - border = 0; - padding = mkLiteral "1em"; - reverse = false; - border-radius = mkLiteral "4px"; - - columns = 1; - background-color = mkLiteral "@white"; - }; - - "element" = { - border = 0; - padding = mkLiteral "2px"; - highlight = mkLiteral "bold"; - }; - - "element-text" = { - background-color = mkLiteral "inherit"; - text-color = mkLiteral "inherit"; - }; - - "element normal.normal" = { - text-color = mkLiteral "#002B36FF"; - background-color = mkLiteral "#F5F5F500"; - }; - - "element normal.urgent" = { - text-color = mkLiteral "#D75F00FF"; - background-color = mkLiteral "#F5F5F5FF"; - }; - - "element normal.active" = { - text-color = mkLiteral "#005F87FF"; - background-color = mkLiteral "#F5F5F5FF"; - }; - - "element selected.normal" = { - text-color = mkLiteral "#F5F5F5FF"; - background-color = mkLiteral "#4271AEFF"; - }; - - "element selected.urgent" = { - text-color = mkLiteral "#F5F5F5FF"; - background-color = mkLiteral "#D75F00FF"; - }; - - "element selected.active" = { - text-color = mkLiteral "#F5F5F5FF"; - background-color = mkLiteral "#005F87FF"; - }; - - "element alternate.normal" = { - text-color = mkLiteral "#002B36FF"; - background-color = mkLiteral "#D0D0D0FF"; - }; - - "element alternate.urgent" = { - text-color = mkLiteral "#D75F00FF"; - background-color = mkLiteral "#D0D0D0FF"; - }; - - "element alternate.active" = { - text-color = mkLiteral "#005F87FF"; - background-color = mkLiteral "#D0D0D0FF"; - }; - - "scrollbar" = { - border = 0; - padding = 0; - }; - - "inputbar" = { - spacing = 0; - border = 0; - padding = mkLiteral "0.5em 1em"; - background-color = mkLiteral "@grey"; - index = 0; - - border-radius = mkLiteral "4px"; - - children = map mkLiteral [ - "prompt" - "textbox-prompt-colon" - "entry" - "case-indicator" - ]; - }; - - "inputbar normal" = { - foreground-color = mkLiteral "#002B36FF"; - background-color = mkLiteral "#F5F5F500"; - }; - - "mode-switcher" = { - border = 0; - padding = mkLiteral "0.5em 1em"; - background-color = mkLiteral "@grey"; - index = 10; - }; - - "button selected" = { - text-color = mkLiteral "#4271AEFF"; - }; - - "textbox-prompt-colon" = { - expand = false; - str = ":"; - margin = mkLiteral "0px 0.3em 0em 0em"; - text-color = mkLiteral "@black"; - }; - - "error-message" = { - border = 0; - border-radius = mkLiteral "4px"; - padding = mkLiteral "1em"; - background-color = mkLiteral "#FF8888"; - text-color = mkLiteral "@black"; - }; - }; - extraConfig = { - modi = "drun,window,ssh"; - combi-modes = [ - "drun" - "window" - "ssh" - ]; - }; - font = "Iosevka Comfy 12"; - terminal = "footclient"; - pass = { - enable = true; - package = pkgs.rofi-pass-wayland; - }; - plugins = [ pkgs.rofi-calc ]; - }; -} diff --git a/hmModules/nix-index/default.nix b/hmModules/nix-index/default.nix index cc3440a..0841b81 100644 --- a/hmModules/nix-index/default.nix +++ b/hmModules/nix-index/default.nix @@ -1,27 +1,24 @@ { + config, pkgs, fleetFlake, + lib, ... -}: -{ +}: { programs.nix-index.enable = true; systemd.user.services.nix-index-update = { - Unit = { - Description = "Update nix-index"; - }; + Unit = {Description = "Update nix-index";}; Service = { CPUSchedulingPolicy = "idle"; IOSchedulingClass = "idle"; - ExecStart = "${pkgs.nix-index}/bin/nix-index --nixpkgs ${fleetFlake.inputs.nixpkgs}"; + ExecStart = "${pkgs.nix-index}/bin/nix-index --nixpkgs ${fleetFlake.inputs.nixpkgsUnstable}"; }; }; systemd.user.timers.nix-index-update = { - Unit = { - Description = "Update nix-index"; - }; + Unit = {Description = "Update nix-index";}; Timer = { Unit = "nix-index-update.service"; @@ -29,8 +26,6 @@ Persistent = true; }; - Install = { - WantedBy = [ "timers.target" ]; - }; + Install = {WantedBy = ["timers.target"];}; }; } diff --git a/hmModules/obs-studio/default.nix b/hmModules/obs-studio/default.nix index 91620ba..6e527dc 100644 --- a/hmModules/obs-studio/default.nix +++ b/hmModules/obs-studio/default.nix @@ -1,10 +1,6 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { programs.obs-studio = { enable = true; - plugins = with pkgs.obs-studio-plugins; [ - wlrobs - input-overlay - ]; + plugins = with pkgs.obs-studio-plugins; [wlrobs input-overlay]; }; } diff --git a/hmModules/openscad/default.nix b/hmModules/openscad/default.nix index eac465f..aa83ca6 100644 --- a/hmModules/openscad/default.nix +++ b/hmModules/openscad/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.openscad ]; +{pkgs, ...}: { + home.packages = [pkgs.openscad]; } diff --git a/hmModules/pantalaimon/default.nix b/hmModules/pantalaimon/default.nix index a6f2b8b..36331cc 100644 --- a/hmModules/pantalaimon/default.nix +++ b/hmModules/pantalaimon/default.nix @@ -1,27 +1,13 @@ -{ pkgs, lib, ... }: { services.pantalaimon = { enable = true; - package = pkgs.pantalaimon.overrideAttrs { - pytestCheckPhase = "echo skip pytest"; - }; settings = { - Default = { - LogLevel = "Debug"; - SSL = true; - }; local-matrix = { - Homeserver = "https://matrix.aciceri.dev"; - # Homeserver = "https://matrix.nixos.dev/_matrix/client"; - # Homeserver = "https://matrix.nixos.dev"; - ListenAddress = "localhost"; + Homeserver = "https://nixos.dev"; + ListenAddress = "127.0.0.1"; ListenPort = 8008; - # SSL = false; - UseKeyring = false; - # IgnoreVerification = true; }; }; }; - - systemd.user.services.pantalaimon.Unit.Requires = [ "dbus.socket" ]; + systemd.user.services.pantalaimon.Unit.Requires = ["dbus.socket"]; } diff --git a/hmModules/password-store/default.nix b/hmModules/password-store/default.nix index 69dbc78..704f123 100644 --- a/hmModules/password-store/default.nix +++ b/hmModules/password-store/default.nix @@ -2,22 +2,12 @@ pkgs, username, ... -}: -let - fzfpass = pkgs.writeShellApplication { - name = "fzfpass"; - text = '' - find "$PASSWORD_STORE_DIR" -name "*.gpg" | sed "s|$PASSWORD_STORE_DIR/||; s|\.gpg||" | fzf --border --info=inline | xargs pass "$@" - ''; - }; -in -{ +}: { programs.password-store = { enable = true; settings = { PASSWORD_STORE_DIR = "/home/${username}/.password-store"; }; - package = pkgs.pass.withExtensions (e: [ e.pass-otp ]); + package = pkgs.pass.withExtensions (e: [e.pass-otp]); }; - home.packages = [ fzfpass ]; } diff --git a/hmModules/qutebrowser/default.nix b/hmModules/qutebrowser/default.nix index e09d76f..4a4c68f 100644 --- a/hmModules/qutebrowser/default.nix +++ b/hmModules/qutebrowser/default.nix @@ -2,8 +2,7 @@ pkgs, config, ... -}: -let +}: let inherit (config.programs.qutebrowser) settings; websites = { searx = "https://searx.be"; @@ -17,8 +16,7 @@ let less-dark-white = "#cccccc"; blue = "#0000ff"; }; -in -{ +in { programs.qutebrowser = { enable = true; searchEngines = with websites; { @@ -36,15 +34,14 @@ in ",l" = ''config-cycle spellcheck.languages [" it-IT "] [" en-US "]''; }; insert = { - "" = - ''spawn --userscript qute-pass --dmenu-invocation '${pkgs.fuzzel}/bin/fuzzel --background-color=253559cc --border-radius=5 --border-width=0 -d' --password-only --unfiltered''; + "" = ''spawn --userscript qute-pass --dmenu-invocation '${pkgs.fuzzel}/bin/fuzzel --background-color=253559cc --border-radius=5 --border-width=0 -d' --password-only --unfiltered''; }; }; settings = { auto_save.session = true; url = with websites; { default_page = searx; - start_pages = [ searx ]; + start_pages = [searx]; }; editor.command = [ "emacsclient" @@ -111,13 +108,15 @@ in }; home.packages = with pkgs; [ fuzzel - (makeDesktopItem { - name = "qutebrowser"; - exec = "qutebrowser %u"; - comment = "Qutebrowser"; - desktopName = "qutebrowser"; - type = "Application"; - mimeTypes = [ "x-scheme-handler/https" ]; - }) + ( + makeDesktopItem { + name = "qutebrowser"; + exec = "qutebrowser %u"; + comment = "Qutebrowser"; + desktopName = "qutebrowser"; + type = "Application"; + mimeTypes = ["x-scheme-handler/https"]; + } + ) ]; } diff --git a/hmModules/reinstall-magisk-on-lineage/default.nix b/hmModules/reinstall-magisk-on-lineage/default.nix deleted file mode 100644 index dba5e35..0000000 --- a/hmModules/reinstall-magisk-on-lineage/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ pkgs, ... }: -let - reinstall-magisk-on-lineage = pkgs.stdenv.mkDerivation { - name = "reinstall-magisk-on-lineage"; - version = "git"; - src = pkgs.fetchFromGitHub { - owner = "NicolasWebDev"; - repo = "reinstall-magisk-on-lineageos"; - rev = "1ca911ed555d4badd705c6c71750b78be8962b0b"; - hash = "sha256-95LzcWL4efR77i8UlzIT+7wQXp+91K2sUwcjmHvTf+Q="; - }; - propagatedBuildInputs = with pkgs; [ - android-tools - jq - ]; - installPhase = '' - mkdir -p $out/bin - cp reinstall-magisk-on-lineageos $out/bin/reinstall-magisk-on-lineageos - ''; - patchPhase = '' - substituteInPlace reinstall-magisk-on-lineageos \ - --replace-fail "paste_yours_here" "\"\$1\"" - ''; - }; -in -{ - home.packages = [ reinstall-magisk-on-lineage ]; -} diff --git a/hmModules/remmina/default.nix b/hmModules/remmina/default.nix index 822eddf..abbd844 100644 --- a/hmModules/remmina/default.nix +++ b/hmModules/remmina/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.remmina ]; +{pkgs, ...}: { + home.packages = [pkgs.remmina]; } diff --git a/hmModules/sdrangel/default.nix b/hmModules/sdrangel/default.nix deleted file mode 100644 index 4b65cb5..0000000 --- a/hmModules/sdrangel/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = [ - (builtins.getFlake "github:NixOS/nixpkgs/063dece00c5a77e4a0ea24e5e5a5bd75232806f8") - .legacyPackages.${pkgs.system}.sdrangel - pkgs.kdePackages.qtlocation - ]; -} diff --git a/hmModules/shell/catppuccin_mocha.omp.json b/hmModules/shell/catppuccin_mocha.omp.json deleted file mode 100644 index c5c74c8..0000000 --- a/hmModules/shell/catppuccin_mocha.omp.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json", - "palette": { - "os": "#ACB0BE", - "closer": "p:os", - "pink": "#F5C2E7", - "lavender": "#B4BEFE", - "blue": "#89B4FA" - }, - "blocks": [ - { - "alignment": "left", - "segments": [ - { - "foreground": "p:blue", - "style": "plain", - "template": "{{ .UserName }}@{{ .HostName }} ", - "type": "session" - }, - { - "foreground": "p:pink", - "properties": { - "folder_icon": "..\ue5fe..", - "home_icon": "~", - "style": "agnoster_short" - }, - "style": "plain", - "template": "{{ .Path }} ", - "type": "path" - }, - { - "foreground": "p:lavender", - "properties": { - "branch_icon": "\ue725 ", - "cherry_pick_icon": "\ue29b ", - "commit_icon": "\uf417 ", - "fetch_status": false, - "fetch_upstream_icon": false, - "merge_icon": "\ue727 ", - "no_commits_icon": "\uf0c3 ", - "rebase_icon": "\ue728 ", - "revert_icon": "\uf0e2 ", - "tag_icon": "\uf412 " - }, - "template": "{{ .HEAD }} ", - "style": "plain", - "type": "git" - }, - { - "style": "plain", - "foreground": "p:closer", - "template": "\uf105", - "type": "text" - } - ], - "type": "prompt" - } - ], - "final_space": true, - "version": 3 -} diff --git a/hmModules/shell/default.nix b/hmModules/shell/default.nix index d33eeda..9607807 100644 --- a/hmModules/shell/default.nix +++ b/hmModules/shell/default.nix @@ -1,29 +1,14 @@ { + config, lib, pkgs, age, + fleetFlake, hostname, - config, - username, ... -}: -{ +}: { programs.bat.enable = true; - programs.ranger = { - enable = true; - settings = { - "preview_images" = true; - "preview_images_method" = "sixel"; - }; - }; - - programs.fzf.enable = true; - - programs.ripgrep.enable = true; - - programs.fd.enable = true; - programs.direnv = { enable = true; config = { @@ -32,9 +17,12 @@ nix-direnv.enable = true; }; - programs.lsd = { - enable = true; - }; + # programs.exa = { + # enable = false; + # enableAliases = true; + # }; + + # programs.fzf.enable = false; programs.vim.enable = true; @@ -43,107 +31,205 @@ controlMaster = "auto"; }; - systemd.user.services.atuind = { - Unit.Description = "Atuin daemon"; - Install = { - WantedBy = [ "default.target" ]; + # programs.starship = { + # enable = false; + # settings = { + # character = { + # success_symbol = "[👌](bold green)"; + # error_symbol = "[🤌](bold red)"; + # }; + # nix_shell = { + # symbol = "❄ "; + # }; + # }; + # }; + + # Playing with it sometimes + # programs.nushell = { + # enable = false; + # configFile.text = '' + # let carapace_completer = {|spans| + # carapace $spans.0 nushell $spans | from json + # } + # let-env config = { + # show_banner: false + # ls: { + # use_ls_colors: true # use the LS_COLORS environment variable to colorize output + # clickable_links: true # enable or disable clickable links. Your terminal has to support links. + # } + # rm: { + # always_trash: true # always act as if -t was given. Can be overridden with -p + # } + # cd: { + # abbreviations: true # allows `cd s/o/f` to expand to `cd some/other/folder` + # } + # table: { + # mode: compact # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other + # index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column + # trim: { + # methodology: wrapping # wrapping or truncating + # wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology + # truncating_suffix: "..." # A suffix used by the 'truncating' methodology + # } + # } + # history: { + # max_size: 10000 # Session has to be reloaded for this to take effect + # sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file + # file_format: "plaintext" # "sqlite" or "plaintext" + # } + # completions: { + # case_sensitive: false # set to true to enable case-sensitive completions + # quick: true # set this to false to prevent auto-selecting completions when only one remains + # partial: true # set this to false to prevent partial filling of the prompt + # algorithm: "fuzzy" # prefix or fuzzy + # external: { + # enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up my be very slow + # max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options + # completer: $carapace_completer # check 'carapace_completer' above as an example + # } + # } + # filesize: { + # metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard) + # format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, zb, zib, auto + # } + # buffer_editor: "${config.programs.helix.package}/bin/helix" + # } + # ''; + # }; + + xdg.configFile = { + "dracula-theme" = { + target = "fish/themes/dracula.theme"; + source = let + theme = pkgs.fetchFromGitHub { + owner = "dracula"; + repo = "fish"; + rev = "269cd7d76d5104fdc2721db7b8848f6224bdf554"; + hash = "sha256-Hyq4EfSmWmxwCYhp3O8agr7VWFAflcUe8BUKh50fNfY="; + }; + in "${theme}/themes/Dracula\ Official.theme"; }; - Service = { - ExecStartPre = "${lib.getExe' pkgs.toybox "rm"} -f ${config.programs.atuin.settings.daemon.socket_path}"; - ExecStart = "${lib.getExe pkgs.atuin} daemon"; + "catppuccin-theme" = { + target = "fish/themes/Catppuccin\ Mocha.theme"; + source = let + theme = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "fish"; + rev = "a3b9eb5eaf2171ba1359fe98f20d226c016568cf"; + hash = "sha256-shQxlyoauXJACoZWtRUbRMxmm10R8vOigXwjxBhG8ng="; + }; + in "${theme}/themes/Catppuccin\ Mocha.theme"; }; }; - programs.atuin = { - enable = false; # FIXME broken on bash: https://github.com/nix-community/home-manager/issues/5958 - settings = { - daemon = { - enabled = true; - socket_path = "/home/${username}/.local/share/atuin/atuin.sock"; # FIXME using ~ or $HOME doesn't work: https://github.com/atuinsh/atuin/issues/2289 - }; - auto_sync = true; - sync_frequency = "5m"; - sync_address = "http://sisko.wg.aciceri.dev:8889"; - search_mode = "fuzzy"; - style = "compact"; - enter_accept = "true"; - }; - }; - - programs.bash = { + programs.fish = { enable = true; - initExtra = lib.optionalString (builtins.hasAttr "cachix-personal-token" age.secrets) '' - export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path}) - ''; + shellInit = + '' + fish_config theme choose "dracula" + fish_config theme choose "Catppuccin Mocha" + '' + + lib.optionalString (builtins.hasAttr "cachix-personal-token" age.secrets) '' + export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path}) + ''; shellAliases = { "cat" = "bat"; }; }; - programs.zoxide.enable = true; - programs.pay-respects.enable = true; - programs.oh-my-posh = { - enable = true; - # same as "captuccin_mocha" but without the OS logo - settings = lib.mkForce ( - builtins.fromJSON ( - builtins.unsafeDiscardStringContext (builtins.readFile ./catppuccin_mocha.omp.json) - ) - ); - }; - - programs.zellij.enableBashIntegration = false; - - # programs.fish = { - # enable = true; + # programs.zsh = { + # enable = false; # Playing xswith fish at the moment + # enableAutosuggestions = true; + # enableCompletion = true; + # enableSyntaxHighlighting = true; + # enableVteIntegration = true; + # autocd = true; + # oh-my-zsh = { + # enable = true; + # plugins = [ + # "ag" + # "cabal" + # "colored-man-pages" + # "colorize" + # "command-not-found" + # "fzf" + # "git" + # "nomad" + # "pass" + # "python" + # "sudo" + # "terraform" + # "thefuck" + # ]; + # }; # plugins = [ - # # { - # # name = "fifc"; - # # src = pkgs.fishPlugins.fifc.src; - # # } # { - # name = "z"; - # src = pkgs.fishPlugins.z.src; + # name = "fzf-tab"; + # src = pkgs.fetchFromGitHub { + # owner = "Aloxaf"; + # repo = "fzf-tab"; + # rev = "c2b4aa5ad2532cca91f23908ac7f00efb7ff09c9"; + # sha256 = "sha256-gvZp8P3quOtcy1Xtt1LAW1cfZ/zCtnAmnWqcwrKel6w="; + # }; + # } + # { + # name = "fzf-tab"; + # src = pkgs.fetchFromGitHub { + # owner = "Aloxaf"; + # repo = "fzf-tab"; + # rev = "c2b4aa5ad2532cca91f23908ac7f00efb7ff09c9"; + # sha256 = "sha256-gvZp8P3quOtcy1Xtt1LAW1cfZ/zCtnAmnWqcwrKel6w="; + # }; + # } + # { + # name = "fast-syntax-highlighting"; + # src = pkgs.fetchFromGitHub { + # owner = "zdharma-continuum"; + # repo = "fast-syntax-highlighting"; + # rev = "13d7b4e63468307b6dcb2dadf6150818f242cbff"; + # sha256 = "sha256-AmsexwVombgVmRvl4O9Kd/WbnVJHPTXETxBv18PDHz4="; + # }; # } # ]; - # shellInit = - # '' - # # fish_vi_key_bindings - # fish_default_key_bindings - # '' - # + lib.optionalString (builtins.hasAttr "cachix-personal-token" age.secrets) '' - # export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path}) - # ''; # shellAliases = { # "cat" = "bat"; + # "em" = "TERM=wezterm emacsclient -nw"; # }; + # loginExtra = "[[ -z $DISPLAY && $TTY = /dev/tty1 ]] && exec dbus-run-session Hyprland"; + # envExtra = '' + # # [ $TERM = "dumb" ] && unsetopt zle && PS1='$ ' # for Emacs TRAMP mode + # ''; + # initExtra = '' + # export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path}) + + # # Don't enable VIM emulation when in Emacs + # [[ -z $INSIDE_EMACS ]] && source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh + + # # When enabling starship, home-manager add an `initExtra` rule to disable it when in Emacs but not with VTerm, + # # since I use also `eat` besides `vterm` the following line is needed + # [[ "$INSIDE_EMACS" =~ "eat" ]] && eval "$(${config.home.profileDirectory}/bin/starship init zsh)" + # ''; # }; - home.packages = - with pkgs; + home.packages = with pkgs; [ + thefuck + htop-vim + bottom dig.dnsutils lsof + zsh-completions + nix-zsh-completions comma - ffmpeg-headless - jless - nix-melt - nurl - jq - yq-go - procs - chafa - hexyl - broot - file + carapace # used by nushell ] - ++ (lib.optionals - (builtins.elem hostname [ - "kirk" - "picard" - ]) - [ - cntr # TODO probably not best place - ] - ); + ++ (lib.optionals (builtins.elem hostname ["kirk" "picard"]) [ + nil # TODO probably not best place + (fleetFlake.inputs.nixd.packages.${pkgs.system}.nixd) # TODO probably not best place + terraform-lsp # TODO probably not best place + python3Packages.jedi-language-server # TODO probably not best place + nodePackages.typescript-language-server # TODO probably not best place + cntr # TODO probably not best place + nom # FIXME disable on aarch64-linux, breaks everything :( + ]); } diff --git a/hmModules/slack/default.nix b/hmModules/slack/default.nix index 4ff5f05..bb7e3b1 100644 --- a/hmModules/slack/default.nix +++ b/hmModules/slack/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.slack ]; +{pkgs, ...}: { + home.packages = [pkgs.slack]; } diff --git a/hmModules/spotify/default.nix b/hmModules/spotify/default.nix index 5bc0a6d..db39efa 100644 --- a/hmModules/spotify/default.nix +++ b/hmModules/spotify/default.nix @@ -1,26 +1,20 @@ -{ - lib, - pkgs, - ... -}: -let - spotify-adblocked = pkgs.callPackage ../../packages/spotify-adblocked { }; -in -{ - home.packages = [ spotify-adblocked ]; +{pkgs, ...}: let + spotify-adblock = pkgs.nur.repos.nltch.spotify-adblock; +in { + home.packages = [spotify-adblock]; - # systemd.user.services.spotify-adblocked = { - # Install.WantedBy = [ "graphical-session.target" ]; + systemd.user.services.spotify-adblocked = { + Install.WantedBy = ["graphical-session.target"]; - # Unit = { - # Description = "Spotify"; - # PartOf = [ "graphical-session.target" ]; - # }; + Unit = { + Description = "Spotify"; + PartOf = ["graphical-session.target"]; + }; - # Service = { - # ExecStart = lib.getExe spotify-adblocked; - # Restart = "on-failure"; - # RestartSec = 3; - # }; - # }; + Service = { + ExecStart = "${spotify-adblock}/bin/spotify"; + Restart = "on-failure"; + RestartSec = 3; + }; + }; } diff --git a/hmModules/steam-run/default.nix b/hmModules/steam-run/default.nix index 7ea2faf..42db3d4 100644 --- a/hmModules/steam-run/default.nix +++ b/hmModules/steam-run/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.steam-run ]; +{pkgs, ...}: { + home.packages = [pkgs.steam-run]; } diff --git a/hmModules/sway/default.nix b/hmModules/sway/default.nix index 3369e92..1b80b13 100644 --- a/hmModules/sway/default.nix +++ b/hmModules/sway/default.nix @@ -3,8 +3,7 @@ lib, config, ... -}: -{ +}: { imports = [ ../waybar ../swayidle @@ -13,7 +12,7 @@ ../kitty ]; config = { - home.packages = with pkgs; [ wl-clipboard ]; + home.packages = with pkgs; [wl-clipboard]; systemd.user.sessionVariables = { NIXOS_OZONE_WL = "1"; @@ -28,109 +27,106 @@ gtk = { enable = true; - font.name = lib.mkForce "Sans,Symbols Nerd Font"; + font.name = "Sans,Symbols Nerd Font"; iconTheme = { name = "Adwaita"; - package = pkgs.adwaita-icon-theme; + package = pkgs.gnome.adwaita-icon-theme; }; }; wayland = { - windowManager.sway = - let - modifier = "Mod4"; - in - { - enable = true; - wrapperFeatures.gtk = true; - config = { - inherit modifier; - menu = "${pkgs.fuzzel}/bin/fuzzel --background-color=253559cc --border-radius=5 --border-width=0"; - output = - let - bg = "${./wallpaper.svg} fill"; - in - { - DP-2 = { - res = "1900x1200"; - pos = "0 0"; - inherit bg; - transform = "90"; - }; - DP-1 = { - res = "2560x1440"; - pos = "1200 230"; - inherit bg; - }; - eDP-1 = { - res = "1920x1080"; - pos = "3760 230"; - inherit bg; - }; - }; - terminal = "${config.programs.kitty.package}/bin/kitty ${config.programs.kitty.package}/bin/kitty +kitten ssh mothership.fleet"; - bars = [ - { - mode = "hide"; - position = "top"; - command = "${pkgs.waybar}/bin/waybar"; - } - ]; - gaps = { - smartBorders = "on"; + windowManager.sway = let + modifier = "Mod4"; + in { + enable = true; + wrapperFeatures.gtk = true; + config = { + inherit modifier; + menu = "${pkgs.fuzzel}/bin/fuzzel --background-color=253559cc --border-radius=5 --border-width=0"; + output = let + bg = "${./wallpaper.svg} fill"; + in { + DP-2 = { + res = "1900x1200"; + pos = "0 0"; + inherit bg; + transform = "90"; }; - assigns = { - "1" = [ - { title = ".*Mozilla Firefox$"; } - { title = ".*qutebrowser$"; } - ]; - "2" = [ { title = "^((?!qutebrowser-editor).)*Emacs$"; } ]; - "3" = [ { title = "Slack.*"; } ]; - "9" = [ { title = "^Element.*"; } ]; + DP-1 = { + res = "2560x1440"; + pos = "1200 230"; + inherit bg; }; - floating.criteria = [ - { title = "MetaMask Notification.*"; } - { title = "Volume Control"; } # pavucontrol - { title = "^.*editor - qutebrowser$"; } # Emacs opened by qutebrowser - ]; - input = { - "*" = { - xkb_layout = "us"; - xkb_variant = "altgr-intl"; - }; + eDP-1 = { + res = "1920x1080"; + pos = "3760 230"; + inherit bg; }; - keybindings = - let - screenshotScript = pkgs.writeShellScript "screenshot.sh" '' - filename="$HOME/shots/$(date --iso-8601=seconds).png" - coords="$(${pkgs.slurp}/bin/slurp)" - ${pkgs.grim}/bin/grim -t png -g "$coords" "$filename" - wl-copy -t image/png < $filename - ''; - in - lib.mkOptionDefault { - "${modifier}+x" = "exec emacsclient -c"; - "${modifier}+y" = - "exec ${pkgs.waypipe}/bin/waypipe --compress lz4=10 ssh mothership.fleet emacsclient -c"; - "${modifier}+b" = "exec qutebrowser"; - "${modifier}+s" = "exec ${screenshotScript}"; - # "${modifier}+g" = "exec ${screenrecordingScript}"; # FIXME - "${modifier}+t" = '' - exec emacsclient -c -F "\'(name . \\"VTerm\\"))" -q --eval '(vterm (getenv "SHELL"))' - ''; - "${modifier}+u" = '' - exec ${pkgs.waypipe}/bin/waypipe --compress lz4=10 ssh mothership.fleet emacsclient -c -F "\'(name . \\"VTerm\\"))" -q --eval '(eat (getenv "SHELL"))' - ''; - "XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl s +5%"; - "XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl s 5%-"; - }; }; - extraConfig = '' - bindsym ${modifier}+p move workspace to output right - ''; - xwayland = true; - systemdIntegration = true; + terminal = "${config.programs.kitty.package}/bin/kitty ${config.programs.kitty.package}/bin/kitty +kitten ssh mothership.fleet"; + bars = [ + { + mode = "hide"; + position = "top"; + command = "${pkgs.waybar}/bin/waybar"; + } + ]; + gaps = { + smartBorders = "on"; + }; + assigns = { + "1" = [{title = ".*Mozilla Firefox$";} {title = ".*qutebrowser$";}]; + "2" = [{title = "^((?!qutebrowser-editor).)*Emacs$";}]; + "3" = [{title = "Slack.*";}]; + "9" = [{title = "^Element.*";}]; + }; + floating.criteria = [ + {title = "MetaMask Notification.*";} + {title = "Volume Control";} # pavucontrol + {title = "^.*editor - qutebrowser$";} # Emacs opened by qutebrowser + ]; + input = { + "*" = { + xkb_layout = "us"; + xkb_variant = "altgr-intl"; + }; + }; + keybindings = let + screenshotScript = pkgs.writeShellScript "screenshot.sh" '' + filename="$HOME/shots/$(date --iso-8601=seconds).png" + coords="$(${pkgs.slurp}/bin/slurp)" + ${pkgs.grim}/bin/grim -t png -g "$coords" "$filename" + wl-copy -t image/png < $filename + ''; + screenrecordingScript = pkgs.writeShellScript "screenrecorder.sh" '' + filename="$HOME/shots/recording-$(date --iso-8601=seconds).mp4" + coords="$(${pkgs.slurp}/bin/slurp)" + ${pkgs.wf-recorder}/bin/wf-recorder -g "$coords" -f "$filename" + wl-copy -t video/mp4 < $filename + ''; + in + lib.mkOptionDefault { + "${modifier}+x" = "exec emacsclient -c"; + "${modifier}+y" = "exec ${pkgs.waypipe}/bin/waypipe --compress lz4=10 ssh mothership.fleet emacsclient -c"; + "${modifier}+b" = "exec qutebrowser"; + "${modifier}+s" = "exec ${screenshotScript}"; + # "${modifier}+g" = "exec ${screenrecordingScript}"; # FIXME + "${modifier}+t" = '' + exec emacsclient -c -F "\'(name . \\"VTerm\\"))" -q --eval '(vterm (getenv "SHELL"))' + ''; + "${modifier}+u" = '' + exec ${pkgs.waypipe}/bin/waypipe --compress lz4=10 ssh mothership.fleet emacsclient -c -F "\'(name . \\"VTerm\\"))" -q --eval '(eat (getenv "SHELL"))' + ''; + "XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl s +5%"; + "XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl s 5%-"; + }; }; + extraConfig = '' + bindsym ${modifier}+p move workspace to output right + ''; + xwayland = true; + systemdIntegration = true; + }; }; }; } diff --git a/hmModules/swayidle/default.nix b/hmModules/swayidle/default.nix index 4db2310..b0eb01b 100644 --- a/hmModules/swayidle/default.nix +++ b/hmModules/swayidle/default.nix @@ -2,50 +2,65 @@ pkgs, lib, ... -}: -{ - services.swayidle = - let - swaylockWithArgs = pkgs.writeScriptBin "swaylockWithArgs" '' - ${pkgs.swaylock-effects}/bin/swaylock \ - --daemonize \ - --screenshots \ - --clock \ - --indicator \ - --indicator-radius 100 \ - --indicator-thickness 7 \ - --effect-blur 7x5 \ - --effect-vignette 0.5:0.5 \ - --ring-color bb00cc \ - --key-hl-color 880033 \ - --line-color 00000000 \ - --inside-color 00000088 \ - --separator-color 00000000 \ - --fade-in 0.2 - ''; - swaylockCommand = "${swaylockWithArgs}/bin/swaylockWithArgs"; - in - { - enable = true; - events = [ - { - event = "before-sleep"; - command = swaylockCommand; - } - { - event = "lock"; - command = swaylockCommand; - } - ]; - timeouts = [ - { - timeout = 600; - command = swaylockCommand; - } - { - timeout = 720; - command = "${pkgs.systemd}/bin/systemctl suspend"; - } - ]; - }; +}: { + services.swayidle = let + # Downgraded due to + # https://github.com/mortie/swaylock-effects/issues/95 + # swaylock-effects = pkgs.swaylock-effects.overrideAttrs (_: { + # version = "jirutka-master"; + # src = pkgs.fetchFromGitHub { + # owner = "jirutka"; + # repo = "swaylock-effects"; + # rev = "7c5681ce96587ce3090c6698501faeccdfdc157d"; + # sha256 = "sha256-09Kq90wIIF9lPjiY2anf9MSgi/EqeXKXW1mFmhxA/aM"; + # }; + # }); + swaylockWithArgs = pkgs.writeScriptBin "swaylockWithArgs" '' + ${pkgs.swaylock-effects}/bin/swaylock \ + --daemonize \ + --screenshots \ + --clock \ + --indicator \ + --indicator-radius 100 \ + --indicator-thickness 7 \ + --effect-blur 7x5 \ + --effect-vignette 0.5:0.5 \ + --ring-color bb00cc \ + --key-hl-color 880033 \ + --line-color 00000000 \ + --inside-color 00000088 \ + --separator-color 00000000 \ + --grace 2 \ + --fade-in 0.2 + ''; + swaylockCommand = "${swaylockWithArgs}/bin/swaylockWithArgs"; + in { + enable = true; + events = [ + { + event = "before-sleep"; + command = swaylockCommand; + } + { + event = "lock"; + command = swaylockCommand; + } + ]; + timeouts = [ + { + timeout = 600; + command = swaylockCommand; + } + { + timeout = 720; + command = "${pkgs.systemd}/bin/systemctl suspend"; + } + ]; + }; + + # Otherwise it will start only after Sway and will not work with Hyprland + systemd.user.services.swayidle = { + Unit.PartOf = lib.mkForce []; + Install.WantedBy = lib.mkForce ["hyprland-session.target"]; + }; } diff --git a/hmModules/teams/default.nix b/hmModules/teams/default.nix index 9f643c1..217685e 100644 --- a/hmModules/teams/default.nix +++ b/hmModules/teams/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.teams-for-linux ]; +{pkgs, ...}: { + home.packages = [pkgs.teams-for-linux]; } diff --git a/hmModules/thunderbird/default.nix b/hmModules/thunderbird/default.nix index 2b3ba1e..9eb89c8 100644 --- a/hmModules/thunderbird/default.nix +++ b/hmModules/thunderbird/default.nix @@ -1,14 +1,14 @@ { - imports = [ ../email ]; + imports = [../email]; config = { accounts.email.accounts = { autistici.thunderbird = { enable = true; - profiles = [ "default" ]; + profiles = ["default"]; }; mlabs.thunderbird = { enable = true; - profiles = [ "default" ]; + profiles = ["default"]; }; }; programs.thunderbird = { diff --git a/hmModules/tor-browser/default.nix b/hmModules/tor-browser/default.nix index 59796db..7b56e78 100644 --- a/hmModules/tor-browser/default.nix +++ b/hmModules/tor-browser/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.tor-browser ]; +{pkgs, ...}: { + home.packages = [pkgs.tor-browser]; } diff --git a/hmModules/tremotesf/default.nix b/hmModules/tremotesf/default.nix deleted file mode 100644 index f1959c4..0000000 --- a/hmModules/tremotesf/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - pkgs, - lib, - ... -}: -{ - home.packages = [ pkgs.tremotesf ]; - - systemd.user.services.tremotesf = { - Install.WantedBy = [ - "waybar.service" - ]; - - Unit = { - Description = "tremotesf"; - }; - - Service = { - ExecStart = pkgs.writeShellScript "start-tremotesf.sh" '' - sleep 5 - ${lib.getExe pkgs.tremotesf} --minimized - ''; - Restart = "on-failure"; - RestartSec = 3; - }; - }; -} diff --git a/hmModules/unison/default.nix b/hmModules/unison/default.nix deleted file mode 100644 index 081f052..0000000 --- a/hmModules/unison/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ pkgs, lib, ... }: -{ - home.packages = [ pkgs.unison ]; - services.unison = { - enable = true; - pairs = { - "roam" = { - roots = [ - # Pair of roots to synchronize - "/home/ccr/roam" - "ssh://root@sisko.wg.aciceri.dev//mnt/hd/roam" - ]; - commandOptions = { - auto = "true"; - batch = "true"; - log = "false"; - repeat = "watch"; - sshcmd = lib.getExe pkgs.openssh; - ui = "text"; - }; - }; - }; - }; -} diff --git a/hmModules/vial/default.nix b/hmModules/vial/default.nix deleted file mode 100644 index af49514..0000000 --- a/hmModules/vial/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.vial ]; -} diff --git a/hmModules/vscode-server/default.nix b/hmModules/vscode-server/default.nix deleted file mode 100644 index 9c8dd7e..0000000 --- a/hmModules/vscode-server/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - services.vscode-server = { - enable = true; - enableFHS = true; - }; -} diff --git a/hmModules/vscode/default.nix b/hmModules/vscode/default.nix index f04f149..e34d82c 100644 --- a/hmModules/vscode/default.nix +++ b/hmModules/vscode/default.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { programs.vscode = { enable = true; # For a few reasons sometimes I'm forced to use VSCode and I don't have time to nixifiy even its configuration. diff --git a/hmModules/waybar/config.json b/hmModules/waybar/config.json deleted file mode 100644 index 8d220da..0000000 --- a/hmModules/waybar/config.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "layer": "top", - "position": "left", - "width": 36, - "margin": "12 0 12 0", - "spacing": 2, - "modules-left": ["clock", "custom/sep", "niri/window"], - "modules-center": ["niri/workspaces"], - "modules-right": [ - "tray", - "custom/sep", - "temperature", - "custom/sep", - "pulseaudio", - "custom/powermenu" - ], - "custom/sep": { - "format": "──" - // "format": "" - }, - "custom/powermenu": { - "on-click": "rofi -show menu -modi menu:rofi-power-menu", - "format": "", - "tooltip": false - }, - "niri/workspaces": { - "format": "{icon}", - "on-click": "activate", - "format-icons": { - "active": "", - "urgent": "", - "default": "" - } - }, - "niri/window": { - "rotate": 90, - "rewrite": { - "(.*) — Mozilla Firefox": " $1", - "(.*) - Emacs": " $1", - "(.*) - Slack": " $1" - } - }, - "clock": { - "tooltip": true, - "format": "{:%H\n%M}", - "tooltip-format": "{:%Y-%m-%d}" - }, - "tray": { - "icon-size": 20, - "spacing": 5, - "show-passive-items": "false" - }, - "temperature": { - "rotate": 90, - "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", - "critical-threshold": 80, - "format": "{icon} {temperatureC}°C", - "format-icons": ["", "", ""] - }, - "pulseaudio": { - "rotate": 90, - "format": "{icon} {volume}%", - "format-bluetooth": "{icon} {volume}%", - "format-muted": "MUTE ", - "format-icons": { - "headphones": "", - "handsfree": "", - "headset": "", - "phone": "", - "portable": "", - "car": "", - "default": ["", ""] - }, - "scroll-step": 3, - "on-click": "pavucontrol", - "on-click-right": "pactl set-source-mute @DEFAULT_SOURCE@ toggle" - } -} diff --git a/hmModules/waybar/default.nix b/hmModules/waybar/default.nix index d311a89..e654892 100644 --- a/hmModules/waybar/default.nix +++ b/hmModules/waybar/default.nix @@ -1,25 +1,121 @@ { pkgs, lib, + fleetFlake, ... -}: -{ +}: { programs.waybar = { enable = true; systemd.enable = true; + style = builtins.readFile ./style.css; + settings = { + mainBar = { + ipc = true; + layer = "top"; + position = "top"; + height = 30; + + modules-left = [ + "wlr/mode" + "hyprland/workspaces" + ]; + modules-center = ["wlr/window"]; + modules-right = [ + "network" + "tray" + "pulseaudio" + "cpu" + "memory" + "temperature" + "backlight" + "battery" + "clock" + ]; + + "hyprland/workspaces" = { + all-outputs = true; + disable-scroll-wraparound = true; + # format = "{icon}"; + on-click = "activate"; + # format-icons = { + # "1" = ""; + # "2" = ""; + # "3" = ""; + # "9" = "ﬧ"; + # urgent = ""; + # }; + # sort-by-number = true; + }; + + "wlr/mode" = {tooltip = false;}; + + "wlr/window" = {max_length = 50;}; + tray = { + spacing = 10; + }; + battery = { + format = "{capacity}% {icon}"; + format-alt = "{time} {icon}"; + format-charging = "{capacity}% "; + format-icons = [" " " " " " " " " "]; + format-plugged = "{capacity}%  "; + states = { + critical = 15; + warning = 30; + }; + }; + clock = { + format-alt = "{:%Y-%m-%d}"; + tooltip-format = "{:%Y-%m-%d | %H:%M}"; + }; + cpu = { + format = "{usage}% "; + tooltip = false; + }; + memory = {format = "{}% ";}; + network = { + interval = 1; + format-alt = "{ifname}: {ipaddr}/{cidr}"; + format-disconnected = "Disconnected ⚠"; + format-ethernet = "{ifname}: {ipaddr}/{cidr} 󰈀 up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}"; + format-linked = "{ifname} (No IP) "; + format-wifi = "{essid} ({signalStrength}%)  {ipaddr}/{cidr} up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}"; + }; + pulseaudio = { + format = "{volume}% {icon} {format_source}"; + format-bluetooth = "{volume}% {icon} {format_source}"; + format-bluetooth-muted = " {icon} {format_source}"; + format-icons = { + car = ""; + default = [" " " " " "]; + handsfree = ""; + headphones = " "; + headset = ""; + phone = ""; + portable = ""; + }; + format-muted = " {format_source}"; + format-source = "{volume}% "; + format-source-muted = ""; + on-click = "${pkgs.pavucontrol}/bin/pavucontrol"; + }; + "wlr/mode" = {format = ''{}'';}; + temperature = { + critical-threshold = 80; + format = "{temperatureC}°C {icon}"; + format-icons = ["" "" ""]; + hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input"; # picard FIXME + # hwmon-path = "/sys/class/thermal/thermal_zone4/temp"; # thinkpad + }; + backlight = { + device = "ddcci2"; + format = "{percent}% {icon}"; + format-icons = [" " " "]; + }; + }; + }; }; - catppuccin.waybar.enable = lib.mkForce false; - - home.activation.linkWaybarConfig = lib.hm.dag.entryAnywhere '' - if [ ! -d "$HOME/.config/waybar" ]; then - $DRY_RUN_CMD mkdir -p "$HOME/.config/waybar" - $DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/waybar/config.json" "$HOME/.config/waybar/config" - $DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/waybar/style.css" "$HOME/.config/waybar/style.css" - fi - ''; - - home.packages = with pkgs; [ - rofi-power-menu - ]; + # waybar needs the hyprctl binary in PATH when started in hyprland + systemd.user.services.waybar.Service.Environment = "PATH=${lib.makeBinPath [pkgs.hyprland]}"; } diff --git a/hmModules/waybar/style.css b/hmModules/waybar/style.css index dc40a39..edb1ecd 100644 --- a/hmModules/waybar/style.css +++ b/hmModules/waybar/style.css @@ -1,71 +1,45 @@ * { border: none; - font-family: "Iosevka Comfy", "FontAwesome", "Nerd Font"; - font-size: 1.35rem; - font-weight: 600; - background: none; + border-radius: 0; + min-height: 0; + font-family: Fira Code; + } window#waybar { - color: #a5adcb; - background-color: #181926; - - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; -} -.modules-left, -.modules-right, -.modules-center { - padding: 12px 4px; + background: rgba(255, 255, 255, 0.05); + color: white; + font-size: 1.2rem; } -tooltip { - color: #a5adcb; - background-color: #181926; - text-shadow: none; -} - -tooltip * { - color: #a5adcb; - text-shadow: none; -} - -#custom-sep { - color: #494d64; -} -#workspaces button:hover { - box-shadow: inherit; - text-shadow: inherit; -} #workspaces button { - color: #5b6078; - background: none; - padding: 0; -} -#workspaces button:hover { - color: #a6da95; -} -#workspaces button.active { - color: #f5bde6; -} -#temperature { - color: #eed49f; -} -#clock { - font-weight: 600; - color: #8bd5ca; -} -#custom-bluetooth_devices { - color: #8aadf4; -} -#pulseaudio { - color: #a6da95; -} -#pulseaudio.muted { - color: #ed8796; + padding: 0 10px; + background: transparent; + color: white; + font-size: 2rem; } -#custom-powermenu { - margin: 12px 0 0 0; - color: #6e738d; +#workspaces button.active { + box-shadow: inset 0 -5px red; +} + +#workspaces button.focused, #workspaces button:hover { + box-shadow: inset 0 -5px white; +} + +#workspaces button.urgent { + /* background: @theme_fg_color; */ + /* color: @theme_selected_bg_color; */ +} + +#mode { + margin: 0 4px; + padding: 0 4px; + /* background: @theme_fg_color; */ + /* color: @unfocused_borders; */ +} + +#pulseaudio, #network, #cpu, #memory, #disk, #temperature, #battery, #language, #clock, #tray { + margin: 0 4px; + padding: 0 2px; } diff --git a/hmModules/wayvnc/default.nix b/hmModules/wayvnc/default.nix index ccccd7b..5f9e090 100644 --- a/hmModules/wayvnc/default.nix +++ b/hmModules/wayvnc/default.nix @@ -4,14 +4,13 @@ vpn, hostname, ... -}: -{ +}: { systemd.user.services.wayvnc = { - Install.WantedBy = [ "graphical-session.target" ]; + Install.WantedBy = ["graphical-session.target"]; Unit = { Description = "WayVNC"; - PartOf = [ "graphical-session.target" ]; + PartOf = ["graphical-session.target"]; }; Service = { diff --git a/hmModules/wezterm/Cargo.lock b/hmModules/wezterm/Cargo.lock new file mode 100644 index 0000000..2122da7 --- /dev/null +++ b/hmModules/wezterm/Cargo.lock @@ -0,0 +1,7319 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" + +[[package]] +name = "anstyle-parse" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "ash" +version = "0.37.3+1.3.251" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", +] + +[[package]] +name = "assert_fs" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd762e110c8ed629b11b6cde59458cc1c71de78ebbcc30099fc8e0403a2a2ec" +dependencies = [ + "anstyle", + "doc-comment", + "globwalk", + "predicates", + "predicates-core", + "predicates-tree", + "tempfile", +] + +[[package]] +name = "async-broadcast" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb" +dependencies = [ + "event-listener 5.3.0", + "event-listener-strategy 0.5.2", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy 0.5.2", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix 0.38.34", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", +] + +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.3.0", + "futures-lite", + "rustix 0.38.34", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "async-signal" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.34", + "signal-hook-registry", + "slab", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "async_ossl" +version = "0.1.0" +dependencies = [ + "async-io", + "openssl", +] + +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "az" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" + +[[package]] +name = "backtrace" +version = "0.3.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base91" +version = "0.1.0" + +[[package]] +name = "battery" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "luahelper", + "starship-battery", + "wezterm-dynamic", +] + +[[package]] +name = "benchmarking" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c335a9de639ba6a3e4107fe7763c9dcd4eb9422575f1191c2b8f2009f03fe4a" + +[[package]] +name = "bintree" +version = "0.1.0" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] + +[[package]] +name = "bitstream-io" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c12d1856e42f0d817a835fe55853957c85c8c8a470114029143d3f12671446e" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "built" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41bfbdb21256b87a8b5e80fab81a8eed158178e812fd7ba451907518b2742f16" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytemuck" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.5.0", + "cairo-sys-rs", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.0" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "camino" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "pure-rust-locales", + "serde", + "windows-targets 0.52.5", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "clap" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", + "terminal_size 0.3.0", +] + +[[package]] +name = "clap_complete" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79504325bf38b10165b02e89b4347300f855f273c4cb30c4a3209e6583275e" +dependencies = [ + "clap", +] + +[[package]] +name = "clap_complete_fig" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b3e65f91fabdd23cac3d57d39d5d938b4daabd070c335c006dccb866a61110" +dependencies = [ + "clap", + "clap_complete", +] + +[[package]] +name = "clap_derive" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "clipboard-win" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b" +dependencies = [ + "winapi", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types 0.5.0", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "codec" +version = "0.1.0" +dependencies = [ + "anyhow", + "base91", + "config", + "leb128", + "log", + "metrics", + "mux", + "portable-pty", + "rangeset", + "serde", + "smol", + "termwiz", + "thiserror", + "varbincode", + "wezterm-term", + "zstd", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color-funcs" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "csscolorparser", + "deltae", + "image", + "lazy_static", + "log", + "lru", + "luahelper", + "plist", + "serde", + "serde_json", + "serde_yaml", + "wezterm-dynamic", + "wezterm-term", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "colorgrad" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a5f405d474b9d05e0a093d3120e77e9bf26461b57a84b40aa2a221ac5617fb6" +dependencies = [ + "csscolorparser", +] + +[[package]] +name = "com-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "config" +version = "0.1.0" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "colorgrad", + "dirs-next", + "enum-display-derive", + "env_logger 0.11.3", + "hostname", + "lazy_static", + "libc", + "log", + "luahelper", + "mlua", + "nix", + "notify", + "once_cell", + "ordered-float", + "portable-pty", + "promise", + "serde", + "serde_json", + "shlex", + "smol", + "termwiz", + "toml 0.8.13", + "umask", + "wezterm-bidi", + "wezterm-config-derive", + "wezterm-dynamic", + "wezterm-input-types", + "wezterm-ssh", + "wezterm-term", + "winapi", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "core-text" +version = "20.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" +dependencies = [ + "core-foundation", + "core-graphics", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csscolorparser" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" +dependencies = [ + "lab", + "phf", +] + +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + +[[package]] +name = "d3d12" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16e44ab292b1dddfdaf7be62cfd8877df52f2f3fde5858d95bab606be259f20" +dependencies = [ + "bitflags 2.5.0", + "libloading 0.8.3", + "winapi", +] + +[[package]] +name = "darling" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.65", +] + +[[package]] +name = "darling_macro" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "dary_heap" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7762d17f1241643615821a8455a0b2c3e803784b058693d990b11f2dce25a0ca" + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "deltae" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "dhat" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cd11d84628e233de0ce467de10b8633f4ddaecafadefc86e13b84b8739b827" +dependencies = [ + "backtrace", + "lazy_static", + "mintex", + "parking_lot 0.12.2", + "rustc-hash", + "serde", + "serde_json", + "thousands", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "difflib" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.3", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dwrote" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" +dependencies = [ + "lazy_static", + "libc", + "serde", + "serde_derive", + "winapi", + "wio", +] + +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + +[[package]] +name = "embed-resource" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e62abb876c07e4754fae5c14cafa77937841f01740637e17d78dc04352f32a5e" +dependencies = [ + "cc", + "rustc_version", + "toml 0.5.11", + "vswhom", + "winreg 0.10.1", +] + +[[package]] +name = "emojis" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f619a926616ae7149a0d82610b051134a0d6c4ae2962d990c06c847a445c5d9" +dependencies = [ + "phf", +] + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enum-display-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ef37b2a9b242295d61a154ee91ae884afff6b8b933b486b12481cc58310ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "enumflags2" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "env-bootstrap" +version = "0.1.0" +dependencies = [ + "backtrace", + "battery", + "chrono", + "cocoa", + "color-funcs", + "config", + "dirs-next", + "env_logger 0.10.2", + "filesystem", + "lazy_static", + "libc", + "log", + "logging", + "mux-lua", + "objc", + "plugin", + "procinfo-funcs", + "serde-funcs", + "share-data", + "spawn-funcs", + "ssh-funcs", + "termwiz", + "termwiz-funcs", + "time-funcs", + "url-funcs", + "wezterm-version", + "winapi", +] + +[[package]] +name = "env_filter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "env_logger" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "euclid" +version = "0.22.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.0", + "pin-project-lite", +] + +[[package]] +name = "exr" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fancy-regex" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" +dependencies = [ + "bit-set", + "regex", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "filedescriptor" +version = "0.8.3" +dependencies = [ + "libc", + "thiserror", + "winapi", +] + +[[package]] +name = "filenamegen" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f40529622e8c4e7c28f600abb501b0ca07047d4e15d576aff1837cca8318ab6" +dependencies = [ + "anyhow", + "bstr", + "regex", + "walkdir", +] + +[[package]] +name = "filesystem" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "filenamegen", + "luahelper", + "smol", +] + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + +[[package]] +name = "fixed" +version = "1.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fc715d38bea7b5bf487fcd79bcf8c209f0b58014f3018a7a19c2b855f472048" +dependencies = [ + "az", + "bytemuck", + "half", + "typenum", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +dependencies = [ + "num-traits", +] + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fontconfig" +version = "0.1.0" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "frecency" +version = "0.1.0" +dependencies = [ + "chrono", + "serde", + "serde_json", + "serde_with", +] + +[[package]] +name = "freetype" +version = "0.1.0" +dependencies = [ + "cc", + "fixed", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fuzzy-matcher" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" +dependencies = [ + "thread_local", +] + +[[package]] +name = "generate-bidi" +version = "0.1.0" +dependencies = [ + "anyhow", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "git2" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" +dependencies = [ + "bitflags 2.5.0", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glium" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94d5813c960a54b76e20fe4ef7e54fbeb12545776a11ecf14f42a946a1c65964" +dependencies = [ + "backtrace", + "fnv", + "gl_generator", + "lazy_static", + "memoffset", + "smallvec", + "takeable-option", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "globwalk" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" +dependencies = [ + "bitflags 2.5.0", + "ignore", + "walkdir", +] + +[[package]] +name = "glow" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "governor" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c390a940a5d157878dd057c78680a33ce3415bcd05b4799509ea44210914b4d5" +dependencies = [ + "cfg-if", + "futures", + "futures-timer", + "no-std-compat", + "nonzero_ext", + "parking_lot 0.12.2", + "smallvec", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.5.0", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "gpu-allocator" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40fe17c8a05d60c38c0a4e5a3c802f2f1ceb66b76c67d96ffb34bef0475a7fad" +dependencies = [ + "backtrace", + "log", + "presser", + "thiserror", + "winapi", + "windows 0.51.1", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +dependencies = [ + "bitflags 2.5.0", + "gpu-descriptor-types", + "hashbrown 0.14.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "guillotiere" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" +dependencies = [ + "euclid", + "svg_fmt", +] + +[[package]] +name = "h2" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "harfbuzz" +version = "0.1.0" +dependencies = [ + "cc", + "freetype", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hassle-rs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0" +dependencies = [ + "bitflags 1.3.2", + "com-rs", + "libc", + "libloading 0.7.4", + "thiserror", + "widestring", + "winapi", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "crossbeam-channel", + "flate2", + "nom", + "num-traits", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "hostname" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba" +dependencies = [ + "cfg-if", + "libc", + "windows 0.52.0", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "http_req" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d9a9b34d2d0a2440774af1b1c09b045fe82ccdc4f4f37d089fbc4cc8a03104e" +dependencies = [ + "native-tls", + "unicase", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "image-webp", + "num-traits", + "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d730b085583c4d789dfd07fdcf185be59501666a90c97c40162b37e4fdad272d" +dependencies = [ + "byteorder-lite", + "thiserror", +] + +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "intrusive-collections" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b694dc9f70c3bda874626d2aed13b780f137aab435f4e9814121955cf706122e" +dependencies = [ + "memoffset", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ioctl-rs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7970510895cee30b3e9128319f2cefd4bde883a39f38baa279567ba3a7eb97d" +dependencies = [ + "libc", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "k9" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "088bcebb5b68b1b14b64d7f05b0f802719250b97fdc0338ec42529ea777ed614" +dependencies = [ + "anyhow", + "colored", + "diff", + "lazy_static", + "libc", + "proc-macro2", + "regex", + "syn 2.0.65", + "terminal_size 0.2.6", +] + +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading 0.8.3", + "pkg-config", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kqueue" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "lab" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "lfucache" +version = "0.1.0" +dependencies = [ + "ahash", + "config", + "fnv", + "intrusive-collections", + "k9", + "metrics", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libflate" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45d9dfdc14ea4ef0900c1cddbc8dcd553fbaacd8a4a282cf4018ae9dd04fb21e" +dependencies = [ + "adler32", + "core2", + "crc32fast", + "dary_heap", + "libflate_lz77", +] + +[[package]] +name = "libflate_lz77" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e0d73b369f386f1c44abd9c570d5318f55ccde816ff4b562fa452e5182863d" +dependencies = [ + "core2", + "hashbrown 0.14.5", + "rle-decode-fast", +] + +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + +[[package]] +name = "libgit2-sys" +version = "0.16.2+1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +dependencies = [ + "cfg-if", + "windows-targets 0.52.5", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libssh-rs" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d46682cfd8dc53c52471cfed5eedcc9248c318f3c8df174ec1b8c4f41565f98" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libssh-rs-sys", + "openssl-sys", + "thiserror", +] + +[[package]] +name = "libssh-rs-sys" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "205ceca5947f473c76f34175de70b15d9e8fadbbdb1bba45d4973037bbdb5fc7" +dependencies = [ + "cc", + "libz-sys", + "openssl-sys", + "pkg-config", +] + +[[package]] +name = "libssh2-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "line-wrap" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e" + +[[package]] +name = "line_drawing" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15cb10f27ad3eac84fdb70f0ea6dfe3bc33f7d6f3aa575f32d1ced3a342049a1" +dependencies = [ + "num-traits", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "logging" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "log", + "luahelper", +] + +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "lua-src" +version = "546.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2da0daa7eee611a4c30c8f5ee31af55266e26e573971ba9336d2993e2da129b2" +dependencies = [ + "cc", +] + +[[package]] +name = "luahelper" +version = "0.1.0" +dependencies = [ + "bstr", + "log", + "mlua", + "wezterm-dynamic", +] + +[[package]] +name = "luajit-src" +version = "210.5.8+5790d25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "441f18d9ad792e871fc2f7f2cb8902c386f6f56fdbddef3b835b61475e375346" +dependencies = [ + "cc", + "which", +] + +[[package]] +name = "mac_address" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa12182b93606fff55b70a5cfe6130eaf7407c2ea4f2c2bcc8b113b67c9928f" +dependencies = [ + "nix", + "winapi", +] + +[[package]] +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "memmap2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] + +[[package]] +name = "memmem" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" +dependencies = [ + "bitflags 2.5.0", + "block", + "core-graphics-types", + "foreign-types 0.5.0", + "log", + "objc", + "paste", +] + +[[package]] +name = "metrics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2be3cbd384d4e955b231c895ce10685e3d8260c5ccffae898c96c723b0772835" +dependencies = [ + "ahash", + "portable-atomic", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mintex" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bec4598fddb13cc7b528819e697852653252b760f1228b7642679bf2ff2cd07" + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "mlua" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e340c022072f3208a4105458286f4985ba5355bfe243c3073afe45cbe9ecf491" +dependencies = [ + "bstr", + "futures-util", + "mlua-sys", + "num-traits", + "once_cell", + "rustc-hash", +] + +[[package]] +name = "mlua-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5552e7e4e22ada0463dfdeee6caf6dc057a189fdc83136408a8f950a5e5c5540" +dependencies = [ + "cc", + "cfg-if", + "lua-src", + "luajit-src", + "pkg-config", +] + +[[package]] +name = "mux" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "base64 0.21.7", + "bintree", + "bitflags 1.3.2", + "chrono", + "config", + "crossbeam", + "downcast-rs", + "fancy-regex", + "filedescriptor", + "finl_unicode", + "hostname", + "k9", + "lazy_static", + "libc", + "log", + "luahelper", + "metrics", + "mlua", + "names", + "nix", + "ntapi", + "parking_lot 0.12.2", + "percent-encoding", + "portable-pty", + "procinfo", + "promise", + "rangeset", + "serde", + "serial", + "shell-words", + "smol", + "terminfo", + "termwiz", + "termwiz-funcs", + "textwrap", + "thiserror", + "url", + "wezterm-dynamic", + "wezterm-ssh", + "wezterm-term", + "winapi", +] + +[[package]] +name = "mux-lua" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "libc", + "log", + "luahelper", + "mux", + "parking_lot 0.12.2", + "portable-pty", + "smol", + "termwiz", + "termwiz-funcs", + "url-funcs", + "wezterm-dynamic", + "wezterm-term", +] + +[[package]] +name = "naga" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae585df4b6514cf8842ac0f1ab4992edc975892704835b549cf818dc0191249e" +dependencies = [ + "bit-set", + "bitflags 2.5.0", + "codespan-reporting", + "hexf-parse", + "indexmap 2.2.6", + "log", + "num-traits", + "rustc-hash", + "spirv", + "termcolor", + "thiserror", + "unicode-xid", +] + +[[package]] +name = "names" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a8690bf09abf659851e58cd666c3d37ac6af07c2bd7a9e332cfba471715775" +dependencies = [ + "rand", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonzero_ext" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" + +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "normalize-line-endings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" + +[[package]] +name = "notify" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" +dependencies = [ + "bitflags 1.3.2", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "mio", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "openssl" +version = "0.10.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "300.2.3+3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cff92b6f71555b61bb9315f7c64da3ca43d87531622120fea0195fc761b4843" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "ordered-float" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +dependencies = [ + "num-traits", + "rand", + "serde", +] + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.1", + "smallvec", + "windows-targets 0.52.5", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "pest_meta" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plist" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9" +dependencies = [ + "base64 0.21.7", + "indexmap 2.2.6", + "line-wrap", + "quick-xml 0.31.0", + "serde", + "time", +] + +[[package]] +name = "plotters" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "plugin" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "git2", + "log", + "luahelper", + "tempfile", + "wezterm-dynamic", +] + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix 0.38.34", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "portable-pty" +version = "0.8.1" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "downcast-rs", + "filedescriptor", + "futures", + "lazy_static", + "libc", + "log", + "nix", + "serde", + "serde_derive", + "serial", + "shared_library", + "shell-words", + "smol", + "winapi", + "winreg 0.10.1", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "predicates" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b87bfd4605926cdfefc1c3b5f8fe560e3feca9d5552cf68c466d3d8236c7e8" +dependencies = [ + "anstyle", + "difflib", + "float-cmp", + "normalize-line-endings", + "predicates-core", + "regex", +] + +[[package]] +name = "predicates-core" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" + +[[package]] +name = "predicates-tree" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +dependencies = [ + "predicates-core", + "termtree", +] + +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + +[[package]] +name = "proc-macro2" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "procinfo" +version = "0.1.0" +dependencies = [ + "libc", + "log", + "luahelper", + "ntapi", + "wezterm-dynamic", + "winapi", +] + +[[package]] +name = "procinfo-funcs" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "libc", + "luahelper", + "procinfo", + "wezterm-dynamic", +] + +[[package]] +name = "profiling" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote", + "syn 2.0.65", +] + +[[package]] +name = "promise" +version = "0.2.0" +dependencies = [ + "anyhow", + "async-executor", + "async-io", + "async-task", + "flume", + "lazy_static", + "thiserror", +] + +[[package]] +name = "pure-rust-locales" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1190fd18ae6ce9e137184f207593877e70f39b015040156b1e05081cdfe3733a" + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", +] + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", + "serde", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "range-alloc" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" + +[[package]] +name = "rangeset" +version = "0.1.0" +dependencies = [ + "criterion", + "num", +] + +[[package]] +name = "ratelim" +version = "0.1.0" +dependencies = [ + "config", + "governor", +] + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rcgen" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48406db8ac1f3cbc7dcdb56ec355343817958a356ff430259bb07baf7607e1e1" +dependencies = [ + "pem", + "ring", + "time", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + +[[package]] +name = "relative-path" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" + +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + +[[package]] +name = "reqwest" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg 0.52.0", +] + +[[package]] +name = "resize" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2a08c42ea86684dc00256494c4eb8b54707890ddac50c05060a717f29669029" +dependencies = [ + "rgb", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rle-decode-fast" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" + +[[package]] +name = "rstest" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5316d2a1479eeef1ea21e7f9ddc67c191d497abc8fc3ba2467857abbb68330" +dependencies = [ + "futures", + "futures-timer", + "rstest_macros", + "rustc_version", +] + +[[package]] +name = "rstest_macros" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04a9df72cc1f67020b0d63ad9bfe4a323e459ea7eb68e03bd9824db49f9a4c25" +dependencies = [ + "cfg-if", + "glob", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version", + "syn 2.0.65", + "unicode-ident", +] + +[[package]] +name = "rusqlite" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" +dependencies = [ + "bitflags 2.5.0", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +dependencies = [ + "bitflags 2.5.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-funcs" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "luahelper", + "serde_json", + "serde_yaml", + "toml 0.8.13", + "wezterm-dynamic", +] + +[[package]] +name = "serde_derive" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "serde_json" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "serde_spanned" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +dependencies = [ + "base64 0.13.1", + "chrono", + "hex", + "indexmap 1.9.3", + "serde", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.2.6", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serial" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1237a96570fc377c13baa1b88c7589ab66edced652e43ffb17088f003db3e86" +dependencies = [ + "serial-core", + "serial-unix", + "serial-windows", +] + +[[package]] +name = "serial-core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f46209b345401737ae2125fe5b19a77acce90cd53e1658cda928e4fe9a64581" +dependencies = [ + "libc", +] + +[[package]] +name = "serial-unix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f03fbca4c9d866e24a459cbca71283f545a37f8e3e002ad8c70593871453cab7" +dependencies = [ + "ioctl-rs", + "libc", + "serial-core", + "termios 0.2.2", +] + +[[package]] +name = "serial-windows" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15c6d3b776267a75d31bbdfd5d36c0ca051251caafc285827052bc53bcdc8162" +dependencies = [ + "libc", + "serial-core", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "share-data" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "lazy_static", + "luahelper", + "ordered-float", + "wezterm-dynamic", +] + +[[package]] +name = "shared_library" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" +dependencies = [ + "lazy_static", + "libc", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[package]] +name = "smithay-client-toolkit" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" +dependencies = [ + "bitflags 2.5.0", + "cursor-icon", + "libc", + "log", + "memmap2 0.9.4", + "rustix 0.38.34", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smol" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +dependencies = [ + "async-channel", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-net", + "async-process", + "blocking", + "futures-lite", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spa" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab074195b3f78a133cd7b7998142cf39dfaac71f6e990eaeecd14f5524db009a" +dependencies = [ + "chrono", +] + +[[package]] +name = "spawn-funcs" +version = "0.1.0" +dependencies = [ + "anyhow", + "bstr", + "config", + "log", + "luahelper", + "smol", + "wezterm-dynamic", + "wezterm-open-url", + "winapi", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spirv" +version = "0.2.0+1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" +dependencies = [ + "bitflags 1.3.2", + "num-traits", +] + +[[package]] +name = "sqlite-cache" +version = "0.1.3" +source = "git+https://github.com/losfair/sqlite-cache?rev=0961b50385ff189bb12742716331c05ed0bf7805#0961b50385ff189bb12742716331c05ed0bf7805" +dependencies = [ + "data-encoding", + "futures", + "rusqlite", + "tracing", +] + +[[package]] +name = "ssh-funcs" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "luahelper", + "wezterm-ssh", +] + +[[package]] +name = "ssh2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7fe461910559f6d5604c3731d00d2aafc4a83d1665922e280f42f9a168d5455" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libssh2-sys", + "parking_lot 0.11.2", +] + +[[package]] +name = "starship-battery" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "725bc1c7374f435ef65746eb1a5789cb7d02b8e997f9a3edf979bfb42da68311" +dependencies = [ + "cfg-if", + "core-foundation", + "lazycell", + "libc", + "mach2", + "nix", + "num-traits", + "uom", + "winapi", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" + +[[package]] +name = "strip-ansi-escapes" +version = "0.1.0" +dependencies = [ + "clap", + "termwiz", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "svg_fmt" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20e16a0f46cf5fd675563ef54f26e83e20f2366bcf027bcb3cc3ed2b98aaf2ca" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync-color-schemes" +version = "0.1.0" +dependencies = [ + "anyhow", + "color-funcs", + "config", + "env_logger 0.11.3", + "futures", + "lazy_static", + "libflate", + "log", + "reqwest", + "rusqlite", + "serde", + "serde_json", + "serde_yaml", + "sqlite-cache", + "tar", + "tempfile", + "tokio", + "toml 0.8.13", + "wezterm-dynamic", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.13", + "version-compare", +] + +[[package]] +name = "tabout" +version = "0.3.0" +dependencies = [ + "termwiz", +] + +[[package]] +name = "takeable-option" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ae8932fcfea38b7d3883ae2ab357b0d57a02caaa18ebb4f5ece08beaec4aa0" + +[[package]] +name = "tar" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix 0.38.34", + "windows-sys 0.52.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "terminal_size" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237" +dependencies = [ + "rustix 0.37.27", + "windows-sys 0.48.0", +] + +[[package]] +name = "terminal_size" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +dependencies = [ + "rustix 0.38.34", + "windows-sys 0.48.0", +] + +[[package]] +name = "terminfo" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" +dependencies = [ + "fnv", + "nom", + "phf", + "phf_codegen", +] + +[[package]] +name = "termios" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d9cf598a6d7ce700a4e6a9199da127e6819a61e64b68609683cc9a01b5683a" +dependencies = [ + "libc", +] + +[[package]] +name = "termios" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" +dependencies = [ + "libc", +] + +[[package]] +name = "termtree" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" + +[[package]] +name = "termwiz" +version = "0.22.0" +dependencies = [ + "anyhow", + "base64 0.21.7", + "bitflags 2.5.0", + "cassowary", + "criterion", + "env_logger 0.11.3", + "fancy-regex", + "filedescriptor", + "finl_unicode", + "fixedbitset", + "fnv", + "hex", + "image", + "k9", + "lazy_static", + "libc", + "log", + "memmem", + "nix", + "num-derive", + "num-traits", + "ordered-float", + "pest", + "pest_derive", + "phf", + "serde", + "sha2", + "signal-hook", + "siphasher", + "tempfile", + "terminfo", + "termios 0.3.3", + "thiserror", + "ucd-trie", + "unicode-segmentation", + "varbincode", + "vtparse", + "wezterm-bidi", + "wezterm-blob-leases", + "wezterm-color-types", + "wezterm-dynamic", + "wezterm-input-types", + "winapi", +] + +[[package]] +name = "termwiz-funcs" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "finl_unicode", + "lazy_static", + "luahelper", + "terminfo", + "termwiz", + "wezterm-dynamic", + "wezterm-input-types", +] + +[[package]] +name = "textwrap" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "thousands" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-funcs" +version = "0.1.0" +dependencies = [ + "anyhow", + "chrono", + "config", + "lazy_static", + "luahelper", + "promise", + "smol", + "spa", + "wezterm-dynamic", +] + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.13", +] + +[[package]] +name = "toml_datetime" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" +dependencies = [ + "indexmap 2.2.6", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.8", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset", + "tempfile", + "winapi", +] + +[[package]] +name = "umask" +version = "0.1.0" +dependencies = [ + "lazy_static", + "libc", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "uom" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffd36e5350a65d112584053ee91843955826bf9e56ec0d1351214e01f6d7cd9c" +dependencies = [ + "num-traits", + "typenum", +] + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "url-funcs" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "luahelper", + "percent-encoding", + "url", + "wezterm-dynamic", +] + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "uuid" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +dependencies = [ + "atomic", + "getrandom", + "serde", +] + +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "varbincode" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b712fa900b441e2d5226a094ca37ca70c0d26d26b79822a5cf34a853a9e26f9f" +dependencies = [ + "byteorder", + "leb128", + "serde", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "vtparse" +version = "0.6.2" +dependencies = [ + "k9", + "utf8parse", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.65", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wayland-backend" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" +dependencies = [ + "cc", + "downcast-rs", + "rustix 0.38.34", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" +dependencies = [ + "bitflags 2.5.0", + "rustix 0.38.34", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.5.0", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" +dependencies = [ + "rustix 0.38.34", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-egl" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "355f652e5a24ae02d2ad536c8fc2d3dcc6c2bd635027cd6103a193e7d75eeda2" +dependencies = [ + "wayland-backend", + "wayland-sys", +] + +[[package]] +name = "wayland-protocols" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" +dependencies = [ + "proc-macro2", + "quick-xml 0.31.0", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +dependencies = [ + "dlib", + "log", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "wezterm" +version = "0.1.0" +dependencies = [ + "anyhow", + "cc", + "chrono", + "clap", + "clap_complete", + "clap_complete_fig", + "codec", + "config", + "embed-resource", + "env-bootstrap", + "filedescriptor", + "hostname", + "humantime", + "image", + "libc", + "log", + "mux", + "portable-pty", + "promise", + "serde", + "serde_json", + "shell-words", + "smol", + "tabout", + "tempfile", + "termios 0.3.3", + "termwiz", + "termwiz-funcs", + "textwrap", + "umask", + "url", + "wezterm-client", + "wezterm-gui-subcommands", + "wezterm-term", + "winapi", +] + +[[package]] +name = "wezterm-bidi" +version = "0.2.3" +dependencies = [ + "env_logger 0.11.3", + "k9", + "log", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-blob-leases" +version = "0.1.0" +dependencies = [ + "getrandom", + "mac_address", + "once_cell", + "serde", + "sha2", + "tempfile", + "thiserror", + "uuid", +] + +[[package]] +name = "wezterm-client" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-io", + "async-trait", + "async_ossl", + "codec", + "config", + "filedescriptor", + "futures", + "lazy_static", + "libc", + "log", + "lru", + "metrics", + "mux", + "openssl", + "parking_lot 0.12.2", + "portable-pty", + "promise", + "rangeset", + "ratelim", + "smol", + "termwiz", + "textwrap", + "thiserror", + "umask", + "url", + "wezterm-dynamic", + "wezterm-ssh", + "wezterm-term", + "wezterm-uds", + "winapi", +] + +[[package]] +name = "wezterm-color-types" +version = "0.3.0" +dependencies = [ + "csscolorparser", + "deltae", + "lazy_static", + "serde", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-config-derive" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "wezterm-dynamic" +version = "0.2.0" +dependencies = [ + "log", + "maplit", + "ordered-float", + "strsim", + "thiserror", + "wezterm-dynamic-derive", +] + +[[package]] +name = "wezterm-dynamic-derive" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "wezterm-font" +version = "0.1.0" +dependencies = [ + "anyhow", + "cairo-rs", + "cocoa", + "config", + "core-foundation", + "core-text", + "dwrote", + "encoding_rs", + "enum-display-derive", + "env_logger 0.11.3", + "euclid", + "finl_unicode", + "fontconfig", + "freetype", + "harfbuzz", + "image", + "k9", + "lazy_static", + "lfucache", + "log", + "memmap2 0.9.4", + "metrics", + "objc", + "ordered-float", + "rangeset", + "termwiz", + "thiserror", + "walkdir", + "wezterm-bidi", + "wezterm-color-types", + "wezterm-input-types", + "wezterm-term", + "wezterm-toast-notification", + "winapi", +] + +[[package]] +name = "wezterm-gui" +version = "0.1.0" +dependencies = [ + "anyhow", + "benchmarking", + "bitflags 1.3.2", + "bytemuck", + "cc", + "chrono", + "clap", + "codec", + "colorgrad", + "config", + "dhat", + "dirs-next", + "downcast-rs", + "embed-resource", + "emojis", + "env-bootstrap", + "env_logger 0.11.3", + "euclid", + "fastrand", + "filedescriptor", + "finl_unicode", + "frecency", + "futures", + "fuzzy-matcher", + "hdrhistogram", + "http_req", + "image", + "k9", + "lazy_static", + "lfucache", + "libc", + "log", + "luahelper", + "metrics", + "mlua", + "mux", + "mux-lua", + "once_cell", + "ordered-float", + "parking_lot 0.12.2", + "portable-pty", + "promise", + "rangeset", + "ratelim", + "rayon", + "regex", + "serde", + "serde_json", + "shared_library", + "shlex", + "smol", + "tabout", + "tempfile", + "terminfo", + "termwiz", + "termwiz-funcs", + "textwrap", + "thiserror", + "tiny-skia", + "umask", + "unicode-normalization", + "unicode-segmentation", + "unicode-width", + "url", + "url-funcs", + "walkdir", + "wezterm-bidi", + "wezterm-blob-leases", + "wezterm-client", + "wezterm-dynamic", + "wezterm-font", + "wezterm-gui-subcommands", + "wezterm-mux-server-impl", + "wezterm-open-url", + "wezterm-ssh", + "wezterm-term", + "wezterm-toast-notification", + "wgpu", + "winapi", + "window", + "window-funcs", + "windows 0.33.0", +] + +[[package]] +name = "wezterm-gui-subcommands" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "config", +] + +[[package]] +name = "wezterm-input-types" +version = "0.1.0" +dependencies = [ + "bitflags 1.3.2", + "euclid", + "lazy_static", + "serde", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-mux-server" +version = "0.1.0" +dependencies = [ + "anyhow", + "async_ossl", + "cc", + "clap", + "config", + "embed-resource", + "env-bootstrap", + "libc", + "log", + "mlua", + "mux", + "openssl", + "portable-pty", + "promise", + "umask", + "wezterm-blob-leases", + "wezterm-gui-subcommands", + "wezterm-mux-server-impl", + "wezterm-term", + "winapi", +] + +[[package]] +name = "wezterm-mux-server-impl" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-io", + "async_ossl", + "codec", + "config", + "futures", + "hostname", + "lazy_static", + "log", + "mux", + "portable-pty", + "promise", + "rangeset", + "rcgen", + "smol", + "termwiz", + "url", + "wezterm-client", + "wezterm-term", + "wezterm-uds", + "winapi", +] + +[[package]] +name = "wezterm-open-url" +version = "0.1.0" +dependencies = [ + "winapi", +] + +[[package]] +name = "wezterm-ssh" +version = "0.4.0" +dependencies = [ + "anyhow", + "assert_fs", + "async_ossl", + "base64 0.22.1", + "bitflags 1.3.2", + "camino", + "clap", + "dirs-next", + "env_logger 0.11.3", + "filedescriptor", + "filenamegen", + "gethostname", + "k9", + "libc", + "libssh-rs", + "log", + "once_cell", + "portable-pty", + "predicates", + "regex", + "rstest", + "shell-words", + "smol", + "socket2", + "ssh2", + "termwiz", + "thiserror", + "wezterm-uds", + "whoami", +] + +[[package]] +name = "wezterm-term" +version = "0.1.0" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "csscolorparser", + "downcast-rs", + "env_logger 0.11.3", + "finl_unicode", + "hex", + "humansize", + "image", + "k9", + "lazy_static", + "log", + "lru", + "miniz_oxide", + "num-traits", + "ordered-float", + "serde", + "terminfo", + "termwiz", + "unicode-normalization", + "url", + "wezterm-bidi", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-toast-notification" +version = "0.1.0" +dependencies = [ + "async-io", + "cocoa", + "core-foundation", + "futures-util", + "log", + "objc", + "serde", + "wezterm-open-url", + "windows 0.33.0", + "xml-rs", + "zbus", + "zvariant", +] + +[[package]] +name = "wezterm-uds" +version = "0.1.0" +dependencies = [ + "async-io", + "uds_windows", +] + +[[package]] +name = "wezterm-version" +version = "0.1.0" +dependencies = [ + "git2", +] + +[[package]] +name = "wgpu" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e7d227c9f961f2061c26f4cb0fbd4df0ef37e056edd0931783599d6c94ef24" +dependencies = [ + "arrayvec", + "cfg-if", + "flume", + "js-sys", + "log", + "naga", + "parking_lot 0.12.2", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef91c1d62d1e9e81c79e600131a258edf75c9531cbdbde09c44a011a47312726" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.5.0", + "codespan-reporting", + "log", + "naga", + "parking_lot 0.12.2", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84ecc802da3eb67b4cf3dd9ea6fe45bbb47ef13e6c49c5c3240868a9cc6cdd9" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.5.0", + "block", + "core-graphics-types", + "d3d12", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hassle-rs", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.3", + "log", + "metal", + "naga", + "objc", + "once_cell", + "parking_lot 0.12.2", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d5ed5f0edf0de351fe311c53304986315ce866f394a2e6df0c4b3c70774bcdd" +dependencies = [ + "bitflags 2.5.0", + "js-sys", + "web-sys", +] + +[[package]] +name = "which" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" +dependencies = [ + "either", + "home", + "rustix 0.38.34", + "winsafe", +] + +[[package]] +name = "whoami" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +dependencies = [ + "redox_syscall 0.4.1", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-channel", + "async-io", + "async-task", + "async-trait", + "bitflags 1.3.2", + "bytes", + "cgl", + "clipboard-win", + "cocoa", + "config", + "core-foundation", + "core-graphics", + "dirs-next", + "downcast-rs", + "euclid", + "filedescriptor", + "futures-lite", + "futures-util", + "gl_generator", + "glium", + "guillotiere", + "k9", + "lazy_static", + "libc", + "libloading 0.8.3", + "line_drawing", + "log", + "metrics", + "mio", + "objc", + "plist", + "promise", + "raw-window-handle", + "resize", + "serde", + "shared_library", + "shlex", + "smithay-client-toolkit", + "thiserror", + "tiny-skia", + "url", + "wayland-client", + "wayland-egl", + "wayland-protocols", + "wezterm-bidi", + "wezterm-color-types", + "wezterm-font", + "wezterm-input-types", + "winapi", + "windows 0.33.0", + "winreg 0.10.1", + "x11", + "xcb", + "xcb-imdkit", + "xkbcommon", + "zbus", + "zvariant", +] + +[[package]] +name = "window-funcs" +version = "0.1.0" +dependencies = [ + "anyhow", + "config", + "luahelper", + "wezterm-dynamic", + "window", +] + +[[package]] +name = "windows" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0128fa8e65e0616e45033d68dc0b7fbd521080b7844e5cad3a4a4d201c4b2bd2" +dependencies = [ + "windows_aarch64_msvc 0.33.0", + "windows_i686_gnu 0.33.0", + "windows_i686_msvc 0.33.0", + "windows_x86_64_gnu 0.33.0", + "windows_x86_64_msvc 0.33.0", +] + +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core 0.51.1", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core 0.52.0", + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winsafe" +version = "0.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" + +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "xattr" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +dependencies = [ + "libc", + "linux-raw-sys 0.4.14", + "rustix 0.38.34", +] + +[[package]] +name = "xcb" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e75181b5a62b6eeaa72f303d3cef7dbb841e22885bf6d3e66fe23e88c55dc6" +dependencies = [ + "as-raw-xcb-connection", + "bitflags 1.3.2", + "libc", + "quick-xml 0.30.0", + "x11", +] + +[[package]] +name = "xcb-imdkit" +version = "0.3.0" +source = "git+https://github.com/wez/xcb-imdkit-rs.git?rev=358e226573461fe540efb920e2aad740e3c6fab1#358e226573461fe540efb920e2aad740e3c6fab1" +dependencies = [ + "bitflags 1.3.2", + "cc", + "lazy_static", + "pkg-config", + "xcb", +] + +[[package]] +name = "xcursor" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" + +[[package]] +name = "xdg-home" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "xkbcommon" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13867d259930edc7091a6c41b4ce6eee464328c6ff9659b7e4c668ca20d4c91e" +dependencies = [ + "as-raw-xcb-connection", + "libc", + "memmap2 0.8.0", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" + +[[package]] +name = "xml-rs" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + +[[package]] +name = "zbus" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5915716dff34abef1351d2b10305b019c8ef33dcf6c72d31a6e227d5d9d7a21" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener 5.3.0", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fceb36d0c1c4a6b98f3ce40f410e64e5a134707ed71892e1b178abc4c695d4" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.10+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +dependencies = [ + "zune-core", +] + +[[package]] +name = "zvariant" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877ef94e5e82b231d2a309c531f191a8152baba8241a7939ee04bd76b0171308" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ca98581cc6a8120789d8f1f0997e9053837d6aa5346cbb43454d7121be6e39" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75fa7291bdd68cd13c4f97cc9d78cbf16d96305856dfc7ac942aeff4c2de7d5a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] diff --git a/hmModules/wezterm/default.nix b/hmModules/wezterm/default.nix index 10c90af..f6b0fcf 100644 --- a/hmModules/wezterm/default.nix +++ b/hmModules/wezterm/default.nix @@ -1,6 +1,67 @@ { + pkgs, + hostname, + ... +}: { programs.wezterm = { enable = true; + package = + if hostname == "pircard" + then + (pkgs.wezterm.overrideAttrs (old: rec { + pname = "wezterm"; + version = "20240406-cce0706"; + src = pkgs.fetchFromGitHub { + owner = "wez"; + repo = "${pname}"; + rev = "cce0706b1f2a9e2d1f02c57f2d1cd367c91df1ae"; + fetchSubmodules = true; + hash = "sha256-BBPxidOpFrw/tIRTqMSREyJF3QEWOwlIoVRT3FD62sQ="; + }; + cargoDeps = pkgs.rustPlatform.importCargoLock { + lockFile = "${src}/Cargo.lock"; + outputHashes = { + "xcb-imdkit-0.3.0" = "sha256-fTpJ6uNhjmCWv7dZqVgYuS2Uic36XNYTbqlaly5QBjI="; + }; + }; + patches = + (old.patches or []) + ++ [ + (pkgs.fetchpatch { + # fix(wayland): ensure repaint event is sent in show + url = "https://patch-diff.githubusercontent.com/raw/wez/wezterm/pull/5264.patch"; + hash = "sha256-c+frVaBEL0h3PJvNu3AW2iap+uUXBY8olbm7Wsxuh4Q="; + }) + (pkgs.writeText + "wezterm-remove_capabilities.patch" + '' + diff --git a/window/src/os/wayland/seat.rs b/window/src/os/wayland/seat.rs + index 3798f4259..e91591130 100644 + --- a/window/src/os/wayland/seat.rs + +++ b/window/src/os/wayland/seat.rs + @@ -65,9 +65,15 @@ impl SeatHandler for WaylandState { + _conn: &Connection, + _qh: &QueueHandle, + _seat: WlSeat, + - _capability: smithay_client_toolkit::seat::Capability, + + capability: smithay_client_toolkit::seat::Capability, + ) { + - todo!() + + if capability == Capability::Keyboard && self.keyboard.is_some() { + + self.keyboard.take().unwrap().release(); + + } + + + + if capability == Capability::Pointer && self.pointer.is_some() { + + self.pointer = None; + + } + } + + fn remove_seat(&mut self, _conn: &Connection, _qh: &QueueHandle, _seat: WlSeat) { + '') + ]; + })) + else pkgs.wezterm; + extraConfig = '' return { -- enable_wayland = false; -- https://github.com/wez/wezterm/issues/4483 diff --git a/hmModules/whatsapp/default.nix b/hmModules/whatsapp/default.nix index b3f0a90..5d0335a 100644 --- a/hmModules/whatsapp/default.nix +++ b/hmModules/whatsapp/default.nix @@ -1,13 +1,12 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.whatsapp-for-linux ]; +{pkgs, ...}: { + home.packages = [pkgs.whatsapp-for-linux]; systemd.user.services.whatsapp = { - Install.WantedBy = [ "graphical-session.target" ]; + Install.WantedBy = ["graphical-session.target"]; Unit = { Description = "Whatsapp"; - PartOf = [ "graphical-session.target" ]; + PartOf = ["graphical-session.target"]; }; Service = { diff --git a/hmModules/wine/default.nix b/hmModules/wine/default.nix index a499a37..e1f674a 100644 --- a/hmModules/wine/default.nix +++ b/hmModules/wine/default.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { home.packages = with pkgs; [ winetricks wineWowPackages.waylandFull diff --git a/hmModules/xdg/default.nix b/hmModules/xdg/default.nix index a1c5fe4..858798f 100644 --- a/hmModules/xdg/default.nix +++ b/hmModules/xdg/default.nix @@ -1,12 +1,11 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { xdg = { enable = true; mimeApps.enable = true; mimeApps.defaultApplications = { - "text/html" = [ "firefox.desktop" ]; - "x-scheme-handler/http" = [ "firefox.desktop" ]; - "x-scheme-handler/https" = [ "firefox.desktop" ]; + "text/html" = ["firefox.desktop"]; + "x-scheme-handler/http" = ["firefox.desktop"]; + "x-scheme-handler/https" = ["firefox.desktop"]; }; desktopEntries = { org-protocol = { @@ -14,43 +13,16 @@ genericName = "Org protocol"; exec = "emacsclient -- %u"; terminal = false; - mimeType = [ "x-scheme-handler/org-protocol" ]; + mimeType = ["x-scheme-handler/org-protocol"]; }; firefox = { name = "firefox"; genericName = "Firefox protocol"; exec = "firefox -- %U"; terminal = false; - mimeType = [ - "text/html" - "text/xml" - "text/uri" - ]; + mimeType = ["text/html" "text/xml" "text/uri"]; }; }; - portal = { - enable = true; - configPackages = with pkgs; [ - # xdg-desktop-portal-wlr - # xdg-desktop-portal-gtk - # xdg-desktop-portal-hyprland - xdg-desktop-portal-gnome - # xdg-desktop-portal - # kdePackages.xdg-desktop-portal-kde - # libsForQt5.xdg-desktop-portal-kde - gnome-keyring - ]; - extraPortals = with pkgs; [ - # xdg-desktop-portal-wlr - # xdg-desktop-portal-gtk - # xdg-desktop-portal-hyprland - xdg-desktop-portal-gnome - # xdg-desktop-portal - # kdePackages.xdg-desktop-portal-kde - gnome-keyring - ]; - }; - }; - home.packages = [ pkgs.xdg-utils ]; + home.packages = [pkgs.xdg-utils]; } diff --git a/hmModules/zellij/default.nix b/hmModules/zellij/default.nix deleted file mode 100644 index b2a7bd3..0000000 --- a/hmModules/zellij/default.nix +++ /dev/null @@ -1,107 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: -let - zjstatus = pkgs.fetchurl { - url = "https://github.com/dj95/zjstatus/releases/download/v0.17.0/zjstatus.wasm"; - hash = "sha256-IgTfSl24Eap+0zhfiwTvmdVy/dryPxfEF7LhVNVXe+U="; - }; - cfg = config.catppuccin.fzf; - palette = (lib.importJSON "${config.catppuccin.sources.palette}/palette.json").${cfg.flavor}.colors; - selectColor = color: palette.${color}.hex; - color_fg = selectColor "text"; - color_bg = selectColor "mantle"; - color_black = selectColor "surface1"; - color_red = selectColor "red"; - color_green = selectColor "green"; - color_yellow = selectColor "yellow"; - color_blue = selectColor "blue"; - color_magenta = selectColor "pink"; - color_cyan = selectColor "teal"; - color_white = selectColor "subtext1"; - layout = pkgs.writeText "layout.kdl" '' - layout { - default_tab_template { - pane size=1 borderless=true { - plugin location="file:${zjstatus}" { - color_fg "${color_fg}" - color_bg "${color_bg}" - color_black "${color_black}" - color_red "${color_red}" - color_green "${color_green}" - color_yellow "${color_yellow}" - color_blue "${color_blue}" - color_magenta "${color_magenta}" - color_cyan "${color_cyan}" - color_white "${color_white}" - - format_left "{mode}#[bg=$bg] {tabs}" - // format_center "#[bg=$bg,fg=$fg] Zellij: #[bg=$bg,fg=$fg]{session}" - // format_right "{datetime}" - format_right "#[bg=$bg,fg=$fg] Zellij: #[bg=$bg,fg=$fg]{session} " - format_space "#[bg=$bg]" - format_hide_on_overlength "true" - format_precedence "crl" - - border_enabled "false" - border_char "─" - border_format "#[fg=#6C7086]{char}" - border_position "top" - - hide_frame_for_single_pane "true" - - mode_normal "#[bg=$green,fg=$bg,bold] NORMAL #[bg=$bg,fg=$green]" - mode_locked "#[bg=$red,fg=$bg,bold] LOCKED  #[bg=$bg,fg=$red]" - mode_resize "#[bg=$blue,fg=$bg,bold] RESIZE #[bg=$bg,fg=$blue]" - mode_pane "#[bg=$blue,fg=$bg,bold] PANE #[bg=$bg,fg=$blue]" - mode_tab "#[bg=$yellow,fg=$bg,bold] TAB #[bg=$bg,fg=$yellow]" - mode_scroll "#[bg=$blue,fg=$bg,bold] SCROLL #[bg=$bg,fg=$blue]" - mode_enter_search "#[bg=$yellow,fg=$bg,bold] ENT-SEARCH #[bg=$bg,fg=$yellow]" - mode_search "#[bg=$yellow,fg=$bg,bold] SEARCHARCH #[bg=$bg,fg=$yellow]" - mode_rename_tab "#[bg=$yellow,fg=$bg,bold] RENAME-TAB #[bg=$bg,fg=$yellow]" - mode_rename_pane "#[bg=$blue,fg=$bg,bold] RENAME-PANE #[bg=$bg,fg=$blue]" - mode_session "#[bg=$blue,fg=$bg,bold] SESSION #[bg=$bg,fg=$blue]" - mode_move "#[bg=$blue,fg=$bg,bold] MOVE #[bg=$bg,fg=$blue]" - mode_prompt "#[bg=$blue,fg=$bg,bold] PROMPT #[bg=$bg,fg=$blue]" - mode_tmux "#[bg=$magenta,fg=$bg,bold] TMUX #[bg=$bg,fg=$magenta]" - - // formatting for inactive tabs - tab_normal "#[bg=$bg,fg=$cyan] #[bg=$cyan,fg=$bg,bold] {index} {floating_indicator}#[bg=$bg,fg=$bg,bold]" - tab_normal_fullscreen "#[bg=$bg,fg=$cyan] #[bg=$cyan,fg=$bg,bold] {index} {fullscreen_indicator}#[bg=$bg,fg=$bg,bold]" - tab_normal_sync "#[bg=$bg,fg=$cyan] #[bg=$cyan,fg=$bg,bold] {index} {sync_indicator}#[bg=$bg,fg=$bg,bold]" - - // formatting for the current active tab - tab_active "#[bg=$bg,fg=$yellow] #[bg=$yellow,fg=$bg,bold] {index} {floating_indicator}#[bg=$bg,fg=$bg,bold]" - tab_active_fullscreen "#[bg=$bg,fg=$yellow] #[bg=$yellow,fg=$bg,bold] {index} {fullscreen_indicator}#[bg=$bg,fg=$bg,bold]" - tab_active_sync "#[bg=$bg,fg=$yellow] #[bg=$yellow,fg=$bg,bold] {index} {sync_indicator}#[bg=$bg,fg=$bg,bold]" - - // separator between the tabs - tab_separator "#[bg=$bg] " - - // indicators - tab_sync_indicator " " - tab_fullscreen_indicator " 󰊓" - tab_floating_indicator " 󰹙" - - datetime "#[fg=$fg] {format} " - datetime_format "%Y-%m-%d %H:%M" - datetime_timezone "Europe/Rome" - } - } - children - } - } - ''; -in -{ - programs.zellij = { - enable = true; - settings = { - default_layout = "${layout}"; - pane_frames = false; - }; - }; -} diff --git a/hmModules/zk/default.nix b/hmModules/zk/default.nix deleted file mode 100644 index 1f65116..0000000 --- a/hmModules/zk/default.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - programs.bat.enable = true; - programs.fzf.enable = true; - programs.zk = { - enable = true; - settings = { - notebook.dir = "~/notebook"; - note = { - language = "en"; - default-title = "Untitled"; - filename = "{{id}}"; - extension = "md"; - template = "default.md"; - }; - group.journal = { - paths = [ "journal" ]; - note = { - filename = "{{format-date now}}"; - template = "journal.md"; - }; - }; - format.markdown = { - hashtags = false; - colon-tags = true; - multiword-tags = false; - }; - tool = { - pager = "less -FIRX"; - fzf-preview = "bat --color always {-1}"; - }; - lsp.diagnostics = { - wiki-title = "hint"; - dead-link = "error"; - }; - lsp.completion = { - note-label = "{{title-or-path}}"; - note-filter-text = "{{title}} {{path}}"; - note-detail = "{{filename-stem}}"; - }; - }; - }; -} diff --git a/hmModules/zmkbatx/default.nix b/hmModules/zmkbatx/default.nix index ff8c992..3c6b6ec 100644 --- a/hmModules/zmkbatx/default.nix +++ b/hmModules/zmkbatx/default.nix @@ -2,23 +2,19 @@ pkgs, lib, ... -}: -{ - home.packages = [ pkgs.zmkBATx ]; +}: { + home.packages = [pkgs.zmkBATx]; systemd.user.services.zmkBATx = { - Install.WantedBy = [ - "waybar.service" - ]; + Install.WantedBy = ["graphical-session.target"]; Unit = { Description = "zmkBATx"; + PartOf = ["graphical-session.target"]; }; Service = { - ExecStart = '' - ${pkgs.runtimeShell} -l -c "${lib.getExe' pkgs.busybox "sleep"} 5 && ${lib.getExe pkgs.zmkBATx}" - ''; + ExecStart = lib.getExe pkgs.zmkBATx; Restart = "on-failure"; RestartSec = 3; }; diff --git a/hmModules/zoom/default.nix b/hmModules/zoom/default.nix deleted file mode 100644 index 78c6b5d..0000000 --- a/hmModules/zoom/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.zoom-us ]; -} diff --git a/hmModules/zulip/default.nix b/hmModules/zulip/default.nix index 40cdfb2..f598162 100644 --- a/hmModules/zulip/default.nix +++ b/hmModules/zulip/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - home.packages = [ pkgs.zulip ]; +{pkgs, ...}: { + home.packages = [pkgs.zulip]; } diff --git a/hosts/archer/#default.nix# b/hosts/archer/#default.nix# new file mode 100644 index 0000000..cbde1a4 --- /dev/null +++ b/hosts/archer/#default.nix# @@ -0,0 +1,26 @@ +{pkgs, ...}: { + # $ nix-env -qaP | grep wget + environment.systemPackages = + [ pkgs.vim + ]; + + # # Auto upgrade nix package and the daemon service. + # services.nix-daemon.enable = true; + # # nix.package = pkgs.nix; + + # # Necessary for using flakes on this system. + # nix.settings.experimental-features = "nix-command flakes"; + + # # Create /etc/zshrc that loads the nix-darwin environment. + # programs.zsh.enable = true; # default shell on catalina + # # programs.fish.enable = true; + + # # # Set Git commit hash for darwin-version. + # # system.configurationRevision = self.rev or self.dirtyRev or null; + + # # Used for backwards compatibility, please read the changelog before changing. + # # $ darwin-rebuild changelog + # system.stateVersion = 4; + + # # The platform the configuration will be used on. +} diff --git a/hosts/archer/default.nix b/hosts/archer/default.nix index 6a4ac88..9437ec4 100644 --- a/hosts/archer/default.nix +++ b/hosts/archer/default.nix @@ -1,9 +1,6 @@ -{ pkgs, ... }: -{ - environment.systemPackages = with pkgs; [ - helix - vim - git +{pkgs, ...}: { + environment.systemPackages = [ + pkgs.vim ]; nix.settings.experimental-features = "nix-command flakes"; @@ -12,5 +9,5 @@ services.nix-daemon.enable = true; - system.stateVersion = 5; + # nixpkgs.localSystem = "x86_64-darwin"; } diff --git a/hosts/beebox/default.nix b/hosts/beebox/default.nix index 538b6cf..d99b8b1 100644 --- a/hosts/beebox/default.nix +++ b/hosts/beebox/default.nix @@ -1,8 +1,9 @@ { fleetModules, + pkgs, + lib, ... -}: -{ +}: { imports = [ ./hardware-configuration.nix diff --git a/hosts/beebox/hardware-configuration.nix b/hosts/beebox/hardware-configuration.nix index 56c4753..5ea0dce 100644 --- a/hosts/beebox/hardware-configuration.nix +++ b/hosts/beebox/hardware-configuration.nix @@ -7,22 +7,15 @@ pkgs, modulesPath, ... -}: -{ +}: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ - "ahci" - "xhci_pci" - "usb_storage" - "usbhid" - "sd_mod" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; + boot.initrd.availableKernelModules = ["ahci" "xhci_pci" "usb_storage" "usbhid" "sd_mod"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-intel"]; + boot.extraModulePackages = []; boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; @@ -38,7 +31,7 @@ }; swapDevices = [ - { device = "/dev/disk/by-label/swap"; } + {device = "/dev/disk/by-label/swap";} ]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking diff --git a/hosts/default.nix b/hosts/default.nix index d070094..c42de37 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -1,39 +1,98 @@ { + self, + lib, + config, inputs, ... -}: -{ - imports = [ ./module.nix ]; +}: { + imports = [./module.nix]; fleet = { - darwinHosts.archer = { }; + darwinHosts.archer = {}; - nixOnDroidHosts.janeway = { }; + nixOnDroidHosts.janeway = {}; hosts = { + # thinkpad = { + # extraModules = with inputs; [ + # nixosHardware.nixosModules.lenovo-thinkpad-x1-7th-gen + # buildbot-nix.nixosModules.buildbot-master + # buildbot-nix.nixosModules.buildbot-worker + # ]; + # extraHmModules = with inputs; [ + # ccrEmacs.hmModules.default + # { + # # TODO: remove after https://github.com/nix-community/home-manager/pull/3811 + # imports = let + # hmModules = "${inputs.homeManagerGitWorkspace}/modules"; + # in [ + # "${hmModules}/services/git-workspace.nix" + # ]; + # } + # ]; + # overlays = [inputs.nil.overlays.default]; + # secrets = { + # "thinkpad-wireguard-private-key" = {}; + # "cachix-personal-token".owner = "ccr"; + # "autistici-password".owner = "ccr"; + # "git-workspace-tokens".owner = "ccr"; + # "chatgpt-token".owner = "ccr"; + # }; + # }; + # rock5b = { + # system = "aarch64-linux"; + # extraModules = with inputs; [ + # disko.nixosModules.disko + # rock5b.nixosModules.default + # ]; + # secrets = { + # "rock5b-wireguard-private-key" = {}; + # "hercules-ci-join-token".owner = "hercules-ci-agent"; + # "hercules-ci-binary-caches".owner = "hercules-ci-agent"; + # "cachix-personal-token".owner = "ccr"; + # "home-planimetry".owner = "hass"; + # "cloudflare-dyndns-api-token" = {}; + # # "nextcloud-admin-pass".owner = "nextcloud"; + # # "aws-credentials" = {}; + # }; + # colmena.deployment.buildOnTarget = true; + # }; + # pbp = { + # system = "aarch64-linux"; + # extraModules = with inputs; [ + # nixosHardware.nixosModules.pine64-pinebook-pro + # disko.nixosModules.disko + # ]; + # extraHmModules = [ + # inputs.ccrEmacs.hmModules.default + # ]; + # secrets = { + # "pbp-wireguard-private-key" = {}; + # "cachix-personal-token".owner = "ccr"; + # "chatgpt-token".owner = "ccr"; + # }; + # }; + deltaflyer = { - nixpkgs = - let - # keep in sync with https://github.com/mobile-nixos/mobile-nixos/blob/development/npins/sources.json - rev = "d3c42f187194c26d9f0309a8ecc469d6c878ce33"; - in + nixpkgs = let + # keep in sync with https://github.com/NixOS/mobile-nixos/blob/development/pkgs.nix + rev = "44d0940ea560dee511026a53f0e2e2cde489b4d4"; + in builtins.getFlake "github:NixOS/nixpkgs/${rev}"; extraHmModules = [ - inputs.catppuccin.homeModules.catppuccin + inputs.ccrEmacs.hmModules.default ]; vpn = { ip = "10.100.0.5"; publicKey = "6bzmBx2b5yzMdW0aK0KapoBesNcxTv5+qdo+pGmG+jc="; }; - # homeManager = builtins.getFlake "github:nix-community/home-manager/670d9ecc3e46a6e3265c203c2d136031a3d3548e"; + homeManager = builtins.getFlake "github:nix-community/home-manager/670d9ecc3e46a6e3265c203c2d136031a3d3548e"; extraModules = [ - (import "${inputs.mobile-nixos}/lib/configuration.nix" { device = "oneplus-fajita"; }) - inputs.catppuccin.nixosModules.catppuccin - inputs.lix-module.nixosModules.default + (import "${inputs.mobile-nixos}/lib/configuration.nix" {device = "oneplus-fajita";}) ]; secrets = { - "deltaflyer-wireguard-private-key" = { }; - "openrouter-api-key".owner = "ccr"; + "deltaflyer-wireguard-private-key" = {}; + "chatgpt-token".owner = "ccr"; }; }; @@ -46,20 +105,18 @@ inputs.disko.nixosModules.disko inputs.nixosHardware.nixosModules.lenovo-thinkpad-x1-7th-gen inputs.lix-module.nixosModules.default - inputs.catppuccin.nixosModules.catppuccin ]; extraHmModules = [ + inputs.ccrEmacs.hmModules.default "${inputs.homeManagerGitWorkspace}/modules/services/git-workspace.nix" - inputs.catppuccin.homeModules.catppuccin ]; secrets = { - "kirk-wireguard-private-key" = { }; - "openrouter-api-key".owner = "ccr"; + "kirk-wireguard-private-key" = {}; + "chatgpt-token".owner = "ccr"; "cachix-personal-token".owner = "ccr"; "git-workspace-tokens".owner = "ccr"; "autistici-password".owner = "ccr"; - "restic-hetzner-password" = { }; - "nix-netrc" = { }; + "restic-hetzner-password" = {}; }; }; @@ -70,110 +127,66 @@ }; extraModules = [ inputs.disko.nixosModules.disko + inputs.nixThePlanet.nixosModules.macos-ventura inputs.lix-module.nixosModules.default - inputs.lanzaboote.nixosModules.lanzaboote - inputs.catppuccin.nixosModules.catppuccin + # inputs.hercules-ci-agent.nixosModules.agent-service ]; extraHmModules = [ + inputs.ccrEmacs.hmModules.default "${inputs.homeManagerGitWorkspace}/modules/services/git-workspace.nix" - inputs.vscode-server.nixosModules.home - inputs.catppuccin.homeModules.catppuccin ]; secrets = { - "picard-wireguard-private-key" = { }; - "openrouter-api-key".owner = "ccr"; + "picard-wireguard-private-key" = {}; + "chatgpt-token".owner = "ccr"; "cachix-personal-token".owner = "ccr"; + "hercules-ci-join-token".owner = "hercules-ci-agent"; + "hercules-ci-binary-caches".owner = "hercules-ci-agent"; + "hercules-ci-secrets-json".owner = "hercules-ci-agent"; "git-workspace-tokens".owner = "ccr"; "autistici-password".owner = "ccr"; - "restic-hetzner-password" = { }; + "restic-hetzner-password" = {}; + "aws-credentials".owner = "hercules-ci-agent"; "forgejo-runners-token".owner = "nixuser"; "forgejo-nix-access-tokens".owner = "nixuser"; - "nix-netrc" = { }; - "wireguard-mlabs-private-key" = { }; }; }; sisko = { system = "aarch64-linux"; - nixpkgs = inputs.nixpkgsSisko; - enableHomeManager = false; vpn = { ip = "10.100.0.1"; publicKey = "bc5giljukT1+ChbbyTLdOfejfR3c8RZ4XoXmQM54nTY="; }; extraModules = with inputs; [ disko.nixosModules.disko - impermanence.nixosModules.impermanence - lix-module.nixosModules.default + arion.nixosModules.arion + # lix-module.nixosModules.default + # inputs.hercules-ci-agent.nixosModules.agent-service; + # rock5b.nixosModules.default ]; secrets = { - "sisko-wireguard-private-key" = { }; - "home-planimetry".owner = "hass"; - "home-assistant-token".owner = "prometheus"; - "grafana-password".owner = "grafana"; - "cloudflare-dyndns-api-token" = { }; - "cloudflare-api-tokens" = { }; - "restic-hetzner-password" = { }; - "hass-ssh-key".owner = "hass"; - "sisko-attic-environment-file".owner = "atticd"; - "autistici-password" = { - # FIXME terrible, should create a third ad-hoc group - owner = "grafana"; - group = "forgejo"; - }; - "matrix-registration-shared-secret".owner = "matrix-synapse"; - "arbi-config".owner = "arbi"; - "nix-netrc" = { }; - }; - }; - - pike = { - vpn = { - ip = "10.100.0.8"; - publicKey = "16ctjunXCXDPLSUhocstJ9z9l45/YuJFxlLkpoxChjI="; - }; - extraModules = [ - inputs.lix-module.nixosModules.default - inputs.catppuccin.nixosModules.catppuccin - ]; - extraHmModules = [ - "${inputs.homeManagerGitWorkspace}/modules/services/git-workspace.nix" - inputs.vscode-server.nixosModules.home - inputs.catppuccin.homeModules.catppuccin - ]; - secrets = { - "pike-wireguard-private-key" = { }; - "openrouter-api-key".owner = "ccr"; + "sisko-wireguard-private-key" = {}; + "hercules-ci-join-token".owner = "hercules-ci-agent"; + "hercules-ci-binary-caches".owner = "hercules-ci-agent"; + "hercules-ci-secrets-json".owner = "hercules-ci-agent"; "cachix-personal-token".owner = "ccr"; - "git-workspace-tokens".owner = "ccr"; - "autistici-password".owner = "ccr"; - "nix-netrc" = { }; + "home-planimetry".owner = "hass"; + "cloudflare-dyndns-api-token" = {}; + "restic-hetzner-password" = {}; + "minio-credentials".owner = "minio"; + "aws-credentials".owner = "hercules-ci-agent"; + "hass-ssh-key".owner = "hass"; + "matrix-registration-shared-secret".owner = "matrix-synapse"; + "matrix-sliding-sync-secret".owner = "matrix-synapse"; + "autistici-password".owner = "forgejo"; }; }; - - tpol = { - extraModules = with inputs; [ - lix-module.nixosModules.default - ]; - secrets = { - "tpol-wireguard-private-key" = { }; - }; - vpn = { - ip = "10.100.0.7"; - publicKey = "b/Pi7koTFo5CMAAzcL2ulvQ/0dUjKzbmXpvh4Lb/Bgo="; - }; - extraHmModulesUser = "mara"; - }; }; vpnExtra = { - oneplus8t = { + oneplus6t = { ip = "10.100.0.4"; - publicKey = "9ccx4C4xvPC6lPgTZAHDSfK4FS2BP2i4D57u9IZjw18="; - }; - macos-ventura = { - ip = "10.100.0.6"; - publicKey = "/Eee1V0PsjZSzj7un1NxHKtFR+TpUIgJ7VAdIAzmvzQ="; + publicKey = "cXHPaJXeA/JB7DKlZXR86zYcz1OEVPMOvAmDhBQF91E="; }; }; }; diff --git a/hosts/deltaflyer/default.nix b/hosts/deltaflyer/default.nix index 7e68982..afef6f0 100644 --- a/hosts/deltaflyer/default.nix +++ b/hosts/deltaflyer/default.nix @@ -1,10 +1,11 @@ { fleetModules, + config, lib, pkgs, + fleetFlake, ... -}: -{ +}: { imports = fleetModules [ "common" @@ -30,13 +31,6 @@ # INSECURE STUFF FIRST # Users and hardcoded passwords. { - nixpkgs.overlays = [ - (prev: final: { - gcc7 = final.gcc; - gcc8 = final.gcc; - }) - ]; - users.users.root.password = "nixos"; # users.users.ccr.password = "1234"; @@ -49,10 +43,7 @@ # Networking, modem and misc. { # Ensures any rndis config from stage-1 is not clobbered by NetworkManager - networking.networkmanager.unmanaged = [ - "rndis0" - "usb0" - ]; + networking.networkmanager.unmanaged = ["rndis0" "usb0"]; # Setup USB gadget networking in initrd... mobile.boot.stage-1.networking.enable = lib.mkDefault true; @@ -73,13 +64,11 @@ "git" "shell" "helix" - # "hyprland" - "niri" + "hyprland" "emacs" "firefox" "mpv" "xdg" - "catppuccin" ]; extraGroups = [ "dialout" @@ -88,14 +77,13 @@ "video" "wheel" ]; - backupPaths = [ ]; + backupPaths = []; }; } { system.stateVersion = "24.11"; - nixpkgs.config.allowUnfreePredicate = - pkg: + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "oneplus-sdm845-firmware-zstd" "oneplus-sdm845-firmware-xz" @@ -108,35 +96,33 @@ ccr.extraModules = [ { programs.fish.loginShellInit = '' - pgrep niri >/dev/null || exec niri-session + pgrep Hypr >/dev/null || exec dbus-run-session Hyprland ''; - # wayland.windowManager.hyprland.extraConfig = lib.mkAfter '' - # monitor = DSI-1, 1080x2340, 0x0, 2, transform, 1 - # input { - # touchdevice { - # transform = 1 - # } - # } - # bind = $mod, r, exec, rotate-screen hor - # bind = $mod SHIFT, r, exec, rotate-screen ver - # ''; - home.packages = - let - rotateScript = pkgs.writeShellApplication { - name = "rotate-screen"; - runtimeInputs = [ pkgs.hyprland ]; - text = '' - if [[ "$1" == "hor" ]]; then - hyprctl keyword monitor DSI-1,1080x2340,0x0,2,transform,1 - hyprctl keyword input:touchdevice:transform 1 - elif [[ "$1" == "ver" ]]; then - hyprctl keyword monitor DSI-1,1080x2340,0x0,2,transform,0 - hyprctl keyword input:touchdevice:transform 0 - fi - ''; - }; - in - [ rotateScript ]; + wayland.windowManager.hyprland.extraConfig = lib.mkAfter '' + monitor = DSI-1, 1080x2340, 0x0, 2, transform, 1 + input { + touchdevice { + transform = 1 + } + } + bind = $mod, r, exec, rotate-screen hor + bind = $mod SHIFT, r, exec, rotate-screen ver + ''; + home.packages = let + rotateScript = pkgs.writeShellApplication { + name = "rotate-screen"; + runtimeInputs = [pkgs.hyprland]; + text = '' + if [[ "$1" == "hor" ]]; then + hyprctl keyword monitor DSI-1,1080x2340,0x0,2,transform,1 + hyprctl keyword input:touchdevice:transform 1 + elif [[ "$1" == "ver" ]]; then + hyprctl keyword monitor DSI-1,1080x2340,0x0,2,transform,0 + hyprctl keyword input:touchdevice:transform 0 + fi + ''; + }; + in [rotateScript]; services.swayidle.enable = lib.mkForce false; } ]; @@ -154,13 +140,7 @@ zramSwap.enable = lib.mkDefault true; - boot.binfmt.emulatedSystems = lib.mkForce [ - "x86_64-linux" - "i686-linux" - "i386-linux" - "i486-linux" - "i586-linux" - ]; + boot.binfmt.emulatedSystems = lib.mkForce ["x86_64-linux" "i686-linux" "i386-linux" "i486-linux" "i586-linux"]; } ]; } diff --git a/hosts/deltaflyer/plasma-mobile.nix b/hosts/deltaflyer/plasma-mobile.nix index 11eb446..7206c5e 100644 --- a/hosts/deltaflyer/plasma-mobile.nix +++ b/hosts/deltaflyer/plasma-mobile.nix @@ -2,11 +2,11 @@ # Minimum config used to enable Plasma Mobile. # { + config, lib, pkgs, ... -}: -{ +}: { mobile.beautification = { silentBoot = lib.mkDefault false; splash = lib.mkDefault false; @@ -17,38 +17,35 @@ # # desktopManager.plasma5.mobile.enable = true; - displayManager.autoLogin = { - enable = true; - user = "ccr"; - }; + # displayManager.autoLogin = { + # enable = true; + # }; - displayManager.session = [ - { - manage = "desktop"; - name = "niri"; - start = '' - ${pkgs.niri}/bin/niri-session & - waitPID=$! - ''; - } - ]; + # displayManager.session = [{ + # manage = "desktop"; + # name = "hyprland"; + # start = '' + # ${pkgs.hyprland}/bin/Hyprland & + # waitPID=$! + # ''; + # }]; - displayManager.defaultSession = "niri"; + # displayManager.defaultSession = "hyprland"; - displayManager.lightdm = { - enable = true; - # Workaround for autologin only working at first launch. - # A logout or session crashing will show the login screen otherwise. - extraSeatDefaults = '' - session-cleanup-script=${pkgs.procps}/bin/pkill -P1 -fx ${pkgs.lightdm}/sbin/lightdm - ''; - }; + # displayManager.lightdm = { + # enable = true; + # # Workaround for autologin only working at first launch. + # # A logout or session crashing will show the login screen otherwise. + # extraSeatDefaults = '' + # session-cleanup-script=${pkgs.procps}/bin/pkill -P1 -fx ${pkgs.lightdm}/sbin/lightdm + # ''; + # }; libinput.enable = true; }; hardware.bluetooth.enable = true; - hardware.pulseaudio.enable = lib.mkDefault false; # mkDefault to help out users wanting pipewire + hardware.pulseaudio.enable = lib.mkDefault true; # mkDefault to help out users wanting pipewire networking.networkmanager.enable = true; networking.wireless.enable = false; powerManagement.enable = true; diff --git a/hosts/devbox/default.nix b/hosts/devbox/default.nix index 599bc62..a3b3793 100644 --- a/hosts/devbox/default.nix +++ b/hosts/devbox/default.nix @@ -4,8 +4,7 @@ lib, pkgs, ... -}: -{ +}: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") @@ -43,29 +42,17 @@ }; fonts = { - fonts = with pkgs; [ - powerline-fonts - dejavu_fonts - fira-code - fira-code-symbols - emacs-all-the-icons-fonts - nerdfonts - joypixels - etBook - ]; + fonts = with pkgs; [powerline-fonts dejavu_fonts fira-code fira-code-symbols emacs-all-the-icons-fonts nerdfonts joypixels etBook]; fontconfig.defaultFonts = { - monospace = [ "DejaVu Sans Mono for Powerline" ]; - sansSerif = [ "DejaVu Sans" ]; - serif = [ "DejaVu Serif" ]; + monospace = ["DejaVu Sans Mono for Powerline"]; + sansSerif = ["DejaVu Sans"]; + serif = ["DejaVu Serif"]; }; }; nixpkgs.config.joypixels.acceptLicense = true; - environment.systemPackages = with pkgs; [ - waypipe - firefox - ]; + environment.systemPackages = with pkgs; [waypipe firefox]; programs.mosh.enable = true; @@ -74,7 +61,7 @@ }; boot.loader.grub = { - devices = [ "/dev/sda" ]; + devices = ["/dev/sda"]; efiSupport = true; efiInstallAsRemovable = true; }; diff --git a/hosts/devbox/disko.nix b/hosts/devbox/disko.nix index 0a891ca..bdf06b4 100644 --- a/hosts/devbox/disko.nix +++ b/hosts/devbox/disko.nix @@ -1,10 +1,9 @@ # Example to create a bios compatible gpt partition { lib, - disks ? [ "/dev/sda" ], + disks ? ["/dev/sda"], ... -}: -{ +}: { disk = lib.genAttrs disks (dev: { device = dev; type = "disk"; @@ -18,7 +17,7 @@ start = "0"; end = "1M"; part-type = "primary"; - flags = [ "bios_grub" ]; + flags = ["bios_grub"]; } { type = "partition"; diff --git a/hosts/hs/default.nix b/hosts/hs/default.nix index 407d8f6..d1bbafb 100644 --- a/hosts/hs/default.nix +++ b/hosts/hs/default.nix @@ -4,8 +4,7 @@ lib, config, ... -}: -{ +}: { imports = [ ./hardware-configuration.nix @@ -22,7 +21,7 @@ "shell" "git" ]; - packages = [ ]; + packages = []; extraGroups = [ "wheel" "fuse" @@ -32,7 +31,7 @@ systemd.services.standby-sdb = { description = "Set spindown time (sleep) for /dev/sdb "; - wantedBy = [ "multi-user.target" ]; + wantedBy = ["multi-user.target"]; serviceConfig = { Type = "oneshot"; ExecStart = "${pkgs.hdparm}/bin/hdparm -B 127 -S 241 /dev/sdb"; @@ -41,7 +40,7 @@ systemd.services.standby-sdc = { description = "Set spindown time (sleep) for /dev/sdc "; - wantedBy = [ "multi-user.target" ]; + wantedBy = ["multi-user.target"]; serviceConfig = { Type = "oneshot"; ExecStart = "${pkgs.hdparm}/bin/hdparm -B 127 -S 241 /dev/sdc"; @@ -55,7 +54,7 @@ isSystemUser = true; group = "amule"; }; - users.groups."amule" = { }; + users.groups."amule" = {}; services = { samba-wsdd = { @@ -262,35 +261,33 @@ }; }; - systemd.services.ydns = - let - ydnsUpdater = pkgs.writeScriptBin "ydnsUpdater" '' - USER="andrea.ciceri@autistici.org" - PASSWORD=$(cat /home/ccr/.ydns-password) - DOMAIN="ccr.ydns.eu" - for SUBDOMAIN in "books" "music" "sync" "torrent" "gate" - do - HOST="$SUBDOMAIN.$DOMAIN" - ${pkgs.curl}/bin/curl --basic -u "$USER:$PASSWORD" --silent https://ydns.io/api/v1/update/?host=$HOST - done - ${pkgs.curl}/bin/curl --basic -u "$USER:$PASSWORD" --silent https://ydns.io/api/v1/update/?host=$DOMAIN - ''; - in - { - description = "YDNS IP updater"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - serviceConfig = { - User = "root"; - Type = "oneshot"; - ExecStart = "${pkgs.bash}/bin/bash ${ydnsUpdater}/bin/ydnsUpdater"; - }; + systemd.services.ydns = let + ydnsUpdater = pkgs.writeScriptBin "ydnsUpdater" '' + USER="andrea.ciceri@autistici.org" + PASSWORD=$(cat /home/ccr/.ydns-password) + DOMAIN="ccr.ydns.eu" + for SUBDOMAIN in "books" "music" "sync" "torrent" "gate" + do + HOST="$SUBDOMAIN.$DOMAIN" + ${pkgs.curl}/bin/curl --basic -u "$USER:$PASSWORD" --silent https://ydns.io/api/v1/update/?host=$HOST + done + ${pkgs.curl}/bin/curl --basic -u "$USER:$PASSWORD" --silent https://ydns.io/api/v1/update/?host=$DOMAIN + ''; + in { + description = "YDNS IP updater"; + wantedBy = ["multi-user.target"]; + after = ["network.target"]; + serviceConfig = { + User = "root"; + Type = "oneshot"; + ExecStart = "${pkgs.bash}/bin/bash ${ydnsUpdater}/bin/ydnsUpdater"; }; + }; systemd.services.wstunnel = { description = "WSTunnel"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; + wantedBy = ["multi-user.target"]; + after = ["network.target"]; serviceConfig = { User = "root"; Type = "oneshot"; @@ -300,8 +297,8 @@ # TODO It seems to not work systemd.timers.ydnsUpdater = { - wantedBy = [ "timers.target" ]; - partOf = [ "ydnsUpdater.service" ]; + wantedBy = ["timers.target"]; + partOf = ["ydnsUpdater.service"]; timerConfig = { OnCalendar = "*-*-* *:00:00"; # hourly Unit = "ydnsUpdater.service"; @@ -333,13 +330,13 @@ networking.nat.enable = true; networking.nat.externalInterface = "enp0s10"; - networking.nat.internalInterfaces = [ "wg0" ]; + networking.nat.internalInterfaces = ["wg0"]; networking.wireguard.interfaces = { # "wg0" is the network interface name. You can name the interface arbitrarily. wg0 = { # Determines the IP address and subnet of the server's end of the tunnel interface. - ips = [ "10.100.0.1/24" ]; + ips = ["10.100.0.1/24"]; # The port that WireGuard listens to. Must be accessible by the client. listenPort = 51820; @@ -369,7 +366,7 @@ # Public key of the peer (not a file path). publicKey = "fCwjd75CefC9A7WqO7s3xfOk2nRcoTKfnAzDT6Lc5AA="; # List of IPs assigned to this peer within the tunnel subnet. Used to configure routing. - allowedIPs = [ "10.100.0.2/32" ]; + allowedIPs = ["10.100.0.2/32"]; } ]; }; diff --git a/hosts/hs/hardware-configuration.nix b/hosts/hs/hardware-configuration.nix index 308318a..e573bf0 100644 --- a/hosts/hs/hardware-configuration.nix +++ b/hosts/hs/hardware-configuration.nix @@ -1,14 +1,6 @@ -{ lib, ... }: -{ +{lib, ...}: { boot = { - initrd.availableKernelModules = [ - "ohci_pci" - "ehci_pci" - "ahci" - "usb_storage" - "usbhid" - "sd_mod" - ]; + initrd.availableKernelModules = ["ohci_pci" "ehci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; loader.grub = lib.mkForce { enable = true; version = 2; @@ -31,5 +23,5 @@ }; }; - swapDevices = [ { device = "/dev/disk/by-label/swap"; } ]; + swapDevices = [{device = "/dev/disk/by-label/swap";}]; } diff --git a/hosts/janeway/default.nix b/hosts/janeway/default.nix index 59733f6..54c0975 100644 --- a/hosts/janeway/default.nix +++ b/hosts/janeway/default.nix @@ -1,20 +1,19 @@ { config, + lib, pkgs, - fleetFlake, ... -}: -let +}: let sshdTmpDirectory = "${config.user.home}/sshd-tmp"; sshdDirectory = "${config.user.home}/sshd"; + pathToPubKey = "/mnt/sdcard/Download/picard_host_key.pub"; port = 8022; -in -{ +in { # Backup etc files instead of failing to activate generation if a file already exists in /etc environment.etcBackupExtension = ".bak"; # Read the changelog before changing this value - system.stateVersion = "24.05"; + system.stateVersion = "23.11"; # Set up nix for flakes nix.extraOptions = '' @@ -24,59 +23,36 @@ in # Set your time zone time.timeZone = "Europe/Rome"; - home-manager.config = - { ... }: - { - home.stateVersion = "24.05"; - _module.args = { - hostname = "janeway"; - age.secrets = { }; - }; - imports = [ ../../hmModules/shell ]; - }; + build.activation.sshd = '' + $DRY_RUN_CMD mkdir $VERBOSE_ARG --parents "${config.user.home}/.ssh" + $DRY_RUN_CMD cat ${pathToPubKey} > "${config.user.home}/.ssh/authorized_keys" - build.activation.sshd = - let - keys = (builtins.import ../../lib).keys; - inherit (keys) hosts users; - in - '' - $DRY_RUN_CMD mkdir $VERBOSE_ARG --parents "${config.user.home}/.ssh" - $DRY_RUN_CMD echo ${hosts.picard} > "${config.user.home}/.ssh/authorized_keys" - $DRY_RUN_CMD echo ${hosts.sisko} >> "${config.user.home}/.ssh/authorized_keys" - $DRY_RUN_CMD echo ${hosts.kirk} >> "${config.user.home}/.ssh/authorized_keys" - $DRY_RUN_CMD echo ${users.ccr-ssh} >> "${config.user.home}/.ssh/authorized_keys" + if [[ ! -d "${sshdDirectory}" ]]; then + $DRY_RUN_CMD rm $VERBOSE_ARG --recursive --force "${sshdTmpDirectory}" + $DRY_RUN_CMD mkdir $VERBOSE_ARG --parents "${sshdTmpDirectory}" - if [[ ! -d "${sshdDirectory}" ]]; then - $DRY_RUN_CMD rm $VERBOSE_ARG --recursive --force "${sshdTmpDirectory}" - $DRY_RUN_CMD mkdir $VERBOSE_ARG --parents "${sshdTmpDirectory}" + $VERBOSE_ECHO "Generating host keys..." + $DRY_RUN_CMD ${pkgs.openssh}/bin/ssh-keygen -t rsa -b 4096 -f "${sshdTmpDirectory}/ssh_host_rsa_key" -N "" - $VERBOSE_ECHO "Generating host keys..." - $DRY_RUN_CMD ${pkgs.openssh}/bin/ssh-keygen -t rsa -b 4096 -f "${sshdTmpDirectory}/ssh_host_rsa_key" -N "" + $VERBOSE_ECHO "Writing sshd_config..." + $DRY_RUN_CMD echo -e "HostKey ${sshdDirectory}/ssh_host_rsa_key\nPort ${toString port}\n" > "${sshdTmpDirectory}/sshd_config" - $VERBOSE_ECHO "Writing sshd_config..." - $DRY_RUN_CMD echo -e "HostKey ${sshdDirectory}/ssh_host_rsa_key\nPort ${toString port}\n" > "${sshdTmpDirectory}/sshd_config" + $DRY_RUN_CMD mv $VERBOSE_ARG "${sshdTmpDirectory}" "${sshdDirectory}" + fi + ''; - $DRY_RUN_CMD mv $VERBOSE_ARG "${sshdTmpDirectory}" "${sshdDirectory}" - fi - ''; + environment.packages = [ + pkgs.vim + pkgs.bottom + pkgs.helix + pkgs.stress + pkgs.openssh + pkgs.git + (pkgs.writeScriptBin "sshd-start" '' + #!${pkgs.runtimeShell} - environment.packages = - let - inherit (fleetFlake.inputs.ccrEmacs.packages.aarch64-linux) ccrEmacs; - in - [ - pkgs.bottom - pkgs.helix - pkgs.stress - pkgs.openssh - pkgs.git - pkgs.btop - ccrEmacs - (pkgs.writeScriptBin "sshd-start" '' - #!${pkgs.runtimeShell} - echo "Starting sshd in non-daemonized way on port ${toString port}" - ${pkgs.openssh}/bin/sshd -f "${sshdDirectory}/sshd_config" -D - '') - ]; + echo "Starting sshd in non-daemonized way on port ${toString port}" + ${pkgs.openssh}/bin/sshd -f "${sshdDirectory}/sshd_config" -D + '') + ]; } diff --git a/hosts/kirk/default.nix b/hosts/kirk/default.nix index c9fa85b..dc8c107 100644 --- a/hosts/kirk/default.nix +++ b/hosts/kirk/default.nix @@ -2,9 +2,9 @@ fleetModules, lib, pkgs, + config, ... -}: -{ +}: { imports = fleetModules [ "common" @@ -27,34 +27,36 @@ "printing" "pam" "wireguard-client" + "restic" "greetd" - "mount-sisko" + "syncthing" + "mount-rock5b" "adb" - "binfmt" - "prometheus-exporters" - "alloy" - "zerotier" + "calibre" ] - ++ [ ./disko.nix ]; + ++ [ + ./disko.nix + ]; ccr = { enable = true; - autologin = false; + autologin = true; modules = [ "git" "git-workspace" "helix" "shell" - "zellij" + "element" + "emacs" "firefox" "gpg" "mpv" "password-store" "slack" "hyprland" - "niri" "udiskie" "xdg" + "spotify" "lutris" "wine" "cura" @@ -63,34 +65,24 @@ "digikam" "discord" "remmina" - "calibre" - "zathura" - "imv" - "catppuccin" - "libreoffice" - "emacs" - "chirp" - "sdrangel" - "zmkbatx" - "moonlight" - "gimp" - "unison" - "jellyfin" + "zulip" ]; - extraGroups = [ "plugdev" ]; - backupPaths = [ ]; + extraGroups = []; + backupPaths = []; }; - boot.initrd.kernelModules = [ "i915" ]; + boot.initrd.kernelModules = ["i915"]; boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usb_storage" "sd_mod" ]; - boot.kernelModules = [ "kvm-intel" ]; + boot.kernelModules = [ + "kvm-intel" + ]; - boot.kernelPackages = pkgs.linuxPackages; + boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; boot.loader.efi.canTouchEfiVariables = true; boot.loader.systemd-boot = { @@ -103,15 +95,10 @@ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; powerManagement.cpuFreqGovernor = lib.mkDefault "schedutil"; hardware.enableRedistributableFirmware = lib.mkDefault true; - hardware.rtl-sdr.enable = true; - hardware.graphics = { + hardware.opengl = { enable = true; - enable32Bit = true; - }; - - zramSwap = { - enable = true; - algorithm = "zstd"; + driSupport = true; + driSupport32Bit = true; }; } diff --git a/hosts/module.nix b/hosts/module.nix index da0aa63..9f3f4b0 100644 --- a/hosts/module.nix +++ b/hosts/module.nix @@ -8,208 +8,107 @@ config, inputs, ... -}: -let +} @ flakePartsArgs: let cfg = config.fleet; -in -{ +in { options.fleet = { darwinHosts = lib.mkOption { - type = lib.types.attrsOf ( - lib.types.submodule ( - { name, ... }: - { - options = { - name = lib.mkOption { - description = "Host name"; - type = lib.types.strMatching "^$|^[[:alnum:]]([[:alnum:]_-]{0,61}[[:alnum:]])?$"; - default = name; - }; - system = lib.mkOption { - description = "NixOS architecture (a.k.a. system)"; - type = lib.types.str; - default = "x86_64-darwin"; - }; - nixpkgs = lib.mkOption { - description = "Used nixpkgs"; - type = lib.types.anything; - default = inputs.nixpkgs; - }; - extraModules = lib.mkOption { - description = "Extra NixOS modules"; - type = lib.types.listOf lib.types.deferredModule; - default = [ ]; - }; - overlays = lib.mkOption { - description = "Enabled Nixpkgs overlays"; - type = lib.types.listOf ( - lib.mkOptionType { - name = "nixpkgs-overlay"; - description = "nixpkgs overlay"; - check = lib.isFunction; - merge = lib.mergeOneOption; - } - ); - default = [ ]; - }; - }; - } - ) - ); + type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { + options = { + name = lib.mkOption { + description = "Host name"; + type = lib.types.strMatching "^$|^[[:alnum:]]([[:alnum:]_-]{0,61}[[:alnum:]])?$"; + default = name; + }; + system = lib.mkOption { + description = "NixOS architecture (a.k.a. system)"; + type = lib.types.str; + default = "x86_64-darwin"; + }; + nixpkgs = lib.mkOption { + description = "Used nixpkgs"; + type = lib.types.anything; + default = inputs.nixpkgsUnstable; + }; + extraModules = lib.mkOption { + description = "Extra NixOS modules"; + type = lib.types.listOf lib.types.deferredModule; + default = []; + }; + overlays = lib.mkOption { + description = "Enabled Nixpkgs overlays"; + type = lib.types.listOf (lib.mkOptionType { + name = "nixpkgs-overlay"; + description = "nixpkgs overlay"; + check = lib.isFunction; + merge = lib.mergeOneOption; + }); + default = []; + }; + }; + })); }; nixOnDroidHosts = lib.mkOption { - type = lib.types.attrsOf ( - lib.types.submodule ( - { name, ... }: - { - options = { - name = lib.mkOption { - description = "Host name"; - type = lib.types.strMatching "^$|^[[:alnum:]]([[:alnum:]_-]{0,61}[[:alnum:]])?$"; - default = name; - }; - system = lib.mkOption { - description = "NixOS architecture (a.k.a. system)"; - type = lib.types.str; - default = "aarch64-linux"; - }; - nixpkgs = lib.mkOption { - description = "Used nixpkgs"; - type = lib.types.anything; - default = inputs.nixpkgs; - }; - extraModules = lib.mkOption { - description = "Extra NixOS modules"; - type = lib.types.listOf lib.types.deferredModule; - default = [ ]; - }; - overlays = lib.mkOption { - description = "Enabled Nixpkgs overlays"; - type = lib.types.listOf ( - lib.mkOptionType { - name = "nixpkgs-overlay"; - description = "nixpkgs overlay"; - check = lib.isFunction; - merge = lib.mergeOneOption; - } - ); - default = [ ]; - }; - }; - } - ) - ); + type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { + options = { + name = lib.mkOption { + description = "Host name"; + type = lib.types.strMatching "^$|^[[:alnum:]]([[:alnum:]_-]{0,61}[[:alnum:]])?$"; + default = name; + }; + system = lib.mkOption { + description = "NixOS architecture (a.k.a. system)"; + type = lib.types.str; + default = "aarch64-linux"; + }; + nixpkgs = lib.mkOption { + description = "Used nixpkgs"; + type = lib.types.anything; + default = inputs.nixpkgsUnstable; + }; + extraModules = lib.mkOption { + description = "Extra NixOS modules"; + type = lib.types.listOf lib.types.deferredModule; + default = []; + }; + overlays = lib.mkOption { + description = "Enabled Nixpkgs overlays"; + type = lib.types.listOf (lib.mkOptionType { + name = "nixpkgs-overlay"; + description = "nixpkgs overlay"; + check = lib.isFunction; + merge = lib.mergeOneOption; + }); + default = []; + }; + }; + })); }; hosts = lib.mkOption { description = "Host configuration"; - type = lib.types.attrsOf ( - lib.types.submodule ( - { name, ... }: - { - options = { - name = lib.mkOption { - description = "Host name"; - type = lib.types.strMatching "^$|^[[:alnum:]]([[:alnum:]_-]{0,61}[[:alnum:]])?$"; - default = name; - }; - system = lib.mkOption { - description = "NixOS architecture (a.k.a. system)"; - type = lib.types.str; - default = "x86_64-linux"; - }; - nixpkgs = lib.mkOption { - description = "Used nixpkgs"; - type = lib.types.anything; - default = inputs.nixpkgs; - }; - homeManager = lib.mkOption { - description = "Used home-manager"; - type = lib.types.anything; - default = inputs.homeManager; - }; - vpn = { - ip = lib.mkOption { - description = "Wireguard VPN ip"; - type = lib.types.str; - }; - publicKey = lib.mkOption { - description = "Wireguard public key"; - type = lib.types.str; - }; - }; - secrets = lib.mkOption { - description = "List of secrets names in the `secrets` folder"; - type = lib.types.attrsOf ( - lib.types.submodule ( - { name, ... }: - { - options = { - owner = lib.mkOption { - type = lib.types.str; - default = "root"; - }; - group = lib.mkOption { - type = lib.types.str; - default = "root"; - }; - file = lib.mkOption { - type = lib.types.path; - default = "${self.outPath}/secrets/${name}.age"; - }; - mode = lib.mkOption { - # TODO improve type - type = lib.types.str; - default = "0440"; - }; - }; - } - ) - ); - default = { }; - }; - enableHomeManager = lib.mkOption { - description = "Enable home-manager module"; - type = lib.types.bool; - default = true; - }; - overlays = lib.mkOption { - description = "Enabled Nixpkgs overlays"; - type = lib.types.listOf ( - lib.mkOptionType { - name = "nixpkgs-overlay"; - description = "nixpkgs overlay"; - check = lib.isFunction; - merge = lib.mergeOneOption; - } - ); - default = [ ]; - }; - extraModules = lib.mkOption { - description = "Extra NixOS modules"; - type = lib.types.listOf lib.types.deferredModule; - default = [ ]; - }; - extraHmModules = lib.mkOption { - description = "Extra home-manager modules"; - type = lib.types.listOf lib.types.deferredModule; - default = [ ]; - }; - extraHmModulesUser = lib.mkOption { - description = "User for which to import extraHmModulesUser"; - type = lib.types.str; - default = "ccr"; - }; - }; - config.overlays = with inputs; cfg.overlays; - } - ) - ); - default = { }; - }; - vpnExtra = lib.mkOption { - type = lib.types.attrsOf ( - lib.types.submodule { - options = { + type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { + options = { + name = lib.mkOption { + description = "Host name"; + type = lib.types.strMatching "^$|^[[:alnum:]]([[:alnum:]_-]{0,61}[[:alnum:]])?$"; + default = name; + }; + system = lib.mkOption { + description = "NixOS architecture (a.k.a. system)"; + type = lib.types.str; + default = "x86_64-linux"; + }; + nixpkgs = lib.mkOption { + description = "Used nixpkgs"; + type = lib.types.anything; + default = inputs.nixpkgsUnstable; + }; + homeManager = lib.mkOption { + description = "Used home-manager"; + type = lib.types.anything; + default = inputs.homeManager; + }; + vpn = { ip = lib.mkOption { description = "Wireguard VPN ip"; type = lib.types.str; @@ -219,85 +118,149 @@ in type = lib.types.str; }; }; - } - ); - default = { }; + secrets = lib.mkOption { + description = "List of secrets names in the `secrets` folder"; + type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { + options = { + owner = lib.mkOption { + type = lib.types.str; + default = "root"; + }; + group = lib.mkOption { + type = lib.types.str; + default = "root"; + }; + file = lib.mkOption { + type = lib.types.path; + default = "${self.outPath}/secrets/${name}.age"; + }; + mode = lib.mkOption { + # TODO improve type + type = lib.types.str; + default = "0440"; + }; + }; + })); + default = {}; + }; + enableHomeManager = lib.mkOption { + description = "Enable home-manager module"; + type = lib.types.bool; + default = true; + }; + overlays = lib.mkOption { + description = "Enabled Nixpkgs overlays"; + type = lib.types.listOf (lib.mkOptionType { + name = "nixpkgs-overlay"; + description = "nixpkgs overlay"; + check = lib.isFunction; + merge = lib.mergeOneOption; + }); + default = []; + }; + extraModules = lib.mkOption { + description = "Extra NixOS modules"; + type = lib.types.listOf lib.types.deferredModule; + default = []; + }; + extraHmModules = lib.mkOption { + description = "Extra home-manager modules"; + type = lib.types.listOf lib.types.deferredModule; + default = []; + }; + extraHmModulesUser = lib.mkOption { + description = "User for which to import extraHmModulesUser"; + type = lib.types.str; + default = "ccr"; + }; + }; + config.overlays = with inputs; + [ + nur.overlay + ] + ++ cfg.overlays; + })); + default = {}; + }; + vpnExtra = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + ip = lib.mkOption { + description = "Wireguard VPN ip"; + type = lib.types.str; + }; + publicKey = lib.mkOption { + description = "Wireguard public key"; + type = lib.types.str; + }; + }; + }); + default = {}; }; _mkNixosConfiguration = lib.mkOption { description = "Function returning a proper NixOS configuration"; type = lib.types.functionTo (lib.types.functionTo lib.types.attrs); # TODO improve this type internal = true; - default = - hostname: config: + default = hostname: config: config.nixpkgs.lib.nixosSystem { inherit (config) system; modules = [ - ( - { lib, ... }: - { - networking.hostName = lib.mkForce hostname; - nixpkgs.overlays = config.overlays; - } - ) + ({lib, ...}: { + networking.hostName = lib.mkForce hostname; + nixpkgs.overlays = config.overlays; + }) "${self.outPath}/hosts/${hostname}" ] - ++ (lib.optionals (config.secrets != [ ]) [ + ++ (lib.optionals (config.secrets != []) [ inputs.agenix.nixosModules.default - ( - { lib, ... }: - let - allSecrets = lib.mapAttrs' (name: value: { - name = lib.removeSuffix ".age" name; - inherit value; - }) (import "${self.outPath}/secrets/secrets.nix"); - filteredSecrets = lib.filterAttrs (name: _: builtins.hasAttr name config.secrets) allSecrets; - in - { - age.secrets = lib.mapAttrs' (name: _: { + ({lib, ...}: let + allSecrets = lib.mapAttrs' (name: value: { + name = lib.removeSuffix ".age" name; + inherit value; + }) (import "${self.outPath}/secrets/secrets.nix"); + filteredSecrets = + lib.filterAttrs + (name: _: builtins.hasAttr name config.secrets) + allSecrets; + in { + age.secrets = + lib.mapAttrs' (name: _: { name = builtins.baseNameOf name; value = { - inherit (config.secrets.${name}) - owner - group - file - mode - ; + inherit (config.secrets.${name}) owner group file mode; }; - }) filteredSecrets; - } - ) + }) + filteredSecrets; + }) ]) - ++ (lib.optionals config.enableHomeManager ( - let - user = config.extraHmModulesUser; - extraHmModules = config.extraHmModules; - in - [ - config.homeManager.nixosModules.home-manager - ( - { - config, - ... - }: - { - home-manager.users."${user}" = { - imports = extraHmModules; - _module.args = { - age = config.age or { }; - fleetFlake = self; - }; - }; - } - ) - ] - )) + ++ (lib.optionals config.enableHomeManager (let + user = config.extraHmModulesUser; + extraHmModules = config.extraHmModules; + in [ + config.homeManager.nixosModule + ({ + config, + pkgs, + ... + }: { + home-manager.users."${user}" = { + imports = extraHmModules; + _module.args = { + age = config.age or {}; + fleetFlake = self; + pkgsStable = inputs.nixpkgsStable.legacyPackages.${pkgs.system}; + }; + }; + }) + ])) ++ config.extraModules; specialArgs = { fleetModules = builtins.map (moduleName: "${self.outPath}/modules/${moduleName}"); fleetHmModules = builtins.map (moduleName: "${self.outPath}/hmModules/${moduleName}"); fleetFlake = self; vpn = cfg.vpnExtra // (lib.mapAttrs (_: host: host.vpn) cfg.hosts); + inherit (flakePartsArgs.config.allSystems.${config.system}.allModuleArgs.config._module.args) inputs'; }; }; }; @@ -305,21 +268,18 @@ in description = "Function returning a proper Darwin configuration"; type = lib.types.functionTo (lib.types.functionTo lib.types.attrs); # TODO improve this type internal = true; - default = - hostname: config: + default = hostname: config: inputs.nixDarwin.lib.darwinSystem { modules = [ - ( - { - lib, - ... - }: - { - networking.hostName = lib.mkForce hostname; - nixpkgs.overlays = config.overlays; - nixpkgs.hostPlatform = config.system; - } - ) + ({ + lib, + pkgs, + ... + }: { + networking.hostName = lib.mkForce hostname; + nixpkgs.overlays = config.overlays; + nixpkgs.hostPlatform = config.system; + }) "${self.outPath}/hosts/${hostname}" ]; }; @@ -329,20 +289,16 @@ in description = "Function returning a proper nix-on-droid configuration"; type = lib.types.functionTo (lib.types.functionTo lib.types.attrs); # TODO improve this type internal = true; - default = - hostname: config: + default = hostname: config: inputs.nix-on-droid.lib.nixOnDroidConfiguration { - pkgs = inputs.nixpkgs.legacyPackages.aarch64-linux; modules = [ - ( - { - ... - }: - { - nixpkgs.overlays = config.overlays; - _module.args.fleetFlake = self; - } - ) + ({ + lib, + pkgs, + ... + }: { + nixpkgs.overlays = config.overlays; + }) "${self.outPath}/hosts/${hostname}" ]; }; @@ -350,10 +306,19 @@ in }; config = { - flake.nixosConfigurations = lib.mapAttrs config.fleet._mkNixosConfiguration config.fleet.hosts; + flake.nixosConfigurations = + lib.mapAttrs + config.fleet._mkNixosConfiguration + config.fleet.hosts; - flake.darwinConfigurations = lib.mapAttrs config.fleet._mkDarwinConfiguration config.fleet.darwinHosts; + flake.darwinConfigurations = + lib.mapAttrs + config.fleet._mkDarwinConfiguration + config.fleet.darwinHosts; - flake.nixOnDroidConfigurations = lib.mapAttrs config.fleet._mkNixOnDroidConfiguration config.fleet.nixOnDroidHosts; + flake.nixOnDroidConfigurations = + lib.mapAttrs + config.fleet._mkNixOnDroidConfiguration + config.fleet.nixOnDroidHosts; }; } diff --git a/hosts/mothership/default.nix b/hosts/mothership/default.nix index dc0f9ba..ea4a2bb 100644 --- a/hosts/mothership/default.nix +++ b/hosts/mothership/default.nix @@ -5,8 +5,7 @@ pkgs, config, ... -}: -{ +}: { imports = fleetModules [ "common" "wireguard-server" @@ -58,20 +57,11 @@ }; fonts = { - fonts = with pkgs; [ - powerline-fonts - dejavu_fonts - fira-code - fira-code-symbols - emacs-all-the-icons-fonts - nerdfonts - joypixels - etBook - ]; + fonts = with pkgs; [powerline-fonts dejavu_fonts fira-code fira-code-symbols emacs-all-the-icons-fonts nerdfonts joypixels etBook]; fontconfig.defaultFonts = { - monospace = [ "DejaVu Sans Mono for Powerline" ]; - sansSerif = [ "DejaVu Sans" ]; - serif = [ "DejaVu Serif" ]; + monospace = ["DejaVu Sans Mono for Powerline"]; + sansSerif = ["DejaVu Sans"]; + serif = ["DejaVu Serif"]; }; }; @@ -79,21 +69,23 @@ nixpkgs.config.joypixels.acceptLicense = true; - environment.systemPackages = with pkgs; [ waypipe ]; + environment.systemPackages = with pkgs; [waypipe]; + home-manager.users.ccr.gtk = { + enable = true; + iconTheme = { + name = "Adwaita"; + package = pkgs.gnome.adwaita-icon-theme; + }; + }; programs.dconf.enable = true; programs.mosh.enable = true; - boot.initrd.availableKernelModules = [ - "xhci_pci" - "ahci" - "nvme" - "usbhid" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; + boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-intel"]; + boot.extraModulePackages = []; boot.loader.efi.canTouchEfiVariables = true; boot.loader.systemd-boot = { diff --git a/hosts/mothership/disko.nix b/hosts/mothership/disko.nix index 2078a8f..0c71d4a 100644 --- a/hosts/mothership/disko.nix +++ b/hosts/mothership/disko.nix @@ -1,11 +1,8 @@ { - disks ? [ - "/dev/nvme0n1" - "/dev/nvme1n1" - ], + lib, + disks ? ["/dev/nvme0n1" "/dev/nvme1n1"], ... -}: -{ +}: { disk = { x = { type = "disk"; diff --git a/hosts/oneplus5t/default.nix b/hosts/oneplus5t/default.nix index 2d4a904..990d6c9 100644 --- a/hosts/oneplus5t/default.nix +++ b/hosts/oneplus5t/default.nix @@ -1,7 +1,9 @@ { + config, + lib, + pkgs, ... -}: -{ +}: { signing.enable = true; # apps.prebuilt = { diff --git a/hosts/pbp/default.nix b/hosts/pbp/default.nix index 337bc66..71b4595 100644 --- a/hosts/pbp/default.nix +++ b/hosts/pbp/default.nix @@ -3,8 +3,7 @@ pkgs, lib, ... -}: -{ +}: { imports = [ ./hardware-configuration.nix diff --git a/hosts/pbp/hardware-configuration.nix b/hosts/pbp/hardware-configuration.nix index ff8baac..e038154 100644 --- a/hosts/pbp/hardware-configuration.nix +++ b/hosts/pbp/hardware-configuration.nix @@ -3,12 +3,11 @@ lib, pkgs, ... -}: -{ - disko.devices = import ./disko.nix { }; +}: { + disko.devices = import ./disko.nix {}; boot = { - initrd.availableKernelModules = [ "usbhid" ]; + initrd.availableKernelModules = ["usbhid"]; extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; diff --git a/hosts/picard/default.nix b/hosts/picard/default.nix index bf4c0c7..13f75ca 100644 --- a/hosts/picard/default.nix +++ b/hosts/picard/default.nix @@ -4,8 +4,7 @@ config, pkgs, ... -}: -{ +}: { imports = fleetModules [ "common" @@ -26,24 +25,26 @@ "waydroid" "virt-manager" "ssh-initrd" + "hercules-ci" "printing" "pam" "wireguard-client" + "restic" "binfmt" "greetd" + "syncthing" "hass-poweroff" "forgejo-runners" "teamviewer" # "macos-ventura" - "sunshine" - "mount-sisko" + # "sunshine" + "mount-rock5b" "adb" - "prometheus-exporters" - "zerotier" - "alloy" - "wireguard-mlabs" + "guix" ] - ++ [ ./disko.nix ]; + ++ [ + ./disko.nix + ]; ccr = { enable = true; @@ -53,17 +54,15 @@ "git-workspace" "helix" "shell" - "zellij" "element" "zmkbatx" - "tremotesf" + "emacs" "firefox" "gpg" "mpv" "password-store" "slack" "hyprland" - "niri" "udiskie" "xdg" "spotify" @@ -77,36 +76,17 @@ "tor-browser" "kicad" "monero" - # "zulip" + "zulip" "teams" "obs-studio" "calibre" - "reinstall-magisk-on-lineage" - "vscode-server" - "zk" - "catppuccin" - "freecad" - "zathura" - "imv" - "libreoffice" - "emacs" - "vial" - "chirp" - "sdrangel" - "discord" - "ib-tws" - "zoom" - "pantalaimon" - "moonlight" - "gimp" - "unison" ]; - extraGroups = [ "plugdev" ]; - backupPaths = [ ]; + extraGroups = []; + backupPaths = []; }; - boot.kernelParams = [ "ip=dhcp" ]; - boot.initrd.kernelModules = [ "amdgpu" ]; + boot.kernelParams = ["ip=dhcp"]; + boot.initrd.kernelModules = ["amdgpu"]; boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" @@ -121,33 +101,23 @@ "i2c-dev" # needed? ]; - boot.extraModulePackages = [ - config.boot.kernelPackages.ddcci-driver - ]; + boot.extraModulePackages = [config.boot.kernelPackages.ddcci-driver]; systemd.services.ddcci = { + serviceConfig.Type = "oneshot"; script = '' echo 'ddcci 0x37' > /sys/bus/i2c/devices/i2c-2/new_device ''; - wantedBy = [ "graphical.target" ]; - restartIfChanged = false; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - }; }; boot.loader.efi.canTouchEfiVariables = true; boot.loader.systemd-boot = { - enable = lib.mkForce false; # needed by lanzaboote - }; - boot.lanzaboote = { enable = true; - pkiBundle = "/etc/secureboot"; configurationLimit = 20; }; - boot.kernelPackages = pkgs.linuxPackages; + # boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_8; + boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; networking.hostId = "5b02e763"; @@ -158,6 +128,7 @@ hardware.graphics = { enable = true; + # driSupport = true; enable32Bit = true; }; @@ -166,13 +137,9 @@ algorithm = "zstd"; }; - hardware.rtl-sdr.enable = true; - # TODO move away from here (how can the interface name be retrieved programmatically?) networking.interfaces.enp11s0.wakeOnLan = { enable = true; - policy = [ "magic" ]; + policy = ["magic"]; }; - - hardware.hackrf.enable = true; } diff --git a/hosts/pike/default.nix b/hosts/pike/default.nix deleted file mode 100644 index bd39cf3..0000000 --- a/hosts/pike/default.nix +++ /dev/null @@ -1,184 +0,0 @@ -{ - fleetModules, - lib, - config, - ... -}: -{ - imports = fleetModules [ - "common" - "ssh" - "ccr" - "nix" - "networkmanager" - "bluetooth" - "dbus" - "docker" - "fonts" - "qmk-udev" - "mosh" - "udisks2" - "xdg" - "pipewire" - "nix-development" - "waydroid" - "virt-manager" - "ssh-initrd" - "printing" - "pam" - "wireguard-client" - "binfmt" - "greetd" - "teamviewer" - "sunshine" - "mount-sisko" - "adb" - "prometheus-exporters" - "alloy" - "zerotier" - ]; - - ccr = { - enable = true; - autologin = false; - modules = [ - "git" - "git-workspace" - "helix" - "shell" - "zellij" - # "element" - "zmkbatx" - "tremotesf" - "firefox" - "gpg" - "mpv" - "password-store" - "slack" - "hyprland" - "niri" - "udiskie" - "xdg" - # "spotify" - "wine" - "cura" - "chrome" - "email" - "digikam" - "dolphin" - "tor-browser" - "kicad" - "monero" - "teams" - "obs-studio" - "calibre" - "reinstall-magisk-on-lineage" - "vscode-server" - "zk" - "catppuccin" - "freecad" - "zathura" - "imv" - "libreoffice" - "emacs" - "vial" - "chirp" - "sdrangel" - "discord" - "zoom" - "pantalaimon" - "gimp" - "jellyfin" - "unison" - ]; - extraGroups = [ "plugdev" ]; - backupPaths = [ ]; - }; - - boot.kernelParams = [ "ip=dhcp" ]; - boot.initrd.kernelModules = [ "amdgpu" ]; - boot.initrd.availableKernelModules = [ - "nvme" - "xhci_pci" - "usbhid" - "thunderbolt" - "vmd" - "usb_storage" - "sd_mod" - ]; - - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - fileSystems."/" = { - device = "zpool/root"; - fsType = "zfs"; - options = [ "zfsutil" ]; - }; - - fileSystems."/nix" = { - device = "zpool/nix"; - fsType = "zfs"; - options = [ "zfsutil" ]; - }; - - fileSystems."/var" = { - device = "zpool/var"; - fsType = "zfs"; - options = [ "zfsutil" ]; - }; - - fileSystems."/home" = { - device = "zpool/home"; - fsType = "zfs"; - options = [ "zfsutil" ]; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/4AA5-7242"; - fsType = "vfat"; - options = [ - "fmask=0022" - "dmask=0022" - ]; - }; - - fileSystems."/mnt/shared" = { - device = "/dev/nvme0n1p2"; - fsType = "ntfs"; - options = [ "nofail" ]; - }; - - services.zfs.autoScrub.enable = true; - - networking.hostId = "30fc8ed7"; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - powerManagement.cpuFreqGovernor = lib.mkDefault "schedutil"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - hardware.enableRedistributableFirmware = lib.mkDefault true; - - services.power-profiles-daemon.enable = true; - - hardware.graphics = { - enable = true; - enable32Bit = true; - }; - - zramSwap = { - enable = true; - algorithm = "zstd"; - }; - - hardware.nvidia-container-toolkit.enable = true; - services.xserver.videoDrivers = [ "nvidia" ]; - hardware.nvidia.open = true; - hardware.nvidia.prime = { - offload = { - enable = true; - enableOffloadCmd = true; - }; - intelBusId = "PCI:0:2:0"; - nvidiaBusId = "PCI:1:0:0"; - }; -} diff --git a/hosts/sisko/default.nix b/hosts/sisko/default.nix index e4a3c17..cdb4d00 100644 --- a/hosts/sisko/default.nix +++ b/hosts/sisko/default.nix @@ -1,120 +1,117 @@ { fleetModules, pkgs, + fleetFlake, + config, ... -}: -{ +}: { imports = fleetModules [ "common" "ssh" + "ccr" "wireguard-server" "mediatomb" "transmission" + "hercules-ci" "home-assistant" "adguard-home" "cloudflare-dyndns" - "sisko-proxy" - "sisko-share" - "forgejo" - "prometheus" - "grafana" - "prometheus-exporters" - "loki" - "alloy" - "restic" - "atuin" - "immich" + "rock5b-proxy" + "invidious" + "searx" + "rock5b-samba" "paperless" - "atticd" - "jellyfin" - "matrix" - "arr" - "zerotier" - "mosh" - "amule" - "adguard-home" - "garmin-grafana" - # "dump1090" - "arbi" + "restic" + "syncthing" + "minio" + # "matrix" + "forgejo" + # "jellyfin" + "immich" ] ++ [ ./disko.nix ]; + # FIXME why is this needed? + nixpkgs.config.permittedInsecurePackages = ["openssl-1.1.1w"]; + # boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_8; + # boot.kernelPackages = pkgs.linuxPackagesFor pkgs.linux_testing; + boot.kernelPackages = let + pkgs = fleetFlake.inputs.nixpkgsUnstableForSisko.legacyPackages.aarch64-linux; + in + pkgs.linuxPackagesFor pkgs.linux_testing; + # boot.kernelPackages = pkgs.linuxPackagesFor (pkgs.linux_6_9.override { + # argsOverride = { + # src = pkgs.fetchFromGitLab { + # domain = "gitlab.collabora.com"; + # owner = "hardware-enablement/rockchip-3588"; + # repo = "linux"; + # rev = "23bb9c65a88c114bbe945b7ef5366bb02d3d9b80"; + # sha256 = "sha256-6TygOl5r7/N2jlcPznWlvJfVVeXKSR8yMoGuTDbIdTA="; + # }; + # version = "6.9"; + # modDirVersion = "6.9.0"; + # }; + # }); + system.stateVersion = "24.05"; powerManagement.cpuFreqGovernor = "schedutil"; + ccr.enable = true; + + # services.rock5b-fan-control.enable = true; + nixpkgs.hostPlatform = "aarch64-linux"; - swapDevices = [ ]; + swapDevices = []; boot.loader = { systemd-boot.enable = true; efi.canTouchEfiVariables = false; }; - hardware.deviceTree.enable = true; - hardware.deviceTree.name = "rockchip/rk3588-rock-5b.dtb"; - boot.loader.systemd-boot.installDeviceTree = true; - boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" - "usb_storage" ]; boot.kernelParams = [ - "earlycon" - "consoleblank=0" "console=tty1" - "console=ttyS2,1500000" + "console=ttyS0,1500000" ]; - systemd.services."serial-getty@ttyS2" = { - enable = true; - wantedBy = [ "getty.target" ]; - serviceConfig.restart = "always"; + # fileSystems."/mnt/film" = { + # device = "//ccr.ydns.eu/film"; + # fsType = "cifs"; + # options = let + # credentials = pkgs.writeText "credentials" '' + # username=guest + # password= + # ''; + # in ["credentials=${credentials},x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s"]; + # }; + # fileSystems."/mnt/archivio" = { + # device = "//ccr.ydns.eu/archivio"; + # fsType = "cifs"; + # options = let + # credentials = pkgs.writeText "credentials" '' + # username=guest + # password= + # ''; + # in ["credentials=${credentials},x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s"]; + # }; + + fileSystems."/mnt/hd" = { + device = "/dev/disk/by-id/ata-WDC_WD10EADS-22M2B0_WD-WCAV52709550-part1"; + fsType = "ext4"; + options = ["nofail"]; }; - users.users.root.hashedPassword = "$y$j9T$mLSUS2hvJdN3s8f9Y3uLE0$sYQtJdn4DuSAZnDkhSsV0WIxNdpuqlH7ODNy1RfuRp4"; - - environment.persistence."/persist" = { - hideMounts = true; - directories = [ - "/etc/NetworkManager/system-connections" - "/var/db/dhcpcd/" - "/var/lib/NetworkManager/" - "/var/lib/nixos" - "/var/lib/systemd" - "/var/lib/systemd/coredump" - "/var/log" - "/var/lib/containers" - "/var/lib/postgresql" - ]; - files = [ - "/etc/machine-id" - "/etc/ssh/ssh_host_ed25519_key" - "/etc/ssh/ssh_host_ed25519_key.pub" - "/etc/ssh/ssh_host_rsa_key" - "/etc/ssh/ssh_host_rsa_key.pub" - ]; - }; - - age.identityPaths = [ - "/persist/etc/ssh/ssh_host_ed25519_key" - "/persist/etc/ssh/ssh_host_rsa_key" - ]; - - fileSystems."/persist".neededForBoot = true; - boot.tmp.cleanOnBoot = true; - environment.systemPackages = with pkgs; [ cifs-utils - unison ]; - - powerManagement.scsiLinkPolicy = "med_power_with_dipm"; } diff --git a/hosts/sisko/disko.nix b/hosts/sisko/disko.nix index 55ec848..325dbcf 100644 --- a/hosts/sisko/disko.nix +++ b/hosts/sisko/disko.nix @@ -1,17 +1,12 @@ let + emmc = "/dev/disk/by-id/mmc-SLD64G_0xf6be3ba0"; ssd = "/dev/disk/by-id/ata-CT240BX300SSD1_1739E1042F3C"; - hd = "/dev/disk/by-id/ata-ST12000NM0558_ZHZ6006Q"; -in -{ + # hd1 = "/dev/disk/by-id/ata-WDC_WD10EADS-22M2B0_WD-WCAV52709550"; + # hd2 = "/dev/disk/by-id/ata-WDC_WD10EADX-22TDHB0_WD-WCAV5V359530"; + hd = "/dev/disk/by-id/ata-WDC_WD10EADS-22M2B0_WD-WCAV52709550-part1"; + # old_hd = "/dev/disk/by-id/ata-WDC_WD5000AAKX-08U6AA0_WD-WCC2E5TR40FU"; +in { disko.devices = { - nodev."/" = { - fsType = "tmpfs"; - mountOptions = [ - "size=1024M" - "defaults" - "mode=755" - ]; - }; disk = { ssd = { device = ssd; @@ -22,100 +17,25 @@ in ESP = { label = "ESP"; type = "EF00"; - size = "1024M"; + size = "1G"; content = { type = "filesystem"; format = "vfat"; mountpoint = "/boot"; }; }; - nixroot = { - size = "100G"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/nix"; - }; - }; - persist = { - size = "100G"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/persist"; - }; - }; - tmp = { - end = "0"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/tmp"; - }; - }; - }; - }; - }; - hd = { - device = hd; - type = "disk"; - content = { - type = "gpt"; - partitions = { root = { + label = "root"; size = "100%"; content = { type = "filesystem"; - format = "xfs"; - mountpoint = "/mnt/hd"; - mountOptions = [ - "nofail" - ]; + format = "ext4"; + mountpoint = "/"; }; }; }; }; }; - # hd = { - # type = "disk"; - # device = hd; - # content = { - # type = "gpt"; - # partitions = { - # zfs = { - # size = "100%"; - # content = { - # type = "zfs"; - # pool = "zroot"; - # }; - # }; - # }; - # }; - # }; - # }; - # zpool = { - # zroot = { - # type = "zpool"; - # rootFsOptions = { - # compression = "lz4"; - # acltype = "posixacl"; - # xattr = "sa"; - # "com.sun:auto-snapshot" = "true"; - # mountpoint = "none"; - # }; - # datasets = { - # "root" = { - # type = "zfs_fs"; - # options.mountpoint = "/mnt/hd"; - # mountpoint = "/mnt/hd"; - # }; - # "root/torrent" = { - # type = "zfs_fs"; - # options.mountpoint = "/mnt/hd/torrent"; - # mountpoint = "/mnt/hd/torrent"; - # }; - # }; - # }; }; }; } diff --git a/hosts/spock/default.nix b/hosts/spock/default.nix deleted file mode 100644 index c564f78..0000000 --- a/hosts/spock/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - lib, - modulesPath, - ... -}: -{ - imports = [ - "${modulesPath}/installer/sd-card/sd-image-aarch64.nix" - ]; - - sdImage.compressImage = false; - - nixpkgs = { - # hostPlatform = lib.mkDefault "armv6-linux"; - # config = { - # allowUnfree = true; - # }; - # overlays = [ - # # Workaround: https://github.com/NixOS/nixpkgs/issues/154163 - # # modprobe: FATAL: Module sun4i-drm not found in directory - # (final: super: { - # makeModulesClosure = x: - # super.makeModulesClosure (x // {allowMissing = true;}); - # }) - # ]; - }; - - fileSystems = { - "/" = { - device = "/dev/disk/by-label/NIXOS_SD"; - fsType = "ext4"; - options = [ "noatime" ]; - }; - }; - - networking = { - networkmanager.enable = false; - }; - - # Set your time zone. - time.timeZone = "Europe/Rome"; - - # Allow the user to log in as root without a password. - users.users.root.initialHashedPassword = ""; - - hardware.enableRedistributableFirmware = true; - system.stateVersion = "24.11"; -} diff --git a/hosts/test/default.nix b/hosts/test/default.nix index a99e079..34c1daf 100644 --- a/hosts/test/default.nix +++ b/hosts/test/default.nix @@ -1,8 +1,10 @@ { fleetModules, + lib, + config, + pkgs, ... -}: -{ +}: { imports = fleetModules [ "common" diff --git a/hosts/thinkpad/default.nix b/hosts/thinkpad/default.nix index 40a5c56..2285cb2 100644 --- a/hosts/thinkpad/default.nix +++ b/hosts/thinkpad/default.nix @@ -1,10 +1,10 @@ { config, + lib, pkgs, fleetModules, ... -}: -{ +}: { imports = [ ./zfs.nix @@ -97,15 +97,10 @@ ]; }; - boot.initrd.availableKernelModules = [ - "xhci_pci" - "nvme" - "usb_storage" - "sd_mod" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; + boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-intel"]; + boot.extraModulePackages = with config.boot.kernelPackages; [v4l2loopback]; # boot.kernelPackages = pkgs.linuxPackages_zen; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking @@ -131,8 +126,8 @@ useXkbConfig = true; # use xkbOptions in tty. }; - services.joycond.enable = true; # FIXME not here - services.udev.packages = [ pkgs.joycond ]; + services.joycond.enable = true; #FIXME not here + services.udev.packages = [pkgs.joycond]; # Enable the X11 windowing system. # services.xserver.enable = true; @@ -188,7 +183,7 @@ # services.openssh.enable = true; # Open ports in the firewall. - networking.firewall.allowedTCPPorts = [ 8000 ]; + networking.firewall.allowedTCPPorts = [8000]; # networking.firewall.allowedUDPPorts = [ 5000 ]; # Or disable the firewall altogether. # networking.firewall.enable = false; @@ -219,7 +214,7 @@ ]; }; - users.groups.input.members = [ "ccr" ]; + users.groups.input.members = ["ccr"]; services.udev.extraRules = '' Sunshine KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput" diff --git a/hosts/thinkpad/hardware-configuration.nix b/hosts/thinkpad/hardware-configuration.nix index df9aa53..0f97b7d 100644 --- a/hosts/thinkpad/hardware-configuration.nix +++ b/hosts/thinkpad/hardware-configuration.nix @@ -4,67 +4,47 @@ { config, lib, + pkgs, modulesPath, ... -}: -{ +}: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ - "xhci_pci" - "nvme" - "usb_storage" - "sd_mod" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "uinput" ]; - boot.extraModulePackages = [ ]; + boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["uinput"]; + boot.extraModulePackages = []; fileSystems."/" = { device = "rpool/nixos/root"; fsType = "zfs"; - options = [ - "zfsutil" - "X-mount.mkdir" - ]; + options = ["zfsutil" "X-mount.mkdir"]; }; fileSystems."/home" = { device = "rpool/nixos/home"; fsType = "zfs"; - options = [ - "zfsutil" - "X-mount.mkdir" - ]; + options = ["zfsutil" "X-mount.mkdir"]; }; fileSystems."/var/lib" = { device = "rpool/nixos/var/lib"; fsType = "zfs"; - options = [ - "zfsutil" - "X-mount.mkdir" - ]; + options = ["zfsutil" "X-mount.mkdir"]; }; fileSystems."/var/log" = { device = "rpool/nixos/var/log"; fsType = "zfs"; - options = [ - "zfsutil" - "X-mount.mkdir" - ]; + options = ["zfsutil" "X-mount.mkdir"]; }; fileSystems."/boot" = { device = "bpool/nixos/root"; fsType = "zfs"; - options = [ - "zfsutil" - "X-mount.mkdir" - ]; + options = ["zfsutil" "X-mount.mkdir"]; }; fileSystems."/boot/efis/nvme-INTEL_SSDPEKKF010T8L_PHHP938405741P0D-part1" = { @@ -84,7 +64,7 @@ # }; swapDevices = [ - { device = "/dev/disk/by-label/swap"; } + {device = "/dev/disk/by-label/swap";} ]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking diff --git a/hosts/thinkpad/zfs.nix b/hosts/thinkpad/zfs.nix index e248e47..dd64da1 100644 --- a/hosts/thinkpad/zfs.nix +++ b/hosts/thinkpad/zfs.nix @@ -1,10 +1,10 @@ { + config, pkgs, lib, ... -}: -{ - boot.supportedFilesystems = [ "zfs" ]; +}: { + boot.supportedFilesystems = ["zfs"]; networking.hostId = "adf0b5e7"; boot.loader.efi.efiSysMountPoint = "/boot/efi"; boot.loader.efi.canTouchEfiVariables = false; @@ -23,7 +23,7 @@ mount /boot/efi ''; boot.loader.grub.extraInstallCommands = '' - export PATH=$PATH:${lib.makeBinPath [ pkgs.coreutils ]} + export PATH=$PATH:${lib.makeBinPath [pkgs.coreutils]} ESP_MIRROR=$(mktemp -d) cp -r /boot/efi/EFI $ESP_MIRROR for i in /boot/efis/*; do diff --git a/hosts/tpol/default.nix b/hosts/tpol/default.nix deleted file mode 100644 index a586bc0..0000000 --- a/hosts/tpol/default.nix +++ /dev/null @@ -1,95 +0,0 @@ -{ - modulesPath, - fleetModules, - pkgs, - lib, - vpn, - config, - ... -}: -{ - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") ] - ++ fleetModules [ - "common" - "ssh" - "nix" - "networkmanager" - "dbus" - "udisks2" - "xdg" - "printing" - "mara" - "xfce" - "battery" - "printing" - "wireguard-client" - "alloy" - ]; - - boot.initrd.availableKernelModules = [ - "xhci_pci" - "ehci_pci" - "ahci" - "usb_storage" - "sd_mod" - "sr_mod" - "rtsx_pci_sdmmc" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - boot.loader.grub.device = "/dev/sda"; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/1522f8d9-5251-408d-9b6e-ed6da7da916a"; - fsType = "btrfs"; - }; - - swapDevices = [ - { device = "/dev/disk/by-uuid/e111fbc7-8e5d-4fcb-95c9-249f53ab0adc"; } - ]; - - mara = { - enable = true; - modules = [ - "shell" - "mpv" - "firefox" - "git" - "chrome" - "udiskie" - "helix" - "remmina" - ]; - }; - - # nevertheless this is a laptop the battery is completely gone, so it works only attached to electrictiy - powerManagement.cpuFreqGovernor = lib.mkDefault "performance"; - - networking.firewall.allowedTCPPorts = [ 1234 ]; - - hardware.rtl-sdr.enable = true; - - systemd.services.rtl-tcp = { - description = "rtl_sdr over TCP"; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - ExecStart = '' - ${lib.getExe' pkgs.rtl-sdr "rtl_tcp"} -a ${vpn.${config.networking.hostName}.ip} - ''; - }; - }; - - systemd.services.sdrangelsrv = { - description = "sdrangelsrv"; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - ExecStart = '' - ${lib.getExe' pkgs.sdrangel "sdrangelsrv"} --remote-tcp-hwtype RTLSDR --remote-tcp-port 1234 --remote-tcp-address ${ - vpn.${config.networking.hostName}.ip - } --remote-tcp - ''; - }; - }; -} diff --git a/lib/default.nix b/lib/default.nix index 3d15451..d06c92e 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,10 +1,10 @@ { keys = { users = { - ccr-ssh = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIm9Sl/I+5G4g4f6iE4oCUJteP58v+wMIew9ZuLB+Gea"; - oneplus8t = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO8da1Mf11vXFF0kVDgxocVoGwpHHMEs9emS9T+v8hLb oneplus8t"; + ccr-gpg = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC5cEUx25pnZiH3eBrE2xNbJ92gJiKSznDUNRzcEL4ti6FlJm+75p4q0hgdqHwStR8+uCWBL6viVFCGutOVMFE5MX1Oc3A8fJdR6H9Rrwvk/1UQzqzc9tWxw1qPLKz+fnPDomjOvNofghCWQRwX3Xf1HnIqvRwELpNbR9i+/cHkDGzLJxkstbt4gol8ywMPkw02QdKk8s5MEd1vawxc+7Chs0JPW57RDqDYFErYys52JLeAViCBB9bofF+KT42LuRXKSjWlvCV9kR5TL49vUeBgzMQWMh++WQdN4m9lpqFqYyc75I49/E0HGf8LChDSS+hvRnb5MbtnVGjEA4WDHyldmJCvUNob5CUo4FjoSPRi+S/J3Ads8D4JVwaJOJEVqmMKEhiQ0Hzk4hwe3eV/VumlZj4U/QjaCrqqi4TW/iP0gNRfzcfiM+G/z5R7w1NMUpTX7oilyKjMQmGnXB857D3SSptS7dwh5OiKhVmrQMRCduooUsj236abqLU28K//RnxhOgh8kDGgoUHApnTiMZNKhgLiR42lKrubNcW1tAAqoNyFLMwwXeMLjh0iP1b5y8ntfNPNIcGb7vcwpS24z/aIjW7rQ4J7x5EBphHGhys6ne+irdhOM8c7kFr+c8+Q2oU0YAtFuMYztAFOHm1e20X00Zvys2nuee+hT9F1NungAQ== andrea.ciceri@autistici.org"; + ccr-ssh = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCzCmDCtlGscpesHuoiruVWD2IjYEFtaIl9Y2JZGiOAyf3V17KPx0MikcknfmxSHi399SxppiaXQHxo/1wjGxXkXNTTv6h1fBuqwhJE6C8+ZSV+gal81vEnXX+/9w2FQqtVgnG2/mO7oJ0e3FY+6kFpOsGEhYexoGt/UxIpAZoqIN+CWNhJIASUkneaZWtgwiL8Afb59kJQ2E7WbBu+PjYZ/s5lhPobhlkz6s8rkhItvYdiSHT0DPDKvp1oEbxsxd4E4cjJFbahyS8b089NJd9gF5gs0b74H/2lUUymnl63cV37Mp4iXB4rtE69MbjqsGEBKTPumLualmc8pOGBHqWIdhAqGdZQeBajcb6VK0E3hcU0wBB+GJgm7KUzlAHGdC3azY0KlHMrLaZN0pBrgCVR6zBNWtZz2B2qMBZ8Cw+K4vut8GuspdXZscID10U578GxQvJAB9CdxNUtrzSmKX2UtZPB1udWjjIAlejzba4MG73uXgQEdv0NcuHNwaLuCWxTUT5QQF18IwlJ23Mg8aPK8ojUW5A+kGHAu9wtgZVcX1nS5cmYKSgLzcP1LA1l9fTJ1vqBSuy38GTdUzfzz7AbnkRfGPj2ALDgyx17Rc5ommjc1k0gFoeIqiLaxEs5FzDcRyo7YvZXPsGeIqNCYwQWw3+U+yUEJby8bxGb2d/6YQ== andrea.ciceri@autistici.org"; + oneplus6t = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC1xBMLABwQQGOrbFXDqJEvcBQFvTx/Fj+k/qBa+FXPobH2BcOj8NxrExliP3krPTi+srEaA0fQHBy/tFktiZQvx82KPan9dpmRlc6G970Ej9M6dNbwl4zTMAgZ3E8U5HCvoXTaFeSS2mrlRq5pyy7dZcVkPMvhgP65d+gx6fJbQhiDGBGJg2CWU8b1bUG703EkYcKAZY57Db+j/8/VoBsS3TAAJzW8CVxN1nqKeYCcgPR7y2HjZihlSUPJsdwV4D46qj1gLh+NdYh5iBUICOXBIt26hiQhRPtY+mtH2eWW1NdnCp2gk6IaMQEHKCy9t5L3VybQJzaqDZwQAyQZIbonb+X8hlkhvf9CjlrjILoroLN3RE5te/WQQzyTR4Ni8A6+Mu+1JHW5JWM3Iz9u77ceLc9/4UFkdFSALZjFUYIevQLUitVZCdJkqNxizyJmpCgjAnArhjItX6hO4Dq96TRWcHDtCsk1jJ1CCUZRwkkzZjmob86CS58zERkwWbWKGSejxSO6YQZTFsgon76r2x5Cd1GoG4vCtFMqyOQzDTHZqVxYjWJrySFg2GnCIy4wth1tpwB/uzobM9Xn01V6vdQNDI7a/4XHZ7IQWiGy2dme6R+PmAma1RgxAioPt5IZrv8nlb2YWXuoXS66RSwV9A9U+98hVfZc29KJ+2fKVy/JBQ== oneplus6t"; hercules-ci-agent = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGPupm00BiveTIYF6CNwuMijF5VvEaPDMjvt+vMlAy+N hercules-ci-agent"; - forgejo-ci = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH5mbqLoZ/0J45J7J+17XMGv/dXs3DGABJsnvDv4rgC9 forgjeo-ci"; }; hosts = { kirk = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAH49KzayIro3L1bteR7nwupMM/vKlDh05t5/DFD9/uz"; @@ -13,8 +13,6 @@ pbp = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFF05LScu9m5BXMlFAT1g+g/AkAi7kvq1dY6W3Rzqq3f"; picard = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ1+1z1IsLVJ6aGarMgzw3NbmFKcpYVgdUjl7xDsewxT"; deltaflyer = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPETMwELvGTnhKJbpK0oFs4lK8vm/kV9KdgL9wufYDDQ"; - tpol = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIQxHSow2l0TDWTonBPPaGvTgVvMS/xsQOf1nHnvLSwV"; - pike = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPx3Hy9L8w4mpr5HFcqLOr/wUk/wJeB9HjcLy2tt0U+x"; }; }; } diff --git a/modules/adb/default.nix b/modules/adb/default.nix index 928fbe4..4ca3870 100644 --- a/modules/adb/default.nix +++ b/modules/adb/default.nix @@ -1,4 +1,4 @@ { programs.adb.enable = true; - ccr.extraGroups = [ "adbusers" ]; + ccr.extraGroups = ["adbusers"]; } diff --git a/modules/adguard-home/default.nix b/modules/adguard-home/default.nix index cd9cec3..5836d1e 100644 --- a/modules/adguard-home/default.nix +++ b/modules/adguard-home/default.nix @@ -1,67 +1,11 @@ -{ config, lib, ... }: -let - interface = "enP4p65s0"; -in { services.adguardhome = { enable = true; - mutableSettings = true; + port = 3000; settings = { - dhcp = { - enabled = true; - interface_name = interface; - - dhcpv4 = { - gateway_ip = "10.1.1.1"; - range_start = "10.1.1.2"; - range_end = "10.1.1.255"; - subnet_mask = "255.255.255.0"; - }; - }; - dns = { - upstream_dns = [ - "https://dns10.quad9.net/dns-query" - ]; - - bind_hosts = [ - "127.0.0.1" - "10.1.1.2" - ]; - }; + openFirewall = true; }; }; - - # otherwise it creates a directory in /var/lib/private which can't be easily persisted - systemd.services.adguardhome.serviceConfig.DynamicUser = lib.mkForce false; - - networking.firewall.allowedUDPPorts = [ - 53 - 67 - ]; - networking.firewall.allowedTCPPorts = [ 53 ]; - - networking.interfaces.${interface} = { - ipv4.addresses = [ - { - address = "10.1.1.2"; - prefixLength = 24; - } - ]; - useDHCP = false; - }; - - networking.defaultGateway = "10.1.1.1"; - - environment.persistence."/persist".directories = [ - "/var/lib/AdGuardHome" - ]; - - services.nginx.virtualHosts."adguard.sisko.wg.aciceri.dev" = { - forceSSL = true; - useACMEHost = "aciceri.dev"; - locations."/" = { - proxyPass = "http://localhost:${builtins.toString config.services.adguardhome.port}"; - }; - serverAliases = [ "adguard.sisko.zt.aciceri.dev" ]; - }; + networking.firewall.allowedTCPPorts = [3000 53]; + networking.firewall.allowedUDPPorts = [53]; } diff --git a/modules/alloy/default.nix b/modules/alloy/default.nix deleted file mode 100644 index 728ca28..0000000 --- a/modules/alloy/default.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ config, ... }: -{ - services.alloy = { - enable = true; - }; - environment.etc."alloy/config.alloy".text = '' - local.file_match "local_files" { - path_targets = [{ - __path__ = "/var/log/*.log", - }] - sync_period = "5s" - } - - loki.source.journal "systemd" { - max_age = "24h" - forward_to = [loki.write.default.receiver] - } - - loki.source.journal "kernel" { - max_age = "24h" - forward_to = [loki.write.default.receiver] - } - - loki.relabel "nixfleet_journal" { - forward_to = [] - rule { - source_labels = ["__journal__systemd_unit"] - target_label = "systemd_unit" - } - rule { - source_labels = ["__journal_syslog_identifier"] - target_label = "syslog_identifier" - } - } - - loki.source.journal "nixfleet_journal" { - forward_to = [loki.write.default.receiver] - relabel_rules = loki.relabel.nixfleet_journal.rules - format_as_json = true - } - - loki.write "default" { - endpoint { - url = "http://sisko.wg.aciceri.dev:${ - builtins.toString config.services.loki.configuration.server.http_listen_port or 3100 - }/loki/api/v1/push" - } - external_labels = { - host = "${config.networking.hostName}", - } - } - ''; -} diff --git a/modules/amarr/default.nix b/modules/amarr/default.nix deleted file mode 100644 index 0412243..0000000 --- a/modules/amarr/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -args@{ lib, pkgs, ... }: -let - pkgs = builtins.getFlake "github:NixOS/nixpkgs/d278c7bfb89130ac167e80d2250f9abc0bede419"; - amarr = pkgs.legacyPackages.${args.pkgs.system}.amarr; -in -{ - systemd.services.amarr = { - description = "amarr"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - serviceConfig = { - User = "root"; - Type = "oneshot"; - ExecStart = lib.getExe amarr; - }; - environment = { - AMULE_HOST = "localhost"; - AMULE_PORT = "4712"; - AMULE_PASSWORD = ""; - }; - }; - -} diff --git a/modules/amule/default.nix b/modules/amule/default.nix deleted file mode 100644 index 6416e9f..0000000 --- a/modules/amule/default.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ config, pkgs, ... }: -let - rev = "966199fe1dccc9c6c7016bdb1d9582f27797bc02"; - amule-flake = builtins.getFlake "github:NixOS/nixpkgs/${rev}"; - inherit (amule-flake.legacyPackages.${pkgs.system}) amule-daemon amule-web; -in -{ - disabledModules = [ "services/networking/amuled.nix" ]; - documentation.nixos.enable = false; - - imports = [ "${amule-flake}/nixos/modules/services/networking/amuled.nix" ]; - - services.amule = { - enable = true; - package = amule-daemon; - amuleWebPackage = amule-web; - openPeerPorts = true; - openWebServerPort = true; - # TODO the service is accessible only from the VPN - # however better using agenix - ExternalConnectPasswordFile = pkgs.writeText "password" "pippo"; - WebServerPasswordFile = pkgs.writeText "password" "pippo"; - settings = { - eMule = { - IncomingDir = "/mnt/hd/amule"; - TempDir = "/mnt/hd/amule/Temp"; - }; - WebServer = { - Enabled = 1; - }; - }; - }; - - environment.persistence."/persist".directories = [ - config.services.amule.dataDir - ]; - - services.nginx.virtualHosts."amule.sisko.wg.aciceri.dev" = { - forceSSL = true; - useACMEHost = "aciceri.dev"; - locations."/" = { - proxyPass = "http://localhost:${builtins.toString config.services.amule.settings.WebServer.Port}"; - }; - serverAliases = [ "amule.sisko.zt.aciceri.dev" ]; - }; -} diff --git a/modules/arbi/default.nix b/modules/arbi/default.nix deleted file mode 100644 index 3417b51..0000000 --- a/modules/arbi/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, ... }: -let - rev = "d531730d9640160f0519ef4b3640f8da49dd96f8"; - arbi-flake = builtins.getFlake "git+ssh://git@github.com/aciceri/arbi.git?rev=${rev}"; -in -{ - imports = [ arbi-flake.nixosModules.arbi ]; - - services.arbi = { - enable = true; - log_level = "debug"; - configFile = config.age.secrets.arbi-config.path; - }; - - environment.persistence."/persist".directories = [ - config.services.arbi.dataDir - ]; -} diff --git a/modules/arr/default.nix b/modules/arr/default.nix deleted file mode 100644 index 5f269c4..0000000 --- a/modules/arr/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ lib, ... }: -{ - services.radarr = { - enable = true; - }; - - services.sonarr = { - enable = true; - }; - - services.prowlarr = { - enable = true; - }; - - systemd.services.prowlarr = { - serviceConfig = { - DynamicUser = lib.mkForce false; - }; - }; - - users.users.radarr.extraGroups = [ "transmission" ]; - users.users.sonarr.extraGroups = [ "transmission" ]; - - environment.persistence."/persist".directories = [ - "/var/lib/radarr" - "/var/lib/prowlarr" - "/var/lib/sonarr" - ]; - - services.nginx.virtualHosts = { - "radarr.sisko.wg.aciceri.dev" = { - forceSSL = true; - useACMEHost = "aciceri.dev"; - locations."/" = { - proxyPass = "http://localhost:7878"; # FIXME hardcoded port - }; - serverAliases = [ "radarr.sisko.zt.aciceri.dev" ]; - }; - "prowlarr.sisko.wg.aciceri.dev" = { - forceSSL = true; - useACMEHost = "aciceri.dev"; - locations."/" = { - proxyPass = "http://localhost:9696"; # FIXME hardcoded port - }; - serverAliases = [ "prowlarr.sisko.zt.aciceri.dev" ]; - }; - "sonarr.sisko.wg.aciceri.dev" = { - forceSSL = true; - useACMEHost = "aciceri.dev"; - locations."/" = { - proxyPass = "http://localhost:8989"; # FIXME hardcoded port - }; - serverAliases = [ "sonarr.sisko.zt.aciceri.dev" ]; - }; - }; -} diff --git a/modules/atticd/default.nix b/modules/atticd/default.nix deleted file mode 100644 index 6af974f..0000000 --- a/modules/atticd/default.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ config, lib, ... }: -{ - services.atticd = { - enable = true; - settings = { - listen = "0.0.0.0:8081"; - allowed-hosts = [ ]; # Allow all hosts - # api-endpoint = "https://cache.aciceri.dev"; - soft-delete-caches = false; - require-proof-of-possession = true; - - database.url = "sqlite://${config.services.atticd.settings.storage.path}/server.db?mode=rwc"; - - storage = { - type = "local"; - path = "/mnt/hd/attic"; - }; - - compression.type = "none"; - - garbage-collection.interval = "0 hours"; # disable garbage collection - - chunking = { - nar-size-threshold = 64 * 1024; # 64 KiB - min-size = 16 * 1024; # 16 KiB - avg-size = 64 * 1024; # 64 KiB - max-size = 256 * 1024; # 256 KiB - }; - }; - environmentFile = config.age.secrets.sisko-attic-environment-file.path; - }; - - systemd.services.atticd = { - serviceConfig = { - DynamicUser = lib.mkForce false; - }; - }; - - systemd.tmpfiles.rules = [ - "d config.services.atticd.settings.storage.path 770 atticd atticd" - ]; - - users = { - groups.atticd = { }; - users.atticd = { - group = "atticd"; - home = config.services.atticd.settings.storage.path; - isSystemUser = true; - }; - }; -} diff --git a/modules/atuin/default.nix b/modules/atuin/default.nix deleted file mode 100644 index d9e04f9..0000000 --- a/modules/atuin/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, ... }: -{ - services.atuin = { - enable = true; - openFirewall = false; # use only in the VPN - port = 8889; - host = "0.0.0.0"; - openRegistration = true; - }; - networking.firewall.interfaces."wg0" = { - allowedTCPPorts = [ - config.services.atuin.port - ]; - }; -} diff --git a/modules/audio/default.nix b/modules/audio/default.nix index 65ac9fa..8e5c841 100644 --- a/modules/audio/default.nix +++ b/modules/audio/default.nix @@ -1,6 +1,10 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { sound.enable = true; - users.extraUsers.ccr.extraGroups = [ "audio" ]; + hardware.pulseaudio = { + enable = true; + package = pkgs.pulseaudioFull; + }; + + users.extraUsers.ccr.extraGroups = ["audio"]; } diff --git a/modules/auto-upgrade/default.nix b/modules/auto-upgrade/default.nix index a9d6213..510d43d 100644 --- a/modules/auto-upgrade/default.nix +++ b/modules/auto-upgrade/default.nix @@ -1,15 +1,16 @@ { config, + options, + lib, ... -}: -{ +}: { system.autoUpgrade = { enable = false; flake = "github:aciceri/nixfleet#${config.networking.hostName}"; - # flags = - # lib.lists.optional - # (builtins.hasAttr "ccrEmacs" options) - # ["--update-input" "ccrEmacs" "ccrEmacs"]; + flags = + lib.lists.optional + (builtins.hasAttr "ccrEmacs" options) + ["--update-input" "ccrEmacs" "ccrEmacs"]; dates = "daily"; allowReboot = false; }; diff --git a/modules/battery/default.nix b/modules/battery/default.nix index 96c5bf3..2f56d8b 100644 --- a/modules/battery/default.nix +++ b/modules/battery/default.nix @@ -1,11 +1,10 @@ -{ config, ... }: -{ +{config, ...}: { services.tlp.enable = true; services.upower.enable = true; nixpkgs.overlays = [ - (_self: super: { + (self: super: { tlp = super.tlp.override { enableRDW = config.networkmanager.enable; }; diff --git a/modules/binfmt/default.nix b/modules/binfmt/default.nix index 3f53722..b1f04cf 100644 --- a/modules/binfmt/default.nix +++ b/modules/binfmt/default.nix @@ -1,12 +1,7 @@ { - boot.binfmt.emulatedSystems = [ - "i686-linux" - "aarch64-linux" - "riscv64-linux" - "armv6l-linux" - ]; + boot.binfmt.emulatedSystems = ["i686-linux" "aarch64-linux" "riscv64-linux"]; nix.extraOptions = '' - extra-platforms = aarch64-linux arm-linux i686-linux riscv64-linux armv6l-linux + extra-platforms = aarch64-linux arm-linux i686-linux riscv64-linux ''; # XXX For some reason `docker buildx` isn't aware of this: diff --git a/modules/bluetooth/default.nix b/modules/bluetooth/default.nix index f6f28f7..49fbc36 100644 --- a/modules/bluetooth/default.nix +++ b/modules/bluetooth/default.nix @@ -1,13 +1,12 @@ { pkgs, config, - lib, ... -}: -{ +}: { services.blueman.enable = true; + hardware.pulseaudio.enable = true; hardware.bluetooth = { - enable = lib.mkDefault true; + enable = true; settings = { General = { Name = config.networking.hostName; @@ -20,6 +19,6 @@ }; }; }; - services.dbus.packages = with pkgs; [ blueman ]; - ccr.extraGroups = [ "bluetooth" ]; + services.dbus.packages = with pkgs; [blueman]; + ccr.extraGroups = ["bluetooth"]; } diff --git a/modules/bubbleupnp/default.nix b/modules/bubbleupnp/default.nix index 7858899..64c304f 100644 --- a/modules/bubbleupnp/default.nix +++ b/modules/bubbleupnp/default.nix @@ -2,13 +2,10 @@ virtualisation.oci-containers.containers = { bubbleupnpserver = { image = "bubblesoftapps/bubbleupnpserver"; - ports = [ "58050:58050" ]; - extraOptions = [ - "--network=host" - "-device /dev/dri:/dev/dri" - ]; + ports = ["58050:58050"]; + extraOptions = ["--network=host" "-device /dev/dri:/dev/dri"]; }; }; - networking.firewall.allowedTCPPorts = [ 58050 ]; + networking.firewall.allowedTCPPorts = [58050]; } diff --git a/modules/ccr/default.nix b/modules/ccr/default.nix index 99cdc60..13494c5 100644 --- a/modules/ccr/default.nix +++ b/modules/ccr/default.nix @@ -7,12 +7,10 @@ vpn, options, ... -}: -let +}: let cfg = config.ccr; inherit (lib) types; -in -{ +in { options.ccr = { enable = lib.mkEnableOption "ccr"; @@ -28,17 +26,17 @@ in shell = lib.mkOption { type = lib.types.package; - default = pkgs.bash; + default = pkgs.fish; }; modules = lib.mkOption { type = types.listOf types.str; - default = [ ]; + default = []; }; packages = lib.mkOption { type = types.listOf types.package; - default = [ ]; + default = []; }; autologin = lib.mkOption { @@ -58,109 +56,63 @@ in extraGroups = lib.mkOption { type = types.listOf types.str; - default = { }; + default = {}; }; extraModules = lib.mkOption { type = types.listOf types.deferredModule; - default = [ ]; + default = []; }; backupPaths = lib.mkOption { type = types.listOf types.str; - default = [ ]; - }; - - impermanence = { - enable = lib.mkOption { - type = types.bool; - default = (config.environment.persistence or null) != null; - }; - - directories = lib.mkOption { - type = types.listOf types.anything; # TODO re-use type from the NixOS module - default = [ - ".cache" - "Downloads" - ]; - }; - - files = lib.mkOption { - type = types.listOf types.anything; # TODO re-use type from the NixOS module - default = [ - ".ssh/id_ed25519.pub" - ".ssh/id_ed25519" - ".ssh/authorized_keys" - ".ssh/known_hosts" - ]; - }; + default = []; }; }; - config = lib.mkIf cfg.enable ( - lib.mkMerge [ - (lib.optionalAttrs (builtins.hasAttr "backup" options) { - backup.paths = cfg.backupPaths; - }) - { - # FIXME shouldn't set these groups by default - ccr.extraGroups = [ - "wheel" - "fuse" - "video" - "dialout" - "systemd-journal" - "camera" - "networkmanager" - ]; - ccr.modules = [ - "shell" - "git" - "nix-index" - "btop" - ]; + config = lib.mkIf cfg.enable (lib.mkMerge [ + (lib.optionalAttrs (builtins.hasAttr "backup" options) { + backup.paths = cfg.backupPaths; + }) + { + # FIXME shouldn't set these groups by default + ccr.extraGroups = ["wheel" "fuse" "video" "dialout" "systemd-journal" "camera"]; + ccr.modules = ["shell" "git" "nix-index" "btop"]; - users.users.${cfg.username} = { - inherit (config.ccr) hashedPassword extraGroups description; - uid = 1000; - isNormalUser = true; - shell = cfg.shell; - openssh.authorizedKeys.keys = config.ccr.authorizedKeys; - }; + users.users.${cfg.username} = { + inherit (config.ccr) hashedPassword extraGroups description; + uid = 1000; + isNormalUser = true; + shell = cfg.shell; + openssh.authorizedKeys.keys = config.ccr.authorizedKeys; + }; - services.getty.autologinUser = if config.ccr.autologin then cfg.username else null; + programs.fish.enable = true; - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.${cfg.username} = { - imports = - fleetHmModules cfg.modules - ++ [ - { - _module.args = { - inherit (config.age) secrets; - inherit (cfg) username; - inherit vpn; - hostname = config.networking.hostName; - }; - } - ] - ++ [ - (lib.optionalAttrs cfg.impermanence.enable { - home.persistence."/persist/home/${cfg.username}" = { - inherit (cfg.impermanence) directories files; - allowOther = true; - }; - }) - ] - ++ cfg.extraModules; - home.packages = cfg.packages; - home.stateVersion = config.system.stateVersion; - }; - } - (lib.mkIf cfg.impermanence.enable { - programs.fuse.userAllowOther = true; - }) - ] - ); + services.getty.autologinUser = + if config.ccr.autologin + then cfg.username + else null; + + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.${cfg.username} = { + imports = + fleetHmModules cfg.modules + ++ [ + { + _module.args = { + inherit (config.age) secrets; + inherit (cfg) username; + inherit vpn; + hostname = config.networking.hostName; + }; + } + ] + ++ cfg.extraModules; + home.packages = cfg.packages; + home.stateVersion = config.system.stateVersion; + }; + } + ]); } diff --git a/modules/cgit/config.nix b/modules/cgit/config.nix index 9386a34..ab5be50 100644 --- a/modules/cgit/config.nix +++ b/modules/cgit/config.nix @@ -1,31 +1,28 @@ { + lib, pkgs, ... -}: -let +}: let repos-path = "/var/lib/cgit-repos"; cgit-setup-repos = - pkgs.writers.writePython3 "cgit-setup-repos" - { - libraries = with pkgs.python3Packages; [ PyGithub ]; - } - '' - from github import Github - from pathlib import Path + pkgs.writers.writePython3 "cgit-setup-repos" { + libraries = with pkgs.python3Packages; [PyGithub]; + } '' + from github import Github + from pathlib import Path - c = Path("${repos-path}") - c.unlink(missing_ok=True) + c = Path("${repos-path}") + c.unlink(missing_ok=True) - with open(c, "w") as f: - for repo in Github().get_user("aciceri").get_repos(): - f.writelines([ - f"repo.url={repo.name}\n" - f"repo.path=/home/ccr/projects/aciceri/{repo.name}/.git\n" - f"repo.desc={repo.description}\n" - ]) - ''; -in -{ + with open(c, "w") as f: + for repo in Github().get_user("aciceri").get_repos(): + f.writelines([ + f"repo.url={repo.name}\n" + f"repo.path=/home/ccr/projects/aciceri/{repo.name}/.git\n" + f"repo.desc={repo.description}\n" + ]) + ''; +in { services.nginx.virtualHosts."git.aciceri.dev" = { cgit = { enable = true; @@ -34,12 +31,10 @@ in virtual-root = "/"; cache-size = 1000; include = [ - (builtins.toString ( - pkgs.writeText "cgit-extra" '' - source-filter=${pkgs.cgit-pink}/lib/cgit/filters/syntax-highlighting.py - about-filter=${pkgs.cgit-pink}/lib/cgit/filters/about-formatting.sh - '' - )) + (builtins.toString (pkgs.writeText "cgit-extra" '' + source-filter=${pkgs.cgit-pink}/lib/cgit/filters/syntax-highlighting.py + about-filter=${pkgs.cgit-pink}/lib/cgit/filters/about-formatting.sh + '')) repos-path ]; }; @@ -53,13 +48,13 @@ in Type = "oneshot"; RemainAfterExit = true; }; - wantedBy = [ "multi-user.target" ]; + wantedBy = ["multi-user.target"]; script = builtins.toString cgit-setup-repos; }; systemd.timers.cgit-setup-repos = { - wantedBy = [ "timers.target" ]; - partOf = [ "cgit-setup-repos.service" ]; + wantedBy = ["timers.target"]; + partOf = ["cgit-setup-repos.service"]; timerConfig = { OnCalendar = "*-*-* 4:00:00"; # daily at 4 AM Unit = "cgit-setup-repos.service"; diff --git a/modules/cgit/custom.css b/modules/cgit/custom.css index aacb9d8..b3f4f42 100644 --- a/modules/cgit/custom.css +++ b/modules/cgit/custom.css @@ -4,154 +4,83 @@ @import url("cgit.css"); -* { - line-height: 1.25em; -} +* { line-height: 1.25em; } div#cgit { - max-width: 117ch; - margin: auto; - font-family: monospace; - -moz-tab-size: 4; - tab-size: 4; + max-width: 117ch; + margin: auto; + font-family: monospace; + -moz-tab-size: 4; + tab-size: 4; } div#cgit table#header td.sub { - border-top: none; + border-top: none; } div#cgit table#header td.sub.right { - padding-right: 1em; + padding-right: 1em; } div#cgit table.tabs { - border-bottom: none; + border-bottom: none; } div#cgit div.content { - border-bottom: none; + border-bottom: none; } div#cgit table.list th a { - color: inherit; + color: inherit; } div#cgit table.list tr:nth-child(even) { - background: inherit; + background: inherit; } div#cgit table.list tr:hover { - background: inherit; + background: inherit; } div#cgit table.list tr.nohover-highlight:hover:nth-child(even) { - background: inherit; + background: inherit; } div#cgit table.blob td.linenumbers a:target { - color: goldenrod; - text-decoration: underline; - outline: none; + color: goldenrod; + text-decoration: underline; + outline: none; } div#cgit div#summary { - max-width: 80ch; + max-width: 80ch; } /* for hilex(1) */ -div#cgit pre .Ke { - color: dimgray; -} -div#cgit pre .Ma { - color: green; -} -div#cgit pre .Co { - color: navy; -} -div#cgit pre .St { - color: teal; -} -div#cgit pre .Fo { - color: teal; - font-weight: bold; -} -div#cgit pre .Su { - color: olive; -} +div#cgit pre .Ke { color: dimgray; } +div#cgit pre .Ma { color: green; } +div#cgit pre .Co { color: navy; } +div#cgit pre .St { color: teal; } +div#cgit pre .Fo { color: teal; font-weight: bold; } +div#cgit pre .Su { color: olive; } /* for htagml(1) */ -div#cgit pre a.tag { - color: inherit; - text-decoration: underline; -} -div#cgit pre a.tag:target { - color: goldenrod; - outline: none; -} +div#cgit pre a.tag { color: inherit; text-decoration: underline; } +div#cgit pre a.tag:target { color: goldenrod; outline: none; } /* for mandoc(1) */ -table.head, -table.foot { - width: 100%; -} -td.head-rtitle, -td.foot-os { - text-align: right; -} -td.head-vol { - text-align: center; -} -div.Pp { - margin: 1ex 0ex; -} -div.Nd, -div.Bf, -div.Op { - display: inline; -} -span.Pa, -span.Ad { - font-style: italic; -} -span.Ms { - font-weight: bold; -} -dl.Bl-diag > dt { - font-weight: bold; -} -code.Nm, -code.Fl, -code.Cm, -code.Ic, -code.In, -code.Fd, -code.Fn, -code.Cd { - font-weight: bold; - font-family: inherit; -} +table.head, table.foot { width: 100%; } +td.head-rtitle, td.foot-os { text-align: right; } +td.head-vol { text-align: center; } +div.Pp { margin: 1ex 0ex; } +div.Nd, div.Bf, div.Op { display: inline; } +span.Pa, span.Ad { font-style: italic; } +span.Ms { font-weight: bold; } +dl.Bl-diag > dt { font-weight: bold; } +code.Nm, code.Fl, code.Cm, code.Ic, code.In, code.Fd, code.Fn, +code.Cd { font-weight: bold; font-family: inherit; } -h1.Sh { - font-size: 1.5em; -} -table.Nm td:first-child { - padding-right: 1ch; -} -code.Fl { - white-space: nowrap; -} -span.RsT { - font-style: italic; -} -dl.Bl-tag:not(.Bl-compact) > dt { - margin-top: 1em; -} -ul.Bl-bullet:not(.Bl-compact) > li { - margin-top: 1em; -} -div.Bd-indent { - margin-left: 4ch; -} -table.Bl-column { - width: 100%; -} -table.foot { - margin-top: 1em; -} +h1.Sh { font-size: 1.5em; } +table.Nm td:first-child { padding-right: 1ch; } +code.Fl { white-space: nowrap; } +span.RsT { font-style: italic; } +dl.Bl-tag:not(.Bl-compact) > dt { margin-top: 1em; } +ul.Bl-bullet:not(.Bl-compact) > li { margin-top: 1em; } +div.Bd-indent { margin-left: 4ch; } +table.Bl-column { width: 100%; } +table.foot { margin-top: 1em; } -div#cgit a.permalink { - color: inherit; -} +div#cgit a.permalink { color: inherit; } diff --git a/modules/cgit/default.nix b/modules/cgit/default.nix index 20561ce..a6439f8 100644 --- a/modules/cgit/default.nix +++ b/modules/cgit/default.nix @@ -4,149 +4,134 @@ pkgs, ... }: -with lib; -let +with lib; let globalConfig = config; settingsFormat = { - type = - with lib.types; - let - value = - oneOf [ - int - str - ] - // { - description = "INI-like atom (int or string)"; - }; - values = coercedTo value lib.singleton (listOf value) // { + type = with lib.types; let + value = + oneOf [int str] + // { + description = "INI-like atom (int or string)"; + }; + values = + coercedTo value lib.singleton (listOf value) + // { description = value.description + " or a list of them for duplicate keys"; }; - in + in attrsOf values; - generate = - name: values: - pkgs.writeText name (lib.generators.toKeyValue { listsAsDuplicateKeys = true; } values); + generate = name: values: + pkgs.writeText name (lib.generators.toKeyValue {listsAsDuplicateKeys = true;} values); }; -in -{ +in { imports = [ ../nginx-base ./config.nix ]; options.services.nginx.virtualHosts = mkOption { - type = types.attrsOf ( - types.submodule ( - { config, ... }: - let - cfg = config.cgit; + type = types.attrsOf (types.submodule ({config, ...}: let + cfg = config.cgit; - # These are the global options for this submodule, but for nicer UX they - # are inlined into the freeform settings. Hence they MUST NOT INTERSECT - # with any settings from cgitrc! - options = { - enable = mkEnableOption "cgit"; + # These are the global options for this submodule, but for nicer UX they + # are inlined into the freeform settings. Hence they MUST NOT INTERSECT + # with any settings from cgitrc! + options = { + enable = mkEnableOption "cgit"; - location = mkOption { - default = "/"; - type = types.str; - description = '' - Location to serve cgit on. - ''; - }; + location = mkOption { + default = "/"; + type = types.str; + description = '' + Location to serve cgit on. + ''; + }; + }; + + # Remove the global options for serialization into cgitrc + settings = removeAttrs cfg (attrNames options); + in { + options.cgit = mkOption { + type = types.submodule { + freeformType = settingsFormat.type; + inherit options; + config = { + css = mkDefault "/cgit.css"; + logo = mkDefault "/cgit.png"; + favicon = mkDefault "/favicon.ico"; }; + }; + default = {}; + example = literalExample '' + { + enable = true; + virtual-root = "/"; + source-filter = "''${pkgs.cgit-pink}/lib/cgit/filters/syntax-highlighting.py"; + about-filter = "''${pkgs.cgit-pink}/lib/cgit/filters/about-formatting.sh"; + cache-size = 1000; + scan-path = "/srv/git"; + include = [ + (builtins.toFile "cgitrc-extra-1" ''' + # Anything that has to be in a particular order + ''') + (builtins.toFile "cgitrc-extra-2" ''' + # Anything that has to be in a particular order + ''') + ]; + } + ''; + description = '' + Verbatim contents of the cgit runtime configuration file. Documentation + (with cgitrc example file) is available in "man cgitrc". Or online: + http://git.zx2c4.com/cgit/tree/cgitrc.5.txt + ''; + }; - # Remove the global options for serialization into cgitrc - settings = removeAttrs cfg (attrNames options); - in - { - options.cgit = mkOption { - type = types.submodule { - freeformType = settingsFormat.type; - inherit options; - config = { - css = mkDefault "/cgit.css"; - logo = mkDefault "/cgit.png"; - favicon = mkDefault "/favicon.ico"; - }; - }; - default = { }; - example = literalExample '' - { - enable = true; - virtual-root = "/"; - source-filter = "''${pkgs.cgit-pink}/lib/cgit/filters/syntax-highlighting.py"; - about-filter = "''${pkgs.cgit-pink}/lib/cgit/filters/about-formatting.sh"; - cache-size = 1000; - scan-path = "/srv/git"; - include = [ - (builtins.toFile "cgitrc-extra-1" ''' - # Anything that has to be in a particular order - ''') - (builtins.toFile "cgitrc-extra-2" ''' - # Anything that has to be in a particular order - ''') - ]; - } - ''; - description = '' - Verbatim contents of the cgit runtime configuration file. Documentation - (with cgitrc example file) is available in "man cgitrc". Or online: - http://git.zx2c4.com/cgit/tree/cgitrc.5.txt - ''; + config = let + location = removeSuffix "/" cfg.location; + in + mkIf cfg.enable { + locations."${location}/" = { + root = "${pkgs.cgit-pink}/cgit/"; + tryFiles = "$uri @cgit"; }; - - config = - let - location = removeSuffix "/" cfg.location; - in - mkIf cfg.enable { - locations."${location}/" = { - root = "${pkgs.cgit-pink}/cgit/"; - tryFiles = "$uri @cgit"; - }; - locations."~ ^${location}/(cgit.(css|png)|favicon.ico|robots.txt)$" = { - alias = "${pkgs.cgit-pink}/cgit/$1"; - }; - locations."~ ^${location}/custom.css$" = { - alias = ./custom.css; - }; - locations."@cgit" = { - extraConfig = - '' - include ${pkgs.nginx}/conf/fastcgi_params; - fastcgi_param CGIT_CONFIG ${settingsFormat.generate "cgitrc" settings}; - fastcgi_param SCRIPT_FILENAME ${pkgs.cgit-pink}/cgit/cgit.cgi; - fastcgi_param QUERY_STRING $args; - fastcgi_param HTTP_HOST $server_name; - fastcgi_pass unix:${globalConfig.services.fcgiwrap.socketAddress}; - '' - + ( - if cfg.location == "/" then - '' - fastcgi_param PATH_INFO $uri; - '' - else - '' - fastcgi_split_path_info ^(${location}/)(/?.+)$; - fastcgi_param PATH_INFO $fastcgi_path_info; - '' - ); - }; - }; - } - ) - ); + locations."~ ^${location}/(cgit.(css|png)|favicon.ico|robots.txt)$" = { + alias = "${pkgs.cgit-pink}/cgit/$1"; + }; + locations."~ ^${location}/custom.css$" = { + alias = ./custom.css; + }; + locations."@cgit" = { + extraConfig = + '' + include ${pkgs.nginx}/conf/fastcgi_params; + fastcgi_param CGIT_CONFIG ${settingsFormat.generate "cgitrc" settings}; + fastcgi_param SCRIPT_FILENAME ${pkgs.cgit-pink}/cgit/cgit.cgi; + fastcgi_param QUERY_STRING $args; + fastcgi_param HTTP_HOST $server_name; + fastcgi_pass unix:${globalConfig.services.fcgiwrap.socketAddress}; + '' + + ( + if cfg.location == "/" + then '' + fastcgi_param PATH_INFO $uri; + '' + else '' + fastcgi_split_path_info ^(${location}/)(/?.+)$; + fastcgi_param PATH_INFO $fastcgi_path_info; + '' + ); + }; + }; + })); }; - config = - let - vhosts = config.services.nginx.virtualHosts; - in + config = let + vhosts = config.services.nginx.virtualHosts; + in mkIf (any (name: vhosts.${name}.cgit.enable) (attrNames vhosts)) { # make the cgitrc manpage available - environment.systemPackages = [ pkgs.cgit-pink ]; + environment.systemPackages = [pkgs.cgit-pink]; services.fcgiwrap.enable = true; }; diff --git a/modules/cloudflare-dyndns/default.nix b/modules/cloudflare-dyndns/default.nix index c0f7bff..0e6be46 100644 --- a/modules/cloudflare-dyndns/default.nix +++ b/modules/cloudflare-dyndns/default.nix @@ -1,5 +1,4 @@ -{ config, ... }: -{ +{config, ...}: { services.cloudflare-dyndns = { enable = true; ipv4 = true; @@ -8,10 +7,15 @@ "aciceri.dev" "git.aciceri.dev" "home.aciceri.dev" - "photos.aciceri.dev" - "jelly.aciceri.dev" - "matrix.aciceri.dev" + "torrent.aciceri.dev" + "search.aciceri.dev" + "invidious.aciceri.dev" "vpn.aciceri.dev" + "cache.aciceri.dev" + "matrix.aciceri.dev" + "syncv3.matrix.aciceri.dev" + "jellyfin.aciceri.dev" + "photos.aciceri.dev" ]; apiTokenFile = config.age.secrets.cloudflare-dyndns-api-token.path; }; diff --git a/modules/common/default.nix b/modules/common/default.nix index f83e6e4..7bd90c3 100644 --- a/modules/common/default.nix +++ b/modules/common/default.nix @@ -1,10 +1,8 @@ { lib, fleetModules, - pkgs, ... -}: -{ +}: { imports = fleetModules [ "nix" "auto-upgrade" @@ -16,16 +14,4 @@ users.mutableUsers = false; i18n.defaultLocale = "en_US.UTF-8"; nixpkgs.config.allowUnfree = true; # Forgive me Mr. Stallman :( - system.switch.enableNg = true; - - environment.systemPackages = with pkgs; [ - btop - ncdu - git - ]; - - # FIXME not the best place - nixpkgs.config.permittedInsecurePackages = [ - "olm-3.2.16" - ]; } diff --git a/modules/dbus/default.nix b/modules/dbus/default.nix index a50d8d9..b481548 100644 --- a/modules/dbus/default.nix +++ b/modules/dbus/default.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ - services.dbus.packages = [ pkgs.dconf ]; +{pkgs, ...}: { + services.dbus.packages = [pkgs.dconf]; programs.dconf.enable = true; } diff --git a/modules/docker/default.nix b/modules/docker/default.nix index d2a0f2a..b49ba1d 100644 --- a/modules/docker/default.nix +++ b/modules/docker/default.nix @@ -1,16 +1,13 @@ { pkgs, + config, ... -}: -{ +}: { virtualisation.podman.enable = true; # virtualisation.docker.enable = true; environment.systemPackages = with pkgs; [ docker-compose podman-compose ]; - ccr.extraGroups = [ - "docker" - "podman" - ]; + ccr.extraGroups = ["docker" "podman"]; } diff --git a/modules/dump1090/default.nix b/modules/dump1090/default.nix deleted file mode 100644 index cf74a4e..0000000 --- a/modules/dump1090/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - pkgs, - ... -}: -let - dump1090-flake = builtins.getFlake "github:NixOS/nixpkgs/541f05042033467730fb8cedb08355dc91b94c74"; - inherit (dump1090-flake.legacyPackages.${pkgs.system}) dump1090-fa; -in -{ - imports = [ "${dump1090-flake}/nixos/modules/services/misc/dump1090-fa.nix" ]; - - hardware.rtl-sdr.enable = true; - - disabledModules = [ "services/misc/dump10190-fa.nix" ]; - documentation.nixos.enable = false; - - services.dump1090-fa = { - enable = true; - package = dump1090-fa; - }; - - services.nginx.virtualHosts."dump1090.sisko.wg.aciceri.dev" = { - forceSSL = true; - useACMEHost = "aciceri.dev"; - locations = { - "/".alias = "${dump1090-fa}/share/dump1090/"; - "/data/".alias = "/run/dump1090-fa/"; - }; - serverAliases = [ "dump1090.sisko.zt.aciceri.dev" ]; - }; -} diff --git a/modules/firefly/default.nix b/modules/firefly/default.nix deleted file mode 100644 index cb4becd..0000000 --- a/modules/firefly/default.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ pkgs, config, ... }: -let - domain = "firefly.aciceri.dev"; - domainImporter = "import.firefly.aciceri.dev"; - dbUser = config.services.firefly-iii.user; -in -{ - services.firefly-iii = { - enable = true; - package = pkgs.firefly-iii; - virtualHost = domain; - enableNginx = true; - settings = { - APP_ENV = "production"; - APP_KEY_FILE = config.age.secrets.firefly-app-key.path; - SITE_OWNER = "andrea.ciceri@autistici.org"; - DB_CONNECTION = "pgsql"; - DEFAULT_LANGUAGE = "en_US"; - TZ = "Europe/Rome"; - }; - }; - - services.firefly-iii-data-importer = { - enable = true; - enableNginx = true; - virtualHost = domainImporter; - settings = { - IGNORE_DUPLICATE_ERRORS = "false"; - APP_ENV = "production"; - APP_DEBUG = "false"; - LOG_CHANNEL = "stack"; - TRUSTED_PROXIES = "**"; - TZ = "Europe/Rome"; - FIREFLY_III_URL = "https://${domain}"; - VANITY_URL = "https://${domain}"; - }; - }; - - imports = [ ../nginx-base ]; - - services.nginx.virtualHosts = { - ${domain} = { - enableACME = true; - forceSSL = true; - }; - ${domainImporter} = { - enableACME = true; - forceSSL = true; - }; - }; - - services.postgresql = { - ensureUsers = [ - { - name = dbUser; - ensureDBOwnership = true; - ensureClauses.login = true; - } - ]; - ensureDatabases = [ dbUser ]; - }; - - environment.persistence."/persist".directories = [ - config.services.firefly-iii.dataDir - config.services.firefly-iii-data-importer.dataDir - ]; -} diff --git a/modules/fonts/default.nix b/modules/fonts/default.nix index 426f375..4fbe894 100644 --- a/modules/fonts/default.nix +++ b/modules/fonts/default.nix @@ -1,25 +1,10 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { fonts = { - packages = - with pkgs; - [ - powerline-fonts - dejavu_fonts - fira-code - fira-code-symbols - iosevka - iosevka-comfy.comfy - emacs-all-the-icons-fonts - joypixels - etBook - vegur - ] - ++ (builtins.filter lib.attrsets.isDerivation (builtins.attrValues nerd-fonts)); + packages = with pkgs; [powerline-fonts dejavu_fonts fira-code fira-code-symbols iosevka iosevka-comfy.comfy emacs-all-the-icons-fonts nerdfonts joypixels etBook vegur]; fontconfig.defaultFonts = { - monospace = [ "DejaVu Sans Mono for Powerline" ]; - sansSerif = [ "DejaVu Sans" ]; - serif = [ "DejaVu Serif" ]; + monospace = ["DejaVu Sans Mono for Powerline"]; + sansSerif = ["DejaVu Sans"]; + serif = ["DejaVu Serif"]; }; }; nixpkgs.config.joypixels.acceptLicense = true; diff --git a/modules/forgejo-runners/default.nix b/modules/forgejo-runners/default.nix index f6d7682..9c91dbf 100644 --- a/modules/forgejo-runners/default.nix +++ b/modules/forgejo-runners/default.nix @@ -1,34 +1,14 @@ # heavily based on https://discourse.nixos.org/t/gitea-nix-actions-runner-setup/35279 { config, + inputs', pkgs, lib, - fleetFlake, ... -}: -let - storeDeps = pkgs.runCommand "store-deps" { } '' +}: let + storeDeps = pkgs.runCommand "store-deps" {} '' mkdir -p $out/bin - for dir in ${ - with pkgs; - builtins.toString [ - coreutils - findutils - gnugrep - gawk - git - openssh - nix - bash - jq - nodejs - nix-fast-build - curl - tea - attic-client - fleetFlake.packages.${pkgs.system}.forgejo-report-checks - ] - }; do + for dir in ${toString [pkgs.coreutils pkgs.findutils pkgs.gnugrep pkgs.gawk pkgs.git pkgs.nix pkgs.bash pkgs.jq pkgs.nodejs inputs'.nix-fast-build.packages.nix-fast-build pkgs.curl pkgs.tea]}; do for bin in "$dir"/bin/*; do ln -s "$bin" "$out/bin/$(basename "$bin")" done @@ -39,182 +19,192 @@ let cp -a "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" $out/etc/ssl/certs/ca-bundle.crt ''; numInstances = 1; + pushToCache = pkgs.writeScript "push-to-cache.sh" '' + #!/bin/sh + set -eu + set -f # disable globbing + export IFS=' ' + + echo "Uploading paths" $OUT_PATHS + exec nix copy --to "s3://cache?profile=default®ion=eu-south-1&scheme=https&endpoint=cache.aciceri.dev" $OUT_PATHS + ''; in -lib.mkMerge [ - { - # everything here has no dependencies on the store - systemd.services.gitea-runner-nix-image = { - wantedBy = [ "multi-user.target" ]; - after = [ "podman.service" ]; - requires = [ "podman.service" ]; - path = [ - config.virtualisation.podman.package - pkgs.gnutar - pkgs.shadow - pkgs.getent - ]; - # we also include etc here because the cleanup job also wants the nixuser to be present - script = '' - set -eux -o pipefail - mkdir -p etc/nix + lib.mkMerge [ + { + # everything here has no dependencies on the store + systemd.services.gitea-runner-nix-image = { + wantedBy = ["multi-user.target"]; + after = ["podman.service"]; + requires = ["podman.service"]; + path = [config.virtualisation.podman.package pkgs.gnutar pkgs.shadow pkgs.getent]; + # we also include etc here because the cleanup job also wants the nixuser to be present + script = '' + set -eux -o pipefail + mkdir -p etc/nix - # Create an unpriveleged user that we can use also without the run-as-user.sh script - touch etc/passwd etc/group - groupid=$(cut -d: -f3 < <(getent group nixuser)) - userid=$(cut -d: -f3 < <(getent passwd nixuser)) - groupadd --prefix $(pwd) --gid "$groupid" nixuser - emptypassword='$6$1ero.LwbisiU.h3D$GGmnmECbPotJoPQ5eoSTD6tTjKnSWZcjHoVTkxFLZP17W9hRi/XkmCiAMOfWruUwy8gMjINrBMNODc7cYEo4K.' - useradd --prefix $(pwd) -p "$emptypassword" -m -d /tmp -u "$userid" -g "$groupid" -G nixuser nixuser + # Create an unpriveleged user that we can use also without the run-as-user.sh script + touch etc/passwd etc/group + groupid=$(cut -d: -f3 < <(getent group nixuser)) + userid=$(cut -d: -f3 < <(getent passwd nixuser)) + groupadd --prefix $(pwd) --gid "$groupid" nixuser + emptypassword='$6$1ero.LwbisiU.h3D$GGmnmECbPotJoPQ5eoSTD6tTjKnSWZcjHoVTkxFLZP17W9hRi/XkmCiAMOfWruUwy8gMjINrBMNODc7cYEo4K.' + useradd --prefix $(pwd) -p "$emptypassword" -m -d /tmp -u "$userid" -g "$groupid" -G nixuser nixuser - echo -n "access-tokens = " > etc/nix/access-tokens - cat ${config.age.secrets.forgejo-nix-access-tokens.path} >> etc/nix/access-tokens + echo -n "access-tokens = " > etc/nix/access-tokens + cat ${config.age.secrets.forgejo-nix-access-tokens.path} >> etc/nix/access-tokens - cat < etc/nix/nix.conf - accept-flake-config = true - experimental-features = nix-command flakes - include access-tokens - NIX_CONFIG + cat < etc/nix/nix.conf + accept-flake-config = true + experimental-features = nix-command flakes + post-build-hook = ${pushToCache} + include access-tokens + NIX_CONFIG - cat < etc/nsswitch.conf - passwd: files mymachines systemd - group: files mymachines systemd - shadow: files + cat < etc/nsswitch.conf + passwd: files mymachines systemd + group: files mymachines systemd + shadow: files - hosts: files mymachines dns myhostname - networks: files + hosts: files mymachines dns myhostname + networks: files - ethers: files - services: files - protocols: files - rpc: files - NSSWITCH + ethers: files + services: files + protocols: files + rpc: files + NSSWITCH - # list the content as it will be imported into the container - tar -cv . | tar -tvf - - tar -cv . | podman import - gitea-runner-nix - ''; - serviceConfig = { - RuntimeDirectory = "gitea-runner-nix-image"; - WorkingDirectory = "/run/gitea-runner-nix-image"; - Type = "oneshot"; - RemainAfterExit = true; + # list the content as it will be imported into the container + tar -cv . | tar -tvf - + tar -cv . | podman import - gitea-runner-nix + ''; + serviceConfig = { + RuntimeDirectory = "gitea-runner-nix-image"; + WorkingDirectory = "/run/gitea-runner-nix-image"; + Type = "oneshot"; + RemainAfterExit = true; + }; }; - }; - users.users.nixuser = { - group = "nixuser"; - description = "Used for running nix ci jobs"; - home = "/var/empty"; - isSystemUser = true; - # extraGroups = [ "podman" ]; - }; - users.groups.nixuser = { }; - nix.settings.trusted-users = [ "nixuser" ]; - } - { - virtualisation = { - podman.enable = true; - }; - } - { - systemd.services = - lib.genAttrs (builtins.genList (n: "gitea-runner-nix${builtins.toString n}") numInstances) - (_name: { - # TODO: systemd confinment - serviceConfig = { - # Hardening (may overlap with DynamicUser=) - # The following options are only for optimizing output of systemd-analyze - AmbientCapabilities = ""; - CapabilityBoundingSet = ""; - # ProtectClock= adds DeviceAllow=char-rtc r - DeviceAllow = ""; - NoNewPrivileges = true; - PrivateDevices = true; - PrivateMounts = true; - PrivateTmp = true; - PrivateUsers = true; - ProtectClock = true; - ProtectControlGroups = true; - ProtectHome = true; - ProtectHostname = true; - ProtectKernelLogs = true; - ProtectKernelModules = true; - ProtectKernelTunables = true; - ProtectSystem = "strict"; - RemoveIPC = true; - RestrictNamespaces = true; - RestrictRealtime = true; - RestrictSUIDSGID = true; - UMask = "0066"; - ProtectProc = "invisible"; - SystemCallFilter = [ - "~@clock" - "~@cpu-emulation" - "~@module" - "~@mount" - "~@obsolete" - "~@raw-io" - "~@reboot" - "~@swap" - # needed by go? - #"~@resources" - "~@privileged" - "~capset" - "~setdomainname" - "~sethostname" - ]; - RestrictAddressFamilies = [ - "AF_INET" - "AF_INET6" - "AF_UNIX" - "AF_NETLINK" - ]; + users.users.nixuser = { + group = "nixuser"; + description = "Used for running nix ci jobs"; + home = "/var/empty"; + isSystemUser = true; + # extraGroups = [ "podman" ]; + }; + users.groups.nixuser = {}; + } + { + # Format of the token file: + virtualisation = { + podman.enable = true; + }; - # Needs network access - PrivateNetwork = false; - # Cannot be true due to Node - MemoryDenyWriteExecute = false; + # virtualisation.containers.storage.settings = { + # storage.driver = "zfs"; + # storage.graphroot = "/var/lib/containers/storage"; + # storage.runroot = "/run/containers/storage"; + # storage.options.zfs.fsname = "zroot/root/podman"; + # }; - # The more restrictive "pid" option makes `nix` commands in CI emit - # "GC Warning: Couldn't read /proc/stat" - # You may want to set this to "pid" if not using `nix` commands - ProcSubset = "all"; - # Coverage programs for compiled code such as `cargo-tarpaulin` disable - # ASLR (address space layout randomization) which requires the - # `personality` syscall - # You may want to set this to `true` if not using coverage tooling on - # compiled code - LockPersonality = false; - - # Note that this has some interactions with the User setting; so you may - # want to consult the systemd docs if using both. - DynamicUser = true; - }; - }); - - services.gitea-actions-runner = { - package = pkgs.forgejo-actions-runner; - instances = lib.genAttrs (builtins.genList (n: "nix${builtins.toString n}") numInstances) (name: { - enable = true; - name = "nix-runner"; - # take the git root url from the gitea config - # only possible if you've also configured your gitea though the same nix config - # otherwise you need to set it manually - url = "https://git.aciceri.dev"; - # use your favourite nix secret manager to get a path for this - tokenFile = config.age.secrets.forgejo-runners-token.path; - labels = [ "nix:docker://gitea-runner-nix" ]; - settings = { - container.options = "-e NIX_BUILD_SHELL=/bin/bash -e PAGER=cat -e PATH=/bin -e SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt --device /dev/kvm -v /nix:/nix -v ${storeDeps}/bin:/bin -v ${storeDeps}/etc/ssl:/etc/ssl --user nixuser --device=/dev/kvm"; - # the default network that also respects our dns server settings - container.network = "host"; - container.valid_volumes = [ - "/nix" - "${storeDeps}/bin" - "${storeDeps}/etc/ssl" + # virtualisation.containers.containersConf.settings = { + # # podman seems to not work with systemd-resolved + # containers.dns_servers = [ "8.8.8.8" "8.8.4.4" ]; + # }; + } + { + systemd.services = lib.genAttrs (builtins.genList (n: "gitea-runner-nix${builtins.toString n}") numInstances) (name: { + # TODO: systemd confinment + serviceConfig = { + # Hardening (may overlap with DynamicUser=) + # The following options are only for optimizing output of systemd-analyze + AmbientCapabilities = ""; + CapabilityBoundingSet = ""; + # ProtectClock= adds DeviceAllow=char-rtc r + DeviceAllow = ""; + NoNewPrivileges = true; + PrivateDevices = true; + PrivateMounts = true; + PrivateTmp = true; + PrivateUsers = true; + ProtectClock = true; + ProtectControlGroups = true; + ProtectHome = true; + ProtectHostname = true; + ProtectKernelLogs = true; + ProtectKernelModules = true; + ProtectKernelTunables = true; + ProtectSystem = "strict"; + RemoveIPC = true; + RestrictNamespaces = true; + RestrictRealtime = true; + RestrictSUIDSGID = true; + UMask = "0066"; + ProtectProc = "invisible"; + SystemCallFilter = [ + "~@clock" + "~@cpu-emulation" + "~@module" + "~@mount" + "~@obsolete" + "~@raw-io" + "~@reboot" + "~@swap" + # needed by go? + #"~@resources" + "~@privileged" + "~capset" + "~setdomainname" + "~sethostname" ]; + RestrictAddressFamilies = ["AF_INET" "AF_INET6" "AF_UNIX" "AF_NETLINK"]; + + # Needs network access + PrivateNetwork = false; + # Cannot be true due to Node + MemoryDenyWriteExecute = false; + + # The more restrictive "pid" option makes `nix` commands in CI emit + # "GC Warning: Couldn't read /proc/stat" + # You may want to set this to "pid" if not using `nix` commands + ProcSubset = "all"; + # Coverage programs for compiled code such as `cargo-tarpaulin` disable + # ASLR (address space layout randomization) which requires the + # `personality` syscall + # You may want to set this to `true` if not using coverage tooling on + # compiled code + LockPersonality = false; + + # Note that this has some interactions with the User setting; so you may + # want to consult the systemd docs if using both. + DynamicUser = true; }; }); - }; - } -] + + services.gitea-actions-runner = { + package = pkgs.forgejo-actions-runner; + instances = lib.genAttrs (builtins.genList (n: "nix${builtins.toString n}") numInstances) (name: { + enable = true; + name = "nix-runner"; + # take the git root url from the gitea config + # only possible if you've also configured your gitea though the same nix config + # otherwise you need to set it manually + url = "https://git.aciceri.dev"; + # use your favourite nix secret manager to get a path for this + tokenFile = config.age.secrets.forgejo-runners-token.path; + labels = ["nix:docker://gitea-runner-nix"]; + settings = { + container.options = "-e NIX_BUILD_SHELL=/bin/bash -e PAGER=cat -e PATH=/bin -e SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt --device /dev/kvm -v /nix:/nix -v ${storeDeps}/bin:/bin -v ${storeDeps}/etc/ssl:/etc/ssl --user nixuser --device=/dev/kvm"; + # the default network that also respects our dns server settings + container.network = "host"; + container.valid_volumes = [ + "/nix" + "${storeDeps}/bin" + "${storeDeps}/etc/ssl" + ]; + }; + }); + }; + } + ] diff --git a/modules/forgejo/default.nix b/modules/forgejo/default.nix index 7b690dc..8a1f821 100644 --- a/modules/forgejo/default.nix +++ b/modules/forgejo/default.nix @@ -1,35 +1,10 @@ { config, pkgs, - lib, ... -}: -let - theme = pkgs.fetchzip { - url = "https://github.com/catppuccin/gitea/releases/download/v1.0.1/catppuccin-gitea.tar.gz"; - hash = "sha256-et5luA3SI7iOcEIQ3CVIu0+eiLs8C/8mOitYlWQa/uI="; - stripRoot = false; - }; -in -{ - systemd.services = { - forgejo = { - preStart = - let - inherit (config.services.forgejo) stateDir; - in - lib.mkAfter '' - rm -rf ${stateDir}/custom/public/assets - mkdir -p ${stateDir}/custom/public/assets - ln -sf ${theme} ${stateDir}/custom/public/assets/css - ''; - }; - }; - +}: { services.forgejo = { - # TODO migrate to Postgres enable = true; - package = pkgs.forgejo; settings = { DEFAULT = { RUN_MODE = "prod"; # set to prod for better logs (worse performance) @@ -42,7 +17,6 @@ in HTTP_PORT = 3002; ROOT_URL = "https://git.aciceri.dev"; }; - federation.ENABLED = true; mailer = { ENABLED = true; PROTOCOL = "smtp+starttls"; @@ -54,40 +28,26 @@ in other = { SHOW_FOOTER_VERSION = false; }; - ui = { - DEFAULT_THEME = "catppuccin-mocha-blue"; - THEMES = builtins.concatStringsSep "," ( - [ "auto,forgejo-auto,forgejo-dark,forgejo-light,arc-gree,gitea" ] - ++ (map (name: lib.removePrefix "theme-" (lib.removeSuffix ".css" name)) ( - builtins.attrNames (builtins.readDir theme) - )) - ); - }; - "ui.meta" = { - AUTHOR = "Andrea Ciceri"; - DESCRIPTION = "My personal git forge"; - KEYWORDS = "git,self-hosted,forgejo,open-source,nix,nixos"; - }; - }; - secrets.mailer.PASSWD = config.age.secrets.autistici-password.path; - dump = { - enable = true; - backupDir = "/mnt/hd/forgejo-dumps"; }; + mailerPasswordFile = config.age.secrets.autistici-password.path; + dump.enable = true; }; - environment.persistence."/persist".directories = [ + systemd.tmpfiles.rules = [ + "d ${config.services.forgejo.stateDir} 770 forgejo forgejo" + ]; + + backup.paths = [ config.services.forgejo.stateDir ]; - imports = [ ../nginx-base ]; + imports = [../nginx-base]; services.nginx.virtualHosts = { "git.aciceri.dev" = { enableACME = true; forceSSL = true; - locations."/".proxyPass = - "http://127.0.0.1:${builtins.toString config.services.forgejo.settings.server.HTTP_PORT}"; + locations."/".proxyPass = "http://127.0.0.1:${builtins.toString config.services.forgejo.settings.server.HTTP_PORT}"; }; }; } diff --git a/modules/fprintd/default.nix b/modules/fprintd/default.nix index dcb13ec..85508db 100644 --- a/modules/fprintd/default.nix +++ b/modules/fprintd/default.nix @@ -1,5 +1,5 @@ { - imports = [ ../pam ]; + imports = [../pam]; services.fprintd = { enable = false; # temporarily disable diff --git a/modules/garmin-collector/default.nix b/modules/garmin-collector/default.nix deleted file mode 100644 index 5b0a72d..0000000 --- a/modules/garmin-collector/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ - pkgs, - lib, - fleetFlake, - config, - ... -}: -{ - users.users.garmin-collector = { - isSystemUser = true; - group = "garmin-collector"; - extraGroups = [ "garmin-collector" ]; - home = "/var/lib/garmin-collector"; - }; - - users.groups.garmin-collector = { }; - - systemd.services.garmin-collector = { - description = "Garmin collector pushing to Prometheus Pushgateway"; - wantedBy = [ "multi-user.target" ]; - environment = { - PUSHGATEWAY_ADDRESS = config.services.prometheus.pushgateway.web.listen-address; - }; - serviceConfig = { - Group = "garmin-collector"; - User = "garmin-collector"; - WorkingDirectory = "/var/lib/garmin-collector"; - ExecStart = '' - ${lib.getExe fleetFlake.packages.${pkgs.system}.garmin-collector} - ''; - EnvironmentFile = config.age.secrets.garmin-collector-environment.path; - }; - }; - - systemd.timers."garmin-collector" = { - wantedBy = [ "timers.target" ]; - timerConfig = { - OnBootSec = "5m"; - OnUnitActiveSec = "4h"; - Unit = "garmin-collector.service"; - }; - }; - - environment.persistence."/persist".directories = [ - "/var/lib/garmin-collector" - ]; -} diff --git a/modules/garmin-grafana/default.nix b/modules/garmin-grafana/default.nix deleted file mode 100644 index e75b15b..0000000 --- a/modules/garmin-grafana/default.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: -let - rev = "f24579d13ee035af96d4a68b765af2aa4b1018b6"; - garmin-grafana-flake = builtins.getFlake "github:NixOS/nixpkgs/${rev}"; - inherit (garmin-grafana-flake.legacyPackages.${pkgs.system}) garmin-grafana; -in -{ - users.users.garmin-grafana = { - isSystemUser = true; - group = "garmin-grafana"; - extraGroups = [ "garmin-grafana" ]; - home = "/var/lib/garmin-grafana"; - }; - - users.groups.garmin-grafana = { }; - - systemd.services.garmin-grafana = { - description = "garmin-grafana"; - wantedBy = [ "multi-user.target" ]; - environment = { - INFLUXDB_HOST = "localhost"; - INFLUXDB_PORT = "8086"; # it's hardcoded in the influxdb NixOS module - INFLUXDB_USERNAME = "garmin-grafana"; - INFLUXDB_PASSWORD = "password"; # FIXME terrible but the databse is not exposed at least - INFLUXDB_DATABASE = "garmin-stats"; - GARMINCONNECT_IS_CN = "False"; - USER_TIMEZONE = "Europe/Rome"; - KEEP_FIT_FILES = "True"; - ALWAYS_PROCESS_FIT_FILES = "True"; - # MANUAL_START_DATE = "2024-06-01"; - # MANUAL_END_DATE = "2025-12-31"; - }; - serviceConfig = { - ExecStart = lib.getExe garmin-grafana; - Group = "garmin-grafana"; - User = "garmin-grafana"; - WorkingDirectory = "/var/lib/garmin-grafana"; - }; - }; - - # garmin-grafana uses influxdb V1, probably it's the only software I'll ever use using the V1 - # so I"m keeping its declaration inside this module - services.influxdb.enable = true; - - environment.persistence."/persist".directories = [ - "/var/lib/garmin-grafana" - config.services.influxdb.dataDir - ]; -} diff --git a/modules/grafana/default.nix b/modules/grafana/default.nix deleted file mode 100644 index 5466fd2..0000000 --- a/modules/grafana/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ config, ... }: -let - cfg = config.services.grafana; -in -{ - services.grafana = { - enable = true; - settings = { - server = { - domain = "status.sisko.aciceri.dev"; - http_addr = "127.0.0.1"; - http_port = 2342; - root_url = "https://${config.services.grafana.settings.server.domain}:443/"; - }; - security = { - admin_user = "andrea"; - admin_password = "$__file{${config.age.secrets.grafana-password.path}}"; - }; - smtp = { - enabled = true; - host = "smtp.autistici.org:587"; - user = "andrea.ciceri@autistici.org"; - from_address = "andrea.ciceri@autistici.org"; - password = "$__file{${config.age.secrets.autistici-password.path}}"; - }; - }; - }; - environment.persistence."/persist".directories = [ - cfg.dataDir - ]; - - services.nginx.virtualHosts = { - "status.sisko.wg.aciceri.dev" = { - useACMEHost = "aciceri.dev"; - forceSSL = true; - locations."/".proxyPass = "http://127.0.0.1:${builtins.toString cfg.settings.server.http_port}"; - serverAliases = [ "status.sisko.zt.aciceri.dev" ]; - }; - }; -} diff --git a/modules/greetd/default.nix b/modules/greetd/default.nix index 57b1acb..47e5f2b 100644 --- a/modules/greetd/default.nix +++ b/modules/greetd/default.nix @@ -2,39 +2,19 @@ pkgs, lib, ... -}: -let +}: let sessions = builtins.concatStringsSep ":" [ - # (pkgs.writeTextFile { - # name = "xorg-session.desktop"; - # destination = "/hyprland-session.desktop"; - # text = '' - # [Desktop Entry] - # Name=Hyprland - # Exec=Hyprland - # ''; - # }) - # (pkgs.writeTextFile { - # name = "xorg-session.desktop"; - # destination = "/cosmic-session.desktop"; - # text = '' - # [Desktop Entry] - # Name=Cosmic - # Exec=cosmic-session - # ''; - # }) (pkgs.writeTextFile { name = "xorg-session.desktop"; - destination = "/niri-session.desktop"; + destination = "/hyprland-session.desktop"; text = '' [Desktop Entry] - Name=Niri - Exec=${lib.getExe' pkgs.niri "niri-session"} + Name=Hyprland + Exec=Hyprland ''; }) ]; -in -{ +in { services.greetd = { enable = true; vt = 2; diff --git a/modules/grocy/default.nix b/modules/grocy/default.nix index 16d730e..72ba8bc 100644 --- a/modules/grocy/default.nix +++ b/modules/grocy/default.nix @@ -2,11 +2,10 @@ pkgs, config, ... -}: -{ +}: { nixpkgs.overlays = [ - (_self: super: { - grocy = super.grocy.overrideAttrs (_old: { + (self: super: { + grocy = super.grocy.overrideAttrs (old: { meta.broken = false; version = "4.0.1"; src = pkgs.fetchFromGitHub { diff --git a/modules/hass-poweroff/default.nix b/modules/hass-poweroff/default.nix index d9ad3a2..4312093 100644 --- a/modules/hass-poweroff/default.nix +++ b/modules/hass-poweroff/default.nix @@ -1,17 +1,14 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { # Creates an user that home assistant can log in as to power off the system users.users.hass = { - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFcoVVrMFili8UBjziIu2wyFgcDGTlT1avBh2nLTa9aM" - ]; + openssh.authorizedKeys.keys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFcoVVrMFili8UBjziIu2wyFgcDGTlT1avBh2nLTa9aM"]; isNormalUser = true; isSystemUser = false; group = "hass"; createHome = false; }; - users.groups.hass = { }; + users.groups.hass = {}; security.sudo.extraConfig = '' hass ALL=NOPASSWD:${pkgs.systemd}/bin/systemctl diff --git a/modules/hercules-ci/default.nix b/modules/hercules-ci/default.nix index 8160afd..f2cc077 100644 --- a/modules/hercules-ci/default.nix +++ b/modules/hercules-ci/default.nix @@ -1,5 +1,4 @@ -{ config, ... }: -{ +{config, ...}: { services.hercules-ci-agent = { enable = true; settings = { diff --git a/modules/home-assistant/default.nix b/modules/home-assistant/default.nix index 3801ed8..99f86c7 100644 --- a/modules/home-assistant/default.nix +++ b/modules/home-assistant/default.nix @@ -2,27 +2,72 @@ pkgs, config, ... -}: -let +}: let + smartthings-fork = pkgs.fetchFromGitHub { + owner = "veista"; + repo = "smartthings"; + rev = "ba1a6f33c6ac37d81f4263073571628803e79697"; + sha256 = "sha256-X3SYkg0B5pzEich7/4iUmlADJneVuT8HTVnIiC7odRE="; + }; pun_sensor = pkgs.fetchFromGitHub { owner = "virtualdj"; repo = "pun_sensor"; - rev = "51b216fab5c0d454d66060647c36e81bebfaf059"; - hash = "sha256-bGVJx3bObXdf4AiC6bDvafs53NGS2aufRcTUmXy8nAI="; + rev = "19f270b353594ab536f9dc42adf31427e7a81562"; + hash = "sha256-3pL+8CXzjmR54Ff9qLhHzC/C+uns0qWEgJFHv+K4MFs="; }; - garmin_connect = pkgs.fetchFromGitHub { - owner = "cyberjunky"; - repo = "home-assistant-garmin_connect"; - rev = "e2deaed42b66c982b150ca9a9e543031ad51228c"; - hash = "sha256-TtrcgLGnhNRBF1SqKMkPlEi/XEBUtDAnaWfzkh50+D8="; + cozy_life = pkgs.fetchFromGitHub { + owner = "yangqian"; + repo = "hass-cozylife"; + rev = "9a40a2fa09b0f74aee0b278e2858f5600b3487a9"; + hash = "sha256-i+82EUamV1Fhwhb1vhRqn9aA9dJ0FxSSMD734domyhw="; }; -in -{ + tuya-device-sharing-sdk = ps: + ps.callPackage ( + { + lib, + buildPythonPackage, + fetchPypi, + requests, + paho-mqtt, + cryptography, + }: let + pname = "tuya-device-sharing-sdk"; + version = "0.2.0"; + in + buildPythonPackage { + inherit pname version; + + src = fetchPypi { + inherit pname version; + hash = "sha256-fu8zh59wlnxtstNbNL8mIm10tiXy22oPbi6oUy5x8c8="; + }; + + postPatch = '' + touch requirements.txt + ''; + + doCheck = false; + + propagatedBuildInputs = [ + requests + paho-mqtt + cryptography + ]; + + meta = with lib; { + description = "Tuya Device Sharing SDK"; + homepage = "https://github.com/tuya/tuya-device-sharing-sdk"; + license = licenses.mit; + maintainers = with maintainers; [aciceri]; + }; + } + ) {}; +in { services.home-assistant = { enable = true; openFirewall = true; - package = pkgs.home-assistant.overrideAttrs (_old: { - doInstallCheck = false; + package = pkgs.home-assistant.overrideAttrs (old: { + # doInstallCheck = false; # prePatch = # '' # rm -rf homeassistant/components/smartthings @@ -49,53 +94,60 @@ in "media_player" "wyoming" "wake_on_lan" - "prometheus" - "openai_conversation" ]; - customComponents = with pkgs.home-assistant-custom-components; [ - tuya_local - localtuya - ]; - extraPackages = - python3Packages: with python3Packages; [ + extraPackages = python3Packages: + with python3Packages; [ # used by pun_sensor holidays beautifulsoup4 - tuya-device-sharing-sdk - getmac - garminconnect - tzlocal + (tuya-device-sharing-sdk python3Packages) # remove after https://github.com/NixOS/nixpkgs/pull/294706/ ]; config = { - default_config = { }; + default_config = {}; http = { use_x_forwarded_for = true; - trusted_proxies = [ - "127.0.0.1" - "::1" - ]; + trusted_proxies = ["127.0.0.1" "::1"]; }; + # ffmpeg = {}; + # camera = [ + # { + # name = "EyeToy"; + # platform = "ffmpeg"; + # input = "/dev/video1"; + # extra_arguments = "-vcodec h264"; + # } + # ]; homeassistant = { unit_system = "metric"; time_zone = "Europe/Rome"; temperature_unit = "C"; external_url = "https://home.aciceri.dev"; + internal_url = "http://rock5b.fleet:8123"; }; logger.default = "WARNING"; - wake_on_lan = { }; + # backup = {}; + # media_player = [{ + # platform = "webostv"; + # host = "10.1.1.213"; + # name = "TV"; + # timeout = "5"; + # turn_on_action = { + # service = "wake_on_lan.send_magic_packet"; + # data.mac = "20:28:bc:74:14:c2"; + # }; + # }]; + wake_on_lan = {}; switch = [ { name = "Picard"; platform = "wake_on_lan"; mac = "74:56:3c:37:17:bd"; # this shouldn't be public - host = "picard.wg.aciceri.dev"; + host = "picard.fleet"; turn_off.service = "shell_command.turn_off_picard"; } ]; shell_command.turn_off_picard = ''${pkgs.openssh}/bin/ssh -i /var/lib/hass/.ssh/id_ed25519 -o StrictHostKeyChecking=no hass@picard.fleet "exec sudo \$(readlink \$(which systemctl)) poweroff"''; - prometheus = { - namespace = "hass"; - }; + # shell_command.turn_off_picard = ''whoami''; }; }; @@ -110,8 +162,7 @@ in systemd.tmpfiles.rules = [ "d ${config.services.home-assistant.configDir}/custom_components 770 hass hass" - "C+ ${config.services.home-assistant.configDir}/custom_components/pun_sensor 770 hass hass - ${pun_sensor}/custom_components/pun_sensor" - "C+ ${config.services.home-assistant.configDir}/custom_components/garmin_connect 770 hass hass - ${garmin_connect}/custom_components/garmin_connect" + "L+ ${config.services.home-assistant.configDir}/custom_components/pun_sensor - - - - ${pun_sensor}/custom_components/pun_sensor" "d ${config.services.home-assistant.configDir}/.ssh 770 hass hass" "C ${config.services.home-assistant.configDir}/.ssh/id_ed25519 700 hass hass - ${config.age.secrets.hass-ssh-key.path}" @@ -140,7 +191,7 @@ in containers = { whisper = { image = "rhasspy/wyoming-whisper:latest"; - ports = [ "10300:10300" ]; + ports = ["10300:10300"]; cmd = [ "--model" "medium-int8" @@ -150,7 +201,7 @@ in }; piper = { image = "rhasspy/wyoming-piper:latest"; - ports = [ "10200:10200" ]; + ports = ["10200:10200"]; cmd = [ "--voice" "it_IT-riccardo-x_low" @@ -159,23 +210,10 @@ in }; }; - environment.persistence."/persist".directories = [ - config.services.home-assistant.configDir + backup.paths = [ + "/var/lib/hass" ]; - services.nginx.virtualHosts."home.aciceri.dev" = { - forceSSL = true; - enableACME = true; - locations."/" = { - proxyPass = "http://localhost:${builtins.toString config.services.home-assistant.config.http.server_port}"; - proxyWebsockets = true; - }; - extraConfig = '' - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - ''; - }; - # virtualisation.oci-containers = { # backend = "podman"; # containers.homeassistant = { diff --git a/modules/hydra/config.nix b/modules/hydra/config.nix index dc0ed77..39e8e7e 100644 --- a/modules/hydra/config.nix +++ b/modules/hydra/config.nix @@ -1,8 +1,8 @@ { services.my-hydra.repos = { - emacs = { }; - nixfleet = { }; - trotten = { }; - blog = { }; + emacs = {}; + nixfleet = {}; + trotten = {}; + blog = {}; }; } diff --git a/modules/hydra/default.nix b/modules/hydra/default.nix index d0331fd..c95fdd8 100644 --- a/modules/hydra/default.nix +++ b/modules/hydra/default.nix @@ -3,63 +3,58 @@ config, pkgs, ... -}: -let +}: let cfg = config.services.my-hydra; - toSpec = - { - name, - owner, - ... - }: - let - spec = { - enabled = 1; - hidden = false; - description = "Declarative specification jobset automatically generated"; - checkinterval = 120; - schedulingshares = 10000; - enableemail = false; - emailoverride = ""; - keepnr = 1; - nixexprinput = "src"; - nixexprpath = "jobsets.nix"; - inputs = { - src = { - type = "path"; - value = pkgs.writeTextFile { - name = "src"; - text = builtins.readFile ./jobsets.nix; - destination = "/jobsets.nix"; + toSpec = { + name, + owner, + ... + }: let + spec = { + enabled = 1; + hidden = false; + description = "Declarative specification jobset automatically generated"; + checkinterval = 120; + schedulingshares = 10000; + enableemail = false; + emailoverride = ""; + keepnr = 1; + nixexprinput = "src"; + nixexprpath = "jobsets.nix"; + inputs = { + src = { + type = "path"; + value = pkgs.writeTextFile { + name = "src"; + text = builtins.readFile ./jobsets.nix; + destination = "/jobsets.nix"; + }; + emailresponsible = false; + }; + repoInfoPath = { + type = "path"; + value = pkgs.writeTextFile { + name = "repo"; + text = builtins.toJSON { + inherit name owner; }; - emailresponsible = false; - }; - repoInfoPath = { - type = "path"; - value = pkgs.writeTextFile { - name = "repo"; - text = builtins.toJSON { - inherit name owner; - }; - }; - emailresponsible = false; - }; - prs = { - type = "githubpulls"; - value = "${owner} ${name}"; - emailresponsible = false; }; + emailresponsible = false; + }; + prs = { + type = "githubpulls"; + value = "${owner} ${name}"; + emailresponsible = false; }; }; - drv = pkgs.writeTextFile { - name = "hydra-jobset-specification-${name}"; - text = builtins.toJSON spec; - destination = "/spec.json"; - }; - in - "${drv}"; -in -{ + }; + drv = pkgs.writeTextFile { + name = "hydra-jobset-specification-${name}"; + text = builtins.toJSON spec; + destination = "/spec.json"; + }; + in "${drv}"; +in { imports = [ ./config.nix ../nginx-base @@ -71,40 +66,35 @@ in default = "hydra.aciceri.dev"; }; repos = lib.mkOption { - type = lib.types.attrsOf ( - lib.types.submodule ( - { - name, - config, - ... - }: - { - options = { - name = lib.mkOption { - type = lib.types.str; - default = name; - }; - owner = lib.mkOption { - type = lib.types.str; - default = "aciceri"; - }; - description = lib.mkOption { - type = lib.types.str; - default = config.homepage; - }; - homepage = lib.mkOption { - type = lib.types.str; - default = "https://github.com/${config.owner}/${config.name}"; - }; - reportStatus = lib.mkOption { - type = lib.types.bool; - default = true; - }; - }; - } - ) - ); - default = { }; + type = lib.types.attrsOf (lib.types.submodule ({ + name, + config, + ... + }: { + options = { + name = lib.mkOption { + type = lib.types.str; + default = name; + }; + owner = lib.mkOption { + type = lib.types.str; + default = "aciceri"; + }; + description = lib.mkOption { + type = lib.types.str; + default = config.homepage; + }; + homepage = lib.mkOption { + type = lib.types.str; + default = "https://github.com/${config.owner}/${config.name}"; + }; + reportStatus = lib.mkOption { + type = lib.types.bool; + default = true; + }; + }; + })); + default = {}; }; }; @@ -125,38 +115,28 @@ in include ${config.age.secrets.hydra-github-token.path} '' - + (lib.concatMapStrings ( - repo: - lib.optionalString repo.reportStatus '' + + (lib.concatMapStrings (repo: + lib.optionalString repo.reportStatus + '' jobs = ${repo.name}.* excludeBuildFromContext = 1 useShortContext = 1 - '' - ) (builtins.attrValues cfg.repos)); + '') (builtins.attrValues cfg.repos)); }; systemd.services.hydra-setup = { description = "Hydra CI setup"; serviceConfig.Type = "oneshot"; serviceConfig.RemainAfterExit = true; - wantedBy = [ "multi-user.target" ]; - requires = [ "hydra-init.service" ]; - after = [ "hydra-init.service" ]; - environment = builtins.removeAttrs (config.systemd.services.hydra-init.environment) [ "PATH" ]; + wantedBy = ["multi-user.target"]; + requires = ["hydra-init.service"]; + after = ["hydra-init.service"]; + environment = builtins.removeAttrs (config.systemd.services.hydra-init.environment) ["PATH"]; script = '' - PATH=$PATH:${ - lib.makeBinPath ( - with pkgs; - [ - yq-go - curl - config.services.hydra.package - ] - ) - } + PATH=$PATH:${lib.makeBinPath (with pkgs; [yq-go curl config.services.hydra.package])} PASSWORD="$(cat ${config.age.secrets.hydra-admin-password.path})" if [ ! -e ~hydra/.setup-is-complete ]; then hydra-create-user admin \ diff --git a/modules/hydra/jobsets.nix b/modules/hydra/jobsets.nix index f44a79f..fed7df8 100644 --- a/modules/hydra/jobsets.nix +++ b/modules/hydra/jobsets.nix @@ -2,45 +2,42 @@ repoInfoPath, prs, ... -}: -let +}: let minutes = 60; - mapAttrs' = f: set: builtins.listToAttrs (map (attr: f attr set.${attr}) (builtins.attrNames set)); - - mkJobset = - { - enabled ? 1, - hidden ? false, - type ? 1, - description ? "", - checkinterval ? 5 * minutes, - schedulingshares ? 100, - enableemail ? false, - emailoverride ? "", - keepnr ? 1, - flake, - }: - { - inherit - enabled - hidden - type - description - checkinterval - schedulingshares - enableemail - emailoverride - keepnr - flake - ; - }; - - mkSpec = - contents: - let - escape = builtins.replaceStrings [ ''"'' ] [ ''\"'' ]; - contentsJson = builtins.toJSON contents; + hours = 60 * minutes; + days = 24 * hours; + filterAttrs = pred: set: + builtins.listToAttrs (builtins.concatMap (name: let + v = set.${name}; in + if pred name v + then [ + { + inherit name; + value = v; + } + ] + else []) (builtins.attrNames set)); + mapAttrs' = f: set: + builtins.listToAttrs (map (attr: f attr set.${attr}) (builtins.attrNames set)); + + mkJobset = { + enabled ? 1, + hidden ? false, + type ? 1, + description ? "", + checkinterval ? 5 * minutes, + schedulingshares ? 100, + enableemail ? false, + emailoverride ? "", + keepnr ? 1, + flake, + } @ args: {inherit enabled hidden type description checkinterval schedulingshares enableemail emailoverride keepnr flake;}; + + mkSpec = contents: let + escape = builtins.replaceStrings [''"''] [''\"'']; + contentsJson = builtins.toJSON contents; + in builtins.derivation { name = "spec.json"; system = "x86_64-linux"; @@ -57,21 +54,20 @@ let repo = builtins.fromJSON (builtins.readFile repoInfoPath); pullRequests = builtins.fromJSON (builtins.readFile prs); -in -{ - jobsets = mkSpec ( - { + pullRequestsToBuild = filterAttrs (n: pr: pr.head.repo != null && pr.head.repo.owner.login == repo.owner && pr.head.repo.name == repo.name) pullRequests; +in { + jobsets = mkSpec ({ master = mkJobset { description = "${repo.name}'s master branch"; flake = "git+ssh://git@github.com/${repo.owner}/${repo.name}?ref=master"; }; } // (mapAttrs' (n: pr: { - name = "pullRequest_${n}"; - value = mkJobset { - description = pr.title; - flake = "git+ssh://git@github.com/${repo.owner}/${repo.name}?ref=${pr.head.ref}"; - }; - }) pullRequests) - ); + name = "pullRequest_${n}"; + value = mkJobset { + description = pr.title; + flake = "git+ssh://git@github.com/${repo.owner}/${repo.name}?ref=${pr.head.ref}"; + }; + }) + pullRequests)); } diff --git a/modules/immich/default.nix b/modules/immich/default.nix index 505d325..54e0a9f 100644 --- a/modules/immich/default.nix +++ b/modules/immich/default.nix @@ -1,37 +1,221 @@ -{ config, ... }: -{ - environment.persistence."/persist".directories = [ - config.services.immich.machine-learning.environment.MACHINE_LEARNING_CACHE_FOLDER - ]; +# { lib, pkgs, config, ... }: +# let +# immichRoot = "/mnt/hd/immich"; +# immichData = "${immichRoot}/data"; +# # immichVersion = "v1.105.1"; +# immichVersion = "v1.105.1"; +# sharedEnv = { +# # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables +# # The location where your uploaded files are stored +# UPLOAD_LOCATION="./library"; +# DB_DATA_LOCATION="./postgres"; +# IMMICH_VERSION=immichVersion; +# DB_PASSWORD="postgres"; +# DB_USERNAME="postgres"; +# DB_DATABASE_NAME="immich"; +# DB_HOSTNAME="postgres"; +# REDIS_HOSTNAME = "redis"; +# }; +# postgresRoot = "${immichRoot}/pgsql"; +# machineLearning = "${immichRoot}/ml-cache"; +# in { +# systemd.tmpfiles.rules = [ +# "d ${immichRoot} 770 ccr wheel" +# "d ${immichData} 770 ccr wheel" +# "d ${postgresRoot} 770 ccr wheel" +# "d ${machineLearning} 770 ccr wheel" +# ]; +# virtualisation.docker.enable = lib.mkForce false; +# virtualisation.podman.enable = lib.mkForce true; +# virtualisation.podman.dockerSocket.enable = lib.mkForce true; +# virtualisation.podman.defaultNetwork.settings.dns_enabled = lib.mkForce true; +# networking.firewall.interfaces."podman+".allowedUDPPorts = [53 5353]; +# environment.systemPackages = [ +# pkgs.arion +# ]; +# virtualisation.arion = { +# backend = lib.mkForce "podman-socket"; +# projects.immich = { +# serviceName = "immich"; +# settings = { +# project.name = "immich"; +# networks.default = { +# name = "immich"; +# }; +# services = { +# "server" = { +# service = { +# image = "ghcr.io/immich-app/immich-server:${immichVersion}"; +# container_name = "server"; +# command = ["start.sh" "immich"]; +# environment = sharedEnv // { +# # NODE_ENV = "production"; +# }; +# ports = [ +# "2283:3001" +# ]; +# volumes = [ +# "${immichData}:/usr/src/app/upload:rw" +# "/etc/localtime:/etc/localtime:ro" +# ]; +# depends_on = ["redis" "postgres"]; +# restart = "always"; +# }; +# }; +# "microservices" = { +# service = { +# image = "ghcr.io/immich-app/immich-server:${immichVersion}"; +# container_name = "microservices"; +# command = ["start.sh" "microservices"]; +# environment = sharedEnv; +# volumes = ["${immichData}:/usr/src/app/upload:rw"]; +# depends_on = ["redis" "postgres"]; +# restart = "always"; +# }; +# }; +# "machine_learning" = { +# service = { +# image = "ghcr.io/immich-app/immich-machine-learning:${immichVersion}"; +# container_name = "machine_learning"; +# volumes = [ +# "${machineLearning}:/cache" +# ]; +# restart = "always"; +# environment = sharedEnv // { +# # NODE_ENV = "production"; +# }; +# }; +# }; +# "redis" = { +# service = { +# image = "docker.io/redis:6.2-alpine"; +# container_name = "redis"; +# restart = "always"; +# tmpfs = ["/data"]; +# }; +# }; +# "postgres" = { +# service = { +# image = "docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0"; +# container_name = "postgres"; +# volumes = [ +# "${postgresRoot}:/var/lib/postgresql/data" +# ]; +# restart = "always"; +# environment = { +# POSTGRES_PASSWORD = sharedEnv.DB_PASSWORD; +# POSTGRES_USER = sharedEnv.DB_USERNAME; +# POSTGRES_DB = sharedEnv.DB_DATABASE_NAME; +# POSTGRES_INITDB_ARGS = "--data-checksums"; +# }; +# }; +# }; +# }; +# }; +# }; +# }; +# } +{config, ...}: let + immichHost = "immich.example.com"; # TODO: put your immich domain name here - services.immich = { - enable = true; - mediaLocation = "/mnt/hd/immich"; - }; + immichRoot = "/mnt/hd/immich"; # TODO: Tweak these to your desired storage locations + immichPhotos = "${immichRoot}/photos"; + immichAppdataRoot = "${immichRoot}/appdata"; + immichVersion = "release"; + # immichExternalVolume1 = "/tank/BackupData/Google Photos/someone@example.com"; # TODO: if external volumes are desired - # The reason for this hack is quite bad - # Before using the NixOS module Immich was installed using Docker, for this - # reason the paths of the images in the database looks like `/photos/...` - # and after migrating to the NixOS module I kept getting 404s for all the - # old pictures. - # Frankly it seems weird that it saved the absolute paths in the DB, perhaps - # it saves somewhere else the media location root and then merge the paths, - # however, nevertheless I set `mediaLocation` it didn't work - fileSystems."/photos" = { - device = "/mnt/hd/immich/"; - fsType = "ext4"; - options = [ "bind" ]; - }; + postgresRoot = "${immichAppdataRoot}/pgsql"; + postgresPassword = "immich"; # TODO: put a random password here + postgresUser = "immich"; + postgresDb = "immich"; +in { + # The primary source for this configuration is the recommended docker-compose installation of immich from + # https://immich.app/docs/install/docker-compose, which linkes to: + # - https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml + # - https://github.com/immich-app/immich/releases/latest/download/example.env + # and has been transposed into nixos configuration here. Those upstream files should probably be checked + # for serious changes if there are any upgrade problems here. + # + # After initial deployment, these in-process configurations need to be done: + # - create an admin user by accessing the site + # - login with the admin user + # - set the "Machine Learning Settings" > "URL" to http://immich_machine_learning:3003 - services.nginx.virtualHosts."photos.aciceri.dev" = { - forceSSL = true; - enableACME = true; - locations."/" = { - proxyPass = "http://localhost:${builtins.toString config.services.immich.port}"; - proxyWebsockets = true; + virtualisation.oci-containers.containers.immich_server = { + image = "ghcr.io/immich-app/immich-server:${immichVersion}"; + ports = ["127.0.0.1:2283:3001"]; + extraOptions = [ + "--pull=newer" + # Force DNS resolution to only be the podman dnsname name server; by default podman provides a resolv.conf + # that includes both this server and the upstream system server, causing resolutions of other pod names + # to be inconsistent. + "--dns=10.88.0.1" + ]; + cmd = ["start.sh" "immich"]; + environment = { + IMMICH_VERSION = immichVersion; + DB_HOSTNAME = "immich_postgres"; + DB_USERNAME = postgresUser; + DB_DATABASE_NAME = postgresDb; + DB_PASSWORD = postgresPassword; + REDIS_HOSTNAME = "immich_redis"; }; - extraConfig = '' - client_max_body_size 50000M; - ''; + volumes = [ + "${immichPhotos}:/usr/src/app/upload" + "/etc/localtime:/etc/localtime:ro" + # "${immichExternalVolume1}:${immichExternalVolume1}:ro" + ]; + }; + + virtualisation.oci-containers.containers.immich_microservices = { + image = "ghcr.io/immich-app/immich-server:${immichVersion}"; + extraOptions = [ + "--pull=newer" + # Force DNS resolution to only be the podman dnsname name server; by default podman provides a resolv.conf + # that includes both this server and the upstream system server, causing resolutions of other pod names + # to be inconsistent. + "--dns=10.88.0.1" + ]; + cmd = ["start.sh" "microservices"]; + environment = { + IMMICH_VERSION = immichVersion; + DB_HOSTNAME = "immich_postgres"; + DB_USERNAME = postgresUser; + DB_DATABASE_NAME = postgresDb; + DB_PASSWORD = postgresPassword; + REDIS_HOSTNAME = "immich_redis"; + }; + volumes = [ + "${immichPhotos}:/usr/src/app/upload" + "/etc/localtime:/etc/localtime:ro" + # "${immichExternalVolume}1:${immichExternalVolume1}:ro" + ]; + }; + + virtualisation.oci-containers.containers.immich_machine_learning = { + image = "ghcr.io/immich-app/immich-machine-learning:${immichVersion}"; + extraOptions = ["--pull=newer"]; + environment = { + IMMICH_VERSION = immichVersion; + }; + volumes = [ + "${immichAppdataRoot}/model-cache:/cache" + ]; + }; + + virtualisation.oci-containers.containers.immich_redis = { + image = "redis:6.2-alpine@sha256:80cc8518800438c684a53ed829c621c94afd1087aaeb59b0d4343ed3e7bcf6c5"; + }; + + virtualisation.oci-containers.containers.immich_postgres = { + image = "tensorchord/pgvecto-rs:pg14-v0.1.11"; + environment = { + POSTGRES_PASSWORD = postgresPassword; + POSTGRES_USER = postgresUser; + POSTGRES_DB = postgresDb; + }; + volumes = [ + "${postgresRoot}:/var/lib/postgresql/data" + ]; }; } diff --git a/modules/immich/env b/modules/immich/env new file mode 100644 index 0000000..5c8b109 --- /dev/null +++ b/modules/immich/env @@ -0,0 +1,5 @@ +PUBLIC_LOGIN_PAGE_MESSAGE= + +IMMICH_WEB_URL=http://immich-web:3000 +IMMICH_SERVER_URL=http://immich-server:3001 +IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003 \ No newline at end of file diff --git a/modules/immich/module.nix b/modules/immich/module.nix new file mode 100644 index 0000000..b31f11f --- /dev/null +++ b/modules/immich/module.nix @@ -0,0 +1,608 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit + (lib) + hasAttr + hasPrefix + maintainers + mapAttrs + mkDefault + mkEnableOption + mkIf + mkMerge + mkOption + mkPackageOption + optional + optionalAttrs + optionalString + types + ; + + cfg = config.services.immich; + serverCfg = config.services.immich.server; + backendCfg = serverCfg.backend; + microservicesCfg = serverCfg.microservices; + webCfg = cfg.web; + mlCfg = cfg.machineLearning; + + isServerPostgresUnix = hasPrefix "/" serverCfg.postgres.host; + postgresEnv = + if isServerPostgresUnix + then { + # If passwordFile is given, this will be overwritten in ExecStart + DB_URL = "socket://${serverCfg.postgres.host}?dbname=${serverCfg.postgres.database}"; + } + else { + DB_HOSTNAME = serverCfg.postgres.host; + DB_PORT = toString serverCfg.postgres.port; + DB_DATABASE_NAME = serverCfg.postgres.database; + DB_USERNAME = serverCfg.postgres.username; + }; + + typesenseEnv = + { + TYPESENSE_ENABLED = toString serverCfg.typesense.enable; + } + // optionalAttrs serverCfg.typesense.enable { + TYPESENSE_HOST = serverCfg.typesense.host; + TYPESENSE_PORT = toString serverCfg.typesense.port; + TYPESENSE_PROTOCOL = serverCfg.typesense.protocol; + }; + + # Don't start a redis instance if the user sets a custom redis connection + enableRedis = !hasAttr "REDIS_URL" serverCfg.extraConfig && !hasAttr "REDIS_SOCKET" serverCfg.extraConfig; + redisServerCfg = config.services.redis.servers.immich; + redisEnv = optionalAttrs enableRedis { + REDIS_SOCKET = redisServerCfg.unixSocket; + }; + + serverEnv = + postgresEnv + // typesenseEnv + // redisEnv + // { + NODE_ENV = "production"; + + IMMICH_MEDIA_LOCATION = serverCfg.mediaDir; + IMMICH_MACHINE_LEARNING_URL = + if serverCfg.machineLearningUrl != null + then serverCfg.machineLearningUrl + else "false"; + }; + + serverStartWrapper = program: '' + set -euo pipefail + mkdir -p ${serverCfg.mediaDir} + + ${optionalString (serverCfg.postgres.passwordFile != null) ( + if isServerPostgresUnix + then ''export DB_URL="socket://${serverCfg.postgres.username}:$(cat ${serverCfg.postgres.passwordFile})@${serverCfg.postgres.host}?dbname=${serverCfg.postgres.database}"'' + else "export DB_PASSWORD=$(cat ${serverCfg.postgres.passwordFile})" + )} + + ${optionalString serverCfg.typesense.enable '' + export TYPESENSE_API_KEY=$(cat ${serverCfg.typesense.apiKeyFile}) + ''} + + exec ${program} + ''; + + commonServiceConfig = { + Restart = "on-failure"; + + # Hardening + CapabilityBoundingSet = ""; + LockPersonality = true; + MemoryDenyWriteExecute = true; + NoNewPrivileges = true; + PrivateUsers = true; + PrivateTmp = true; + PrivateDevices = true; + PrivateMounts = true; + ProtectClock = true; + ProtectControlGroups = true; + ProtectHome = true; + ProtectHostname = true; + ProtectKernelLogs = true; + ProtectKernelModules = true; + ProtectKernelTunables = true; + ProtectProc = "invisible"; + ProcSubset = "pid"; + # Would re-mount paths ignored by temporary root + # TODO ProtectSystem = "strict"; + RemoveIPC = true; + RestrictAddressFamilies = [ + "AF_INET" + "AF_INET6" + "AF_UNIX" + ]; + RestrictNamespaces = true; + RestrictRealtime = true; + RestrictSUIDSGID = true; + SystemCallArchitectures = "native"; + SystemCallFilter = [ + "@system-service" + "~@privileged" + "@pkey" + ]; + UMask = "0077"; + }; + + serverServiceConfig = { + DynamicUser = true; + User = "immich"; + Group = "immich"; + SupplementaryGroups = optional enableRedis redisServerCfg.user; + + StateDirectory = "immich"; + StateDirectoryMode = "0750"; + WorkingDirectory = "/var/lib/immich"; + + MemoryDenyWriteExecute = false; # nodejs requires this. + EnvironmentFile = mkIf (serverCfg.environmentFile != null) serverCfg.environmentFile; + + TemporaryFileSystem = "/:ro"; + BindReadOnlyPaths = + [ + "/nix/store" + "-/etc/resolv.conf" + "-/etc/nsswitch.conf" + "-/etc/hosts" + "-/etc/localtime" + "-/run/postgresql" + ] + ++ optional enableRedis redisServerCfg.unixSocket; + }; +in { + options.services.immich = { + enable = + mkEnableOption "immich" + // { + description = '' + Enables immich which consists of a backend server, microservices, + machine-learning and web ui. You can disable or reconfigure components + individually using the subsections. + ''; + }; + + package = mkPackageOption pkgs "immich" {}; + + server = { + mediaDir = mkOption { + type = types.str; + default = "/var/lib/immich/media"; + description = "Directory used to store media files."; + }; + + backend = { + enable = + mkEnableOption "immich backend server" + // { + default = true; + }; + port = mkOption { + type = types.port; + default = 3001; + description = "Port to bind to."; + }; + + openFirewall = mkOption { + default = false; + type = types.bool; + description = "Whether to open the firewall for the specified port."; + }; + + extraConfig = mkOption { + type = types.attrs; + default = {}; + example = { + LOG_LEVEL = "debug"; + }; + description = '' + Extra configuration options (environment variables). + Refer to [the documented variables](https://documentation.immich.app/docs/install/environment-variables) tagged with 'server' for available options. + ''; + }; + + environmentFile = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + Environment file as defined in systemd.exec(5). May be used to provide + additional secret variables to the service without adding them to the + world-readable Nix store. + ''; + }; + }; + + microservices = { + enable = + mkEnableOption "immich microservices" + // { + default = true; + }; + + port = mkOption { + type = types.port; + default = 3002; + description = "Port to bind to."; + }; + + openFirewall = mkOption { + default = false; + type = types.bool; + description = "Whether to open the firewall for the specified port."; + }; + + extraConfig = mkOption { + type = types.attrs; + default = {}; + example = { + REVERSE_GEOCODING_PRECISION = 1; + }; + description = '' + Extra configuration options (environment variables). + Refer to [the documented variables](https://documentation.immich.app/docs/install/environment-variables) tagged with 'microservices' for available options. + ''; + }; + + environmentFile = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + Environment file as defined in systemd.exec(5). May be used to provide + additional secret variables to the service without adding them to the + world-readable Nix store. + ''; + }; + }; + + typesense = { + enable = + mkEnableOption "typesense" + // { + default = true; + }; + + host = mkOption { + type = types.str; + default = "127.0.0.1"; + example = "typesense.example.com"; + description = "Hostname/address of the typesense server to use."; + }; + + port = mkOption { + type = types.port; + default = 8108; + description = "The port of the typesense server to use."; + }; + + protocol = mkOption { + type = types.str; + default = "http"; + description = "The protocol to use when connecting to the typesense server."; + }; + + apiKeyFile = mkOption { + type = types.path; + description = "Sets the api key for authentication with typesense."; + }; + }; + + postgres = { + host = mkOption { + type = types.str; + default = "/run/postgresql"; + description = "Hostname/address of the postgres server to use. If an absolute path is given here, it will be interpreted as a unix socket path."; + }; + + port = mkOption { + type = types.port; + default = 5432; + description = "The port of the postgres server to use."; + }; + + username = mkOption { + type = types.str; + default = "immich"; + description = "The postgres username to use."; + }; + + passwordFile = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + Sets the password for authentication with postgres. + May be unset when using socket authentication. + ''; + }; + + database = mkOption { + type = types.str; + default = "immich"; + description = "The postgres database to use."; + }; + }; + + useMachineLearning = mkOption { + description = "Use the given machine learning server endpoint to enable ML functionality in immich."; + default = true; + type = types.bool; + }; + + machineLearningUrl = mkOption { + type = types.str; + default = "http://127.0.0.1:3003"; + example = "https://immich-ml.internal.example.com"; + description = "The machine learning server endpoint to use."; + }; + + extraConfig = mkOption { + type = types.attrs; + default = {}; + example = { + REDIS_SOCKET = "/run/custom-redis"; + }; + description = '' + Extra configuration options (environment variables) for both backend and microservices. + Refer to [the documented variables](https://documentation.immich.app/docs/install/environment-variables) tagged with both 'server' and 'microservices' for available options. + ''; + }; + + environmentFile = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + Environment file as defined in systemd.exec(5). May be used to provide + additional secret variables to the backend and microservices servers without + adding them to the world-readable Nix store. + ''; + }; + }; + + web = { + enable = + mkEnableOption "immich web frontend" + // { + default = true; + }; + + port = mkOption { + type = types.port; + default = 3000; + description = "Port to bind to."; + }; + + openFirewall = mkOption { + default = false; + type = types.bool; + description = "Whether to open the firewall for the specified port."; + }; + + serverUrl = mkOption { + type = types.str; + default = "http://127.0.0.1:3001"; + example = "https://immich-backend.internal.example.com"; + description = "The backend server url to use."; + }; + + apiUrlExternal = mkOption { + type = types.str; + default = "/web"; + description = "The api url to use for external requests."; + }; + + extraConfig = mkOption { + type = types.attrs; + default = {}; + example = { + PUBLIC_LOGIN_PAGE_MESSAGE = "My awesome Immich instance!"; + }; + description = '' + Extra configuration options (environment variables). + Refer to [the documented variables](https://documentation.immich.app/docs/install/environment-variables) tagged with 'web' for available options. + ''; + }; + }; + + machineLearning = { + enable = + mkEnableOption "immich machine-learning server" + // { + default = true; + }; + + port = mkOption { + type = types.port; + default = 3003; + description = "Port to bind to."; + }; + + openFirewall = mkOption { + default = false; + type = types.bool; + description = "Whether to open the firewall for the specified port."; + }; + + extraConfig = mkOption { + type = types.attrs; + default = {}; + example = { + MACHINE_LEARNING_MODEL_TTL = 600; + }; + description = '' + Extra configuration options (environment variables). + Refer to [the documented variables](https://documentation.immich.app/docs/install/environment-variables) tagged with 'machine learning' for available options. + ''; + }; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = !isServerPostgresUnix -> serverCfg.postgres.passwordFile != null; + message = "A database password must be provided when unix sockets are not used."; + } + ]; + + networking.firewall.allowedTCPPorts = mkMerge [ + (mkIf (backendCfg.enable && backendCfg.openFirewall) [backendCfg.port]) + (mkIf (microservicesCfg.enable && microservicesCfg.openFirewall) [microservicesCfg.port]) + (mkIf (webCfg.enable && webCfg.openFirewall) [webCfg.port]) + (mkIf (mlCfg.enable && mlCfg.openFirewall) [mlCfg.port]) + ]; + + services.redis.servers.immich.enable = mkIf enableRedis true; + services.redis.vmOverCommit = mkIf enableRedis (mkDefault true); + + systemd.services.immich-server = mkIf backendCfg.enable { + description = "Immich backend server (Self-hosted photo and video backup solution)"; + after = + [ + "network.target" + "typesense.service" + "postgresql.service" + "immich-machine-learning.service" + ] + ++ optional enableRedis "redis-immich.service"; + wantedBy = ["multi-user.target"]; + + environment = + serverEnv + // { + SERVER_PORT = toString backendCfg.port; + } + // mapAttrs (_: toString) serverCfg.extraConfig + // mapAttrs (_: toString) backendCfg.extraConfig; + + script = serverStartWrapper "${cfg.package}/bin/server"; + serviceConfig = mkMerge [ + (commonServiceConfig // serverServiceConfig) + { + EnvironmentFile = mkIf (backendCfg.environmentFile != null) backendCfg.environmentFile; + } + ]; + }; + + systemd.services.immich-microservices = mkIf microservicesCfg.enable { + description = "Immich microservices (Self-hosted photo and video backup solution)"; + after = + [ + "network.target" + "typesense.service" + "postgresql.service" + "immich-machine-learning.service" + ] + ++ optional enableRedis "redis-immich.service"; + wantedBy = ["multi-user.target"]; + + environment = + serverEnv + // { + MICROSERVICES_PORT = toString microservicesCfg.port; + } + // mapAttrs (_: toString) serverCfg.extraConfig + // mapAttrs (_: toString) microservicesCfg.extraConfig; + + script = serverStartWrapper "${cfg.package}/bin/microservices"; + serviceConfig = mkMerge [ + (commonServiceConfig // serverServiceConfig) + { + EnvironmentFile = mkIf (microservicesCfg.environmentFile != null) microservicesCfg.environmentFile; + } + ]; + }; + + systemd.services.immich-web = mkIf webCfg.enable { + description = "Immich web (Self-hosted photo and video backup solution)"; + after = [ + "network.target" + "immich-server.service" + ]; + wantedBy = ["multi-user.target"]; + + environment = + { + NODE_ENV = "production"; + PORT = toString webCfg.port; + IMMICH_SERVER_URL = webCfg.serverUrl; + IMMICH_API_URL_EXTERNAL = webCfg.apiUrlExternal; + } + // mapAttrs (_: toString) webCfg.extraConfig; + + script = '' + set -euo pipefail + export PUBLIC_IMMICH_SERVER_URL=$IMMICH_SERVER_URL + export PUBLIC_IMMICH_API_URL_EXTERNAL=$IMMICH_API_URL_EXTERNAL + exec ${cfg.package.web}/bin/web + ''; + serviceConfig = + commonServiceConfig + // { + DynamicUser = true; + User = "immich-web"; + Group = "immich-web"; + + MemoryDenyWriteExecute = false; # nodejs requires this. + + TemporaryFileSystem = "/:ro"; + BindReadOnlyPaths = [ + "/nix/store" + "-/etc/resolv.conf" + "-/etc/nsswitch.conf" + "-/etc/hosts" + "-/etc/localtime" + ]; + }; + }; + + systemd.services.immich-machine-learning = mkIf mlCfg.enable { + description = "Immich machine learning (Self-hosted photo and video backup solution)"; + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + + environment = + { + NODE_ENV = "production"; + MACHINE_LEARNING_PORT = toString mlCfg.port; + + MACHINE_LEARNING_CACHE_FOLDER = "/var/cache/immich-ml"; + TRANSFORMERS_CACHE = "/var/cache/immich-ml"; + } + // mapAttrs (_: toString) mlCfg.extraConfig; + + serviceConfig = + commonServiceConfig + // { + ExecStart = "${cfg.package.machine-learning}/bin/machine-learning"; + DynamicUser = true; + User = "immich-ml"; + Group = "immich-ml"; + + MemoryDenyWriteExecute = false; # onnxruntime_pybind11 requires this. + ProcSubset = "all"; # Needs /proc/cpuinfo + + CacheDirectory = "immich-ml"; + CacheDirectoryMode = "0700"; + + # TODO gpu access + + TemporaryFileSystem = "/:ro"; + BindReadOnlyPaths = [ + "/nix/store" + "-/etc/resolv.conf" + "-/etc/nsswitch.conf" + "-/etc/hosts" + "-/etc/localtime" + ]; + }; + }; + + meta.maintainers = with maintainers; [oddlama]; + }; +} diff --git a/modules/jellyfin/default.nix b/modules/jellyfin/default.nix index 6586166..1615176 100644 --- a/modules/jellyfin/default.nix +++ b/modules/jellyfin/default.nix @@ -1,24 +1,7 @@ -{ config, ... }: { services.jellyfin = { enable = true; - openFirewall = true; }; - users.users.jellyfin.extraGroups = [ - "transmission" - "amule" - ]; - - environment.persistence."/persist".directories = [ - config.services.jellyfin.dataDir - ]; - - services.nginx.virtualHosts = { - "jelly.aciceri.dev" = { - enableACME = true; - forceSSL = true; - locations."/".proxyPass = "http://127.0.0.1:8096"; # FIXME hardcoded port - }; - }; + users.users.jellyfin.extraGroups = ["transmission"]; } diff --git a/modules/kodi/default.nix b/modules/kodi/default.nix index 41708a1..1eb104e 100644 --- a/modules/kodi/default.nix +++ b/modules/kodi/default.nix @@ -1,20 +1,20 @@ { + config, + lib, pkgs, ... -}: -{ +}: { services.xserver = { enable = true; desktopManager.kodi = { enable = true; - package = pkgs.kodi.withPackages ( - ps: with ps; [ + package = pkgs.kodi.withPackages (ps: + with ps; [ joystick youtube libretro libretro-mgba - ] - ); + ]); }; displayManager.autoLogin = { enable = true; @@ -28,8 +28,8 @@ }; networking.firewall = { - allowedTCPPorts = [ 8080 ]; - allowedUDPPorts = [ 8080 ]; + allowedTCPPorts = [8080]; + allowedUDPPorts = [8080]; }; # environment.systemPackages = with pkgs; [xboxdrv cifs-utils]; diff --git a/modules/loki/default.nix b/modules/loki/default.nix deleted file mode 100644 index 01d9bc3..0000000 --- a/modules/loki/default.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ config, ... }: -let - cfg = config.services.loki; -in -{ - services.loki = { - enable = true; - configuration = { - # Basic stuff - auth_enabled = false; - server = { - http_listen_port = 3100; - log_level = "warn"; - }; - common = { - path_prefix = config.services.loki.dataDir; - storage.filesystem = { - chunks_directory = "${cfg.dataDir}/chunks"; - rules_directory = "${cfg.dataDir}/rules"; - }; - replication_factor = 1; - ring.kvstore.store = "inmemory"; - ring.instance_addr = "127.0.0.1"; - }; - - ingester.chunk_encoding = "snappy"; - - limits_config = { - retention_period = "120h"; - ingestion_burst_size_mb = 16; - reject_old_samples = true; - reject_old_samples_max_age = "12h"; - }; - - table_manager = { - retention_deletes_enabled = true; - retention_period = "120h"; - }; - - compactor = { - retention_enabled = true; - compaction_interval = "10m"; - working_directory = "${cfg.dataDir}/compactor"; - delete_request_cancel_period = "10m"; # don't wait 24h before processing the delete_request - retention_delete_delay = "2h"; - retention_delete_worker_count = 150; - delete_request_store = "filesystem"; - }; - - schema_config.configs = [ - { - from = "2020-11-08"; - store = "tsdb"; - object_store = "filesystem"; - schema = "v13"; - index.prefix = "index_"; - index.period = "24h"; - } - ]; - - query_range.cache_results = true; - limits_config.split_queries_by_interval = "24h"; - }; - }; - - environment.persistence."/persist".directories = [ - cfg.dataDir - ]; -} diff --git a/modules/macos-ventura/default.nix b/modules/macos-ventura/default.nix index b3824a5..128729b 100644 --- a/modules/macos-ventura/default.nix +++ b/modules/macos-ventura/default.nix @@ -1,24 +1,14 @@ -{ lib, ... }: -{ +{fleetFlake, ...}: { services.macos-ventura = { enable = true; cores = 8; threads = 8; - mem = "16G"; + mem = "8G"; vncListenAddr = "0.0.0.0"; - sshListenAddr = "127.0.0.1"; - extraQemuFlags = [ "-nographic" ]; - sshPort = 2022; - vncDisplayNumber = 1; # means port 59001 - stateless = false; - openFirewall = true; - autoStart = false; + extraQemuFlags = ["-nographic"]; + sshPort = 2021; + installNix = true; + stateless = true; + darwinConfig = fleetFlake.darwinConfigurations.archer; }; - - programs.ssh.extraConfig = lib.mkAfter '' - Host macos-ventura - Hostname localhost - Port 2022 - Compression yes - ''; } diff --git a/modules/mara/default.nix b/modules/mara/default.nix index df60577..1888ef2 100644 --- a/modules/mara/default.nix +++ b/modules/mara/default.nix @@ -4,10 +4,8 @@ pkgs, fleetHmModules, fleetFlake, - vpn, ... -}: -{ +}: { options.mara = { enable = lib.mkOption { type = lib.types.bool; @@ -16,15 +14,12 @@ modules = lib.mkOption { type = with lib.types; listOf str; - default = [ - "shell" - "git" - ]; + default = ["shell" "git"]; }; packages = lib.mkOption { type = with lib.types; listOf package; - default = [ ]; + default = []; }; autologin = lib.mkOption { @@ -44,54 +39,30 @@ extraGroups = lib.mkOption { type = with lib.types; listOf str; - default = [ - "wheel" - "fuse" - "video" - "dialout" - "systemd-journal" - "camera" - "networkmanager" - ]; + default = ["wheel" "fuse" "networkmanager" "dialout"]; }; }; config = lib.mkIf config.mara.enable { - - programs.fish.enable = true; - - mara.modules = [ - "shell" - "git" - "nix-index" - "btop" - ]; - users.users.mara = { uid = 1001; inherit (config.mara) hashedPassword; description = "Mara Savastano"; isNormalUser = true; inherit (config.mara) extraGroups; - shell = pkgs.fish; + shell = pkgs.nushell; openssh.authorizedKeys.keys = config.mara.authorizedKeys; }; - services.getty.autologinUser = if config.mara.autologin then "mara" else null; + services.getty.autologinUser = + if config.mara.autologin + then "mara" + else null; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.mara = { - imports = fleetHmModules config.mara.modules ++ [ - { - _module.args = { - inherit (config.age) secrets; - inherit vpn; - username = "mara"; - hostname = config.networking.hostName; - }; - } - ]; + imports = fleetHmModules config.mara.modules; home.packages = config.mara.packages; home.stateVersion = config.system.stateVersion; }; diff --git a/modules/matrix/default.nix b/modules/matrix/default.nix index c7c5917..5fc24b1 100644 --- a/modules/matrix/default.nix +++ b/modules/matrix/default.nix @@ -3,10 +3,10 @@ lib, pkgs, ... -}: -let +}: let clientConfig = { "m.homeserver".base_url = "https://matrix.aciceri.dev"; + "org.matrix.msc3575.proxy".url = "https://syncv3.matrix.aciceri.dev"; }; serverConfig."m.server" = "matrix.aciceri.dev:443"; mkWellKnown = data: '' @@ -14,13 +14,12 @@ let add_header Access-Control-Allow-Origin *; return 200 '${builtins.toJSON data}'; ''; -in -{ - imports = [ ../nginx-base ]; +in { + imports = [../nginx-base]; services.nginx.virtualHosts = { "aciceri.dev" = { - useACMEHost = "aciceri.dev"; + enableACME = true; forceSSL = true; locations."= /.well-known/matrix/server".extraConfig = mkWellKnown serverConfig; locations."= /.well-known/matrix/client".extraConfig = mkWellKnown clientConfig; @@ -28,13 +27,23 @@ in "matrix.aciceri.dev" = { forceSSL = true; enableACME = true; - locations."/".proxyPass = - "http://127.0.0.1:${builtins.toString (lib.head config.services.matrix-synapse.settings.listeners).port}"; + locations."/".proxyPass = "http://127.0.0.1:${builtins.toString (lib.head config.services.matrix-synapse.settings.listeners).port}"; locations."/_matrix".proxyPass = "http://localhost:8008"; locations."/_synapse/client".proxyPass = "http://localhost:8008"; }; }; + services.postgresql = { + enable = true; + initialScript = pkgs.writeText "synapse-init.sql" '' + CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse'; + CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse" + TEMPLATE template0 + LC_COLLATE = "C" + LC_CTYPE = "C"; + ''; + }; + systemd.tmpfiles.rules = [ "d ${config.services.matrix-synapse.dataDir} 770 matrix-synapse matrix-synapse" ]; @@ -49,22 +58,43 @@ in listeners = [ { port = 8008; - bind_addresses = [ "127.0.0.1" ]; + bind_addresses = ["127.0.0.1"]; type = "http"; tls = false; x_forwarded = true; resources = [ { - names = [ - "client" - "federation" - ]; + names = ["client" "federation"]; compress = true; } ]; } ]; }; - extraConfigFiles = [ config.age.secrets.matrix-registration-shared-secret.path ]; + extraConfigFiles = [config.age.secrets.matrix-registration-shared-secret.path]; + }; + + backup.paths = [ + config.services.matrix-synapse.dataDir + "/var/backup/postgresql/matrix-synapse.sql.gz" + ]; + + services.postgresqlBackup = { + enable = true; + databases = ["matrix-synapse"]; + }; + + services.matrix-sliding-sync = { + enable = true; + environmentFile = config.age.secrets.matrix-sliding-sync-secret.path; + settings = { + SYNCV3_SERVER = "http://localhost:8008"; + }; + }; + + services.nginx.virtualHosts."syncv3.matrix.aciceri.dev" = { + enableACME = true; + forceSSL = true; + locations."/".proxyPass = config.services.matrix-sliding-sync.settings.SYNCV3_SERVER; }; } diff --git a/modules/mediatomb/default.nix b/modules/mediatomb/default.nix index df9465f..e09bd65 100644 --- a/modules/mediatomb/default.nix +++ b/modules/mediatomb/default.nix @@ -2,21 +2,14 @@ services.mediatomb = { enable = true; openFirewall = true; - serverName = "Sisko"; + serverName = "Rock 5B"; mediaDirectories = [ { - path = "/mnt/hd/movies"; - recursive = true; - } - { - path = "/mnt/hd/series"; + path = "/mnt/hd/torrent"; recursive = true; } ]; }; - users.users.mediatomb.extraGroups = [ - "radarr" - "sonarr" - ]; + users.users.mediatomb.extraGroups = ["transmission"]; } diff --git a/modules/minidlna/default.nix b/modules/minidlna/default.nix index e5ffae8..6a813bd 100644 --- a/modules/minidlna/default.nix +++ b/modules/minidlna/default.nix @@ -1,5 +1,4 @@ -{ config, ... }: -{ +{config, ...}: { services.minidlna = { enable = true; openFirewall = true; @@ -12,6 +11,6 @@ }; }; - ccr.extraGroups = [ "minidlna" ]; - users.users.minidlna.extraGroups = [ "transmission" ]; + ccr.extraGroups = ["minidlna"]; + users.users.minidlna.extraGroups = ["transmission"]; } diff --git a/modules/minio/default.nix b/modules/minio/default.nix index 8f378c3..1f503af 100644 --- a/modules/minio/default.nix +++ b/modules/minio/default.nix @@ -2,15 +2,14 @@ config, lib, ... -}: -{ - imports = [ ../nginx-base ]; +}: { + imports = [../nginx-base]; services.minio = { enable = true; rootCredentialsFile = config.age.secrets.minio-credentials.path; region = "eu-south-1"; - dataDir = lib.mkForce [ "/mnt/hd/minio" ]; + dataDir = lib.mkForce ["/mnt/hd/minio"]; }; services.nginx.virtualHosts."cache.aciceri.dev" = { @@ -26,7 +25,8 @@ ''; locations."/" = { proxyPass = "http://127.0.0.1:9000"; - extraConfig = ''''; + extraConfig = '' + ''; }; }; } diff --git a/modules/mothership-proxy/default.nix b/modules/mothership-proxy/default.nix index a1df867..bf9bef4 100644 --- a/modules/mothership-proxy/default.nix +++ b/modules/mothership-proxy/default.nix @@ -1,6 +1,5 @@ -{ ... }: -{ - imports = [ ../nginx-base ]; +{config, ...}: { + imports = [../nginx-base]; services.nginx.virtualHosts = { "home.aciceri.dev" = { forceSSL = true; diff --git a/modules/mount-rock5b/default.nix b/modules/mount-rock5b/default.nix new file mode 100644 index 0000000..680c42b --- /dev/null +++ b/modules/mount-rock5b/default.nix @@ -0,0 +1,16 @@ +{ + pkgs, + config, + ... +}: { + fileSystems."/home/${config.ccr.username}/torrent" = { + device = "//sisko.fleet/torrent"; + fsType = "cifs"; + options = let + credentials = pkgs.writeText "credentials" '' + username=guest + password= + ''; + in ["credentials=${credentials},x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s"]; + }; +} diff --git a/modules/mount-sisko/default.nix b/modules/mount-sisko/default.nix deleted file mode 100644 index 5233772..0000000 --- a/modules/mount-sisko/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - pkgs, - config, - ... -}: -{ - environment.systemPackages = with pkgs; [ nfs-utils ]; - boot.supportedFilesystems = [ "nfs" ]; - services.rpcbind.enable = true; - - security.wrappers."mount.nfs" = { - setuid = true; - owner = "root"; - group = "root"; - source = "${pkgs.nfs-utils.out}/bin/mount.nfs"; - }; - - fileSystems."/mnt/nas" = { - device = "sisko.wg.aciceri.dev:/hd"; - fsType = "nfs"; - options = [ - "x-systemd.automount" - "noauto" - "user" - ]; - }; -} diff --git a/modules/networkmanager/default.nix b/modules/networkmanager/default.nix index 4e2eb66..c5e2c48 100644 --- a/modules/networkmanager/default.nix +++ b/modules/networkmanager/default.nix @@ -1,5 +1,5 @@ -{ lib, ... }: -{ +{lib, ...}: { networking.networkmanager.enable = true; + ccr.extraGroups = ["networkmanager"]; networking.useDHCP = lib.mkDefault true; } diff --git a/modules/nextcloud/default.nix b/modules/nextcloud/default.nix index 77d6230..0346551 100644 --- a/modules/nextcloud/default.nix +++ b/modules/nextcloud/default.nix @@ -2,15 +2,18 @@ config, pkgs, ... -}: -{ +}: let + cfg = config.services.nextcloud; +in { systemd.tmpfiles.rules = [ "d /mnt/raid/nextcloud 770 nextcloud nextcloud" ]; + ccr.extraGroups = ["nextcloud"]; + services.nextcloud = { enable = true; - package = pkgs.nextcloud_30; + package = pkgs.nextcloud26; database.createLocally = true; home = "/mnt/raid/nextcloud"; hostName = "nextcloud.aciceri.dev"; @@ -19,4 +22,6 @@ overwriteProtocol = "https"; }; }; + + networking.firewall.allowedTCPPorts = [80]; } diff --git a/modules/nginx-base/default.nix b/modules/nginx-base/default.nix index a79716e..8baeece 100644 --- a/modules/nginx-base/default.nix +++ b/modules/nginx-base/default.nix @@ -1,22 +1,7 @@ -{ config, ... }: { security.acme = { acceptTerms = true; defaults.email = "andrea.ciceri@autistici.org"; - certs = { - "aciceri.dev" = { - reloadServices = [ "nginx.service" ]; - domain = "aciceri.dev"; - extraDomainNames = [ - "*.sisko.zt.aciceri.dev" - "*.sisko.wg.aciceri.dev" - ]; - dnsProvider = "cloudflare"; - dnsPropagationCheck = true; - group = config.services.nginx.group; - environmentFile = config.age.secrets.cloudflare-api-tokens.path; - }; - }; }; networking.firewall.allowedTCPPorts = [ @@ -26,14 +11,9 @@ services.nginx = { enable = true; - statusPage = true; recommendedGzipSettings = true; recommendedOptimisation = true; recommendedProxySettings = true; recommendedTlsSettings = true; }; - - environment.persistence."/persist".directories = [ - "/var/lib/acme" - ]; } diff --git a/modules/nix-serve/default.nix b/modules/nix-serve/default.nix index 261b517..bcb1bd5 100644 --- a/modules/nix-serve/default.nix +++ b/modules/nix-serve/default.nix @@ -2,12 +2,10 @@ config, lib, ... -}: -let +}: let cfg = config.services.my-nix-serve; -in -{ - imports = [ ../nginx-base ]; +in { + imports = [../nginx-base]; options.services.my-nix-serve = { domain = lib.mkOption { type = lib.types.str; diff --git a/modules/nix/default.nix b/modules/nix/default.nix index e8dedc8..f42df36 100644 --- a/modules/nix/default.nix +++ b/modules/nix/default.nix @@ -4,10 +4,7 @@ fleetFlake, pkgs, ... -}: -{ - environment.systemPackages = [ pkgs.nix-fast-build ]; - +}: { nix = { optimise.automatic = true; @@ -20,28 +17,27 @@ "root" "@wheel" ]; - netrc-file = config.age.secrets.nix-netrc.path; + netrc-file = "/etc/nix/netrc"; substituters = [ + # "s3://cache?profile=default®ion=eu-south-1&scheme=https&endpoint=cache.aciceri.dev" "https://cache.iog.io" "https://cache.lix.systems" "https://nix-community.cachix.org" "https://mlabs.cachix.org" - "http://sisko.wg.aciceri.dev:8081/nixfleet" ]; trusted-public-keys = [ + # "cache.aciceri.dev~1:nJMfcBnYieY2WMbYDG0s9S5qUhU+V4RPL+X9zcxXxZY=" "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "mlabs.cachix.org-1:gStKdEqNKcrlSQw5iMW6wFCj3+b+1ASpBVY2SYuNV2M=" - "nixfleet:Bud23440n6mMTmgq/7U+mk91zlLjnx2X3lQQrCBCCU4=" ]; - deprecated-features = [ "url-literals" ]; # despite a warning saying that this option doesn't exist it seems to work }; - nixPath = [ "nixpkgs=${fleetFlake.inputs.nixpkgs}" ]; + nixPath = ["nixpkgs=${fleetFlake.inputs.nixpkgsUnstable}"]; extraOptions = '' - experimental-features = nix-command flakes + experimental-features = nix-command flakes ca-derivations impure-derivations builders-use-substitutes = true ''; @@ -51,15 +47,22 @@ options = "--delete-older-than 180d"; }; - registry = lib.mkForce ( - { + registry = lib.mkForce ({ nixpkgs.to = { type = "path"; - path = fleetFlake.inputs.nixpkgs; + path = fleetFlake.inputs.nixpkgsUnstable; + }; + nixpkgsUnstable.to = { + type = "path"; + path = fleetFlake.inputs.nixpkgsUnstable; + }; + nixpkgsStable.to = { + type = "path"; + path = fleetFlake.inputs.nixpkgsStable; }; n.to = { type = "path"; - path = fleetFlake.inputs.nixpkgs; + path = fleetFlake.inputs.nixpkgsUnstable; }; } // (lib.optionalAttrs (builtins.hasAttr "ccr" config) { @@ -75,36 +78,25 @@ type = "path"; path = "/home/${config.ccr.username}/.config/emacs"; }; - }) - ); + })); distributedBuilds = true; buildMachines = lib.lists.optional (config.networking.hostName == "picard") { - hostName = "sisko.wg.aciceri.dev"; + hostName = "sisko.fleet"; system = "aarch64-linux"; maxJobs = 7; - supportedFeatures = [ - "kvm" - "nixos-test" - "big-parallel" - "benchmark" - ]; + supportedFeatures = ["kvm" "nixos-test" "big-parallel" "benchmark"]; protocol = "ssh-ng"; sshUser = "root"; - sshKey = "/home/${config.ccr.username}/.ssh/id_ed25519"; + sshKey = "/home/${config.ccr.username}/.ssh/id_rsa"; } ++ (lib.lists.optional (config.networking.hostName == "picard") { - hostName = "mac.staging.mlabs.city?remote-program=/run/current-system/sw/bin/nix-store"; + hostName = "mac.staging.mlabs.city"; system = "x86_64-darwin"; maxJobs = 4; - supportedFeatures = [ - "kvm" - "nixos-test" - "big-parallel" - "benchmark" - ]; - protocol = "ssh"; + supportedFeatures = ["kvm" "nixos-test" "big-parallel" "benchmark"]; + protocol = "ssh-ng"; sshUser = "root"; sshKey = "/home/${config.ccr.username}/.ssh/id_rsa"; }); diff --git a/modules/org-roam-ui/default.nix b/modules/org-roam-ui/default.nix index 7b932a4..f3abe34 100644 --- a/modules/org-roam-ui/default.nix +++ b/modules/org-roam-ui/default.nix @@ -1,11 +1,10 @@ -{ ... }: -{ +{...}: { networking.firewall.interfaces."wg0" = { allowedTCPPorts = [ 35901 ]; }; - imports = [ ../nginx-base ]; + imports = [../nginx-base]; services.nginx.virtualHosts = { "roam.aciceri.dev" = { forceSSL = true; diff --git a/modules/paperless/default.nix b/modules/paperless/default.nix index f0ad8f3..b1c0e6f 100644 --- a/modules/paperless/default.nix +++ b/modules/paperless/default.nix @@ -1,46 +1,21 @@ -{ config, ... }: -{ +{config, ...}: { services.paperless = { enable = true; address = "0.0.0.0"; passwordFile = builtins.toFile "paperless-initial-password" "paperless"; - mediaDir = "/mnt/hd/paperless/"; + mediaDir = "/mnt/hd/paperless/media"; + consumptionDir = "/mnt/hd/paperless/consume"; settings = { PAPERLESS_OCR_LANGUAGE = "ita+eng"; - PAPERLESS_CONSUMER_IGNORE_PATTERN = builtins.toJSON [ - ".DS_STORE/*" - "desktop.ini" - ]; + PAPERLESS_CONSUMER_IGNORE_PATTERN = builtins.toJSON [".DS_STORE/*" "desktop.ini"]; PAPERLESS_OCR_USER_ARGS = builtins.toJSON { optimize = 1; pdfa_image_compression = "lossless"; - invalidate_digital_signatures = true; }; - PAPERLESS_URL = "https://paper.sisko.wg.aciceri.dev"; }; }; - environment.persistence."/persist".directories = [ + backup.paths = [ config.services.paperless.dataDir ]; - - imports = [ ../nginx-base ]; - - services.nginx.virtualHosts."paper.sisko.wg.aciceri.dev" = { - forceSSL = true; - useACMEHost = "aciceri.dev"; - locations."/" = { - proxyPass = "http://localhost:${builtins.toString config.services.paperless.port}"; - }; - extraConfig = '' - client_max_body_size 50000M; - proxy_redirect off; - proxy_set_header Host $host:$server_port; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $server_name; - proxy_set_header X-Forwarded-Proto $scheme; - ''; - serverAliases = [ "paper.sisko.zt.aciceri.dev" ]; - }; } diff --git a/modules/pipewire/default.nix b/modules/pipewire/default.nix index 51d78cf..334c6ea 100644 --- a/modules/pipewire/default.nix +++ b/modules/pipewire/default.nix @@ -1,13 +1,3 @@ -{ lib, ... }: { - services.pipewire = { - enable = true; - alsa.enable = true; - pulse.enable = true; - jack.enable = true; - }; - - services.pulseaudio = { - enable = false; - }; + services.pipewire.enable = true; } diff --git a/modules/plex/default.nix b/modules/plex/default.nix index dcf446b..650a29a 100644 --- a/modules/plex/default.nix +++ b/modules/plex/default.nix @@ -9,5 +9,5 @@ "d /mnt/raid/plex 770 plex plex" ]; - users.users.plex.extraGroups = [ "transmission" ]; + users.users.plex.extraGroups = ["transmission"]; } diff --git a/modules/printing/default.nix b/modules/printing/default.nix index 254ec26..10c1539 100644 --- a/modules/printing/default.nix +++ b/modules/printing/default.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { services.avahi = { enable = true; # Important to resolve .local domains of printers, otherwise you get an error @@ -12,7 +11,7 @@ services.printing = { enable = true; drivers = [ - (pkgs.callPackage ./driver.nix { }) + (pkgs.callPackage ./driver.nix {}) ]; }; } diff --git a/modules/printing/driver.nix b/modules/printing/driver.nix index 46a4d96..e2c5c2d 100644 --- a/modules/printing/driver.nix +++ b/modules/printing/driver.nix @@ -12,13 +12,8 @@ coreutils, gnugrep, which, -}: -let - arches = [ - "x86_64" - "i686" - "armv7l" - ]; +}: let + arches = ["x86_64" "i686" "armv7l"]; runtimeDeps = [ ghostscript @@ -29,67 +24,63 @@ let which ]; in -stdenv.mkDerivation rec { - pname = "cups-brother-mfcl2710dw"; - version = "4.0.0-1"; + stdenv.mkDerivation rec { + pname = "cups-brother-mfcl2710dw"; + version = "4.0.0-1"; - nativeBuildInputs = [ - dpkg - makeWrapper - autoPatchelfHook - ]; - buildInputs = [ perl ]; + nativeBuildInputs = [dpkg makeWrapper autoPatchelfHook]; + buildInputs = [perl]; - dontUnpack = true; + dontUnpack = true; - src = fetchurl { - url = "https://download.brother.com/welcome/dlf103526/mfcl2710dwpdrv-${version}.i386.deb"; - hash = "sha256-OOTvbCuyxw4k01CTMuBqG2boMN13q5xC7LacaweGmyw="; - }; + src = fetchurl { + url = "https://download.brother.com/welcome/dlf103526/mfcl2710dwpdrv-${version}.i386.deb"; + hash = "sha256-OOTvbCuyxw4k01CTMuBqG2boMN13q5xC7LacaweGmyw="; + }; - installPhase = - '' - runHook preInstall + installPhase = + '' + runHook preInstall - mkdir -p $out - dpkg-deb -x $src $out + mkdir -p $out + dpkg-deb -x $src $out - # delete unnecessary files for the current architecture - '' - + lib.concatMapStrings (arch: '' - echo Deleting files for ${arch} - rm -r "$out/opt/brother/Printers/MFCL2710DW/lpd/${arch}" - '') (builtins.filter (arch: arch != stdenv.hostPlatform.linuxArch) arches) - + '' + # delete unnecessary files for the current architecture + '' + + lib.concatMapStrings (arch: '' + echo Deleting files for ${arch} + rm -r "$out/opt/brother/Printers/MFCL2710DW/lpd/${arch}" + '') (builtins.filter (arch: arch != stdenv.hostPlatform.linuxArch) arches) + + '' - # bundled scripts don't understand the arch subdirectories for some reason - ln -s \ - "$out/opt/brother/Printers/MFCL2710DW/lpd/${stdenv.hostPlatform.linuxArch}/"* \ - "$out/opt/brother/Printers/MFCL2710DW/lpd/" + # bundled scripts don't understand the arch subdirectories for some reason + ln -s \ + "$out/opt/brother/Printers/MFCL2710DW/lpd/${stdenv.hostPlatform.linuxArch}/"* \ + "$out/opt/brother/Printers/MFCL2710DW/lpd/" - # Fix global references and replace auto discovery mechanism with hardcoded values - substituteInPlace $out/opt/brother/Printers/MFCL2710DW/lpd/lpdfilter \ - --replace /opt "$out/opt" \ - --replace "my \$BR_PRT_PATH =" "my \$BR_PRT_PATH = \"$out/opt/brother/Printers/MFCL2710DW\"; #" \ - --replace "PRINTER =~" "PRINTER = \"MFCL2710DW\"; #" + # Fix global references and replace auto discovery mechanism with hardcoded values + substituteInPlace $out/opt/brother/Printers/MFCL2710DW/lpd/lpdfilter \ + --replace /opt "$out/opt" \ + --replace "my \$BR_PRT_PATH =" "my \$BR_PRT_PATH = \"$out/opt/brother/Printers/MFCL2710DW\"; #" \ + --replace "PRINTER =~" "PRINTER = \"MFCL2710DW\"; #" - # Make sure all executables have the necessary runtime dependencies available - find "$out" -executable -and -type f | while read file; do - wrapProgram "$file" --prefix PATH : "${lib.makeBinPath runtimeDeps}" - done + # Make sure all executables have the necessary runtime dependencies available + find "$out" -executable -and -type f | while read file; do + wrapProgram "$file" --prefix PATH : "${lib.makeBinPath runtimeDeps}" + done - # Symlink filter and ppd into a location where CUPS will discover it - mkdir -p $out/lib/cups/filter - mkdir -p $out/share/cups/model + # Symlink filter and ppd into a location where CUPS will discover it + mkdir -p $out/lib/cups/filter + mkdir -p $out/share/cups/model - ln -s \ - $out/opt/brother/Printers/MFCL2710DW/lpd/lpdfilter \ - $out/lib/cups/filter/brother_lpdwrapper_MFCL2710DW + ln -s \ + $out/opt/brother/Printers/MFCL2710DW/lpd/lpdfilter \ + $out/lib/cups/filter/brother_lpdwrapper_MFCL2710DW - ln -s \ - $out/opt/brother/Printers/MFCL2710DW/cupswrapper/brother-MFCL2710DW-cups-en.ppd \ - $out/share/cups/model/ + ln -s \ + $out/opt/brother/Printers/MFCL2710DW/cupswrapper/brother-MFCL2710DW-cups-en.ppd \ + $out/share/cups/model/ - runHook postInstall - ''; -} + runHook postInstall + ''; + } diff --git a/modules/prometheus-exporters/default.nix b/modules/prometheus-exporters/default.nix deleted file mode 100644 index bdfe268..0000000 --- a/modules/prometheus-exporters/default.nix +++ /dev/null @@ -1,99 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - hostname = config.networking.hostName; - mkFor = hosts: lib.mkIf (builtins.elem hostname hosts); -in -{ - services.prometheus.exporters = { - node = - mkFor - [ - "sisko" - "picard" - "kirk" - "pike" - ] - { - enable = true; - enabledCollectors = [ - "cpu" - "conntrack" - "diskstats" - "entropy" - "filefd" - "filesystem" - "loadavg" - "mdadm" - "meminfo" - "netdev" - "netstat" - "stat" - "time" - "vmstat" - "systemd" - "logind" - "interrupts" - "ksmd" - "textfile" - "pressure" - ]; - extraFlags = [ - "--collector.ethtool" - "--collector.softirqs" - "--collector.tcpstat" - "--collector.wifi" - ]; - }; - wireguard = - mkFor - [ - "sisko" - "picard" - "kirk" - "pike" - ] - { - enable = true; - }; - zfs = - mkFor - [ - "picard" - "kirk" - "pike" - ] - { - enable = true; - }; - restic = mkFor [ "sisko" ] { - # https://github.com/ngosang/restic-exporter/issues/31 - enable = false; - repository = config.services.restic.backups.sisko.repository; - passwordFile = config.age.secrets.SISKO_RESTIC_PASSWORD.path; - }; - postgres = mkFor [ "sisko" ] { - enable = true; - }; - nginx = mkFor [ "sisko" ] { - enable = true; - }; - smartctl = - mkFor - [ - "sisko" - "picard" - "kirk" - "pike" - ] - { - enable = true; - }; - }; - - systemd.services.prometheus-restic-exporter.path = [ pkgs.openssh ]; -} diff --git a/modules/prometheus/default.nix b/modules/prometheus/default.nix deleted file mode 100644 index 69f1ddf..0000000 --- a/modules/prometheus/default.nix +++ /dev/null @@ -1,118 +0,0 @@ -{ config, ... }: -let - cfg = config.services.prometheus; -in -{ - services.prometheus = { - enable = true; - pushgateway = { - enable = true; - web = { - listen-address = "sisko.wg.aciceri.dev:9094"; - }; - }; - checkConfig = false; # Otherwise it will fail because it cannot access bearer_token_file - webExternalUrl = "https://status.wg.aciceri.dev"; - globalConfig.scrape_interval = "10s"; - scrapeConfigs = [ - { - job_name = "hass"; - metrics_path = "/api/prometheus"; - bearer_token_file = config.age.secrets.home-assistant-token.path; - static_configs = [ - { - targets = [ - "sisko.wg.aciceri.dev:${builtins.toString config.services.home-assistant.config.http.server_port}" - ]; - } - ]; - } - # { - # job_name = "pushgateway"; - # static_configs = [ - # { - # targets = [ cfg.pushgateway.web.listen-address ]; - # } - # ]; - # } - { - job_name = "node"; - static_configs = [ - { - targets = builtins.map (host: "${host}.wg.aciceri.dev:9100") [ - "sisko" - "picard" - "kirk" - "pike" - ]; - } - ]; - } - { - job_name = "wireguard"; - static_configs = [ - { - targets = builtins.map (host: "${host}.wg.aciceri.dev:9586") [ - "picard" - "kirk" - "pike" - ]; - } - ]; - } - { - job_name = "zfs"; - static_configs = [ - { - targets = builtins.map (host: "${host}.wg.aciceri.dev:9134") [ - "picard" - "kirk" - "pike" - ]; - } - ]; - } - { - job_name = "restic"; - static_configs = [ - { - targets = builtins.map (host: "${host}.wg.aciceri.dev:9753") [ "sisko" ]; - } - ]; - } - { - job_name = "postgres"; - static_configs = [ - { - targets = builtins.map (host: "${host}.wg.aciceri.dev:9187") [ "sisko" ]; - } - ]; - } - { - job_name = "nginx"; - static_configs = [ - { - targets = builtins.map (host: "${host}.wg.aciceri.dev:9117") [ "sisko" ]; - } - ]; - } - { - job_name = "smartctl"; - static_configs = [ - { - targets = builtins.map (host: "${host}.wg.aciceri.dev:9633") [ - "sisko" - "kirk" - "picard" - "pike" - ]; - } - ]; - } - ]; - }; - - environment.persistence."/persist".directories = [ - "/var/lib/${cfg.stateDir}" - ]; -} diff --git a/modules/promtail/default.nix b/modules/promtail/default.nix deleted file mode 100644 index e86afeb..0000000 --- a/modules/promtail/default.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: -let - conf = { - server = { - http_listen_port = 28183; - grpc_listen_port = 0; - }; - clients = [ - { - url = "http://sisko.wg.aciceri.dev:${ - builtins.toString config.services.loki.configuration.server.http_listen_port or 3100 - }/loki/api/v1/push"; - } - ]; - positions = { - filename = "/tmp/positions.yaml"; - }; - scrape_configs = [ - { - job_name = "journal"; - journal = { - max_age = "12h"; - labels = { - job = "systemd-journal"; - host = config.networking.hostName; - }; - }; - relabel_configs = [ - { - source_labels = [ "__journal__systemd_unit" ]; - target_label = "unit"; - } - ]; - } - ]; - }; - configFile = pkgs.writeTextFile { - name = "promtail.yaml"; - text = lib.generators.toYAML { } conf; - }; -in -{ - systemd.services.promtail = { - description = "Promtail service for Loki"; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - ExecStart = '' - ${pkgs.grafana-loki}/bin/promtail --config.file ${configFile} - ''; - }; - }; -} diff --git a/modules/qmk-udev/default.nix b/modules/qmk-udev/default.nix index 5bfd1e6..8a9b4ba 100644 --- a/modules/qmk-udev/default.nix +++ b/modules/qmk-udev/default.nix @@ -1,4 +1,3 @@ -{ pkgs, ... }: -{ - services.udev.packages = [ pkgs.qmk-udev-rules ]; +{pkgs, ...}: { + services.udev.packages = [pkgs.qmk-udev-rules]; } diff --git a/modules/remote-xfce/default.nix b/modules/remote-xfce/default.nix index c9889f7..af0b332 100644 --- a/modules/remote-xfce/default.nix +++ b/modules/remote-xfce/default.nix @@ -1,8 +1,8 @@ { pkgs, + config, ... -}: -{ +}: { # nixpkgs.config.pulseaudio = true; # services.xrdp = { # enable = true; @@ -16,14 +16,11 @@ # }; # displayManager.defaultSession = "xfce"; # }; - environment.systemPackages = with pkgs; [ - sunshine - superTuxKart - ]; + environment.systemPackages = with pkgs; [sunshine superTuxKart]; - boot.kernelModules = [ "uinput" ]; + boot.kernelModules = ["uinput"]; - users.groups.input.members = [ "ccr" ]; + users.groups.input.members = ["ccr"]; services.udev.extraRules = '' KERNEL=="uinput", SUBSYSTEM=="misc", OPTIONS+="static_node=uinput", TAG+="uaccess"' | diff --git a/modules/restic/default.nix b/modules/restic/default.nix index f973ce9..4496e61 100644 --- a/modules/restic/default.nix +++ b/modules/restic/default.nix @@ -1,76 +1,45 @@ -# To restore something use something like -# restic-sisko restore --include /persist/var/lib/hass --target / -# To get snaphots run restic-sisko snapshots { config, pkgs, lib, ... -}: -let - user = "u382036-sub1"; - host = "u382036.your-storagebox.de"; - port = "23"; -in -{ - age.secrets = { - HETZNER_STORAGE_BOX_SISKO_SSH_PASSWORD = { - file = ../../secrets/hetzner-storage-box-sisko-ssh-password.age; - owner = "root"; +}: { + options.backup = { + paths = lib.mkOption { + type = lib.types.listOf lib.types.path; + default = []; }; - SISKO_RESTIC_PASSWORD = { - file = ../../secrets/sisko-restic-password.age; - owner = "root"; + }; + config.services.restic = { + backups = { + hetzner = { + paths = config.backup.paths; + passwordFile = config.age.secrets.restic-hetzner-password.path; + extraOptions = [ + # Use the host ssh key, for authorizing new hosts: + # cat /etc/ssh/ssh_host_ed25519_key.pub | ssh -p23 u382036-sub1@u382036-sub1.your-storagebox.de install-ssh-key + "sftp.command='ssh -p23 u382036-sub1@u382036-sub1.your-storagebox.de -i /etc/ssh/ssh_host_ed25519_key -s sftp'" + ]; + repository = "sftp://u382036-sub1@u382036-sub1.your-storagebox.de:23/"; + initialize = true; + timerConfig.OnCalendar = "daily"; + timerConfig.RandomizedDelaySec = "1h"; + }; }; }; - services.openssh.knownHosts."${host}".publicKey = - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIICf9svRenC/PLKIL9nk6K/pxQgoiFC41wTNvoIncOxs"; - - services.postgresqlBackup = { - enable = true; - backupAll = true; - location = "/var/backup/postgresql"; - }; - - environment.persistence."/persist".directories = [ - config.services.postgresqlBackup.location - ]; - - services.restic.backups.sisko = { - paths = [ - "/persist" - "/mnt/hd/immich" - "/mnt/hd/paperless" - "/mnt/hd/roam" - ]; - exclude = [ " /persist/var/lib/containers" ]; - passwordFile = config.age.secrets.SISKO_RESTIC_PASSWORD.path; - extraOptions = [ - "sftp.command='${lib.getExe pkgs.sshpass} -f ${config.age.secrets.HETZNER_STORAGE_BOX_SISKO_SSH_PASSWORD.path} ssh -p${port} ${user}@${host} -s sftp'" - ]; - repository = "sftp://${user}@${host}:${port}/"; - initialize = true; - pruneOpts = [ - "--keep-yearly 1" - "--keep-monthly 2" - "--keep-daily 7" - ]; - timerConfig.OnCalendar = "daily"; - timerConfig.RandomizedDelaySec = "1h"; - backupPrepareCommand = '' - ${pkgs.systemd}/bin/systemctl stop podman-* - ${pkgs.systemd}/bin/systemctl stop syncthing - ${pkgs.systemd}/bin/systemctl stop paperless-* - ${pkgs.systemd}/bin/systemctl stop forgejo - ${pkgs.systemd}/bin/systemctl stop home-assistant - ''; - backupCleanupCommand = '' - ${pkgs.systemd}/bin/systemctl start --no-block --all "podman-*" - ${pkgs.systemd}/bin/systemctl start syncthing - ${pkgs.systemd}/bin/systemctl start --no-block --all "paperless-*" - ${pkgs.systemd}/bin/systemctl start forgejo - ${pkgs.systemd}/bin/systemctl start home-assistant - ''; - }; + config.environment.systemPackages = builtins.map (path: + pkgs.writeShellApplication { + name = "restic-restore-${builtins.replaceStrings ["/"] ["-"] path}"; + runtimeInputs = with pkgs; [restic]; + text = '' + restic -r ${config.services.restic.backups.hetzner.repository} \ + ${lib.concatMapStringsSep ''\'' (option: "-o ${option}") config.services.restic.backups.hetzner.extraOptions} \ + --password-file ${config.services.restic.backups.hetzner.passwordFile} \ + restore latest \ + --path "${path}"\ + --target "$1" + ''; + }) + config.services.restic.backups.hetzner.paths; } diff --git a/modules/rock5b-proxy/default.nix b/modules/rock5b-proxy/default.nix new file mode 100644 index 0000000..1906a71 --- /dev/null +++ b/modules/rock5b-proxy/default.nix @@ -0,0 +1,117 @@ +{config, ...}: { + imports = [../nginx-base]; + services.nginx.virtualHosts = { + localhost.listen = [{addr = "127.0.0.1";}]; + "home.aciceri.dev" = { + forceSSL = true; + enableACME = true; + locations."/" = { + proxyPass = "http://localhost:${builtins.toString config.services.home-assistant.config.http.server_port}"; + proxyWebsockets = true; + }; + extraConfig = '' + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + ''; + }; + "torrent.aciceri.dev" = { + forceSSL = true; + enableACME = true; + locations."/" = { + proxyPass = "http://localhost:${builtins.toString config.services.transmission.settings.rpc-port}"; + }; + }; + "search.aciceri.dev" = { + forceSSL = true; + enableACME = true; + locations."/" = { + proxyPass = "http://localhost:8888"; + }; + }; + "invidious.aciceri.dev" = { + forceSSL = true; + enableACME = true; + locations."/" = { + proxyPass = "http://localhost:${builtins.toString config.services.invidious.port}"; + }; + }; + "photos.aciceri.dev" = { + extraConfig = '' + client_max_body_size 50000M; + ''; + forceSSL = true; + enableACME = true; + locations."/" = { + proxyPass = "http://localhost:2283"; + proxyWebsockets = true; + }; + }; + + # "jellyfin.aciceri.dev" = { + # forceSSL = true; + # enableACME = true; + # locations."/" = { + # proxyPass = "http://localhost:8096"; + # }; + # }; + # "sevenofnix.aciceri.dev" = { + # forceSSL = true; + # enableACME = true; + # locations."/" = { + # proxyPass = "http://10.1.1.2:${builtins.toString config.services.buildbot-master.port}"; + # proxyWebsockets = true; + # }; + # }; + }; + + # services.oauth2_proxy = { + # enable = true; + # provider = "oidc"; + # reverseProxy = true; + # # replaces following options with .keyFile + + # clientID = "shouldThisBePrivate?"; + # clientSecret = "thisShouldBePrivate"; + # cookie.secret = "thisShouldBePrivate00000"; + + # email.domains = [ "*" ]; + # extraConfig = { + # # custom-sign-in-logo = "${../../lib/mlabs-logo.svg}"; + # # scope = "user:email"; + # # banner = "MLabs Status"; + # # whitelist-domain = ".status.staging.mlabs.city"; + # oidc-issuer-url = "http://127.0.0.1:5556/dex"; + # }; + # # redirectURL = "https://status.staging.mlabs.city/oauth2/callback"; + # # keyFile = config.age.secrets.status-oauth2-secrets.path; + # # cookie.domain = ".status.staging.mlabs.city"; + # nginx = { + # virtualHosts = [ + # "search.aciceri.dev" + # ]; + # }; + # }; + + # services.dex = { + # enable = true; + # settings = { + # issuer = "http://127.0.0.1:5556/dex"; + # storage = { + # type = "postgres"; + # config.host = "/var/run/postgresql"; + # }; + # web = { + # http = "127.0.0.1:5556"; + # }; + # enablePasswordDB = true; + # staticClients = [ + # { + # # id = "oidcclient"; + # # name = "client"; + # # redirecturis = [ "https://login.aciceri.dev/callback" ]; + # # secretfile = "/etc/dex/oidcclient"; # the content of `secretfile` will be written into to the config as `secret`. + # } + # ]; + # }; + # }; +} diff --git a/modules/rock5b-samba/default.nix b/modules/rock5b-samba/default.nix new file mode 100644 index 0000000..e33b2b7 --- /dev/null +++ b/modules/rock5b-samba/default.nix @@ -0,0 +1,42 @@ +{ + services = { + samba-wsdd = { + enable = true; + workgroup = "WORKGROUP"; + hostname = "rock5b"; + discovery = true; + }; + + samba = { + enable = true; + securityType = "user"; + extraConfig = '' + workgroup = WORKGROUP + server string = rock5b + netbios name = rock5b + security = user + map to guest = bad user + vfs objects = recycle + recycle:repository = .recycle + recycle:keeptree = yes + recycle:versions = yes + ''; + shares = { + torrent = { + path = "/mnt/hd/torrent"; + comment = "torrent"; + "force user" = "ccr"; + browseable = "yes"; + writeable = "yes"; + "guest ok" = "yes"; + "read only" = "no"; + }; + }; + }; + }; + + networking.firewall = { + allowedTCPPorts = [139 445]; + allowedUDPPorts = [138]; + }; +} diff --git a/modules/searx/default.nix b/modules/searx/default.nix index 85f616f..8d18188 100644 --- a/modules/searx/default.nix +++ b/modules/searx/default.nix @@ -1,14 +1,10 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { services.searx = { enable = true; package = pkgs.searxng; settings = { server.secret_key = "secret"; - search.formats = [ - "html" - "json" - ]; + search.formats = ["html" "json"]; }; }; } diff --git a/modules/sisko-proxy/default.nix b/modules/sisko-proxy/default.nix deleted file mode 100644 index 2a79fec..0000000 --- a/modules/sisko-proxy/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - imports = [ ../nginx-base ]; - # TODO this file can be probably deleted now - # each module defining a virtualHost should import nginx-base -} diff --git a/modules/sisko-samba/default.nix b/modules/sisko-samba/default.nix deleted file mode 100644 index 9350089..0000000 --- a/modules/sisko-samba/default.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ - services = { - samba-wsdd = { - enable = true; - workgroup = "WORKGROUP"; - hostname = "rock5b"; - discovery = true; - }; - - samba = { - enable = true; - # global.security = "user"; - settings.global = { - "workgroup" = "WORKGROUP"; - "server string" = "rock5b"; - "netbios name" = "rock5b"; - "security" = "user"; - "map to guest" = "bad user"; - "vfs objects" = "recycle"; - "recycle:repository" = ".recycle"; - "recycle:keeptree" = "yes"; - "recycle:versions" = "yes"; - }; - settings = { - torrent = { - path = "/mnt/hd/torrent"; - comment = "torrent"; - "force user" = "ccr"; - browseable = "yes"; - writeable = "yes"; - "guest ok" = "yes"; - "read only" = "no"; - }; - }; - }; - }; - - networking.firewall = { - allowedTCPPorts = [ - 139 - 445 - ]; - allowedUDPPorts = [ 138 ]; - }; -} diff --git a/modules/sisko-share/default.nix b/modules/sisko-share/default.nix deleted file mode 100644 index 4ca3368..0000000 --- a/modules/sisko-share/default.nix +++ /dev/null @@ -1,97 +0,0 @@ -{ pkgs, ... }: -{ - systemd.tmpfiles.rules = [ - "d /export 770 nobody nogroup" - ]; - - fileSystems."/export/hd" = { - device = "/mnt/hd"; - options = [ "bind" ]; - }; - - services.nfs.server = { - enable = true; - exports = '' - /export 10.100.0.1/24(rw,fsid=0,no_subtree_check) - /export/hd 10.100.0.1/24(rw,nohide,insecure,no_subtree_check,no_root_squash) - ''; - }; - - systemd.services.nfs-server.preStart = '' - chmod -R 775 /export/hd/torrent - ''; - - services.webdav = { - enable = true; - - settings = { - address = "0.0.0.0"; - port = 9999; - scope = "/mnt/hd/torrent"; - modify = false; - auth = false; - debug = true; - users = [ ]; - }; - }; - - services.samba-wsdd = { - enable = true; - openFirewall = true; - # workgroup = "WORKGROUP"; - # hostname = "siko"; - # discovery = true; - }; - - services.avahi = { - publish.enable = true; - publish.userServices = true; - # ^^ Needed to allow samba to automatically register mDNS records (without the need for an `extraServiceFile` - #nssmdns4 = true; - # ^^ Not one hundred percent sure if this is needed- if it aint broke, don't fix it - enable = true; - openFirewall = true; - }; - - services.samba = { - enable = true; - # global.security = "user"; - package = pkgs.samba4Full; - # settings.global = { - # "workgroup" = "WORKGROUP"; - # "server string" = "sisko"; - # "netbios name" = "sisko"; - # "security" = "user"; - # "map to guest" = "bad user"; - # "vfs objects" = "recycle"; - # "recycle:repository" = ".recycle"; - # "recycle:keeptree" = "yes"; - # "recycle:versions" = "yes"; - # "hosts allow" = "10.1.1.0. 127.0.0.1 localhost"; - # }; - settings = { - torrent = { - path = "/mnt/hd/torrent"; - comment = "hd"; - "force user" = "transmission"; - browseable = "yes"; - writeable = "yes"; - }; - }; - }; - - users.users.webdav.extraGroups = [ "transmission" ]; - - networking.firewall = { - allowedTCPPorts = [ - 2049 - 9999 - 139 - 445 - ]; - allowedUDPPorts = [ - 137 - 138 - ]; - }; -} diff --git a/modules/ssh-initrd/default.nix b/modules/ssh-initrd/default.nix index 067f08d..07b7c5a 100644 --- a/modules/ssh-initrd/default.nix +++ b/modules/ssh-initrd/default.nix @@ -2,8 +2,7 @@ config, pkgs, ... -}: -{ +}: { # For unlocking the disk connect using ssh and type # systemctl start initrd-nixos-activation boot.initrd = { @@ -14,9 +13,9 @@ extraConfig = '' HostKey /ssh_initrd_host_ed25519_key ''; - authorizedKeys = with (import ../../lib).keys; [ - users.ccr-ssh - hosts.sisko + authorizedKeys = with (import ../../lib).keys.users; [ + ccr-gpg + ccr-ssh ]; }; }; diff --git a/modules/ssh/default.nix b/modules/ssh/default.nix index fdcb9ad..8f8033a 100644 --- a/modules/ssh/default.nix +++ b/modules/ssh/default.nix @@ -1,5 +1,4 @@ -{ fleetFlake, ... }: -{ +{fleetFlake, ...}: { services = { openssh = { enable = true; @@ -16,7 +15,5 @@ }; # This makes sense only because I'm the only user for these machines - users.users.root.openssh.authorizedKeys.keys = builtins.attrValues ( - with (import "${fleetFlake}/lib"); keys.users // keys.hosts - ); + users.users.root.openssh.authorizedKeys.keys = builtins.attrValues (with (import "${fleetFlake}/lib"); keys.users // keys.hosts); } diff --git a/modules/sunshine/default.nix b/modules/sunshine/default.nix index 8913ed1..c420ee3 100644 --- a/modules/sunshine/default.nix +++ b/modules/sunshine/default.nix @@ -1,13 +1,21 @@ { - services.sunshine = { + services.xserver = { enable = true; - autoStart = true; - capSysAdmin = true; - openFirewall = true; + videoDrivers = ["amdgpu"]; + + # displayManager.gdm.enable = true; + # displayManager.defaultSession = "gnome"; + + # displayManager.autoLogin.enable = true; + # displayManager.autoLogin.user = "sunshine"; # user must exists + + # desktopManager.gnome.enable = true; }; - hardware = { - bluetooth.input.General = { - ClassicBondedOnly = false; - }; + + users.users.sunshine = { + isSystemUser = true; + group = "sunshine"; }; + + users.groups.sunshine = {}; } diff --git a/modules/syncthing/default.nix b/modules/syncthing/default.nix index 4dacf98..d7597c5 100644 --- a/modules/syncthing/default.nix +++ b/modules/syncthing/default.nix @@ -1,40 +1,38 @@ -{ config, ... }: -{ +{config, ...}: { services = { syncthing = { enable = true; - guiAddress = "${config.networking.hostName}.wg.aciceri.dev:8434"; - # TODO Use the home-manager module instead of the following conditions - user = if config.networking.hostName == "sisko" then "syncthing" else "ccr"; - dataDir = if config.networking.hostName == "sisko" then "/mnt/hd/syncthing" else "/home/ccr"; + guiAddress = "${config.networking.hostName}.fleet:8434"; + user = config.ccr.username; + dataDir = "/home/${config.ccr.username}"; settings = { options = { urAccepted = 1; # anonymous usage data report - globalAnnounceEnabled = false; # Only sync when connected to the VPN + globalAnnounceEnabled = false; # Only sync on the VPN }; devices = { picard = { id = "XKSCJ46-EM6GIZ7-6ABQTZZ-ZRVWVFM-MJ3QNVG-F5EWHY5-ZUNYVSL-DA77YAG"; addresses = [ - "tcp://picard.wg.aciceri.dev" + "tcp://picard.fleet" ]; }; sisko = { - id = "QE6V7PR-VHMAHHS-GHD4ZI3-IBB7FEM-M6EQZBX-YFCWDAK-YCYL6VO-NNRMXQK"; + id = "L5RAQXR-6U3ANNK-UJJ5AVN-37VKQRB-UK6HXSU-NN3V6HF-JNZEVA5-NI6UEAP"; addresses = [ - "tcp://sisko.wg.aciceri.dev" + "tcp://sisko.fleet" ]; }; kirk = { id = "OVPXSCE-XFKCBJ2-A4SKJRI-DYBZ6CV-U2OFNA2-ALHOPW5-PPMHOIQ-5TG2HAJ"; addresses = [ - "tcp://kirk.wg.aciceri.dev" + "tcp://kirk.fleet" ]; }; - oneplus8t = { - id = "KMB2YRF-DGTWU24-SLITU23-5TN7BMQ-6PFAQQZ-CZ7J2QL-PIGVBTU-VRFRMQV"; + onplus6t = { + id = "76BJ2ZE-FPFDWUZ-3UZIENZ-TS6YBGG-EZSF6UE-GLHRBQ2-KTHTRMI-3JWNRAT"; addresses = [ - "tcp://oneplus8t.wg.aciceri.dev" + "tcp://oneplus6t.fleet" ]; }; }; @@ -42,31 +40,22 @@ org = { path = { - picard = "/home/ccr/org"; - sisko = "/mnt/hd/syncthing/org"; - kirk = "/home/ccr/org"; + picard = "/home/${config.ccr.username}/org"; + sisko = "/home/${config.ccr.username}/org"; + kirk = "/home/${config.ccr.username}/org"; } .${config.networking.hostName}; - devices = [ - "picard" - "sisko" - "kirk" - "oneplus8t" - ]; + devices = ["picard" "sisko" "kirk" "onplus6t"]; }; sync = { path = { - picard = "/home/ccr/sync"; - sisko = "/mnt/hd/syncthing/sync"; - kirk = "/home/ccr/sync"; + picard = "/home/${config.ccr.username}/sync"; + sisko = "/home/${config.ccr.username}/sync"; + kirk = "/home/${config.ccr.username}/sync"; } .${config.networking.hostName}; - devices = [ - "picard" - "sisko" - "kirk" - ]; + devices = ["picard" "sisko" "kirk"]; }; }; }; diff --git a/modules/teamviewer/default.nix b/modules/teamviewer/default.nix index e4f20e2..6ed6177 100644 --- a/modules/teamviewer/default.nix +++ b/modules/teamviewer/default.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { services.teamviewer.enable = true; - ccr.packages = [ pkgs.teamviewer ]; + ccr.packages = [pkgs.teamviewer]; } diff --git a/modules/transmission/default.nix b/modules/transmission/default.nix index eda7055..79f12b3 100644 --- a/modules/transmission/default.nix +++ b/modules/transmission/default.nix @@ -1,15 +1,14 @@ -{ config, ... }: -{ +{config, ...}: { services.transmission = { enable = true; openRPCPort = true; openPeerPorts = true; + # FIXME remove after https://github.com/NixOS/nixpkgs/issues/279049 + webHome = "${config.services.transmission.package}/share/transmission/web"; settings = { download-dir = "/mnt/hd/torrent"; incomplete-dir = "/mnt/hd/torrent/.incomplete"; - download-queue-enabled = false; - rpc-bind-address = "0.0.0.0"; peer-port = 51413; # Forward both TCP and UDP on router traffic from router rpc-whitelist-enabled = false; @@ -32,7 +31,7 @@ alt-speed-time-day = 127; # all days, bitmap, 0111110 is weekends and 1000001 is weekdays ratio-limit-enabled = true; - ratio-limit = 2; + ratio-limit = 100; # I am a generous god }; }; @@ -41,20 +40,9 @@ ]; systemd.tmpfiles.rules = [ - "d /mnt/hd/torrent 774 transmission transmission" - "d /mnt/hd/torrent/.incomplete 774 transmission transmission" + "d /mnt/hd/torrent 770 transmission transmission" + "d /mnt/hd/torrent/.incomplete 770 transmission transmission" ]; - environment.persistence."/persist".directories = [ - config.services.transmission.home - ]; - - services.nginx.virtualHosts."torrent.sisko.wg.aciceri.dev" = { - forceSSL = true; - useACMEHost = "aciceri.dev"; - locations."/" = { - proxyPass = "http://localhost:${builtins.toString config.services.transmission.settings.rpc-port}"; - }; - serverAliases = [ "torrent.sisko.zt.aciceri.dev" ]; - }; + ccr.extraGroups = ["transmission"]; } diff --git a/modules/virt-manager/default.nix b/modules/virt-manager/default.nix index 37863e6..08097fe 100644 --- a/modules/virt-manager/default.nix +++ b/modules/virt-manager/default.nix @@ -1,7 +1,6 @@ -{ config, ... }: -{ +{config, ...}: { programs.virt-manager.enable = true; virtualisation.libvirtd.enable = true; - users.users."${config.ccr.username}".extraGroups = [ "libvirtd" ]; + users.users."${config.ccr.username}".extraGroups = ["libvirtd"]; virtualisation.libvirtd.qemu.swtpm.enable = true; } diff --git a/modules/vm-mara/default.nix b/modules/vm-mara/default.nix index ff3e7c9..b1e8051 100644 --- a/modules/vm-mara/default.nix +++ b/modules/vm-mara/default.nix @@ -1,10 +1,10 @@ { + config, pkgs, # lib, # fleetFlake, ... -}: -{ +}: { security.polkit.enable = true; virtualisation.libvirtd.enable = true; @@ -117,37 +117,35 @@ # -audiodev alsa,id=snd0,out.try-poll=off -device ich9-intel-hda -device hda-output,audiodev=snd0 \ # -device vfio-pci,host=00:02.0 \ - systemd.services.vm-mara = - let - start-vm = pkgs.writeShellApplication { - name = "start-vm"; - runtimeInputs = with pkgs; [ qemu ]; - text = '' - [ ! -f /var/lib/vm-mara/w10.qcow2 ] && \ - qemu-img create -f qcow2 /var/lib/vm-mara/w10.qcow2 50G + systemd.services.vm-mara = let + start-vm = pkgs.writeShellApplication { + name = "start-vm"; + runtimeInputs = with pkgs; [qemu]; + text = '' + [ ! -f /var/lib/vm-mara/w10.qcow2 ] && \ + qemu-img create -f qcow2 /var/lib/vm-mara/w10.qcow2 50G - qemu-system-x86_64 \ - -enable-kvm \ - -cpu host,kvm=off,hv-spinlocks=819,hv-vapic=on,hv-relaxed=on,hv-vendor-id="IrisXE" \ - -smp 4 \ - -m 8192 \ - -nic user,model=virtio-net-pci,hostfwd=tcp::3389-:3389,hostfwd=tcp::47989-:47989,hostfwd=tcp::47990-:47990,hostfwd=tcp::47984-:47984,hostfwd=tcp::48010-:48010,hostfwd=udp::47998-:47988,hostfwd=udp::47999-:47999,hostfwd=udp::48000-:48000,hostfwd=udp::48002-:48002,hostfwd=udp::48003-:48003,hostfwd=udp::48004-:48004,hostfwd=udp::48005-:48005,hostfwd=udp::48006-:48006,hostfwd=udp::48007-:48007,hostfwd=udp::48008-:48008,hostfwd=udp::48009-:48009,hostfwd=udp::48010-:48010 \ - -cdrom /var/lib/vm-mara/virtio-win.iso \ - -device nec-usb-xhci,id=usb,bus=pci.0,addr=0x4 \ - -device usb-tablet \ - -vnc :0 \ - -nographic \ - -vga none \ - -drive file=/var/lib/vm-mara/w10.qcow2 \ - -device vfio-pci,host=00:02.0,addr=03.0,x-vga=on,multifunction=on,romfile=${./adls_dmc_ver2_01.bin} - ''; - }; - in - { - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - serviceConfig = { - ExecStart = "${start-vm}/bin/start-vm"; - }; + qemu-system-x86_64 \ + -enable-kvm \ + -cpu host,kvm=off,hv-spinlocks=819,hv-vapic=on,hv-relaxed=on,hv-vendor-id="IrisXE" \ + -smp 4 \ + -m 8192 \ + -nic user,model=virtio-net-pci,hostfwd=tcp::3389-:3389,hostfwd=tcp::47989-:47989,hostfwd=tcp::47990-:47990,hostfwd=tcp::47984-:47984,hostfwd=tcp::48010-:48010,hostfwd=udp::47998-:47988,hostfwd=udp::47999-:47999,hostfwd=udp::48000-:48000,hostfwd=udp::48002-:48002,hostfwd=udp::48003-:48003,hostfwd=udp::48004-:48004,hostfwd=udp::48005-:48005,hostfwd=udp::48006-:48006,hostfwd=udp::48007-:48007,hostfwd=udp::48008-:48008,hostfwd=udp::48009-:48009,hostfwd=udp::48010-:48010 \ + -cdrom /var/lib/vm-mara/virtio-win.iso \ + -device nec-usb-xhci,id=usb,bus=pci.0,addr=0x4 \ + -device usb-tablet \ + -vnc :0 \ + -nographic \ + -vga none \ + -drive file=/var/lib/vm-mara/w10.qcow2 \ + -device vfio-pci,host=00:02.0,addr=03.0,x-vga=on,multifunction=on,romfile=${./adls_dmc_ver2_01.bin} + ''; }; + in { + wantedBy = ["multi-user.target"]; + after = ["network.target"]; + serviceConfig = { + ExecStart = "${start-vm}/bin/start-vm"; + }; + }; } diff --git a/modules/vm-mara/i915-sriov-dkms.nix b/modules/vm-mara/i915-sriov-dkms.nix index 892b4ae..894ee01 100644 --- a/modules/vm-mara/i915-sriov-dkms.nix +++ b/modules/vm-mara/i915-sriov-dkms.nix @@ -2,9 +2,9 @@ stdenv, kernel, fetchFromGitHub, + runCommand, ... -}: -let +}: let m = stdenv.mkDerivation rec { name = "i915-sriov-dkms"; version = "4d89a1d5ba8c66308e3276c5297eda838c70cc31"; @@ -22,29 +22,32 @@ let export sourceRoot=$(pwd)/source ''; - makeFlags = kernel.makeFlags ++ [ - "-C" - "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" - "M=$(sourceRoot)" - "KVER=${kernel.version}" - ]; + makeFlags = + kernel.makeFlags + ++ [ + "-C" + "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + "M=$(sourceRoot)" + "KVER=${kernel.version}" + ]; # installPhase = '' # install -D i915.ko $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/gpu/drm/i915/i915.ko # ''; - installFlags = [ "INSTALL_MOD_PATH=${placeholder "out"}" ]; + installFlags = ["INSTALL_MOD_PATH=${placeholder "out"}"]; - installTargets = [ "modules_install" ]; + installTargets = ["modules_install"]; enableParallelBuilding = true; # meta.priority = -10; }; in -m + m # in runCommand "test" {} '' # # mkdir -p $out/lib/modules/6.1.30/kernel/drivers/gpu/drm/i915 # mkdir -p $out/lib/modules/6.1.30/extra # cp ${m}/lib/modules/6.1.30/extra/i915.ko.xz $out/lib/modules/6.1.30/extra/foo.ko.xz # '' + diff --git a/modules/vm-sala/default.nix b/modules/vm-sala/default.nix index 5702a2a..4dc5457 100644 --- a/modules/vm-sala/default.nix +++ b/modules/vm-sala/default.nix @@ -1,9 +1,9 @@ { pkgs, + lib, fleetFlake, ... -}: -{ +}: { security.polkit.enable = true; virtualisation.libvirtd.enable = true; @@ -11,7 +11,7 @@ 2222 ]; - imports = [ ../nginx-base ]; + imports = [../nginx-base]; services.nginx.virtualHosts."git.slavni.aciceri.dev" = { forceSSL = true; @@ -21,74 +21,67 @@ }; }; - systemd.services.vm-sala = - let - initial-config = fleetFlake.inputs.nixos-generators.nixosGenerate { - system = "x86_64-linux"; - modules = [ - # fleetFlake.inputs.nixos-vscode-server.nixosModule - ( - { - modulesPath, - lib, - config, - ... - }: - { - # services.vscode-server = { - # enable = true; - # enableFHS = true; - # }; - system.build.qcow = lib.mkForce ( - import "${toString modulesPath}/../lib/make-disk-image.nix" { - inherit lib config pkgs; - diskSize = 50 * 1024; - format = "qcow2"; - partitionTableType = "hybrid"; - } - ); - services.openssh.enable = true; - environment.systemPackages = with pkgs; [ - vim - git - htop - ]; - users.users.root = { - password = "password"; - openssh.authorizedKeys.keys = [ - (import "${fleetFlake.outPath}/lib").keys.users.ccr-ssh - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC7qikwR0a4LDoMQIVvtX+gyJ41OsAOWe8RcXc4ksIBP9x1nCcSrItlgC2soADB77QGIgyeyLGmnTCtMj5/s8NdREAycPeXLii1WRakbT7oZ/hTEmvAgObpadeYJn3LhaUDNtmsnAqqh2pRpCpSsAdhfIt+YyV4VgRYSfaa12Ozp/H6NI9bJMNttmG8TmY9V4zyskV9bE+up9y8Yuck2bZV/GjQe6UWgxsiC3XPSrFFGuxyaFMRGsc8h86xVwTAmwaHESEFhRvHD4EtdPNss0jqmSI6m4AoSZQ2wq7eiH8ZiYzERF0FnEFf4UsyOTM7j78bfogNLfKrdcEIPLrNNFFc3Iarfe9CJn3DdSnwwPnhFU1MBBXSbGOp1IyN3+gpjHwLMPzozlDAVqOwx6XpnpF78VpeknFBHCbkcKC/R0MXzqf900wH3i2HvfB7v9e9EUFzCQ0vUC+1Og+BFw3F5VSo0QtZyLc4BJ/akBs5mEE6TnuWQa/GhlY8Lz7wbcV1AaBOAQdx+NTbL/+Q31SJ1XsXtGtXCrwMY9noUTyVfpGVXo7Mn4HSslmeQ9SKfYKjyetkBR/1f8a47O3rCggjBy1AlfLjgbERnXy+0Ma4T8lnPZAKt3s9Ya1JupZ7SO7D5j7WfPKP+60c372/RrX1wXsxEeLvBJ0jd8GnSCXDOuvHTQ==" - ]; - }; - } - ) - ]; - format = "qcow"; - }; - image = "${initial-config}/nixos.qcow2"; - start-vm = pkgs.writeShellApplication { - name = "start-vm"; - runtimeInputs = with pkgs; [ qemu ]; - text = '' - [ ! -f /var/lib/vm-sala/nixos.qcow2 ] && \ - install ${image} /var/lib/vm-sala - - qemu-system-x86_64 \ - -enable-kvm \ - -cpu host \ - -smp 2 \ - -m 4096 \ - -nic user,model=virtio-net-pci,hostfwd=tcp::2222-:22,hostfwd=tcp::13000-:3000 \ - -nographic \ - -drive file=/var/lib/vm-sala/nixos.qcow2 - ''; - }; - in - { - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - serviceConfig = { - ExecStart = "${start-vm}/bin/start-vm"; - }; + systemd.services.vm-sala = let + initial-config = fleetFlake.inputs.nixos-generators.nixosGenerate { + system = "x86_64-linux"; + modules = [ + # fleetFlake.inputs.nixos-vscode-server.nixosModule + ({ + modulesPath, + lib, + config, + ... + }: { + # services.vscode-server = { + # enable = true; + # enableFHS = true; + # }; + system.build.qcow = lib.mkForce (import "${toString modulesPath}/../lib/make-disk-image.nix" { + inherit lib config pkgs; + diskSize = 50 * 1024; + format = "qcow2"; + partitionTableType = "hybrid"; + }); + services.openssh.enable = true; + environment.systemPackages = with pkgs; [ + vim + git + htop + ]; + users.users.root = { + password = "password"; + openssh.authorizedKeys.keys = [ + (import "${fleetFlake.outPath}/lib").keys.users.ccr-ssh + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC7qikwR0a4LDoMQIVvtX+gyJ41OsAOWe8RcXc4ksIBP9x1nCcSrItlgC2soADB77QGIgyeyLGmnTCtMj5/s8NdREAycPeXLii1WRakbT7oZ/hTEmvAgObpadeYJn3LhaUDNtmsnAqqh2pRpCpSsAdhfIt+YyV4VgRYSfaa12Ozp/H6NI9bJMNttmG8TmY9V4zyskV9bE+up9y8Yuck2bZV/GjQe6UWgxsiC3XPSrFFGuxyaFMRGsc8h86xVwTAmwaHESEFhRvHD4EtdPNss0jqmSI6m4AoSZQ2wq7eiH8ZiYzERF0FnEFf4UsyOTM7j78bfogNLfKrdcEIPLrNNFFc3Iarfe9CJn3DdSnwwPnhFU1MBBXSbGOp1IyN3+gpjHwLMPzozlDAVqOwx6XpnpF78VpeknFBHCbkcKC/R0MXzqf900wH3i2HvfB7v9e9EUFzCQ0vUC+1Og+BFw3F5VSo0QtZyLc4BJ/akBs5mEE6TnuWQa/GhlY8Lz7wbcV1AaBOAQdx+NTbL/+Q31SJ1XsXtGtXCrwMY9noUTyVfpGVXo7Mn4HSslmeQ9SKfYKjyetkBR/1f8a47O3rCggjBy1AlfLjgbERnXy+0Ma4T8lnPZAKt3s9Ya1JupZ7SO7D5j7WfPKP+60c372/RrX1wXsxEeLvBJ0jd8GnSCXDOuvHTQ==" + ]; + }; + }) + ]; + format = "qcow"; }; + image = "${initial-config}/nixos.qcow2"; + start-vm = pkgs.writeShellApplication { + name = "start-vm"; + runtimeInputs = with pkgs; [qemu]; + text = '' + [ ! -f /var/lib/vm-sala/nixos.qcow2 ] && \ + install ${image} /var/lib/vm-sala + + qemu-system-x86_64 \ + -enable-kvm \ + -cpu host \ + -smp 2 \ + -m 4096 \ + -nic user,model=virtio-net-pci,hostfwd=tcp::2222-:22,hostfwd=tcp::13000-:3000 \ + -nographic \ + -drive file=/var/lib/vm-sala/nixos.qcow2 + ''; + }; + in { + wantedBy = ["multi-user.target"]; + after = ["network.target"]; + serviceConfig = { + ExecStart = "${start-vm}/bin/start-vm"; + }; + }; } diff --git a/modules/vm-ubuntu/default.nix b/modules/vm-ubuntu/default.nix index f7c4518..9c07fe5 100644 --- a/modules/vm-ubuntu/default.nix +++ b/modules/vm-ubuntu/default.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { virtualisation.libvirtd.enable = true; networking.firewall.interfaces."wg0" = { @@ -11,27 +10,25 @@ ]; }; - systemd.services.vm-ubuntu = - let - start-vm = pkgs.writeShellApplication { - name = "start-vm"; - runtimeInputs = with pkgs; [ qemu ]; - text = '' - qemu-system-x86_64 \ - -enable-kvm \ - -cpu host,kvm=on,hv-vendor_id="GenuineIntel" \ - -smp 4 \ - -m 8192 \ - -nic user,model=virtio-net-pci,hostfwd=tcp::60022-:22,hostfwd=tcp::8545-:8545 \ - -drive file=/var/lib/vm-ubuntu/ubuntu.qcow2 - ''; - }; - in - { - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - serviceConfig = { - ExecStart = "${start-vm}/bin/start-vm"; - }; + systemd.services.vm-ubuntu = let + start-vm = pkgs.writeShellApplication { + name = "start-vm"; + runtimeInputs = with pkgs; [qemu]; + text = '' + qemu-system-x86_64 \ + -enable-kvm \ + -cpu host,kvm=on,hv-vendor_id="GenuineIntel" \ + -smp 4 \ + -m 8192 \ + -nic user,model=virtio-net-pci,hostfwd=tcp::60022-:22,hostfwd=tcp::8545-:8545 \ + -drive file=/var/lib/vm-ubuntu/ubuntu.qcow2 + ''; }; + in { + wantedBy = ["multi-user.target"]; + after = ["network.target"]; + serviceConfig = { + ExecStart = "${start-vm}/bin/start-vm"; + }; + }; } diff --git a/modules/wireguard-client/default.nix b/modules/wireguard-client/default.nix index 28bc943..9a93f17 100644 --- a/modules/wireguard-client/default.nix +++ b/modules/wireguard-client/default.nix @@ -2,18 +2,16 @@ config, vpn, ... -}: -{ - imports = [ ../wireguard-common ]; +}: { + imports = [../wireguard-common]; networking.wireguard.interfaces.wg0 = { mtu = 1200; - ips = [ "${vpn.${config.networking.hostName}.ip}/32" ]; + ips = ["${vpn.${config.networking.hostName}.ip}/32"]; peers = [ { publicKey = vpn.sisko.publicKey; - allowedIPs = [ "10.100.0.0/24" ]; - # allowedIPs = [ "0.0.0.0/24" ]; # Uncomment for full tunnel + allowedIPs = ["10.100.0.0/24"]; endpoint = "vpn.aciceri.dev:51820"; persistentKeepalive = 25; } diff --git a/modules/wireguard-common/default.nix b/modules/wireguard-common/default.nix index 6451aa5..9ebfc78 100644 --- a/modules/wireguard-common/default.nix +++ b/modules/wireguard-common/default.nix @@ -1,8 +1,9 @@ { + lib, config, + vpn, ... -}: -{ +}: { networking.firewall.interfaces.wg0 = { allowedUDPPortRanges = [ { @@ -22,4 +23,12 @@ privateKeyFile = config.age.secrets."${config.networking.hostName}-wireguard-private-key".path; listenPort = 51820; }; + + networking.hosts = + lib.mapAttrs' + (hostname: vpnConfig: { + name = vpnConfig.ip; + value = ["${hostname}.fleet"]; + }) + vpn; } diff --git a/modules/wireguard-mlabs/default.nix b/modules/wireguard-mlabs/default.nix deleted file mode 100644 index 2d583f7..0000000 --- a/modules/wireguard-mlabs/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, ... }: -{ - networking.wireguard.interfaces.wg1 = { - ips = [ "10.10.1.1/32" ]; - peers = [ - { - publicKey = "A4u2Rt5WEMHOAc6YpDABkqAy2dzzFLH9Gn8xWcKaPQQ="; - allowedIPs = [ "10.10.0.0/16" ]; - endpoint = "vpn.staging.mlabs.city:51820"; - persistentKeepalive = 25; - } - ]; - privateKeyFile = config.age.secrets.wireguard-mlabs-private-key.path; - }; -} diff --git a/modules/wireguard-server/default.nix b/modules/wireguard-server/default.nix index efb9b41..7c4b7c7 100644 --- a/modules/wireguard-server/default.nix +++ b/modules/wireguard-server/default.nix @@ -2,29 +2,21 @@ config, lib, vpn, - pkgs, ... -}: -{ - imports = [ ../wireguard-common ]; +}: { + imports = [../wireguard-common]; networking.nat.enable = true; - networking.firewall.allowedUDPPorts = [ config.networking.wireguard.interfaces.wg0.listenPort ]; + networking.firewall.allowedUDPPorts = [config.networking.wireguard.interfaces.wg0.listenPort]; # FIXME move this to wireguard-server networking.wireguard.interfaces.wg0 = { - ips = [ "${vpn.${config.networking.hostName}.ip}/24" ]; - peers = lib.mapAttrsToList (_hostname: vpnConfig: { - publicKey = vpnConfig.publicKey; - allowedIPs = [ "${vpnConfig.ip}/32" ]; - }) vpn; - - postSetup = '' - ${lib.getExe' pkgs.iptables "iptables"} -t nat -A POSTROUTING -s 10.100.0.0/24 -o enP4p65s0 -j MASQUERADE - ''; - - postShutdown = '' - ${lib.getExe' pkgs.iptables "iptables"} -t nat -D POSTROUTING -s 10.100.0.0/24 -o enP4p65s0 -j MASQUERADE - ''; + ips = ["${vpn.${config.networking.hostName}.ip}/24"]; + peers = + lib.mapAttrsToList (hostname: vpnConfig: { + publicKey = vpnConfig.publicKey; + allowedIPs = ["${vpnConfig.ip}/32"]; + }) + vpn; }; } diff --git a/modules/xdg/default.nix b/modules/xdg/default.nix index 7dd59d5..5631915 100644 --- a/modules/xdg/default.nix +++ b/modules/xdg/default.nix @@ -1,51 +1,16 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { xdg = { - autostart.enable = true; - menus.enable = true; - mime.enable = true; - icons.enable = true; portal = { enable = true; - configPackages = with pkgs; [ - # xdg-desktop-portal-wlr - # xdg-desktop-portal-gtk - # xdg-desktop-portal-hyprland - xdg-desktop-portal-gnome - # xdg-desktop-portal - # kdePackages.xdg-desktop-portal-kde - # libsForQt5.xdg-desktop-portal-kde - gnome-keyring - ]; extraPortals = with pkgs; [ - # xdg-desktop-portal-wlr - # xdg-desktop-portal-gtk - # xdg-desktop-portal-hyprland - xdg-desktop-portal-gnome - # xdg-desktop-portal - # kdePackages.xdg-desktop-portal-kde - gnome-keyring + xdg-desktop-portal-gtk + xdg-desktop-portal-hyprland ]; - xdgOpenUsePortal = true; - wlr.enable = true; + config.common.default = "*"; }; - }; - security.rtkit.enable = true; - security.polkit.enable = true; - services.gnome.gnome-keyring.enable = true; - systemd.user.services.niri-flake-polkit = { - description = "PolicyKit Authentication Agent provided by niri-flake"; - wantedBy = [ "niri.service" ]; - after = [ "graphical-session.target" ]; - partOf = [ "graphical-session.target" ]; - serviceConfig = { - Type = "simple"; - ExecStart = "${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1"; - Restart = "on-failure"; - RestartSec = 1; - TimeoutStopSec = 10; - }; + environment.sessionVariables = { + GTK_USE_PORTAL = "1"; }; } diff --git a/modules/xfce/default.nix b/modules/xfce/default.nix index 3eeff72..2294bb4 100644 --- a/modules/xfce/default.nix +++ b/modules/xfce/default.nix @@ -5,11 +5,10 @@ xterm.enable = false; xfce.enable = true; }; - }; - - services.displayManager = { - defaultSession = "xfce"; - autoLogin.user = "mara"; + displayManager = { + defaultSession = "xfce"; + autoLogin.user = "mara"; + }; }; home-manager.users.mara.home.file."background-image" = { diff --git a/modules/zerotier/default.nix b/modules/zerotier/default.nix deleted file mode 100644 index 0b5a552..0000000 --- a/modules/zerotier/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, lib, ... }: -{ - services.zerotierone = { - enable = true; - joinNetworks = [ "632ea29085af0cb4" ]; - }; - environment = - if (config.networking.hostName == "sisko") then - { - persistence."/persist".directories = [ - "/var/lib/zerotier-one" - ]; - } - else - { }; -} diff --git a/packages/default.nix b/packages/default.nix index 258985d..d501506 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -4,23 +4,22 @@ config, self, ... -}: -{ +}: { options.fleet = { - overlays = - let - overlayType = lib.mkOptionType { - name = "nixpkgs-overlay"; - description = "nixpkgs overlay"; - check = lib.isFunction; - merge = lib.mergeOneOption; - }; - in + overlays = let + overlayType = lib.mkOptionType { + name = "nixpkgs-overlay"; + description = "nixpkgs overlay"; + check = lib.isFunction; + merge = lib.mergeOneOption; + }; + in lib.mkOption { description = "Nixpkgs overlays to apply at flake level (not in hosts)"; type = lib.types.listOf overlayType; default = with inputs; [ agenix.overlays.default + nur.overlay (final: _: { inherit (disko.packages.${final.system}) disko; inherit (self.packages.${final.system}) deploy; @@ -32,35 +31,39 @@ description = "Packages that are broken on a given system"; type = lib.types.attrsOf (lib.types.listOf lib.types.str); default = { - aarch64-linux = [ "llm-workflow-engine" ]; - x86_64-linux = [ ]; + aarch64-linux = ["llm-workflow-engine"]; + x86_64-linux = []; }; }; }; - config.perSystem = - { - system, - lib, - pkgs, - ... - }: - { - _module.args.pkgs = lib.foldl ( - legacyPackages: legacyPackages.extend - ) inputs.nixpkgs.legacyPackages.${system} config.fleet.overlays; + config.perSystem = { + system, + lib, + pkgs, + ... + }: { + _module.args.pkgs = + lib.foldl + (legacyPackages: legacyPackages.extend) + inputs.nixpkgsUnstable.legacyPackages.${system} + config.fleet.overlays; - packages = builtins.removeAttrs (lib.mapAttrs' + packages = + builtins.removeAttrs + (lib.mapAttrs' (name: value: { inherit name; value = pkgs.callPackage "${self}/packages/${name}" { + pkgsStable = inputs.nixpkgsStable.legacyPackages.${system}; dream2nix = inputs.dream2nix; projectRoot = self.outPath; packagePath = "packages/${name}"; - inherit inputs; }; }) - (lib.filterAttrs (_: type: type == "directory") (builtins.readDir "${self}/packages")) - ) config.fleet.brokenPackages.${system}; - }; + (lib.filterAttrs + (_: type: type == "directory") + (builtins.readDir "${self}/packages"))) + config.fleet.brokenPackages.${system}; + }; } diff --git a/packages/deploy-darwin/default.nix b/packages/deploy-darwin/default.nix deleted file mode 100644 index 3feba21..0000000 --- a/packages/deploy-darwin/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - writeShellApplication, - ... -}: -writeShellApplication { - name = "deploy-darwin"; - text = builtins.readFile ./deploy-darwin.sh; - runtimeInputs = [ ]; -} diff --git a/packages/deploy-darwin/deploy-darwin.sh b/packages/deploy-darwin/deploy-darwin.sh deleted file mode 100644 index baf540b..0000000 --- a/packages/deploy-darwin/deploy-darwin.sh +++ /dev/null @@ -1,11 +0,0 @@ -CLOSURE_DRV=$(nix eval .#darwinConfigurations.archer.config.system.build.toplevel.drvPath --raw) -echo "$CLOSURE_DRV" - -nix copy --to ssh://admin@macos-ventura "$CLOSURE_DRV" - -# shellcheck disable=SC2029 -ssh admin@macos-ventura "nix build $CLOSURE_DRV^out" -ssh admin@macos-ventura "./result/activate-user" -ssh admin@macos-ventura "echo admin | sudo -S ./result/activate" -# ssh admin@macos-ventura "./result/sw/bin/darwin-rebuild activate" -ssh admin@macos-ventura "nix profile install ./result" diff --git a/packages/deploy/default.nix b/packages/deploy/default.nix index 058993b..e7cfd57 100644 --- a/packages/deploy/default.nix +++ b/packages/deploy/default.nix @@ -6,5 +6,5 @@ writeShellApplication { name = "deploy"; text = builtins.readFile ./deploy.sh; - runtimeInputs = [ nixos-rebuild ]; + runtimeInputs = [nixos-rebuild]; } diff --git a/packages/deploy/deploy.sh b/packages/deploy/deploy.sh index 8823453..045facb 100644 --- a/packages/deploy/deploy.sh +++ b/packages/deploy/deploy.sh @@ -1,9 +1,9 @@ -host=${1-picard} +host=${1-mothership} nixos-rebuild switch \ - --flake ".#${host}" \ - --target-host "root@${host}.wg.aciceri.dev" \ - --build-host "root@${host}.wg.aciceri.dev" \ - --option warn-dirty false \ - --fast \ - "${@:2}" + --flake ".#${host}" \ + --target-host "root@${host}.fleet" \ + --build-host "root@${host}.fleet" \ + --option warn-dirty false \ + --fast \ + "${@:2}" diff --git a/packages/emacs/default.nix b/packages/emacs/default.nix deleted file mode 100644 index 9bb0125..0000000 --- a/packages/emacs/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - lib, - inputs, - pkgs, - ... -}: -let - pkgs' = pkgs.extend ( - lib.composeManyExtensions [ - inputs.emacs-overlay.overlays.package - inputs.emacs-overlay.overlays.emacs - ] - ); - all-grammars = pkgs'.tree-sitter.withPlugins builtins.attrValues; - treesitGrammars = pkgs'.runCommand "treesit-grammars" { } '' - mkdir $out - for f in ${all-grammars}/* - do - cp $f $out/"libtree-sitter-$(basename $f)" - done - ''; - emacsWithoutPackages = pkgs'.emacs-unstable.override { - withSQLite3 = true; - withWebP = true; - withPgtk = true; - }; - emacs = (pkgs'.emacsPackagesFor emacsWithoutPackages).emacsWithPackages ( - import ./packages.nix pkgs' - ); -in -emacs.overrideAttrs { - passthru = { - inherit treesitGrammars; - }; -} diff --git a/packages/emacs/packages.nix b/packages/emacs/packages.nix deleted file mode 100644 index 2d1950a..0000000 --- a/packages/emacs/packages.nix +++ /dev/null @@ -1,233 +0,0 @@ -pkgs: epkgs: -let - inherit (epkgs) melpaPackages nongnuPackages elpaPackages; - - buildEmacsPackage = - args: - epkgs.trivialBuild { - pname = args.name; - inherit (args) src; - version = args.src.rev; - propagatedUserEnvPkgs = args.deps; - buildInputs = args.deps; - postInstall = args.postInstall or ""; - }; - - # *Attrset* containig extra emacs packages - extraPackages = { - combobulate = buildEmacsPackage { - name = "combobulate"; - src = pkgs.fetchFromGitHub { - owner = "mickeynp"; - repo = "combobulate"; - rev = "e9c5be84062e8183f556d7133d5a477a57e37e51"; - hash = "sha256-r6jObsYx7RRTJUmrCN5h3+0WcHqJA67emhr4/W3rBrM="; - }; - deps = [ ]; - }; - gptscript = buildEmacsPackage { - name = "gptscript"; - src = pkgs.fetchFromGitHub { - owner = "emacs-openai"; - repo = "gptscript-mode"; - rev = "d9c6272de1288d3f42a1cbac136e5fac57e185e2"; - hash = "sha256-RM0dptx8qm2b4fvW6oQ0Lq5kshRKcapeIW2piUMAZmw="; - }; - deps = [ ]; - }; - p-search = buildEmacsPackage { - name = "p-search"; - src = pkgs.fetchFromGitHub { - owner = "zkry"; - repo = "p-search"; - rev = "3fcf06f862976433642d07d06ec911efc43d0189"; - hash = "sha256-j4JEV+uHXK5Uf6/7D2AaSMKxBr3t59U+WNZzVsJ+gkc="; - }; - deps = [ elpaPackages.heap ]; - }; - copilot = buildEmacsPackage { - name = "copilot"; - src = pkgs.fetchFromGitHub { - owner = "copilot-emacs"; - repo = "copilot.el"; - rev = "b7bff7b934837744688fd74191ecffb83b3bcc05"; - hash = "sha256-MEsjXQIeiTI6NXN5rTW7HfFPC18IZnhAssma2BZa0ks="; - }; - deps = with epkgs; [ - s - dash - editorconfig - jsonrpc - f - ]; - }; - lean4-mode = buildEmacsPackage { - name = "lean4-mode"; - src = pkgs.fetchFromGitHub { - owner = "leanprover-community"; - repo = "lean4-mode"; - rev = "76895d8939111654a472cfc617cfd43fbf5f1eb6"; - hash = "sha256-DLgdxd0m3SmJ9heJ/pe5k8bZCfvWdaKAF0BDYEkwlMQ="; - }; - deps = [ - epkgs.dash - melpaPackages.magit - melpaPackages.lsp-mode - ]; - postInstall = '' - cp -r $src/data $LISPDIR - ''; - }; - kdl-ts-mode = buildEmacsPackage { - name = "kdl-ts-mode"; - src = pkgs.fetchFromGitHub { - owner = "dataphract"; - repo = "kdl-ts-mode"; - rev = "3dbf116cd19261d8d70f456ae3385e1d20208452"; - hash = "sha256-4bfKUzzLhBFg4TeGQD0dClumcO4caIBU8/uRncFVVFQ="; - }; - deps = [ ]; - }; - ultra-scroll = buildEmacsPackage { - name = "ultra-scroll"; - src = pkgs.fetchFromGitHub { - owner = "jdtsmith"; - repo = "ultra-scroll"; - rev = "78ab497c6568e4a99f34a84b4c9bfe87d1a71d8c"; - hash = "sha256-q/LGP69GRtEEbSpXi9JUoZjr/UV1QMVjQw96M6qxsZU="; - }; - deps = [ ]; - }; - eglot-booster = buildEmacsPackage { - name = "eglot-booster"; - src = pkgs.fetchFromGitHub { - owner = "jdtsmith"; - repo = "eglot-booster"; - rev = "e6daa6bcaf4aceee29c8a5a949b43eb1b89900ed"; - hash = "sha256-PLfaXELkdX5NZcSmR1s/kgmU16ODF8bn56nfTh9g6bs="; - }; - deps = [ ]; - }; - }; - - # *List* containing emacs packages from (M)ELPA - mainPackages = - builtins.filter - # if an extra package has the same name then give precedence to it - (package: !builtins.elem package.pname (builtins.attrNames extraPackages)) - ( - with melpaPackages; - [ - meow - meow-tree-sitter - dracula-theme - nord-theme - catppuccin-theme - modus-themes - # solaire-mode - nerd-icons - nerd-icons-completion - nerd-icons-ibuffer - nerd-icons-dired - ligature - treemacs-nerd-icons - eshell-syntax-highlighting - eshell-prompt-extras - eshell-atuin - eshell-command-not-found - clipetty - sideline - consult-eglot - # sideline-flymake - rainbow-delimiters - vertico - marginalia - consult - orderless - embark - embark-consult - magit - (magit-delta.override (old: { - # FIXME why is this needed? - melpaBuild = - args: - old.melpaBuild ( - args - // { - packageRequires = (args.packageRequires or [ ]) ++ [ dash ]; - } - ); - })) - magit-todos - difftastic - with-editor - diff-hl - corfu - cape - which-key - nix-mode - nix-ts-mode - agenix - zig-mode - unisonlang-mode - purescript-mode - dhall-mode - envrc - inheritenv - popper - paredit - yaml-mode - hl-todo - markdown-mode - haskell-mode - terraform-mode - rust-mode - diredfl - org-modern - math-preview - org-roam - org-roam-ql - org-roam-ui - org-download - visual-fill-column - consult-org-roam - pass - password-store-otp - eldoc-box - go-translate - notmuch - consult-notmuch - poly-org - casual - gptel - agenix - solidity-mode - telega - aggressive-indent - mixed-pitch - visual-replace - org-super-agenda - tidal - aidermacs - # org-re-reveal # FIXME very not nice hash mismatch when building - ] - ) - ++ (with elpaPackages; [ - delight - kind-icon - ef-themes - indent-bars - ement - vundo - pulsar - ]) - ++ (with nongnuPackages; [ - eat - corfu-terminal - haskell-ts-mode - ]) - ++ (with epkgs; [ - typst-ts-mode # why this doesn't seem to be in elpaPackages? - ]); -in -mainPackages ++ (builtins.attrValues extraPackages) diff --git a/packages/emails-watcher/default.nix b/packages/emails-watcher/default.nix deleted file mode 100644 index 965086f..0000000 --- a/packages/emails-watcher/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - writers, - python3Packages, - ... -}: -writers.writePython3Bin "emails-watcher" { - libraries = with python3Packages; [ - watchdog - desktop-notifier - ]; - flakeIgnore = [ ]; -} (builtins.readFile ./emails-watcher.py) diff --git a/packages/emails-watcher/emails-watcher.py b/packages/emails-watcher/emails-watcher.py deleted file mode 100644 index 7188082..0000000 --- a/packages/emails-watcher/emails-watcher.py +++ /dev/null @@ -1,40 +0,0 @@ -import os -from watchdog.observers import Observer -from watchdog.events import FileSystemEventHandler -from email import message_from_file -from desktop_notifier import DesktopNotifierSync, DEFAULT_SOUND, Icon - - -class MaildirHandler(FileSystemEventHandler): - def __init__(self, notifier): - super().__init__() - self.notifier = notifier - - def on_created(self, event): - if not event.is_directory: - print(f"New email found: {event.src_path}") - with open(event.src_path, "r") as email_file: - msg = message_from_file(email_file) - print(f'{msg["From"]}: {msg["Subject"]}') - self.notifier.send( - title=msg["From"], - message=msg["Subject"], - sound=DEFAULT_SOUND, - icon=Icon(name="mail-message-new"), - timeout=20, - ) - - -if __name__ == "__main__": - maildir_new = os.path.expanduser(os.environ.get("INBOX_NEW")) - notifier = DesktopNotifierSync(app_name="Mails", notification_limit=10) - - event_handler = MaildirHandler(notifier) - observer = Observer() - - observer.schedule(event_handler, maildir_new, recursive=False) - - print(f"Monitoring {maildir_new} for new emails...") - - observer.start() - observer.join() diff --git a/packages/ffmpeg-rockchip/default.nix b/packages/ffmpeg-rockchip/default.nix deleted file mode 100644 index ed2f637..0000000 --- a/packages/ffmpeg-rockchip/default.nix +++ /dev/null @@ -1,149 +0,0 @@ -# Stolen from https://github.com/nyanmisaka/ffmpeg-rockchip - -{ - ffmpeg-full, - fetchFromGitHub, - lib, - fetchpatch2, - gmp, - amf-headers, - libiec61883, - libavc1394, - meson, - ninja, - stdenv, - fetchurl, - cmake, - ... -}: - -let - ffmpeg-rockchip-version = "7.1"; - - rga_commit = "d7a0a485ed6c201f882c20b3a8881e801f131385"; - librga-multi = stdenv.mkDerivation { - pname = "librga-multi"; - version = "1.10.0"; - - src = fetchurl { - url = "https://github.com/JeffyCN/mirrors/archive/${rga_commit}.tar.gz"; - hash = "sha256-WjNxVfLVW8axEvNmIJ0+OCeboG4LiGWwJy6fW5Mkm5Y="; - }; - - # In Nixpkgs, meson comes with a setup hook that overrides the configure, check, and install phases. - # https://nixos.org/manual/nixpkgs/stable/#meson - nativeBuildInputs = [ - meson - ninja - ]; - - patches = [ - (fetchpatch2 { - name = "normalrga-cpp-add-10b-compact-endian-mode.patch"; - url = "https://raw.githubusercontent.com/7Ji-PKGBUILDs/librga-multi/615fb730b7656ad4a0cb169bfa9a52336820f99f/normalrga-cpp-add-10b-compact-endian-mode.patch"; - hash = "sha256-JvKZCBjWtkEsfx1Xsnysw9PjC3/60f1ni10tmR8fTHQ="; - }) - ]; - - meta = with lib; { - description = "Rockchip RGA User-Space Library"; - license = licenses.asl20; - }; - }; - - mpp = stdenv.mkDerivation { - pname = "mpp"; - version = "1.0.8"; - - src = fetchFromGitHub { - owner = "rockchip-linux"; - repo = "mpp"; - rev = "1.0.8"; - hash = "sha256-y1vWGz7VjwL02klPQWwoIh5ExpvS/vsDUHcMtMznVcI="; - }; - - nativeBuildInputs = [ cmake ]; - - configurePhase = '' - cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$out - ''; - - buildPhase = '' - cmake --build build - ''; - - installPhase = '' - cmake --install build - ''; - - meta = with lib; { - description = "Media Process Platform (MPP)"; - homepage = "https://github.com/rockchip-linux/mpp"; - license = licenses.asl20; - }; - }; -in - -(ffmpeg-full.override { - version = ffmpeg-rockchip-version; # Important! This sets the ABI. - source = fetchFromGitHub { - owner = "nyanmisaka"; - repo = "ffmpeg-rockchip"; - rev = "f5c7e0d63b52b4526b4251e2fcb2071f73367ed6"; - hash = "sha256-JM/YCvXS49jYz4oF0Ux/aGzrRzKHrD8N/Xm99gXLcqg="; - }; - withVulkan = false; -}).overrideAttrs - (old: { - pname = "ffmpeg-rockchip"; - - patches = [ ]; - # patches = old.patches ++ [ - # (fetchpatch2 - # { - # name = "add-av_stream_get_first_dts-for-chromium"; - # url = "https://raw.githubusercontent.com/7Ji-PKGBUILDs/ffmpeg-mpp-git/b32080c1992313df0e543440c6d70d351120fa36/add-av_stream_get_first_dts-for-chromium.patch"; - # hash = "sha256-DbH6ieJwDwTjKOdQ04xvRcSLeeLP2Z2qEmqeo8HsPr4="; - # } - # ) - # (fetchpatch2 - # { - # name = "flvdec-handle-unknown"; - # url = "https://raw.githubusercontent.com/obsproject/obs-deps/faa110d336922831b5cdc261a9559e3a2dd5db3c/deps.ffmpeg/patches/FFmpeg/0001-flvdec-handle-unknown.patch"; - # hash = "sha256-WlGF9Uy89GcnY8zmh9G23bZiVJtpY32oJiec5Hl/V+8="; - # } - # ) - # (fetchpatch2 - # { - # name = "libaomenc-presets"; - # url = "https://raw.githubusercontent.com/obsproject/obs-deps/faa110d336922831b5cdc261a9559e3a2dd5db3c/deps.ffmpeg/patches/FFmpeg/0002-libaomenc-presets.patch"; - # hash = "sha256-1fFBDvsx/jHo6QXsPxDMt4Qd1VlMs1kcOyBedyMv0YM="; - # } - # ) - # ]; - - configureFlags = old.configureFlags ++ [ - "--extra-version=rockchip" - "--enable-gpl" - "--enable-version3" - "--enable-libdrm" - "--enable-rkmpp" - "--enable-rkrga" - ]; - - doCheck = false; # TODO remove (used to get faster builds) - - buildInputs = old.buildInputs ++ [ - gmp - amf-headers - libiec61883 - libavc1394 - mpp - librga-multi - ]; - - meta = with lib; { - homepage = "https://github.com/nyanmisaka/ffmpeg-rockchip"; - license = licenses.gpl3; - }; - }) diff --git a/packages/forgejo-report-checks/default.nix b/packages/forgejo-report-checks/default.nix deleted file mode 100644 index 038d2ca..0000000 --- a/packages/forgejo-report-checks/default.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - writers, - python3Packages, - fetchFromGitea, - ... -}: -let - pyforgejo = python3Packages.buildPythonPackage rec { - pname = "pyforgejo"; - version = "1.0.4"; - - pyproject = true; - build-system = [ python3Packages.poetry-core ]; - - src = fetchFromGitea { - domain = "codeberg.org"; - owner = "harabat"; - repo = "pyforgejo"; - rev = "3dba949bea41140a47e4dd422a84a6da9fd394e9"; - hash = "sha256-qVXlfhKrc7yBnRvL/65bLZFW9fDjC+8FNz7yA6iMPp4="; - }; - - pythonRelaxDeps = [ - "httpx" - ]; - - dependencies = with python3Packages; [ - attrs - httpx - python-dateutil - ]; - - pythonImportsCheck = [ "pyforgejo" ]; - }; -in -writers.writePython3Bin "report-checks" { - libraries = [ pyforgejo ]; - flakeIgnore = [ "E501" ]; -} (builtins.readFile ./forgejo-report-checks.py) diff --git a/packages/forgejo-report-checks/forgejo-report-checks.py b/packages/forgejo-report-checks/forgejo-report-checks.py deleted file mode 100644 index 52004c4..0000000 --- a/packages/forgejo-report-checks/forgejo-report-checks.py +++ /dev/null @@ -1,37 +0,0 @@ -from pyforgejo import AuthenticatedClient -from pyforgejo.api.repository import repo_create_status -from pyforgejo.models.create_status_option import CreateStatusOption -import json -from os import environ - -client = AuthenticatedClient( - base_url=environ["GITHUB_API_URL"], token=environ["GITHUB_TOKEN"] -) - -with open("result.json", "r") as file: - data = json.load(file) - -print("Reporting statuses acording to the following result.json") -print(json.dumps(data, indent=2)) - -for result in data["results"]: - attr = result["attr"] - success = result["success"] - type = result["type"] - print(f"Report status success={success} for {type} {attr}") - response = repo_create_status.sync_detailed( - owner="aciceri", - repo="nixfleet", - sha=environ["GITHUB_SHA"], - client=client, - body=CreateStatusOption( - context=type, - description=attr, - target_url="https://git.aciceri.dev", # FIXME - state=( - "success" if success else "failure" - ), # may be pending,success,failure,error_message - ), - ) - -print("Done reporting statuses") diff --git a/packages/garmin-collector/default.nix b/packages/garmin-collector/default.nix deleted file mode 100644 index 8f911a4..0000000 --- a/packages/garmin-collector/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - writers, - python3Packages, - ... -}: -writers.writePython3Bin "garmin-collector" { - libraries = with python3Packages; [ - prometheus-client - garminconnect - ]; - flakeIgnore = [ "E501" ]; -} (builtins.readFile ./garmin-collector.py) diff --git a/packages/garmin-collector/garmin-collector.py b/packages/garmin-collector/garmin-collector.py deleted file mode 100644 index a61b4d3..0000000 --- a/packages/garmin-collector/garmin-collector.py +++ /dev/null @@ -1,93 +0,0 @@ -# !/usr/bin/env python3 - -import datetime -import os - -from garth.exc import GarthHTTPError - -from garminconnect import ( - Garmin, - GarminConnectAuthenticationError, -) - - -from prometheus_client import CollectorRegistry, push_to_gateway -from prometheus_client.core import GaugeMetricFamily - -email = os.getenv("GARMIN_EMAIL") -password = os.getenv("GARMIN_PASSWORD") -tokenstore = os.getenv("GARMINTOKENS") or "~/.garminconnect" -tokenstore_base64 = os.getenv("GARMINTOKENS_BASE64") or "~/.garminconnect_base64" -gateway_address = os.getenv("PUSHGATEWAY_ADDRESS") - -today = datetime.date.today() - - -def init_api(email=email, password=password): - """Initialize Garmin API with your credentials.""" - - try: - print( - f"Trying to login to Garmin Connect using token data from directory '{tokenstore}'...\n" - ) - - garmin = Garmin() - garmin.login(tokenstore) - except (FileNotFoundError, GarthHTTPError, GarminConnectAuthenticationError): - # Session is expired. You'll need to log in again - print( - "Login tokens not present, login with your Garmin Connect credentials to generate them.\n" - f"They will be stored in '{tokenstore}' for future use.\n" - ) - garmin = Garmin(email=email, password=password, is_cn=False) - garmin.login() - # Save Oauth1 and Oauth2 token files to directory for next login - garmin.garth.dump(tokenstore) - print( - f"Oauth tokens stored in '{tokenstore}' directory for future use. (first method)\n" - ) - # Encode Oauth1 and Oauth2 tokens to base64 string and safe to file for next login (alternative way) - token_base64 = garmin.garth.dumps() - dir_path = os.path.expanduser(tokenstore_base64) - with open(dir_path, "w") as token_file: - token_file.write(token_base64) - print( - f"Oauth tokens encoded as base64 string and saved to '{dir_path}' file for future use. (second method)\n" - ) - - return garmin - - -class GarminCollector: - def __init__(self): - super().__init__() - self.api = init_api() - - def collect(self): - try: - body = self.api.get_daily_weigh_ins(today.isoformat())["totalAverage"] - metric_gauge = GaugeMetricFamily( - "body_composition", "Body composition and weight", labels=["metric"] - ) - for k in [ - "weight", - "bmi", - "bodyFat", - "bodyWater", - "boneMass", - "muscleMass", - "physiqueRating", - "visceralFat", - ]: - metric_gauge.add_metric([k], body[k]) - except Exception as e: - print(f"Something went wrong while fetching body composition data\n{e}") - - yield metric_gauge - - -if __name__ == "__main__": - registry = CollectorRegistry() - registry.register(GarminCollector()) - - push_to_gateway(gateway_address, job="garmin", registry=registry) diff --git a/packages/ib-tws/default.nix b/packages/ib-tws/default.nix deleted file mode 100644 index b51675c..0000000 --- a/packages/ib-tws/default.nix +++ /dev/null @@ -1,194 +0,0 @@ -{ - stdenv, - lib, - fetchurl, - makeDesktopItem, - copyDesktopItems, - libXxf86vm, - libX11, - libXext, - libXtst, - libXi, - libXrender, - glib, - libxml2, - ffmpeg, - libGL, - freetype, - fontconfig, - gtk3, - pango, - cairo, - alsa-lib, - atk, - gdk-pixbuf, - gtk2, - ... -}: - -let - rSubPaths = [ - "lib/amd64/jli" - "lib/amd64/server" - "lib/amd64" - ]; - -in - -stdenv.mkDerivation rec { - pname = "ib-tws"; - version = "10.33.1f"; - etagHash = "f3ac044774c83917855f484a968c6ad2"; - - src = fetchurl { - url = "https://download2.interactivebrokers.com/installers/tws/latest-standalone/tws-latest-standalone-linux-x64.sh"; - hash = "sha256-Iq4Bd5LTOajfK3IaomeAZL182lEXkCn7JjEO6UWgdFE="; - }; - - phases = [ - "unpackPhase" - "installPhase" - "fixupPhase" - ]; - - nativeBuildInputs = [ copyDesktopItems ]; - - desktopItems = [ - (makeDesktopItem { - name = pname; - desktopName = "IB Trader Workstation"; - exec = pname; - icon = pname; - categories = [ - "Office" - "Finance" - ]; - startupWMClass = "jclient-LoginFrame"; - }) - (makeDesktopItem { - name = "ib-gw"; - desktopName = "IB Gateway"; - exec = "ib-gw"; - icon = pname; - categories = [ - "Office" - "Finance" - ]; - startupWMClass = "ibgateway-GWClient"; - }) - ]; - - unpackPhase = '' - echo "Unpacking I4J sfx sh to $PWD..." - INSTALL4J_TEMP="$PWD" sh "$src" __i4j_extract_and_exit - - # JRE - jrePath="$out/share/${pname}/jre" - echo "Unpacking JRE to $jrePath..." - mkdir -p "$jrePath" - tar -xf "$PWD/"*.dir/jre.tar.gz -C "$jrePath/" - - echo "Patching JRE executables..." - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - "$jrePath/bin/java" "$jrePath/bin/unpack200" - - echo "Unpacking JRE pack files..." - for f in "$jrePath/lib/"*.jar.pack "$jrePath/lib/ext/"*.jar.pack; do - jar_file=`echo "$f" | awk '{ print substr($0,1,length($0)-5) }'` - "$jrePath/bin/unpack200" -r "$f" "$jar_file" - [ $? -ne 0 ] && echo "Error unpacking $f" && exit 1 - done - - echo "Unpacking TWS payload..." - INSTALL4J_JAVA_HOME_OVERRIDE="$jrePath" sh "$src" -q -dir "$PWD/" - ''; - - installPhase = '' - runHook preInstall - - # create main startup script - mkdir -p "$out/bin" - cat< "$out/bin/${pname}" - #!$SHELL - - # get script name - PROG=\$(basename "\$0") - - # Load system-wide settings and per-user overrides - IB_CONFIG_DIR="\$HOME/.\$PROG" - JAVA_GC="-Xmx4G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=20 -XX:ConcGCThreads=5 -XX:InitiatingHeapOccupancyPercent=70" - JAVA_UI_FLAGS="-Dswing.aatext=TRUE -Dawt.useSystemAAFontSettings=on -Dsun.awt.nopixfmt=true -Dsun.java2d.noddraw=true -Dswing.boldMetal=false -Dsun.locale.formatasdefault=true" - JAVA_LOCALE_FLAGS="-Dsun.locale.formatasdefault=true" - JAVA_FLAGS="\$JAVA_GC \$JAVA_UI_FLAGS \$JAVA_LOCALE_FLAGS \$JAVA_EXTRA_FLAGS" - [ -f "\$HOME/.config/\$PROG.conf" ] && . "\$HOME/.config/\$PROG.conf" - - CLASS="jclient.LoginFrame" - [ "\$PROG" = "ib-gw" ] && CLASS="ibgateway.GWClient" - - cd "$out/share/${pname}/jars" - "$out/share/${pname}/jre/bin/java" -cp \* \$JAVA_FLAGS \$CLASS \$IB_CONFIG_DIR - EOF - chmod u+x $out/bin/${pname} - - # create symlink for the gateway - ln -s "${pname}" "$out/bin/ib-gw" - - # copy files - mkdir -p $out/share/${pname} - cp -R jars $out/share/${pname} - install -Dm644 .install4j/tws.png $out/share/pixmaps/${pname}.png - - runHook postInstall - ''; - - dontPatchELF = true; - dontStrip = true; - - postFixup = '' - rpath+="''${rpath:+:}${lib.concatStringsSep ":" (map (a: "$jrePath/${a}") rSubPaths)}" - - # set all the dynamic linkers - find $out -type f -perm -0100 \ - -exec patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - --set-rpath "$rpath" {} \; - - find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \; - ''; - - rpath = lib.strings.makeLibraryPath libraries; - - libraries = [ - stdenv.cc - stdenv.cc.libc - glib - libxml2 - ffmpeg - libGL - libXxf86vm - alsa-lib - fontconfig - freetype - pango - gtk3 - cairo - gdk-pixbuf - atk - libX11 - libXext - libXtst - libXi - libXrender - gtk2 - ]; - # possibly missing libgdk-x11-2.0.so.0, from gtk2? never caused any trouble though - - passthru.updateScript = ./update.sh; - - meta = with lib; { - description = "Trader Work Station of Interactive Brokers"; - homepage = "https://www.interactivebrokers.com"; - # license = licenses.unfree; - maintainers = lib.optionals (maintainers ? k3a) [ maintainers.k3a ]; - platforms = [ "x86_64-linux" ]; - }; -} diff --git a/packages/llm-workflow-engine/default.nix b/packages/llm-workflow-engine/default.nix index 307d133..486eded 100644 --- a/packages/llm-workflow-engine/default.nix +++ b/packages/llm-workflow-engine/default.nix @@ -5,63 +5,60 @@ packagePath, fetchFromGitHub, ... -}: -let +}: let src = fetchFromGitHub { owner = "llm-workflow-engine"; repo = "llm-workflow-engine"; rev = "v0.18.10"; hash = "sha256-q9tCPQvGtufSL+E0h5gB0pA1CaKB9nUL1Hf5cmImZz8"; }; - module = - { - config, - lib, - dream2nix, - ... - }: - { - imports = [ - dream2nix.modules.dream2nix.pip - ]; + module = { + config, + lib, + dream2nix, + ... + }: { + imports = [ + dream2nix.modules.dream2nix.pip + ]; - name = "llm-workflow-engine"; - version = "0.18.10"; + name = "llm-workflow-engine"; + version = "0.18.10"; - paths = { - inherit projectRoot; - package = packagePath; - }; - - mkDerivation = { - src = src; - propagatedBuildInputs = [ - config.pip.drvs.setuptools.public - ]; - }; - - buildPythonPackage = { - format = lib.mkForce "pyproject"; - pythonImportsCheck = [ - "lwe" - ]; - catchConflicts = false; - }; - - pip = { - pypiSnapshotDate = "2024-04-25"; - requirementsFiles = [ - "${src}/requirements.txt" - ]; - requirementsList = [ - "setuptools" - ]; - flattenDependencies = true; - }; + paths = { + inherit projectRoot; + package = packagePath; }; + + mkDerivation = { + src = src; + propagatedBuildInputs = [ + config.pip.drvs.setuptools.public + ]; + }; + + buildPythonPackage = { + format = lib.mkForce "pyproject"; + pythonImportsCheck = [ + "lwe" + ]; + catchConflicts = false; + }; + + pip = { + pypiSnapshotDate = "2024-04-25"; + requirementsFiles = [ + "${src}/requirements.txt" + ]; + requirementsList = [ + "setuptools" + ]; + flattenDependencies = true; + }; + }; in -dream2nix.lib.evalModules { - specialArgs.dream2nix = dream2nix; - packageSets.nixpkgs = pkgs; - modules = [ module ]; -} + dream2nix.lib.evalModules { + specialArgs.dream2nix = dream2nix; + packageSets.nixpkgs = pkgs; + modules = [module]; + } diff --git a/packages/llm-workflow-engine/lock.json b/packages/llm-workflow-engine/lock.json index c1c3e18..061111f 100644 --- a/packages/llm-workflow-engine/lock.json +++ b/packages/llm-workflow-engine/lock.json @@ -653,11 +653,25 @@ }, "targets": { "default": { - "aiohttp": ["aiosignal", "attrs", "frozenlist", "multidict", "yarl"], - "aiosignal": ["frozenlist"], - "alembic": ["mako", "sqlalchemy", "typing-extensions"], + "aiohttp": [ + "aiosignal", + "attrs", + "frozenlist", + "multidict", + "yarl" + ], + "aiosignal": [ + "frozenlist" + ], + "alembic": [ + "mako", + "sqlalchemy", + "typing-extensions" + ], "annotated-types": [], - "ansible": ["ansible-core"], + "ansible": [ + "ansible-core" + ], "ansible-core": [ "cryptography", "jinja2", @@ -665,27 +679,45 @@ "pyyaml", "resolvelib" ], - "anyio": ["idna", "sniffio"], + "anyio": [ + "idna", + "sniffio" + ], "argcomplete": [], "attrs": [], - "beautifulsoup4": ["soupsieve"], - "build": ["packaging", "pyproject-hooks"], + "beautifulsoup4": [ + "soupsieve" + ], + "build": [ + "packaging", + "pyproject-hooks" + ], "certifi": [], - "cffi": ["pycparser"], + "cffi": [ + "pycparser" + ], "chardet": [], "charset-normalizer": [], "click": [], "colorclass": [], "compressed-rtf": [], - "cryptography": ["cffi"], - "dataclasses-json": ["marshmallow", "typing-inspect"], + "cryptography": [ + "cffi" + ], + "dataclasses-json": [ + "marshmallow", + "typing-inspect" + ], "distro": [], "dnspython": [], "docutils": [], "docx2txt": [], "easygui": [], "ebcdic": [], - "email-validator": ["dnspython", "idna"], + "email-validator": [ + "dnspython", + "idna" + ], "et-xmlfile": [], "extract-msg": [ "beautifulsoup4", @@ -699,12 +731,25 @@ "frozenlist": [], "greenlet": [], "h11": [], - "httpcore": ["certifi", "h11"], - "httpx": ["anyio", "certifi", "httpcore", "idna", "sniffio"], + "httpcore": [ + "certifi", + "h11" + ], + "httpx": [ + "anyio", + "certifi", + "httpcore", + "idna", + "sniffio" + ], "idna": [], "iniconfig": [], - "jinja2": ["markupsafe"], - "jsonpatch": ["jsonpointer"], + "jinja2": [ + "markupsafe" + ], + "jsonpatch": [ + "jsonpointer" + ], "jsonpointer": [], "langchain": [ "aiohttp", @@ -740,21 +785,42 @@ "pyyaml", "tenacity" ], - "langchain-openai": ["langchain-core", "openai", "tiktoken"], - "langchain-text-splitters": ["langchain-core"], - "langsmith": ["orjson", "pydantic", "requests"], + "langchain-openai": [ + "langchain-core", + "openai", + "tiktoken" + ], + "langchain-text-splitters": [ + "langchain-core" + ], + "langsmith": [ + "orjson", + "pydantic", + "requests" + ], "lark": [], "lxml": [], - "mako": ["markupsafe"], - "markdown-it-py": ["mdurl"], + "mako": [ + "markupsafe" + ], + "markdown-it-py": [ + "mdurl" + ], "markupsafe": [], - "marshmallow": ["packaging"], + "marshmallow": [ + "packaging" + ], "mdurl": [], - "msoffcrypto-tool": ["cryptography", "olefile"], + "msoffcrypto-tool": [ + "cryptography", + "olefile" + ], "multidict": [], "mypy-extensions": [], "names": [], - "numexpr": ["numpy"], + "numexpr": [ + "numpy" + ], "numpy": [], "olefile": [], "oletools": [ @@ -774,11 +840,16 @@ "tqdm", "typing-extensions" ], - "openpyxl": ["et-xmlfile"], + "openpyxl": [ + "et-xmlfile" + ], "orjson": [], "packaging": [], "pcodedmp": [], - "pdfminer-six": ["charset-normalizer", "cryptography"], + "pdfminer-six": [ + "charset-normalizer", + "cryptography" + ], "pillow": [], "pip": [], "pip-tools": [ @@ -790,31 +861,68 @@ "wheel" ], "pluggy": [], - "prompt-toolkit": ["wcwidth"], + "prompt-toolkit": [ + "wcwidth" + ], "pycparser": [], - "pydantic": ["annotated-types", "pydantic-core", "typing-extensions"], - "pydantic-core": ["typing-extensions"], + "pydantic": [ + "annotated-types", + "pydantic-core", + "typing-extensions" + ], + "pydantic-core": [ + "typing-extensions" + ], "pygments": [], "pyparsing": [], "pyperclip": [], "pyproject-hooks": [], - "pytest": ["iniconfig", "packaging", "pluggy"], - "pytest-datadir": ["pytest"], - "python-frontmatter": ["pyyaml"], - "python-pptx": ["lxml", "pillow", "xlsxwriter"], + "pytest": [ + "iniconfig", + "packaging", + "pluggy" + ], + "pytest-datadir": [ + "pytest" + ], + "python-frontmatter": [ + "pyyaml" + ], + "python-pptx": [ + "lxml", + "pillow", + "xlsxwriter" + ], "pyyaml": [], "red-black-tree-mod": [], "regex": [], - "requests": ["certifi", "charset-normalizer", "idna", "urllib3"], + "requests": [ + "certifi", + "charset-normalizer", + "idna", + "urllib3" + ], "resolvelib": [], - "rich": ["markdown-it-py", "pygments"], - "rtfde": ["lark", "oletools"], + "rich": [ + "markdown-it-py", + "pygments" + ], + "rtfde": [ + "lark", + "oletools" + ], "setuptools": [], "six": [], "sniffio": [], "soupsieve": [], - "speechrecognition": ["requests", "typing-extensions"], - "sqlalchemy": ["greenlet", "typing-extensions"], + "speechrecognition": [ + "requests", + "typing-extensions" + ], + "sqlalchemy": [ + "greenlet", + "typing-extensions" + ], "tenacity": [], "textract": [ "argcomplete", @@ -829,20 +937,29 @@ "speechrecognition", "xlrd" ], - "tiktoken": ["regex", "requests"], + "tiktoken": [ + "regex", + "requests" + ], "tqdm": [], "typing-extensions": [], - "typing-inspect": ["mypy-extensions", "typing-extensions"], + "typing-inspect": [ + "mypy-extensions", + "typing-extensions" + ], "tzlocal": [], "urllib3": [], "wcwidth": [], "wheel": [], "xlrd": [], "xlsxwriter": [], - "yarl": ["idna", "multidict"] + "yarl": [ + "idna", + "multidict" + ] }, "dev": {} } }, "invalidationHash": "a27986828c1132303158dcfbfb7a64c0e01d82c698db3ac241b87bd30305aa83" -} +} \ No newline at end of file diff --git a/packages/mali-panthor-g610-firmware/default.nix b/packages/mali-panthor-g610-firmware/default.nix deleted file mode 100644 index c9b99b2..0000000 --- a/packages/mali-panthor-g610-firmware/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -# Stolen from https://github.com/qbisi/nixos-rockchip - -{ - stdenv, - fetchurl, - ... -}: -stdenv.mkDerivation { - pname = "mali-panthor-g610-firmware"; - version = "arch10_8"; - - src = fetchurl { - url = "https://gitlab.com/firefly-linux/external/libmali/-/raw/firefly/firmware/g610/mali_csffw.bin"; - hash = "sha256-56C0b9Z3wy4IwLiBf9HFY8OsoBPax04XaR83O5cNu6s="; - }; - - dontUnpack = true; - - dontPatch = true; - - dontConfigure = true; - - dontBuild = true; - - installPhase = '' - install -Dm644 $src $out/lib/firmware/arm/mali/arch10.8/mali_csffw.bin - ''; - - passthru = { - compressFirmware = false; - }; -} diff --git a/packages/spotify-adblocked/default.nix b/packages/spotify-adblocked/default.nix deleted file mode 100644 index 599f7dc..0000000 --- a/packages/spotify-adblocked/default.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ - spotify, - rustPlatform, - fetchFromGitHub, - zip, - unzip, -}: -let - spotify-adblock = rustPlatform.buildRustPackage { - pname = "spotify-adblock"; - version = "1.0.3"; - src = fetchFromGitHub { - owner = "abba23"; - repo = "spotify-adblock"; - rev = "5a3281dee9f889afdeea7263558e7a715dcf5aab"; - hash = "sha256-UzpHAHpQx2MlmBNKm2turjeVmgp5zXKWm3nZbEo0mYE="; - }; - - useFetchCargoVendor = true; - cargoHash = "sha256-oGpe+kBf6kBboyx/YfbQBt1vvjtXd1n2pOH6FNcbF8M="; - - patchPhase = '' - substituteInPlace src/lib.rs \ - --replace-fail 'config.toml' $out/etc/spotify-adblock/config.toml - ''; - - buildPhase = '' - make - ''; - - installPhase = '' - mkdir -p $out/etc/spotify-adblock - install -D --mode=644 config.toml $out/etc/spotify-adblock - mkdir -p $out/lib - install -D --mode=644 --strip target/release/libspotifyadblock.so $out/lib - ''; - }; -in -spotify.overrideAttrs (old: { - buildInputs = (old.buildInputs or [ ]) ++ [ - zip - unzip - ]; - postInstall = - (old.postInstall or "") - + '' - ln -s ${spotify-adblock}/lib/libspotifyadblock.so $libdir - sed -i "s:^Name=Spotify.*:Name=Spotify-adblock:" "$out/share/spotify/spotify.desktop" - wrapProgram $out/bin/spotify \ - --set LD_PRELOAD "${spotify-adblock}/lib/libspotifyadblock.so" - - # Hide placeholder for advert banner - ${unzip}/bin/unzip -p $out/share/spotify/Apps/xpui.spa xpui.js | sed 's/adsEnabled:\!0/adsEnabled:false/' > $out/share/spotify/Apps/xpui.js - ${zip}/bin/zip --junk-paths --update $out/share/spotify/Apps/xpui.spa $out/share/spotify/Apps/xpui.js - rm $out/share/spotify/Apps/xpui.js - ''; -}) diff --git a/secrets/arbi-config.age b/secrets/arbi-config.age deleted file mode 100644 index 0e31ccf..0000000 Binary files a/secrets/arbi-config.age and /dev/null differ diff --git a/secrets/autistici-password.age b/secrets/autistici-password.age index 1d48b3d..b9bd867 100644 Binary files a/secrets/autistici-password.age and b/secrets/autistici-password.age differ diff --git a/secrets/aws-credentials.age b/secrets/aws-credentials.age index 55da3be..b5a6133 100644 --- a/secrets/aws-credentials.age +++ b/secrets/aws-credentials.age @@ -1,19 +1,32 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -G5326/E4fSslYqgeLBn+nmuWUxw5o6219p96KM66MmIErHvoLBXgV9jgerpJfcuT -4EevQaFwaQCvbywZT9YDSEDeM4e0RiAmpAHN8i72hj6F6dF5A8ScwDsE3LqHyNBA -vSHoDTKi1nuS4qC9gx1LFYG3xGnCaQ2oN2UJV7O3V8KUqR5IqDCGB6+/5RDRoXmX -Kc52VY2OOA9n4Eqz6y0aQSlSUQ1iWejzgjE53cOL/Cyb6g1GblOWknxlvnCk6uzP -JBU4tBbUFP+WMfnDkwBEuUWj8J2gga/bXohgyFa7Zk2WWtFd+2IFNlm1MiCbKDnm -pmXmbGcYCPH6xfc1QmVyddEqeqcYlDmVg+0ZaHOZjj4MC344p7wbBsCmfx+Ijc0D -bhG5VWnXzvWx7HJQlZZlB7zrp2K4vDB2mI9QPmyvgEbZkx9KNO6g83M6tG19hF4Q -garJ83QaWpMlfaClvgNfjZayuBjVTH3jNhRVf5U5p9C9lVx2zDEMaEZ5nL0ayeR4 -2pN0gSFiyjODEoRY43WUc7qvwBskdNsBpKkICxZjWcuayuO2pCTSoVeeD/YJ/m9a -aL1RVyELvbefcUS9A3Nxk5hxMmQlkjgMKpfYGS3QVmmQfTnHcuiJXCAsVkJU3C48 -6SA5387h/shHxaOL9RyTBeC/1qklwOV6kqxwROQbSQ0 --> ssh-ed25519 /WmILg I+1/kLgE5kycRCq+75V9rIo35aOWpsrWAkbaZDZ+elQ -5g14cfb+Ig8g9k4mVQ9ar0aycs/8fYMYjZPJZy33fsE --> ssh-ed25519 +vdRnA WpaITQ02oRuz8bB+G0sVPCdBzugr9/nLPdsKQptGrjQ -vbfFxDOlUj3FVKXyoawkXorTmPvY1Z75L4f0cP66KDk ---- JdH2zcNZJNeRPZNA4EvSMcnbO4nMZy1QT+DyDsZsgOY -_31eMH8Uqsc21Tn⾯(NV r+;7weMT|OWmb[Q'jqrLG6a5F>Gj \ No newline at end of file +LejiskurhcggIU/f+WpXpYAU+5Ct+wgO6qLU4l8Zw991t7+LQoDYdZThQt4aFDRY +/KyNTJD5+SvobJvPpS0vwJeITL6c6wWmlBhx4WlhsCWlSKGz7jKxw4JpNZamfkDN +fDt7RKJI9fxoDIJGVi5BjScR7GfryzpXFu5txVx+Hp8sWckl4US9sPxTGxJ/Qbc6 +0QFAO+qnm8FqtZWH1GZiJ2IAqc/sD6FHfd3aKtQ0PTuHoq11L0iSWRAJr/eW2EGJ +nGEp/y2EUkwDd1z4FcHQHoko7j6f3friNHZH9I2SCALonw+L1SrXHiYgWRx19KAc +xaLu+VjMUQ8LPN1zW9J8sUQWle1AA08x11EKB29hKmXE9clgY7Jx/zKp3EDgLIbU +Pg531bppFse8I0xD6TgQ/yWDZfXTIr3y67dPWxjKf82dDxCKJk8nYW9uIAPjLTdk +MkqWtsiVi0++HNMQoSlZMOFTiPyCGRGovmThpjpPP5GqGBUQmNDdP2hs1ZYoAmw1 +7dlj6PeGF50Pkita966qxbtAX9Ru7fsgYi+E5Mi067fgVSLg1i3Sk1CbSbxqbw5Q +BkY1851VMgUBtmjsOGdyDTfITFThHOcjd9lzLrloPLeapOQ9Z6k/wJ7f2A5HyPL4 +zTJWZ6zcFBEbfeDtFtntwoaZ247AQAJC9unA2AC0xhM +-> ssh-rsa QHr3/A +rSEk04k0mOPyll5cN5D9ktP9WTb39cUqFX8EGG8BhIWd9xwO7vF1xWXtCzpDOYCv +PxfqiwCsNcCCNAd1CWYT52PY6P9zaTOV/ptk2U8nhpi8s6EDdyne3z8zR0SS1Wvz +53Ml1fUjiTguulzANoRnZtEsaqoF0VPW03wjkTl6XUZUrNMC0Kgq6VP1tmt0kn08 +eGuD/P8BGiaaKAVN1iJK6U58O43Y4uB0od913BgALKsBjtcH4WvHcgcF359YrdNx +qwQkiWTDjDtuOKm9djuZyuewosRAYsCZmHONmNnMGMVeZbcUipFMHsjeU3CfidaE +pfxnAqB2G8x1M8qg9w7IiOxH5cH/qcfGk9yIxt25E0pyvaLziYCsKxzhuwnPW5sR +ZOgIeECljKTywStX13/ze1hlWikj5ej3JerEbKn1WOD8NEV2vPP/9G9EHLJth2fT +Si+2ZosRyWPmg1M391Dlr99Rjb/mXCtW3XBX9GeuL/puwg3I9QnGo5CQHx+GarhW +RBcRO9SAYhoQtxba0/0mm80RxKn8Tdbe5ej6yzD7gdkywTArIRM/rMLLyKi2Im/k +lDDDIjYp+fje0iUaQQO6K+hhW01EnG2HrELdq/VYs01tclGPdK6lI3lloeOXJ96c +crlJfD+b5tK06w91w89w+itqUPIgZsbiq5qVFhfKyRY +-> ssh-ed25519 /WmILg RogWvabCGwzKFKQ78EVKpnpupZr5tKOXNsL6mpE1pzg +QQcSAgC6Lb/Fk9eYG1q+o12ty/KyhFJbZyVB+3ANSxY +-> ssh-ed25519 +vdRnA jBfvf1o18lTbKfx2tKMzUJBmws8s5MMwGDlhUDHn5zY +nZLNNbcy21SXXlTLT1tCRDfvlYOE347p6R4CLmEiWw8 +--- xARfOI6GMc1FZ580lD6fGWmk2AjJVIoxsD+YETvcT0o +mB'ڑ"q +o3fxn_lG'U5:?Qɧq-rLTvǜ~'i{DžU8!x_8PaNxdU \ No newline at end of file diff --git a/secrets/cache-private-key.age b/secrets/cache-private-key.age index fe37e44..6444d8c 100644 --- a/secrets/cache-private-key.age +++ b/secrets/cache-private-key.age @@ -1,18 +1,31 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -rWU4MBPVO+M7FPMzApYCDMs3hDRNTEH0lCTFiHHRi5GIWVtxRerOfoCh3M++FICS -vErr1NOhTHgznXSLUi8LROC4CHtPBxJUA97yijzmWmcRRnemm5dUcI6xfsiNPRFZ -JhMCTgT2USEjHTejVzHBl/kfggpAiFmBX8RvOVwaX1mGhZ4QEGePfl0n1l3KZfsb -recANprjssuAzvB+Vj20NTgjtlGYV9QmFGPTs3xCy+9n9IUB3NWAdflE3omdndco -zL8OSCOEXxvrqXaokLbESG1x/RPlT4hNRPBmNB057GJxaC94zOVYc75WwjX3iED5 -f4jczIYWRVwJcA2B1B64dQB7HhX7LOmxNARF4R/d9lao+hXE28IUcIR8e62nDO2i -jeDV0zv2bwO3q+3FAAz04reR3nILIbPZ7r/fmPjFQNRLNxkRQ3Ba3PtrA14pOptI -a4LFTCJo3XwMjDfRNckb1s1K84qyXun2VOhVStGBlhoHDM70KalNRykQqL51+GEH -jZtsj8DM9ErY3oNfrmMDVS4fahb7S0LLsmj08iMLRNfxuUm1X+WO3V3oSI8HF7Y3 -br4+YtKCPPi0gsH03uH757WllNmx+VI2oZuKmt+yEqreb2EtMTywASNANazGd3k3 -jTm+L1qBNmhRWMA7abl05xG9f/nTneaxzSxkraElWIE --> ssh-ed25519 q+UPnA RD50yXDxXVYGmYUZ1ORy6zMVaTqBdzKmitvYNdTCXRI -Yxi5TEquvJO1X7fRR+TkJrxbbc3R7wBKzCX6DNI/5f8 ---- ctmSdUA9UXwm2OpTPTKSOJmOQOonUZ3fJXOSRuWEwcQ -ۯ -y^2>E nAL4bg¥%JJElC"7/T?n!'LIx6jOVԤ=ӂ*{`QO4M.ƏjAQXjF-rZ6 ' \ No newline at end of file +P7Wn4/FoKxWdlxKlaSW05cajdFzxCZZaASHvHHvzJGxPsX/gmCXpsZ7nFZlJvtfV +ENGjG0inZZhegfNue/VMiH29ovq9+hjl5o9uZlUBVDoYAU4lthej89CCbbwlbxrT +AdKurfwWiBPp7N6WQN//TrWuLgyxnUeGV0BdWZjUeS6df20RDCWRcm34MugO4pDh +S587curSguesGm6N6LF7QpyXyeR00OGNWvh5709EKIveDh7iwGZ+NAvucI7hjxbP +Q7puN6G/SbBVA5dPQHwP+IAL0I5omeBNx+HLrjMM6ArTUNfMjhbii5b16eTKQQp0 +BIyXh346Dk4RD9i3az8THEOk3TGUh84jCMCTcW/rYGprz4iPaC9LNhIso8wnnGzE +xaAiIeThrrcRrWBxU6FC1ACRgiSXrI/MgPisTHJqU5AkxcL3N/bd24dXJWj3+ZLa +iPyhHGCfoPkoyeKLlDVdWzygVHSr5FLH4Dyxv0WOM7MrnkxVD4jQwAtXu8QsB+k8 +2E/KRS0lPmklY5vWgPXq7jnnOztk3OUCaXhJsOo+nAjLlslpJJz9WLryzEY+ojYj +p90EHuhfnVx/H7J7BpsdWAjN38cFEOsMIC6QDPEa/P43RoejYcebM/i1hsXdz1HK +3FcimDGmMR9jYoERUlBONZOGn2WuxjPJ292ehaQnXQ0 +-> ssh-rsa QHr3/A +ta6ztr+/tCBmQKGub2ZCB79SrN6Nna3fxStfGaLqgmEUsnM2kAh6Hp9+W3jbFEWM +5L2mMusmoytYtXcR/JjAK8F199p/TrJifXHTnot6dmHKm428tauFRjMxsbWsaT6i +X2rqtrIwXW6QEUFuya+WHI6t29aMZipzmhXjpTdcWyorUyGyNo9YaOt5ohRXzTPW +f3ELf1aYVBZMxXmVC6E4cbH8dOWKlus/TPTcOirJzR0m3KjeAr5CNRct2qIVxixT +WMViwu9xQgWjcUfra8YKO8LEBf/PaEk5BeszIHt7qwWr9sJt4v+206LNQvW8row/ +sIgdllzVklaqZtkukger7FHkxSasQXLdP1DPE9h4bwSN1H2pEMgJlAVGt8/m4n6T +w5qUeDr2HV5kuz/kjdJl1hv6Ihf4de6yS2+7jtMN1FnICIVq67A/shsvA/JDNoOz +kLM4WdgBVsqtGCEfmXQCRbz96yBb+ie3N8raJDKhNwWuQ4f3YJNwpVKmySrfUTly +WFjWeuTDXv8LwHbUWtzFaXBmoS97EIlRibZqK0caOpmUU+doG03vDlJskfEfBD00 +nKBPTIiKGoQkbnhMl8YMW7uqhZVvJbPtPGUCpq2w87Um0lh5BuvBTPxNEQ26A/sJ +XDByA5rIZqVIw29CjhBsZptR83nhFSa3OUshxoYR6xY +-> ssh-ed25519 q+UPnA Y8JxsQsN0qxfPDBVhiVuUYL3OImhUc4RyRpxr4Fff1E +Ai1PLAYzoCrm6H9P+U/jA93IE0Mgc2B71AraDnsB6Lc +--- EAiuid1wt44o2ZGCLWO0tCcWm2ao7CuHrYdGmYx+yFQ +E'ڨJ'T\S0:#z +`˵iaGvBs;CH=řNu R3׊BzDž+c7%Zuw)j;i:s +Kia=#/O)4 \ No newline at end of file diff --git a/secrets/cachix-personal-token.age b/secrets/cachix-personal-token.age index cb08b6f..94aa4ea 100644 Binary files a/secrets/cachix-personal-token.age and b/secrets/cachix-personal-token.age differ diff --git a/secrets/chatgpt-token.age b/secrets/chatgpt-token.age new file mode 100644 index 0000000..1356565 Binary files /dev/null and b/secrets/chatgpt-token.age differ diff --git a/secrets/cloudflare-api-tokens.age b/secrets/cloudflare-api-tokens.age deleted file mode 100644 index 57e68b8..0000000 --- a/secrets/cloudflare-api-tokens.age +++ /dev/null @@ -1,17 +0,0 @@ -age-encryption.org/v1 --> ssh-rsa /AagBw -hD7PDjueXimBVI/rjcYxN77LHV2eGytKcUbmh17aSL1CNM+eriURFao3tj52Hiaz -3VMB6FxWUk9kzgjMPvf5WZukuZ2WbpPH8xlDV+6ZH7e/IzmjIfx8Ny14Mr1IF/Rx -TBiCIAM19/1/mR9MiIBW85bb+Bb/waWIZAgxW3N1RpqH5+vAVqx0iY3XRF5+0gOq -blP3yEw3QaL6FuY0+a+d/TnCsrz2Gi1Rba9oCUmkzOP96TsJYdN58Ut6nrHFkURK -mShL2xBMLmfA8Z5ep+D8ueyQbcYpeU3KHcIcRM6dRTwQKvWXAVkRt1nUGasKrO9Y -oJT9BrcxjtqgF/xhHRjWpamjFSI3mlJnJNEbruddDwQUccrJOvEzvqZ7GK0WoFX2 -HmhdDOiocMGWFeBPAKlNtU3+QmtZvhvOIgbjKhNxmCt1A/qxfvRk7Y2IDIBo+CFo -sKMrT1tCo4UYaJdZYl64XYNCQb3C2EfO7Exrq3d2urNidzUbr9OBx7CCI1nu375c -Qol9Kr28fLtxRuSZlrqIe9vKVYyLDPznrRlh6TmgqmMLIW70Y8cZwMtT8L8sOkcm -A8MoxpWFzK4BKo0Iqmw6eZ3nx/0LAzkz005ZEwrmi2W/XxOWJgBiaLmu7YwnoGq0 -gzwwvA5V5MT6Iy7FzkQpMi0h/H4MZ0mcbihKdPun85Q --> ssh-ed25519 +vdRnA 23Gviu8hfWCEBPHP7xYIaOx34kFsxJJgJ/BNUDlb9Cg -ROiMY2gw/rpNBmJnlRVb7Qhi5+8TY3Velj8gEZcaedI ---- dhmvfQoCjuRUJtvXNI/eCjH0W+IeJm8bFRvYk1JihD0 -qMC,݈ԝ9-\KJ]J(Sn.Qp~Z$e"픒\'rSlu +UD<Սv]|/g[ W_>-fl8|wيlB[\.k(W{=w 3N}qG-wMb^Q{ \ No newline at end of file diff --git a/secrets/cloudflare-dyndns-api-token.age b/secrets/cloudflare-dyndns-api-token.age index 6f09f52..e0ec94d 100644 Binary files a/secrets/cloudflare-dyndns-api-token.age and b/secrets/cloudflare-dyndns-api-token.age differ diff --git a/secrets/deltaflyer-wireguard-private-key.age b/secrets/deltaflyer-wireguard-private-key.age index 476ce17..ed27d8b 100644 Binary files a/secrets/deltaflyer-wireguard-private-key.age and b/secrets/deltaflyer-wireguard-private-key.age differ diff --git a/secrets/firefly-app-key.age b/secrets/firefly-app-key.age deleted file mode 100644 index a9d71f7..0000000 Binary files a/secrets/firefly-app-key.age and /dev/null differ diff --git a/secrets/forgejo-nix-access-tokens.age b/secrets/forgejo-nix-access-tokens.age index 222cb33..ad8cfe8 100644 --- a/secrets/forgejo-nix-access-tokens.age +++ b/secrets/forgejo-nix-access-tokens.age @@ -1,19 +1,29 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -iS8WPqPbBdSmudoh6Eip/jXqEpHZjzs8tROS+JcQoCQ1l10NUNGjTKNwk6n7MYLY -+KQyBwAHxdK9ka0bEk2mlB7fRDH5RidQIvSXgUZ89sttHOBbZYhfRybSLj0g/Nrv -5hYTZFQnpBl7GzPnNV6IQerB/lsvDTaptzXHbzwkJuP9jPvHIl34DtVpuesAH/WN -X6thwS3XS6KfwcXFb0+xAC7TrAyigTEXTNPHUEC5Y2PhOBkMoc/5Hd41QoACmkzE -AT0h1cW5g2Zgi/N0lkf3EGQu8m0W2yT+YoXY7JIFUyG3K1Pp+y+vucvruqgcXTVg -WqtwDDbjid1TbcBVr2Gt91y249++o/FBvV8IBMyP1QrABspf3WPy7C6/QKtnXtah -OJreu+JqND/vsdc5xjJhVnU7NtcCawdyeKvZEX7Xs34hagJD7OJOaAibU/mS6Kr4 -r2xJCsfrlXnoMYo+LeY/LevZeNcfCe7WaiBJUi6sz8WXAUkiQ6AvJzWNvVr38+qK -1H9ltAFVjqM7DPj/20fkWTHqxVldnRv8yJifsZb3VrXDNK4HjOkIBAj01G3jiT5j -Ps9883PZ9b+3WEDjldptFbPRCF+daYMR6jxtYWHjejd6IvDiPGDNg8GXAjf2BIBR -D7b91YclgiIQ6QcfEoaQBqCamNfYHTnyud3nU8ZBNCE --> ssh-ed25519 /WmILg J6zdvQoBfhrEdqWc0fu4Btd/0BTxGvvZF4A3DUynaAE -FcTsenYm8S6xEtB+cxTScU3TFfJq0LcAIEsRnsu3nvA --> ssh-ed25519 OYRzvQ SrbSyaa8A373WtB+a3bDkOt4/KzUPNHQvVEW9xaOSzc -XpuBn9jXaUSSgyuUHKID6PI0wJsKF250qlMctpZGFt8 ---- 6RUGIhuMoK/WwDKg8jghy22j+CM6PDu6Vzp301Yh/Iw -#sL!$M[20C,t/$_?l4xQ6%ޡsKY;]ZUEN \ No newline at end of file +KzSLRxyFMN7W5Qt1uKkq6Kv83/tCQVf1DtjEbXak8DQhEfBH+CCQkVGqq4ainTxW +0ND/rEUlcVRoPSO12Ba+4ghjk2SedqLdmmleaOpWv5+gQxeHl7LdRTeXoHhUiDvC +QwDcajIcdRuccAemsoGh1hnpS1M5ONq3/rv7AcPVG/bGrdlp7+PPJtBF3uTXwU7/ +x6viuRvplN/eEAtvKG4ISoM8aUzccfeE0vi0RxXMW2HYJ5JDjN6vHTumHFmw+1tf +EjDCf81Ddc4+ZF8lubHUzBc5/QmUsNS9cMEI3LOR6SmYhm4NYkqL3O+8YGVjBOdG +rzGXitzgz3AAJkA3ZvG3HFJ3zYTfeeRxEpiQdjZ8CXc3/f3VEZUCJGrNm7Pidr2f +WBGQY1RSLnafxNH9TVQrXvAETEnrHUHVzgQpRUEg355u6SqC/oNuz+TOQWU/qeT1 +Kuqowaigpi0QuSYiJP3rIWDUiVc+mwRR/xhL0taLTyb74RI1GnBIGNwLwUpv6ybf +0VpnfbH4WWygGPDXmKFHZcAh9zFE/P9xdpHAfviVKsSO/aKECrJjgc4hQSeUezNK +nIzRdtUT50zCEeAKVeAxV1j+L6sP4eW4KTfo3wfJWSTx3eJD9vEPB0HYLka908LA ++SmSsHJ6pI3ZGARZ5uAC71wX2O7DL2YcnlJkHYJBcjk +-> ssh-rsa QHr3/A +p5a0cPmR0JE9jrtFgBUSTmi8DhY2Rw5frNvHA0qG6wXqR/7k1qdCMDHxET2pdfLp +FuEuW7OUFOwREv1Z313LwT5ARfsdNg+uQ/t+h9NmF+ws2uFUyqVqOz9px9pLzjNN +0qlwxpQg13AX6JQY7NNN4gIHfy4moV0e+iGLXz991XC2fwdTcKGMBeX1hmAnnH0j +Df4UetHRiCZVJSnMthmK+8dPsRZehzYNYQgm8D3E1fuUtbPXGNKYXQ3Bi8TgGB0i +1VOQsiWHoEdXnLkYCnBIl01BRp9BXfOKq31ow8w/CuA6wePhp3WrugqV27WGxMp2 +C7SmnNf+nTmpz0L2nwgapM+NqfJUkru3jqE6FC3fvhBuJeB15cDSGdBNtk8AeKg1 +tUMp875C3tsK72s4ivZAgZsgUzhhTZLioamCxkbvD3uDzvf1AEbbkXKBWFSPB+Hr +fmIz142EUBH7I/VJblC9EOusgi3CxPufriMqtyGz//HeTxJnUfLbO5wvNWUlDm2C +rkNMQPczurQ4mkxyTz6uCV80D5Z+Q9ABtyzMb8mUYwhMBVOY15nC7e8QNKU3Cnoq +gps4SRijnZgLNJ1WjS548K0WxxsasJR7gEpbdSwLy0+K/YHYwlyhmG7+LMVGSs02 +mswg4Y+W+K6rOEeYXdPCSdy76V9OhDle7FFOrePHLCc +-> ssh-ed25519 /WmILg DXuUNsdlALUPr3ULUpoEQ5fRlhRkrnUcHTWAxdy7DCY ++StTEHWk8y+fU+TxXfmh/EoNovME9arXHMu1m1HLeQM +--- VTojICHlhNNmITiRWucloGuIArtXxIV9ttGrK2DROgw +Pc!&|)2M]P,\0%%O2Ar4e(Vm&ሗ`\LHnP gvpt5pT \ No newline at end of file diff --git a/secrets/forgejo-runners-token.age b/secrets/forgejo-runners-token.age index 056e46c..5ca6d6e 100644 --- a/secrets/forgejo-runners-token.age +++ b/secrets/forgejo-runners-token.age @@ -1,19 +1,30 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -L/R/OsACkgoALVEEcBhvX+BR8f+zdbhiL0Mq8bSsctkSYfJXuO3jUGGH0SpL1bns -ZRRtQM43ThirFxS8P0Z15HKyyUCbsOiQta4F26XvZqZ/+RWp+BivAwsGUzmiJZFs -0gMaq1xrjP34IclWqDTEfhjrMi7Wh1Ccex7qYyfn5BAZAgccDMQ7rHCXC6Ou+L7y -6JNOU/cYx6vMLX7Br9jxBZlg698SXcfvX3QymuV2kjrvkKeq6gVe9Ju5JeM+EiG2 -bHTE6A8yHe/UZTHxeWMNUkw0JbcUunIBLM87xCE1BdmCfLkUXMRdAhc5axKCtSsG -/Qtsi6u2ucT+6V49+OLQ7KzrjJ1dqPjY7GgASswZCeg3K7IITO1nfTYywzjkLnYC -iWUze/IoIVlC2msur4ZVDk6ySJ85yUubIByuteAkFtynBFfeVNcuKBYvs3aO8k9A -mBL10w+u3hVr1r6N1x98RDnZ5lsQ3Zi6TbaIQxzXfSi4ztv4QR68k3eiQ5X9Fr+m -yuJ36z6+MCIqiW43I8LU1a22KxYrSqrcvJCyHi6Mnyc5CIemb1tuR9WnnnE9i23z -DiPHYIYrPYl3UOetADkzWfRU+uAvypi/zvPB3nGZXwXwuuw3BD883OqDDD2jvnh7 -+VAO291rzfi9sdfz2v1ezYpgSZZibDq1TqPQjyRgT40 --> ssh-ed25519 /WmILg NAhEtnM2S0s9CiQNyIALXdkUqT7nuYJsWBrqK2x3dW0 -Rt9IHMYyHG9dV60LXhi/j4hnIU/V0w39PlBcpJaWZz4 --> ssh-ed25519 OYRzvQ mERn1AOi2HnJjqYi3tzshh8PxL7JPPdxwj0PvOkHel4 -Fb3wrYfVVAucaZRqnzJnnzc3SpiaXY79KFGt7CXLjic ---- SbN8GRT0Ej22hlS3Oh/nOe3SM/Bcik1FQGGMruI53s8 - /CΣ]ŶqM[ Ʉ/g"A(9hYa$l\e++BLRw=Qrb \ No newline at end of file +P3hgwGmP9M9uTVqkiAzFrqZqyMjafLFFHqHNqP4fsAdbmZmdWudSBnm8TRmSWUWY +1ONw8ncwtqTfu07ChWzv0RESTWmcOp5afysLCDE/Fz9dByI1iPLxixoAaiA6hncA +irblHoiXdFVXvX57jTddYX0BMK8lup5EoIde6r1o+7L3/6VwAvM40yZekw6jsZn5 +ViA9ClsiEdvIKV5KVRA6oGBXoRHbvcWrMwGDCU55xSIdpjdoDi/YTQsqnfBMyQAg +i7FGclkHkpBUQI+8W6l2tqgwTJKQC/E+zVRI3VK+xJyHmpnXzZ4SEHStkB3PnCJu +fGCg9ywap0dji9Cnvk4PH67c2u3gIlaFZayErVX9q0I6ytnHFcALSyDLFGRnfaHY +OTpIZ3m9cYcMhpnFCZRvxul5x2OuPEWMiRKoVm++U4BmWTRc314HDo/ZBfl1DAe1 +XtvP7ITpT4YM/3rduqW1kVIpwAB2e/7EBpoJVvsGIBTkQ/jIB/MY3j5CC5JX82C0 +rlF7oT6EsWqbNCIGmIvYGTlpmCOQT2KOLHNKkynBPSC1mPKkBpInSEtx1NHl/Sgl +NPua8EaV9lF0h0I3GZDXD1T0AQ7AUK8cP2whh2FS2qBlNqOJMfW8hg975gb0cTsH +IAOvLYeQtOz1YDNwTc3Ctz0+FCHQEJhIuB8aTMuP9SY +-> ssh-rsa QHr3/A +cxnlH/KtwnL/4TDqg5YQfaBRCSBYpiywl7Hc4r8tbArIgcU9AYhNRzbT4LtLWA8e +G4DVpE6fis0cw8ubowePCupAxnKLE7cIXydbOJ1w0aukjjmeHNpw23E7F9Flv7ye +4q7pHE+NL1jQMDf7u377IsC57KDimJufjWXvLjPVdX4eyaH07715s3bU0jgADRS7 +ViV+ccxBPUCkPB9Pdg5GxPOmkduczCZJ8xQhixrnXzA7CgnN9n4uPyihN1GdTbvv +h/mbGuKjnXo7TQtw9MZRV7j9aQadtpnhYQhIrcV9MEnwCFRD8wFzIcAxUb8qCu/f +Cmr2ny1imn5PXySDIxMUEEvCF5w2jhqAaJR8AVkJ12LcZ3FhowUwJnVkB2yalnUT +wDlJ7W8ZBZb2PITDiuY4pzdp3ibK+wmhueNd+rr86n0zVe097+wYbewKZ1/yF3Al +cDESeaxhU5GbEkSwYSn2W2ofpAX4A/5YnnhnbMlVMH6IvNfJxYhEfGg7vEfdFr40 +yN67cyZY7/QoVmRmd/xhadmA41Z2oOWtcgcms9ALf6hhehO6GYW+mKj+Z4xEMDp0 +P6ntUyuBRbdUez9k9Tbm6NB6aZdXi138JIXKQ2mXhPJbx9B3fN8dOIL6ofyZ3C7l +FAOQ+TQlu344RgcrJX4w2bRRQJKLM0wXRXWueEXHwlc +-> ssh-ed25519 /WmILg cyT3XEAti9DCnVgmK3TIxKaPnZeBtlyEFxqJsvuwimI +318xaKk5hK7UoinPt+aVGSIOwPzQHEaLxG/87HIEKTs +--- oZydNo3QihjYRb1k+MuiGKckbC+qBqIR8yTOYP0Fgd4 +Ts^p)AE|QC}v +xum1f+xOVX_ \ No newline at end of file diff --git a/secrets/garmin-collector-environment.age b/secrets/garmin-collector-environment.age deleted file mode 100644 index 2509b3a..0000000 Binary files a/secrets/garmin-collector-environment.age and /dev/null differ diff --git a/secrets/git-workspace-tokens.age b/secrets/git-workspace-tokens.age index ee55361..26f2a48 100644 --- a/secrets/git-workspace-tokens.age +++ b/secrets/git-workspace-tokens.age @@ -1,23 +1,33 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -Ok/LGdcecEgDG4Dh4FPaUjokhjQxc+ZJsP3b2i+vf0j9P/OkaSmA0loM2Avxy1rY -tQ55+74x35Aosaqx03auPVBcWFwI5X/WDBbYYnq+kHH4UpDBuhSY4cL7XPloKHcj -ZEkc8DnbzWYhygSVV6nL69HhJmnPudZdqKMiY4KO4PdvGaGyMALcOB4iIw4UjQiY -Pj/pjajRPMRYYRP3u41qw4Emmoniw8ZaoVUpeIvk1Ei8ZtW3GJjyVbwtmJ4Z0fWK -XxgT0+98+EDbvJ/C6t1pY3Ox1w6bBBymQTvuyi4YnUbF80/fk1fYC2UmBGWSF1Ds -lPbjbLvC/pV42w+965aqiKCPWWGxM8G9DTNCESFrFX9YxhFT6aVMVq5RcDXcCyDv -0p9FaH3LuGZb1g0C3HO8IlSBJwOZTwR2/nI+IAoWsbWIZ/avdNXkZxIzLj8zB5C5 -+RsASkBrGLJsyMzaA7uRJCRpcT4+ZSo1TldFZBOMH4Pki6G27yFF0+g1BQi6QZ76 -QqornXeeAxElrk8eVujS0HpEcpxR7S7HTf7O81JboBIZnChLrLGT3eCYvs814rOH -q873iYDfbS0KFfDFDNOBCg6suSFvLfG0YcHPoaNcyXFOfft1UZ2v3YD9Nlr73IBE -b/Ds8NxxQQvMVG0wHQmTu2BiN/6iiejkwVtmfLVrfr8 --> ssh-ed25519 q+UPnA +eJ8cMdaEONvCl/FivO1egm9//WUJn7LFl4qq7Xqnxk -yYy6QxNpPf+14Dx8L6+OaIIGyAWTlAhoC59H2gJPXg8 --> ssh-ed25519 /yLdGQ lInbsPsqXB/K0cwBsNwGO/bdYsodFz+TgpzWhdiDYzY -GWsACmm/WjNFhF2iJQxR/GPI/+ONsKFgGHcThoDV3hU --> ssh-ed25519 /WmILg St74c241V8gFw/kJr5UckBtGkEmLRlUuCK+XNMGrKUY -2abU+1HYMb64ZTWQ4X48n9SvzvMheqFtHLIfqcA6anQ --> ssh-ed25519 OYRzvQ PcV9evAILedG9x7KWGJnYdhEGkfmtu/kedR4IB9M2Ek -Opnidp1vp48EOEJRrvJNl/468+EcasZRIIqoyEr7YWg ---- 63o15vmYf/4lByjTk4j3HCpFddjNB5XxfQQbthXM8sQ -`*O 'h O :0?hgEdo4c|dgXs4vX`qP4) \ No newline at end of file +l8D9gFFyPNJpXMGJoPt1WNpR/4JDI5rgr1h3kN2kNOOP4nBmE0NtbmgmTrBrAmfM +EUJPM10unKHWpwC9CcrHOtb6pXsigTcZs7q4oL0y6K7UqoKlcHhtwn39jFrXBE7o +9onIUOHXqYpXvHg+ZwNlwcf6+M30Q1NJgA1KWkDacHuQ4O05lmTHATy2rOcbScx3 +lKOxP0iVGAE1ZM5dkFnN1waSoIXacbq31U9h57nGg9ZwWqXyFy83KNYxXH8pwwZQ +6hOjGpbOU/0S/W1L0Kyra/N6J3LsjxkDEcnTGh2bnRtX8z/FcXJIFsRoW13eOCpt +Z1rM+ebOdTn9hSGg9PQV/EMQnqwo7Bk8nbl/z+bniq3FS3r9xRNhGiJwia0AaSTV +oyiOkgk8li3YeniAL3wBDbo9r7Xji5mT2MeEpgvuht3MAR0FNmK+Dmi1hl78bUWu +yj+RC4hkro6yWIUmkCVCwP1SkziXXyz8/tkpsdUGiI5eVPv43Pb9JlDwDBEu64WT +npdsc7L6Wh/fbq3da0I5LMoNVH7nZNAlDUvdWZI9XdIMvPCheGie1p1i1JpwSfdv +00WIgQOdTABqahpab3GBXDhxGty1Muifuzp8ktgDjyR2Yrj247rTpa55Ypcuyubc +tc1typ/8t12OSxS0eNeZtIS0AO08wVVH7skVo1wbFv8 +-> ssh-rsa QHr3/A +Z9y6Vu201Nlwwk+3TeFOoDpukvUkFBuV6JkToEUdrbndnDnSIf0OoNXL4iCYbqnt +dbR1OYUrEM/k1V/zJqjPRP/gMaCUGvFgX862NDGmzzXGk6wjLtlUWdFSGnScOGFS +c2ToY1y+MkXunCQ/HxRvaIRA7UhTwrOhnJLITbFH3oQ2cClUINmcgozZLmh6mQvM +0VmpQUJ5J6wsu1sNXv0nmvCNb0Yb7YWnnA9nDNlxha98wwyRvUOcllMNYvEm2KRI +OgGaUqRkXPI1WPnOeMY2pIdtwsH+Mr/WXX4yeTLSbWavD5hU0q7axwvuD6VLiwzL +zxuUGnMzTyvOdDWeZKSKECdE20ZomiMuAGVqJJfPrp9oB+fP2eLwJtYRd9FZvCpJ +NHr8dDcNla0yu86wPd9+A7gg0jXuYonIxQouoyPCU6ehkq20H2bTj5WXncUr3ykK +ddFOTV8VK0AsMRnR4f4RRKhEYTrv3e1jHbuhhmrYRFQfwRC9MSk1H1rXM9mCnzKI +uKVP10+9l98jtbT9jhdUIwFa1Pi+Pzg6qEqVY9Op6qKKqO0cL8PFxYl7kKr18hsQ +lpKyaDyLU3JmeeBBN+zc9V1Q3IqFMhsB2PaGkpCORkczOQgRLaJHnErjHfuPJy9I +gMSZcnKlmg+A1Q8eLtqPpvIuWLDt2KbQpaT6YXAWRBo +-> ssh-ed25519 q+UPnA fcSil1+qsZBucOPvkhYpUN27jkivaVWcCLBbdN4JOmk +YZNIqx7oVBjpwr0Vma/ptzB0h225jmz9i/CPtzAvk4Y +-> ssh-ed25519 /yLdGQ lIwhzVRkYK9wSfj0d2lGGdQX+s4S4cUINe8TbaDRgSg +r/l4OdWRbl26Lktk+wer3cyGmLNN9QB5rpPoLPxD1iY +-> ssh-ed25519 /WmILg H411Xc0YhBctelzz46HC4FOWWQsPbLJcbi/GbgAHgQ0 +TE5POCRIgSBlgmJNcE9go8LnXSie3+TfR50GwhKKurU +--- TnlU1FiLZrtOsqzbjqVzc5Y/pG6YxqlinedIAh320mg +t-Yf9_ݯGSc^Ztzʝrd2I`]ni(NzkqT \ No newline at end of file diff --git a/secrets/grafana-password.age b/secrets/grafana-password.age deleted file mode 100644 index fc7ca7a..0000000 Binary files a/secrets/grafana-password.age and /dev/null differ diff --git a/secrets/hass-ssh-key.age b/secrets/hass-ssh-key.age index d18620d..153461c 100644 --- a/secrets/hass-ssh-key.age +++ b/secrets/hass-ssh-key.age @@ -1,19 +1,30 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -N7YiJVNr1Q4V28AWMSnczchrFXCeoecSQ3EKS6heFm9WaBI7cw5eHaLR+EHeH0w0 -gX9ncgKjw5diZdXQi+J5CeQemoIfkJ3gcQlVj++o4VSSiIZzCNkFlRXEq2nH1O1O -pC7vX7FkGLQr8fhhkx585FUjcp9zTUpzdlt3kyv9pBh5+wKHo0wmgMtdZHz45bGs -o6XPGeMS6MQEKpHgtF+AIAFU88ldgxCI/w2cpx0rOKe0AbWmlee29HiJYTCE0y/w -WyMIO6V8k4UK5tJD4W7qJX6hc6AohrT4YpYUcWFFyc4JaLmEUl2XgsQybSfjlcET -C+CuLoiwMWjfyXJ9RC37MHBf18WBMSOe/O1Bxq4qNKnUP1W32Tdp6v537/Jpye/P -ZRaIgEEmTTVm/b89Sn0xaz7CwXc8FA1hb8Ny/tQdccRk9ODjJhzFKx/Ek/RX9E4w -lxnQ15xy8Q9/Xy8fFJnhVAF8KD1XqZJt6ARYhtET2g0KDmmN0ClelYETDILnZUDg -W17+YCn7uQvv7ZA+x8a6l7Xxt/kLegoQS7Dc4cqvsSv+MuDT9edCQI2EC66JxHIw -OHOorqh9/XqmVEFuUv/o2RPpt6wErZw24d7Kdled1Hvg060Dtp8B1th4YRFlaXcy -yTULJHFE2PgQTRy+EttQMNqFY7pnLkOquKfFjrRsZag --> ssh-ed25519 +vdRnA o4pJ/9oWKekb+lZXQdUAx8M5g4geeicqgl9YdmUwqkA -2YBQtnQjpF1wftdEqCQexnJB1TM7LdMKQ1oSnXXYSyI ---- Nz8h7k2kSGT5FKmFNo1kLS45tnGii88fSWkN9bk6Aw8 -.G߼c\5[z -]^NKx=؛M, 7Z7rabZfp,hjOrPAPTzJ9P)3m[ -ad JV%mQJaضVgFӖq39Nۿ.S(7+fD!$\,.fk'1P'x῜HHMcfe2 -W)xka{Dđ=!/ .I<&auyF䟞`5&9$8tL/^Ww|~ ;Th9Kl^ ưfӛ:9e/6Sex[>M~)dJ"l҄;el0%>qGbx0UAL"a4vKM \ No newline at end of file +GTbJsuAbQ3I8g7J7G536vWEPfBH6Aw7Zwl3bmqjw4oGrEmpgMO1fwdj2WNGe6dg+ ++vzlB0NnKtXWtbz77ukNTOnNtwAJV+TxvDh5k6fID/Mkbyc+XUQqyCEnq1Z1L8tF +tt+oPm3QFK/WZcBZTXmtfVgeCfNUCbQgWL+s7U8QPHoDm4gn5jwazfzVUvcDkJSt +Q1cqsgg2RR71dtETpjKV81sqj9JstcQPMnsi554Jr8qv5BwOVLBIAjZqdy+EOQcv +QOSuH09PK0RUqbNHwpnCuG2fbuH4oJT4lspa3Tbv8ygUySxcm073HlgnpGsC2wix +B+HcoSCO7vYVt5PUdKCPJXb/En+VO/9Rk9aC9oukopZFgaAwv8mVj32padN+Ss/Q +9Oz1JHB3clmT9Z5iheafIu+CtbCl8ZptcrOeJG7ljDYoJ9blIHYRby3SlAz1qgKq +KDg3i+/C5+4Wiot8gPKfBZezr2XU0cCyZZK4QhV6SUFaMH6MzR7y/z/kNIlMifku +I8Ac5s6H+/c3twUnXhfHqVlJXy94+WxvrLIxsY7P30isPDWuzq2iW1y8nYC8sqFf +POSzmVe4tvRmJ3XLIAb5aiOWZlgHY9d7pQCeOUk2Mn551lNicE8zzQ4AImZ1JlHn +ZgEnyYHxl0jMIn5ZTemHIoq43EPwmOfFLMQFPAwf8nI +-> ssh-rsa QHr3/A +lZm+MrSeX8EBi0FyHt/1y/WG/C5xHVd3PTcEimbKApioGzxRv/feeWJB990D/Yv+ +13EyGFZrv19PqDHiZSIE2gcRf1nZTMxvjkXzs+4/3rH/mpCM6JwkmIgOUgMJ583b +okyK0LAzYGrGh+Yk971wtmdnXk8R/Zt+utLevh+eA4NPabw82/sQ52+rbMQG7FrX +ARTuUPOexlkUY95w91xzJJ9tAvDLnJZ6RvazFYQx+HhAFYKN2dtv/IzqZS+r9K+T +AZxkpPfRTGbF+ABDJ4YUtzG/Trrumo7/Nd7U74Kr8ebaF5tv0VAZPZypz6NEJQUo +79kICP4V1POtoSnwcnIbx2+t45t95bI8zwmRauDG9d0sBlPhf21SbhsR2Bx/AsKB +SZiXGXpAoWj65dxEg/CQSI9RNHZyTTZH6tYdyRu0mXTb7y4kIzR4R7yZWsp9gYrD +rgj0A6JPS8A8CdZmMfKo6Pr2JzwwtnEBcVonDdQ8gM7Apj/wCAkwZ+5AV4thd/2L ++0j1gDqpAfcWngrDO1KnSq66KQqbikJiyuriB42sLuPqp9GkPQPhnpK/nZ4IarbY +1FBnMtQTjNMk+NzxzPRmKoVq6FVs6V/NXZIXMdRYin/oLzh5z+snaa5DBiDvPbT+ +fQv24w/ZZVb+CxqvFEEEtTxFKXep1fY8x2itA59URVs +-> ssh-ed25519 +vdRnA 6X73NcBbgHQZfLEWMxXBYN53+FflkvnOoS89ljFkPAw +Lc+M1JrU9ii76ju3U8MpM2JgnHKqGLPnalWiv+fvW3c +--- hck+Hf7FxxdQRBKcMV3p5sdEuEGNtHlINF227dgqPWE +39/f@ pz|nnq+:I6mFuhI\u{`eM[wx52}v*_"=Me_2xvDB㓄y_ $65qxpC 5= q< QޟspY, -TyuݵѠOݬm,.o pwsbI:+%#S72βN̚Rd18"U'1VWU'#=hQ[`VsEؤɷAΨ +O ;kejwa '*v[{CJ8/M sx; 5<4Ke[%nbA9%.Աd۳a \ No newline at end of file diff --git a/secrets/hercules-ci-binary-caches.age b/secrets/hercules-ci-binary-caches.age index 308bc83..3c0de72 100644 Binary files a/secrets/hercules-ci-binary-caches.age and b/secrets/hercules-ci-binary-caches.age differ diff --git a/secrets/hercules-ci-join-token.age b/secrets/hercules-ci-join-token.age index 23b93d1..1598ef3 100644 Binary files a/secrets/hercules-ci-join-token.age and b/secrets/hercules-ci-join-token.age differ diff --git a/secrets/hercules-ci-secrets-json.age b/secrets/hercules-ci-secrets-json.age index 99a6eb5..0f6f35d 100644 --- a/secrets/hercules-ci-secrets-json.age +++ b/secrets/hercules-ci-secrets-json.age @@ -1,21 +1,33 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -WGBp/iFyKjBA4G+uURMFM4BocIse1Tye9lay9Ku6uNazcIjSFhNFSWT8RbOWBlza -OO8t2bzBW6HErFPzGcEjiy9gRgaVDXa4P1yTjz2WHU1C2uJnrs/Yazl5kosoelgT -Azggc3XacsigftCgzqBIbE43kyyaeNB8adS6hS3r+jel0pQa0jW+7nysUBFZKZr8 -akjyEfkLPiHGiwnshCKaJxV6qmq0DtEgVcx07nyM0V78ONyU21ks0fwwP+j2fKGj -o9v8i0tVIr7FkS9IBc7dvywmv3gceYc+XhiT/H4AHJ21w1x2rIrD7fRb6c7e0km8 -dLvais4rQLA0uCYN6gej9kA1mwQssmJfkW+Vfpc3Y9B3wUF6g7SV4pErUKdUoZtW -BpMGNkLL8pkk03WwMqxooZK81zTo+RYY8vKd5si8Ad6eHNK4UnkbQTuevb/o/+sU -I48R1SBhejRyXg6c0/Wt0FsYI9lkYuiArNa7KrBrH/gZ/vHW0KXSHsIlgbLyDdIo -wRBaZUvmkv3LWwKxlgok/Mpb40TI0hrRGvPX6594EoJisuCbtwVNQu2wJ8Mbbbbc -kGjK99MdnZuE0MyhluWEJFu2vfPlzqsTS4UkaaO/N4CbdDPdqvI656a5ABbQWZ8X -51Kc7kmaYayeCBIx0Vzn/+RgeSfBrhgUjW/pYmQsJn4 --> ssh-ed25519 q+UPnA dAJG3yFxT1Wlvq3ksjk5TJqBM+vd1nW+RHo34QDDES0 -JfUs2KXj69iAxmWyeNoOrfHDXgPSEUbfKMEoBcajM7g --> ssh-ed25519 +vdRnA fJJ2rtzAd/DooLSPNUK9JuClIbKEPVS3EsgcL7C0rkg -hVCzOrr1uygpISLkaqlqOw0RBrMfXqmb9GRklXEsBYA --> ssh-ed25519 /WmILg ynOzrynzwHU97OIkrSgcKsjtNiqrwVh34qGAppCEnwA -Vn+2Xix32jItKgwvmUmCMq11AtMYYxu3e/mpDFFDPPA ---- fkWf31D4YZe6d3X3+o3+V/X9Q6vw6Rs7fPWkF2gvYHU -%rن[04)KgF)zuϞA4!!# hG> \ No newline at end of file +WiQKuCmH0qC2ENhLHonWQ6WutfZVQik0LfjLHUkbXEkrBcnoJVgT3LTz6NMqYTDP +NRMKTjr7sL7fL0hm/Ijs/m4eaQuPHYP6sf/5uMlnfAEyRnXNp4SRw+uK3+yvwb9O +eqTFKXTRuGm+u7+pJtGjyDoGpbNv9mQ6CG2/FFsl7n/d2ruhiFOir9JiwhLpwzya +9qSOg4j9j8/+majZcbwbhE+Fn7IRutlQ6Gm/2whOsUsZXTVkP03dnPWrfS/0BxK7 +ATphcYRpbF/56TDM8WZP9IMwx+HTci7vsqh7Ku5Uw607m8+hrGqL1YmNSkrvBv3/ +w1r49H71T6wEr9mAsIkEF3MvvednQiLaLAtqaAcAigNjniKZAjq5nnfc4/uv5VsC +5meoQ5Of1MTQNAjel62UV5ezn5Coe8N5XhEATltsEom6OSIFnKFRfUWg0HuIDEKR +lZ4hHvsjgNrt5HRKz/+XbpmNhbfa48j1964QIlKc5QqLXd05dGSFeC9hsnhdOIDb +Kgwe6dWaDiKxnCVgkwAwKuDF8EFlK4UeQtFt2KyO30yoxFzcb360Mbk5rAA3lglE +YTbf5Bq4NDVPDuXFxXLG5vy6HunhrkKu8hKPTA+4MnG7W3KKHDVtN6vQZ99ve9eJ +7qOzn3JaLQSu1HX6Uk5YEx3xW1INFi8vXhLE5pQ4lMo +-> ssh-rsa QHr3/A +MuqiTZFIhTk74Ujih8ecGWGxo1zfgc7salw6CNCof52xDtsp//ucg5Y2pVF1C3gd +j8OGZve/4xoAIK/N1l292RwOQ87PMysDTGh1hlbc9kD7mxRHnplkrsQQlYA2Z5fD +Ii5ovEK0MynQloOgfmFwzuFEiqRIofyhWLB2oq4x2T8JtQhO+JES11gyKS8l9iwW +KixrUCmLoInfj9JjIPwUJ93fu00R/d34Oh7MbxFaNbDZ+TjwwSIftodtKi1ScNor +YUhhInk3Tvx0ON+v0bxZ80DH/hKfcLwkU5dn4PS6+GZKC39baThg37nZfqR0qFZ9 +J5VGOwwjtsn3lBvQY/Dlff6aSfkpL7E1V+1YTbIPqmzNJQ6JL44Xh6jPMvtFNW/P +4nbgXabczB6XiY9kYbbr5q/oTOhOea1P/bSU49nYcRgHggDd50NAFGL/FS5rs9Fv +vytmcd2V2cEwxTlMx6AYL00GODowRlttZ38hmgfFTMis+aG2T3RK9ZQuomQXTkgJ +rYsJJgv/sRpYiVRJp+1+EYMJL38HjQfMpkrjEKwLjq1wmy86Dff0nErQtVpI2Xm9 +wlYvCsv0WQDj/k3qQl0JcrG17xUISVGdBLBU+I+NZ5ojDBUVIJq3htIOcthgS+GE +RhKb1yDJWVOzulCnSRUaBljqdOgKPjScHBvjg+F5ZBQ +-> ssh-ed25519 q+UPnA bqHOKm5e31kuqCD0TGZwol2VKe7Bggx9DAioNk3aSxI +D8l1Ok1HQYf1nvt6kNqsVLeagQWSowOood6mOqsHBeo +-> ssh-ed25519 +vdRnA aUNc3tu3HCKGt8HL7JiPfuWmVMU1t3XD4ws0ZLbH1jg +Wb7CfO1z/zzZ0R/roAi34P5sD8qSEaZtQuArkfhV3Bk +-> ssh-ed25519 /WmILg jLur9CKRWK6vqUBSEe+U0qOHFgGO7IMxbullvVQf7Hg +ZCY3zIW0YHFNqNWZeOBPUr3C0VvCE66UUih4ZibBUl8 +--- Vcofpjjyfd4tAAuq5PXh54QFAV3mod76Ymzr3OhYeFY +|’׬MN+G7 \ No newline at end of file diff --git a/secrets/hetzner-storage-box-sisko-ssh-password.age b/secrets/hetzner-storage-box-sisko-ssh-password.age deleted file mode 100644 index 3fe339c..0000000 --- a/secrets/hetzner-storage-box-sisko-ssh-password.age +++ /dev/null @@ -1,17 +0,0 @@ -age-encryption.org/v1 --> ssh-rsa /AagBw -RhcT4DTOOXQFVFTcXKau8xQeIPc/1xKoE0bNtlptEP3kX7x070K6BahjniqNzyYB -q/LlOY34mBGJB1mDMvE/iaCMAg7xy8NocdkW0t+O7yLOY+AYEEyw/bfDSsA4V5FQ -ODsL73cBcvfYEcKkrjqM0T0ySh5tLZLoBO8oE3CuC7YwoqUO/8KLghi415ENes6d -/nUVuHHKNXdQ6c32BLmGrEVF70uw7tkMAzWMQPKAL2uCupIkrH7HE/Cabi2KE7CY -3eN1qEM9qiMyVBAIFy0r9+rfYlopue6YtAIK6nJ2oq5ui56nx95u+pOl7hyBokUQ -Yh0J9wsPIh7FQPQ8hgSPxwaCWbFJOOnz7P7oYmdYp+7usRiaFiHS4m25Tuq99uIO -acdM0vh20zvSHrm+sB5ELOyYpOcgmQOpCloPfmgF9gAiB2EYQ04GGhrU9scaugkC -Jnywg9e/Xb5nwusSHm+vpZeHUZlSLvpRnfYNf+lKBTL/0kPyH2b9xkJnCm3HroPi -Q3eaiH6UbV4imQKoaQa0UDJsUq6bJj/63oiuodpnisdcOaKlJs7HPotbUJhXPUcp -MWBiWanKOODsh2RAQjqA8DnzkdlVUcTsEwthhKJpbtOIIC1Hzl4IG8nVct24R3A7 -ucYQlG4T082GYY/74buVJmFh4Y3T89Cl2SQnyJDhKLo --> ssh-ed25519 +vdRnA gbQZm4nLqoXOjzNTX8GO0jItG+R2BeYjDBuJMgERT0Y -ahKY3fU2A/3vGftO1Fwrfp/1c/OwLU83WEp2nnNywbU ---- Uwqkv2r9Y0eI4S5LjuMIR3ZOBevKZ1oZI2rVcKcEnzk -"5XW>A}g{B39"&y' [NA/(.1 \ No newline at end of file diff --git a/secrets/home-assistant-token.age b/secrets/home-assistant-token.age deleted file mode 100644 index 22a33d6..0000000 --- a/secrets/home-assistant-token.age +++ /dev/null @@ -1,17 +0,0 @@ -age-encryption.org/v1 --> ssh-rsa /AagBw -iWyPgVB+rD4RJ7VXI6RFJV3aQpVRfUNAnN4R17ygZpMjzpkGDsAapiLyV7qJbnAg -2TsIQnRDZ8AM21l+g7/9Hr01cttB2I6EoCIbq7rBZu7mvmsKYBOuk+/8hY4LiKO/ -2xq5MH4L2G2XTOalW9DBmI3Z9Z+jP90B9/XIerSPLmlmPyGJekY2x8HbJe5ASPno -TFmusPflmPxStcmLOZ7y2n7CpM2j3wbosiTzVbZAESY2bur9vfIlLnVtbfN8XuDR -wnhZLb5QINLl3D2nwJkipe6Q5U84s+DJmoakLbv+/2z6tgHSd9vvdnG5ytAw0zkf -oE91O4O9u8rza2m1b8ShokuSHmiJQyUlYuJM9nQ8kTEE5JKuTio+mQHyLqAAjc2v -8MC2dlYFxiJ2tlZVf21bf/ig94/MonWuYXDfX9OILen2ni/0WBqySvJ+CAbtmrwL -2HHVj/E+FoXqOdY3uQbjzuPGtbcJQm6S7wQKhMESUkb1BXTPbBqa8BeaTYi0khf8 -woobcHcaDEh9q3A8mWHPR+HnVfDOMIrtitfyNv6iBh57VfyxbXAuZR8QDOGVYGif -xb5+8Zbfa40i/wQb3glWnsog90bjs4qMBz5FfTHSp/UaUoNlRXztizaUo97cH30W -99owSDaHV9FLEqANvtmCCt+HCc9ZE4nHnP9KbHZkQi0 --> ssh-ed25519 +vdRnA XoYbjZ3p3itVK2buwZZ6WmtQ7m6HButXmsBJ15vG6S0 -Jp0Dxa7DBNKj0caa++21V1IMTcUP69E6YdlXpbbGaoc ---- CFN1ErdVcKmuqUeKUnW1AGl9+Zg9JhQheVSRlq3px3Q -DA)=\%A!bQ=W!-<*m6²WBq%@,$\nE^D\ZȟƿhfC,|Wf>\l^` z{mO3k8~]Ӓ)tz3v>eꌤ"\WwFnT;Ͽö́"/MX}G \ No newline at end of file diff --git a/secrets/home-planimetry.age b/secrets/home-planimetry.age index 9619054..0c7bec5 100644 Binary files a/secrets/home-planimetry.age and b/secrets/home-planimetry.age differ diff --git a/secrets/hydra-admin-password.age b/secrets/hydra-admin-password.age index 1445c5c..727519a 100644 --- a/secrets/hydra-admin-password.age +++ b/secrets/hydra-admin-password.age @@ -1,17 +1,30 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -Knxlo3pk7/mpyHfJyl8495HmJgIK/tbw658u6d98GIXJ8wYrfOnub3dxewCm3SuM -q7rk97cf69qAH5ilPJF7iOW4S1DptZ7Q8ut9fZhS4C+TV7/VU0bzu8UoBJlXSpWI -Y7xrKG2Ch0eus2/w2ddnd6x37XmUOcRWDF9LvB4vYRnNG75OcfFFCnmJqlfi2Cbg -kx6+Nyq5h+YXZg4NxQUYeNRzT0YVNLrdI8mRGB1bPn0FKpoXCU/NGIlscn5oO+dT -cqZ3CW8VXLeZyEp+qPVn8hFQBwE2AMwbyI/j1epjkuLUfthTkUmNQzsW+UfDTej/ -hPzVwzwPuLONvWoWtbpC49RrT+nDkqcWB682yXF8MMdpeEtub8G3KTTF2muHr1pd -2Alg/preBQ/kkt7aGplwy6bEzwh7bj7+w/FZxKLl+iuOzIdJJXLwxr0LqpyyGW3T -zYTyGc+hRbE+CYNs5p9Dg/my4jQUZ177GqUpcEmmXn5pI+qAcFe6STlUMuEHGC2N -EjPWIF+TOssdj4J7S/yae9RpNjJA6o3QvEYp6aUsqSYeqDuZlsrQdkDIkazLOt3Q -/mUCTwxEOYzEQCiZsVKFQ2P8m9eQfNSLVUuay63ErV0LtJj4bL/eRdSszdA08OJd -nPQl043UuX8RJFcMmRsyg86SsF5Ghr1TtUAGEfK/2CA --> ssh-ed25519 q+UPnA fwloW9Ax04f4U2n1+JJVr5UDj5c0fMXwkPC0bApgvE8 -Bp5VLrqD86eZmg8tQLHaExoU9tx/PgBq4x+fqU89j5U ---- 0ufXPayRvNFE9cvSosBB837DUWJS932FsZ5M0t4MtR0 -R%ΈxgpZb/4& =P \ No newline at end of file +NlF3t9JuPeK0ovrAch1Vn7JFlsTROCw7OneyBq2pYGNBMKYCe8ahdAMtv7AxXEdr +LMIXeHvhgrKvbz1ZJtw6i+rheEjGVW12nukCCakZEZCDGhNhMDY5lsowgfu18PdL +ud+D06vpGCviV9dblpBX/WpBYX2BOLqzztCcw+em14cLxlJ3Ocnjin01RIdm8eP+ +eX6Dotzm99cq0l7nuB6FGTlb3xW+Sp67ryneh08F0uSD7c2nibadmmecnXYeh6Xu +iTYV/qIBB2PArV09BDotkfLh1C+edROXZ4i4MqQCNktaBJrsMzD3/r7/GorcwguV +OFDKVIgNtISZZ13qKw6GafI8dwkIHjWkzYbPe9OGn9k72NgN5Z0ABCMwkrhj93Le +Lkke5OpX+X+UBB4FypTVIHi9l4F2xElpzU6h3Cxw6gIdWnOzjOS0KTQa9sMyjVBd +CjJ757zWSy4OjN93LsoR81mMMmqzXxs3dVLhxGV6gBoA/YzSi6pKqoPmIvI9swn/ +iujA/wq/vkMNEjBR4uRVAU8Iemqfb72duHYVMm5ss7Jl4poXRVV/1zivWSLuGN0Q +7qB/iRk04WxTjU2ybGUuGe7RoI1AtXS3oYTgYbzm83rBjMy311enb/jv9OCqe5cc +cmX7cRaXLg08TZMQ2UtEB/MFw8xenKqcPmmWMViSU7Y +-> ssh-rsa QHr3/A +LC1vc3SXXmYJnuOSwtSkdHT9i75kX9u9A7MlSPU9nf088Xa37uULhd573uI12Xab +WTJKUZe/ZOMz+8oelwlpipNgMm81osH7lTq6xLkKf2tP76BDtjOAPSVTESsFFENd +mmp5/lyTYjstjgTufAAw3OOA1IvBdRfGcncX6zBKOtyUmZWB+dU0kkerZmALgPkL +V+Ab8uph/ToP/ZexIGo7hRO7NUPhwV1A2x0taBz9sKqSDZY6j0d5WIg2WNSlV1VV +5Hcu2Hjr9UTJxuqTAJD3fK1+l3c3xSzr29j/9QrpUIfn94DFkbTnIrQoBWuwfrYm +EUMENTaqUIWozFv45NcEAqjAVBS5TzIXzL5YQ6zR7TgRAnbI6HpGXT9GtQ41xPEt +mgkr1mZ8BU6pi/C+ZY08rwhFEBlEHRHRebhI0xGP+qTEnjFb3bzwXJzy0KHcUo8m +QcDc7P1768yQq1REA3SsnX6yXXr9Lc3VnaroxVe914l2iJta3ipI6CTXcFTCwgNL +/m2ZpDMstX+64hhnz4kiV3v2F4tlwi21AlQLpdbuqobJDkXYy5uboPfL97xffn10 +jdhcuCeSv1Wabh/sIl2v4yTNngFpD3Bx738auX1TeTauIZSuk+PwDjyn2xO0SYoz +7lxK5F8CiCmxKFpP6aPGkuQt+RTLaydqdvLt2wHZTp4 +-> ssh-ed25519 q+UPnA hJl5F3KJbhDDY/olYpkzl++bXtFAl5G5oQdFjqSZ/zE +0jQcyANwEuBYvWhBXvfvgTIiEiPdX47VKBjUBzdtRno +--- AsOTpKHvR7obXINLNmlag5zBsfRip/ykxGphCMbP2EM + +"Q޳shk;᠊{ll:gFnh o \ No newline at end of file diff --git a/secrets/hydra-github-token.age b/secrets/hydra-github-token.age index d927200..f7b2d71 100644 --- a/secrets/hydra-github-token.age +++ b/secrets/hydra-github-token.age @@ -1,17 +1,29 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -b6ZHlRbQn9KYOTG8kj6xHDnQvhbO38eVQtyw13WbBDIB/2hocxBDQnj7aM2vtKma -yu/xEeAs8D70Z09NxS8Jojxwlf44XfzQUc4qDhB5RFUy0Fo9ZddJbTY7gMvZWq2f -Z9blHlB69478yCgUxt/KRJTLqpUNUJs16CdC+AIwo2y1j+eUAxfUdsX5D9gnj+wT -nP6PqJdbH4Fw8Eqs1kAJogqdMfxs+rX0o6nfz8ucULcsrWQGdRktD0Re+LAESSAU -17WofgLNMfV4EExnELYfkh7KzEAL+sKXLCsxBeCcoIiLulHRtvWHCCj0gvLlpVoI -ZP/dQPJRQ1f+WdnxEYDCPMdwcinrvrbzfOSses9Ygsbgo/X+ZpCO7qobSu4byDWH -C4zW3DA6dmhHZPMV68teOGczfh5egYeSmjBJc12UJc+Lsa0L4/eEwOsygfhwy4Su -zA3sp0lv3aQ8ylPyZoZhRg7CMyYznOG23UWSgk8bvBkhtYjwDB1qA2Nm2asftton -aT2utaRPuUTzOp6A4pVsDX8I8DjPWequDK9iIrWT8sTbuMZGOuQWmdDZwlwrYU6O -A/0uE1clvh6M2kIviiaSncki5opCutWKVt6H5sR3dixyVJraV7XJZz1YwaxhhT26 -YJBuYRraETUeiEtc8lNVvxlmVgcHIieJFbwUZsc599w --> ssh-ed25519 q+UPnA PlE1A9nxfSXmkDDtjTFg9yyHCsWAdTIR1s9czofed20 -cfvdwkEdENSMviOTx8Jnog4dEdi+YZ5Exr6Xc1vL9zk ---- Fj1h5F69adWg0k3FhtKRvsd7LVQC/d8GlOXgtTEdWdM -@b }5#ԃ =oe$o7Oo٠LE R#ջ{pIcXK \ No newline at end of file +Fe0pelj+N777GlWVTKGO/T9opoAORhVVaJDch+GAoOh5fHk330o2dIAfLBsRSq3Q +LCPgxpbrXcm4QTWK51eDRvFP5cMLIt7w5yY75j15P4m6q2tgxVMw3jChmcn4MSiQ +6aewkok0zsw6YFVqSvdVAcQbTM91Wq1lmSk/l7mD0L/m5oIhHw4tApeYh+vc0+ST +iMnzIt31hAPPt44inEwippSfEI0LeIfXp75TerEEgvx+9vxpBKOPg6mk2wUkGxKE +V1nJs9IX5xWiGocYx85ZsB60dOQs976y+6RX2s0xFRjcQTf2WmQ1FTToTltWKimw +zsOs0hCMqz5YRAHmDDRig+v4K523Pk7Bc637uosnYKq5zifTjgSEITTEEKeyfTIX +yJktN20Lt5icA73+qWy52AqTz87shMvwEpkQA1mfrCyKhtr9y7Q/CAH/UW+M+8mg +VjcTU+skd6u0Uz8K2/n8zSxYuk/HhD0+w/dN72/ik7bUwt6+GzBGxbFrFPKqF2/2 +3xPTlUVT0PZvFUfAYbUJvfF/eB6z1lFgurJsGcAHAruxqQKwiVMem9ZMFxj/NB/c +kM45+mRWh1vOrxD63g8UvwKbqF8FfRFZYavQA4gZD7V3zAYpmKl0ee0h6XP51i7Q +FtLkESoqEWwm9nwIOrxA8VWvCB7ydpSP5+9qkDpiyo8 +-> ssh-rsa QHr3/A +LnrfxxaLe20Jm7nnWJCwynS6fCMhqPwntvpSV/TxKj9UHzpW5Kkjxb4SfdUTbkHW +Y6bIJJsduktMJ6f6o9+2txNvPoaBRnoLhvpAOrj4ZKJUOePajaG9VIqqJRoQtfYs +wcxkMdSApqhWPzo176BQH0Su0TwngcVZR2Yodc2rkfJTY9+XEywpTbyhVs4/V6ZZ +P57kbiI/HtU8StzVG6gQR8oyPR3d571PyOg9zQD0U/0YVgD9plmSoDsT4x4FsJb/ +WkBUy9QdN6ezFSKif2nGK7mp8yJSz1LvWB4TTE34crh3QYLtpxLHBWfkokY1OvuQ +pesLe78R82GhNoROqrSO23YnkAWnWF8BZsOo9jRvTXV4BJ4c4DSQtDHY9YdH3oom +f5vz73CmHSLJQz80cjO1/H3MTT9a+6+Vtkjcj600j5cco1+r3V4Y7aAFrkYtIpTh +DdYypZVSkSv6UGXZN1w+K/7BxPLNKaSmcJWrvmW2qmKgmW+ev928NZoxjlRD6Bt5 +LV/pJRWZnEUGeirrg7NSqJS3IG3B2z7roicRCnrjjObMlC3VXMsx1Se/4OQdelR/ +Xbr1M3jgCDVV0mbFUvjEaLy/wS2zaY26XPbjhvzdiQU/pItUVJZwrGeIx0cG8kzZ +vYGCtSeYTcTzvjvmn3TqIOVoiBSuJlzVHx7nh/0I1Yk +-> ssh-ed25519 q+UPnA MyH8Ye10JSgUMF5d2DW02xXz6ZqRm+ZNAuUTIB7WOAU +EMwBlc4QMdtN1Ozd57f3ozZU+NUZXaSujMRJOsbBAvA +--- uCpRMA5i83F2dzJbs0wLbY7jcm4W+GiMZnmfARFwiF0 +oo*|}MvA|] z|RAH(ke+B<1B,g8iˋ/,ޱ)8Fή>@^ i2՗OU \ No newline at end of file diff --git a/secrets/kirk-wireguard-private-key.age b/secrets/kirk-wireguard-private-key.age index 48cb94b..30b8cd3 100644 Binary files a/secrets/kirk-wireguard-private-key.age and b/secrets/kirk-wireguard-private-key.age differ diff --git a/secrets/magit-forge-github-token.age b/secrets/magit-forge-github-token.age index 72b0b9a..8ca7e24 100644 --- a/secrets/magit-forge-github-token.age +++ b/secrets/magit-forge-github-token.age @@ -1,19 +1,31 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -eey5HLNKSSPfJSfUQn8DaAR1j/cFP+3/9xNips+QWHAgdoZ4LNe+CB/qDp9c3PVt -CuWtjSb2dBfZg8AfrbZf7olZaZnjJEtSzqVzSHMyEEcF5+iNed2isDPHrG36tLiF -tAIIpmwb8itf2CuVpm3GqVW600e9NFIR9vCNHrs5qkUS8NypNVzujllhE0SxdnDl -u9vEetoCFlxqO8O8JZYzBqnN8PFdEOUYVcAFYGs7F4Lbva2pxgbdGCl2xbvhmLsA -htG5w1N61Rb5wjE/Fa75yTkhADeYjrwgRyjTS4dRG2uJ1GXyrBfBRy0B4X8DVnpu -UTluCuhty0wK6HVBa2b1K6oNK+jFfn2Bp1EPl6jlbszk6xchmTQxFAWX6m9XrTlg -TErfyrgLpjl75WaEBkqGynKBYl6JqlzOu2hP/Q+qoRWPpxqsDG+6S1Wv0yOQQuH3 -qoeoLW9DdjjLNzFKJ2sI8C5aaLg/AIKQgVeurPlVzAOj2RP57GLtB5zx3z1TmYcS -3odGopL9Eu8eh7ONvNv8/Wc5i+mRpjqbl/dFqx7bZ+IMMxl5k+9lMLpLBHDGziuH -3+fvWa9Y4FGwxa8gZRzsPlEWFRgIVvh15tJUQgPCVsNXvtGKztasuRUsrKjmpTqI -l5g+dzx8x/nkbro2iXvrHw/CWKyldyc3Pj5MZS2kzOA --> ssh-ed25519 q+UPnA K7uWuaJ6GPeWpM3b6hqdsO0/p5JH2rVPYZupUfx65Ck -PF0AzdXwZuOVeia1zhw6NCS6mfCH1T+jNx964Ve9rcc --> ssh-ed25519 /yLdGQ b/7g3+9vhk9EUniS7nSi6we07mzlmfRKep1iKYweH1Q -+NHkRQ3nXQ49wctg1vCWqYHAgIIDo6GXkl7uPseYy8E ---- I+nIQ9yIhy6ww/VFhErHU+WBTPBlxfuh7xal/B5D+tM -=t@'LU>J]yyL+8 |^<ʠSS*-҄Nd2 \ No newline at end of file +Gy7+4P/3PLgJPnir/FY164mMTBJ9UpDUxDjsJBiTcgg4i8f5BVyjF2fYPscUPXuj +4+rPrzlsza23flJkCscmmwTcV/qVFjgNVS9bKtQ8UFEsHQH2K21EjZdmrZFOvSuW +njCcKwKlGsFLODS5j05tD6JvMnz0uPCZwPDabaQHKiI4YCggbFjiwFbczHY3yfhB +aE1eEdT/OFOJeQdEdiyOZ3DIRMPUlX07CLHGFoWdjklvPrHEfP4u2+YidrXc0lNE +TGbE3Pfg195oMOA8E9iCQTcBu+Br2s1+fmcy+QeTgZmIdJ0V5PfrBswT7WUEMEDy +xwiF95mDLsZ9fx2SXmSBToljMowK5WxKgKOenjmhQ9U8Y60OZ3s85mkI+JCQ2XLz +kvQA9b3p7C6CSYOU6Cgy3qWhKLWNlO+/vjovrZiy7/9r37O/u6LxWGuuw3qpQChj +c/BmKPBi9Btm/b+3GIJH13ICGO+taJi3bkWnV0/SXSuRqGmjRBWkDcGSi8JAoKX6 +1676KYR/IUhd2dXzilfEYRQ8m4OwSYDLsBBAoINLqvrSXqFDVaqRuiS5XpzVEmXQ +Hj1uW2MXyiqdTDt+zbxc5lZNtZjZjxq15jCbLwgEFpbN/3uhEZnj4XkRJZFqUSJP +2AsV5xuwLva4TTJYA8GrqKcrGMJKSr10KsCTGB/LVwg +-> ssh-rsa QHr3/A +F2YNuhkUFgx8KrSd4llqqbJWEFhA00EtSCVVBdPn4j6pbnOkhqt7V6ayJYNn3Hfs +1/W2N8qU8tQQ19tW5tQMu6UYr9aHfW1raNkTMAG1GY73O/o08dVWOHRm6nOT2mOQ +P8k92gWCCiK7Dz+U/aA1ukX2ddgw0gma4lWYY8SlY7e4p8csEP+1jJFCjrzSxyQA +VCkhF/4XIHnSw8HxONqhx/V6qRSVHtjMH2TffDuN2O/+p9cjPJky8Pypn15MsWLe +MJ0SwIhoLuQDo0jzhV0wDbc7gBcYoZes+GPQhxrAfZtN/FWMPXB5So41iZf5A6Xa +KPn73bXXxBpXoYt9HGQVuyjteN8hutzwyWMEGaLrm8/YBSeZ5ECJZjdQwKHtIrTX +GZQqpRWu4bJcahka+ajwwacvpW5yBJZfCAyjaKz7XMmemiiQJxX7tshNJllzaRVc +QOHzFVVrbxnIQAGWH3TMkav+neXqrOyUIu0jrGAtMsGzKwnw0juisC7FJbypbEZj +HCPRM+AtqEHu1lWfOYtHOkmsnr3W4tIn/EWo7HUvc+FX5rzQYU9Ih80sNHG0RkA7 +g+g+ylgiL18vYY3VS0D3M8yenyZbQgnTEAejUhB9daEJzCexH4zN9iO+2nZGK+qb +bJBLPT5hz2Jbte8gtjGaM1YcHqe53tjkakw7GwAi3Bk +-> ssh-ed25519 q+UPnA O+16+Um35CFPFkj506piwZ86j53RLGwTfPPOLAcUPD8 +od1Uq94VCnbvSl6hqKoeCgeMIfVstj2smIuU8b1jRUM +-> ssh-ed25519 /yLdGQ EkYYMh/wqk3w5mfEL1sIyeCP7Cq4kNB+mR37i/835xI +cRA2WfSRaluB1F2WxIouDkYgvr/gXB+yejXFvTtdA38 +--- Cj/TVrIh2XcGnGLJsrbbPR1VvhacW8vmYpfDItMLU9o +Q3 l˽6i̙4c O$=®0^"U YC;zL@PP;3 \ No newline at end of file diff --git a/secrets/matrix-registration-shared-secret.age b/secrets/matrix-registration-shared-secret.age index 26efe61..85c1ca5 100644 --- a/secrets/matrix-registration-shared-secret.age +++ b/secrets/matrix-registration-shared-secret.age @@ -1,17 +1,30 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -px5LyxkFuIYpUrgNhpvbsTqn6f6j1eHGJJ0xtYzmR4rwBsunquzCcHmR0EzE8X6O -1wIUsKnOP1s1i08jSxlJg6JXx41wtHXjDLrqD0/SNp24jtsLgEWWVHwUIdEF2HYN -3ZHPLuDjpo272KLTYhE7mjVgOTTyqewjdxhw3Riry+zbSv8yiF7n97jo8QeCFLXB -69POsZiAHGvTvH6giuPfi89T0i0MmzVSf8aco/o3YeyizI89GA02yHBTUQR5uh0L -kMYhab+MGSerciSByvXAp23HW6s48EkGzaRxunvfdkv7aLuRwhuUuIQ6lD/LntHC -Xv5gS9zgSmY7u4vXpRexJaIzj3/MhSFmcOJkmlBijSfmKShTxbOmUKdZY+3/0fI/ -FaVt8IHKVWDc+4pLj5VVicd7f8X8QHzuu1OnWnak3Kv3fkj2IOZWK50S+3mlMc2n -QsQAJH/5NC+F6bvGKTsbCyS0FGUEKiwFOv6CvoKFPyCN2RMl1zdc0V5yYoH5Nd/m -uyC74Be5GV02ohTIqgsPHS95/TnL4e5Df5DL1Cf+LXMzjEZZ+k6ZN8Ba+l2342+d -KnXq3Vtkq4PCuqiEaL5J8Dad/OkPt1PCCxHie/ug3kT/Cje3HO5i4R+TYYowLLTj -vog0rdCDJ3w4RjhdIVbirmLWVj7HtW2uEyyjax5OXVQ --> ssh-ed25519 +vdRnA KkRZ1VgAc/You8Pv3lvrXqa7JrTbUtjT9xtZrW0LtHk -ZCPmTQCTOYg1olWelLDNjzjgueouf9cHIp3TNAU252I ---- WEpHzH/7Eft0WeztVXOxPYSk2Op9ptrNfy5HNDQXLxk -D'=#ʼnefUISvo4zVhi"a ?qN./rES]P Ce6k\b^/2we \ No newline at end of file +LyWGdc/bqB5xeZBpGUdfY+h8A9LnrO1ayy0B6nKs5lS1GkCjOOZYBg/K/KNN3dv4 +Ymgj9ZF8pygy0SRWGLjnJvXv1776koEdSsIrjIBJTylS7J2kuvhZ+hExBk2/63Lr +nYseyIRG/0XLe9inWfid41IduW6zPtkB49mQptMEEz+B3MI1ZcP92dNuOZzpYIfw +u24kINWcFOJxXsYICawP5att/EAbtv6y5OGw/V3w9+HiaDtWNaA12FSYPAol1UKR +aeLCXgFAFopN2d3dNbA176c+z64gHNMnpCYAONcMwwETo9/pJA0Pbpp+g2dHaBIv +3D38T+GwU5I/dH4T/kHRbhRXIbr3s50jodNfeJJ6Bn8Cf0mCRG1BRmzH9+EpTX3f +1FqaQ0aDlfikLVqkkjcRhqDy80sskB3Dp/HmbAzn81CMr50pnwnHvzJxSEmCUkJg +Pf8yiZgIOWBa04NZu5N/V/YyUuL5Pi8Y0tD8d+T3ygAgWUzIb+zVxAgbvsca2x1a +vbCN1lKDY4cssXCq8xI/g8Y7kw57OMV2k/Ca1q/Dky+BaeM+lsBhBydwV2FRLBH+ +qxq0kXEwBTLCe7+d1aMdk7mTPR4kMrKiBKRRJ//1p5OoUNC8H7F02UOwrr9LFC4R +Co750gRdYHQIdIhRQrHqadb8LhBMECJ4fsgb6Zc7vBo +-> ssh-rsa QHr3/A +iraKh+rC1td7LFoREM27z33NGEEjZpRbdOI7PT0Ma0JNocYD257EUYOJSwr60A7y +6FOiUn3aSRhi/qca+kxuLdq3E8zrad1fMpIcL8bxooswf9OLhqcKsfy1mkAdkm8H +arRa7KqJqZAJv12MZ8UnQXx43rShHF1PFZsHfd7eKkHfjz4JgMNJVA3/mLMiK/ac +gc9RNU955HiEqngOrX5web5A84ajjQAVoTmKqQ+sIV2du3e4kcCtrMUv5lDoHFCL ++L2vREc8PdfVSwWpIAxH5rBRUENnYuJU52SW4yOgomrR6bVqdVB/DzNq6flo9nFE +jTprgE/Mj7AO6Iv7zACMRKM4oLfjuRLu98Cjv4zE1P/jOrCLM9Uh1H7wsPYjFXKu +oy/Y72chTYJPTXWL6t7H2Qd8nAqDp1A4xMPBpKrpJCHZwcoX9blOlwbHMu3c7Bn/ +GL/kFWo/Z1gOebBSeaaMpALhn4avDko58wOixh163BwZBC/ePAqZhkLY1Dck3dsb +RRTJXYJlGCPGKQ+kyyWrj19x3kgPOmhf0ev6Q76E0WG4bw3cwIFTFv5fldD5frSN +EPyzwP5SNSuKmtMpBuIEQYJoxApDJUjN97v8vfAAsgCkVOuUSD7qORGu9vVHb6lE +TvFAqLdpCBPvF1b66sC4WeRPWHeBikSD+7A73IRyV1s +-> ssh-ed25519 +vdRnA TxbWEdi2XEMh16Vv0iiwUyYuuTKzpwL8ZILCoBnH5hQ +8S1hpfBI8vc+Gqk8kW4ZlvrLuYe0g4f7Uad+DBVel0U +--- BQ3vUfo8FPKjIPIQ3Rztw6bpLAAejuWXWozFla5hfDY +sRT 1]WV‰60sّ$I%/hNG'c +b*eX]5UG;<ѵۋ"cuR4ڊų \ No newline at end of file diff --git a/secrets/matrix-sliding-sync-secret.age b/secrets/matrix-sliding-sync-secret.age index 8d8d6e0..204ea78 100644 Binary files a/secrets/matrix-sliding-sync-secret.age and b/secrets/matrix-sliding-sync-secret.age differ diff --git a/secrets/minio-credentials.age b/secrets/minio-credentials.age index aeb5aff..9152cba 100644 --- a/secrets/minio-credentials.age +++ b/secrets/minio-credentials.age @@ -1,19 +1,31 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -c266zF3RY4nmjXKJn4/K27HKXH6wSoLXAJrX+NAz472ScDZhOIZxDlGYhctj7hAa -MrEsnuYqsJVvM5NtjyCXkEtExYPRfC01Xk2ecmUMhhjvcy1GPR304x4ExVZYAG3K -mewSmKFEssMpm1FQy95AbonP3EYJ1+yCA7R11Ke/CzIfFbvqRvNUSPLH2rsODc1C -Wp0YjdnVYnpHKf8bPT1m+HEgoMGrI2FH9A4vEsmnQLMVPqUwR6NXIK8zvY1uLG32 -zOTZ7mHncLrB8eMYRznvKFHdLDpTHgMbll97GpWUOcsLesOcU2JM/oQRl4gO0W1C -VoSnC+PzU1jmbJIk/VNK7TvC7DWEEdbMJrdud2zYINKi6gV8IhtVouL/iXv1nM14 -8a/2SHN9UidbmCOGqqTf6K7GTOdZcBIDKmmMNv64fxFGkPwtHK9I2dgLVYZWEtJF -vXbhq8IjYOscbGc0bKcqH0A0K6pnjhtBuoCl8YNQvFLXuinWxUj3stk7SGqq1YvU -uP+e/TgIwIN0dKja5FMcBfRGdII5sYHHyhDoC8kT/JJcf1QZUmw9R7qV+9aOhuON -P/DVC5Je8YKfliqjhDs1TGkHgwnRHsxDqSdhPs1Yf67o96KR7d1YJ+lD10flomWm -wSYmQJOyI5CFjeZOb89RmasdVioH9d1tRsf2TTE/A3g --> ssh-ed25519 /WmILg 0Mp5aS1udTC3rd1cQb/00tWtvcCLwAbbfuz06OQIb2Y -HNn5QSUBy4K9WDsySx7RYiKi6NB8NdSJJy/mf8xYQhI --> ssh-ed25519 +vdRnA Defq5I6VWeVIHIF7GRaPGSnfrsq3nq4aOs/+cXh6izU -v5dL0ZiDtlXRKi0ATleO+HS0lW3BrA0cWS4497AmEuA ---- oK6lEGnwkCmPBgwukR2tLRCgeWU3fGcPE5S1+4CbprU -);(= 7ؠPOȒۭQOׇQt{ݺh 9 ~W=^ Y. `*%4s \ No newline at end of file +E12H0QXFFjXnEV7aCEg3O40q9BSrFndat5RnprDO/4cIvW9EDi28WL9vAylS+AsP +42SaqwpFgEM1x7yAfhR0Say4s31WNE4U6ZbJ69GCTDgo1/BLUb2G/ZDAD22la833 +ZFJ5kkumuoQAn8U9CHQlhKmkngyCcpOUuKh2PQhnYRbTFLpGPgazRVjCPGXhP8zB +29+bV+Ona2LhEUfMNYCI7sQsD2llZr3AvJy6lT0+kfn3+rWOz2Ef2VAhuxNEOmlZ +Rj7hE/26JFLObWupfHRye+tuW9CMd4zDHo+oQwbmX3Z6TyF/HGIqMdUNhQgRcNY9 +qBO/O6URtMOK8Ep3dexkarpI+BswFDfF4CxqdQMySvgjlc4AI7WaUXYJ3yolcdPn +NrNhHbBjOthNpsFCgpRxUo32fZM0+Hn+1acgxM0+PqHynLJ3uCKAsLFcfcYN3Iux +43vy+VZfSaVAknSilXMz+5KmDlP9KD25+CzAqOkSttrARVAUDY8y48IXatd7oyPO +i7mFQU0YeGWNXIfkqH/XTyUauNVpLB2/P1b/8NJ2l6qbsVu+t5NRlaGPnR2Itepu +gnFE7MJ0RwOdpsLOQwIWEbu3dN4Qsi3KBiComwiVwlj+8201f0znGPixD6qX9S0I +IS/J1+TUphqiAq1Cfeck2WGu1i9/YGubkGCMt9l4kqA +-> ssh-rsa QHr3/A +gkL2UE+aQUw+/SxW1ruRn92QHzZcV5s2NMjDEfae6CG8ehSxmi5smkUb3PBZuQ5L +6bSAu8naXJ3nGlB9IWqj+A5jIO+MmwNVYUsvTgPLHFb4Uy8kdqykECNkgrtqqJrd +3ZFBmsYZEPJNam7BbKN6KThdzYRyE3fHEFMGnVUS2suVH8jhrJylvCa6FZMFu/QP +uFMwHl/JiEifCxtlpTqjzyPPVYDI6e/lFdUv1TDCsPB+bF9OoUM4LWizLHdiN1Vu +LfZ8xgUipsqrEbArkd1Dlo7FpDhYotu+9lioSyn0aAIVxr8ZwpB5sT9e4F9gVRBx +nRWFhxNmWZtTwW5nGugftYwZqy+F0D88u6VBhuxJR4UUP78vg+suDKBHJA9GXfda +VhOKDnyhVDpLC5F7SL87U0muNIMCAGZSkHRaVk2V1dXEbZqMWdmSxCxjqNpC/2by +AO/SgZD0+Mg6MWYk3caLW+zhWyEMwXvkFcCD6ubDg45Jwv4J22+U643qE+fjiHZH +E41GfJRcgzYC9AYf0ZYVSeveOxh6SWr9SkaZ4nSBKSwZhVTWUOwTda/c2oPMAEgs +XZn8csdXfBP5ikRjqFMpyK2zLjGr47qbb4+X+p+qdPuWvs+P7iS5nxFt35ztVAGn +X9LaU2RmR0TfOc2GnE2oSODKPecEMgZv0D6Ghz/tOUs +-> ssh-ed25519 /WmILg 5zR9ToCpPvD3gfX/DZkSViSyH/k/mc17r9PkHyTUBRY +Dr1vkLrZaxQrksmkDNHCIuvcWW66vnfMX6ApHo2VtlY +-> ssh-ed25519 +vdRnA B6tOXNobJUtx1AXG/a2rGb7a2lTXox3b6CvsNg9AhyI +M6VWGHl07La5b4xfLa2fq1fPn8rM8ZER36HVIiMSctE +--- ZYI6+FsdFDX4gXbp/tfcmGdN4mZM6CSuYB+C62M+JVI +Y +X Lsz\ۉ/:Q_PBґ%"B`440|DY0TotBk*m8<^Zvm \ No newline at end of file diff --git a/secrets/nextcloud-admin-pass.age b/secrets/nextcloud-admin-pass.age index 5ed1b67..3a837de 100644 Binary files a/secrets/nextcloud-admin-pass.age and b/secrets/nextcloud-admin-pass.age differ diff --git a/secrets/nix-netrc.age b/secrets/nix-netrc.age deleted file mode 100644 index f2dd53c..0000000 Binary files a/secrets/nix-netrc.age and /dev/null differ diff --git a/secrets/openrouter-api-key.age b/secrets/openrouter-api-key.age deleted file mode 100644 index cf1b263..0000000 Binary files a/secrets/openrouter-api-key.age and /dev/null differ diff --git a/secrets/picard-wireguard-private-key.age b/secrets/picard-wireguard-private-key.age index 41b2860..b221ac7 100644 Binary files a/secrets/picard-wireguard-private-key.age and b/secrets/picard-wireguard-private-key.age differ diff --git a/secrets/pike-wireguard-private-key.age b/secrets/pike-wireguard-private-key.age deleted file mode 100644 index 05b98ef..0000000 Binary files a/secrets/pike-wireguard-private-key.age and /dev/null differ diff --git a/secrets/restic-hetzner-password.age b/secrets/restic-hetzner-password.age index f75fa69..bcfb630 100644 Binary files a/secrets/restic-hetzner-password.age and b/secrets/restic-hetzner-password.age differ diff --git a/secrets/secrets.nix b/secrets/secrets.nix index dd664fc..0e092b5 100644 --- a/secrets/secrets.nix +++ b/secrets/secrets.nix @@ -1,199 +1,34 @@ let keys = (import ../lib).keys; in -with keys.hosts; -with keys.users; -{ - "cachix-personal-token.age".publicKeys = [ - ccr-ssh - mothership - kirk - sisko - pbp - picard - pike - ]; - "magit-forge-github-token.age".publicKeys = [ - ccr-ssh - mothership - kirk - ]; - "git-workspace-tokens.age".publicKeys = [ - ccr-ssh - mothership - kirk - picard - pike - ]; - "hydra-admin-password.age".publicKeys = [ - ccr-ssh - mothership - ]; - "hydra-github-token.age".publicKeys = [ - ccr-ssh - mothership - ]; - "cache-private-key.age".publicKeys = [ - ccr-ssh - mothership - ]; - "autistici-password.age".publicKeys = [ - ccr-ssh - kirk - picard - sisko - pike - ]; - "hercules-ci-join-token.age".publicKeys = [ - ccr-ssh - mothership - sisko - picard - ]; - "hercules-ci-binary-caches.age".publicKeys = [ - ccr-ssh - mothership - sisko - picard - ]; - "hercules-ci-secrets-json.age".publicKeys = [ - ccr-ssh - mothership - sisko - picard - ]; - "minio-credentials.age".publicKeys = [ - ccr-ssh - picard - sisko - ]; - "aws-credentials.age".publicKeys = [ - ccr-ssh - picard - sisko - ]; - "nextcloud-admin-pass.age".publicKeys = [ - ccr-ssh - sisko - ]; - "home-planimetry.age".publicKeys = [ - ccr-ssh - sisko - ]; - "home-assistant-token.age".publicKeys = [ - ccr-ssh - sisko - ]; - "openrouter-api-key.age".publicKeys = [ - ccr-ssh - kirk - mothership - picard - deltaflyer - pike - ]; - "cloudflare-api-tokens.age".publicKeys = [ - ccr-ssh - sisko - ]; - "cloudflare-dyndns-api-token.age".publicKeys = [ - ccr-ssh - sisko - ]; - "restic-hetzner-password.age".publicKeys = [ - ccr-ssh - picard - sisko - kirk - pike - ]; - "hass-ssh-key.age".publicKeys = [ - ccr-ssh - sisko - ]; - "grafana-password.age".publicKeys = [ - ccr-ssh - sisko - ]; - "matrix-registration-shared-secret.age".publicKeys = [ - ccr-ssh - sisko - ]; - "matrix-sliding-sync-secret.age".publicKeys = [ - ccr-ssh - sisko - ]; - "forgejo-runners-token.age".publicKeys = [ - ccr-ssh - picard - pike - ]; - "forgejo-nix-access-tokens.age".publicKeys = [ - ccr-ssh - picard - pike - ]; - "garmin-collector-environment.age".publicKeys = [ - ccr-ssh - sisko - ]; - "hetzner-storage-box-sisko-ssh-password.age".publicKeys = [ - ccr-ssh - sisko - ]; - "sisko-restic-password.age".publicKeys = [ - ccr-ssh - sisko - ]; - "sisko-attic-environment-file.age".publicKeys = [ - ccr-ssh - sisko - ]; - "firefly-app-key.age".publicKeys = [ - ccr-ssh - sisko - ]; - "arbi-config.age".publicKeys = [ - ccr-ssh - sisko - ]; - "nix-netrc.age".publicKeys = [ - ccr-ssh - sisko - pike - picard - kirk - ]; - "wireguard-mlabs-private-key.age".publicKeys = [ - ccr-ssh - picard - pike - kirk - ]; + with keys.hosts; + with keys.users; { + "cachix-personal-token.age".publicKeys = [ccr-ssh ccr-gpg mothership kirk sisko pbp picard]; + "magit-forge-github-token.age".publicKeys = [ccr-ssh ccr-gpg mothership kirk]; + "git-workspace-tokens.age".publicKeys = [ccr-ssh ccr-gpg mothership kirk picard]; + "hydra-admin-password.age".publicKeys = [ccr-ssh ccr-gpg mothership]; + "hydra-github-token.age".publicKeys = [ccr-ssh ccr-gpg mothership]; + "cache-private-key.age".publicKeys = [ccr-ssh ccr-gpg mothership]; + "autistici-password.age".publicKeys = [ccr-ssh ccr-gpg kirk picard sisko]; + "hercules-ci-join-token.age".publicKeys = [ccr-ssh ccr-gpg mothership sisko picard]; + "hercules-ci-binary-caches.age".publicKeys = [ccr-ssh ccr-gpg mothership sisko picard]; + "hercules-ci-secrets-json.age".publicKeys = [ccr-ssh ccr-gpg mothership sisko picard]; + "minio-credentials.age".publicKeys = [ccr-ssh ccr-gpg picard sisko]; + "aws-credentials.age".publicKeys = [ccr-ssh ccr-gpg picard sisko]; + "nextcloud-admin-pass.age".publicKeys = [ccr-ssh ccr-gpg sisko]; + "home-planimetry.age".publicKeys = [ccr-ssh ccr-gpg sisko]; + "chatgpt-token.age".publicKeys = [ccr-ssh ccr-gpg kirk mothership picard deltaflyer]; + "cloudflare-dyndns-api-token.age".publicKeys = [ccr-ssh ccr-gpg sisko]; + "restic-hetzner-password.age".publicKeys = [ccr-ssh ccr-gpg picard sisko kirk]; + "hass-ssh-key.age".publicKeys = [ccr-ssh ccr-gpg sisko]; + "matrix-registration-shared-secret.age".publicKeys = [ccr-ssh ccr-gpg sisko]; + "matrix-sliding-sync-secret.age".publicKeys = [ccr-ssh ccr-gpg sisko]; + "forgejo-runners-token.age".publicKeys = [ccr-ssh ccr-gpg picard]; + "forgejo-nix-access-tokens.age".publicKeys = [ccr-ssh ccr-gpg picard]; - # WireGuard - "picard-wireguard-private-key.age".publicKeys = [ - ccr-ssh - picard - ]; - "sisko-wireguard-private-key.age".publicKeys = [ - ccr-ssh - sisko - ]; - "kirk-wireguard-private-key.age".publicKeys = [ - ccr-ssh - kirk - ]; - "deltaflyer-wireguard-private-key.age".publicKeys = [ - ccr-ssh - deltaflyer - ]; - "tpol-wireguard-private-key.age".publicKeys = [ - ccr-ssh - tpol - ]; - "pike-wireguard-private-key.age".publicKeys = [ - ccr-ssh - pike - ]; -} + # WireGuard + "picard-wireguard-private-key.age".publicKeys = [ccr-ssh ccr-gpg picard]; + "sisko-wireguard-private-key.age".publicKeys = [ccr-ssh ccr-gpg sisko]; + "kirk-wireguard-private-key.age".publicKeys = [ccr-ssh ccr-gpg kirk]; + "deltaflyer-wireguard-private-key.age".publicKeys = [ccr-ssh ccr-gpg deltaflyer]; + } diff --git a/secrets/sisko-attic-environment-file.age b/secrets/sisko-attic-environment-file.age deleted file mode 100644 index 691339e..0000000 Binary files a/secrets/sisko-attic-environment-file.age and /dev/null differ diff --git a/secrets/sisko-restic-password.age b/secrets/sisko-restic-password.age deleted file mode 100644 index 591e61f..0000000 --- a/secrets/sisko-restic-password.age +++ /dev/null @@ -1,17 +0,0 @@ -age-encryption.org/v1 --> ssh-rsa /AagBw -pLExrrrritKhmHonhKGK5X5BZ2u6ywexZoKSqIqG5drChitojcAspTaICrFIlmcn -nrKVKDiwCvdekIHV0iotyg88FsBOCh/CtyWaay8lhPOwhy/zYNAZbe+UG7yxOAUB -rGvGzOLfOnk6FHDpsE1GjHtthhel0IYyXkEfAj6TFjzI2TlRXN+VwX3Yu5ko9cgu -N2t1fzCeTzFZ/4QhRKfjvswl/LUCxplwT/h/i9b6hMtyMpV3TDYXYCxYcLkK3eCu -n+MAD1ZgxmxExYF11YfKQFZppOoEPdimmCbIlzZKHl4+4Sij3bNTtBtXyk7QjOBr -1FuwNKjpc05MdDnWYsKCHfqjNDmdvrDB/UYIJqBdPVj3HO8MQ6loRYhoimBQqug9 -HF/G/4PR3gFZXhbXaTih5ZQ5ozp0scEHwtNWK3jN6WF3KqLxkqVjcwMv/picoPRS -ceT1hNTUoR4PyBTZuRAYvVcdc1z3nkN0FZ08b+PTtyAR7yWlhG1GBLqQmQG0w74R -iYAT2ZntjzDUki6MCl8cqyfQeysqNk3JYmgDNYW4bsMKVrzlD8ULNYt8Zo1pbL8r -J3Iydedbv+l3eg/QYv5kPz7/6oSjmNiSB2nsFFvvTdChWSOgNUKUvYhSKuH3JGPA -iGL9l3m4UBfot9DJqRzW2k4RmckeOTBossrj2YOdmqw --> ssh-ed25519 +vdRnA U+pN4CpCDWkcsI153U2rFfRZpVuGSCkHSNgoB1ZssnI -ew8vABvUVp9er3y81OBY9Wll72WoqESgatcQ55QdjPw ---- sxKlF/97wNPlrfT3/8zW0ln9IH3m8aka5crPz8W9vKQ -Mͱ/q}\*%k Lof"q[8.A \ No newline at end of file diff --git a/secrets/sisko-wireguard-private-key.age b/secrets/sisko-wireguard-private-key.age index ae717fc..77f6f60 100644 --- a/secrets/sisko-wireguard-private-key.age +++ b/secrets/sisko-wireguard-private-key.age @@ -1,18 +1,30 @@ age-encryption.org/v1 -> ssh-rsa /AagBw -mUgaBjme6NXIzta4kZtrgKw7S+N8ugSwm9V7epeS/RVSRubWeoEFLS9eaPiwlEcT -ex23Z0sWhwkpkeuG3FEjBOe8VSg6NtplKdnNBKGa+kwG74OQA0msDMwsiOb0ppDK -V8XfMEw6Aog4BXBykGP5/44YTEFJ6CGa3Z6O0+dD2T+tjcRcNOZ+bFjbGvQArEYu -E56R7ydPNCRb99DsDpOrd/xbmcmDOrdOgUSmYgHKrwaYDGn6u+wIGcMUrZxATTe0 -1o4cog7tZ/JPSm7fVRPyNmfVumfXDGr2/0zV8jgJL13r4GjPuycC1bg4WrQGk9vJ -e4gWxuj5D7Zufa5rfgbP8QfFupBKQQqjyp3PU3/354hVIUB9ZRK504TXI2NnE85i -oe0HcBhlibyse09K5p2QTbpafNK3X6v2S4HuOQH1DAIz8xR7PACIZzM3YmhYz8aF -1XksY5dNhH1C8E7woijlgMm41TYaqN7rcdTEMLQJdpfCh5Rew1A+tTBar0i1Hb8I -VD1NYU+czSdQNau1MtSF3JvQD0WmKw4caOv3L6a7nS7HEIvRPEXlHFzujoElWOuw -dRvU3LxRZ1OHxxNy0ju170LAoXZJDmccNIwYdL/SfJM9aaAJSbzyuc68QzP38QxQ -AuSLKMP0o+jKKPf0Knb2emKuzm7ntLXY30zUdt9dAgQ --> ssh-ed25519 +vdRnA 8hlOzHTHf+CajHxLpt56IAqY1D5uODIAeW9w2C2PGG8 -S8qyq6QMLfHd+hnCDwHubuOZobEdtH4tWNCuDqdzSfI ---- yIbeEytnq5wrKNrxCoOLWEIabw39pTYEgtUx8dwMBmM -"Y~7pT~ՂW6 -9YZ%LIg<fim>L `Q^p ps \ No newline at end of file +cvRfm6k7zHvcAWGj9Kpu0HphlcfmYdZtp21VZUKx5RWH7hcijvSxo2mgk26JVwb9 +D8sB3n0QoLlE5+Ej3bmpepJUCeaUVKhbLiwMzeKGNUxlzGhbOlh+aj14iWM9aWVZ +kn7f1TlnzhEqn572z7DvKqVptDHiCJ+b3eeGUr9Znhgnp6THvoMIKdr2wK798oxT +RBnL0bCZDDJUM9rYZb6qF871ijKAqxpCtkjzYfSGKHBcgQ+lsehRQxH7t5O79j/b +PXIvg5ZZLjjXsUo4tO1P7TCv0L6CheQwlibCHgkwdy0u5VpZ/Za2IyRAxLD803QI +K0JTjlgOVkPHMWeG7VMgr/DLxn7xhK4ZpnrzglaLe2+wueK+VxxSkInoEgbHWfBx +vj0MUaY/lHcAs6RJIu+7U2Y6NnV1+kNpE7qqiDRCi/pz2fAAgIbeM64ymkNsNDOM +J0yv5guQNG+gHWqGK0B4BnNQUANZhhr2tljzGL/PTwDHPXSQ2Qz0tFqHO3VxSHEH +uyqhAe9oC0IunIcukbPYB8dPPM5LBeLvaT3l63B/I0HosRUK6Q/ts0hZsBgr37oK +MVuLibW0Trj491UmSNEfLoLTvXv+sHQy83IjtU3Ubwa4fXxpg6ql7WbE9sHJGPR9 +8u4JDj8b9iYAWa6+SUUf+a3y664FRFrMSWWw8uINKCA +-> ssh-rsa QHr3/A +OCTxQPpTZOSsG7ZIupk6vp62ueJBX9oE2aFF7DRo4uM3fhtrojYSELVrmpvpIxCP +vepb976mdGS2IE1YQWLfZMW2KMi76jOPNKIFWcnvTRcVVsNwj13xZYrQCGfRx1LJ +Flenvyr9IL51xhw4fiaO0lBcGJZtTGe4sK9uQj0g1zaFx70t/4ZAu+w0GdGn4df2 +xs+ikBhzWovQNWsDjhXZJuxkds2S43luncAT5sElHOvgw8+wV1zFAwNkjyJnEOj1 +grUnYK7aZdMalu9N+Iz6S89+m+JfRRHsL4fk3570NrdQDfRw1fhEong/EaNOx5+M +mW64h9ac5TrpwTdJdY6v2etBfnjeDoRmxKPdJBxawSb6baJi2d/7L12wju07bEIi +HRVvLNTyvPiVB+IPyUUpI+eogMN5tJXEQKwf3K8hiWgXyX7DmubgdBjEqqLfkUjn +CS27J85QpSdPHFaVr3g7w49LW9Pey/s+zuIpdiGjVh8+fMB+4y4zhKWvVuY0X0n/ +QOxgaCykB/mlR3Prz8bOLEmN11RVVE0WWoV1+x205/sX/THdyWcg1/v0+sx/IaVs +mh/rUFV1cpVsYluS3VW8/BrjwrKwRwqtgqGu0pG+sKetkeRY0rf7uGfQjlwQJbej +YcfuuoVy/j7ejnHP9fdEaHrBvVbF9CkH2iDrBJvd2I0 +-> ssh-ed25519 +vdRnA pKUeraMwzhFh8kCFPf2Tm7NVvQkX5NPB8emAk/gY1jI +0q4Kzyxs4Izmo/NpL7HSt26KWFpkhT4TUdbSdMtgHLI +--- /W7t86EbCxe1cpyDfpD9wzk4nqycHHqNiNzaZ17YiJk +ǶA+nTW<^zp {-{ +m'1 m!lɯu'F0B??$y \ No newline at end of file diff --git a/secrets/tpol-wireguard-private-key.age b/secrets/tpol-wireguard-private-key.age deleted file mode 100644 index 9281a79..0000000 Binary files a/secrets/tpol-wireguard-private-key.age and /dev/null differ diff --git a/secrets/wireguard-mlabs-private-key.age b/secrets/wireguard-mlabs-private-key.age deleted file mode 100644 index 363e217..0000000 --- a/secrets/wireguard-mlabs-private-key.age +++ /dev/null @@ -1,12 +0,0 @@ -age-encryption.org/v1 --> ssh-ed25519 Zh7Kmw 1pcva3l9KyvXlzWJVeul63s1xnL2yEMzuB1R73IdKlA -TDDa9yQYXrqFS+MCEeqCcQ/27zu3WytSmU5MBNyQTIk --> ssh-ed25519 /WmILg z9/JeIxSpzndNP+1fwfdRfKYTaNp7wVITCkF7wwayEs -8PlFDHZbA0Z/3svhPWGE/sHfsMNmuXrdP6Qf0FhLMmc --> ssh-ed25519 OYRzvQ Tk0mN20c8199ZvTY6jXY6ExSXGR3kb4qtnj8HkPj1xY -5SGMhFzIE98NgNw7bnnivVTvuKtBtJdf/2jAjJUSKl8 --> ssh-ed25519 /yLdGQ 8J4LLlxtMFW8fALPGUk/NaHIJ59bo9tKe5TGiGAvYhk -sgE0SQi169mEtltDWIb4ZZaXKUXORyiKhmOZsNOiqKU ---- sWbCYolqfqwIsja6nNdyPBcOeM/Qq5GninMokUvK4xE -ʼngz{4 X? -A e"v\Ho,m}bq$h:fGkF=#0q \ No newline at end of file diff --git a/shell/default.nix b/shell/default.nix index 4bb67b2..f8e8240 100644 --- a/shell/default.nix +++ b/shell/default.nix @@ -1,25 +1,27 @@ -{ - perSystem = - { pkgs, config, ... }: - { - devShells.default = pkgs.mkShell { - name = "fleet-shell"; - buildInputs = with pkgs; [ - git - agenix - age - deadnix - statix - alejandra - disko - deploy - colmena - nixos-anywhere - ]; - shellHook = '' - export RULES="$(git rev-parse --show-toplevel)/secrets/secrets.nix"; - ${config.pre-commit.installationScript} - ''; - }; +{inputs, ...}: { + perSystem = { + pkgs, + config, + ... + }: { + devShells.default = pkgs.mkShell { + name = "fleet-shell"; + buildInputs = with pkgs; [ + git + agenix + age + deadnix + statix + alejandra + disko + deploy + colmena + nixos-anywhere + ]; + shellHook = '' + export RULES="$(git rev-parse --show-toplevel)/secrets/secrets.nix"; + ${config.pre-commit.installationScript} + ''; }; + }; }