diff --git a/.gitignore b/.gitignore index b2be92b..58399cb 100755 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ result +.pre-commit-config.yaml diff --git a/.woodpecker/checks.yml b/.woodpecker/checks.yml deleted file mode 100644 index 34d0c7d..0000000 --- a/.woodpecker/checks.yml +++ /dev/null @@ -1,17 +0,0 @@ -when: - - event: [push] - - branch: master - - path: - include: ['**.nix'] - exclude: ['**.md', 'docs/**', '.woodpecker/*.yaml', '**.js', '**.lua', '**.scss', '**.nu'] -steps: - check: - image: nixos/nix - commands: - - echo 'experimental-features = flakes nix-command' >> /etc/nix/nix.conf - - nix flake check - fmt: - image: nixos/nix - commands: - - echo 'experimental-features = flakes nix-command' >> /etc/nix/nix.conf - - nix run nixpkgs#alejandra -- -c . diff --git a/.woodpecker/deploy.yml b/.woodpecker/deploy.yml index c41f915..9358f46 100644 --- a/.woodpecker/deploy.yml +++ b/.woodpecker/deploy.yml @@ -1,27 +1,18 @@ when: - branch: flake-lock-update - event: [pull_request_closed] - + steps: - attic-push: - image: git.vdx.hu/voidcontext/woodpecker-plugin-nix-attic - settings: - binary_cache: https://cache.flake.sh/ - binary_cache_public_key: kyasshu:g1heIgCgG7M4San6nRsz/omcVQ1GTc7+zKKm3L9Co7o= - binary_cache_token: - from_secret: kyasshu_access_token - script: | - attic login kyasshu $PLUGIN_BINARY_CACHE_TOKEN deploy: image: nixos/nix commands: | - echo 'experimental-features = flakes nix-command' >> /etc/nix/nix.conf - echo "access-tokens = github.com=$${GH_PAT}" >> /etc/nix/nix.conf - echo 'builders-use-substitutes = true' >> /etc/nix/nix.conf - echo 'substituters = https://cache.flake.sh/kyasshu https://hyprland.cachix.org https://cache.nixos.org https://nix-gaming.cachix.org https://anyrun.cachix.org https://viperml.cachix.org https://nix-community.cachix.org https://cache.nixos.org/' >> /etc/nix/nix.conf - echo 'trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= kyasshu:g1heIgCgG7M4San6nRsz/omcVQ1GTc7+zKKm3L9Co7o= hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4= anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s= viperml.cachix.org-1:qZhKBMTfmcLL+OG6fj/hzsMEedgKvZVFRRAhq7j8Vh8= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=' >> /etc/nix/nix.conf - mkdir -p .ssh && cd .ssh - echo "$${SSH_KEY}" > forgejo - chmod 400 forgejo - nix run github:serokell/deploy-rs -- --ssh-opts="-i forgejo -o StrictHostKeyChecking=no" --skip-checks --targets .#arashi .#kariru .#sakura .#sora .#yuki .#haru .#kaze + echo 'experimental-features = flakes nix-command' >> /etc/nix/nix.conf + echo "access-tokens = github.com=$${GH_PAT}" >> /etc/nix/nix.conf + echo 'builders-use-substitutes = true' >> /etc/nix/nix.conf + echo 'substituters = https://cache.flake.sh/kyasshu https://hyprland.cachix.org https://cache.nixos.org https://nix-gaming.cachix.org https://anyrun.cachix.org https://viperml.cachix.org https://nix-community.cachix.org https://cache.nixos.org/' >> /etc/nix/nix.conf + echo 'trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= kyasshu:g1heIgCgG7M4San6nRsz/omcVQ1GTc7+zKKm3L9Co7o= hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4= anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s= viperml.cachix.org-1:qZhKBMTfmcLL+OG6fj/hzsMEedgKvZVFRRAhq7j8Vh8= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=' >> /etc/nix/nix.conf + mkdir -p .ssh && cd .ssh + echo "$${SSH_KEY}" > forgejo + chmod 400 forgejo + nix run github:serokell/deploy-rs -- --ssh-opts="-i forgejo -o StrictHostKeyChecking=no" --skip-checks --targets .#arashi .#kariru .#sakura .#sora .#yuki .#haru .#kaze secrets: [ssh_key, gh_pat] diff --git a/README.md b/README.md index 8c37633..d738e66 100755 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ + multiple fully declarative self hosted services (and some containerized ones, with a docker backend) + wayland config for hyprland + custom packages not found in nixpkgs ++ linted & styled with [alejandra](https://github.com/kamadorueda/alejandra), [deadnix](https://github.com/astro/deadnix), and [statix](https://github.com/nerdypepper/statix) ## :busts_in_silhouette: Credit #### people who've inspired me to dive into nix, and i've stolen stuff from (you guys are awesome!) diff --git a/flake.lock b/flake.lock index 643d076..bc21727 100644 --- a/flake.lock +++ b/flake.lock @@ -157,6 +157,22 @@ "type": "github" } }, + "flake-compat_3": { + "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-parts": { "inputs": { "nixpkgs-lib": [ @@ -233,6 +249,24 @@ "inputs": { "systems": "systems_4" }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "inputs": { + "systems": "systems_5" + }, "locked": { "lastModified": 1694529238, "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", @@ -247,6 +281,27 @@ "type": "github" } }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703887061, + "narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "helix": { "inputs": { "crane": "crane_2", @@ -487,6 +542,22 @@ } }, "nixpkgs-stable_2": { + "locked": { + "lastModified": 1704874635, + "narHash": "sha256-YWuCrtsty5vVZvu+7BchAxmcYzTMfolSPP5io8+WYCg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3dc440faeee9e889fe2d1b4d25ad0f430d449356", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_3": { "locked": { "lastModified": 1705957679, "narHash": "sha256-Q8LJaVZGJ9wo33wBafvZSzapYsjOaNjP/pOnSiKVGHY=", @@ -583,6 +654,22 @@ } }, "nixpkgs_7": { + "locked": { + "lastModified": 1704842529, + "narHash": "sha256-OTeQA+F8d/Evad33JMfuXC89VMetQbsU4qcaePchGr4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "eabe8d3eface69f5bb16c18f8662a702f50c20d5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { "locked": { "lastModified": 1701174899, "narHash": "sha256-1W+FMe8mWsJKXoBc+QgKmEeRj33kTFnPq7XCjU+bfnA=", @@ -613,6 +700,28 @@ "type": "github" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_3", + "flake-utils": "flake-utils_3", + "gitignore": "gitignore", + "nixpkgs": "nixpkgs_7", + "nixpkgs-stable": "nixpkgs-stable_2" + }, + "locked": { + "lastModified": 1706424699, + "narHash": "sha256-Q3RBuOpZNH2eFA1e+IHgZLAOqDD9SKhJ/sszrL8bQD4=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "7c54e08a689b53c8a1e5d70169f2ec9e2a68ffaf", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { "ags": "ags", @@ -628,6 +737,7 @@ "nix-index-database": "nix-index-database", "nixpkgs": "nixpkgs_6", "nur": "nur", + "pre-commit-hooks": "pre-commit-hooks", "sops-nix": "sops-nix", "yazi": "yazi" } @@ -687,7 +797,7 @@ "nixpkgs": [ "nixpkgs" ], - "nixpkgs-stable": "nixpkgs-stable_2" + "nixpkgs-stable": "nixpkgs-stable_3" }, "locked": { "lastModified": 1706410821, @@ -763,6 +873,21 @@ "type": "github" } }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "utils": { "inputs": { "systems": "systems" @@ -832,8 +957,8 @@ }, "yazi": { "inputs": { - "flake-utils": "flake-utils_3", - "nixpkgs": "nixpkgs_7", + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs_8", "rust-overlay": "rust-overlay_2" }, "locked": { diff --git a/flake.nix b/flake.nix index f49f44a..5d32981 100755 --- a/flake.nix +++ b/flake.nix @@ -10,6 +10,7 @@ nur.url = "github:nix-community/NUR"; yazi.url = "github:sxyazi/yazi"; helix.url = "github:helix-editor/helix"; + pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; hyprland-plugins = { url = "github:hyprwm/hyprland-plugins"; inputs.hyprland.follows = "hyprland"; @@ -39,18 +40,42 @@ inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = {nixpkgs, ...} @ inputs: let + outputs = { + self, + nixpkgs, + pre-commit-hooks, + ... + } @ inputs: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; in { + checks = { + pre-commit-check = pre-commit-hooks.lib.${system}.run { + src = ./.; + hooks = { + stylua.enable = true; + eslint.enable = true; + statix.enable = true; + alejandra.enable = true; + deadnix = { + enable = true; + excludes = ["overlays.nix"]; + }; + }; + }; + }; devShells.${system}.default = pkgs.mkShell { name = "snowflake"; + inherit (self.checks.pre-commit-check) shellHook; packages = with pkgs; [ git sops alejandra + statix + deadnix + stylua yaml-language-server lua-language-server nodePackages.typescript-language-server diff --git a/home/README.md b/home/README.md index c34b775..9219c94 100644 --- a/home/README.md +++ b/home/README.md @@ -25,3 +25,4 @@ name | description `yazi` | terminal file manager `zathura` | pdf viewer `zellij` | terminal multiplexer +`zoxide` | a smarter cd command diff --git a/home/ags/config/.eslintrc.js b/home/ags/config/.eslintrc.js new file mode 100644 index 0000000..bee4612 --- /dev/null +++ b/home/ags/config/.eslintrc.js @@ -0,0 +1,26 @@ +module.exports = { + "env": { + "browser": true, + "es2021": true + }, + "extends": "eslint:recommended", + "overrides": [ + { + "env": { + "node": true + }, + "files": [ + ".eslintrc.{js,cjs}" + ], + "parserOptions": { + "sourceType": "script" + } + } + ], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "rules": { + } +} diff --git a/home/ags/config/config.js b/home/ags/config/config.js index 98002c5..2376a82 100644 --- a/home/ags/config/config.js +++ b/home/ags/config/config.js @@ -1,9 +1,8 @@ -import { App, Utils } from './import.js'; -import { Bar } from './js/main.js' +import { App, Utils } from "./import.js"; +import { Bar } from "./js/main.js"; - -const scss = App.configDir + '/main.scss' -const css = App.configDir + '/style.css' +const scss = App.configDir + "/main.scss"; +const css = App.configDir + "/style.css"; Utils.exec(`sass ${scss} ${css}`); @@ -19,6 +18,6 @@ Utils.monitorFile(`${App.configDir}/scss`, reloadCss, "directory"); export default { style: css, windows: [ - Bar(2) - ] -} + Bar(2), + ], +}; \ No newline at end of file diff --git a/home/ags/config/import.js b/home/ags/config/import.js index e6b5813..e98e5db 100644 --- a/home/ags/config/import.js +++ b/home/ags/config/import.js @@ -7,17 +7,17 @@ import Audio from "resource:///com/github/Aylur/ags/service/audio.js"; import Hyprland from "resource:///com/github/Aylur/ags/service/hyprland.js"; import Network from "resource:///com/github/Aylur/ags/service/network.js"; import SystemTray from "resource:///com/github/Aylur/ags/service/systemtray.js"; -import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js'; +import Mpris from "resource:///com/github/Aylur/ags/service/mpris.js"; export { App, Audio, Hyprland, + Mpris, Network, Service, SystemTray, Utils, Variable, Widget, - Mpris, -}; \ No newline at end of file +}; diff --git a/home/ags/config/js/main.js b/home/ags/config/js/main.js index 00c1656..e247c3a 100644 --- a/home/ags/config/js/main.js +++ b/home/ags/config/js/main.js @@ -1,40 +1,42 @@ -import { Widget } from '../import.js'; -import { Time } from './widgets/time.js' -import { nixosLogo } from './widgets/images/image.js'; -import { Media } from './widgets/music.js'; -import { Workspaces } from './widgets/hyprland.js'; +import { Widget } from "../import.js"; +import { Time } from "./widgets/time.js"; +import { nixosLogo } from "./widgets/images/image.js"; +import { Media } from "./widgets/music.js"; +import { Workspaces } from "./widgets/hyprland.js"; -const Start = () => Widget.Box({ +const Start = () => + Widget.Box({ hpack: "start", children: [ - nixosLogo(), - Workspaces(), - ] -}); -const Center = () => Widget.Box({ + nixosLogo(), + Workspaces(), + ], + }); +const Center = () => + Widget.Box({ children: [ - Media(), - ] -}); -const End = () => Widget.Box({ + Media(), + ], + }); +const End = () => + Widget.Box({ hpack: "end", children: [ - Time(), - ] -}); + Time(), + ], + }); -const Bar = (monitor) => Widget.Window({ +const Bar = (monitor) => + Widget.Window({ monitor, name: `bar`, - anchor: ['top', 'left', 'right'], - exclusivity: 'exclusive', + anchor: ["top", "left", "right"], + exclusivity: "exclusive", child: Widget.CenterBox({ - startWidget: Start(), - centerWidget: Center(), - endWidget: End(), + startWidget: Start(), + centerWidget: Center(), + endWidget: End(), }), -}); + }); -export { - Bar -} +export { Bar }; diff --git a/home/ags/config/js/widgets/hyprland.js b/home/ags/config/js/widgets/hyprland.js index 930db18..9591fcf 100644 --- a/home/ags/config/js/widgets/hyprland.js +++ b/home/ags/config/js/widgets/hyprland.js @@ -1,17 +1,18 @@ import { Hyprland, Widget } from "../../import.js"; -const Workspaces = () => Widget.Box({ - class_name: 'workspaces', - children: Hyprland.bind('workspaces').transform(ws => { - return ws.map(({ id }) => Widget.Button({ - on_clicked: () => Hyprland.sendMessage(`dispatch workspace ${id}`), - child: Widget.Label(`${id}`), - class_name: Hyprland.active.workspace.bind('id') - .transform(i => `${i === id ? 'focused' : ''}`), - })); +const Workspaces = () => + Widget.Box({ + class_name: "workspaces", + children: Hyprland.bind("workspaces").transform((ws) => { + return ws.map(({ id }) => + Widget.Button({ + on_clicked: () => Hyprland.sendMessage(`dispatch workspace ${id}`), + child: Widget.Label(`${id}`), + class_name: Hyprland.active.workspace.bind("id") + .transform((i) => `${i === id ? "focused" : ""}`), + }) + ); }), -}); + }); -export { - Workspaces -} \ No newline at end of file +export { Workspaces }; diff --git a/home/ags/config/js/widgets/images/image.js b/home/ags/config/js/widgets/images/image.js index bf3635a..4bde732 100644 --- a/home/ags/config/js/widgets/images/image.js +++ b/home/ags/config/js/widgets/images/image.js @@ -1,9 +1,9 @@ -import { Widget } from '../../../import.js'; +import { Widget } from "../../../import.js"; -const nixosLogo = () => Widget.Icon({ - icon: '/home/notoh/snowflake/home/ags/config/js/widgets/images/static/nixos.png' -}); +const nixosLogo = () => + Widget.Icon({ + icon: + "/home/notoh/snowflake/home/ags/config/js/widgets/images/static/nixos.png", + }); -export { - nixosLogo -} \ No newline at end of file +export { nixosLogo }; diff --git a/home/ags/config/js/widgets/music.js b/home/ags/config/js/widgets/music.js index 72ba717..135f138 100644 --- a/home/ags/config/js/widgets/music.js +++ b/home/ags/config/js/widgets/music.js @@ -1,17 +1,16 @@ -import { Widget, Mpris } from "../../import.js"; +import { Mpris, Widget } from "../../import.js"; -const Media = () => Widget.Box({ - class_name: 'media', - child: Widget.Label('-').hook(Mpris, self => { - if (Mpris.players[0]) { - const { track_artists, track_title } = Mpris.players[0]; - self.label = `${track_artists.join(', ')} - ${track_title}`; - } else { - self.label = 'Nothing is playing'; - } - }, 'player-changed'), -}); +const Media = () => + Widget.Box({ + class_name: "media", + child: Widget.Label("-").hook(Mpris, (self) => { + if (Mpris.players[0]) { + const { track_artists, track_title } = Mpris.players[0]; + self.label = `${track_artists.join(", ")} - ${track_title}`; + } else { + self.label = "Nothing is playing"; + } + }, "player-changed"), + }); -export { - Media -} \ No newline at end of file +export { Media }; diff --git a/home/ags/config/js/widgets/time.js b/home/ags/config/js/widgets/time.js index e2e7f27..3103c17 100644 --- a/home/ags/config/js/widgets/time.js +++ b/home/ags/config/js/widgets/time.js @@ -1,18 +1,16 @@ -import { Widget, Utils } from '../../import.js'; +import { Utils, Widget } from "../../import.js"; - -const Time = () => Widget.Box({ +const Time = () => + Widget.Box({ child: Widget.Label({ - className: "date" + className: "date", }).poll( - 1000, - (self) => - Utils.execAsync(["date", "+%a %b %d %H:%M"]).then((time) => - self.label = time - ), + 1000, + (self) => + Utils.execAsync(["date", "+%a %b %d %H:%M"]).then((time) => + self.label = time + ), ), -}); + }); -export { - Time -} \ No newline at end of file +export { Time }; \ No newline at end of file diff --git a/home/ags/config/jsconfig.json b/home/ags/config/jsconfig.json new file mode 100644 index 0000000..961a4a5 --- /dev/null +++ b/home/ags/config/jsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Node", + "target": "ES2020", + "jsx": "react", + "allowImportingTsExtensions": true, + "strictNullChecks": true, + "strictFunctionTypes": true + }, + "exclude": [ + "node_modules", + "**/node_modules/*" + ] +} \ No newline at end of file diff --git a/home/ags/config/package-lock.json b/home/ags/config/package-lock.json new file mode 100644 index 0000000..5fab6d4 --- /dev/null +++ b/home/ags/config/package-lock.json @@ -0,0 +1,1135 @@ +{ + "name": "snowflake-ags", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "snowflake-ags", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/home/ags/config/package.json b/home/ags/config/package.json new file mode 100644 index 0000000..32675bb --- /dev/null +++ b/home/ags/config/package.json @@ -0,0 +1,15 @@ +{ + "name": "snowflake-ags", + "version": "1.0.0", + "description": "snowflake ags", + "main": "config.js", + "repository": { + "type": "git", + "url": "https://git.flake.sh/notohh/snowflake" + }, + "author": "notohh", + "license": "MIT", + "devDependencies": { + "eslint": "^8.56.0" + } +} \ No newline at end of file diff --git a/home/default.nix b/home/default.nix index 6a9e1be..18481a3 100644 --- a/home/default.nix +++ b/home/default.nix @@ -4,9 +4,7 @@ ./neofetch ./nushell ./starship - ./git ./lazygit - ./direnv ./yazi ]; @@ -31,21 +29,46 @@ p7zip ]; - services.gpg-agent = { - enable = true; - defaultCacheTtl = 3600; - pinentryFlavor = "curses"; - enableSshSupport = true; - enableNushellIntegration = true; + services = { + gpg-agent = { + enable = true; + defaultCacheTtl = 3600; + pinentryFlavor = "curses"; + enableSshSupport = true; + enableNushellIntegration = true; + }; }; - programs.bat.enable = true; - - programs.zoxide = { - enable = true; - enableNushellIntegration = true; - options = [ - "--cmd cdd" - ]; + programs = { + bat.enable = true; + git = { + enable = true; + delta.enable = true; + userEmail = "github@notohh.dev"; + userName = "notohh"; + signing = { + key = "BD47506D475EE86D"; + signByDefault = true; + }; + ignores = ["*result*" ".direnv" "node_modules"]; + }; + gh = { + enable = true; + gitCredentialHelper.enable = true; + settings = { + editor = "hx"; + prompt = "enabled"; + }; + }; + direnv = { + enable = true; + enableNushellIntegration = true; + nix-direnv.enable = true; + }; + zoxide = { + enable = true; + enableNushellIntegration = true; + options = ["--cmd cdd"]; + }; }; } diff --git a/home/direnv/default.nix b/home/direnv/default.nix deleted file mode 100644 index e88b1eb..0000000 --- a/home/direnv/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -_: { - programs.direnv = { - enable = true; - enableNushellIntegration = true; - nix-direnv.enable = true; - }; -} diff --git a/home/git/default.nix b/home/git/default.nix deleted file mode 100644 index 443bc5d..0000000 --- a/home/git/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -_: { - programs.git = { - enable = true; - delta.enable = true; - userEmail = "github@notohh.dev"; - userName = "notohh"; - signing = { - key = "BD47506D475EE86D"; - signByDefault = true; - }; - ignores = ["*result*" ".direnv" "node_modules"]; - }; - programs.gh = { - enable = true; - gitCredentialHelper.enable = true; - settings = { - editor = "hx"; - prompt = "enabled"; - }; - }; -} diff --git a/home/helix/languages.nix b/home/helix/languages.nix index 4c4d6d5..e4fdd3c 100644 --- a/home/helix/languages.nix +++ b/home/helix/languages.nix @@ -24,7 +24,7 @@ name = "lua"; auto-format = true; formatter = { - command = lib.getExe luaformatter; + command = lib.getExe stylua; }; } ]; diff --git a/home/helix/themes/catppuccin_mocha.nix b/home/helix/themes/catppuccin_mocha.nix index f5a0b66..8c87ea6 100644 --- a/home/helix/themes/catppuccin_mocha.nix +++ b/home/helix/themes/catppuccin_mocha.nix @@ -1,7 +1,6 @@ _: { programs.helix = { themes.catppuccin_mocha = let - transparent = "none"; rosewater = "#f5e0dc"; flamingo = "#f2cdcd"; pink = "#f5c2e7"; diff --git a/home/helix/themes/tokyonight.nix b/home/helix/themes/tokyonight.nix index c35ac84..6377971 100644 --- a/home/helix/themes/tokyonight.nix +++ b/home/helix/themes/tokyonight.nix @@ -7,20 +7,16 @@ _: { light-green = "#9ece6a"; green = "#73daca"; turquoise = "#89ddff"; - light-cyan = "#b4f9f8"; teal = "#2ac3de"; cyan = "#7dcfff"; blue = "#7aa2f7"; magenta = "#bb9af7"; white = "#c0caf5"; light-gray = "#9aa5ce"; - parameters = "#cfc9c2"; comment = "#565f89"; black = "#414868"; foreground = "#a9b1d6"; - foreground_highlight = "#c0caf5"; foreground_gutter = "#363b54"; - background = "#1a1b26"; background_highlight = "#30374b"; background_menu = "#16161e"; in { diff --git a/home/nushell/config.nu b/home/nushell/config.nu index 4c5ce8f..399fcc4 100755 --- a/home/nushell/config.nu +++ b/home/nushell/config.nu @@ -24,9 +24,6 @@ alias sora = nix run github:serokell/deploy-rs ".#sora" alias tsuru = nix run github:serokell/deploy-rs ".#tsuru" alias haru = nix run github:serokell/deploy-rs ".#haru" alias kaze = nix run github:serokell/deploy-rs ".#kaze" -alias dx = nix run "nixpkgs#deadnix" -alias sx = nix run "nixpkgs#statix" -- check -alias sxfix = nix run "nixpkgs#statix" -- fix alias dl = yt-dlp -P ~/Videos/downloaded alias dlad = yt-dlp -x --audio-format mp3 --embed-thumbnail alias dlcd = yt-dlp diff --git a/home/wayland/default.nix b/home/wayland/default.nix index a131283..5676a23 100644 --- a/home/wayland/default.nix +++ b/home/wayland/default.nix @@ -14,24 +14,46 @@ ''; }; in { - imports = [ - ./greetd.nix - ]; - - environment.systemPackages = with pkgs; [ - dbus-hyprland-environment - wayland - glib - grim - slurp - satty - wl-clipboard - wlr-randr - swayidle - swaylock-effects - hyprpicker - swww - ]; + imports = [./greetd.nix]; + environment = { + systemPackages = with pkgs; [ + dbus-hyprland-environment + wayland + glib + grim + slurp + satty + wl-clipboard + wlr-randr + swayidle + swaylock-effects + hyprpicker + swww + ]; + sessionVariables = { + GBM_BACKEND = "nvidia-drm"; + __GL_GSYNC_ALLOWED = "0"; + __GL_VRR_ALLOWED = "0"; + WLR_DRM_NO_ATOMIC = "1"; + XDG_SESSION_TYPE = "wayland"; + __GLX_VENDOR_LIBRARY_NAME = "nvidia"; + _JAVA_AWT_WM_NONREPARENTING = "1"; + QT_QPA_PLATFORM = "wayland"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + GDK_BACKEND = "wayland"; + WLR_NO_HARDWARE_CURSORS = "1"; + MOZ_ENABLE_WAYLAND = "1"; + WLR_BACKEND = "vulkan"; + WLR_RENDERER = "vulkan"; + XCURSOR_SIZE = "24"; + NIXOS_OZONE_WL = "1"; + EDITOR = "hx"; + TERMINAL = "wezterm"; + }; + etc."greetd/environments".text = '' + Hyprland + ''; + }; services.dbus.enable = true; xdg.portal = { @@ -44,29 +66,4 @@ in { common.default = "*"; }; }; - - environment.sessionVariables = { - GBM_BACKEND = "nvidia-drm"; - __GL_GSYNC_ALLOWED = "0"; - __GL_VRR_ALLOWED = "0"; - WLR_DRM_NO_ATOMIC = "1"; - XDG_SESSION_TYPE = "wayland"; - __GLX_VENDOR_LIBRARY_NAME = "nvidia"; - _JAVA_AWT_WM_NONREPARENTING = "1"; - QT_QPA_PLATFORM = "wayland"; - QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; - GDK_BACKEND = "wayland"; - WLR_NO_HARDWARE_CURSORS = "1"; - MOZ_ENABLE_WAYLAND = "1"; - WLR_BACKEND = "vulkan"; - WLR_RENDERER = "vulkan"; - XCURSOR_SIZE = "24"; - NIXOS_OZONE_WL = "1"; - EDITOR = "hx"; - TERMINAL = "wezterm"; - }; - - environment.etc."greetd/environments".text = '' - Hyprland - ''; } diff --git a/home/wayland/hyprland/config/general.nix b/home/wayland/hyprland/config/general.nix index 10182a8..213a98e 100644 --- a/home/wayland/hyprland/config/general.nix +++ b/home/wayland/hyprland/config/general.nix @@ -9,7 +9,7 @@ ]; exec-once = [ "ags" - "swww init && swww img ~/Pictures/wallpapers/city.png" + "swww init && swww img ~/Pictures/wallpapers/frieren.png" "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" "~/.local/bin/lock" diff --git a/home/wezterm/config.lua b/home/wezterm/config.lua index ceccae1..2f609b5 100644 --- a/home/wezterm/config.lua +++ b/home/wezterm/config.lua @@ -1,21 +1,21 @@ -local wezterm = require('wezterm') +local wezterm = require("wezterm") local config = { - front_end = "WebGpu", - webgpu_preferred_adapter = { - backend = "Vulkan", - device_type = "DiscreteGpu", - name = "NVIDIA GeForce GTX 1070 Ti" - }, - enable_wayland = false, - font = wezterm.font 'Monaspace Krypton', - font_size = 12.0, - window_background_opacity = 0.6, - text_background_opacity = 1.0, - enable_tab_bar = false, - color_scheme = 'tokyonight', - window_padding = {top = 20, bottom = 20, left = 20, right = 20} + front_end = "WebGpu", + webgpu_preferred_adapter = { + backend = "Vulkan", + device_type = "DiscreteGpu", + name = "NVIDIA GeForce GTX 1070 Ti", + }, + enable_wayland = false, + font = wezterm.font("Monaspace Krypton"), + font_size = 12.0, + window_background_opacity = 0.6, + text_background_opacity = 1.0, + enable_tab_bar = false, + color_scheme = "tokyonight", + window_padding = { top = 20, bottom = 20, left = 20, right = 20 }, } return config diff --git a/home/yazi/init.lua b/home/yazi/init.lua index b6e3f49..ec402ca 100644 --- a/home/yazi/init.lua +++ b/home/yazi/init.lua @@ -1,159 +1,183 @@ function Manager:render(area) - self.area = area + self.area = area - local chunks = ui.Layout():direction(ui.Layout.HORIZONTAL):constraints({ - ui.Constraint.Ratio(MANAGER.ratio.parent, MANAGER.ratio.all), - ui.Constraint.Ratio(MANAGER.ratio.current, MANAGER.ratio.all), - ui.Constraint.Ratio(MANAGER.ratio.preview, MANAGER.ratio.all) - }):split(area) + local chunks = ui.Layout() + :direction(ui.Layout.HORIZONTAL) + :constraints({ + ui.Constraint.Ratio(MANAGER.ratio.parent, MANAGER.ratio.all), + ui.Constraint.Ratio(MANAGER.ratio.current, MANAGER.ratio.all), + ui.Constraint.Ratio(MANAGER.ratio.preview, MANAGER.ratio.all), + }) + :split(area) - local bar = function(c, x, y) - return ui.Bar(ui.Rect { - x = math.max(0, x), - y = math.max(0, y), - w = math.min(1, area.w), - h = math.min(1, area.h) - }, ui.Bar.TOP):symbol(c) - end + local bar = function(c, x, y) + return ui.Bar( + ui.Rect({ + x = math.max(0, x), + y = math.max(0, y), + w = math.min(1, area.w), + h = math.min(1, area.h), + }), + ui.Bar.TOP + ):symbol(c) + end - return ya.flat { - -- Borders - ui.Border(area, ui.Border.ALL):type(ui.Border.ROUNDED), - ui.Bar(chunks[1], ui.Bar.RIGHT), ui.Bar(chunks[3], ui.Bar.LEFT), + return ya.flat({ + -- Borders + ui.Border(area, ui.Border.ALL):type(ui.Border.ROUNDED), + ui.Bar(chunks[1], ui.Bar.RIGHT), + ui.Bar(chunks[3], ui.Bar.LEFT), - bar("┬", chunks[1].right - 1, chunks[1].y), - bar("┴", chunks[1].right - 1, chunks[1].bottom - 1), - bar("┬", chunks[2].right, chunks[2].y), - bar("┴", chunks[2].right, chunks[1].bottom - 1), -- Parent - Parent:render(chunks[1]:padding(ui.Padding.xy(1))), -- Current - Current:render(chunks[2]:padding(ui.Padding.y(1))), -- Preview - Preview:render(chunks[3]:padding(ui.Padding.xy(1))) - } + bar("┬", chunks[1].right - 1, chunks[1].y), + bar("┴", chunks[1].right - 1, chunks[1].bottom - 1), + bar("┬", chunks[2].right, chunks[2].y), + bar("┴", chunks[2].right, chunks[1].bottom - 1), -- Parent + Parent:render(chunks[1]:padding(ui.Padding.xy(1))), -- Current + Current:render(chunks[2]:padding(ui.Padding.y(1))), -- Preview + Preview:render(chunks[3]:padding(ui.Padding.xy(1))), + }) end -Status = {area = ui.Rect.default} +Status = { area = ui.Rect.default } function Status.style() - if cx.active.mode.is_select then - return THEME.status.mode_select - elseif cx.active.mode.is_unset then - return THEME.status.mode_unset - else - return THEME.status.mode_normal - end + if cx.active.mode.is_select then + return THEME.status.mode_select + elseif cx.active.mode.is_unset then + return THEME.status.mode_unset + else + return THEME.status.mode_normal + end end function Status:mode() - local mode = tostring(cx.active.mode):upper() - if mode == "UNSET" then mode = "UN-SET" end + local mode = tostring(cx.active.mode):upper() + if mode == "UNSET" then + mode = "UN-SET" + end - local style = self.style() - return ui.Line { - ui.Span(THEME.status.separator_open):fg(style.bg), - ui.Span(" " .. mode .. " "):style(style) - } + local style = self.style() + return ui.Line({ + ui.Span(THEME.status.separator_open):fg(style.bg), + ui.Span(" " .. mode .. " "):style(style), + }) end function Status:size() - local h = cx.active.current.hovered - if h == nil then return ui.Line {} end + local h = cx.active.current.hovered + if h == nil then + return ui.Line({}) + end - local style = self.style() - return ui.Line { - ui.Span(" " .. ya.readable_size(h:size() or h.cha.length) .. " "):fg( - style.bg):bg(THEME.status.separator_style.bg), - ui.Span(THEME.status.separator_close):fg(THEME.status.separator_style.fg) - } + local style = self.style() + return ui.Line({ + ui.Span(" " .. ya.readable_size(h:size() or h.cha.length) .. " ") + :fg(style.bg) + :bg(THEME.status.separator_style.bg), + ui.Span(THEME.status.separator_close):fg(THEME.status.separator_style.fg), + }) end function Status:name() - local h = cx.active.current.hovered - if h == nil then return ui.Span("") end - local linked = "" - if h.link_to ~= nil then linked = " -> " .. tostring(h.link_to) end - return ui.Span(" " .. h.name .. linked) + local h = cx.active.current.hovered + if h == nil then + return ui.Span("") + end + local linked = "" + if h.link_to ~= nil then + linked = " -> " .. tostring(h.link_to) + end + return ui.Span(" " .. h.name .. linked) end function Status:permissions() - local h = cx.active.current.hovered - if h == nil then return ui.Line {} end + local h = cx.active.current.hovered + if h == nil then + return ui.Line({}) + end - local perm = h.cha:permissions() - if perm == nil then return ui.Line {} end + local perm = h.cha:permissions() + if perm == nil then + return ui.Line({}) + end - local spans = {} - for i = 1, #perm do - local c = perm:sub(i, i) - local style = THEME.status.permissions_t - if c == "-" then - style = THEME.status.permissions_s - elseif c == "r" then - style = THEME.status.permissions_r - elseif c == "w" then - style = THEME.status.permissions_w - elseif c == "x" or c == "s" or c == "S" or c == "t" or c == "T" then - style = THEME.status.permissions_x - end - spans[i] = ui.Span(c):style(style) - end - return ui.Line(spans) + local spans = {} + for i = 1, #perm do + local c = perm:sub(i, i) + local style = THEME.status.permissions_t + if c == "-" then + style = THEME.status.permissions_s + elseif c == "r" then + style = THEME.status.permissions_r + elseif c == "w" then + style = THEME.status.permissions_w + elseif c == "x" or c == "s" or c == "S" or c == "t" or c == "T" then + style = THEME.status.permissions_x + end + spans[i] = ui.Span(c):style(style) + end + return ui.Line(spans) end function Status:percentage() - local percent = 0 - local cursor = cx.active.current.cursor - local length = #cx.active.current.files - if cursor ~= 0 and length ~= 0 then - percent = math.floor((cursor + 1) * 100 / length) - end + local percent = 0 + local cursor = cx.active.current.cursor + local length = #cx.active.current.files + if cursor ~= 0 and length ~= 0 then + percent = math.floor((cursor + 1) * 100 / length) + end - if percent == 0 then - percent = " Top " - else - percent = string.format(" %3d%% ", percent) - end + if percent == 0 then + percent = " Top " + else + percent = string.format(" %3d%% ", percent) + end - local style = self.style() - return ui.Line { - ui.Span(" " .. THEME.status.separator_open):fg(THEME.status - .separator_style.fg), - ui.Span(percent):fg(style.bg):bg(THEME.status.separator_style.bg) - } + local style = self.style() + return ui.Line({ + ui.Span(" " .. THEME.status.separator_open):fg(THEME.status.separator_style.fg), + ui.Span(percent):fg(style.bg):bg(THEME.status.separator_style.bg), + }) end function Status:position() - local cursor = cx.active.current.cursor - local length = #cx.active.current.files + local cursor = cx.active.current.cursor + local length = #cx.active.current.files - local style = self.style() - return ui.Line { - ui.Span(string.format(" %2d/%-2d ", cursor + 1, length)):style(style), - ui.Span(THEME.status.separator_close):fg(style.bg) - } + local style = self.style() + return ui.Line({ + ui.Span(string.format(" %2d/%-2d ", cursor + 1, length)):style(style), + ui.Span(THEME.status.separator_close):fg(style.bg), + }) end function Status:render(area) - self.area = area + self.area = area - local left = ui.Line {self:mode(), self:size(), self:name()} - local right = ui.Line { - self:owner(), self:permissions(), self:percentage(), self:position() - } - return { - ui.Paragraph(area, {left}), - ui.Paragraph(area, {right}):align(ui.Paragraph.RIGHT), - table.unpack(Progress:render(area, right:width())) - } + local left = ui.Line({ self:mode(), self:size(), self:name() }) + local right = ui.Line({ + self:owner(), + self:permissions(), + self:percentage(), + self:position(), + }) + return { + ui.Paragraph(area, { left }), + ui.Paragraph(area, { right }):align(ui.Paragraph.RIGHT), + table.unpack(Progress:render(area, right:width())), + } end function Status:owner() - local h = cx.active.current.hovered - if h == nil or ya.target_family() ~= "unix" then return ui.Line {} end + local h = cx.active.current.hovered + if h == nil or ya.target_family() ~= "unix" then + return ui.Line({}) + end - return ui.Line { - ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"), - ui.Span(":"), - ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"), - ui.Span(" ") - } + return ui.Line({ + ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"), + ui.Span(":"), + ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"), + ui.Span(" "), + }) end diff --git a/home/zellij/default.nix b/home/zellij/default.nix index 415d152..205e4b2 100644 --- a/home/zellij/default.nix +++ b/home/zellij/default.nix @@ -1,4 +1,4 @@ -{...}: { +_: { imports = [ ./layouts.nix ]; diff --git a/hosts/ame/default.nix b/hosts/ame/default.nix index af1b687..acd7918 100644 --- a/hosts/ame/default.nix +++ b/hosts/ame/default.nix @@ -7,34 +7,24 @@ ../../modules/fonts.nix ]; - boot.loader = { - systemd-boot = { - enable = true; - configurationLimit = 8; - }; - efi = { - canTouchEfiVariables = true; - efiSysMountPoint = "/boot/efi"; - }; - }; - programs.hyprland.enable = true; - services.xserver.enable = true; - services.xserver.displayManager.sddm.enable = true; - - services.xserver = { - layout = "us"; - xkbVariant = ""; + services = { + pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + xserver = { + enable = true; + displayManager.sddm.enable = true; + layout = "us"; + xkbVariant = ""; + }; }; sound.enable = true; hardware.pulseaudio.enable = false; security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - }; } diff --git a/hosts/ame/hardware.nix b/hosts/ame/hardware.nix index 7301562..fdde3e6 100644 --- a/hosts/ame/hardware.nix +++ b/hosts/ame/hardware.nix @@ -8,24 +8,38 @@ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usb_storage" "sd_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-intel"]; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/57411820-f154-497e-9c7e-dfcb1f21c5cf"; - fsType = "ext4"; + boot = { + kernelModules = ["kvm-intel"]; + extraModulePackages = []; + loader = { + systemd-boot = { + enable = true; + configurationLimit = 8; + }; + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot/efi"; + }; + }; + initrd = { + availableKernelModules = ["xhci_pci" "ahci" "usb_storage" "sd_mod"]; + kernelModules = []; + }; }; - fileSystems."/boot/efi" = { - device = "/dev/disk/by-uuid/4D09-1D57"; - fsType = "vfat"; - }; - - fileSystems."/nas/restic" = { - device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/ame"; - fsType = "nfs"; + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/57411820-f154-497e-9c7e-dfcb1f21c5cf"; + fsType = "ext4"; + }; + "/boot/efi" = { + device = "/dev/disk/by-uuid/4D09-1D57"; + fsType = "vfat"; + }; + "/nas/restic" = { + device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/ame"; + fsType = "nfs"; + }; }; swapDevices = [ diff --git a/hosts/ame/home.nix b/hosts/ame/home.nix index 46631da..ba309df 100755 --- a/hosts/ame/home.nix +++ b/hosts/ame/home.nix @@ -17,12 +17,11 @@ username = "notoh"; homeDirectory = "/home/notoh"; packages = with pkgs; [ + chromium discord spotify-player cinny-desktop pavucontrol - unzip - p7zip imv mpv rustypaste-cli @@ -33,12 +32,7 @@ glib grim slurp - swappy wl-clipboard - wlogout - wlr-randr - swayidle - swaylock-effects swww hyprpicker (libsForQt5.callPackage ../../pkgs/chatterino7 {}) diff --git a/hosts/ame/services/restic.nix b/hosts/ame/services/restic.nix index aea790f..af51f37 100644 --- a/hosts/ame/services/restic.nix +++ b/hosts/ame/services/restic.nix @@ -3,12 +3,8 @@ config, ... }: { - sops.secrets.restic-ame = { - sopsFile = ../../../secrets/restic/secrets.yaml; - }; - sops.secrets.ame-s3 = { - sopsFile = ../../../secrets/s3/secrets.yaml; - }; + sops.secrets.restic-ame = {sopsFile = ../../../secrets/restic/secrets.yaml;}; + sops.secrets.ame-s3 = {sopsFile = ../../../secrets/s3/secrets.yaml;}; environment.systemPackages = [pkgs.restic]; services.restic = { backups = { diff --git a/hosts/arashi/default.nix b/hosts/arashi/default.nix index 60e5ca0..de37b1a 100644 --- a/hosts/arashi/default.nix +++ b/hosts/arashi/default.nix @@ -6,19 +6,6 @@ ../../modules ]; - boot.loader = { - grub = { - enable = true; - configurationLimit = 5; - device = "/dev/sda"; - useOSProber = false; - }; - }; - - boot.kernel.sysctl = { - "kernel.shmmax" = 100663296; - }; - services.xserver = { layout = "us"; xkbVariant = ""; diff --git a/hosts/arashi/hardware.nix b/hosts/arashi/hardware.nix index c32d3ca..34febfc 100644 --- a/hosts/arashi/hardware.nix +++ b/hosts/arashi/hardware.nix @@ -7,19 +7,31 @@ (modulesPath + "/profiles/qemu-guest.nix") ]; - boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = []; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/3fd88f1f-cec3-4737-b9d0-6c8f026c3927"; - fsType = "ext4"; + boot = { + kernelModules = []; + kernel.sysctl = {"kernel.shmmax" = 100663296;}; + extraModulePackages = []; + loader.grub = { + enable = true; + configurationLimit = 5; + device = "/dev/sda"; + useOSProber = false; + }; + initrd = { + availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; + kernelModules = []; + }; }; - fileSystems."/nas/restic" = { - device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/arashi"; - fsType = "nfs"; + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/3fd88f1f-cec3-4737-b9d0-6c8f026c3927"; + fsType = "ext4"; + }; + "/nas/restic" = { + device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/arashi"; + fsType = "nfs"; + }; }; swapDevices = [ diff --git a/hosts/arashi/services/restic.nix b/hosts/arashi/services/restic.nix index 57410d4..5ed8f56 100644 --- a/hosts/arashi/services/restic.nix +++ b/hosts/arashi/services/restic.nix @@ -3,9 +3,7 @@ config, ... }: { - sops.secrets.restic-arashi = { - sopsFile = ../../../secrets/restic/secrets.yaml; - }; + sops.secrets.restic-arashi = {sopsFile = ../../../secrets/restic/secrets.yaml;}; environment.systemPackages = [pkgs.restic]; services.restic = { backups = { diff --git a/hosts/haru/default.nix b/hosts/haru/default.nix index ba6ba90..19d4041 100644 --- a/hosts/haru/default.nix +++ b/hosts/haru/default.nix @@ -6,15 +6,6 @@ ../../modules ]; - boot.loader = { - grub = { - enable = true; - configurationLimit = 5; - device = "/dev/sda"; - useOSProber = false; - }; - }; - services.xserver = { layout = "us"; xkbVariant = ""; diff --git a/hosts/haru/hardware.nix b/hosts/haru/hardware.nix index 9b8a468..26d580b 100644 --- a/hosts/haru/hardware.nix +++ b/hosts/haru/hardware.nix @@ -7,14 +7,26 @@ (modulesPath + "/profiles/qemu-guest.nix") ]; - boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = []; - boot.extraModulePackages = []; + boot = { + kernelModules = []; + extraModulePackages = []; + loader.grub = { + enable = true; + configurationLimit = 5; + device = "/dev/sda"; + useOSProber = false; + }; + initrd = { + availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; + kernelModules = []; + }; + }; - fileSystems."/" = { - device = "/dev/disk/by-uuid/06177115-2e39-493b-81fb-5a1980ae0534"; - fsType = "ext4"; + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/06177115-2e39-493b-81fb-5a1980ae0534"; + fsType = "ext4"; + }; }; swapDevices = [ diff --git a/hosts/kariru/default.nix b/hosts/kariru/default.nix index b4f397d..0249bce 100644 --- a/hosts/kariru/default.nix +++ b/hosts/kariru/default.nix @@ -6,15 +6,6 @@ ../../modules ]; - boot.loader = { - grub = { - enable = true; - configurationLimit = 5; - device = "/dev/sda"; - useOSProber = false; - }; - }; - services.xserver = { layout = "us"; xkbVariant = ""; diff --git a/hosts/kariru/hardware.nix b/hosts/kariru/hardware.nix index ccc714e..9e7e325 100644 --- a/hosts/kariru/hardware.nix +++ b/hosts/kariru/hardware.nix @@ -7,29 +7,38 @@ (modulesPath + "/profiles/qemu-guest.nix") ]; - boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = []; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/f5a0738c-d027-4ffb-82ec-9901ca6b310b"; - fsType = "ext4"; + boot = { + kernelModules = []; + extraModulePackages = []; + loader.grub = { + enable = true; + configurationLimit = 5; + device = "/dev/sda"; + useOSProber = false; + }; + initrd = { + availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; + kernelModules = []; + }; }; - fileSystems."/media" = { - device = "192.168.1.199:/mnt/Sutoreji/media"; - fsType = "nfs"; - }; - - fileSystems."/stash" = { - device = "192.168.1.199:/mnt/Sutoreji/stash"; - fsType = "nfs"; - }; - - fileSystems."/nas/restic" = { - device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/kariru"; - fsType = "nfs"; + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/f5a0738c-d027-4ffb-82ec-9901ca6b310b"; + fsType = "ext4"; + }; + "/media" = { + device = "192.168.1.199:/mnt/Sutoreji/media"; + fsType = "nfs"; + }; + "/stash" = { + device = "192.168.1.199:/mnt/Sutoreji/stash"; + fsType = "nfs"; + }; + "/nas/restic" = { + device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/kariru"; + fsType = "nfs"; + }; }; swapDevices = [ diff --git a/hosts/kariru/services/default.nix b/hosts/kariru/services/default.nix index 516c0ef..20560e2 100644 --- a/hosts/kariru/services/default.nix +++ b/hosts/kariru/services/default.nix @@ -1,42 +1,40 @@ {pkgs, ...}: { networking.firewall.allowedTCPPorts = [9292]; + imports = [ ./restic.nix ./torrent.nix ]; + environment.systemPackages = [pkgs.recyclarr]; - services.radarr = { - enable = true; - openFirewall = true; + services = { + radarr = { + enable = true; + openFirewall = true; + }; + sonarr = { + enable = true; + openFirewall = true; + }; + prowlarr = { + enable = true; + openFirewall = true; + }; + bazarr = { + enable = true; + openFirewall = true; + }; + readarr = { + enable = true; + openFirewall = true; + }; + lidarr = { + enable = true; + openFirewall = true; + }; + sabnzbd.enable = true; }; - services.sonarr = { - enable = true; - openFirewall = true; - }; - - services.prowlarr = { - enable = true; - openFirewall = true; - }; - - services.bazarr = { - enable = true; - openFirewall = true; - }; - - services.readarr = { - enable = true; - openFirewall = true; - }; - - services.lidarr = { - enable = true; - openFirewall = true; - }; - - services.sabnzbd.enable = true; - virtualisation.oci-containers.containers = { whisparr = { image = "ghcr.io/hotio/whisparr@sha256:88b91920b77339e2deda418960be28868df538413abea6cdddaf4013e43c4c0f"; # v3-3.0.0.425 diff --git a/hosts/kariru/services/restic.nix b/hosts/kariru/services/restic.nix index 31d924f..53d859d 100644 --- a/hosts/kariru/services/restic.nix +++ b/hosts/kariru/services/restic.nix @@ -3,9 +3,7 @@ config, ... }: { - sops.secrets.restic-kariru = { - sopsFile = ../../../secrets/restic/secrets.yaml; - }; + sops.secrets.restic-kariru = {sopsFile = ../../../secrets/restic/secrets.yaml;}; environment.systemPackages = [pkgs.restic]; services.restic = { backups = { diff --git a/hosts/kaze/default.nix b/hosts/kaze/default.nix index 2d53712..27287e2 100644 --- a/hosts/kaze/default.nix +++ b/hosts/kaze/default.nix @@ -6,15 +6,6 @@ ../../modules ]; - boot.loader = { - grub = { - enable = true; - configurationLimit = 5; - device = "/dev/vda"; - useOSProber = true; - }; - }; - services.xserver = { layout = "us"; xkbVariant = ""; diff --git a/hosts/kaze/hardware.nix b/hosts/kaze/hardware.nix index 3196876..88bb176 100644 --- a/hosts/kaze/hardware.nix +++ b/hosts/kaze/hardware.nix @@ -7,19 +7,30 @@ (modulesPath + "/profiles/qemu-guest.nix") ]; - boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" "virtio_blk"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-amd"]; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/9cb414ab-0bb4-4db7-b77e-7d2a8cafd657"; - fsType = "ext4"; + boot = { + kernelModules = ["kvm-amd"]; + extraModulePackages = []; + loader.grub = { + enable = true; + configurationLimit = 5; + device = "/dev/vda"; + useOSProber = true; + }; + initrd = { + availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" "virtio_blk"]; + kernelModules = []; + }; }; - fileSystems."/var/lib/slab" = { - device = "/dev/disk/by-uuid/733a3f7b-b232-4b34-8742-460a67d8f1d0"; - fsType = "ext4"; + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/9cb414ab-0bb4-4db7-b77e-7d2a8cafd657"; + fsType = "ext4"; + }; + "/var/lib/slab" = { + device = "/dev/disk/by-uuid/733a3f7b-b232-4b34-8742-460a67d8f1d0"; + fsType = "ext4"; + }; }; swapDevices = [ diff --git a/hosts/kaze/services/minio.nix b/hosts/kaze/services/minio.nix index 0ffdb40..f3c53b5 100644 --- a/hosts/kaze/services/minio.nix +++ b/hosts/kaze/services/minio.nix @@ -5,9 +5,7 @@ }: { environment.systemPackages = [pkgs.minio-client]; - systemd.services.minio.environment = { - MINIO_BROWSER_REDIRECT = "false"; - }; + systemd.services.minio.environment = {MINIO_BROWSER_REDIRECT = "false";}; sops.secrets.minio = { owner = "minio"; diff --git a/hosts/kaze/services/tailscale.nix b/hosts/kaze/services/tailscale.nix index cb7892c..b81ec21 100644 --- a/hosts/kaze/services/tailscale.nix +++ b/hosts/kaze/services/tailscale.nix @@ -4,9 +4,7 @@ pkgs, ... }: { - sops.secrets.tsauth-kaze = { - sopsFile = ../../../secrets/tailscale/secrets.yaml; - }; + sops.secrets.tsauth-kaze = {sopsFile = ../../../secrets/tailscale/secrets.yaml;}; environment.systemPackages = [pkgs.jq pkgs.tailscale]; services.tailscale = { useRoutingFeatures = lib.mkDefault "client"; diff --git a/hosts/sakura/default.nix b/hosts/sakura/default.nix index 20d7c6e..ec403c0 100644 --- a/hosts/sakura/default.nix +++ b/hosts/sakura/default.nix @@ -6,15 +6,6 @@ _: { ../../modules ]; - boot.loader = { - grub = { - enable = true; - configurationLimit = 5; - device = "/dev/sda"; - useOSProber = false; - }; - }; - services.snowflake-proxy.enable = true; services.xserver = { diff --git a/hosts/sakura/hardware.nix b/hosts/sakura/hardware.nix index 69b5b23..f0a6596 100644 --- a/hosts/sakura/hardware.nix +++ b/hosts/sakura/hardware.nix @@ -7,24 +7,34 @@ (modulesPath + "/profiles/qemu-guest.nix") ]; - boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = []; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/db3e4722-35a6-44fb-8e4d-a75166b845cb"; - fsType = "ext4"; + boot = { + kernelModules = []; + extraModulePackages = []; + loader.grub = { + enable = true; + configurationLimit = 5; + device = "/dev/sda"; + useOSProber = false; + }; + initrd = { + availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; + kernelModules = []; + }; }; - fileSystems."/home/notoh/justlog/logs" = { - device = "192.168.1.199:/mnt/Sutoreji/twitchlogs"; - fsType = "nfs"; - }; - - fileSystems."/nas/restic" = { - device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/sakura"; - fsType = "nfs"; + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/db3e4722-35a6-44fb-8e4d-a75166b845cb"; + fsType = "ext4"; + }; + "/home/notoh/justlog/logs" = { + device = "192.168.1.199:/mnt/Sutoreji/twitchlogs"; + fsType = "nfs"; + }; + "/nas/restic" = { + device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/sakura"; + fsType = "nfs"; + }; }; swapDevices = [ diff --git a/hosts/sakura/services/restic.nix b/hosts/sakura/services/restic.nix index ba88b77..58ac93c 100644 --- a/hosts/sakura/services/restic.nix +++ b/hosts/sakura/services/restic.nix @@ -3,9 +3,7 @@ config, ... }: { - sops.secrets.restic-sakura = { - sopsFile = ../../../secrets/restic/secrets.yaml; - }; + sops.secrets.restic-sakura = {sopsFile = ../../../secrets/restic/secrets.yaml;}; environment.systemPackages = [pkgs.restic]; services.restic = { backups = { diff --git a/hosts/sakura/services/rustypaste.nix b/hosts/sakura/services/rustypaste.nix index 5a9ead4..b7bf771 100644 --- a/hosts/sakura/services/rustypaste.nix +++ b/hosts/sakura/services/rustypaste.nix @@ -3,12 +3,9 @@ systemd.services.rustypaste = { enable = true; - wantedBy = [ - "multi-user.target" - ]; + wantedBy = ["multi-user.target"]; description = "A minimal file upload/pastebin service."; environment = { - # AUTH_TOKEN = config.sops.secrets.rusty-auth-token.path; CONFIG = "/var/lib/rustypaste/config.toml"; }; serviceConfig = { diff --git a/hosts/sakura/services/tailscale.nix b/hosts/sakura/services/tailscale.nix index 60ade22..6f4459d 100644 --- a/hosts/sakura/services/tailscale.nix +++ b/hosts/sakura/services/tailscale.nix @@ -4,9 +4,7 @@ pkgs, ... }: { - sops.secrets.tsauth-sakura = { - sopsFile = ../../../secrets/tailscale/secrets.yaml; - }; + sops.secrets.tsauth-sakura = {sopsFile = ../../../secrets/tailscale/secrets.yaml;}; environment.systemPackages = [pkgs.jq pkgs.tailscale]; services.tailscale = { useRoutingFeatures = lib.mkDefault "client"; diff --git a/hosts/sora/default.nix b/hosts/sora/default.nix index ce12b01..8d390b3 100644 --- a/hosts/sora/default.nix +++ b/hosts/sora/default.nix @@ -6,7 +6,8 @@ _: { ../../modules ]; - boot.tmp.cleanOnBoot = true; + services.snowflake-proxy.enable = true; + zramSwap.enable = true; users.users.notoh.openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGmI3hRDFjxLjrM3pE471e4jxSlcqeizh3iNVVdaMHeN sora" diff --git a/hosts/sora/hardware.nix b/hosts/sora/hardware.nix index df001ef..6b35803 100644 --- a/hosts/sora/hardware.nix +++ b/hosts/sora/hardware.nix @@ -1,20 +1,27 @@ {modulesPath, ...}: { imports = [(modulesPath + "/profiles/qemu-guest.nix")]; - boot.loader.grub = { - efiSupport = true; - efiInstallAsRemovable = true; - device = "nodev"; + + boot = { + tmp.cleanOnBoot = true; + loader.grub = { + efiSupport = true; + efiInstallAsRemovable = true; + device = "nodev"; + }; + initrd = { + availableKernelModules = ["ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi"]; + kernelModules = ["nvme"]; + }; }; - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/B793-1B2C"; - fsType = "vfat"; - }; - - boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi"]; - boot.initrd.kernelModules = ["nvme"]; - fileSystems."/" = { - device = "/dev/sda1"; - fsType = "ext4"; + fileSystems = { + "/" = { + device = "/dev/sda1"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/B793-1B2C"; + fsType = "vfat"; + }; }; } diff --git a/hosts/sora/services/foundryvtt.nix b/hosts/sora/services/foundryvtt.nix index 5380aab..8d4cd78 100644 --- a/hosts/sora/services/foundryvtt.nix +++ b/hosts/sora/services/foundryvtt.nix @@ -2,10 +2,8 @@ _: { sops.secrets.foundry-username = {}; sops.secrets.foundry-password = {}; virtualisation.oci-containers.containers.foundryvtt = { - image = "felddy/foundryvtt:sha-50af627"; - volumes = [ - "/home/notoh/docker/foundryvtt:/data" - ]; + image = "felddy/foundryvtt@sha256:d85dab9704d771f3a33f21439f1bf34748fb5bf1987668ff402b5b17d1973f5a"; + volumes = ["/home/notoh/docker/foundryvtt:/data"]; environment = { CONTAINER_PRESERVE_CONFIG = "true"; }; @@ -13,8 +11,6 @@ _: { /run/secrets/foundry-username /run/secrets/foundry-password ]; - ports = [ - "30000:30000" - ]; + ports = ["30000:30000"]; }; } diff --git a/hosts/sora/services/glances.nix b/hosts/sora/services/glances.nix index 62163d3..1554a0e 100644 --- a/hosts/sora/services/glances.nix +++ b/hosts/sora/services/glances.nix @@ -1,12 +1,8 @@ _: { virtualisation.oci-containers.containers.glances = { image = "nicolargo/glances"; - ports = [ - "61208-61209:61208-61209" - ]; - volumes = [ - "/var/run/docker.sock:/var/run/docker.sock" - ]; + ports = ["61208-61209:61208-61209"]; + volumes = ["/var/run/docker.sock:/var/run/docker.sock"]; environment = { GLANCES_OPT = "-w"; }; diff --git a/hosts/sora/services/minecraft.nix b/hosts/sora/services/minecraft.nix index 995ffb8..1c44497 100644 --- a/hosts/sora/services/minecraft.nix +++ b/hosts/sora/services/minecraft.nix @@ -12,8 +12,6 @@ _: { FABRIC_LOADER_VERSION = "0.14.23"; FABRIC_LAUNCHER_VERSION = "0.11.2"; }; - volumes = [ - "/home/notoh/docker/modded-mc:/data:rw" - ]; + volumes = ["/home/notoh/docker/modded-mc:/data:rw"]; }; } diff --git a/hosts/sora/services/restic.nix b/hosts/sora/services/restic.nix index adc9208..127398b 100644 --- a/hosts/sora/services/restic.nix +++ b/hosts/sora/services/restic.nix @@ -4,12 +4,8 @@ ... }: { sops.secrets = { - restic-sora = { - sopsFile = ../../../secrets/restic/secrets.yaml; - }; - sora-s3 = { - sopsFile = ../../../secrets/s3/secrets.yaml; - }; + restic-sora = {sopsFile = ../../../secrets/restic/secrets.yaml;}; + sora-s3 = {sopsFile = ../../../secrets/s3/secrets.yaml;}; }; environment.systemPackages = [pkgs.restic]; services.restic = { diff --git a/hosts/sora/services/tailscale.nix b/hosts/sora/services/tailscale.nix index f2add0b..ba6558e 100644 --- a/hosts/sora/services/tailscale.nix +++ b/hosts/sora/services/tailscale.nix @@ -4,9 +4,7 @@ pkgs, ... }: { - sops.secrets.tsauth-sora = { - sopsFile = ../../../secrets/tailscale/secrets.yaml; - }; + sops.secrets.tsauth-sora = {sopsFile = ../../../secrets/tailscale/secrets.yaml;}; environment.systemPackages = [pkgs.jq pkgs.tailscale]; services.tailscale = { useRoutingFeatures = lib.mkDefault "server"; # important to make it a server, it sets sysctl for ip forwarding without intervention and reboot diff --git a/hosts/sora/services/terraria.nix b/hosts/sora/services/terraria.nix index ba0e2db..953215b 100644 --- a/hosts/sora/services/terraria.nix +++ b/hosts/sora/services/terraria.nix @@ -1,4 +1,4 @@ -{...}: { +_: { networking.firewall.allowedTCPPorts = [7777]; virtualisation.oci-containers.containers.terraria = { image = "jacobsmile/tmodloader1.4:v2023.11.3.3"; diff --git a/hosts/tsuki/default.nix b/hosts/tsuki/default.nix index 35d96c9..9807be9 100755 --- a/hosts/tsuki/default.nix +++ b/hosts/tsuki/default.nix @@ -16,23 +16,22 @@ ../../pkgs/overlays.nix ]; - boot.loader = { - systemd-boot = { - enable = true; - configurationLimit = 10; - }; - efi = { - canTouchEfiVariables = true; - efiSysMountPoint = "/boot/efi"; - }; - }; - - boot.extraModulePackages = with config.boot.kernelPackages; [v4l2loopback.out]; - boot.kernelModules = ["v4l2loopback" "kvm-intel"]; - virtualisation.libvirtd.enable = true; services = { + pcscd.enable = true; + pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + wireplumber.enable = true; + lowLatency = { + enable = true; + quantum = 64; + rate = 48000; + }; + }; xserver = { enable = true; videoDrivers = ["nvidia"]; @@ -53,41 +52,28 @@ }; }; - services.pcscd.enable = true; - services.davfs2.enable = true; - - hardware.pulseaudio.enable = false; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - wireplumber.enable = true; - lowLatency = { - enable = true; - quantum = 64; - rate = 48000; + security = { + rtkit.enable = true; + polkit.enable = true; + pam.services.swaylock = { + text = '' + auth include login + ''; }; }; - programs.gamemode.enable = true; - - programs.steam = { - enable = true; - extraCompatPackages = [ - inputs.nix-gaming.packages.${pkgs.system}.proton-ge - ]; - }; - - security.polkit.enable = true; - security.pam.services.swaylock = { - text = '' - auth include login - ''; + programs = { + gamemode.enable = true; + steam = { + enable = true; + extraCompatPackages = [ + inputs.nix-gaming.packages.${pkgs.system}.proton-ge + ]; + }; }; hardware = { + pulseaudio.enable = false; nvidia = { powerManagement.enable = true; modesetting.enable = true; diff --git a/hosts/tsuki/hardware.nix b/hosts/tsuki/hardware.nix index 394a2a8..20dbb2a 100755 --- a/hosts/tsuki/hardware.nix +++ b/hosts/tsuki/hardware.nix @@ -8,34 +8,46 @@ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-intel"]; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/7d098aab-1968-4605-a9a7-b1627941c1ff"; - fsType = "ext4"; + boot = { + kernelModules = ["v4l2loopback" "kvm-intel"]; + extraModulePackages = with config.boot.kernelPackages; [v4l2loopback.out]; + loader = { + systemd-boot = { + enable = true; + configurationLimit = 10; + }; + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot/efi"; + }; + }; + initrd = { + availableKernelModules = ["xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod"]; + kernelModules = []; + }; }; - fileSystems."/boot/efi" = { - device = "/dev/disk/by-uuid/C356-B67C"; - fsType = "vfat"; - }; - - fileSystems."/hdd" = { - device = "/dev/disk/by-uuid/e2e4c4f3-51df-4020-b557-a7cf684de85b"; - fsType = "ext4"; - }; - - fileSystems."/ssd" = { - device = "/dev/disk/by-uuid/9e5a189d-7435-45d7-aef6-cdee4de2428d"; - fsType = "ext4"; - }; - - fileSystems."/nas/restic" = { - device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/tsuki"; - fsType = "nfs"; + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/7d098aab-1968-4605-a9a7-b1627941c1ff"; + fsType = "ext4"; + }; + "/boot/efi" = { + device = "/dev/disk/by-uuid/C356-B67C"; + fsType = "vfat"; + }; + "/hdd" = { + device = "/dev/disk/by-uuid/e2e4c4f3-51df-4020-b557-a7cf684de85b"; + fsType = "ext4"; + }; + "/ssd" = { + device = "/dev/disk/by-uuid/9e5a189d-7435-45d7-aef6-cdee4de2428d"; + fsType = "ext4"; + }; + "/nas/restic" = { + device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/tsuki"; + fsType = "nfs"; + }; }; swapDevices = [ diff --git a/hosts/tsuki/home.nix b/hosts/tsuki/home.nix index b44d7b9..a6d4cfc 100755 --- a/hosts/tsuki/home.nix +++ b/hosts/tsuki/home.nix @@ -43,7 +43,6 @@ imv mpv ffmpeg - nom rustypaste-cli gimp cryptomator @@ -56,7 +55,6 @@ prismlauncher yuzu inputs.nix-gaming.packages.${pkgs.system}.osu-lazer-bin - inputs.nix-gaming.packages.${pkgs.system}.wine-discord-ipc-bridge (libsForQt5.callPackage ../../pkgs/chatterino7 {}) (callPackage ../../pkgs/jellyfin-rpc {}) ]; diff --git a/hosts/tsuki/services/atticd.nix b/hosts/tsuki/services/atticd.nix index 8fcc64b..fd625b5 100644 --- a/hosts/tsuki/services/atticd.nix +++ b/hosts/tsuki/services/atticd.nix @@ -3,9 +3,7 @@ systemd.services.atticd = { enable = true; - wantedBy = [ - "multi-user.target" - ]; + wantedBy = ["multi-user.target"]; description = "atticd"; serviceConfig = { diff --git a/hosts/tsuki/services/default.nix b/hosts/tsuki/services/default.nix index 4cdded0..e7e280b 100644 --- a/hosts/tsuki/services/default.nix +++ b/hosts/tsuki/services/default.nix @@ -1,7 +1,7 @@ {...}: { imports = [ - ./atticd.nix ./restic.nix + ./atticd.nix ./hydroxide.nix ]; } diff --git a/hosts/tsuki/services/hydroxide.nix b/hosts/tsuki/services/hydroxide.nix index 15f6817..690332c 100644 --- a/hosts/tsuki/services/hydroxide.nix +++ b/hosts/tsuki/services/hydroxide.nix @@ -4,9 +4,7 @@ systemd.services.hydroxide = { enable = true; - wantedBy = [ - "multi-user.target" - ]; + wantedBy = ["multi-user.target"]; description = "A third-party, open-source ProtonMail bridge"; serviceConfig = { diff --git a/hosts/tsuru/default.nix b/hosts/tsuru/default.nix index 3690a55..c737bfa 100644 --- a/hosts/tsuru/default.nix +++ b/hosts/tsuru/default.nix @@ -6,15 +6,6 @@ ../../modules ]; - boot.loader = { - grub = { - enable = true; - configurationLimit = 5; - device = "/dev/sda"; - useOSProber = false; - }; - }; - services.xserver = { layout = "us"; xkbVariant = ""; diff --git a/hosts/tsuru/hardware.nix b/hosts/tsuru/hardware.nix index e6d6259..0a34d6d 100644 --- a/hosts/tsuru/hardware.nix +++ b/hosts/tsuru/hardware.nix @@ -7,14 +7,26 @@ (modulesPath + "/profiles/qemu-guest.nix") ]; - boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = []; - boot.extraModulePackages = []; + boot = { + kernelModules = []; + extraModulePackages = []; + loader.grub = { + enable = true; + configurationLimit = 5; + device = "/dev/sda"; + useOSProber = false; + }; + initrd = { + availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; + kernelModules = []; + }; + }; - fileSystems."/" = { - device = "/dev/disk/by-uuid/625f557a-99a0-4e2d-9aef-f3aed7cea1c8"; - fsType = "ext4"; + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/625f557a-99a0-4e2d-9aef-f3aed7cea1c8"; + fsType = "ext4"; + }; }; swapDevices = [ diff --git a/hosts/tsuru/services/tailscale.nix b/hosts/tsuru/services/tailscale.nix index 798440a..65c243b 100644 --- a/hosts/tsuru/services/tailscale.nix +++ b/hosts/tsuru/services/tailscale.nix @@ -4,9 +4,7 @@ pkgs, ... }: { - sops.secrets.tsauth-tsuru = { - sopsFile = ../../../secrets/tailscale/secrets.yaml; - }; + sops.secrets.tsauth-tsuru = {sopsFile = ../../../secrets/tailscale/secrets.yaml;}; environment.systemPackages = [pkgs.jq pkgs.tailscale]; services.tailscale = { useRoutingFeatures = lib.mkDefault "client"; diff --git a/hosts/tsuru/services/woodpecker.nix b/hosts/tsuru/services/woodpecker.nix index b3fae28..b2d3f7f 100644 --- a/hosts/tsuru/services/woodpecker.nix +++ b/hosts/tsuru/services/woodpecker.nix @@ -31,8 +31,6 @@ WOODPECKER_KEEPALIVE_MIN_TIME = "10s"; WOODPECKER_HEALTHCHECK = "true"; }; - extraGroups = [ - "docker" - ]; + extraGroups = ["docker"]; }; } diff --git a/hosts/yuki/hardware.nix b/hosts/yuki/hardware.nix index 57787d2..fd0c8a9 100644 --- a/hosts/yuki/hardware.nix +++ b/hosts/yuki/hardware.nix @@ -7,34 +7,42 @@ (modulesPath + "/profiles/qemu-guest.nix") ]; - boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = []; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/833959fb-de9d-4820-aa22-e6ce8bce6f6c"; - fsType = "ext4"; + boot = { + kernelModules = []; + extraModulePackages = []; + loader.grub = { + enable = true; + configurationLimit = 5; + device = "/dev/sda"; + useOSProber = false; + }; + initrd = { + availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"]; + kernelModules = []; + }; }; - fileSystems."/home/notoh/docker/stash/data" = { - device = "192.168.1.199:/mnt/Sutoreji/stash"; - fsType = "nfs"; - }; - - fileSystems."/media" = { - device = "192.168.1.199:/mnt/Sutoreji/media"; - fsType = "nfs"; - }; - - fileSystems."/nas/restic" = { - device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/yuki"; - fsType = "nfs"; - }; - - fileSystems."/var/lib/paperless-ngx/media" = { - device = "192.168.1.199:/mnt/Sutoreji/paperless-ngx/paperless-media "; - fsType = "nfs"; + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/833959fb-de9d-4820-aa22-e6ce8bce6f6c"; + fsType = "ext4"; + }; + "/home/notoh/docker/stash/data" = { + device = "192.168.1.199:/mnt/Sutoreji/stash"; + fsType = "nfs"; + }; + "/media" = { + device = "192.168.1.199:/mnt/Sutoreji/media"; + fsType = "nfs"; + }; + "/nas/restic" = { + device = "192.168.1.199:/mnt/Sutoreji/nix-restic-data/yuki"; + fsType = "nfs"; + }; + "/var/lib/paperless-ngx/media" = { + device = "192.168.1.199:/mnt/Sutoreji/paperless-ngx/paperless-media "; + fsType = "nfs"; + }; }; swapDevices = [ diff --git a/hosts/yuki/services/restic.nix b/hosts/yuki/services/restic.nix index 8e32696..8215afc 100644 --- a/hosts/yuki/services/restic.nix +++ b/hosts/yuki/services/restic.nix @@ -3,9 +3,7 @@ config, ... }: { - sops.secrets.restic-yuki = { - sopsFile = ../../../secrets/restic/secrets.yaml; - }; + sops.secrets.restic-yuki = {sopsFile = ../../../secrets/restic/secrets.yaml;}; environment.systemPackages = [pkgs.restic]; services.restic = { backups = { diff --git a/hosts/yuki/services/stash.nix b/hosts/yuki/services/stash.nix index fe7f347..27e113b 100644 --- a/hosts/yuki/services/stash.nix +++ b/hosts/yuki/services/stash.nix @@ -1,6 +1,7 @@ _: { virtualisation.oci-containers.containers.stash = { - image = "stashapp/stash@sha256:b3b59809d5be1d82467253ec9e2ee98628a0db7527d27a6c7daa75e1fcda7deb"; + image = "stashapp/stash@sha256:b3b59809d5be1d82467253ec9e2ee98628a0db7527d27a6c7daa75e1fcda7deb"; # v0.24.3 + ports = ["9999:9999"]; environment = { STASH_STASH = "/data/"; STASH_GENERATED = "/generated/"; @@ -17,8 +18,5 @@ _: { "/home/notoh/docker/stash/generated:/generated" "/home/notoh/docker/stash/blobs:/blobs" ]; - ports = [ - "9999:9999" - ]; }; } diff --git a/hosts/yuki/services/wallos.nix b/hosts/yuki/services/wallos.nix index 3cba45f..5eb6225 100644 --- a/hosts/yuki/services/wallos.nix +++ b/hosts/yuki/services/wallos.nix @@ -1,15 +1,11 @@ _: { virtualisation.oci-containers.containers.wallos = { image = "bellamy/wallos@sha256:d3846ab980095be55a3c07633cca905bf29505bc63e5d92ad49938f56fd7b9f7"; - ports = [ - "8282:80" - ]; + ports = ["8282:80"]; volumes = [ "/home/notoh/docker/wallos/db:/var/www/html/db" "/home/notoh/docker/wallos/logos:/var/www/html/images/uploads/logos" ]; - environment = { - TZ = "America/New_York"; - }; + environment = {TZ = "America/New_York";}; }; } diff --git a/statix.toml b/statix.toml new file mode 100644 index 0000000..fbe25a9 --- /dev/null +++ b/statix.toml @@ -0,0 +1,3 @@ +disabled = [] +nix_version = '2.4' +ignore = ['.direnv']