From ff00a181c9a2a6d204f2750a8776ed66d8481fda Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 3 May 2023 22:42:47 +0200 Subject: [PATCH 01/13] aaaa --- flake.nix | 4 ++-- nixos/common/users/default.nix | 1 + nixos/hosts/hades/lucy/configuration.nix | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index b317cb4..10d51f5 100644 --- a/flake.nix +++ b/flake.nix @@ -112,13 +112,13 @@ iso = nixos-generators.nixosGenerate { inherit system pkgs; - format = "iso"; + format = "install-iso"; modules = [ (import ./nixos/templates/iso.nix) ]; }; iso-graphical = nixos-generators.nixosGenerate { inherit system pkgs; - format = "iso"; + format = "install-iso"; modules = [ (import ./nixos/templates/iso-graphical.nix) ]; }; diff --git a/nixos/common/users/default.nix b/nixos/common/users/default.nix index f808280..028669c 100644 --- a/nixos/common/users/default.nix +++ b/nixos/common/users/default.nix @@ -53,5 +53,6 @@ ripgrep rsync zoxide + tmux ]; } diff --git a/nixos/hosts/hades/lucy/configuration.nix b/nixos/hosts/hades/lucy/configuration.nix index 5a52481..f1f9e22 100644 --- a/nixos/hosts/hades/lucy/configuration.nix +++ b/nixos/hosts/hades/lucy/configuration.nix @@ -23,4 +23,7 @@ boot.loader.grub.enable = true; boot.loader.grub.version = 2; boot.loader.grub.device = "/dev/sda"; + + # Make laura admin + users.extraUsers.laura.extraGroups = [ "wheel" ]; } From 0c53bfe4d95b45a32304d18bdb4f2d72f52b0b5d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 3 May 2023 22:04:00 +0000 Subject: [PATCH 02/13] chore(deps): lock file maintenance --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 7263453..206b6ed 100644 --- a/flake.lock +++ b/flake.lock @@ -815,11 +815,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1683109436, - "narHash": "sha256-m66inegZHyF28OHFosKL/7F9YPflspVa9oZpKueMqj8=", + "lastModified": 1683151118, + "narHash": "sha256-BY35o9AEqG1ckxJ0RECdIMYR93t0Ox3oTxPpu3WZbw8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ba63ea9268f8e1f14a57fbc5516dbd257f5349fa", + "rev": "7d9242bd035c3f9f1c357101d49ffac11116fb06", "type": "github" }, "original": { @@ -946,11 +946,11 @@ }, "nur": { "locked": { - "lastModified": 1683106140, - "narHash": "sha256-kteCzvc9+6t46PTbTruP5r+FXqnJl/xoCfteV4CQmGE=", + "lastModified": 1683148483, + "narHash": "sha256-gdjZHh/SeUVA6YUI1ERRpvKnLmeIk4PbQ4hBf0bcKZs=", "owner": "nix-community", "repo": "NUR", - "rev": "9b5b623552610c800cfeb24a5b818de77f12e575", + "rev": "c49d673b261c63732c651aacb99a309ffe95674b", "type": "github" }, "original": { From dd3076d5c5db631af0cfd28be77e3ccf15aea3c4 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 4 May 2023 08:32:01 +0200 Subject: [PATCH 03/13] things --- nixos/hosts/hades/lucy/configuration.nix | 1 + nixos/hosts/thalassa/aoife/hardware.nix | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/hosts/hades/lucy/configuration.nix b/nixos/hosts/hades/lucy/configuration.nix index ae3cc65..ad4cfdc 100644 --- a/nixos/hosts/hades/lucy/configuration.nix +++ b/nixos/hosts/hades/lucy/configuration.nix @@ -18,6 +18,7 @@ # Additional packages environment.systemPackages = with pkgs; [ gcc + go jq nuclei rustup diff --git a/nixos/hosts/thalassa/aoife/hardware.nix b/nixos/hosts/thalassa/aoife/hardware.nix index d9b8e1e..f00abf8 100644 --- a/nixos/hosts/thalassa/aoife/hardware.nix +++ b/nixos/hosts/thalassa/aoife/hardware.nix @@ -5,7 +5,7 @@ services.hardware.bolt.enable = true; - hardware.trackpoint.enable = true; + # hardware.trackpoint.enable = true; # FS fileSystems."/".options = [ "compress=zstd" ]; From 349623dda8cec5392d3eaa659f0f9260811cf4ae Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 4 May 2023 09:26:36 +0200 Subject: [PATCH 04/13] specify latest version of nuclei --- nixos/common/users/laura.nix | 1 + nixos/hosts/hades/lucy/configuration.nix | 30 +++++++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/nixos/common/users/laura.nix b/nixos/common/users/laura.nix index 9275937..6c19947 100644 --- a/nixos/common/users/laura.nix +++ b/nixos/common/users/laura.nix @@ -11,3 +11,4 @@ extraGroups = [ ]; }; } + diff --git a/nixos/hosts/hades/lucy/configuration.nix b/nixos/hosts/hades/lucy/configuration.nix index ad4cfdc..f80b3db 100644 --- a/nixos/hosts/hades/lucy/configuration.nix +++ b/nixos/hosts/hades/lucy/configuration.nix @@ -3,8 +3,28 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { pkgs, ... }: +let + # Redefining the package instead of overriding as overriding GoModules seems broken + # see: https://github.com/NixOS/nixpkgs/issues/86349 + nuclei-latest = pkgs.buildGoModule rec { + pname = "nuclei"; + version = "2.9.2"; -{ + src = pkgs.fetchFromGitHub { + owner = "projectdiscovery"; + repo = pname; + rev = "1f9a065713924b28b203e2108fc76d7a1ec49068"; + hash = "sha256-QiegMoBy0gZMyQl2MRAwR14zXeh8wvVonyETdAzHbj0="; + }; + + vendorHash = "sha256-0JNwoBqLKH1F/0Tr8o35gCSNT/2plIjIQvZRuzAZ5P8="; + + modRoot = "./v2"; + subPackages = [ "cmd/nuclei/" ]; + + doCheck = false; + }; +in { imports = [ ./hardware-configuration.nix ]; # This value determines the NixOS release from which the default @@ -16,13 +36,7 @@ system.stateVersion = "23.05"; # Did you read the comment? # Additional packages - environment.systemPackages = with pkgs; [ - gcc - go - jq - nuclei - rustup - ]; + environment.systemPackages = with pkgs; [ gcc go jq rustup nuclei-latest ]; networking.firewall.allowedTCPPorts = [ ]; From 3dfe40e4e218e00462a4d323099414c3ec27800d Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 4 May 2023 13:06:08 +0200 Subject: [PATCH 05/13] apply deadnix --- .woodpecker.yml | 1 + flake.lock | 24 +++++++++---------- nixos/common/generic-vm.nix | 2 +- nixos/common/modules/unpackerr.nix | 2 +- nixos/common/users/default.nix | 2 +- nixos/hosts/hades/_template/configuration.nix | 2 +- nixos/hosts/hades/bastion/configuration.nix | 2 +- nixos/hosts/hades/bazarr/configuration.nix | 2 +- .../docker-registry-proxy/configuration.nix | 2 +- .../hades/docker-registry/configuration.nix | 2 +- nixos/hosts/hades/jackett/configuration.nix | 2 +- .../hades/lucy/hardware-configuration.nix | 2 +- nixos/hosts/hades/minio/configuration.nix | 2 +- nixos/hosts/hades/overseerr/configuration.nix | 2 +- nixos/hosts/hades/pmm/configuration.nix | 2 +- nixos/hosts/hades/prowlarr/configuration.nix | 4 ++-- nixos/hosts/hades/radarr/configuration.nix | 3 +-- nixos/hosts/hades/sonarr/configuration.nix | 2 +- nixos/hosts/hades/tautulli/configuration.nix | 2 +- .../hosts/olympus/_template/configuration.nix | 2 +- nixos/hosts/olympus/bastion/configuration.nix | 2 +- .../bastion/hardware-configuration.nix | 2 +- nixos/hosts/olympus/bastion/home.nix | 2 +- nixos/hosts/olympus/dhcp/configuration.nix | 2 +- .../olympus/kubernetes/configuration.nix | 2 +- .../hosts/olympus/minecraft/configuration.nix | 2 +- nixos/hosts/olympus/minio/configuration.nix | 2 +- nixos/hosts/olympus/nginx/configuration.nix | 2 +- nixos/hosts/olympus/ntfy/configuration.nix | 2 +- nixos/hosts/olympus/outline/configuration.nix | 2 +- nixos/hosts/olympus/unifi/configuration.nix | 2 +- nixos/hosts/olympus/vault-0/configuration.nix | 2 +- .../hosts/olympus/wireguard/configuration.nix | 2 +- nixos/hosts/thalassa/aoife/configuration.nix | 2 +- .../thalassa/aoife/hardware-configuration.nix | 2 +- nixos/hosts/thalassa/eevee/configuration.nix | 2 +- .../thalassa/eevee/hardware-configuration.nix | 2 +- nixos/hosts/thalassa/eevee/home/default.nix | 8 +------ nixos/hosts/thalassa/eevee/home/theme.nix | 2 +- nixos/hosts/thalassa/null/configuration.nix | 2 +- .../thalassa/null/hardware-configuration.nix | 2 +- nixos/hosts/thalassa/null/home/default.nix | 2 +- nixos/hosts/thalassa/null/home/hyprland.nix | 2 +- nixos/hosts/thalassa/null/home/neovim.nix | 2 +- nixos/hosts/thalassa/null/home/theme.nix | 2 +- nixos/pkgs/default.nix | 2 +- nixos/pkgs/dnd-5e-latex-template/default.nix | 2 +- nixos/pkgs/gitea-agatheme/default.nix | 2 +- nixos/pkgs/glitch-soc/default.nix | 2 +- nixos/pkgs/glitch-soc/update.nix | 3 +-- nixos/pkgs/vscode-extensions/platformio.nix | 2 +- nixos/templates/iso-graphical.nix | 2 +- nixos/templates/proxmox-lxc.nix | 2 +- nixos/templates/proxmox-vm.nix | 2 +- nixos/util.nix | 3 +-- 55 files changed, 67 insertions(+), 75 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index cdd77d8..0a8e125 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -5,4 +5,5 @@ pipeline: - NIX_CONFIG=experimental-features = nix-command flakes commands: - nix run 'nixpkgs#statix' check + - nix run 'github:astro/deadnix' -- -f - nix run 'nixpkgs#yamllint' . diff --git a/flake.lock b/flake.lock index 206b6ed..113ab59 100644 --- a/flake.lock +++ b/flake.lock @@ -502,11 +502,11 @@ ] }, "locked": { - "lastModified": 1682977601, - "narHash": "sha256-F1Va/Uiw2tVNn27FLqWyBkiqDyIm/eCamw9wA/GK8Fw=", + "lastModified": 1683153724, + "narHash": "sha256-wiQ8pBYbbPklLngAz5w3VvwmpLqTNroKc7um56iCLHo=", "owner": "nix-community", "repo": "home-manager", - "rev": "0e4c33d76006c9080d2f228ba1c2308e3e4d7be6", + "rev": "514c0a71f47cb80282742d7e4b6913c2c0582c2d", "type": "github" }, "original": { @@ -799,11 +799,11 @@ }, "nixpkgs_22-11": { "locked": { - "lastModified": 1683028696, - "narHash": "sha256-saPKTDj+HB9aPvB59wGcJ64CifRuiIt2CHvSbh7UHz8=", + "lastModified": 1683103914, + "narHash": "sha256-Mbrst3sLaiL55eOlZOEL8kB+XTWffaQVfcI03YWiryg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5dab6490fe6d72b3f120ae8660181e20f396fbdf", + "rev": "54495a4eafe99c537695a87fe04cb50bf17e651d", "type": "github" }, "original": { @@ -815,11 +815,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1683151118, - "narHash": "sha256-BY35o9AEqG1ckxJ0RECdIMYR93t0Ox3oTxPpu3WZbw8=", + "lastModified": 1683186265, + "narHash": "sha256-XuGXnnF/mpM0CR4M4dbuMYsARgHLqtpolh5nPA9+040=", "owner": "nixos", "repo": "nixpkgs", - "rev": "7d9242bd035c3f9f1c357101d49ffac11116fb06", + "rev": "3428bdf3c93a7608615dddd44dec50c3df89b4be", "type": "github" }, "original": { @@ -946,11 +946,11 @@ }, "nur": { "locked": { - "lastModified": 1683148483, - "narHash": "sha256-gdjZHh/SeUVA6YUI1ERRpvKnLmeIk4PbQ4hBf0bcKZs=", + "lastModified": 1683183829, + "narHash": "sha256-Ta7qCL+mWSBt3851GYtbJpuAcCfNvNxD+MqfK+Yj4RU=", "owner": "nix-community", "repo": "NUR", - "rev": "c49d673b261c63732c651aacb99a309ffe95674b", + "rev": "82a30341dc98d46808ea11ba932e95856e53452c", "type": "github" }, "original": { diff --git a/nixos/common/generic-vm.nix b/nixos/common/generic-vm.nix index 856a8b3..086bf63 100644 --- a/nixos/common/generic-vm.nix +++ b/nixos/common/generic-vm.nix @@ -1,4 +1,4 @@ -{ lib, ... }: { +_: { networking.useDHCP = true; # Enable qemu guest agent diff --git a/nixos/common/modules/unpackerr.nix b/nixos/common/modules/unpackerr.nix index 36f522b..4a8043b 100644 --- a/nixos/common/modules/unpackerr.nix +++ b/nixos/common/modules/unpackerr.nix @@ -258,7 +258,7 @@ in after = [ "network.target" ]; description = "unpackerr system service"; # Filter out all unset variables else unpackerr complains - environment = filterAttrs (n: v: stringLength v > 0) + environment = filterAttrs (_n: v: stringLength v > 0) { # General options UN_DEBUG = "${toString cfg.debug}"; diff --git a/nixos/common/users/default.nix b/nixos/common/users/default.nix index 0155aa0..f5152cb 100644 --- a/nixos/common/users/default.nix +++ b/nixos/common/users/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, inputs, ... }: +{ config, pkgs, lib, ... }: { imports = [ ./laura.nix diff --git a/nixos/hosts/hades/_template/configuration.nix b/nixos/hosts/hades/_template/configuration.nix index 7b6c670..0947f38 100644 --- a/nixos/hosts/hades/_template/configuration.nix +++ b/nixos/hosts/hades/_template/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ pkgs, ... }: { imports = [ ]; diff --git a/nixos/hosts/hades/bastion/configuration.nix b/nixos/hosts/hades/bastion/configuration.nix index a2a6cd0..0d80fa2 100644 --- a/nixos/hosts/hades/bastion/configuration.nix +++ b/nixos/hosts/hades/bastion/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ pkgs, lib, ... }: { networking.interfaces.eth0.useDHCP = true; diff --git a/nixos/hosts/hades/bazarr/configuration.nix b/nixos/hosts/hades/bazarr/configuration.nix index 628d5f0..9a679dd 100644 --- a/nixos/hosts/hades/bazarr/configuration.nix +++ b/nixos/hosts/hades/bazarr/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +_: { system.stateVersion = "22.11"; networking.interfaces.eth0.useDHCP = true; diff --git a/nixos/hosts/hades/docker-registry-proxy/configuration.nix b/nixos/hosts/hades/docker-registry-proxy/configuration.nix index 75c381d..7574924 100644 --- a/nixos/hosts/hades/docker-registry-proxy/configuration.nix +++ b/nixos/hosts/hades/docker-registry-proxy/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, ... }: let vs = config.vault-secrets.secrets; in { system.stateVersion = "22.05"; diff --git a/nixos/hosts/hades/docker-registry/configuration.nix b/nixos/hosts/hades/docker-registry/configuration.nix index d7f9117..1f7cd15 100644 --- a/nixos/hosts/hades/docker-registry/configuration.nix +++ b/nixos/hosts/hades/docker-registry/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, ... }: let vs = config.vault-secrets.secrets; in { system.stateVersion = "22.05"; diff --git a/nixos/hosts/hades/jackett/configuration.nix b/nixos/hosts/hades/jackett/configuration.nix index e749d64..2ccfd13 100644 --- a/nixos/hosts/hades/jackett/configuration.nix +++ b/nixos/hosts/hades/jackett/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +_: { system.stateVersion = "21.05"; networking.interfaces.eth0.useDHCP = true; diff --git a/nixos/hosts/hades/lucy/hardware-configuration.nix b/nixos/hosts/hades/lucy/hardware-configuration.nix index 650e74b..b658cbc 100644 --- a/nixos/hosts/hades/lucy/hardware-configuration.nix +++ b/nixos/hosts/hades/lucy/hardware-configuration.nix @@ -1,7 +1,7 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ lib, modulesPath, ... }: { imports = diff --git a/nixos/hosts/hades/minio/configuration.nix b/nixos/hosts/hades/minio/configuration.nix index 5d2f755..8e2e335 100644 --- a/nixos/hosts/hades/minio/configuration.nix +++ b/nixos/hosts/hades/minio/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, pkgs, ... }: let vs = config.vault-secrets.secrets; in { diff --git a/nixos/hosts/hades/overseerr/configuration.nix b/nixos/hosts/hades/overseerr/configuration.nix index 6810d75..669ce1c 100644 --- a/nixos/hosts/hades/overseerr/configuration.nix +++ b/nixos/hosts/hades/overseerr/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ ... }: { imports = [ ]; diff --git a/nixos/hosts/hades/pmm/configuration.nix b/nixos/hosts/hades/pmm/configuration.nix index 44b112c..844c60d 100644 --- a/nixos/hosts/hades/pmm/configuration.nix +++ b/nixos/hosts/hades/pmm/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ pkgs, ... }: let datadir = "/var/lib/pmm/config"; container = "meisnate12/plex-meta-manager:latest"; diff --git a/nixos/hosts/hades/prowlarr/configuration.nix b/nixos/hosts/hades/prowlarr/configuration.nix index 9c0d325..f22d49e 100644 --- a/nixos/hosts/hades/prowlarr/configuration.nix +++ b/nixos/hosts/hades/prowlarr/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +_: { networking.interfaces.eth0.useDHCP = true; system.stateVersion = "22.11"; @@ -7,7 +7,7 @@ enable = true; openFirewall = true; }; - + virtualisation.podman.enable = true; virtualisation.oci-containers = { diff --git a/nixos/hosts/hades/radarr/configuration.nix b/nixos/hosts/hades/radarr/configuration.nix index 1ba806c..5a3b874 100644 --- a/nixos/hosts/hades/radarr/configuration.nix +++ b/nixos/hosts/hades/radarr/configuration.nix @@ -1,5 +1,4 @@ -{ config, pkgs, ... }: -{ +_: { system.stateVersion = "21.05"; networking.interfaces.eth0.useDHCP = true; diff --git a/nixos/hosts/hades/sonarr/configuration.nix b/nixos/hosts/hades/sonarr/configuration.nix index d9d9ce4..c74c920 100644 --- a/nixos/hosts/hades/sonarr/configuration.nix +++ b/nixos/hosts/hades/sonarr/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +_: { system.stateVersion = "21.05"; networking.interfaces.eth0.useDHCP = true; diff --git a/nixos/hosts/hades/tautulli/configuration.nix b/nixos/hosts/hades/tautulli/configuration.nix index 84ef833..9976ee2 100644 --- a/nixos/hosts/hades/tautulli/configuration.nix +++ b/nixos/hosts/hades/tautulli/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ ... }: { imports = [ ]; diff --git a/nixos/hosts/olympus/_template/configuration.nix b/nixos/hosts/olympus/_template/configuration.nix index 7b6c670..0947f38 100644 --- a/nixos/hosts/olympus/_template/configuration.nix +++ b/nixos/hosts/olympus/_template/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ pkgs, ... }: { imports = [ ]; diff --git a/nixos/hosts/olympus/bastion/configuration.nix b/nixos/hosts/olympus/bastion/configuration.nix index 0c340d7..d157575 100644 --- a/nixos/hosts/olympus/bastion/configuration.nix +++ b/nixos/hosts/olympus/bastion/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ pkgs, lib, ... }: +{ pkgs, ... }: let fix-vscode = pkgs.writeScriptBin "fix-vscode" '' #!${pkgs.stdenv.shell} diff --git a/nixos/hosts/olympus/bastion/hardware-configuration.nix b/nixos/hosts/olympus/bastion/hardware-configuration.nix index 9c6082b..85ea04d 100644 --- a/nixos/hosts/olympus/bastion/hardware-configuration.nix +++ b/nixos/hosts/olympus/bastion/hardware-configuration.nix @@ -1,7 +1,7 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ modulesPath, ... }: { imports = [ (modulesPath + "/profiles/qemu-guest.nix") ]; diff --git a/nixos/hosts/olympus/bastion/home.nix b/nixos/hosts/olympus/bastion/home.nix index dcfdd22..fad23ec 100644 --- a/nixos/hosts/olympus/bastion/home.nix +++ b/nixos/hosts/olympus/bastion/home.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: { +_: { programs.home-manager.enable = true; home.username = "victor"; home.homeDirectory = "/home/victor"; diff --git a/nixos/hosts/olympus/dhcp/configuration.nix b/nixos/hosts/olympus/dhcp/configuration.nix index dcafb0a..13b002b 100644 --- a/nixos/hosts/olympus/dhcp/configuration.nix +++ b/nixos/hosts/olympus/dhcp/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, flat_hosts, ... }: +{ config, flat_hosts, ... }: let inherit (builtins) filter hasAttr; hostToKea = { hostname, mac, ip, ... }: { diff --git a/nixos/hosts/olympus/kubernetes/configuration.nix b/nixos/hosts/olympus/kubernetes/configuration.nix index a241cb2..fe5dd43 100644 --- a/nixos/hosts/olympus/kubernetes/configuration.nix +++ b/nixos/hosts/olympus/kubernetes/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, hosts, ... }: { +{ pkgs, ... }: { # packages for administration tasks environment.systemPackages = with pkgs; [ kompose kubectl k9s k3s ]; diff --git a/nixos/hosts/olympus/minecraft/configuration.nix b/nixos/hosts/olympus/minecraft/configuration.nix index 35a5844..83bcd57 100644 --- a/nixos/hosts/olympus/minecraft/configuration.nix +++ b/nixos/hosts/olympus/minecraft/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ lib, config, pkgs, inputs, ... }: +{ lib, pkgs, ... }: { imports = [ ]; diff --git a/nixos/hosts/olympus/minio/configuration.nix b/nixos/hosts/olympus/minio/configuration.nix index 95187b2..eae48e5 100644 --- a/nixos/hosts/olympus/minio/configuration.nix +++ b/nixos/hosts/olympus/minio/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, lib, ... }: +{ config, pkgs, ... }: let vs = config.vault-secrets.secrets; listenPort = 9000; diff --git a/nixos/hosts/olympus/nginx/configuration.nix b/nixos/hosts/olympus/nginx/configuration.nix index 1a05a8c..5d21f76 100644 --- a/nixos/hosts/olympus/nginx/configuration.nix +++ b/nixos/hosts/olympus/nginx/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, nodes, ... }: +{ pkgs, ... }: let proxy = url: { enableACME = true; diff --git a/nixos/hosts/olympus/ntfy/configuration.nix b/nixos/hosts/olympus/ntfy/configuration.nix index 7dcb516..9782704 100644 --- a/nixos/hosts/olympus/ntfy/configuration.nix +++ b/nixos/hosts/olympus/ntfy/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ pkgs, ... }: { imports = [ ]; diff --git a/nixos/hosts/olympus/outline/configuration.nix b/nixos/hosts/olympus/outline/configuration.nix index 452fabd..d9f9382 100644 --- a/nixos/hosts/olympus/outline/configuration.nix +++ b/nixos/hosts/olympus/outline/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ config, ... }: let vs = config.vault-secrets.secrets; in { imports = [ ]; diff --git a/nixos/hosts/olympus/unifi/configuration.nix b/nixos/hosts/olympus/unifi/configuration.nix index 5a0adb1..e2c08ed 100644 --- a/nixos/hosts/olympus/unifi/configuration.nix +++ b/nixos/hosts/olympus/unifi/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, lib, ... }: +{ pkgs, lib, ... }: { imports = [ ]; diff --git a/nixos/hosts/olympus/vault-0/configuration.nix b/nixos/hosts/olympus/vault-0/configuration.nix index 774544e..359751a 100644 --- a/nixos/hosts/olympus/vault-0/configuration.nix +++ b/nixos/hosts/olympus/vault-0/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, hosts, ... }: { +_: { # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions # on your system were taken. It‘s perfectly fine and recommended to leave diff --git a/nixos/hosts/olympus/wireguard/configuration.nix b/nixos/hosts/olympus/wireguard/configuration.nix index efeb580..9b5ed7e 100644 --- a/nixos/hosts/olympus/wireguard/configuration.nix +++ b/nixos/hosts/olympus/wireguard/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ lib, config, pkgs, inputs, ... }: +{ lib, config, pkgs, ... }: let vs = config.vault-secrets.secrets; in { imports = [ ]; diff --git a/nixos/hosts/thalassa/aoife/configuration.nix b/nixos/hosts/thalassa/aoife/configuration.nix index 29ed1f3..7699dcc 100644 --- a/nixos/hosts/thalassa/aoife/configuration.nix +++ b/nixos/hosts/thalassa/aoife/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ pkgs, inputs, ... }: { +{ inputs, ... }: { imports = [ ../../../common/desktop ./hardware-configuration.nix diff --git a/nixos/hosts/thalassa/aoife/hardware-configuration.nix b/nixos/hosts/thalassa/aoife/hardware-configuration.nix index 99593b9..13bc8c9 100644 --- a/nixos/hosts/thalassa/aoife/hardware-configuration.nix +++ b/nixos/hosts/thalassa/aoife/hardware-configuration.nix @@ -1,7 +1,7 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ config, lib, modulesPath, ... }: { imports = diff --git a/nixos/hosts/thalassa/eevee/configuration.nix b/nixos/hosts/thalassa/eevee/configuration.nix index 9adf13c..1c713a8 100644 --- a/nixos/hosts/thalassa/eevee/configuration.nix +++ b/nixos/hosts/thalassa/eevee/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, inputs, ... }: { +{ pkgs, inputs, ... }: { imports = [ ../../../common/desktop ./hardware-configuration.nix diff --git a/nixos/hosts/thalassa/eevee/hardware-configuration.nix b/nixos/hosts/thalassa/eevee/hardware-configuration.nix index 1e1afb2..536e2b0 100644 --- a/nixos/hosts/thalassa/eevee/hardware-configuration.nix +++ b/nixos/hosts/thalassa/eevee/hardware-configuration.nix @@ -1,7 +1,7 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ config, lib, modulesPath, ... }: { imports = diff --git a/nixos/hosts/thalassa/eevee/home/default.nix b/nixos/hosts/thalassa/eevee/home/default.nix index cbc0a03..ce2eaae 100644 --- a/nixos/hosts/thalassa/eevee/home/default.nix +++ b/nixos/hosts/thalassa/eevee/home/default.nix @@ -1,10 +1,4 @@ -{ lib, config, pkgs, inputs, ... }: -let - tex = pkgs.texlive.combine { - inherit (pkgs.texlive) scheme-full; - dnd-5e-latex-template = { pkgs = [ pkgs.v.dnd-5e-latex-template ]; }; - }; -in { +_: { programs.home-manager.enable = true; home.username = "victor"; diff --git a/nixos/hosts/thalassa/eevee/home/theme.nix b/nixos/hosts/thalassa/eevee/home/theme.nix index 8aca1e7..aa462fc 100644 --- a/nixos/hosts/thalassa/eevee/home/theme.nix +++ b/nixos/hosts/thalassa/eevee/home/theme.nix @@ -1,4 +1,4 @@ -{ lib, pkgs, config, ... }: +{ pkgs, config, ... }: let theme = "Catppuccin-Pink-Dark"; cursorTheme = config.home.pointerCursor.name; diff --git a/nixos/hosts/thalassa/null/configuration.nix b/nixos/hosts/thalassa/null/configuration.nix index 826b71d..4b40a89 100644 --- a/nixos/hosts/thalassa/null/configuration.nix +++ b/nixos/hosts/thalassa/null/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, lib, inputs, ... }: +{ pkgs, inputs, ... }: let nvidia-offload = pkgs.writeShellScriptBin "nvidia-offload" '' export __NV_PRIME_RENDER_OFFLOAD=1 diff --git a/nixos/hosts/thalassa/null/hardware-configuration.nix b/nixos/hosts/thalassa/null/hardware-configuration.nix index 79e4113..d9de3ca 100644 --- a/nixos/hosts/thalassa/null/hardware-configuration.nix +++ b/nixos/hosts/thalassa/null/hardware-configuration.nix @@ -1,7 +1,7 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ config, lib, modulesPath, ... }: { imports = diff --git a/nixos/hosts/thalassa/null/home/default.nix b/nixos/hosts/thalassa/null/home/default.nix index 9e9dc39..f128590 100644 --- a/nixos/hosts/thalassa/null/home/default.nix +++ b/nixos/hosts/thalassa/null/home/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, inputs, texlive, ... }: +{ config, pkgs, inputs, texlive, ... }: let tex = pkgs.texlive.combine { inherit (pkgs.texlive) scheme-full; diff --git a/nixos/hosts/thalassa/null/home/hyprland.nix b/nixos/hosts/thalassa/null/home/hyprland.nix index 7329a2f..6dac363 100644 --- a/nixos/hosts/thalassa/null/home/hyprland.nix +++ b/nixos/hosts/thalassa/null/home/hyprland.nix @@ -1,4 +1,4 @@ -{ pkgs, inputs, config, ... }: { +{ pkgs, config, ... }: { home.file.".config/hypr/hyprpaper.conf".text = '' ipc = off preload = ~/cloud/Pictures/Wallpapers-Laptop/wallpaper-nix-pink.png diff --git a/nixos/hosts/thalassa/null/home/neovim.nix b/nixos/hosts/thalassa/null/home/neovim.nix index eecb152..ac51ba6 100644 --- a/nixos/hosts/thalassa/null/home/neovim.nix +++ b/nixos/hosts/thalassa/null/home/neovim.nix @@ -1,4 +1,4 @@ -{ inputs, pkgs, lib, ... }: { +{ inputs, pkgs, ... }: { imports = [ inputs.nixvim.homeManagerModules.nixvim ]; programs.nixvim = { enable = true; diff --git a/nixos/hosts/thalassa/null/home/theme.nix b/nixos/hosts/thalassa/null/home/theme.nix index b75113c..128cd75 100644 --- a/nixos/hosts/thalassa/null/home/theme.nix +++ b/nixos/hosts/thalassa/null/home/theme.nix @@ -32,7 +32,7 @@ let mantle = "292c3c"; crust = "232634"; - hex = mapAttrs (name: value: "#${value}") colour; + hex = mapAttrs (_name: value: "#${value}") colour; }; in { home.file.".xsettingsd".text = '' diff --git a/nixos/pkgs/default.nix b/nixos/pkgs/default.nix index d87e564..df26133 100644 --- a/nixos/pkgs/default.nix +++ b/nixos/pkgs/default.nix @@ -1,5 +1,5 @@ # nix-build -E 'with import {}; callPackage ./default.nix {}' -final: prev: { +_final: prev: { v = { glitch-soc = prev.callPackage ./glitch-soc { }; diff --git a/nixos/pkgs/dnd-5e-latex-template/default.nix b/nixos/pkgs/dnd-5e-latex-template/default.nix index de795c6..3114dc7 100644 --- a/nixos/pkgs/dnd-5e-latex-template/default.nix +++ b/nixos/pkgs/dnd-5e-latex-template/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenvNoCC, fetchFromGitHub }: stdenvNoCC.mkDerivation rec { +{ stdenvNoCC, fetchFromGitHub }: stdenvNoCC.mkDerivation rec { pname = "dnd-5e-latex-template"; version = "0.8.0"; tlType = "run"; diff --git a/nixos/pkgs/gitea-agatheme/default.nix b/nixos/pkgs/gitea-agatheme/default.nix index 2a87ad7..ad6460c 100644 --- a/nixos/pkgs/gitea-agatheme/default.nix +++ b/nixos/pkgs/gitea-agatheme/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenvNoCC, fetchurl }: stdenvNoCC.mkDerivation { +{ stdenvNoCC, fetchurl }: stdenvNoCC.mkDerivation { pname = "gitea-agatheme"; version = "1.2"; diff --git a/nixos/pkgs/glitch-soc/default.nix b/nixos/pkgs/glitch-soc/default.nix index 1ffb5b7..5db9bd6 100644 --- a/nixos/pkgs/glitch-soc/default.nix +++ b/nixos/pkgs/glitch-soc/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, nodejs-slim, mkYarnPackage, fetchFromGitHub, bundlerEnv, nixosTests +{ lib, stdenv, nodejs-slim, bundlerEnv, nixosTests , yarn, callPackage, imagemagick, ffmpeg, file, ruby_3_0, writeShellScript , fetchYarnDeps, fixup_yarn_lock diff --git a/nixos/pkgs/glitch-soc/update.nix b/nixos/pkgs/glitch-soc/update.nix index 1bd557a..2db78f1 100644 --- a/nixos/pkgs/glitch-soc/update.nix +++ b/nixos/pkgs/glitch-soc/update.nix @@ -1,5 +1,4 @@ -{ pkgs -, runCommand +{ runCommand , lib , makeWrapper , yarn2nix diff --git a/nixos/pkgs/vscode-extensions/platformio.nix b/nixos/pkgs/vscode-extensions/platformio.nix index cbee23e..98d5d7c 100644 --- a/nixos/pkgs/vscode-extensions/platformio.nix +++ b/nixos/pkgs/vscode-extensions/platformio.nix @@ -1,4 +1,4 @@ -{ vscode-utils, lib }: +{ vscode-utils }: let inherit (vscode-utils) buildVscodeMarketplaceExtension; in buildVscodeMarketplaceExtension { mktplcRef = { diff --git a/nixos/templates/iso-graphical.nix b/nixos/templates/iso-graphical.nix index c73a774..23630f3 100644 --- a/nixos/templates/iso-graphical.nix +++ b/nixos/templates/iso-graphical.nix @@ -1,4 +1,4 @@ -{ pkgs, modulesPath, lib, config, ... }: { +{ pkgs, modulesPath, lib, ... }: { imports = [ "${modulesPath}/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nix" ]; diff --git a/nixos/templates/proxmox-lxc.nix b/nixos/templates/proxmox-lxc.nix index d1313a0..2d1502b 100644 --- a/nixos/templates/proxmox-lxc.nix +++ b/nixos/templates/proxmox-lxc.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: { +{ lib, ... }: { imports = [ ../common/common.nix ../common/generic-lxc.nix ]; proxmoxLXC = { diff --git a/nixos/templates/proxmox-vm.nix b/nixos/templates/proxmox-vm.nix index b1cdda8..268bcc7 100644 --- a/nixos/templates/proxmox-vm.nix +++ b/nixos/templates/proxmox-vm.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: { +{ lib, ... }: { imports = [ ../common/common.nix ../common/generic-vm.nix ]; proxmox.qemuConf = { diff --git a/nixos/util.nix b/nixos/util.nix index 798913e..e36ec67 100644 --- a/nixos/util.nix +++ b/nixos/util.nix @@ -2,7 +2,6 @@ let inherit (builtins) filter attrValues concatMap mapAttrs; inherit (nixpkgs.lib.attrsets) mapAttrsToList; - inherit (nixpkgs.lib) nixosSystem; base_imports = [ home-manager.nixosModules.home-manager mailserver.nixosModules.mailserver @@ -26,7 +25,7 @@ in { inherit base_imports type_import resolve_imports; # Add to whatever realm a host belong to its list of tags add_realm_to_tags = mapAttrs (realm: - mapAttrs (hostname: + mapAttrs (_hostname: { tags ? [ ], ... }@host: host // { tags = [ realm ] ++ tags; From 2c16870d667c1b79cd89b27d86982a4132c7e3f2 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 4 May 2023 13:08:10 +0200 Subject: [PATCH 06/13] nixfmt --- nixos/common/common.nix | 5 +- nixos/common/generic-lxc.nix | 6 +- nixos/common/hm-modules/catppuccin.nix | 4 +- nixos/common/hm-modules/default.nix | 9 +- nixos/common/hm-modules/nvim.nix | 4 +- nixos/common/modules/default.nix | 8 +- nixos/common/modules/dns.nix | 14 +- nixos/common/modules/flood.nix | 3 +- nixos/common/modules/gnome/hm.nix | 2 - nixos/common/modules/unpackerr.nix | 104 +- nixos/common/users/default.nix | 11 +- nixos/common/users/victor.nix | 5 +- nixos/hosts/hades/bastion/configuration.nix | 3 +- nixos/hosts/hades/bazarr/configuration.nix | 3 +- nixos/hosts/hades/dns/configuration.nix | 3 +- .../docker-registry-proxy/configuration.nix | 10 +- .../hades/docker-registry/configuration.nix | 26 +- nixos/hosts/hades/jackett/configuration.nix | 3 +- .../hades/lucy/hardware-configuration.nix | 30 +- nixos/hosts/hades/minio/configuration.nix | 3 +- nixos/hosts/hades/nginx/configuration.nix | 1 - nixos/hosts/hades/overseerr/configuration.nix | 4 +- nixos/hosts/hades/prowlarr/configuration.nix | 7 +- nixos/hosts/hades/rtorrent/rtorrent.nix | 167 +- nixos/hosts/hades/sonarr/configuration.nix | 3 +- nixos/hosts/hades/unifi/configuration.nix | 3 +- nixos/hosts/hades/unpackerr/configuration.nix | 3 +- .../bastion/hardware-configuration.nix | 6 +- nixos/hosts/olympus/dns/configuration.nix | 3 +- nixos/hosts/olympus/gitea/configuration.nix | 19 +- .../olympus/mailserver/configuration.nix | 18 +- .../hosts/olympus/minecraft/configuration.nix | 3 +- .../hosts/olympus/mosquitto/configuration.nix | 3 +- nixos/hosts/olympus/ntfy/configuration.nix | 3 +- nixos/hosts/olympus/outline/configuration.nix | 10 +- nixos/hosts/olympus/synapse/configuration.nix | 113 +- nixos/hosts/olympus/unifi/configuration.nix | 2 +- .../olympus/victoriametrics/configuration.nix | 16 +- .../thalassa/aoife/hardware-configuration.nix | 31 +- nixos/hosts/thalassa/eevee/configuration.nix | 9 +- .../thalassa/eevee/hardware-configuration.nix | 31 +- .../thalassa/null/hardware-configuration.nix | 48 +- nixos/hosts/thalassa/null/home/neovim.nix | 4 +- nixos/hosts/thalassa/null/networking.nix | 23 +- nixos/hosts/thalassa/null/rescue-boot.nix | 8 +- nixos/pkgs/dnd-5e-latex-template/default.nix | 17 +- nixos/pkgs/gitea-agatheme/default.nix | 6 +- nixos/pkgs/glitch-soc/default.nix | 34 +- nixos/pkgs/glitch-soc/gemset.nix | 2329 +++++++++-------- nixos/pkgs/glitch-soc/source.nix | 5 +- nixos/pkgs/glitch-soc/update.nix | 30 +- nixos/templates/iso-graphical.nix | 4 +- nixos/templates/iso.nix | 11 +- 53 files changed, 1671 insertions(+), 1559 deletions(-) diff --git a/nixos/common/common.nix b/nixos/common/common.nix index 56327dc..2cf7461 100644 --- a/nixos/common/common.nix +++ b/nixos/common/common.nix @@ -1,8 +1,5 @@ { config, lib, pkgs, ... }: { - imports = [ - ./users - ./modules - ]; + imports = [ ./users ./modules ]; # Clean /tmp on boot. boot.tmp.cleanOnBoot = true; diff --git a/nixos/common/generic-lxc.nix b/nixos/common/generic-lxc.nix index ba7afba..9874944 100644 --- a/nixos/common/generic-lxc.nix +++ b/nixos/common/generic-lxc.nix @@ -2,7 +2,11 @@ _: { # See also: https://blog.xirion.net/posts/nixos-proxmox-lxc/ # Supress systemd services that don't work (correctly) on LXC - systemd.suppressedSystemUnits = [ "dev-mqueue.mount" "sys-kernel-debug.mount" "sys-fs-fuse-connections.mount" ]; + systemd.suppressedSystemUnits = [ + "dev-mqueue.mount" + "sys-kernel-debug.mount" + "sys-fs-fuse-connections.mount" + ]; # https://github.com/NixOS/nixpkgs/issues/157449#issuecomment-1459299764 boot.specialFileSystems."/run".options = [ "rshared" ]; diff --git a/nixos/common/hm-modules/catppuccin.nix b/nixos/common/hm-modules/catppuccin.nix index a60b67b..2aceac0 100644 --- a/nixos/common/hm-modules/catppuccin.nix +++ b/nixos/common/hm-modules/catppuccin.nix @@ -2,9 +2,7 @@ with lib; let cfg = config.themes.v.catppuccin; in { - options.themes.v.catppuccin = { - enable = mkEnableOption "catppuccin"; - }; + options.themes.v.catppuccin = { enable = mkEnableOption "catppuccin"; }; config = let theme = "Catppuccin-Pink-Dark"; cursorTheme = config.home.pointerCursor.name; diff --git a/nixos/common/hm-modules/default.nix b/nixos/common/hm-modules/default.nix index 8dabd6c..914008e 100644 --- a/nixos/common/hm-modules/default.nix +++ b/nixos/common/hm-modules/default.nix @@ -1,8 +1 @@ -{ ... }: { - imports = [ - ./catppuccin.nix - ./nvim.nix - ./riff.nix - ./vscode.nix - ]; -} +{ ... }: { imports = [ ./catppuccin.nix ./nvim.nix ./riff.nix ./vscode.nix ]; } diff --git a/nixos/common/hm-modules/nvim.nix b/nixos/common/hm-modules/nvim.nix index 2541697..b2a96e3 100644 --- a/nixos/common/hm-modules/nvim.nix +++ b/nixos/common/hm-modules/nvim.nix @@ -2,9 +2,7 @@ with lib; let cfg = config.programs.v.nvim; in { - options.programs.v.nvim = { - enable = mkEnableOption "nvim"; - }; + options.programs.v.nvim = { enable = mkEnableOption "nvim"; }; config = mkIf cfg.enable { programs.nixvim = { enable = true; diff --git a/nixos/common/modules/default.nix b/nixos/common/modules/default.nix index 3e78f27..4b66a5b 100644 --- a/nixos/common/modules/default.nix +++ b/nixos/common/modules/default.nix @@ -1,9 +1,3 @@ { ... }: { - imports = [ - ./dns.nix - ./flood.nix - ./gnome - ./unpackerr.nix - ./vault.nix - ]; + imports = [ ./dns.nix ./flood.nix ./gnome ./unpackerr.nix ./vault.nix ]; } diff --git a/nixos/common/modules/dns.nix b/nixos/common/modules/dns.nix index 6a34880..b173ff2 100644 --- a/nixos/common/modules/dns.nix +++ b/nixos/common/modules/dns.nix @@ -9,13 +9,13 @@ let ipv6Hosts = filter (hasAttr "ip6") flat_hosts; localData = { hostname, realm, ip, ... }: ''"${hostname}.${realm}. A ${ip}"''; - local6Data = { hostname, realm, ip6, ... }: ''"${hostname}.${realm}. AAAA ${ip6}"''; + local6Data = { hostname, realm, ip6, ... }: + ''"${hostname}.${realm}. AAAA ${ip6}"''; ptrData = { hostname, realm, ip, ... }: ''"${ip} ${hostname}.${realm}"''; ptr6Data = { hostname, realm, ip6, ... }: ''"${ip6} ${hostname}.${realm}"''; cfg = config.services.v.dns; -in -{ +in { options.services.v.dns = { enable = mkEnableOption "v.dns"; @@ -50,7 +50,8 @@ in use-syslog = "yes"; module-config = ''"validator iterator"''; - local-zone = map (localdomain: ''"${localdomain}}." transparent'') domains; + local-zone = + map (localdomain: ''"${localdomain}}." transparent'') domains; local-data = (map localData ipv4Host) ++ (map local6Data ipv6Hosts); local-data-ptr = (map ptrData ipv4Host) ++ (map ptr6Data ipv6Hosts); @@ -83,10 +84,7 @@ in }) (mkIf (cfg.mode == "laptop") { interface = [ "127.0.0.1" "::1" ]; - access-control = [ - "127.0.0.1/32 allow_snoop" - "::1 allow_snoop" - ]; + access-control = [ "127.0.0.1/32 allow_snoop" "::1 allow_snoop" ]; }) ]; }; diff --git a/nixos/common/modules/flood.nix b/nixos/common/modules/flood.nix index fbdef0a..64c20b3 100644 --- a/nixos/common/modules/flood.nix +++ b/nixos/common/modules/flood.nix @@ -147,6 +147,7 @@ in { }; # This is needed to create the dataDir with the correct permissions. - systemd.tmpfiles.rules = [ "d '${cfg.dataDir}' 0755 ${cfg.user} ${cfg.group} -" ]; + systemd.tmpfiles.rules = + [ "d '${cfg.dataDir}' 0755 ${cfg.user} ${cfg.group} -" ]; }; } diff --git a/nixos/common/modules/gnome/hm.nix b/nixos/common/modules/gnome/hm.nix index cba3ba8..87b852c 100644 --- a/nixos/common/modules/gnome/hm.nix +++ b/nixos/common/modules/gnome/hm.nix @@ -48,8 +48,6 @@ in { "image/x-icns" = "org.gnome.eog.desktop"; }; - - dconf.settings = { "org/gnome/desktop/input-sources" = { sources = [ (mkTuple [ "xkb" "us+altgr-intl" ]) ]; diff --git a/nixos/common/modules/unpackerr.nix b/nixos/common/modules/unpackerr.nix index 4a8043b..5490ec6 100644 --- a/nixos/common/modules/unpackerr.nix +++ b/nixos/common/modules/unpackerr.nix @@ -57,8 +57,7 @@ let ''; }; }; -in -{ +in { options.services.unpackerr = { enable = mkEnableOption "unpackerr"; @@ -258,62 +257,61 @@ in after = [ "network.target" ]; description = "unpackerr system service"; # Filter out all unset variables else unpackerr complains - environment = filterAttrs (_n: v: stringLength v > 0) - { - # General options - UN_DEBUG = "${toString cfg.debug}"; - UN_INTERVAL = "${cfg.interval}"; - UN_START_DELAY = "${cfg.startDelay}"; - UN_RETRY_DELAY = "${cfg.retryDelay}"; - UN_MAX_RETRIES = "${toString cfg.maxRetries}"; - UN_PARALLEL = "${toString cfg.parallel}"; - UN_FILE_MODE = "${cfg.fileMode}"; - UN_DIR_MODE = "${cfg.dirMode}"; + environment = filterAttrs (_n: v: stringLength v > 0) { + # General options + UN_DEBUG = "${toString cfg.debug}"; + UN_INTERVAL = "${cfg.interval}"; + UN_START_DELAY = "${cfg.startDelay}"; + UN_RETRY_DELAY = "${cfg.retryDelay}"; + UN_MAX_RETRIES = "${toString cfg.maxRetries}"; + UN_PARALLEL = "${toString cfg.parallel}"; + UN_FILE_MODE = "${cfg.fileMode}"; + UN_DIR_MODE = "${cfg.dirMode}"; - # Sonarr - UN_SONARR_0_URL = "${cfg.sonarr.url}"; - UN_SONARR_0_API_KEY = "${cfg.sonarr.apiKey}"; - UN_SONARR_0_PATHS_0 = "${cfg.sonarr.paths}"; - UN_SONARR_0_PROTOCOLS = "${cfg.sonarr.protocols}"; - UN_SONARR_0_TIMEOUT = "${cfg.sonarr.timeout}"; - UN_SONARR_0_DELETE_ORIG = "${toString cfg.sonarr.deleteOrginal}"; - UN_SONARR_0_DELETE_DELAY = "${cfg.sonarr.deleteDelay}"; + # Sonarr + UN_SONARR_0_URL = "${cfg.sonarr.url}"; + UN_SONARR_0_API_KEY = "${cfg.sonarr.apiKey}"; + UN_SONARR_0_PATHS_0 = "${cfg.sonarr.paths}"; + UN_SONARR_0_PROTOCOLS = "${cfg.sonarr.protocols}"; + UN_SONARR_0_TIMEOUT = "${cfg.sonarr.timeout}"; + UN_SONARR_0_DELETE_ORIG = "${toString cfg.sonarr.deleteOrginal}"; + UN_SONARR_0_DELETE_DELAY = "${cfg.sonarr.deleteDelay}"; - # Radarr - UN_RADARR_0_URL = "${cfg.radarr.url}"; - UN_RADARR_0_API_KEY = "${cfg.radarr.apiKey}"; - UN_RADARR_0_PATHS_0 = "${cfg.radarr.paths}"; - UN_RADARR_0_PROTOCOLS = "${cfg.radarr.protocols}"; - UN_RADARR_0_TIMEOUT = "${cfg.radarr.timeout}"; - UN_RADARR_0_DELETE_ORIG = "${toString cfg.radarr.deleteOrginal}"; - UN_RADARR_0_DELETE_DELAY = "${cfg.radarr.deleteDelay}"; + # Radarr + UN_RADARR_0_URL = "${cfg.radarr.url}"; + UN_RADARR_0_API_KEY = "${cfg.radarr.apiKey}"; + UN_RADARR_0_PATHS_0 = "${cfg.radarr.paths}"; + UN_RADARR_0_PROTOCOLS = "${cfg.radarr.protocols}"; + UN_RADARR_0_TIMEOUT = "${cfg.radarr.timeout}"; + UN_RADARR_0_DELETE_ORIG = "${toString cfg.radarr.deleteOrginal}"; + UN_RADARR_0_DELETE_DELAY = "${cfg.radarr.deleteDelay}"; - # Lidarr - UN_LIDARR_0_URL = "${cfg.lidarr.url}"; - UN_LIDARR_0_API_KEY = "${cfg.lidarr.apiKey}"; - UN_LIDARR_0_PATHS_0 = "${cfg.lidarr.paths}"; - UN_LIDARR_0_PROTOCOLS = "${cfg.lidarr.protocols}"; - UN_LIDARR_0_TIMEOUT = "${cfg.lidarr.timeout}"; - UN_LIDARR_0_DELETE_ORIG = "${toString cfg.lidarr.deleteOrginal}"; - UN_LIDARR_0_DELETE_DELAY = "${cfg.lidarr.deleteDelay}"; + # Lidarr + UN_LIDARR_0_URL = "${cfg.lidarr.url}"; + UN_LIDARR_0_API_KEY = "${cfg.lidarr.apiKey}"; + UN_LIDARR_0_PATHS_0 = "${cfg.lidarr.paths}"; + UN_LIDARR_0_PROTOCOLS = "${cfg.lidarr.protocols}"; + UN_LIDARR_0_TIMEOUT = "${cfg.lidarr.timeout}"; + UN_LIDARR_0_DELETE_ORIG = "${toString cfg.lidarr.deleteOrginal}"; + UN_LIDARR_0_DELETE_DELAY = "${cfg.lidarr.deleteDelay}"; - # Readarr - UN_READARR_0_URL = "${cfg.readarr.url}"; - UN_READARR_0_API_KEY = "${cfg.readarr.apiKey}"; - UN_READARR_0_PATHS_0 = "${cfg.readarr.paths}"; - UN_READARR_0_PROTOCOLS = "${cfg.readarr.protocols}"; - UN_READARR_0_TIMEOUT = "${cfg.readarr.timeout}"; - UN_READARR_0_DELETE_ORIG = "${toString cfg.readarr.deleteOrginal}"; - UN_READARR_0_DELETE_DELAY = "${cfg.readarr.deleteDelay}"; + # Readarr + UN_READARR_0_URL = "${cfg.readarr.url}"; + UN_READARR_0_API_KEY = "${cfg.readarr.apiKey}"; + UN_READARR_0_PATHS_0 = "${cfg.readarr.paths}"; + UN_READARR_0_PROTOCOLS = "${cfg.readarr.protocols}"; + UN_READARR_0_TIMEOUT = "${cfg.readarr.timeout}"; + UN_READARR_0_DELETE_ORIG = "${toString cfg.readarr.deleteOrginal}"; + UN_READARR_0_DELETE_DELAY = "${cfg.readarr.deleteDelay}"; - # Folder - UN_FOLDER_0_PATH = "${cfg.folder.path}"; - UN_FOLDER_0_EXTRACT_PATH = "${cfg.folder.extractPath}"; - UN_FOLDER_0_DELETE_AFTER = "${cfg.folder.deleteAfter}"; - UN_FOLDER_0_DELETE_ORIGINAL = "${toString cfg.folder.deleteOrginal}"; - UN_FOLDER_0_DELETE_FILES = "${toString cfg.folder.deleteFiles}"; - UN_FOLDER_0_MOVE_BACK = "${toString cfg.folder.moveBack}"; - } // cfg.extraConfig; + # Folder + UN_FOLDER_0_PATH = "${cfg.folder.path}"; + UN_FOLDER_0_EXTRACT_PATH = "${cfg.folder.extractPath}"; + UN_FOLDER_0_DELETE_AFTER = "${cfg.folder.deleteAfter}"; + UN_FOLDER_0_DELETE_ORIGINAL = "${toString cfg.folder.deleteOrginal}"; + UN_FOLDER_0_DELETE_FILES = "${toString cfg.folder.deleteFiles}"; + UN_FOLDER_0_MOVE_BACK = "${toString cfg.folder.moveBack}"; + } // cfg.extraConfig; serviceConfig = { User = cfg.user; Group = cfg.group; diff --git a/nixos/common/users/default.nix b/nixos/common/users/default.nix index f5152cb..99906a4 100644 --- a/nixos/common/users/default.nix +++ b/nixos/common/users/default.nix @@ -1,9 +1,5 @@ -{ config, pkgs, lib, ... }: -{ - imports = [ - ./laura.nix - ./victor.nix - ]; +{ config, pkgs, lib, ... }: { + imports = [ ./laura.nix ./victor.nix ]; # Setup ZSH to use grml config programs.zsh = { @@ -35,7 +31,8 @@ # Configure the root account users.extraUsers.root = { # Allow my SSH keys for logging in as root. - openssh.authorizedKeys.keys = config.users.extraUsers.victor.openssh.authorizedKeys.keys; + openssh.authorizedKeys.keys = + config.users.extraUsers.victor.openssh.authorizedKeys.keys; # Also use zsh for root shell = pkgs.zsh; }; diff --git a/nixos/common/users/victor.nix b/nixos/common/users/victor.nix index cc8a537..3718bdc 100644 --- a/nixos/common/users/victor.nix +++ b/nixos/common/users/victor.nix @@ -1,5 +1,5 @@ { pkgs, ... }: { - # The block that specifies my user account. + # The block that specifies my user account. users.extraUsers.victor = { # This account is intended for a non-system user. isNormalUser = true; @@ -18,6 +18,7 @@ ]; # Make me admin - extraGroups = [ "systemd-journal" "wheel" "networkmanager" "libvirtd" "dialout" ]; + extraGroups = + [ "systemd-journal" "wheel" "networkmanager" "libvirtd" "dialout" ]; }; } diff --git a/nixos/hosts/hades/bastion/configuration.nix b/nixos/hosts/hades/bastion/configuration.nix index 0d80fa2..5b529a5 100644 --- a/nixos/hosts/hades/bastion/configuration.nix +++ b/nixos/hosts/hades/bastion/configuration.nix @@ -1,5 +1,4 @@ -{ pkgs, lib, ... }: -{ +{ pkgs, lib, ... }: { networking.interfaces.eth0.useDHCP = true; # mosh ssh diff --git a/nixos/hosts/hades/bazarr/configuration.nix b/nixos/hosts/hades/bazarr/configuration.nix index 9a679dd..9b101ad 100644 --- a/nixos/hosts/hades/bazarr/configuration.nix +++ b/nixos/hosts/hades/bazarr/configuration.nix @@ -1,5 +1,4 @@ -_: -{ +_: { system.stateVersion = "22.11"; networking.interfaces.eth0.useDHCP = true; diff --git a/nixos/hosts/hades/dns/configuration.nix b/nixos/hosts/hades/dns/configuration.nix index 7e21fdd..2294810 100644 --- a/nixos/hosts/hades/dns/configuration.nix +++ b/nixos/hosts/hades/dns/configuration.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{ pkgs, ... }: { imports = [ ]; # This value determines the NixOS release from which the default diff --git a/nixos/hosts/hades/docker-registry-proxy/configuration.nix b/nixos/hosts/hades/docker-registry-proxy/configuration.nix index 7574924..5bf4669 100644 --- a/nixos/hosts/hades/docker-registry-proxy/configuration.nix +++ b/nixos/hosts/hades/docker-registry-proxy/configuration.nix @@ -1,17 +1,19 @@ { config, ... }: -let vs = config.vault-secrets.secrets; in -{ +let vs = config.vault-secrets.secrets; +in { system.stateVersion = "22.05"; networking.interfaces.eth0.useDHCP = true; # the registry port and metrics port - networking.firewall.allowedTCPPorts = [ config.services.dockerRegistry.port 5001 ]; + networking.firewall.allowedTCPPorts = + [ config.services.dockerRegistry.port 5001 ]; vault-secrets.secrets.docker-registry = { }; # Sets the minio user and password - systemd.services.docker-registry.serviceConfig.EnvironmentFile = "${vs.docker-registry}/environment"; + systemd.services.docker-registry.serviceConfig.EnvironmentFile = + "${vs.docker-registry}/environment"; services.dockerRegistry = { enable = true; diff --git a/nixos/hosts/hades/docker-registry/configuration.nix b/nixos/hosts/hades/docker-registry/configuration.nix index 1f7cd15..0dcb94f 100644 --- a/nixos/hosts/hades/docker-registry/configuration.nix +++ b/nixos/hosts/hades/docker-registry/configuration.nix @@ -1,17 +1,19 @@ { config, ... }: -let vs = config.vault-secrets.secrets; in -{ +let vs = config.vault-secrets.secrets; +in { system.stateVersion = "22.05"; networking.interfaces.eth0.useDHCP = true; # the registry port and metrics port - networking.firewall.allowedTCPPorts = [ config.services.dockerRegistry.port 5001 ]; + networking.firewall.allowedTCPPorts = + [ config.services.dockerRegistry.port 5001 ]; vault-secrets.secrets.docker-registry = { }; # Sets the minio user and password - systemd.services.docker-registry.serviceConfig.EnvironmentFile = "${vs.docker-registry}/environment"; + systemd.services.docker-registry.serviceConfig.EnvironmentFile = + "${vs.docker-registry}/environment"; services.dockerRegistry = { enable = true; @@ -34,15 +36,13 @@ let vs = config.vault-secrets.secrets; in http.debug.prometheus.enabled = true; # Webhooks - notifications.endpoints = [ - { - name = "keel"; - url = "http://10.10.10.17:9300/v1/webhooks/registry"; - timeout = "500ms"; - treshold = 5; - backoff = "1s"; - } - ]; + notifications.endpoints = [{ + name = "keel"; + url = "http://10.10.10.17:9300/v1/webhooks/registry"; + timeout = "500ms"; + treshold = 5; + backoff = "1s"; + }]; }; }; } diff --git a/nixos/hosts/hades/jackett/configuration.nix b/nixos/hosts/hades/jackett/configuration.nix index 2ccfd13..982919b 100644 --- a/nixos/hosts/hades/jackett/configuration.nix +++ b/nixos/hosts/hades/jackett/configuration.nix @@ -1,5 +1,4 @@ -_: -{ +_: { system.stateVersion = "21.05"; networking.interfaces.eth0.useDHCP = true; diff --git a/nixos/hosts/hades/lucy/hardware-configuration.nix b/nixos/hosts/hades/lucy/hardware-configuration.nix index b658cbc..f89cdb5 100644 --- a/nixos/hosts/hades/lucy/hardware-configuration.nix +++ b/nixos/hosts/hades/lucy/hardware-configuration.nix @@ -4,24 +4,30 @@ { lib, modulesPath, ... }: { - imports = - [ (modulesPath + "/profiles/qemu-guest.nix") - ]; + imports = [ (modulesPath + "/profiles/qemu-guest.nix") ]; - boot.initrd.availableKernelModules = [ "uhci_hcd" "ehci_pci" "ahci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ]; + boot.initrd.availableKernelModules = [ + "uhci_hcd" + "ehci_pci" + "ahci" + "virtio_pci" + "virtio_scsi" + "sd_mod" + "sr_mod" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/749c02fd-209d-4974-917e-38b749d10ec2"; - fsType = "ext4"; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/749c02fd-209d-4974-917e-38b749d10ec2"; + fsType = "ext4"; + }; - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/D021-72EB"; - fsType = "vfat"; - }; + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/D021-72EB"; + fsType = "vfat"; + }; swapDevices = [ ]; diff --git a/nixos/hosts/hades/minio/configuration.nix b/nixos/hosts/hades/minio/configuration.nix index 8e2e335..7b30a44 100644 --- a/nixos/hosts/hades/minio/configuration.nix +++ b/nixos/hosts/hades/minio/configuration.nix @@ -1,6 +1,5 @@ { config, pkgs, ... }: -let - vs = config.vault-secrets.secrets; +let vs = config.vault-secrets.secrets; in { system.stateVersion = "22.11"; diff --git a/nixos/hosts/hades/nginx/configuration.nix b/nixos/hosts/hades/nginx/configuration.nix index e4a6f4f..fc5f6e6 100644 --- a/nixos/hosts/hades/nginx/configuration.nix +++ b/nixos/hosts/hades/nginx/configuration.nix @@ -28,7 +28,6 @@ in { security.acme.acceptTerms = true; security.acme.preliminarySelfsigned = true; - services.nginx = { enable = true; recommendedProxySettings = true; diff --git a/nixos/hosts/hades/overseerr/configuration.nix b/nixos/hosts/hades/overseerr/configuration.nix index 669ce1c..4b354fe 100644 --- a/nixos/hosts/hades/overseerr/configuration.nix +++ b/nixos/hosts/hades/overseerr/configuration.nix @@ -31,9 +31,7 @@ # LOG_LEVEL = "debug"; TZ = "Europe/Amsterdam"; }; - ports = [ - "5055:5055" - ]; + ports = [ "5055:5055" ]; volumes = [ "/var/lib/overseerr/config:/app/config" ]; }; }; diff --git a/nixos/hosts/hades/prowlarr/configuration.nix b/nixos/hosts/hades/prowlarr/configuration.nix index f22d49e..d0ecc2f 100644 --- a/nixos/hosts/hades/prowlarr/configuration.nix +++ b/nixos/hosts/hades/prowlarr/configuration.nix @@ -1,5 +1,4 @@ -_: -{ +_: { networking.interfaces.eth0.useDHCP = true; system.stateVersion = "22.11"; @@ -15,9 +14,7 @@ _: containers = { flaresolverr = { image = "flaresolverr/flaresolverr:v3.1.2"; - ports = [ - "8191:8191" - ]; + ports = [ "8191:8191" ]; }; }; }; diff --git a/nixos/hosts/hades/rtorrent/rtorrent.nix b/nixos/hosts/hades/rtorrent/rtorrent.nix index 9e4973a..2aa3750 100644 --- a/nixos/hosts/hades/rtorrent/rtorrent.nix +++ b/nixos/hosts/hades/rtorrent/rtorrent.nix @@ -1,116 +1,115 @@ -{ config, lib, pkgs, ... }: -{ +{ config, lib, pkgs, ... }: { services.rtorrent = { enable = true; port = 54945; # Port Forwarded in mullvad downloadDir = "/mnt/storage/torrents/r"; package = pkgs.jesec-rtorrent; - configText = let cfg = config.services.rtorrent; in - pkgs.lib.mkForce '' - # rTorrent runtime directory (cfg.basedir) [default: "$HOME/.local/share/rtorrent"] - method.insert = cfg.basedir, private|const|string, (cat,"${cfg.dataDir}/") + configText = let cfg = config.services.rtorrent; + in pkgs.lib.mkForce '' + # rTorrent runtime directory (cfg.basedir) [default: "$HOME/.local/share/rtorrent"] + method.insert = cfg.basedir, private|const|string, (cat,"${cfg.dataDir}/") - # Default download directory (cfg.download) [default: "$(cfg.basedir)/download"] - method.insert = cfg.download, private|const|string, (cat,"${cfg.downloadDir}") + # Default download directory (cfg.download) [default: "$(cfg.basedir)/download"] + method.insert = cfg.download, private|const|string, (cat,"${cfg.downloadDir}") - # RPC Socket - method.insert = cfg.rpcsock, private|const|string, (cat,"${cfg.rpcSocket}") + # RPC Socket + method.insert = cfg.rpcsock, private|const|string, (cat,"${cfg.rpcSocket}") - # Log directory (cfg.logs) [default: "$(cfg.basedir)/log"] - method.insert = cfg.logs, private|const|string, (cat,(cfg.basedir),"log/") - method.insert = cfg.logfile, private|const|string, (cat,(cfg.logs),"rtorrent-",(system.time),".log") + # Log directory (cfg.logs) [default: "$(cfg.basedir)/log"] + method.insert = cfg.logs, private|const|string, (cat,(cfg.basedir),"log/") + method.insert = cfg.logfile, private|const|string, (cat,(cfg.logs),"rtorrent-",(system.time),".log") - # Torrent session directory (cfg.session) [default: "$(cfg.basedir)/.session"] - method.insert = cfg.session, private|const|string, (cat,(cfg.basedir),".session/") + # Torrent session directory (cfg.session) [default: "$(cfg.basedir)/.session"] + method.insert = cfg.session, private|const|string, (cat,(cfg.basedir),".session/") - # Watch (drop to add) directories (cfg.watch) [default: "$(cfg.basedir)/watch"] - method.insert = cfg.watch, private|const|string, (cat,(cfg.basedir),"watch/") + # Watch (drop to add) directories (cfg.watch) [default: "$(cfg.basedir)/watch"] + method.insert = cfg.watch, private|const|string, (cat,(cfg.basedir),"watch/") - # Create directories - fs.mkdir.recursive = (cat,(cfg.basedir)) + # Create directories + fs.mkdir.recursive = (cat,(cfg.basedir)) - fs.mkdir = (cat,(cfg.download)) - fs.mkdir = (cat,(cfg.logs)) - fs.mkdir = (cat,(cfg.session)) + fs.mkdir = (cat,(cfg.download)) + fs.mkdir = (cat,(cfg.logs)) + fs.mkdir = (cat,(cfg.session)) - fs.mkdir = (cat,(cfg.watch)) - fs.mkdir = (cat,(cfg.watch),"/load") - fs.mkdir = (cat,(cfg.watch),"/start") + fs.mkdir = (cat,(cfg.watch)) + fs.mkdir = (cat,(cfg.watch),"/load") + fs.mkdir = (cat,(cfg.watch),"/start") - # Drop to "$(cfg.watch)/load" to add torrent - schedule2 = watch_load, 11, 10, ((load.verbose, (cat, (cfg.watch), "load/*.torrent"))) + # Drop to "$(cfg.watch)/load" to add torrent + schedule2 = watch_load, 11, 10, ((load.verbose, (cat, (cfg.watch), "load/*.torrent"))) - # Drop to "$(cfg.watch)/start" to add torrent and start downloading - schedule2 = watch_start, 10, 10, ((load.start_verbose, (cat, (cfg.watch), "start/*.torrent"))) + # Drop to "$(cfg.watch)/start" to add torrent and start downloading + schedule2 = watch_start, 10, 10, ((load.start_verbose, (cat, (cfg.watch), "start/*.torrent"))) - # Listening port for incoming peer traffic - network.port_range.set = ${toString cfg.port}-${toString cfg.port} - network.port_random.set = no + # Listening port for incoming peer traffic + network.port_range.set = ${toString cfg.port}-${toString cfg.port} + network.port_random.set = no - # Distributed Hash Table and Peer EXchange - dht.mode.set = disable - dht.port.set = 6881 - protocol.pex.set = yes + # Distributed Hash Table and Peer EXchange + dht.mode.set = disable + dht.port.set = 6881 + protocol.pex.set = yes - # UDP tracker support - trackers.use_udp.set = yes + # UDP tracker support + trackers.use_udp.set = yes - # Peer settings - throttle.max_uploads.set = 100 - throttle.max_uploads.global.set = 250 - throttle.min_peers.normal.set = 20 - throttle.max_peers.normal.set = 60 - throttle.min_peers.seed.set = 30 - throttle.max_peers.seed.set = 80 - trackers.numwant.set = 80 + # Peer settings + throttle.max_uploads.set = 100 + throttle.max_uploads.global.set = 250 + throttle.min_peers.normal.set = 20 + throttle.max_peers.normal.set = 60 + throttle.min_peers.seed.set = 30 + throttle.max_peers.seed.set = 80 + trackers.numwant.set = 80 - protocol.encryption.set = allow_incoming,try_outgoing,enable_retry + protocol.encryption.set = allow_incoming,try_outgoing,enable_retry - # Limits for file handle resources, this is optimized for - # an `ulimit` of 1024 (a common default). You MUST leave - # a ceiling of handles reserved for rTorrent's internal needs! - network.max_open_files.set = 600 - network.max_open_sockets.set = 300 + # Limits for file handle resources, this is optimized for + # an `ulimit` of 1024 (a common default). You MUST leave + # a ceiling of handles reserved for rTorrent's internal needs! + network.max_open_files.set = 600 + network.max_open_sockets.set = 300 - # Memory resource usage (increase if you have a large number of items loaded, - # and/or the available resources to spend) - pieces.memory.max.set = 1800M - network.xmlrpc.size_limit.set = 32M + # Memory resource usage (increase if you have a large number of items loaded, + # and/or the available resources to spend) + pieces.memory.max.set = 1800M + network.xmlrpc.size_limit.set = 32M - # Basic operational settings - session.path.set = (cat, (cfg.session)) - directory.default.set = (cat, (cfg.download)) - log.execute = (cat, (cfg.logs), "execute.log") + # Basic operational settings + session.path.set = (cat, (cfg.session)) + directory.default.set = (cat, (cfg.download)) + log.execute = (cat, (cfg.logs), "execute.log") - # Other operational settings - encoding.add = utf8 - system.umask.set = 0027 - system.cwd.set = (directory.default) - #schedule2 = low_diskspace, 5, 60, ((close_low_diskspace, 500M)) - #pieces.hash.on_completion.set = no + # Other operational settings + encoding.add = utf8 + system.umask.set = 0027 + system.cwd.set = (directory.default) + #schedule2 = low_diskspace, 5, 60, ((close_low_diskspace, 500M)) + #pieces.hash.on_completion.set = no - # HTTP and SSL - network.http.max_open.set = 50 - network.http.dns_cache_timeout.set = 25 + # HTTP and SSL + network.http.max_open.set = 50 + network.http.dns_cache_timeout.set = 25 - #network.http.ssl_verify_peer.set = 1 - #network.http.ssl_verify_host.set = 1 + #network.http.ssl_verify_peer.set = 1 + #network.http.ssl_verify_host.set = 1 - # Run the rTorrent process as a daemon in the background - system.daemon.set = true + # Run the rTorrent process as a daemon in the background + system.daemon.set = true - # XML-RPC interface - network.scgi.open_local = (cat,(cfg.rpcsock)) - schedule = scgi_group,0,0,"execute.nothrow=chown,\":rtorrent\",(cfg.rpcsock)" - schedule = scgi_permission,0,0,"execute.nothrow=chmod,\"g+w,o=\",(cfg.rpcsock)" + # XML-RPC interface + network.scgi.open_local = (cat,(cfg.rpcsock)) + schedule = scgi_group,0,0,"execute.nothrow=chown,\":rtorrent\",(cfg.rpcsock)" + schedule = scgi_permission,0,0,"execute.nothrow=chmod,\"g+w,o=\",(cfg.rpcsock)" - # Logging: - # Levels = critical error warn notice info debug - # Groups = connection_* dht_* peer_* rpc_* storage_* thread_* tracker_* torrent_* - print = (cat, "Logging to ", (cfg.logfile)) - log.open_file = "log", (cfg.logfile) - log.add_output = "debug", "log" - ''; + # Logging: + # Levels = critical error warn notice info debug + # Groups = connection_* dht_* peer_* rpc_* storage_* thread_* tracker_* torrent_* + print = (cat, "Logging to ", (cfg.logfile)) + log.open_file = "log", (cfg.logfile) + log.add_output = "debug", "log" + ''; }; } diff --git a/nixos/hosts/hades/sonarr/configuration.nix b/nixos/hosts/hades/sonarr/configuration.nix index c74c920..5137cc1 100644 --- a/nixos/hosts/hades/sonarr/configuration.nix +++ b/nixos/hosts/hades/sonarr/configuration.nix @@ -1,5 +1,4 @@ -_: -{ +_: { system.stateVersion = "21.05"; networking.interfaces.eth0.useDHCP = true; diff --git a/nixos/hosts/hades/unifi/configuration.nix b/nixos/hosts/hades/unifi/configuration.nix index c8ff18c..66d9ee0 100644 --- a/nixos/hosts/hades/unifi/configuration.nix +++ b/nixos/hosts/hades/unifi/configuration.nix @@ -1,5 +1,4 @@ -{ pkgs, lib, ... }: -{ +{ pkgs, lib, ... }: { system.stateVersion = "21.05"; networking.interfaces.eth0.useDHCP = true; diff --git a/nixos/hosts/hades/unpackerr/configuration.nix b/nixos/hosts/hades/unpackerr/configuration.nix index 42926d2..a57ca6a 100644 --- a/nixos/hosts/hades/unpackerr/configuration.nix +++ b/nixos/hosts/hades/unpackerr/configuration.nix @@ -1,7 +1,6 @@ { config, ... }: let vs = config.vault-secrets.secrets; -in -{ +in { networking.interfaces.eth0.useDHCP = true; fileSystems."/mnt/storage" = { diff --git a/nixos/hosts/olympus/bastion/hardware-configuration.nix b/nixos/hosts/olympus/bastion/hardware-configuration.nix index 85ea04d..dec70cc 100644 --- a/nixos/hosts/olympus/bastion/hardware-configuration.nix +++ b/nixos/hosts/olympus/bastion/hardware-configuration.nix @@ -6,7 +6,8 @@ { imports = [ (modulesPath + "/profiles/qemu-guest.nix") ]; - boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ]; + boot.initrd.availableKernelModules = + [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ ]; boot.extraModulePackages = [ ]; @@ -16,6 +17,7 @@ fsType = "ext4"; }; - swapDevices = [{ device = "/dev/disk/by-uuid/63d90b92-cdde-4795-a3ab-9566ae88f43d"; }]; + swapDevices = + [{ device = "/dev/disk/by-uuid/63d90b92-cdde-4795-a3ab-9566ae88f43d"; }]; } diff --git a/nixos/hosts/olympus/dns/configuration.nix b/nixos/hosts/olympus/dns/configuration.nix index 955a1e2..905aaf1 100644 --- a/nixos/hosts/olympus/dns/configuration.nix +++ b/nixos/hosts/olympus/dns/configuration.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{ pkgs, ... }: { imports = [ ]; # This value determines the NixOS release from which the default diff --git a/nixos/hosts/olympus/gitea/configuration.nix b/nixos/hosts/olympus/gitea/configuration.nix index ca3a80c..2be1db9 100644 --- a/nixos/hosts/olympus/gitea/configuration.nix +++ b/nixos/hosts/olympus/gitea/configuration.nix @@ -3,10 +3,8 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { lib, config, pkgs, ... }: -let - vs = config.vault-secrets.secrets; -in -{ +let vs = config.vault-secrets.secrets; +in { imports = [ ]; # This value determines the NixOS release from which the default @@ -22,7 +20,8 @@ in environment.noXlibs = lib.mkForce false; - networking.firewall.allowedTCPPorts = [ config.services.gitea.settings.server.HTTP_PORT ]; + networking.firewall.allowedTCPPorts = + [ config.services.gitea.settings.server.HTTP_PORT ]; services.openssh.startWhenNeeded = false; @@ -37,10 +36,8 @@ in }; system.activationScripts.gitea-theme = - let - target_dir = "${config.services.gitea.stateDir}/custom/public/css/"; - in - lib.stringAfter [ "var" ] '' + let target_dir = "${config.services.gitea.stateDir}/custom/public/css/"; + in lib.stringAfter [ "var" ] '' mkdir -p ${target_dir} ln -sf ${pkgs.v.gitea-agatheme} "${target_dir}/theme-agatheme.css" ''; @@ -54,9 +51,7 @@ in mailerPasswordFile = "${vs.gitea}/mailPassword"; settings = { - actions = { - "ENABLED" = true; - }; + actions = { "ENABLED" = true; }; repository = { "ENABLE_PUSH_CREATE_USER" = true; "DEFAULT_PUSH_CREATE_PRIVATE" = false; diff --git a/nixos/hosts/olympus/mailserver/configuration.nix b/nixos/hosts/olympus/mailserver/configuration.nix index 754a88e..0872c14 100644 --- a/nixos/hosts/olympus/mailserver/configuration.nix +++ b/nixos/hosts/olympus/mailserver/configuration.nix @@ -3,8 +3,8 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { config, pkgs, ... }: -let vs = config.vault-secrets.secrets; in -{ +let vs = config.vault-secrets.secrets; +in { imports = [ ]; # This value determines the NixOS release from which the default @@ -22,9 +22,7 @@ let vs = config.vault-secrets.secrets; in 10.42.42.6 vault.olympus ''; - vault-secrets.secrets.mailserver = { - services = [ "dovecot2" "postfix" ]; - }; + vault-secrets.secrets.mailserver = { services = [ "dovecot2" "postfix" ]; }; mailserver = { enable = true; @@ -36,7 +34,8 @@ let vs = config.vault-secrets.secrets; in # People "v@0x76.dev" = { hashedPasswordFile = "${vs.mailserver}/v@0x76.dev"; - aliases = [ "v@meowy.tech" "postmaster@0x76.dev" "postmaster@meowy.tech" ]; + aliases = + [ "v@meowy.tech" "postmaster@0x76.dev" "postmaster@meowy.tech" ]; }; "laura@meowy.tech" = { hashedPasswordFile = "${vs.mailserver}/laura@meowy.tech"; @@ -79,7 +78,8 @@ let vs = config.vault-secrets.secrets; in services.roundcube = { enable = true; - package = pkgs.roundcube.withPlugins (plugins: [ plugins.persistent_login ]); + package = + pkgs.roundcube.withPlugins (plugins: [ plugins.persistent_login ]); plugins = [ "archive" # "enigma" @@ -98,9 +98,7 @@ let vs = config.vault-secrets.secrets; in ''; }; - services.nginx = { - enable = true; - }; + services.nginx = { enable = true; }; security.acme.acceptTerms = true; security.acme.defaults.email = "v@0x76.dev"; diff --git a/nixos/hosts/olympus/minecraft/configuration.nix b/nixos/hosts/olympus/minecraft/configuration.nix index 83bcd57..d052e3c 100644 --- a/nixos/hosts/olympus/minecraft/configuration.nix +++ b/nixos/hosts/olympus/minecraft/configuration.nix @@ -2,8 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ lib, pkgs, ... }: -{ +{ lib, pkgs, ... }: { imports = [ ]; # This value determines the NixOS release from which the default diff --git a/nixos/hosts/olympus/mosquitto/configuration.nix b/nixos/hosts/olympus/mosquitto/configuration.nix index a30040e..d193e63 100644 --- a/nixos/hosts/olympus/mosquitto/configuration.nix +++ b/nixos/hosts/olympus/mosquitto/configuration.nix @@ -4,8 +4,7 @@ { config, pkgs, ... }: let mosquittoPort = 1883; -in -{ +in { imports = [ ]; # This value determines the NixOS release from which the default diff --git a/nixos/hosts/olympus/ntfy/configuration.nix b/nixos/hosts/olympus/ntfy/configuration.nix index 9782704..e968178 100644 --- a/nixos/hosts/olympus/ntfy/configuration.nix +++ b/nixos/hosts/olympus/ntfy/configuration.nix @@ -20,7 +20,8 @@ networking.firewall.allowedTCPPorts = [ 80 ]; - services.ntfy-sh = let datadir = "/var/lib/ntfy"; in { + services.ntfy-sh = let datadir = "/var/lib/ntfy"; + in { enable = true; settings = { base-url = "https://ntfy.0x76.dev"; diff --git a/nixos/hosts/olympus/outline/configuration.nix b/nixos/hosts/olympus/outline/configuration.nix index d9f9382..1ac2cd3 100644 --- a/nixos/hosts/olympus/outline/configuration.nix +++ b/nixos/hosts/olympus/outline/configuration.nix @@ -3,8 +3,8 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { config, ... }: -let vs = config.vault-secrets.secrets; in -{ +let vs = config.vault-secrets.secrets; +in { imports = [ ]; # This value determines the NixOS release from which the default @@ -16,9 +16,7 @@ let vs = config.vault-secrets.secrets; in system.stateVersion = "22.11"; # Did you read the comment? # Additional packages - networking.firewall.allowedTCPPorts = [ - config.services.outline.port - ]; + networking.firewall.allowedTCPPorts = [ config.services.outline.port ]; vault-secrets.secrets.outline = { inherit (config.services.outline) user group; @@ -40,7 +38,7 @@ let vs = config.vault-secrets.secrets; in uploadBucketName = "outline"; region = "us-east-1"; # fake }; - oidcAuthentication = { + oidcAuthentication = { displayName = "Dex"; userinfoUrl = "https://dex.0x76.dev/userinfo"; tokenUrl = "https://dex.0x76.dev/token"; diff --git a/nixos/hosts/olympus/synapse/configuration.nix b/nixos/hosts/olympus/synapse/configuration.nix index cd52871..fbb389c 100644 --- a/nixos/hosts/olympus/synapse/configuration.nix +++ b/nixos/hosts/olympus/synapse/configuration.nix @@ -7,8 +7,7 @@ let vs = config.vault-secrets.secrets; port = 8008; metricsPort = 9000; -in -{ +in { imports = [ ]; # This value determines the NixOS release from which the default @@ -53,66 +52,60 @@ in "${vs.synapse}/email_password" # Also contains the rest of the email config ]; - settings = - let log_file = pkgs.writeText "log.yml" '' -version: 1 + settings = let + log_file = pkgs.writeText "log.yml" '' + version: 1 -formatters: - structured: - class: synapse.logging.TerseJsonFormatter + formatters: + structured: + class: synapse.logging.TerseJsonFormatter -handlers: - file: - class: logging.handlers.TimedRotatingFileHandler - formatter: structured - filename: /var/lib/matrix-synapse/synapse.log - when: midnight - backupCount: 3 # Does not include the current log file. - encoding: utf8 + handlers: + file: + class: logging.handlers.TimedRotatingFileHandler + formatter: structured + filename: /var/lib/matrix-synapse/synapse.log + when: midnight + backupCount: 3 # Does not include the current log file. + encoding: utf8 -loggers: - synapse: - level: INFO - handlers: [file] - ''; in - { - server_name = "meowy.tech"; - enable_registration = true; - public_baseurl = "https://chat.meowy.tech"; - enable_metrics = true; - max_upload_size = "100M"; - registration_requires_token = true; - media_retention = { - remote_media_lifetime = "90d"; - }; - log_config = "${log_file}"; - listeners = [ - { - inherit port; - bind_addresses = [ "0.0.0.0" ]; - type = "http"; - tls = false; - x_forwarded = true; - resources = [ - { - names = [ "client" "federation" ]; - compress = true; - } - ]; - } - { - port = metricsPort; - bind_addresses = [ "0.0.0.0" ]; - type = "metrics"; - tls = false; - resources = [ - { - names = [ "metrics" ]; - compress = false; - } - ]; - } - ]; - }; + loggers: + synapse: + level: INFO + handlers: [file] + ''; + in { + server_name = "meowy.tech"; + enable_registration = true; + public_baseurl = "https://chat.meowy.tech"; + enable_metrics = true; + max_upload_size = "100M"; + registration_requires_token = true; + media_retention = { remote_media_lifetime = "90d"; }; + log_config = "${log_file}"; + listeners = [ + { + inherit port; + bind_addresses = [ "0.0.0.0" ]; + type = "http"; + tls = false; + x_forwarded = true; + resources = [{ + names = [ "client" "federation" ]; + compress = true; + }]; + } + { + port = metricsPort; + bind_addresses = [ "0.0.0.0" ]; + type = "metrics"; + tls = false; + resources = [{ + names = [ "metrics" ]; + compress = false; + }]; + } + ]; + }; }; } diff --git a/nixos/hosts/olympus/unifi/configuration.nix b/nixos/hosts/olympus/unifi/configuration.nix index e2c08ed..4b1c60a 100644 --- a/nixos/hosts/olympus/unifi/configuration.nix +++ b/nixos/hosts/olympus/unifi/configuration.nix @@ -22,7 +22,7 @@ services.unifi = { enable = true; unifiPackage = pkgs.unifi; - mongodbPackage = pkgs.mongodb-4_2; + mongodbPackage = pkgs.mongodb-4_2; openFirewall = true; }; } diff --git a/nixos/hosts/olympus/victoriametrics/configuration.nix b/nixos/hosts/olympus/victoriametrics/configuration.nix index 40a6715..9678ebf 100644 --- a/nixos/hosts/olympus/victoriametrics/configuration.nix +++ b/nixos/hosts/olympus/victoriametrics/configuration.nix @@ -6,8 +6,7 @@ let vmPort = 8428; vs = config.vault-secrets.secrets; -in -{ +in { imports = [ ]; # This value determines the NixOS release from which the default @@ -21,7 +20,8 @@ in # Additional packages environment.systemPackages = with pkgs; [ ]; - networking.firewall.allowedTCPPorts = [ vmPort config.services.grafana.settings.server.http_port ]; + networking.firewall.allowedTCPPorts = + [ vmPort config.services.grafana.settings.server.http_port ]; networking.firewall.allowedUDPPorts = [ vmPort ]; services.victoriametrics = { @@ -42,12 +42,10 @@ in scrape_configs = [ { job_name = "nginx"; - static_configs = [ - { - targets = [ "nginx.olympus:9113" ]; - labels.app = "nginx"; - } - ]; + static_configs = [{ + targets = [ "nginx.olympus:9113" ]; + labels.app = "nginx"; + }]; } { job_name = "synapse"; diff --git a/nixos/hosts/thalassa/aoife/hardware-configuration.nix b/nixos/hosts/thalassa/aoife/hardware-configuration.nix index 13bc8c9..06d9488 100644 --- a/nixos/hosts/thalassa/aoife/hardware-configuration.nix +++ b/nixos/hosts/thalassa/aoife/hardware-configuration.nix @@ -4,29 +4,27 @@ { config, lib, modulesPath, ... }: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" "sdhci_pci" ]; + boot.initrd.availableKernelModules = + [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" "sdhci_pci" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/c184866a-9a53-4a9f-9a1f-493792af7ea9"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/c184866a-9a53-4a9f-9a1f-493792af7ea9"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; - fileSystems."/boot/efi" = - { device = "/dev/disk/by-uuid/5BB8-7503"; - fsType = "vfat"; - }; + fileSystems."/boot/efi" = { + device = "/dev/disk/by-uuid/5BB8-7503"; + fsType = "vfat"; + }; swapDevices = - [ { device = "/dev/disk/by-uuid/bedb5b75-578e-441f-a9eb-2ecff1f4cfca"; } - ]; + [{ device = "/dev/disk/by-uuid/bedb5b75-578e-441f-a9eb-2ecff1f4cfca"; }]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking # (the default) this is the recommended approach. When using systemd-networkd it's @@ -36,6 +34,7 @@ # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.cpu.amd.updateMicrocode = + lib.mkDefault config.hardware.enableRedistributableFirmware; # high-resolution display } diff --git a/nixos/hosts/thalassa/eevee/configuration.nix b/nixos/hosts/thalassa/eevee/configuration.nix index 1c713a8..eccf3cf 100644 --- a/nixos/hosts/thalassa/eevee/configuration.nix +++ b/nixos/hosts/thalassa/eevee/configuration.nix @@ -3,17 +3,14 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { pkgs, inputs, ... }: { - imports = [ - ../../../common/desktop - ./hardware-configuration.nix - ./hardware.nix - ]; + imports = + [ ../../../common/desktop ./hardware-configuration.nix ./hardware.nix ]; # Bootloader. boot = { kernelPackages = pkgs.linuxPackages_latest; initrd = { - kernelModules = [ "nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm" ]; + kernelModules = [ "nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm" ]; }; }; diff --git a/nixos/hosts/thalassa/eevee/hardware-configuration.nix b/nixos/hosts/thalassa/eevee/hardware-configuration.nix index 536e2b0..4082fde 100644 --- a/nixos/hosts/thalassa/eevee/hardware-configuration.nix +++ b/nixos/hosts/thalassa/eevee/hardware-configuration.nix @@ -4,29 +4,27 @@ { config, lib, modulesPath, ... }: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.availableKernelModules = + [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/947a98af-9a4e-4811-a2ca-9aa00b319e9c"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/947a98af-9a4e-4811-a2ca-9aa00b319e9c"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; - fileSystems."/boot/efi" = - { device = "/dev/disk/by-uuid/D883-F146"; - fsType = "vfat"; - }; + fileSystems."/boot/efi" = { + device = "/dev/disk/by-uuid/D883-F146"; + fsType = "vfat"; + }; swapDevices = - [ { device = "/dev/disk/by-uuid/a99402e1-6f2a-4c4b-b69f-aae2fd13ffc0"; } - ]; + [{ device = "/dev/disk/by-uuid/a99402e1-6f2a-4c4b-b69f-aae2fd13ffc0"; }]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking # (the default) this is the recommended approach. When using systemd-networkd it's @@ -37,5 +35,6 @@ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.cpu.intel.updateMicrocode = + lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/nixos/hosts/thalassa/null/hardware-configuration.nix b/nixos/hosts/thalassa/null/hardware-configuration.nix index d9de3ca..a7a6cd2 100644 --- a/nixos/hosts/thalassa/null/hardware-configuration.nix +++ b/nixos/hosts/thalassa/null/hardware-configuration.nix @@ -4,37 +4,36 @@ { config, lib, modulesPath, ... }: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "rtsx_pci_sdmmc" ]; + boot.initrd.availableKernelModules = + [ "xhci_pci" "ahci" "nvme" "rtsx_pci_sdmmc" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/d4f56e5b-2509-4e63-8324-65a35c71e90c"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/d4f56e5b-2509-4e63-8324-65a35c71e90c"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; - fileSystems."/nix" = - { device = "/dev/disk/by-uuid/d4f56e5b-2509-4e63-8324-65a35c71e90c"; - fsType = "btrfs"; - options = [ "subvol=@/nix" ]; - }; + fileSystems."/nix" = { + device = "/dev/disk/by-uuid/d4f56e5b-2509-4e63-8324-65a35c71e90c"; + fsType = "btrfs"; + options = [ "subvol=@/nix" ]; + }; - fileSystems."/home" = - { device = "/dev/disk/by-uuid/d4f56e5b-2509-4e63-8324-65a35c71e90c"; - fsType = "btrfs"; - options = [ "subvol=@home" ]; - }; + fileSystems."/home" = { + device = "/dev/disk/by-uuid/d4f56e5b-2509-4e63-8324-65a35c71e90c"; + fsType = "btrfs"; + options = [ "subvol=@home" ]; + }; - fileSystems."/boot/efi" = - { device = "/dev/disk/by-uuid/D478-6F66"; - fsType = "vfat"; - }; + fileSystems."/boot/efi" = { + device = "/dev/disk/by-uuid/D478-6F66"; + fsType = "vfat"; + }; swapDevices = [ ]; @@ -48,5 +47,6 @@ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.cpu.intel.updateMicrocode = + lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/nixos/hosts/thalassa/null/home/neovim.nix b/nixos/hosts/thalassa/null/home/neovim.nix index ac51ba6..983f6a4 100644 --- a/nixos/hosts/thalassa/null/home/neovim.nix +++ b/nixos/hosts/thalassa/null/home/neovim.nix @@ -10,10 +10,10 @@ plugins = { nix.enable = true; - treesitter = { + treesitter = { enable = true; nixGrammars = false; - ensureInstalled = []; + ensureInstalled = [ ]; }; surround.enable = true; fugitive.enable = true; diff --git a/nixos/hosts/thalassa/null/networking.nix b/nixos/hosts/thalassa/null/networking.nix index 66bab88..ccf7a8a 100644 --- a/nixos/hosts/thalassa/null/networking.nix +++ b/nixos/hosts/thalassa/null/networking.nix @@ -1,5 +1,4 @@ -_: -{ +_: { services.v.dns = { enable = true; openFirewall = false; @@ -30,21 +29,11 @@ _: ca_cert="/etc/ssl/certs/ca-bundle.crt" ''; }; - "Pikachu 5G" = { - psk = "@PIKACHU_PASSWORD@"; - }; - "sha256('yeet')" = { - psk = "@SHA256_PASSWORD@"; - }; - "wired" = { - psk = "@WIRED_PASSWORD@"; - }; - "meowy hotspot" = { - psk = "@HOTSPOT_PASSWORD@"; - }; - "WiFi Roest" = { - psk = "@WIFI_ROEST_PASSWORD@"; - }; + "Pikachu 5G" = { psk = "@PIKACHU_PASSWORD@"; }; + "sha256('yeet')" = { psk = "@SHA256_PASSWORD@"; }; + "wired" = { psk = "@WIRED_PASSWORD@"; }; + "meowy hotspot" = { psk = "@HOTSPOT_PASSWORD@"; }; + "WiFi Roest" = { psk = "@WIFI_ROEST_PASSWORD@"; }; }; }; diff --git a/nixos/hosts/thalassa/null/rescue-boot.nix b/nixos/hosts/thalassa/null/rescue-boot.nix index 3f576b0..507b427 100644 --- a/nixos/hosts/thalassa/null/rescue-boot.nix +++ b/nixos/hosts/thalassa/null/rescue-boot.nix @@ -11,9 +11,7 @@ let module = { system.stateVersion = "22.11"; boot.supportedFilesystems = [ "btrfs" "ext4" ]; - environment.systemPackages = with pkgs; [ - git - ]; + environment.systemPackages = with pkgs; [ git ]; }; in { boot.loader.systemd-boot = { @@ -22,7 +20,9 @@ in { title Rescue Boot linux /rescue-kernel initrd /rescue-initrd - options init=${netboot.config.system.build.toplevel}/init ${toString netboot.config.boot.kernelParams} + options init=${netboot.config.system.build.toplevel}/init ${ + toString netboot.config.boot.kernelParams + } ''; }; diff --git a/nixos/pkgs/dnd-5e-latex-template/default.nix b/nixos/pkgs/dnd-5e-latex-template/default.nix index 3114dc7..ef5ffca 100644 --- a/nixos/pkgs/dnd-5e-latex-template/default.nix +++ b/nixos/pkgs/dnd-5e-latex-template/default.nix @@ -1,4 +1,5 @@ -{ stdenvNoCC, fetchFromGitHub }: stdenvNoCC.mkDerivation rec { +{ stdenvNoCC, fetchFromGitHub }: +stdenvNoCC.mkDerivation rec { pname = "dnd-5e-latex-template"; version = "0.8.0"; tlType = "run"; @@ -13,16 +14,14 @@ phases = [ "installPhase" ]; installPhase = '' - runHook preInstall + runHook preInstall - path="$out/tex/latex/${pname}" - mkdir -p "$path" - cp -r $src/* $path + path="$out/tex/latex/${pname}" + mkdir -p "$path" + cp -r $src/* $path - runHook postInstall + runHook postInstall ''; - meta = { - description = "DnD 5e latex template"; - }; + meta = { description = "DnD 5e latex template"; }; } diff --git a/nixos/pkgs/gitea-agatheme/default.nix b/nixos/pkgs/gitea-agatheme/default.nix index ad6460c..ec5fdf7 100644 --- a/nixos/pkgs/gitea-agatheme/default.nix +++ b/nixos/pkgs/gitea-agatheme/default.nix @@ -1,9 +1,11 @@ -{ stdenvNoCC, fetchurl }: stdenvNoCC.mkDerivation { +{ stdenvNoCC, fetchurl }: +stdenvNoCC.mkDerivation { pname = "gitea-agatheme"; version = "1.2"; src = fetchurl { - url = "https://git.lain.faith/attachments/290e2304-92a3-4991-8703-fbbf52f31340"; + url = + "https://git.lain.faith/attachments/290e2304-92a3-4991-8703-fbbf52f31340"; sha256 = "424f4e232c7d759485cdf1bcde9edde50f2992cf6bde61c21f71eae03a905543"; }; diff --git a/nixos/pkgs/glitch-soc/default.nix b/nixos/pkgs/glitch-soc/default.nix index 5db9bd6..fe52d32 100644 --- a/nixos/pkgs/glitch-soc/default.nix +++ b/nixos/pkgs/glitch-soc/default.nix @@ -1,12 +1,10 @@ -{ lib, stdenv, nodejs-slim, bundlerEnv, nixosTests -, yarn, callPackage, imagemagick, ffmpeg, file, ruby_3_0, writeShellScript -, fetchYarnDeps, fixup_yarn_lock +{ lib, stdenv, nodejs-slim, bundlerEnv, nixosTests, yarn, callPackage +, imagemagick, ffmpeg, file, ruby_3_0, writeShellScript, fetchYarnDeps +, fixup_yarn_lock - # Allow building a fork or custom version of Mastodon: -, pname ? "mastodon" -, version ? import ./version.nix -, srcOverride ? null -, dependenciesDir ? ./. # Should contain gemset.nix, yarn.nix and package.json. +# Allow building a fork or custom version of Mastodon: +, pname ? "mastodon", version ? import ./version.nix, srcOverride ? null +, dependenciesDir ? ./. # Should contain gemset.nix, yarn.nix and package.json. }: stdenv.mkDerivation rec { @@ -14,7 +12,8 @@ stdenv.mkDerivation rec { # Using overrideAttrs on src does not build the gems and modules with the overridden src. # Putting the callPackage up in the arguments list also does not work. - src = if srcOverride != null then srcOverride else callPackage ./source.nix {}; + src = + if srcOverride != null then srcOverride else callPackage ./source.nix { }; mastodon-gems = bundlerEnv { name = "${pname}-gems-${version}"; @@ -42,11 +41,17 @@ stdenv.mkDerivation rec { yarnOfflineCache = fetchYarnDeps { yarnLock = "${src}/yarn.lock"; - # sha256 = lib.fakeSha256; - sha256 = "sha256-5KmPgKE1QRPoTjeSYidKt/z9vzWzTOoJVr5dNtofKJY="; + # sha256 = lib.fakeSha256; + sha256 = "sha256-5KmPgKE1QRPoTjeSYidKt/z9vzWzTOoJVr5dNtofKJY="; }; - nativeBuildInputs = [ fixup_yarn_lock nodejs-slim yarn mastodon-gems mastodon-gems.wrappedRuby ]; + nativeBuildInputs = [ + fixup_yarn_lock + nodejs-slim + yarn + mastodon-gems + mastodon-gems.wrappedRuby + ]; RAILS_ENV = "production"; NODE_ENV = "production"; @@ -114,11 +119,12 @@ stdenv.mkDerivation rec { passthru = { tests.mastodon = nixosTests.mastodon; - updateScript = callPackage ./update.nix {}; + updateScript = callPackage ./update.nix { }; }; meta = with lib; { - description = "Self-hosted, globally interconnected microblogging software based on ActivityPub"; + description = + "Self-hosted, globally interconnected microblogging software based on ActivityPub"; homepage = "https://joinmastodon.org"; license = licenses.agpl3Plus; platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" ]; diff --git a/nixos/pkgs/glitch-soc/gemset.nix b/nixos/pkgs/glitch-soc/gemset.nix index 442de5a..ec55391 100644 --- a/nixos/pkgs/glitch-soc/gemset.nix +++ b/nixos/pkgs/glitch-soc/gemset.nix @@ -1,676 +1,741 @@ { actioncable = { - dependencies = ["actionpack" "activesupport" "nio4r" "websocket-driver"]; - groups = ["default"]; - platforms = []; + dependencies = [ "actionpack" "activesupport" "nio4r" "websocket-driver" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0bndmmby5qxq8rs42fbb2ax3hhbjj2ds8wja08s0iadkbrn7shvf"; type = "gem"; }; version = "6.1.7.3"; }; actionmailbox = { - dependencies = ["actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail"]; - groups = ["default"]; - platforms = []; + dependencies = [ + "actionpack" + "activejob" + "activerecord" + "activestorage" + "activesupport" + "mail" + ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0cx00kf0syq5gdhlrmw0q9v92ki55drbsk4gzy86ls2q8xkd792s"; type = "gem"; }; version = "6.1.7.3"; }; actionmailer = { - dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "rails-dom-testing"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ + "actionpack" + "actionview" + "activejob" + "activesupport" + "mail" + "rails-dom-testing" + ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0vbif021cyndq3v3m61dkmgdbbirqk9zcsszb9nisq24m3gx1aai"; type = "gem"; }; version = "6.1.7.3"; }; actionpack = { - dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ + "actionview" + "activesupport" + "rack" + "rack-test" + "rails-dom-testing" + "rails-html-sanitizer" + ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0k6hc7klvn8m88b88vykl83jrpqhn4zz67l2zx9v266xga6fhala"; type = "gem"; }; version = "6.1.7.3"; }; actiontext = { - dependencies = ["actionpack" "activerecord" "activestorage" "activesupport" "nokogiri"]; - groups = ["default"]; - platforms = []; + dependencies = [ + "actionpack" + "activerecord" + "activestorage" + "activesupport" + "nokogiri" + ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "16ldxyxlxl9scggpmkww2fxzim7sl2b4js610pvddcsr74z9fjs7"; type = "gem"; }; version = "6.1.7.3"; }; actionview = { - dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ + "activesupport" + "builder" + "erubi" + "rails-dom-testing" + "rails-html-sanitizer" + ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0ck02cfc17s6g05qn0k7khwvvazwbf2rxbjcma8px2nw2j1ngvcn"; type = "gem"; }; version = "6.1.7.3"; }; active_model_serializers = { - dependencies = ["actionpack" "activemodel" "case_transform" "jsonapi-renderer"]; - groups = ["default"]; - platforms = []; + dependencies = + [ "actionpack" "activemodel" "case_transform" "jsonapi-renderer" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0xdp7cpj3yj3wl4vj0nqq44kzjavlxi1wq3cf9zp0whkir0ym0gy"; type = "gem"; }; version = "0.10.13"; }; activejob = { - dependencies = ["activesupport" "globalid"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "activesupport" "globalid" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "05bkw9qgjgj2nxzjj2fh6jp1fcvgff0aa4r77k0gcfmnzc1g8wdl"; type = "gem"; }; version = "6.1.7.3"; }; activemodel = { - dependencies = ["activesupport"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "activesupport" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "03hy5bwghdklcxbdylmsq70y0qzslck5slb2zkvp7g6mmvk86kwd"; type = "gem"; }; version = "6.1.7.3"; }; activerecord = { - dependencies = ["activemodel" "activesupport"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "activemodel" "activesupport" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1alshkgbcxp9s4vqb2b0yrrnyg15kxhlp1slsb03a61w7h42pspw"; type = "gem"; }; version = "6.1.7.3"; }; activestorage = { - dependencies = ["actionpack" "activejob" "activerecord" "activesupport" "marcel" "mini_mime"]; - groups = ["default"]; - platforms = []; + dependencies = [ + "actionpack" + "activejob" + "activerecord" + "activesupport" + "marcel" + "mini_mime" + ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "06w4wlabqqr9bwdig44r5vdwkcbbivwgwn2fl775w7h05vrccgp8"; type = "gem"; }; version = "6.1.7.3"; }; activesupport = { - dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ "concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk" ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "06mihpy83a5xmavvn7l8vbix472dsi0vh30xj6g594k0679m0ir6"; type = "gem"; }; version = "6.1.7.3"; }; addressable = { - dependencies = ["public_suffix"]; - groups = ["default" "development" "test"]; - platforms = []; + dependencies = [ "public_suffix" ]; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "15s8van7r2ad3dq6i03l3z4hqnvxcq75a3h72kxvf9an53sqma20"; type = "gem"; }; version = "2.8.4"; }; aes_key_wrap = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "19bn0y70qm6mfj4y1m0j3s8ggh6dvxwrwrj5vfamhdrpddsz8ddr"; type = "gem"; }; version = "1.1.0"; }; airbrussh = { - dependencies = ["sshkit"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "sshkit" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0x55y3ynkda76pwnsvrrjlvxfcc7yn1irad8radll9c9cif41jqv"; type = "gem"; }; version = "1.4.1"; }; android_key_attestation = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "02spc1sh7zsljl02v9d5rdb717b628vw2k7jkkplifyjk4db0zj6"; type = "gem"; }; version = "0.3.0"; }; annotate = { - dependencies = ["activerecord" "rake"]; - groups = ["development"]; - platforms = []; + dependencies = [ "activerecord" "rake" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1lw0fxb5mirsdp3bp20gjyvs7clvi19jbxnrm2ihm20kzfhvlqcs"; type = "gem"; }; version = "3.2.0"; }; ast = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y"; type = "gem"; }; version = "2.4.2"; }; attr_encrypted = { - dependencies = ["encryptor"]; - groups = ["default"]; - platforms = []; + dependencies = [ "encryptor" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "034x6mbrv9apd83v99v9pm8vl3d17w5bbwws26gr4wv95fylmgnc"; type = "gem"; }; version = "4.0.0"; }; attr_required = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1g22axmi2rhhy7w8c3x6gppsawxqavbrnxpnmphh22fk7cwi0kh2"; type = "gem"; }; version = "1.0.1"; }; awrence = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0gj8f8c54r9cabkm41s59sa1ca5wpbipw7gq3sfl87x9296227fx"; type = "gem"; }; version = "1.2.1"; }; aws-eventstream = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz"; type = "gem"; }; version = "1.2.0"; }; aws-partitions = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "18ndv604p1p3gkyy0d958jx2wp74d100q6vbc6ak70a7bv93wqsg"; type = "gem"; }; version = "1.752.0"; }; aws-sdk-core = { - dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"]; - groups = ["default"]; - platforms = []; + dependencies = + [ "aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0732vv8zi67z25fss1sdvqx0vv1ap3w6hz1avxzwznkjp002vj39"; type = "gem"; }; version = "3.171.0"; }; aws-sdk-kms = { - dependencies = ["aws-sdk-core" "aws-sigv4"]; - groups = ["default"]; - platforms = []; + dependencies = [ "aws-sdk-core" "aws-sigv4" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0v87zi28dfmrv7bv91yfldccnpd63n295siirbz7wqv1rajn8n02"; type = "gem"; }; version = "1.63.0"; }; aws-sdk-s3 = { - dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"]; - groups = ["default"]; - platforms = []; + dependencies = [ "aws-sdk-core" "aws-sdk-kms" "aws-sigv4" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1s5v3799pi7ik53gv7dl02am5pngv6x4azzwx9my09nll4q3lfk8"; type = "gem"; }; version = "1.121.0"; }; aws-sigv4 = { - dependencies = ["aws-eventstream"]; - groups = ["default"]; - platforms = []; + dependencies = [ "aws-eventstream" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "11hkna2av47bl0yprgp8k4ya70rc3m2ib5w10fn0piplgkkmhz7m"; type = "gem"; }; version = "1.5.2"; }; bcrypt = { - groups = ["default" "pam_authentication"]; - platforms = []; + groups = [ "default" "pam_authentication" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "048z3fvcknqx7ikkhrcrykxlqmf9bzc7l0y5h1cnvrc9n2qf0k8m"; type = "gem"; }; version = "3.1.18"; }; better_errors = { - dependencies = ["coderay" "erubi" "rack"]; - groups = ["development"]; - platforms = []; + dependencies = [ "coderay" "erubi" "rack" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "11220lfzhsyf5fcril3qd689kgg46qlpiiaj00hc9mh4mcbc3vrr"; type = "gem"; }; version = "2.9.1"; }; better_html = { - dependencies = ["actionview" "activesupport" "ast" "erubi" "parser" "smart_properties"]; - groups = ["default" "development" "test"]; - platforms = []; + dependencies = [ + "actionview" + "activesupport" + "ast" + "erubi" + "parser" + "smart_properties" + ]; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1y090dmgjxr3yzxi3pg5jgirkmyfdrmjhabmzmhg5i8ssiqr2gdz"; type = "gem"; }; version = "2.0.1"; }; bindata = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "04y4zgh4bbcb8wmkxwfqg4saky1d1f3xw8z6yk543q13h8ky8rz5"; type = "gem"; }; version = "2.4.15"; }; binding_of_caller = { - dependencies = ["debug_inspector"]; - groups = ["development"]; - platforms = []; + dependencies = [ "debug_inspector" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "078n2dkpgsivcf0pr50981w95nfc2bsrp3wpf9wnxz1qsp8jbb9s"; type = "gem"; }; version = "1.0.0"; }; blurhash = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "057afgqy73n8vm7k3cr4pbwm1hhqnm58lp4x7bgm5wzbs39m7xf8"; type = "gem"; }; version = "0.1.7"; }; bootsnap = { - dependencies = ["msgpack"]; - groups = ["default"]; - platforms = []; + dependencies = [ "msgpack" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1vcg52gwl64xhhal6kwk1pc01y1klzdlnv1awyk89kb91z010x7q"; type = "gem"; }; version = "1.16.0"; }; brakeman = { - groups = ["development"]; - platforms = []; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0wzvxpabnjwwjgr9s13965dbdgl3qfvwjbmhimh83p81bm5lsrnw"; type = "gem"; }; version = "5.4.1"; }; browser = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0g4bcpax07kqqr9cp7cjc7i0pcij4nqpn1rdsg2wdwhzf00m6x32"; type = "gem"; }; version = "5.3.1"; }; brpoplpush-redis_script = { - dependencies = ["concurrent-ruby" "redis"]; - groups = ["default"]; - platforms = []; + dependencies = [ "concurrent-ruby" "redis" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1nd5zj5yqmhv9lrsqz8s2dqq28v4ywy95qrw7nzhhf89dl4dq49l"; type = "gem"; }; version = "0.1.3"; }; builder = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr"; type = "gem"; }; version = "3.2.4"; }; bundler-audit = { - dependencies = ["thor"]; - groups = ["development"]; - platforms = []; + dependencies = [ "thor" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0gdx0019vj04n1512shhdx7hwphzqmdpw4vva2k551nd47y1dixx"; type = "gem"; }; version = "0.9.1"; }; capistrano = { - dependencies = ["airbrussh" "i18n" "rake" "sshkit"]; - groups = ["development"]; - platforms = []; + dependencies = [ "airbrussh" "i18n" "rake" "sshkit" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0nwn1a20q7xmlsgjqzf8msicyi6wkrjvgw62625717323ymz6qsr"; type = "gem"; }; version = "3.17.2"; }; capistrano-bundler = { - dependencies = ["capistrano"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "capistrano" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "09rndb1fa9r7mhb2sc6p3k0pcarhg8mv0kfmvd1zdb0ciwwp7514"; type = "gem"; }; version = "2.1.0"; }; capistrano-rails = { - dependencies = ["capistrano" "capistrano-bundler"]; - groups = ["development"]; - platforms = []; + dependencies = [ "capistrano" "capistrano-bundler" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1iyhs77bff09g18dlz0li5f44khjwpqc09gk5hzcnf5v9yvijpg9"; type = "gem"; }; version = "1.6.2"; }; capistrano-rbenv = { - dependencies = ["capistrano" "sshkit"]; - groups = ["development"]; - platforms = []; + dependencies = [ "capistrano" "sshkit" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1x9m1i5zd0wx122zw3m40zprlmxk9d47bd6w61k81wr4qsvkk3rw"; type = "gem"; }; version = "2.2.0"; }; capistrano-yarn = { - dependencies = ["capistrano"]; - groups = ["development"]; - platforms = []; + dependencies = [ "capistrano" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1zdg2s061vl5b8114n909mrjb2hc1qx0i4wqx9nacsrcjgyp07l9"; type = "gem"; }; version = "2.0.2"; }; capybara = { - dependencies = ["addressable" "matrix" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; - groups = ["test"]; - platforms = []; + dependencies = [ + "addressable" + "matrix" + "mini_mime" + "nokogiri" + "rack" + "rack-test" + "regexp_parser" + "xpath" + ]; + groups = [ "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "06b4nlhirsq8ny17s8zgz7qyvl9v41rixj1xkviiiwxlnjz982d3"; type = "gem"; }; version = "3.39.0"; }; case_transform = { - dependencies = ["activesupport"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activesupport" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0fzyws6spn5arqf6q604dh9mrj84a36k5hsc8z7jgcpfvhc49bg2"; type = "gem"; }; version = "0.2"; }; cbor = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0511idr8xps9625nh3kxr68sdy6l3xy2kcz7r57g47fxb1v18jj3"; type = "gem"; }; version = "0.5.9.6"; }; charlock_holmes = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0hybw8jw9ryvz5zrki3gc9r88jqy373m6v46ynxsdzv1ysiyr40p"; type = "gem"; }; version = "0.7.7"; }; chewy = { - dependencies = ["activesupport" "elasticsearch" "elasticsearch-dsl"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activesupport" "elasticsearch" "elasticsearch-dsl" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1wxq6396814ngwnvwcjkkqm8ji8d7q385gw53kr1dbfihiivlizq"; type = "gem"; }; version = "7.3.2"; }; chunky_png = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1znw5x86hmm9vfhidwdsijz8m38pqgmv98l9ryilvky0aldv7mc9"; type = "gem"; }; version = "1.4.0"; }; climate_control = { - groups = ["test"]; - platforms = []; + groups = [ "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0q11v0iabvr6rif0d025xh078ili5frrihlj0m04zfg7lgvagxji"; type = "gem"; }; version = "0.2.0"; }; cocoon = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "038z97pkhvsqbh6cmyyzj58ya968p24k7r0f0rx7sa2kjvk193yh"; type = "gem"; }; version = "1.2.15"; }; coderay = { - groups = ["default" "development"]; - platforms = []; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw"; type = "gem"; }; version = "1.1.3"; }; color_diff = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "01dpvqlzybpb3pkcwd9ik5sbjw283618ywvdphxslhiy8ps3kp4r"; type = "gem"; }; version = "0.1"; }; concurrent-ruby = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q"; type = "gem"; }; version = "1.2.2"; }; connection_pool = { - groups = ["default" "test"]; - platforms = []; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0dndngqvkm2ih3wqn5ilf9980c1cc57lqn5lywx3myalzpilq05z"; type = "gem"; }; version = "2.4.0"; }; cose = { - dependencies = ["cbor" "openssl-signature_algorithm"]; - groups = ["default"]; - platforms = []; + dependencies = [ "cbor" "openssl-signature_algorithm" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "00c6x4ha7qiaaf88qdbyf240mk146zz78rbm4qwyaxmwlmk7q933"; type = "gem"; }; version = "1.3.0"; }; crack = { - dependencies = ["rexml"]; - groups = ["default" "test"]; - platforms = []; + dependencies = [ "rexml" ]; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1cr1kfpw3vkhysvkk3wg7c54m75kd68mbm9rs5azdjdq57xid13r"; type = "gem"; }; version = "0.4.5"; }; crass = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw"; type = "gem"; }; version = "1.0.6"; }; css_parser = { - dependencies = ["addressable"]; - groups = ["default"]; - platforms = []; + dependencies = [ "addressable" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "04q1vin8slr3k8mp76qz0wqgap6f9kdsbryvgfq9fljhrm463kpj"; type = "gem"; }; version = "1.14.0"; }; date = { - groups = ["default" "development"]; - platforms = []; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "03skfikihpx37rc27vr3hwrb057gxnmdzxhmzd4bf4jpkl0r55w1"; type = "gem"; }; version = "3.3.3"; }; debug_inspector = { - groups = ["default" "development"]; - platforms = []; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "01l678ng12rby6660pmwagmyg8nccvjfgs3487xna7ay378a59ga"; type = "gem"; }; version = "1.1.0"; }; devise = { - dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"]; - groups = ["default" "pam_authentication"]; - platforms = []; + dependencies = [ "bcrypt" "orm_adapter" "railties" "responders" "warden" ]; + groups = [ "default" "pam_authentication" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0vpd7d61d4pfmyb2plnnv82wmczzlhw4k4gjhd2fv4r6vq8ilqqi"; type = "gem"; }; version = "4.9.2"; }; devise-two-factor = { - dependencies = ["activesupport" "attr_encrypted" "devise" "railties" "rotp"]; - groups = ["default"]; - platforms = []; + dependencies = + [ "activesupport" "attr_encrypted" "devise" "railties" "rotp" ]; + groups = [ "default" ]; + platforms = [ ]; source = { fetchSubmodules = false; rev = "e685f91ce62d036259885fbe31fcb4fa930bcfcb"; @@ -681,784 +746,823 @@ version = "4.0.2"; }; devise_pam_authenticatable2 = { - dependencies = ["devise" "rpam2"]; - groups = ["pam_authentication"]; - platforms = []; + dependencies = [ "devise" "rpam2" ]; + groups = [ "pam_authentication" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "13ipl52pkhc6vxp8ca31viwv01237bi2bfk3b1fixq1x46nf87p2"; type = "gem"; }; version = "9.2.0"; }; diff-lcs = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9"; type = "gem"; }; version = "1.5.0"; }; discard = { - dependencies = ["activerecord"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activerecord" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1xavjhccyyzn9z6fz3034vgvzprc983mbrq6n9sc0drfw7m3vrip"; type = "gem"; }; version = "1.2.1"; }; docile = { - groups = ["default" "test"]; - platforms = []; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1lxqxgq71rqwj1lpl9q1mbhhhhhhdkkj7my341f2889pwayk85sz"; type = "gem"; }; version = "1.4.0"; }; domain_name = { - dependencies = ["unf"]; - groups = ["default"]; - platforms = []; + dependencies = [ "unf" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0"; type = "gem"; }; version = "0.5.20190701"; }; doorkeeper = { - dependencies = ["railties"]; - groups = ["default"]; - platforms = []; + dependencies = [ "railties" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1q2pywgyn6cbnm0fh3dln5z1qgd1g8hvb4x8rppjc1bpfxnfhi13"; type = "gem"; }; version = "5.6.6"; }; dotenv = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1n0pi8x8ql5h1mijvm8lgn6bhq4xjb5a500p5r1krq4s6j9lg565"; type = "gem"; }; version = "2.8.1"; }; dotenv-rails = { - dependencies = ["dotenv" "railties"]; - groups = ["default"]; - platforms = []; + dependencies = [ "dotenv" "railties" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0v0gcbxzypcvy6fqq4gp80jb310xvdwj5n8qw9ci67g5yjvq2nxh"; type = "gem"; }; version = "2.8.1"; }; ed25519 = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0zb2dr2ihb1qiknn5iaj1ha1w9p7lj9yq5waasndlfadz225ajji"; type = "gem"; }; version = "1.3.0"; }; elasticsearch = { - dependencies = ["elasticsearch-api" "elasticsearch-transport"]; - groups = ["default"]; - platforms = []; + dependencies = [ "elasticsearch-api" "elasticsearch-transport" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0havyxmvl157a653prspnbhgdchlx44xqxl170v1im5ggxwavcaq"; type = "gem"; }; version = "7.13.3"; }; elasticsearch-api = { - dependencies = ["multi_json"]; - groups = ["default"]; - platforms = []; + dependencies = [ "multi_json" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0bmssarkk7lqkjdn8c9j7jvxcnn4hg1zcmhsky8bfvc99k33b3w8"; type = "gem"; }; version = "7.13.3"; }; elasticsearch-dsl = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "174m3fwm3mawbkjg2xbmqvljq7ava4s95m8vpg5khcvfj506wxfk"; type = "gem"; }; version = "0.1.10"; }; elasticsearch-transport = { - dependencies = ["faraday" "multi_json"]; - groups = ["default"]; - platforms = []; + dependencies = [ "faraday" "multi_json" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0blfii8qvj0m6bg9sbfynxc40in7zfmw2wpi4clv7d9gclk053db"; type = "gem"; }; version = "7.13.3"; }; encryptor = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0s8rvfl0vn8w7k1sgkc234060jh468s3zd45xa64p1jdmfa3zwmb"; type = "gem"; }; version = "3.0.0"; }; erubi = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "08s75vs9cxlc4r1q2bjg4br8g9wc5lc5x5vl0vv4zq5ivxsdpgi7"; type = "gem"; }; version = "1.12.0"; }; et-orbi = { - dependencies = ["tzinfo"]; - groups = ["default"]; - platforms = []; + dependencies = [ "tzinfo" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1d2z4ky2v15dpcz672i2p7lb2nc793dasq3yq3660h2az53kss9v"; type = "gem"; }; version = "1.2.7"; }; excon = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0j826kfvzn7nc5pv950n270r0sx1702k988ad11cdlav3dcxxw09"; type = "gem"; }; version = "0.99.0"; }; fabrication = { - groups = ["development" "test"]; - platforms = []; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0bxssmjp49whzq2zv7w751gr4nkdaiwcxd1vda0byigwyrnj6f5q"; type = "gem"; }; version = "2.30.0"; }; faker = { - dependencies = ["i18n"]; - groups = ["test"]; - platforms = []; + dependencies = [ "i18n" ]; + groups = [ "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1i3l58jrcapkp70v3swr0x4s6bj1101920al50wsaaj9dv0vhvm7"; type = "gem"; }; version = "3.2.0"; }; faraday = { - dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-multipart" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "faraday-retry" "ruby2_keywords"]; - groups = ["default"]; - platforms = []; + dependencies = [ + "faraday-em_http" + "faraday-em_synchrony" + "faraday-excon" + "faraday-httpclient" + "faraday-multipart" + "faraday-net_http" + "faraday-net_http_persistent" + "faraday-patron" + "faraday-rack" + "faraday-retry" + "ruby2_keywords" + ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1c760q0ks4vj4wmaa7nh1dgvgqiwaw0mjr7v8cymy7i3ffgjxx90"; type = "gem"; }; version = "1.10.3"; }; faraday-em_http = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs"; type = "gem"; }; version = "1.0.0"; }; faraday-em_synchrony = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6"; type = "gem"; }; version = "1.0.0"; }; faraday-excon = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh"; type = "gem"; }; version = "1.1.0"; }; faraday-httpclient = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc"; type = "gem"; }; version = "1.0.1"; }; faraday-multipart = { - dependencies = ["multipart-post"]; - groups = ["default"]; - platforms = []; + dependencies = [ "multipart-post" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "09871c4hd7s5ws1wl4gs7js1k2wlby6v947m2bbzg43pnld044lh"; type = "gem"; }; version = "1.0.4"; }; faraday-net_http = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j"; type = "gem"; }; version = "1.0.1"; }; faraday-net_http_persistent = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b"; type = "gem"; }; version = "1.2.0"; }; faraday-patron = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w"; type = "gem"; }; version = "1.0.0"; }; faraday-rack = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g"; type = "gem"; }; version = "1.0.0"; }; faraday-retry = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "153i967yrwnswqgvnnajgwp981k9p50ys1h80yz3q94rygs59ldd"; type = "gem"; }; version = "1.0.3"; }; fast_blank = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1shpmamyzyhyxmv95r96ja5rylzaw60r19647d0fdm7y2h2c77r6"; type = "gem"; }; version = "1.0.1"; }; fastimage = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0nnggg20za5vamdpkgrxxa32z33d8hf0g2bciswkhqnc6amb3yjr"; type = "gem"; }; version = "2.2.6"; }; ffi = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg"; type = "gem"; }; version = "1.15.5"; }; ffi-compiler = { - dependencies = ["ffi" "rake"]; - groups = ["default"]; - platforms = []; + dependencies = [ "ffi" "rake" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0c2caqm9wqnbidcb8dj4wd3s902z15qmgxplwyfyqbwa0ydki7q1"; type = "gem"; }; version = "1.0.1"; }; fog-core = { - dependencies = ["builder" "excon" "formatador" "mime-types"]; - groups = ["default"]; - platforms = []; + dependencies = [ "builder" "excon" "formatador" "mime-types" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1agd6xgzk0rxrsjdpn94v4hy89s0nm2cs4zg2p880w2dan9xgrak"; type = "gem"; }; version = "2.1.0"; }; fog-json = { - dependencies = ["fog-core" "multi_json"]; - groups = ["default"]; - platforms = []; + dependencies = [ "fog-core" "multi_json" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx"; type = "gem"; }; version = "1.2.0"; }; fog-openstack = { - dependencies = ["fog-core" "fog-json" "ipaddress"]; - groups = ["default"]; - platforms = []; + dependencies = [ "fog-core" "fog-json" "ipaddress" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "11j18h61d3p0pcp9k5346lbj1lahab1dqybkrx9338932lmjn7ap"; type = "gem"; }; version = "0.3.10"; }; formatador = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0mprf1dwznz5ld0q1jpbyl59fwnwk6azspnd0am7zz7kfg3pxhv5"; type = "gem"; }; version = "0.3.0"; }; fugit = { - dependencies = ["et-orbi" "raabro"]; - groups = ["default"]; - platforms = []; + dependencies = [ "et-orbi" "raabro" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1cm2lrvhrpqq19hbdsxf4lq2nkb2qdldbdxh3gvi15l62dlb5zqq"; type = "gem"; }; version = "1.8.1"; }; fuubar = { - dependencies = ["rspec-core" "ruby-progressbar"]; - groups = ["development" "test"]; - platforms = []; + dependencies = [ "rspec-core" "ruby-progressbar" ]; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1028vn7j3kc5qqwswrf3has3qm4j9xva70xmzb3n29i89f0afwmj"; type = "gem"; }; version = "2.5.1"; }; globalid = { - dependencies = ["activesupport"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "activesupport" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0kqm5ndzaybpnpxqiqkc41k4ksyxl41ln8qqr6kb130cdxsf2dxk"; type = "gem"; }; version = "1.1.0"; }; haml = { - dependencies = ["temple" "thor" "tilt"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "temple" "thor" "tilt" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1vcr5wcvfbsq91302playk3i98wdisspkybcmajl04agv4k8xr68"; type = "gem"; }; version = "6.1.1"; }; haml-rails = { - dependencies = ["actionpack" "activesupport" "haml" "railties"]; - groups = ["default"]; - platforms = []; + dependencies = [ "actionpack" "activesupport" "haml" "railties" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1sjrdwc4azzfpsp2xk0365z031482gcrs0c54d5wx0igkqca0fr7"; type = "gem"; }; version = "2.1.0"; }; haml_lint = { - dependencies = ["haml" "parallel" "rainbow" "rubocop" "sysexits"]; - groups = ["development"]; - platforms = []; + dependencies = [ "haml" "parallel" "rainbow" "rubocop" "sysexits" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1yz5g7ffyv99vd9x3yj64ba4zv2bd71gmgrf60a3kc8m1cvc1z5p"; type = "gem"; }; version = "0.45.0"; }; hashdiff = { - groups = ["default" "test"]; - platforms = []; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1nynpl0xbj0nphqx1qlmyggq58ms1phf5i03hk64wcc0a17x1m1c"; type = "gem"; }; version = "1.0.1"; }; hashie = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1nh3arcrbz1rc1cr59qm53sdhqm137b258y8rcb4cvd3y98lwv4x"; type = "gem"; }; version = "5.0.0"; }; hcaptcha = { - dependencies = ["json"]; - groups = ["default"]; - platforms = []; + dependencies = [ "json" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0fh6391zlv2ikvzqj2gymb70k1avk1j9da8bzgw0scsz2wqq98m2"; type = "gem"; }; version = "7.1.0"; }; highline = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1f8cr014j7mdqpdb9q17fp5vb5b8n1pswqaif91s3ylg5x3pygfn"; type = "gem"; }; version = "2.1.0"; }; hiredis = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "04jj8k7lxqxw24sp0jiravigdkgsyrpprxpxm71ba93x1wr2w1bz"; type = "gem"; }; version = "0.6.3"; }; hkdf = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "04fixg0a51n4vy0j6c1hvisa2yl33m3jrrpxpb5sq6j511vjriil"; type = "gem"; }; version = "0.3.0"; }; htmlentities = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj"; type = "gem"; }; version = "4.3.4"; }; http = { - dependencies = ["addressable" "http-cookie" "http-form_data" "llhttp-ffi"]; - groups = ["default"]; - platforms = []; + dependencies = + [ "addressable" "http-cookie" "http-form_data" "llhttp-ffi" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1bzb8p31kzv6q5p4z5xq88mnqk414rrw0y5rkhpnvpl29x5c3bpw"; type = "gem"; }; version = "5.1.1"; }; http-cookie = { - dependencies = ["domain_name"]; - groups = ["default"]; - platforms = []; + dependencies = [ "domain_name" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk"; type = "gem"; }; version = "1.0.5"; }; http-form_data = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1wx591jdhy84901pklh1n9sgh74gnvq1qyqxwchni1yrc49ynknc"; type = "gem"; }; version = "2.3.0"; }; http_accept_language = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0"; type = "gem"; }; version = "2.1.1"; }; httpclient = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99"; type = "gem"; }; version = "2.8.3"; }; httplog = { - dependencies = ["rack" "rainbow"]; - groups = ["default"]; - platforms = []; + dependencies = [ "rack" "rainbow" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0zjsgrlvwpqsnrza4ijlxjld4550c661sgbqp2j2wp638nlnls1a"; type = "gem"; }; version = "1.6.2"; }; i18n = { - dependencies = ["concurrent-ruby"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ "concurrent-ruby" ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi"; type = "gem"; }; version = "1.12.0"; }; i18n-tasks = { - dependencies = ["activesupport" "ast" "better_html" "erubi" "highline" "i18n" "parser" "rails-i18n" "rainbow" "terminal-table"]; - groups = ["development" "test"]; - platforms = []; + dependencies = [ + "activesupport" + "ast" + "better_html" + "erubi" + "highline" + "i18n" + "parser" + "rails-i18n" + "rainbow" + "terminal-table" + ]; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "19zkcsqwzc3i6vizj26mxxww6m5grv9zmp6yxyswbqq9kyzb081z"; type = "gem"; }; version = "1.0.12"; }; idn-ruby = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0dy04jx3n1ddz744b80mg7hp87miysnjp0h21lqr43hpmhdglxih"; type = "gem"; }; version = "0.1.5"; }; ipaddress = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45"; type = "gem"; }; version = "0.8.3"; }; jmespath = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393"; type = "gem"; }; version = "1.6.2"; }; json = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6"; type = "gem"; }; version = "2.6.3"; }; json-canonicalization = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0zc3ndnp4rjqg98cy2dd9x266vk23rz4mpl8afwn26vj49si56av"; type = "gem"; }; version = "0.3.1"; }; json-jwt = { - dependencies = ["activesupport" "aes_key_wrap" "bindata" "httpclient"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activesupport" "aes_key_wrap" "bindata" "httpclient" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "04315mf4p9qa97grdfqv922paghzdfrbb982ap0p99rqwla4znv6"; type = "gem"; }; version = "1.15.3"; }; json-ld = { - dependencies = ["htmlentities" "json-canonicalization" "link_header" "multi_json" "rack" "rdf"]; - groups = ["default"]; - platforms = []; + dependencies = [ + "htmlentities" + "json-canonicalization" + "link_header" + "multi_json" + "rack" + "rdf" + ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "02lz2fgqmp3dr5q05hagk01knds69n33k0ljjgdj9a7ajapwgvhf"; type = "gem"; }; version = "3.2.4"; }; json-ld-preloaded = { - dependencies = ["json-ld" "rdf"]; - groups = ["default"]; - platforms = []; + dependencies = [ "json-ld" "rdf" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "004s52m37b2kbw8dv4rdfm2d90h1023z1mw9zfcs0x87v8aq7zyn"; type = "gem"; }; version = "3.2.2"; }; json-schema = { - dependencies = ["addressable"]; - groups = ["test"]; - platforms = []; + dependencies = [ "addressable" ]; + groups = [ "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "155rygs093i8i04i38a97hs5icmqk2jkkhx76w31yxyr3bxfbgx3"; type = "gem"; }; version = "4.0.0"; }; jsonapi-renderer = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0ys4drd0k9rw5ixf8n8fx8v0pjh792w4myh0cpdspd317l1lpi5m"; type = "gem"; }; version = "0.2.2"; }; jwt = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "09yj3z5snhaawh2z1w45yyihzmh57m6m7dp8ra8gxavhj5kbiq5p"; type = "gem"; }; version = "2.7.0"; }; kaminari = { - dependencies = ["activesupport" "kaminari-actionview" "kaminari-activerecord" "kaminari-core"]; - groups = ["default"]; - platforms = []; + dependencies = [ + "activesupport" + "kaminari-actionview" + "kaminari-activerecord" + "kaminari-core" + ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0gia8irryvfhcr6bsr64kpisbgdbqjsqfgrk12a11incmpwny1y4"; type = "gem"; }; version = "1.2.2"; }; kaminari-actionview = { - dependencies = ["actionview" "kaminari-core"]; - groups = ["default"]; - platforms = []; + dependencies = [ "actionview" "kaminari-core" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "02f9ghl3a9b5q7l079d3yzmqjwkr4jigi7sldbps992rigygcc0k"; type = "gem"; }; version = "1.2.2"; }; kaminari-activerecord = { - dependencies = ["activerecord" "kaminari-core"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activerecord" "kaminari-core" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0c148z97s1cqivzbwrak149z7kl1rdmj7dxk6rpkasimmdxsdlqd"; type = "gem"; }; version = "1.2.2"; }; kaminari-core = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1zw3pg6kj39y7jxakbx7if59pl28lhk98fx71ks5lr3hfgn6zliv"; type = "gem"; }; version = "1.2.2"; }; kt-paperclip = { - dependencies = ["activemodel" "activesupport" "marcel" "mime-types" "terrapin"]; - groups = ["default"]; - platforms = []; + dependencies = + [ "activemodel" "activesupport" "marcel" "mime-types" "terrapin" ]; + groups = [ "default" ]; + platforms = [ ]; source = { fetchSubmodules = false; rev = "11abf222dc31bff71160a1d138b445214f434b2b"; @@ -1469,761 +1573,798 @@ version = "7.1.1"; }; launchy = { - dependencies = ["addressable"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "addressable" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "06r43899384das2bkbrpsdxsafyyqa94il7111053idfalb4984a"; type = "gem"; }; version = "2.5.2"; }; letter_opener = { - dependencies = ["launchy"]; - groups = ["development"]; - platforms = []; + dependencies = [ "launchy" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1y5d4ip4l12v58bgazadl45iv3a5j7jp2gwg96b6jy378zn42a1d"; type = "gem"; }; version = "1.8.1"; }; letter_opener_web = { - dependencies = ["actionmailer" "letter_opener" "railties" "rexml"]; - groups = ["development"]; - platforms = []; + dependencies = [ "actionmailer" "letter_opener" "railties" "rexml" ]; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0vvvaz2ngaxv0s6sj25gdvp73vd8pfl8q3jharadg18p3va0m1ik"; type = "gem"; }; version = "2.0.0"; }; link_header = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1yamrdq4rywmnpdhbygnkkl9fdy249fg5r851nrkkxr97gj5rihm"; type = "gem"; }; version = "0.0.8"; }; llhttp-ffi = { - dependencies = ["ffi-compiler" "rake"]; - groups = ["default"]; - platforms = []; + dependencies = [ "ffi-compiler" "rake" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "00dh6zmqdj59rhcya0l4b9aaxq6n8xizfbil93k0g06gndyk5xz5"; type = "gem"; }; version = "0.4.0"; }; lograge = { - dependencies = ["actionpack" "activesupport" "railties" "request_store"]; - groups = ["production"]; - platforms = []; + dependencies = [ "actionpack" "activesupport" "railties" "request_store" ]; + groups = [ "production" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "15pjm9pa5m3mbv9xvfgfr16q4jyaznsg8y63jz9x4jqr8npw0vx3"; type = "gem"; }; version = "0.12.0"; }; loofah = { - dependencies = ["crass" "nokogiri"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ "crass" "nokogiri" ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1mi4ia13fisc97fzd8xcd9wkjdki7zfbmdn1xkdzplicir68gyp8"; type = "gem"; }; version = "2.20.0"; }; mail = { - dependencies = ["mini_mime" "net-imap" "net-pop" "net-smtp"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "mini_mime" "net-imap" "net-pop" "net-smtp" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1bf9pysw1jfgynv692hhaycfxa8ckay1gjw5hz3madrbrynryfzc"; type = "gem"; }; version = "2.8.1"; }; makara = { - dependencies = ["activerecord"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activerecord" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0a6x6w1ij484s1z0wp667d6v0zb8bylhhr3av10yz60a2nz4r1l7"; type = "gem"; }; version = "0.5.1"; }; marcel = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0kky3yiwagsk8gfbzn3mvl2fxlh3b39v6nawzm4wpjs6xxvvc4x0"; type = "gem"; }; version = "1.0.2"; }; mario-redis-lock = { - dependencies = ["redis"]; - groups = ["default"]; - platforms = []; + dependencies = [ "redis" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1v9wdjcjqzpns2migxp4a5b4w82mipi0fwihbqz3q2qj2qm7wc17"; type = "gem"; }; version = "1.2.1"; }; matrix = { - groups = ["default" "test"]; - platforms = []; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1h2cgkpzkh3dd0flnnwfq6f3nl2b1zff9lvqz8xs853ssv5kq23i"; type = "gem"; }; version = "0.4.2"; }; memory_profiler = { - groups = ["development"]; - platforms = []; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1c81d68r4wx0ckbmqxlfqc2qpd94jwcmqdm0xgr0s46r48pv9k9q"; type = "gem"; }; version = "1.0.1"; }; method_source = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp"; type = "gem"; }; version = "1.0.0"; }; mime-types = { - dependencies = ["mime-types-data"]; - groups = ["default"]; - platforms = []; + dependencies = [ "mime-types-data" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb"; type = "gem"; }; version = "3.4.1"; }; mime-types-data = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1pky3vzaxlgm9gw5wlqwwi7wsw3jrglrfflrppvvnsrlaiz043z9"; type = "gem"; }; version = "3.2023.0218.1"; }; mini_mime = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5"; type = "gem"; }; version = "1.1.2"; }; mini_portile2 = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1af4yarhbbx62f7qsmgg5fynrik0s36wjy3difkawy536xg343mp"; type = "gem"; }; version = "2.8.1"; }; minitest = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0ic7i5z88zcaqnpzprf7saimq2f6sad57g5mkkqsrqrcd6h3mx06"; type = "gem"; }; version = "5.18.0"; }; msgpack = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "172ky0r1jfcm3xyg067pia7k1lhc15vw9svv93max120gcdbrvji"; type = "gem"; }; version = "1.7.0"; }; multi_json = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z"; type = "gem"; }; version = "1.15.0"; }; multipart-post = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0lgyysrpl50wgcb9ahg29i4p01z0irb3p9lirygma0kkfr5dgk9x"; type = "gem"; }; version = "2.3.0"; }; net-http = { - dependencies = ["uri"]; - groups = ["default"]; - platforms = []; + dependencies = [ "uri" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0y55ib1v2b8prqfi9ij7hca60b1j94s2bzr6vskwi3i5735472wq"; type = "gem"; }; version = "0.3.2"; }; net-imap = { - dependencies = ["date" "net-protocol"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "date" "net-protocol" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1d996zf3g8xz244791b0qsl9vr7zg4lqnnmf9k2kshr9lki5jam8"; type = "gem"; }; version = "0.3.4"; }; net-ldap = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0xqcffn3c1564c4fizp10dzw2v5g2pabdzrcn25hq05bqhsckbar"; type = "gem"; }; version = "0.18.0"; }; net-pop = { - dependencies = ["net-protocol"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "net-protocol" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1wyz41jd4zpjn0v1xsf9j778qx1vfrl24yc20cpmph8k42c4x2w4"; type = "gem"; }; version = "0.1.2"; }; net-protocol = { - dependencies = ["timeout"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "timeout" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0dxckrlw4q1lcn3qg4mimmjazmg9bma5gllv72f8js3p36fb3b91"; type = "gem"; }; version = "0.2.1"; }; net-scp = { - dependencies = ["net-ssh"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "net-ssh" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1si2nq9l6jy5n2zw1q59a5gaji7v9vhy8qx08h4fg368906ysbdk"; type = "gem"; }; version = "4.0.0"; }; net-smtp = { - dependencies = ["net-protocol"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "net-protocol" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1c6md06hm5bf6rv53sk54dl2vg038pg8kglwv3rayx0vk2mdql9x"; type = "gem"; }; version = "0.3.3"; }; net-ssh = { - groups = ["default" "development"]; - platforms = []; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0yx0pb5fmziz92bw8qzbh8vf20lr56nd3s6q8h0gsgr307lki687"; type = "gem"; }; version = "7.1.0"; }; nio4r = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0w9978zwjf1qhy3amkivab0f9syz6a7k0xgydjidaf7xc831d78f"; type = "gem"; }; version = "2.5.9"; }; nokogiri = { - dependencies = ["mini_portile2" "racc"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ "mini_portile2" "racc" ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0fnw0z8zl8b5k35g9m5hhc1g4s6ajzjinhyxnqjrx7l7p07fw71v"; type = "gem"; }; version = "1.14.3"; }; nsa = { - dependencies = ["activesupport" "concurrent-ruby" "sidekiq" "statsd-ruby"]; - groups = ["default"]; - platforms = []; + dependencies = + [ "activesupport" "concurrent-ruby" "sidekiq" "statsd-ruby" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1jzs1n71pi6najhs9h8jx156gzgk3h9bwjr60vazizwdz3mm69ia"; type = "gem"; }; version = "0.2.8"; }; oj = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0l8l90iibzrxs33vn3adrhbg8cbmbn1qfh962p7gzwwybsdw73qy"; type = "gem"; }; version = "3.14.3"; }; omniauth = { - dependencies = ["hashie" "rack"]; - groups = ["default"]; - platforms = []; + dependencies = [ "hashie" "rack" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1jn9j54l5h7xcba2vjq74l1dk0xrwvsjxam4qhylpi52nw0h5502"; type = "gem"; }; version = "1.9.2"; }; omniauth-cas = { - dependencies = ["addressable" "nokogiri" "omniauth"]; - groups = ["default"]; - platforms = []; + dependencies = [ "addressable" "nokogiri" "omniauth" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0kzlh1nac4yz70917cdcsk0r23gy5h7i0x5kbmkvkpbgk6gvrb0z"; type = "gem"; }; version = "2.0.0"; }; omniauth-rails_csrf_protection = { - dependencies = ["actionpack" "omniauth"]; - groups = ["default"]; - platforms = []; + dependencies = [ "actionpack" "omniauth" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0xgkxwg17w39q3yjqcj0fm6hdkw37qm1l82dvm9zxn6q2pbzm2zv"; type = "gem"; }; version = "0.1.2"; }; omniauth-saml = { - dependencies = ["omniauth" "ruby-saml"]; - groups = ["default"]; - platforms = []; + dependencies = [ "omniauth" "ruby-saml" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0gxl14lbksnjkl8dfn23lsjkk63md77icm5racrh6fsp5n4ni9d4"; type = "gem"; }; version = "1.10.3"; }; omniauth_openid_connect = { - dependencies = ["omniauth" "openid_connect"]; - groups = ["default"]; - platforms = []; + dependencies = [ "omniauth" "openid_connect" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "08yl0x203k6nrshc70zawfqh79ap1c3fyka9zwwy61cvn7sih4sz"; type = "gem"; }; version = "0.6.1"; }; openid_connect = { - dependencies = ["activemodel" "attr_required" "json-jwt" "net-smtp" "rack-oauth2" "swd" "tzinfo" "validate_email" "validate_url" "webfinger"]; - groups = ["default"]; - platforms = []; + dependencies = [ + "activemodel" + "attr_required" + "json-jwt" + "net-smtp" + "rack-oauth2" + "swd" + "tzinfo" + "validate_email" + "validate_url" + "webfinger" + ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1k9kdivp45v6vhzdrnl5fzhd378gjj2hl4w9bazbqnfm15rsnzc8"; type = "gem"; }; version = "1.4.2"; }; openssl = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0c649921vg2l939z5cc3jwd8p1v49099pdhxfk7sb9qqx5wi5873"; type = "gem"; }; version = "3.1.0"; }; openssl-signature_algorithm = { - dependencies = ["openssl"]; - groups = ["default"]; - platforms = []; + dependencies = [ "openssl" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "103yjl68wqhl5kxaciir5jdnyi7iv9yckishdr52s5knh9g0pd53"; type = "gem"; }; version = "1.3.0"; }; orm_adapter = { - groups = ["default" "pam_authentication"]; - platforms = []; + groups = [ "default" "pam_authentication" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda"; type = "gem"; }; version = "0.5.0"; }; ox = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0i1qq88cwh9pccg59whg50rpkgdfrijn4q6k5p3clwrjqgm56lrd"; type = "gem"; }; version = "2.14.16"; }; parallel = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0jcc512l38c0c163ni3jgskvq1vc3mr8ly5pvjijzwvfml9lf597"; type = "gem"; }; version = "1.23.0"; }; parser = { - dependencies = ["ast"]; - groups = ["default" "development" "test"]; - platforms = []; + dependencies = [ "ast" ]; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "08f89nssj7ws7sjfvc2fcjpfm83sjgmniyh0npnmpqf5sfv44r8x"; type = "gem"; }; version = "3.2.2.1"; }; parslet = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "01pnw6ymz6nynklqvqxs4bcai25kcvnd5x4id9z3vd1rbmlk0lfl"; type = "gem"; }; version = "2.0.0"; }; pastel = { - dependencies = ["tty-color"]; - groups = ["default"]; - platforms = []; + dependencies = [ "tty-color" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0xash2gj08dfjvq4hy6l1z22s5v30fhizwgs10d6nviggpxsj7a8"; type = "gem"; }; version = "0.8.0"; }; pg = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1qja5f6k9v3jjip7mv3qjgx7rwmk1663cxz8jnb589znvj4wxd9l"; type = "gem"; }; version = "1.5.2"; }; pghero = { - dependencies = ["activerecord"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activerecord" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "002v32dzyyr29xd9cdsqp55g5gx19skvq9b4a4hr9lrs4i1xsavm"; type = "gem"; }; version = "3.3.3"; }; pkg-config = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "02fw2pzrmvwp67nbndpy8a2ln74fd8kmsiffw77z7g1mp58ww651"; type = "gem"; }; version = "1.5.1"; }; posix-spawn = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0cmb0svalqcxfzlzc5fvrci12b79x7bakasr8gkl3q5rz6di1q52"; type = "gem"; }; version = "0.3.15"; }; premailer = { - dependencies = ["addressable" "css_parser" "htmlentities"]; - groups = ["default"]; - platforms = []; + dependencies = [ "addressable" "css_parser" "htmlentities" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "10rzwdz43yy20lwzsr2as6aivhvwjvqh4nd48sa0ga57sizf1fb4"; type = "gem"; }; version = "1.21.0"; }; premailer-rails = { - dependencies = ["actionmailer" "net-smtp" "premailer"]; - groups = ["default"]; - platforms = []; + dependencies = [ "actionmailer" "net-smtp" "premailer" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0004f73kgrglida336fqkgx906m6n05nnfc17mypzg5rc78iaf61"; type = "gem"; }; version = "1.12.0"; }; private_address_check = { - groups = ["production" "test"]; - platforms = []; + groups = [ "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "05phz0vscfh9chv90yc9091pifw3cpwkh76flnhrmvja1q3na4cy"; type = "gem"; }; version = "0.5.0"; }; public_suffix = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35"; type = "gem"; }; version = "5.0.1"; }; puma = { - dependencies = ["nio4r"]; - groups = ["default"]; - platforms = []; + dependencies = [ "nio4r" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0yf4jmkyy8das7pj1xzwllfvzkhq2p6p534j61d9h4wz3nfyf0s5"; type = "gem"; }; version = "6.2.2"; }; pundit = { - dependencies = ["activesupport"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activesupport" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1wb03yzy1j41822rbfh9nn77im3zh1f5v8di05cd8rsrdpws542b"; type = "gem"; }; version = "2.3.0"; }; raabro = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "10m8bln9d00dwzjil1k42i5r7l82x25ysbi45fwyv4932zsrzynl"; type = "gem"; }; version = "1.4.0"; }; racc = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "09jgz6r0f7v84a7jz9an85q8vvmp743dqcsdm3z9c8rqcqv6pljq"; type = "gem"; }; version = "1.6.2"; }; rack = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "16w217k9z02c4hqizym8dkj6bqmmzx4qdvqpnskgzf174a5pwdxk"; type = "gem"; }; version = "2.2.7"; }; rack-attack = { - dependencies = ["rack"]; - groups = ["default"]; - platforms = []; + dependencies = [ "rack" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "049s3y3dpl6dn478g912y6f9nzclnnkl30psrbc2w5kaihj5szhq"; type = "gem"; }; version = "6.6.1"; }; rack-cors = { - dependencies = ["rack"]; - groups = ["default"]; - platforms = []; + dependencies = [ "rack" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "02lvkg1nb4z3zc2nry545dap7a64bb9h2k8waxfz0jkabkgnpimw"; type = "gem"; }; version = "2.0.1"; }; rack-oauth2 = { - dependencies = ["activesupport" "attr_required" "httpclient" "json-jwt" "rack"]; - groups = ["default"]; - platforms = []; + dependencies = + [ "activesupport" "attr_required" "httpclient" "json-jwt" "rack" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1fknwsxz4429w1hndl6y30cmm2n34wmmaaj2hhp6jrm8ssfsfwjf"; type = "gem"; }; version = "1.21.3"; }; rack-proxy = { - dependencies = ["rack"]; - groups = ["default"]; - platforms = []; + dependencies = [ "rack" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1a62439xwn5v6hsl9s11hdk4wj58czhcbg7lminv23mnkc0ca147"; type = "gem"; }; version = "0.7.6"; }; rack-test = { - dependencies = ["rack"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ "rack" ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1ysx29gk9k14a14zsp5a8czys140wacvp91fja8xcja0j1hzqq8c"; type = "gem"; }; version = "2.1.0"; }; rails = { - dependencies = ["actioncable" "actionmailbox" "actionmailer" "actionpack" "actiontext" "actionview" "activejob" "activemodel" "activerecord" "activestorage" "activesupport" "railties" "sprockets-rails"]; - groups = ["default"]; - platforms = []; + dependencies = [ + "actioncable" + "actionmailbox" + "actionmailer" + "actionpack" + "actiontext" + "actionview" + "activejob" + "activemodel" + "activerecord" + "activestorage" + "activesupport" + "railties" + "sprockets-rails" + ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "07cs7qdkx6vwp66diwdy9g6mx52rsd8rxhbnsqf9bqam58g2aynj"; type = "gem"; }; version = "6.1.7.3"; }; rails-controller-testing = { - dependencies = ["actionpack" "actionview" "activesupport"]; - groups = ["test"]; - platforms = []; + dependencies = [ "actionpack" "actionview" "activesupport" ]; + groups = [ "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "151f303jcvs8s149mhx2g5mn67487x0blrf9dzl76q1nb7dlh53l"; type = "gem"; }; version = "1.0.5"; }; rails-dom-testing = { - dependencies = ["activesupport" "nokogiri"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ "activesupport" "nokogiri" ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i"; type = "gem"; }; version = "2.0.3"; }; rails-html-sanitizer = { - dependencies = ["loofah"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ "loofah" ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0ygav4xyq943qqyhjmi3mzirn180j565mc9h5j4css59x1sn0cmz"; type = "gem"; }; version = "1.5.0"; }; rails-i18n = { - dependencies = ["i18n" "railties"]; - groups = ["default" "development" "test"]; - platforms = []; + dependencies = [ "i18n" "railties" ]; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "05mcgv748vppnm3fnml37wjy3dw61wj8vfw14ldaj1yx1bmkhb07"; type = "gem"; }; version = "6.0.0"; }; rails-settings-cached = { - dependencies = ["rails"]; - groups = ["default"]; - platforms = []; + dependencies = [ "rails" ]; + groups = [ "default" ]; + platforms = [ ]; source = { fetchSubmodules = false; rev = "86328ef0bd04ce21cc0504ff5e334591e8c2ccab"; @@ -2234,903 +2375,936 @@ version = "0.6.6"; }; railties = { - dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = + [ "actionpack" "activesupport" "method_source" "rake" "thor" ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1d2snjnx1j848axppj2napy3zjgbka3fnw2528rcamhm6dp694nd"; type = "gem"; }; version = "6.1.7.3"; }; rainbow = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503"; type = "gem"; }; version = "3.1.1"; }; rake = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w"; type = "gem"; }; version = "13.0.6"; }; rdf = { - dependencies = ["link_header"]; - groups = ["default"]; - platforms = []; + dependencies = [ "link_header" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "097r6fc1gkb62lq0ny9xblvxrg84vdq9w1p6v0hjw20cdgracsdj"; type = "gem"; }; version = "3.2.10"; }; rdf-normalize = { - dependencies = ["rdf"]; - groups = ["default"]; - platforms = []; + dependencies = [ "rdf" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1dngmsk9wg1vws56pl87dys0ns4bcn9arf8ip6zxa0gypr3ifq3m"; type = "gem"; }; version = "0.5.1"; }; redcarpet = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1sg9sbf9pm91l7lac7fs4silabyn0vflxwaa2x3lrzsm0ff8ilca"; type = "gem"; }; version = "3.6.0"; }; redis = { - groups = ["default" "test"]; - platforms = []; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0fikjg6j12ka6hh36dxzhfkpqqmilzjfzcdf59iwkzsgd63f0ziq"; type = "gem"; }; version = "4.8.1"; }; redis-namespace = { - dependencies = ["redis"]; - groups = ["default"]; - platforms = []; + dependencies = [ "redis" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "154dfnrjpbv7fhwhfrcnp6jn9qv5qaj3mvlvbgkl7qy5qsknw71c"; type = "gem"; }; version = "1.10.0"; }; redlock = { - dependencies = ["redis"]; - groups = ["default"]; - platforms = []; + dependencies = [ "redis" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0xvjwfzq7rqj4k311kidwmv5app3i7glz4miys6ixqy6c8yylz3c"; type = "gem"; }; version = "1.3.2"; }; regexp_parser = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "17xizkw5ryw8hhq64iqxmzdrrdxpc5lhkqc1fgm1aj0zsk1r2950"; type = "gem"; }; version = "2.8.0"; }; request_store = { - dependencies = ["rack"]; - groups = ["default" "production"]; - platforms = []; + dependencies = [ "rack" ]; + groups = [ "default" "production" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "13ppgmsbrqah08j06bybd3cddv6dml79yzyjn7r8j1src78h98h7"; type = "gem"; }; version = "1.5.1"; }; responders = { - dependencies = ["actionpack" "railties"]; - groups = ["default" "pam_authentication"]; - platforms = []; + dependencies = [ "actionpack" "railties" ]; + groups = [ "default" "pam_authentication" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0m9s0mkkprrz02gxhq0ijlwjy0nx1j5yrjf8ssjnhyagnx03lyrx"; type = "gem"; }; version = "3.1.0"; }; rexml = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53"; type = "gem"; }; version = "3.2.5"; }; rotp = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "10mmzc85y7andsich586ndykw678qn1ns2wpjxrg0sc0gr4w3pig"; type = "gem"; }; version = "6.2.2"; }; rpam2 = { - groups = ["default" "pam_authentication"]; - platforms = []; + groups = [ "default" "pam_authentication" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1zvli3s4z1hf2l7gyfickm5i3afjrnycc3ihbiax6ji6arpbyf33"; type = "gem"; }; version = "4.0.2"; }; rqrcode = { - dependencies = ["chunky_png" "rqrcode_core"]; - groups = ["default"]; - platforms = []; + dependencies = [ "chunky_png" "rqrcode_core" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0s97q1rqmw7rzsdr500hr4f2k6s24n8qk1klciz5q94zvdrygx3p"; type = "gem"; }; version = "2.1.2"; }; rqrcode_core = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "06ld6386hbdhy5h0k09axmgn424kavpc8f27k1vjhknjhbf8jjfg"; type = "gem"; }; version = "1.2.0"; }; rspec-core = { - dependencies = ["rspec-support"]; - groups = ["default" "development" "test"]; - platforms = []; + dependencies = [ "rspec-support" ]; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0l95bnjxdabrn79hwdhn2q1n7mn26pj7y1w5660v5qi81x458nqm"; type = "gem"; }; version = "3.12.2"; }; rspec-expectations = { - dependencies = ["diff-lcs" "rspec-support"]; - groups = ["default" "development" "test"]; - platforms = []; + dependencies = [ "diff-lcs" "rspec-support" ]; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "05j44jfqlv7j2rpxb5vqzf9hfv7w8ba46wwgxwcwd8p0wzi1hg89"; type = "gem"; }; version = "3.12.3"; }; rspec-mocks = { - dependencies = ["diff-lcs" "rspec-support"]; - groups = ["default" "development" "test"]; - platforms = []; + dependencies = [ "diff-lcs" "rspec-support" ]; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1hfm17xakfvwya236graj6c2arr4sb9zasp35q5fykhyz8mhs0w2"; type = "gem"; }; version = "3.12.5"; }; rspec-rails = { - dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; - groups = ["development" "test"]; - platforms = []; + dependencies = [ + "actionpack" + "activesupport" + "railties" + "rspec-core" + "rspec-expectations" + "rspec-mocks" + "rspec-support" + ]; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0d3fnabkaw8n0na2dpnlg2xygggj51djzpj9x6y5rkiqbfyqwv01"; type = "gem"; }; version = "6.0.1"; }; rspec-sidekiq = { - dependencies = ["rspec-core" "sidekiq"]; - groups = ["test"]; - platforms = []; + dependencies = [ "rspec-core" "sidekiq" ]; + groups = [ "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1spzw3sc2p0n9qfb89y1v8igd60y7c5z9w2hjqqbbgbyjvy0agp8"; type = "gem"; }; version = "3.1.0"; }; rspec-support = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "12y52zwwb3xr7h91dy9k3ndmyyhr3mjcayk0nnarnrzz8yr48kfx"; type = "gem"; }; version = "3.12.0"; }; rspec_chunked = { - groups = ["development" "test"]; - platforms = []; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0h4bsj3m7vb47qnx5bry4v0xscrb3lhg1f1vyxl524znb3i2qqzv"; type = "gem"; }; version = "0.6"; }; rspec_junit_formatter = { - dependencies = ["rspec-core"]; - groups = ["test"]; - platforms = []; + dependencies = [ "rspec-core" ]; + groups = [ "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "059bnq1gcwl9g93cqf13zpz38zk7jxaa43anzz06qkmfwrsfdpa0"; type = "gem"; }; version = "0.6.0"; }; rubocop = { - dependencies = ["json" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"]; - groups = ["development" "test"]; - platforms = []; + dependencies = [ + "json" + "parallel" + "parser" + "rainbow" + "regexp_parser" + "rexml" + "rubocop-ast" + "ruby-progressbar" + "unicode-display_width" + ]; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0l46lw5gfj3mcm982wpmx7br4rs466gyislv0hfwcsk8dxhv1zkw"; type = "gem"; }; version = "1.50.2"; }; rubocop-ast = { - dependencies = ["parser"]; - groups = ["default" "development" "test"]; - platforms = []; + dependencies = [ "parser" ]; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0n2gsafg6p7nr1z8i1hkvp2qqkkbg842ba183dnl0h08xd9ms6q5"; type = "gem"; }; version = "1.28.0"; }; rubocop-capybara = { - dependencies = ["rubocop"]; - groups = ["development" "test"]; - platforms = []; + dependencies = [ "rubocop" ]; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "01fn05a87g009ch1sh00abdmgjab87i995msap26vxq1a5smdck6"; type = "gem"; }; version = "2.18.0"; }; rubocop-performance = { - dependencies = ["rubocop" "rubocop-ast"]; - groups = ["development" "test"]; - platforms = []; + dependencies = [ "rubocop" "rubocop-ast" ]; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1z6i24r0485fxa5n4g3rhp88w589fifszhd1khbzya2iiknkjxkr"; type = "gem"; }; version = "1.17.1"; }; rubocop-rails = { - dependencies = ["activesupport" "rack" "rubocop"]; - groups = ["development" "test"]; - platforms = []; + dependencies = [ "activesupport" "rack" "rubocop" ]; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "13gx0dmi5jhs4x2617jclwc57sy4gvw3v8l91dpgc63b8dpmcim6"; type = "gem"; }; version = "2.18.0"; }; rubocop-rspec = { - dependencies = ["rubocop" "rubocop-capybara"]; - groups = ["development" "test"]; - platforms = []; + dependencies = [ "rubocop" "rubocop-capybara" ]; + groups = [ "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1k8yh0nzlz0g8igmj5smnxq71qmi2b005nkl25wkpjkwvzn2wfdx"; type = "gem"; }; version = "2.19.0"; }; ruby-progressbar = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0cwvyb7j47m7wihpfaq7rc47zwwx9k4v7iqd9s1xch5nm53rrz40"; type = "gem"; }; version = "1.13.0"; }; ruby-saml = { - dependencies = ["nokogiri" "rexml"]; - groups = ["default"]; - platforms = []; + dependencies = [ "nokogiri" "rexml" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1706dyk5jdma75bnl9rhmx8vgzjw12ixnj3y32inmpcgzgsvs76k"; type = "gem"; }; version = "1.13.0"; }; ruby2_keywords = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz"; type = "gem"; }; version = "0.0.5"; }; rufus-scheduler = { - dependencies = ["fugit"]; - groups = ["default"]; - platforms = []; + dependencies = [ "fugit" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1as4yrb8y5lq49div8p3vqgwrrhdgwnvx4m73y3712nmnlpx6cws"; type = "gem"; }; version = "3.8.2"; }; safety_net_attestation = { - dependencies = ["jwt"]; - groups = ["default"]; - platforms = []; + dependencies = [ "jwt" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1khq0y5w7lf2b9a220298hphf3pakd216jc9a4x4a9pdwxs2vgln"; type = "gem"; }; version = "0.4.0"; }; sanitize = { - dependencies = ["crass" "nokogiri"]; - groups = ["default"]; - platforms = []; + dependencies = [ "crass" "nokogiri" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1ga8yzc9zj45m92ycwnzhzahkwvc3dp3lym5m3f3880hs4jhh7l3"; type = "gem"; }; version = "6.0.1"; }; scenic = { - dependencies = ["activerecord" "railties"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activerecord" "railties" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "04sd4jmgnwpilr3k061x87yyryya2mj15a8602fip49lfxza5548"; type = "gem"; }; version = "1.7.0"; }; semantic_range = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1dlp97vg95plrsaaqj7x8l7z9vsjbhnqk4rw1l30gy26lmxpfrih"; type = "gem"; }; version = "3.0.0"; }; sidekiq = { - dependencies = ["connection_pool" "rack" "redis"]; - groups = ["default" "test"]; - platforms = []; + dependencies = [ "connection_pool" "rack" "redis" ]; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1z2fx4fzgnw4rzj3h1h4sk6qbkp7p2rdr58b2spxgkcsdzg0i5hh"; type = "gem"; }; version = "6.5.8"; }; sidekiq-bulk = { - dependencies = ["sidekiq"]; - groups = ["default"]; - platforms = []; + dependencies = [ "sidekiq" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "08nyxzmgf742irafy3l4fj09d4s5pyvsh0dzlh8y4hl51rgkh4xv"; type = "gem"; }; version = "0.2.0"; }; sidekiq-scheduler = { - dependencies = ["rufus-scheduler" "sidekiq" "tilt"]; - groups = ["default"]; - platforms = []; + dependencies = [ "rufus-scheduler" "sidekiq" "tilt" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0ygsynfb214g9ijgj4wl88jbkx79js8hd6wn65cxaaa54l82w1fj"; type = "gem"; }; version = "5.0.2"; }; sidekiq-unique-jobs = { - dependencies = ["brpoplpush-redis_script" "concurrent-ruby" "redis" "sidekiq" "thor"]; - groups = ["default"]; - platforms = []; + dependencies = + [ "brpoplpush-redis_script" "concurrent-ruby" "redis" "sidekiq" "thor" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "02f91b24hrrn688wqvxb13lwvcgqb7g9k3sxylnydd6v89wr8mcg"; type = "gem"; }; version = "7.1.29"; }; simple-navigation = { - dependencies = ["activesupport"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activesupport" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1wc1rapwhqymcjfxmlgam4cvbyhnzfxada2damq88ij2p77pjz4q"; type = "gem"; }; version = "4.4.0"; }; simple_form = { - dependencies = ["actionpack" "activemodel"]; - groups = ["default"]; - platforms = []; + dependencies = [ "actionpack" "activemodel" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0z4df65w9qpri315lpvzazdxa9xb7yj0j3d77q06wf0jnpvw4mzs"; type = "gem"; }; version = "5.2.0"; }; simplecov = { - dependencies = ["docile" "simplecov-html" "simplecov_json_formatter"]; - groups = ["test"]; - platforms = []; + dependencies = [ "docile" "simplecov-html" "simplecov_json_formatter" ]; + groups = [ "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "198kcbrjxhhzca19yrdcd6jjj9sb51aaic3b0sc3pwjghg3j49py"; type = "gem"; }; version = "0.22.0"; }; simplecov-html = { - groups = ["default" "test"]; - platforms = []; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0yx01bxa8pbf9ip4hagqkp5m0mqfnwnw2xk8kjraiywz4lrss6jb"; type = "gem"; }; version = "0.12.3"; }; simplecov_json_formatter = { - groups = ["default" "test"]; - platforms = []; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0a5l0733hj7sk51j81ykfmlk2vd5vaijlq9d5fn165yyx3xii52j"; type = "gem"; }; version = "0.1.4"; }; smart_properties = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0jrqssk9qhwrpq41arm712226vpcr458xv6xaqbk8cp94a0kycpr"; type = "gem"; }; version = "1.17.0"; }; sprockets = { - dependencies = ["concurrent-ruby" "rack"]; - groups = ["default"]; - platforms = []; + dependencies = [ "concurrent-ruby" "rack" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"; type = "gem"; }; version = "3.7.2"; }; sprockets-rails = { - dependencies = ["actionpack" "activesupport" "sprockets"]; - groups = ["default"]; - platforms = []; + dependencies = [ "actionpack" "activesupport" "sprockets" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1b9i14qb27zs56hlcc2hf139l0ghbqnjpmfi0054dxycaxvk5min"; type = "gem"; }; version = "3.4.2"; }; sshkit = { - dependencies = ["net-scp" "net-ssh"]; - groups = ["default" "development"]; - platforms = []; + dependencies = [ "net-scp" "net-ssh" ]; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1y6w2qkwg0ygn85x0afscnj0dv8iwkvm153zjclvwafkm6g0pknk"; type = "gem"; }; version = "1.21.4"; }; stackprof = { - groups = ["development"]; - platforms = []; + groups = [ "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0bhdgfb0pmw9mav1kw9fn0ka012sa0i3h5ppvqssw5xq48nhxnr8"; type = "gem"; }; version = "0.2.25"; }; statsd-ruby = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "028136c463nbravckxb1qi5c5nnv9r6vh2cyhiry423lac4xz79n"; type = "gem"; }; version = "1.5.0"; }; stoplight = { - dependencies = ["redlock"]; - groups = ["default"]; - platforms = []; + dependencies = [ "redlock" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0rmhhqvvrn7874r9cjf4wpv36vnxvxsrgb1kfgdk3dalg4rig7q6"; type = "gem"; }; version = "3.0.1"; }; strong_migrations = { - dependencies = ["activerecord"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activerecord" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0wz4zhsp4xia8zcpi98v4sgjlv2prd515l8jz4f7j0wk45dfkjs1"; type = "gem"; }; version = "0.8.0"; }; swd = { - dependencies = ["activesupport" "attr_required" "httpclient"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activesupport" "attr_required" "httpclient" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "12b3q2sw42nnilfb51nlqdv07f31vdv2j595kd99asnkw4cjlf5w"; type = "gem"; }; version = "1.3.0"; }; sysexits = { - groups = ["default" "development"]; - platforms = []; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0qjng6pllznmprzx8vb0zg0c86hdrkyjs615q41s9fjpmv2430jr"; type = "gem"; }; version = "1.2.0"; }; temple = { - groups = ["default" "development"]; - platforms = []; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "07k5wr2ypsmsbyc9d1plhdki4xr7vvggld8r1i49iljkrpx5nbqc"; type = "gem"; }; version = "0.10.0"; }; terminal-table = { - dependencies = ["unicode-display_width"]; - groups = ["default" "development" "test"]; - platforms = []; + dependencies = [ "unicode-display_width" ]; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "14dfmfjppmng5hwj7c5ka6qdapawm3h6k9lhn8zj001ybypvclgr"; type = "gem"; }; version = "3.0.2"; }; terrapin = { - dependencies = ["climate_control"]; - groups = ["default"]; - platforms = []; + dependencies = [ "climate_control" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0p18f05r0c5s70571gqig3z2ym74wx79s6rd45sprp207bqskzn9"; type = "gem"; }; version = "0.6.0"; }; thor = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi"; type = "gem"; }; version = "1.2.1"; }; tilt = { - groups = ["default" "development"]; - platforms = []; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1qmhi6d9przjzhsyk9g5pq2j75c656msh6xzprqd2mxgphf23jxs"; type = "gem"; }; version = "2.1.0"; }; timeout = { - groups = ["default" "development"]; - platforms = []; + groups = [ "default" "development" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1pfddf51n5fnj4f9ggwj3wbf23ynj0nbxlxqpz12y1gvl9g7d6r6"; type = "gem"; }; version = "0.3.2"; }; tpm-key_attestation = { - dependencies = ["bindata" "openssl" "openssl-signature_algorithm"]; - groups = ["default"]; - platforms = []; + dependencies = [ "bindata" "openssl" "openssl-signature_algorithm" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0v8y5dibsyskv1ncdgszhxwzq0gzmvb0zl7sgmx0xvsgy86dhcz1"; type = "gem"; }; version = "0.12.0"; }; tty-color = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0aik4kmhwwrmkysha7qibi2nyzb4c8kp42bd5vxnf8sf7b53g73g"; type = "gem"; }; version = "0.6.0"; }; tty-cursor = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr"; type = "gem"; }; version = "0.7.1"; }; tty-prompt = { - dependencies = ["pastel" "tty-reader"]; - groups = ["default"]; - platforms = []; + dependencies = [ "pastel" "tty-reader" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1j4y8ik82azjxshgd4i1v4wwhsv3g9cngpygxqkkz69qaa8cxnzw"; type = "gem"; }; version = "0.23.1"; }; tty-reader = { - dependencies = ["tty-cursor" "tty-screen" "wisper"]; - groups = ["default"]; - platforms = []; + dependencies = [ "tty-cursor" "tty-screen" "wisper" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1cf2k7w7d84hshg4kzrjvk9pkyc2g1m3nx2n1rpmdcf0hp4p4af6"; type = "gem"; }; version = "0.9.0"; }; tty-screen = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "18jr6s1cg8yb26wzkqa6874q0z93rq0y5aw092kdqazk71y6a235"; type = "gem"; }; version = "0.8.1"; }; twitter-text = { - dependencies = ["idn-ruby" "unf"]; - groups = ["default"]; - platforms = []; + dependencies = [ "idn-ruby" "unf" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1dnmp0bj3l01nbb52zby2c7hrazcdwfg846knkrjdfl0yfmv793z"; type = "gem"; }; version = "3.1.0"; }; tzinfo = { - dependencies = ["concurrent-ruby"]; - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + dependencies = [ "concurrent-ruby" ]; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd"; type = "gem"; }; version = "2.0.6"; }; tzinfo-data = { - dependencies = ["tzinfo"]; - groups = ["default"]; - platforms = []; + dependencies = [ "tzinfo" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0m2d0gpsgqnv29j5h2d6g57g0rayvd460b8s2vjr8sn46bqf89m5"; type = "gem"; }; version = "1.2023.3"; }; unf = { - dependencies = ["unf_ext"]; - groups = ["default"]; - platforms = []; + dependencies = [ "unf_ext" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"; type = "gem"; }; version = "0.1.4"; }; unf_ext = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch"; type = "gem"; }; version = "0.0.8.2"; }; unicode-display_width = { - groups = ["default" "development" "test"]; - platforms = []; + groups = [ "default" "development" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a"; type = "gem"; }; version = "2.4.2"; }; uri = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1vigw7nfszfqgikr6n574k9bfh0rvs74z8xq46rz2zsm8249l8cc"; type = "gem"; }; version = "0.12.1"; }; validate_email = { - dependencies = ["activemodel" "mail"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activemodel" "mail" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1r1fz29l699arka177c9xw7409d1a3ff95bf7a6pmc97slb91zlx"; type = "gem"; }; version = "0.1.6"; }; validate_url = { - dependencies = ["activemodel" "public_suffix"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activemodel" "public_suffix" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0lblym140w5n88ijyfgcvkxvpfj8m6z00rxxf2ckmmhk0x61dzkj"; type = "gem"; }; version = "1.0.15"; }; warden = { - dependencies = ["rack"]; - groups = ["default" "pam_authentication"]; - platforms = []; + dependencies = [ "rack" ]; + groups = [ "default" "pam_authentication" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1l7gl7vms023w4clg02pm4ky9j12la2vzsixi2xrv9imbn44ys26"; type = "gem"; }; version = "1.2.9"; }; webauthn = { - dependencies = ["android_key_attestation" "awrence" "bindata" "cbor" "cose" "openssl" "safety_net_attestation" "tpm-key_attestation"]; - groups = ["default"]; - platforms = []; + dependencies = [ + "android_key_attestation" + "awrence" + "bindata" + "cbor" + "cose" + "openssl" + "safety_net_attestation" + "tpm-key_attestation" + ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1ri09bf640kkw4v6k2g90q2nw1mx2hsghhngaqgb7958q8id8xrz"; type = "gem"; }; version = "3.0.0"; }; webfinger = { - dependencies = ["activesupport" "httpclient"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activesupport" "httpclient" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "18jj50b44a471ig7hw1ax90wxaaz40acmrf6cm7m2iyshlffy53q"; type = "gem"; }; version = "1.2.0"; }; webmock = { - dependencies = ["addressable" "crack" "hashdiff"]; - groups = ["test"]; - platforms = []; + dependencies = [ "addressable" "crack" "hashdiff" ]; + groups = [ "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1myj44wvbbqvv18ragv3ihl0h61acgnfwrnj3lccdgp49bgmbjal"; type = "gem"; }; version = "3.18.1"; }; webpacker = { - dependencies = ["activesupport" "rack-proxy" "railties" "semantic_range"]; - groups = ["default"]; - platforms = []; + dependencies = [ "activesupport" "rack-proxy" "railties" "semantic_range" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0fh4vijqiq1h7w28llk67y9csc0m4wkdivrsl4fsxg279v6j5z3i"; type = "gem"; }; version = "5.4.4"; }; webpush = { - dependencies = ["hkdf" "jwt"]; - groups = ["default"]; - platforms = []; + dependencies = [ "hkdf" "jwt" ]; + groups = [ "default" ]; + platforms = [ ]; source = { fetchSubmodules = false; rev = "f14a4d52e201128b1b00245d11b6de80d6cfdcd9"; @@ -3141,62 +3315,63 @@ version = "0.3.8"; }; websocket-driver = { - dependencies = ["websocket-extensions"]; - groups = ["default"]; - platforms = []; + dependencies = [ "websocket-extensions" ]; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0a3bwxd9v3ghrxzjc4vxmf4xa18c6m4xqy5wb0yk5c6b9psc7052"; type = "gem"; }; version = "0.7.5"; }; websocket-extensions = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0hc2g9qps8lmhibl5baa91b4qx8wqw872rgwagml78ydj8qacsqw"; type = "gem"; }; version = "0.1.5"; }; wisper = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1rpsi0ziy78cj82sbyyywby4d0aw0a5q84v65qd28vqn79fbq5yf"; type = "gem"; }; version = "2.0.1"; }; xorcist = { - groups = ["default"]; - platforms = []; + groups = [ "default" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "1dbbiy8xlcfvn9ais37xfb5rci4liwakkmxzbkp72wmvlgcrf339"; type = "gem"; }; version = "1.1.3"; }; xpath = { - dependencies = ["nokogiri"]; - groups = ["default" "test"]; - platforms = []; + dependencies = [ "nokogiri" ]; + groups = [ "default" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; type = "gem"; }; version = "3.2.0"; }; zeitwerk = { - groups = ["default" "development" "pam_authentication" "production" "test"]; - platforms = []; + groups = + [ "default" "development" "pam_authentication" "production" "test" ]; + platforms = [ ]; source = { - remotes = ["https://rubygems.org"]; + remotes = [ "https://rubygems.org" ]; sha256 = "028ld9qmgdllxrl7d0qkl65s58wb1n3gv8yjs28g43a8b1hplxk1"; type = "gem"; }; diff --git a/nixos/pkgs/glitch-soc/source.nix b/nixos/pkgs/glitch-soc/source.nix index 7d1d91a..34ca407 100644 --- a/nixos/pkgs/glitch-soc/source.nix +++ b/nixos/pkgs/glitch-soc/source.nix @@ -1,5 +1,6 @@ # This file was generated by pkgs.mastodon.updateScript. -{ fetchgit, applyPatches }: let +{ fetchgit, applyPatches }: +let src = fetchgit { url = "https://github.com/glitch-soc/mastodon.git"; rev = "c18884de32b60152600ec95ed42cdf9c00fdab7a"; @@ -7,5 +8,5 @@ }; in applyPatches { inherit src; - patches = []; + patches = [ ]; } diff --git a/nixos/pkgs/glitch-soc/update.nix b/nixos/pkgs/glitch-soc/update.nix index 2db78f1..40a7fe5 100644 --- a/nixos/pkgs/glitch-soc/update.nix +++ b/nixos/pkgs/glitch-soc/update.nix @@ -1,24 +1,22 @@ -{ runCommand -, lib -, makeWrapper -, yarn2nix -, bundix -, coreutils -, diffutils -, nix-prefetch-git -, gnused -, jq -}: +{ runCommand, lib, makeWrapper, yarn2nix, bundix, coreutils, diffutils +, nix-prefetch-git, gnused, jq }: let - binPath = lib.makeBinPath [ yarn2nix bundix coreutils diffutils nix-prefetch-git gnused jq ]; -in -runCommand "mastodon-update-script" -{ + binPath = lib.makeBinPath [ + yarn2nix + bundix + coreutils + diffutils + nix-prefetch-git + gnused + jq + ]; +in runCommand "mastodon-update-script" { nativeBuildInputs = [ makeWrapper ]; meta = { maintainers = with lib.maintainers; [ happy-river ]; - description = "Utility to generate Nix expressions for Mastodon's dependencies"; + description = + "Utility to generate Nix expressions for Mastodon's dependencies"; platforms = lib.platforms.unix; }; } '' diff --git a/nixos/templates/iso-graphical.nix b/nixos/templates/iso-graphical.nix index 23630f3..4d92727 100644 --- a/nixos/templates/iso-graphical.nix +++ b/nixos/templates/iso-graphical.nix @@ -6,9 +6,7 @@ # use the latest Linux kernel boot.kernelPackages = pkgs.linuxPackages_latest; - environment.systemPackages = with pkgs; [ - git - ]; + environment.systemPackages = with pkgs; [ git ]; # Needed for https://github.com/NixOS/nixpkgs/issues/58959 boot.supportedFilesystems = lib.mkForce [ "btrfs" "ext4" ]; diff --git a/nixos/templates/iso.nix b/nixos/templates/iso.nix index bbd3dbe..48d7dc9 100644 --- a/nixos/templates/iso.nix +++ b/nixos/templates/iso.nix @@ -1,15 +1,12 @@ { pkgs, modulesPath, lib, ... }: { - imports = [ - "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix" - ]; + imports = [ "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix" ]; # use the latest Linux kernel boot.kernelPackages = pkgs.linuxPackages_latest; - environment.systemPackages = with pkgs; [ - git - ]; + environment.systemPackages = with pkgs; [ git ]; # Needed for https://github.com/NixOS/nixpkgs/issues/58959 - boot.supportedFilesystems = lib.mkForce [ "btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ]; + boot.supportedFilesystems = + lib.mkForce [ "btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ]; } From fa5bda60be86d161e30af677c12e1687876051f9 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 4 May 2023 15:14:36 +0200 Subject: [PATCH 07/13] simple impl of exposes thingy --- .woodpecker.yml | 2 +- flake.nix | 8 +--- nixos/common/modules/default.nix | 2 +- nixos/common/modules/meta.nix | 42 +++++++++++++++++++ nixos/hosts/olympus/default.nix | 6 +++ .../hosts/olympus/hedgedoc/configuration.nix | 3 +- nixos/hosts/olympus/nginx/configuration.nix | 6 ++- nixos/hosts/thalassa/aoife/configuration.nix | 3 +- nixos/hosts/thalassa/default.nix | 6 ++- nixos/hosts/thalassa/eevee/configuration.nix | 3 +- nixos/util.nix | 17 ++++++-- 11 files changed, 78 insertions(+), 20 deletions(-) create mode 100644 nixos/common/modules/meta.nix diff --git a/.woodpecker.yml b/.woodpecker.yml index 0a8e125..0a65993 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -5,5 +5,5 @@ pipeline: - NIX_CONFIG=experimental-features = nix-command flakes commands: - nix run 'nixpkgs#statix' check - - nix run 'github:astro/deadnix' -- -f + - nix run 'nixpkgs#deadnix' -- -f - nix run 'nixpkgs#yamllint' . diff --git a/flake.nix b/flake.nix index 56f99e5..1783aa7 100644 --- a/flake.nix +++ b/flake.nix @@ -46,14 +46,9 @@ inherit (nixpkgs) lib; util = import ./nixos/util.nix inputs; + inherit (util) hosts flat_hosts nixHosts; system = "x86_64-linux"; - # import and add realm to list of tags - hosts = util.add_realm_to_tags (import ./nixos/hosts); - # flatten hosts to single list - flat_hosts = util.flatten_hosts hosts; - # Filter out all non-nixos hosts - nixHosts = util.filter_nix_hosts flat_hosts; pkgs = import nixpkgs { inherit system; @@ -137,6 +132,7 @@ apply-local colmena.packages.${system}.colmena cachix + deadnix fluxcd k9s kubectl diff --git a/nixos/common/modules/default.nix b/nixos/common/modules/default.nix index 4b66a5b..32e5402 100644 --- a/nixos/common/modules/default.nix +++ b/nixos/common/modules/default.nix @@ -1,3 +1,3 @@ { ... }: { - imports = [ ./dns.nix ./flood.nix ./gnome ./unpackerr.nix ./vault.nix ]; + imports = [ ./meta.nix ./dns.nix ./flood.nix ./gnome ./unpackerr.nix ./vault.nix ]; } diff --git a/nixos/common/modules/meta.nix b/nixos/common/modules/meta.nix new file mode 100644 index 0000000..63585fa --- /dev/null +++ b/nixos/common/modules/meta.nix @@ -0,0 +1,42 @@ +{ lib, ... }: +with lib; +let + exposesOpts = { + options = { + domain = mkOption { + type = types.str; + example = ".example.com"; + description = '' + The domain under which this service should be available + ''; + }; + port = mkOption { + type = types.int; + example = 4242; + description = '' + The port under which the service runs on the host + ''; + }; + }; + }; +in { + options = { + meta.exposes = mkOption { + type = with types; attrsOf (submodule exposesOpts); + description = '' + Exposed services + ''; + }; + + meta.ipv4 = mkOption { + type = types.str; + description = '' + Own IPv4 Address + ''; + }; + }; + + config = { + + }; +} diff --git a/nixos/hosts/olympus/default.nix b/nixos/hosts/olympus/default.nix index 62f5c09..0adce81 100644 --- a/nixos/hosts/olympus/default.nix +++ b/nixos/hosts/olympus/default.nix @@ -100,6 +100,12 @@ "hedgedoc" = { ip = "10.42.42.23"; mac = "86:BC:0C:18:BC:9B"; + exposes = { + md = { + domain = "md.0x76.dev"; + port = 3000; + }; + }; }; "zmeura" = { ip = "10.42.42.24"; diff --git a/nixos/hosts/olympus/hedgedoc/configuration.nix b/nixos/hosts/olympus/hedgedoc/configuration.nix index c11021c..87e19bd 100644 --- a/nixos/hosts/olympus/hedgedoc/configuration.nix +++ b/nixos/hosts/olympus/hedgedoc/configuration.nix @@ -6,6 +6,7 @@ let db_name = "hedgedoc"; db_user = "hedgedoc"; + inherit (config.meta.exposes.md) port; vs = config.vault-secrets.secrets; in { imports = [ ]; @@ -40,7 +41,7 @@ in { environmentFile = "${vs.hedgedoc}/environment"; settings = { host = "0.0.0.0"; - port = 3000; + inherit port; sessionSecret = "$SESSION_SECRET"; domain = "md.0x76.dev"; protocolUseSSL = true; diff --git a/nixos/hosts/olympus/nginx/configuration.nix b/nixos/hosts/olympus/nginx/configuration.nix index 5d21f76..2e926c7 100644 --- a/nixos/hosts/olympus/nginx/configuration.nix +++ b/nixos/hosts/olympus/nginx/configuration.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }: +{ pkgs, hosts, ... }: let proxy = url: { enableACME = true; @@ -44,9 +44,11 @@ in { package = pkgs.nginxMainline; + # Templated + virtualHosts.${hosts.olympus.hedgedoc.exposes.md.domain} = proxy "http://hedgedoc.olympus:${toString hosts.olympus.hedgedoc.exposes.md.port}/"; + # 0x76.dev virtualHosts."ha.0x76.dev" = proxy "http://home-assistant.olympus:8123/"; - virtualHosts."md.0x76.dev" = proxy "http://hedgedoc.olympus:3000/"; virtualHosts."git.0x76.dev" = proxy "http://gitea.olympus:3000"; virtualHosts."o.0x76.dev" = proxy "http://minio.olympus:9000"; virtualHosts."grafana.0x76.dev" = diff --git a/nixos/hosts/thalassa/aoife/configuration.nix b/nixos/hosts/thalassa/aoife/configuration.nix index 7699dcc..75ceeb5 100644 --- a/nixos/hosts/thalassa/aoife/configuration.nix +++ b/nixos/hosts/thalassa/aoife/configuration.nix @@ -4,7 +4,6 @@ { inputs, ... }: { imports = [ - ../../../common/desktop ./hardware-configuration.nix inputs.nixos-hardware.nixosModules.lenovo-thinkpad-z ./hardware.nix @@ -26,6 +25,8 @@ # Enable Ozone rendering for Chromium and Electron apps. environment.sessionVariables.NIXOS_OZONE_WL = "1"; + # environment.sessionVariables.INFRA_INFO = self; # hosts.${config.networking.domain}.${config.networking.hostName}; + # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions # on your system were taken. It‘s perfectly fine and recommended to leave diff --git a/nixos/hosts/thalassa/default.nix b/nixos/hosts/thalassa/default.nix index 68de75d..d0c4725 100644 --- a/nixos/hosts/thalassa/default.nix +++ b/nixos/hosts/thalassa/default.nix @@ -1,5 +1,7 @@ { - # "null" = { type = "local"; }; - "aoife" = { type = "local"; }; + "aoife" = { + type = "local"; + mac = "04:7b:cb:b6:2d:88"; + }; "eevee" = { type = "local"; }; } diff --git a/nixos/hosts/thalassa/eevee/configuration.nix b/nixos/hosts/thalassa/eevee/configuration.nix index eccf3cf..e74c1a1 100644 --- a/nixos/hosts/thalassa/eevee/configuration.nix +++ b/nixos/hosts/thalassa/eevee/configuration.nix @@ -3,8 +3,7 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { pkgs, inputs, ... }: { - imports = - [ ../../../common/desktop ./hardware-configuration.nix ./hardware.nix ]; + imports = [ ./hardware-configuration.nix ./hardware.nix ]; # Bootloader. boot = { diff --git a/nixos/util.nix b/nixos/util.nix index e36ec67..8519414 100644 --- a/nixos/util.nix +++ b/nixos/util.nix @@ -13,7 +13,7 @@ let ./common/generic-lxc.nix ]; "vm" = [ ./common/generic-vm.nix ]; - "local" = [ ]; + "local" = [ ./common/desktop ]; }; in type: import_cases.${type} ++ base_imports; # Helper function to resolve what should be imported depending on the type of config (lxc, vm, bare metal) @@ -21,8 +21,6 @@ let type_import type ++ [ ./common "${./.}/hosts/${realm}/${profile}/configuration.nix" ]; -in { - inherit base_imports type_import resolve_imports; # Add to whatever realm a host belong to its list of tags add_realm_to_tags = mapAttrs (realm: mapAttrs (_hostname: @@ -40,8 +38,10 @@ in { # Filter out all hosts which aren't nixos filter_nix_hosts = filter ({ nix ? true, ... }: nix); + # outputs + # Helper function to build a colmena host definition - mkColmenaHost = { ip ? null, hostname, tags, realm, type ? "lxc", ... }@host: + mkColmenaHost = { ip ? null, exposes ? null, hostname, tags, realm, type ? "lxc", ... }@host: let # this makes local apply work a bit nicer name = if type == "local" then hostname else "${hostname}.${realm}"; @@ -52,6 +52,10 @@ in { hostName = hostname; domain = realm; }; + meta = { + inherit exposes; + ipv4 = ip; + }; deployment = { inherit tags; targetHost = ip; @@ -60,4 +64,9 @@ in { }; }; }; + hosts = add_realm_to_tags (import ./hosts); + flat_hosts = flatten_hosts hosts; + nixHosts = filter_nix_hosts flat_hosts; +in { + inherit base_imports mkColmenaHost hosts flat_hosts nixHosts; } From af893b9e438d4975b9623d2b62221aee0f9cb889 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 4 May 2023 16:19:01 +0200 Subject: [PATCH 08/13] added nginx autoproxy for exposes config, needs some refactoring --- nixos/common/modules/meta.nix | 6 +- nixos/common/modules/vault.nix | 2 +- nixos/hosts/olympus/nginx/configuration.nix | 193 +++++++++++--------- 3 files changed, 106 insertions(+), 95 deletions(-) diff --git a/nixos/common/modules/meta.nix b/nixos/common/modules/meta.nix index 63585fa..524e82b 100644 --- a/nixos/common/modules/meta.nix +++ b/nixos/common/modules/meta.nix @@ -20,15 +20,15 @@ let }; }; in { - options = { - meta.exposes = mkOption { + options.meta = { + exposes = mkOption { type = with types; attrsOf (submodule exposesOpts); description = '' Exposed services ''; }; - meta.ipv4 = mkOption { + ipv4 = mkOption { type = types.str; description = '' Own IPv4 Address diff --git a/nixos/common/modules/vault.nix b/nixos/common/modules/vault.nix index 1df023b..90b86c8 100644 --- a/nixos/common/modules/vault.nix +++ b/nixos/common/modules/vault.nix @@ -2,7 +2,7 @@ with lib; let cfg = config.services.v.vault; - hostIP = config.deployment.targetHost; + hostIP = config.meta.ipv4; # Find all vault hosts that do not have the same IP as the current host vault_hosts = diff --git a/nixos/hosts/olympus/nginx/configuration.nix b/nixos/hosts/olympus/nginx/configuration.nix index 2e926c7..ff5e447 100644 --- a/nixos/hosts/olympus/nginx/configuration.nix +++ b/nixos/hosts/olympus/nginx/configuration.nix @@ -1,5 +1,7 @@ -{ pkgs, hosts, ... }: +{ pkgs, config, hosts, lib, ... }: let + inherit (builtins) filter hasAttr attrValues concatMap; + proxy = url: { enableACME = true; forceSSL = true; @@ -22,6 +24,16 @@ let add_header Access-Control-Allow-Origin *; return 200 '${builtins.toJSON data}'; ''; + + hostsWithExposes = + filter (hasAttr "exposes") (attrValues hosts.${config.networking.domain}); + exposes = { ip, exposes, ... }: + map ({ domain, port }: { inherit ip domain port; }) (attrValues exposes); + mkVhost = { ip, domain, port }: { + "${domain}" = proxy "http://${ip}:${toString port}"; + }; + vhosts = lib.foldr (el: acc: acc // mkVhost el) { } + (concatMap exposes hostsWithExposes); in { # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions @@ -45,107 +57,106 @@ in { package = pkgs.nginxMainline; # Templated - virtualHosts.${hosts.olympus.hedgedoc.exposes.md.domain} = proxy "http://hedgedoc.olympus:${toString hosts.olympus.hedgedoc.exposes.md.port}/"; - - # 0x76.dev - virtualHosts."ha.0x76.dev" = proxy "http://home-assistant.olympus:8123/"; - virtualHosts."git.0x76.dev" = proxy "http://gitea.olympus:3000"; - virtualHosts."o.0x76.dev" = proxy "http://minio.olympus:9000"; - virtualHosts."grafana.0x76.dev" = - proxy "http://victoriametrics.olympus:2342"; - virtualHosts."outline.0x76.dev" = proxy "http://outline.olympus:3000"; - virtualHosts."ntfy.0x76.dev" = proxy "http://ntfy.olympus:80"; - virtualHosts."ci.0x76.dev" = proxy "http://woodpecker.olympus:8000"; - virtualHosts."dex.0x76.dev" = proxy "http://dex.olympus:5556"; - virtualHosts."pass.0x76.dev" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://vaultwarden.olympus:8222"; - proxyWebsockets = true; + virtualHosts = vhosts // { + # 0x76.dev + "ha.0x76.dev" = proxy "http://home-assistant.olympus:8123/"; + "git.0x76.dev" = proxy "http://gitea.olympus:3000"; + "o.0x76.dev" = proxy "http://minio.olympus:9000"; + "grafana.0x76.dev" = proxy "http://victoriametrics.olympus:2342"; + "outline.0x76.dev" = proxy "http://outline.olympus:3000"; + "ntfy.0x76.dev" = proxy "http://ntfy.olympus:80"; + "ci.0x76.dev" = proxy "http://woodpecker.olympus:8000"; + "dex.0x76.dev" = proxy "http://dex.olympus:5556"; + "pass.0x76.dev" = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://vaultwarden.olympus:8222"; + proxyWebsockets = true; + }; + locations."/notifications/hub/negotiate" = { + proxyPass = "http://vaultwarden.olympus:8222"; + proxyWebsockets = true; + }; + locations."/notifications/hub" = { + proxyPass = "http://vaultwarden.olympus:3012"; + proxyWebsockets = true; + }; }; - locations."/notifications/hub/negotiate" = { - proxyPass = "http://vaultwarden.olympus:8222"; - proxyWebsockets = true; - }; - locations."/notifications/hub" = { - proxyPass = "http://vaultwarden.olympus:3012"; - proxyWebsockets = true; - }; - }; - # Redshifts - virtualHosts."andreea.redshifts.xyz" = proxy "http://zmeura.olympus:8008"; + # Redshifts + "andreea.redshifts.xyz" = proxy "http://zmeura.olympus:8008"; - # Meow - virtualHosts."meowy.tech" = { - enableACME = true; - forceSSL = true; - locations."/".extraConfig = '' - add_header Content-Type 'text/html; charset=UTF-8'; - return 200 '

meow

'; - ''; - locations."= /.well-known/matrix/client".extraConfig = - mkWellKnown clientConfig; - locations."= /.well-known/matrix/server".extraConfig = - mkWellKnown serverConfig; - }; - virtualHosts."chat.meowy.tech" = { - enableACME = true; - forceSSL = true; - locations."/".extraConfig = '' - return 307 https://element.chat.meowy.tech; - ''; - locations."/_matrix".proxyPass = "http://synapse.olympus:8008"; - locations."/_synapse/client".proxyPass = "http://synapse.olympus:8008"; - locations."/_synapse/admin" = { - # Allow only local and my own IPs - extraConfig = '' - allow 127.0.0.1; - allow 10.42.42.0/23; - allow 192.168.0.0/23; - allow 80.60.83.220; - allow 195.85.167.32/29; - deny all; + # Meow + "meowy.tech" = { + enableACME = true; + forceSSL = true; + locations."/".extraConfig = '' + add_header Content-Type 'text/html; charset=UTF-8'; + return 200 '

meow

'; ''; - proxyPass = "http://synapse.olympus:8008"; + locations."= /.well-known/matrix/client".extraConfig = + mkWellKnown clientConfig; + locations."= /.well-known/matrix/server".extraConfig = + mkWellKnown serverConfig; }; - }; - virtualHosts."element.chat.meowy.tech" = { - enableACME = true; - forceSSL = true; - - root = pkgs.element-web.override { - conf = { - default_server_config = clientConfig; - show_labs_settings = true; - brand = "chat.meowy.tech"; + "chat.meowy.tech" = { + enableACME = true; + forceSSL = true; + locations."/".extraConfig = '' + return 307 https://element.chat.meowy.tech; + ''; + locations."/_matrix".proxyPass = "http://synapse.olympus:8008"; + locations."/_synapse/client".proxyPass = "http://synapse.olympus:8008"; + locations."/_synapse/admin" = { + # Allow only local and my own IPs + extraConfig = '' + allow 127.0.0.1; + allow 10.42.42.0/23; + allow 192.168.0.0/23; + allow 80.60.83.220; + allow 195.85.167.32/29; + deny all; + ''; + proxyPass = "http://synapse.olympus:8008"; }; }; - }; - virtualHosts."cinny.chat.meowy.tech" = { - enableACME = true; - forceSSL = true; + "element.chat.meowy.tech" = { + enableACME = true; + forceSSL = true; - root = pkgs.cinny.override { - conf = { - defaultHomeserver = 0; - allowCustomHomeservers = false; - homeserverList = [ "chat.meowy.tech" ]; + root = pkgs.element-web.override { + conf = { + default_server_config = clientConfig; + show_labs_settings = true; + brand = "chat.meowy.tech"; + }; }; }; - }; - virtualHosts."admin.chat.meowy.tech" = { - enableACME = true; - forceSSL = true; - root = pkgs.synapse-admin; - }; - virtualHosts."books.meowy.tech" = proxy "http://bookwyrm.olympus:8001"; + "cinny.chat.meowy.tech" = { + enableACME = true; + forceSSL = true; - # Kubernetes endpoints - virtualHosts."0x76.dev" = k8s_proxy; - virtualHosts."internal.xirion.net" = k8s_proxy; - virtualHosts."blog.xirion.net" = k8s_proxy; + root = pkgs.cinny.override { + conf = { + defaultHomeserver = 0; + allowCustomHomeservers = false; + homeserverList = [ "chat.meowy.tech" ]; + }; + }; + }; + "admin.chat.meowy.tech" = { + enableACME = true; + forceSSL = true; + root = pkgs.synapse-admin; + }; + "books.meowy.tech" = proxy "http://bookwyrm.olympus:8001"; + + # Kubernetes endpoints + "0x76.dev" = k8s_proxy; + "internal.xirion.net" = k8s_proxy; + "blog.xirion.net" = k8s_proxy; + }; }; security.acme.defaults.email = "victorheld12@gmail.com"; From e34c892fc2f466dfe991efd3de78f8951636dc41 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 4 May 2023 22:04:07 +0000 Subject: [PATCH 09/13] chore(deps): lock file maintenance --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 113ab59..f21bccd 100644 --- a/flake.lock +++ b/flake.lock @@ -502,11 +502,11 @@ ] }, "locked": { - "lastModified": 1683153724, - "narHash": "sha256-wiQ8pBYbbPklLngAz5w3VvwmpLqTNroKc7um56iCLHo=", + "lastModified": 1683221986, + "narHash": "sha256-n688GK4wO2pZpI4gHOxj/PF85bzUMPEJ8B3Wd3cHSjk=", "owner": "nix-community", "repo": "home-manager", - "rev": "514c0a71f47cb80282742d7e4b6913c2c0582c2d", + "rev": "f3824311a16cbe70dbaeedc17a97dfcd11901c3f", "type": "github" }, "original": { @@ -671,11 +671,11 @@ ] }, "locked": { - "lastModified": 1682946851, - "narHash": "sha256-YoEtcS8oRurXdrYW1ceF3LaqBeJDp33+NqyqsQAh96c=", + "lastModified": 1683189539, + "narHash": "sha256-dqeE6PM1SSNCB9BSBgh/9dJPLn3sf7P4uay8/CymMlQ=", "owner": "nix-community", "repo": "nixos-generators", - "rev": "8e981bbc0f146e87ac5e8cc98a84dd6702648adb", + "rev": "104ca15b0019bf461639050daeaa18e25642ccee", "type": "github" }, "original": { @@ -815,11 +815,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1683186265, - "narHash": "sha256-XuGXnnF/mpM0CR4M4dbuMYsARgHLqtpolh5nPA9+040=", + "lastModified": 1683237598, + "narHash": "sha256-RQrAydX9mQIJYBtOe0kEGHjHV6tSx+a0LOI0LZ/Mus4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "3428bdf3c93a7608615dddd44dec50c3df89b4be", + "rev": "0ba02ba5e7a068d334fb04c8349d7654d1a9a230", "type": "github" }, "original": { @@ -931,11 +931,11 @@ "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1682714854, - "narHash": "sha256-7vFHIUeaZ47REJopzzY6bX5wb0qmn6fNsQCKOQ8G3Mg=", + "lastModified": 1683202852, + "narHash": "sha256-AN4PZAtkiA4ATi9MwCMpU7WvAoQ642Hol8K8/n0477M=", "owner": "pta2002", "repo": "nixvim", - "rev": "d0383da7f8579610f49b99b982b662ad197d97d1", + "rev": "8a637fc91fd670626a3e182a781a2e82615bbcc2", "type": "github" }, "original": { @@ -946,11 +946,11 @@ }, "nur": { "locked": { - "lastModified": 1683183829, - "narHash": "sha256-Ta7qCL+mWSBt3851GYtbJpuAcCfNvNxD+MqfK+Yj4RU=", + "lastModified": 1683236736, + "narHash": "sha256-ruEH8oO2WLlZI8CSrKPmMbIFNO4/oEGeBwyTyszhw5Y=", "owner": "nix-community", "repo": "NUR", - "rev": "82a30341dc98d46808ea11ba932e95856e53452c", + "rev": "ee7b5b05842c7db8688a3a21f7c10e2eb8762882", "type": "github" }, "original": { From 64bdee8a12616ccdfbef35d9bc36fd75fa67ecce Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 5 May 2023 10:04:38 +0200 Subject: [PATCH 10/13] create nginx magic module --- nixos/common/modules/default.nix | 2 +- nixos/common/modules/meta.nix | 3 +- nixos/common/modules/nginx.nix | 32 ++++++++++++ nixos/hosts/olympus/default.nix | 52 +++++++++++++++++-- nixos/hosts/olympus/dex/configuration.nix | 5 +- nixos/hosts/olympus/gitea/configuration.nix | 8 +-- .../hosts/olympus/hedgedoc/configuration.nix | 3 +- nixos/hosts/olympus/minio/configuration.nix | 4 +- nixos/hosts/olympus/nginx/configuration.nix | 46 ++-------------- nixos/hosts/olympus/outline/configuration.nix | 9 ++-- .../olympus/victoriametrics/configuration.nix | 3 +- .../olympus/woodpecker/configuration.nix | 8 +-- 12 files changed, 111 insertions(+), 64 deletions(-) create mode 100644 nixos/common/modules/nginx.nix diff --git a/nixos/common/modules/default.nix b/nixos/common/modules/default.nix index 32e5402..6672702 100644 --- a/nixos/common/modules/default.nix +++ b/nixos/common/modules/default.nix @@ -1,3 +1,3 @@ { ... }: { - imports = [ ./meta.nix ./dns.nix ./flood.nix ./gnome ./unpackerr.nix ./vault.nix ]; + imports = [ ./meta.nix ./nginx.nix ./dns.nix ./flood.nix ./gnome ./unpackerr.nix ./vault.nix ]; } diff --git a/nixos/common/modules/meta.nix b/nixos/common/modules/meta.nix index 524e82b..562d21f 100644 --- a/nixos/common/modules/meta.nix +++ b/nixos/common/modules/meta.nix @@ -12,6 +12,7 @@ let }; port = mkOption { type = types.int; + default = 80; example = 4242; description = '' The port under which the service runs on the host @@ -21,6 +22,7 @@ let }; in { options.meta = { + exposes = mkOption { type = with types; attrsOf (submodule exposesOpts); description = '' @@ -37,6 +39,5 @@ in { }; config = { - }; } diff --git a/nixos/common/modules/nginx.nix b/nixos/common/modules/nginx.nix new file mode 100644 index 0000000..4d1ac1f --- /dev/null +++ b/nixos/common/modules/nginx.nix @@ -0,0 +1,32 @@ +{ lib, hosts, config, ... }: +with lib; +let cfg = config.services.v.nginx; +in { + options.services.v.nginx.generateVirtualHosts = + mkEnableOption "generate vhosts"; + + config = let + + proxy = url: { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = url; + proxyWebsockets = true; + }; + }; + + hosts' = + filter (hasAttr "exposes") (attrValues hosts.${config.networking.domain}); + exposes = { ip, exposes, ... }: + map ({ domain, port ? 80}: { inherit ip domain port; }) (attrValues exposes); + mkVhost = { ip, domain, port}: { + "${domain}" = proxy "http://${ip}:${toString port}"; + }; + vhosts = foldr (el: acc: acc // mkVhost el) { } (concatMap exposes hosts'); + in mkIf cfg.generateVirtualHosts { + + services.nginx.virtualHosts = vhosts; + + }; +} diff --git a/nixos/hosts/olympus/default.nix b/nixos/hosts/olympus/default.nix index 0adce81..f553528 100644 --- a/nixos/hosts/olympus/default.nix +++ b/nixos/hosts/olympus/default.nix @@ -36,6 +36,10 @@ ip6 = "2001:41f0:9639:1:bfe7:3fd9:75de:cbee"; mac = "9E:60:78:ED:81:B4"; nix = false; + exposes.ha = { + domain = "ha.0x76.dev"; + port = 8123; + }; }; "nginx" = { ip = "10.42.42.9"; @@ -46,10 +50,19 @@ "kubernetes" = { ip = "10.42.42.10"; mac = "6E:A5:25:99:FE:68"; + exposes = { + www.domain = "0x76.dev"; + internal.domain = "internal.xirion.net"; + blog.domain = "blog.xirion.net"; + }; }; "dex" = { ip = "10.42.42.11"; mac = "AE:66:7B:FA:15:72"; + exposes.dex = { + domain = "dex.0x76.dev"; + port = 5556; + }; }; "WoolooTV" = { ip = "10.42.42.13"; @@ -59,6 +72,10 @@ "outline" = { ip = "10.42.42.14"; mac = "52:13:EB:FD:87:F0"; + exposes.outline = { + domain = "outline.0x76.dev"; + port = 3000; + }; }; "dns-1" = { profile = "dns"; @@ -75,6 +92,10 @@ "minio" = { ip = "10.42.42.17"; mac = "0A:06:5E:E7:9A:0C"; + exposes.minio = { + domain = "o.0x76.dev"; + port = 9000; + }; }; "mailserver" = { ip = "10.42.42.18"; @@ -83,6 +104,12 @@ "victoriametrics" = { ip = "10.42.42.19"; mac = "9E:91:61:35:84:1F"; + exposes = { + grafana = { + domain = "grafana.0x76.dev"; + port = 2342; + }; + }; }; "unifi" = { ip = "10.42.42.20"; @@ -96,21 +123,27 @@ "gitea" = { ip = "10.42.42.22"; mac = "DE:5F:B0:83:6F:34"; + exposes.git = { + domain = "git.0x76.dev"; + port = 3000; + }; }; "hedgedoc" = { ip = "10.42.42.23"; mac = "86:BC:0C:18:BC:9B"; - exposes = { - md = { - domain = "md.0x76.dev"; - port = 3000; - }; + exposes.md = { + domain = "md.0x76.dev"; + port = 3000; }; }; "zmeura" = { ip = "10.42.42.24"; mac = "b8:27:eb:d5:e0:f5"; nix = false; + exposes.andreea = { + domain = "andreea.redshifts.xyz"; + port = 8008; + }; }; "wireguard" = { ip = "10.42.42.25"; @@ -121,6 +154,10 @@ ip = "10.42.42.27"; mac = "9E:8A:6C:39:27:DE"; nix = false; + exposes.books = { + domain = "books.meowy.tech"; + port = 8001; + }; }; "synapse" = { ip = "10.42.42.28"; @@ -140,10 +177,15 @@ "ntfy" = { ip = "10.42.42.32"; mac = "7A:17:9E:80:72:01"; + exposes.ntfy.domain = "ntfy.0x76.dev"; }; "woodpecker" = { ip = "10.42.42.33"; mac = "1E:24:DA:DB:4A:1A"; + exposes.ci = { + domain = "ci.0x76.dev"; + port = 8000; + }; }; "nuc" = { ip = "10.42.42.42"; diff --git a/nixos/hosts/olympus/dex/configuration.nix b/nixos/hosts/olympus/dex/configuration.nix index 8d030c8..b205de8 100644 --- a/nixos/hosts/olympus/dex/configuration.nix +++ b/nixos/hosts/olympus/dex/configuration.nix @@ -7,6 +7,7 @@ let vs = config.vault-secrets.secrets; db_user = "dex"; db_name = "dex"; + inherit (config.meta.exposes.dex) port; in { imports = [ ]; @@ -18,7 +19,7 @@ in { # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.stateVersion = "23.05"; # Did you read the comment? - networking.firewall.allowedTCPPorts = [ 5556 ]; + networking.firewall.allowedTCPPorts = [ port ]; services.postgresql = { enable = true; @@ -47,7 +48,7 @@ in { database = db_name; }; }; - web.http = "0.0.0.0:5556"; + web.http = "0.0.0.0:${toString port}"; connectors = [{ type = "gitea"; diff --git a/nixos/hosts/olympus/gitea/configuration.nix b/nixos/hosts/olympus/gitea/configuration.nix index 2be1db9..8b8823c 100644 --- a/nixos/hosts/olympus/gitea/configuration.nix +++ b/nixos/hosts/olympus/gitea/configuration.nix @@ -3,7 +3,9 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { lib, config, pkgs, ... }: -let vs = config.vault-secrets.secrets; +let + vs = config.vault-secrets.secrets; + inherit (config.meta.exposes.git) port; in { imports = [ ]; @@ -20,8 +22,7 @@ in { environment.noXlibs = lib.mkForce false; - networking.firewall.allowedTCPPorts = - [ config.services.gitea.settings.server.HTTP_PORT ]; + networking.firewall.allowedTCPPorts = [ port ]; services.openssh.startWhenNeeded = false; @@ -77,6 +78,7 @@ in { SSH_PORT = 42; DOMAIN = "git.0x76.dev"; ROOT_URL = "https://git.0x76.dev"; + HTTP_PORT = port; }; session = { "PROVIDER" = "db"; diff --git a/nixos/hosts/olympus/hedgedoc/configuration.nix b/nixos/hosts/olympus/hedgedoc/configuration.nix index 87e19bd..c23b63c 100644 --- a/nixos/hosts/olympus/hedgedoc/configuration.nix +++ b/nixos/hosts/olympus/hedgedoc/configuration.nix @@ -21,8 +21,7 @@ in { environment.noXlibs = lib.mkForce false; - networking.firewall.allowedTCPPorts = - [ config.services.hedgedoc.settings.port ]; + networking.firewall.allowedTCPPorts = [ port ]; vault-secrets.secrets.hedgedoc = { }; diff --git a/nixos/hosts/olympus/minio/configuration.nix b/nixos/hosts/olympus/minio/configuration.nix index eae48e5..aa0fc92 100644 --- a/nixos/hosts/olympus/minio/configuration.nix +++ b/nixos/hosts/olympus/minio/configuration.nix @@ -5,8 +5,8 @@ { config, pkgs, ... }: let vs = config.vault-secrets.secrets; - listenPort = 9000; - consolePort = 9001; + listenPort = config.meta.exposes.minio.port; + consolePort = listenPort + 1; in { imports = [ ]; diff --git a/nixos/hosts/olympus/nginx/configuration.nix b/nixos/hosts/olympus/nginx/configuration.nix index ff5e447..2027eab 100644 --- a/nixos/hosts/olympus/nginx/configuration.nix +++ b/nixos/hosts/olympus/nginx/configuration.nix @@ -1,16 +1,5 @@ -{ pkgs, config, hosts, lib, ... }: +{ pkgs, ... }: let - inherit (builtins) filter hasAttr attrValues concatMap; - - proxy = url: { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = url; - proxyWebsockets = true; - }; - }; - k8s_proxy = proxy "http://kubernetes.olympus:80/"; clientConfig = { "m.homeserver" = { base_url = "https://chat.meowy.tech"; @@ -24,16 +13,6 @@ let add_header Access-Control-Allow-Origin *; return 200 '${builtins.toJSON data}'; ''; - - hostsWithExposes = - filter (hasAttr "exposes") (attrValues hosts.${config.networking.domain}); - exposes = { ip, exposes, ... }: - map ({ domain, port }: { inherit ip domain port; }) (attrValues exposes); - mkVhost = { ip, domain, port }: { - "${domain}" = proxy "http://${ip}:${toString port}"; - }; - vhosts = lib.foldr (el: acc: acc // mkVhost el) { } - (concatMap exposes hostsWithExposes); in { # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions @@ -45,6 +24,9 @@ in { networking.firewall.allowedTCPPorts = [ 80 443 ]; + # Generates vhosts for all hosts that have an `exposes` section + services.v.nginx.generateVirtualHosts = true; + services.nginx = { enable = true; statusPage = true; @@ -57,16 +39,7 @@ in { package = pkgs.nginxMainline; # Templated - virtualHosts = vhosts // { - # 0x76.dev - "ha.0x76.dev" = proxy "http://home-assistant.olympus:8123/"; - "git.0x76.dev" = proxy "http://gitea.olympus:3000"; - "o.0x76.dev" = proxy "http://minio.olympus:9000"; - "grafana.0x76.dev" = proxy "http://victoriametrics.olympus:2342"; - "outline.0x76.dev" = proxy "http://outline.olympus:3000"; - "ntfy.0x76.dev" = proxy "http://ntfy.olympus:80"; - "ci.0x76.dev" = proxy "http://woodpecker.olympus:8000"; - "dex.0x76.dev" = proxy "http://dex.olympus:5556"; + virtualHosts = { "pass.0x76.dev" = { enableACME = true; forceSSL = true; @@ -84,9 +57,6 @@ in { }; }; - # Redshifts - "andreea.redshifts.xyz" = proxy "http://zmeura.olympus:8008"; - # Meow "meowy.tech" = { enableACME = true; @@ -150,12 +120,6 @@ in { forceSSL = true; root = pkgs.synapse-admin; }; - "books.meowy.tech" = proxy "http://bookwyrm.olympus:8001"; - - # Kubernetes endpoints - "0x76.dev" = k8s_proxy; - "internal.xirion.net" = k8s_proxy; - "blog.xirion.net" = k8s_proxy; }; }; diff --git a/nixos/hosts/olympus/outline/configuration.nix b/nixos/hosts/olympus/outline/configuration.nix index 1ac2cd3..43d9e99 100644 --- a/nixos/hosts/olympus/outline/configuration.nix +++ b/nixos/hosts/olympus/outline/configuration.nix @@ -3,7 +3,9 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { config, ... }: -let vs = config.vault-secrets.secrets; +let + vs = config.vault-secrets.secrets; + inherit (config.meta.exposes.outline) port; in { imports = [ ]; @@ -16,16 +18,17 @@ in { system.stateVersion = "22.11"; # Did you read the comment? # Additional packages - networking.firewall.allowedTCPPorts = [ config.services.outline.port ]; + networking.firewall.allowedTCPPorts = [ port ]; vault-secrets.secrets.outline = { inherit (config.services.outline) user group; }; services.outline = { + inherit port; + enable = true; concurrency = 1; - port = 3000; redisUrl = "local"; databaseUrl = "local"; publicUrl = "https://outline.0x76.dev"; diff --git a/nixos/hosts/olympus/victoriametrics/configuration.nix b/nixos/hosts/olympus/victoriametrics/configuration.nix index 9678ebf..da9d327 100644 --- a/nixos/hosts/olympus/victoriametrics/configuration.nix +++ b/nixos/hosts/olympus/victoriametrics/configuration.nix @@ -5,6 +5,7 @@ { config, pkgs, ... }: let vmPort = 8428; + grafanaPort = config.meta.exposes.grafana.port; vs = config.vault-secrets.secrets; in { imports = [ ]; @@ -78,7 +79,7 @@ in { domain = "grafana.0x76.dev"; root_url = "https://grafana.0x76.dev"; http_addr = "0.0.0.0"; - http_port = 2342; + http_port = grafanaPort; }; security.admin_password = "$__file{${vs.grafana}/password}"; }; diff --git a/nixos/hosts/olympus/woodpecker/configuration.nix b/nixos/hosts/olympus/woodpecker/configuration.nix index 682338b..c5da5db 100644 --- a/nixos/hosts/olympus/woodpecker/configuration.nix +++ b/nixos/hosts/olympus/woodpecker/configuration.nix @@ -3,7 +3,9 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { config, pkgs, ... }: -let vs = config.vault-secrets.secrets; +let + inherit (config.meta.exposes.ci) port; + vs = config.vault-secrets.secrets; in { imports = [ ]; @@ -18,7 +20,7 @@ in { # Additional packages environment.systemPackages = with pkgs; [ ]; - networking.firewall.allowedTCPPorts = [ 8000 9000 ]; + networking.firewall.allowedTCPPorts = [ port 9000 ]; vault-secrets.secrets.woodpecker = { services = [ "woodpecker-server" "woodpecker-agent-docker" ]; @@ -46,7 +48,7 @@ in { WOODPECKER_GITEA_URL = "https://git.0x76.dev"; WOODPECKER_ADMIN = "v"; WOODPECKER_AUTHENTICATE_PUBLIC_REPOS = "true"; - WOODPECKER_SERVER_ADDR = "10.42.42.33:8000"; + WOODPECKER_SERVER_ADDR = "10.42.42.33:${toString port}"; }; environmentFile = "${vs.woodpecker}/environment"; }; From bb38cadb11030f68321981b83e9a14276114fa80 Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 5 May 2023 11:19:01 +0200 Subject: [PATCH 11/13] add dex auth to grafana --- nixos/hosts/olympus/dex/configuration.nix | 12 ++++++++-- .../olympus/victoriametrics/configuration.nix | 24 +++++++++++++++---- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/nixos/hosts/olympus/dex/configuration.nix b/nixos/hosts/olympus/dex/configuration.nix index b205de8..e9bcab8 100644 --- a/nixos/hosts/olympus/dex/configuration.nix +++ b/nixos/hosts/olympus/dex/configuration.nix @@ -62,12 +62,20 @@ in { }; }]; - staticClients = [{ + staticClients = [ + { id = "outline"; name = "Outline"; redirectURIs = [ "https://outline.0x76.dev/auth/oidc.callback" ]; secretEnv = "OUTLINE_CLIENT_SECRET"; - }]; + } + { + id = "grafana"; + name = "Grafana"; + redirectURIs = [ "https://grafana.0x76.dev/login/generic_oauth" ]; + secretEnv = "GRAFANA_CLIENT_SECRET"; + } + ]; }; environmentFile = "${vs.dex}/environment"; diff --git a/nixos/hosts/olympus/victoriametrics/configuration.nix b/nixos/hosts/olympus/victoriametrics/configuration.nix index da9d327..20374b4 100644 --- a/nixos/hosts/olympus/victoriametrics/configuration.nix +++ b/nixos/hosts/olympus/victoriametrics/configuration.nix @@ -5,6 +5,7 @@ { config, pkgs, ... }: let vmPort = 8428; + grafanaDomain = config.meta.exposes.grafana.domain; grafanaPort = config.meta.exposes.grafana.port; vs = config.vault-secrets.secrets; in { @@ -21,8 +22,7 @@ in { # Additional packages environment.systemPackages = with pkgs; [ ]; - networking.firewall.allowedTCPPorts = - [ vmPort config.services.grafana.settings.server.http_port ]; + networking.firewall.allowedTCPPorts = [ vmPort grafanaPort ]; networking.firewall.allowedUDPPorts = [ vmPort ]; services.victoriametrics = { @@ -76,12 +76,28 @@ in { enable = true; settings = { server = { - domain = "grafana.0x76.dev"; - root_url = "https://grafana.0x76.dev"; + domain = grafanaDomain; + root_url = "https://${grafanaDomain}"; http_addr = "0.0.0.0"; http_port = grafanaPort; }; security.admin_password = "$__file{${vs.grafana}/password}"; + + "auth.generic_oauth" = { + name = "Dex"; + icon = "signin"; + enabled = true; + allow_sign_up = true; + client_id = "grafana"; + client_secret = "$__file{${vs.grafana}/dex_client_secret}"; + scopes = toString [ "openid" "profile" "email" "groups" ]; + auth_url = "https://dex.0x76.dev/auth"; + token_url = "https://dex.0x76.dev/token"; + api_url = "https://dex.0x76.dev/userinfo"; + skip_org_role_sync = true; + auto_login = true; + }; + }; }; } From 9ac736868b61fe8d18efb5f3ce7f81d237097fc2 Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 5 May 2023 12:58:00 +0200 Subject: [PATCH 12/13] add dex to hedgedoc --- nixos/hosts/olympus/dex/configuration.nix | 14 ++++++++++---- nixos/hosts/olympus/hedgedoc/configuration.nix | 15 ++++++++++++++- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/nixos/hosts/olympus/dex/configuration.nix b/nixos/hosts/olympus/dex/configuration.nix index e9bcab8..966a687 100644 --- a/nixos/hosts/olympus/dex/configuration.nix +++ b/nixos/hosts/olympus/dex/configuration.nix @@ -64,10 +64,10 @@ in { staticClients = [ { - id = "outline"; - name = "Outline"; - redirectURIs = [ "https://outline.0x76.dev/auth/oidc.callback" ]; - secretEnv = "OUTLINE_CLIENT_SECRET"; + id = "outline"; + name = "Outline"; + redirectURIs = [ "https://outline.0x76.dev/auth/oidc.callback" ]; + secretEnv = "OUTLINE_CLIENT_SECRET"; } { id = "grafana"; @@ -75,6 +75,12 @@ in { redirectURIs = [ "https://grafana.0x76.dev/login/generic_oauth" ]; secretEnv = "GRAFANA_CLIENT_SECRET"; } + { + id = "hedgedoc"; + name = "Hedgedoc"; + redirectURIs = [ "https://md.0x76.dev/auth/oauth2/callback" ]; + secretEnv = "HEDGEDOC_CLIENT_SECRET"; + } ]; }; diff --git a/nixos/hosts/olympus/hedgedoc/configuration.nix b/nixos/hosts/olympus/hedgedoc/configuration.nix index c23b63c..1b92dc5 100644 --- a/nixos/hosts/olympus/hedgedoc/configuration.nix +++ b/nixos/hosts/olympus/hedgedoc/configuration.nix @@ -66,7 +66,20 @@ in { accessKey = "$MINIO_ACCESS_KEY"; secretKey = "$MINIO_SECRET_KEY"; }; - email = true; + email = false; + oauth2 = let url = "https://dex.0x76.dev"; + in { + providerName = "Dex"; + clientID = "hedgedoc"; + clientSecret = "$DEX_CLIENT_SECRET"; + scope = "openid email profile"; + authorizationURL = "${url}/auth"; + tokenURL = "${url}/token"; + userProfileURL = "${url}/userinfo"; + userProfileUsernameAttr = "preferred_username"; + userProfileDisplayNameAttr = "name"; + userProfileEmailAttr = "email"; + }; }; }; } From 6241223b43295d94dc2ea8193fba546a9658d2fc Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 5 May 2023 13:21:53 +0200 Subject: [PATCH 13/13] add dhcp metrics --- nixos/hosts/olympus/dhcp/configuration.nix | 11 +++++++++++ .../hosts/olympus/victoriametrics/configuration.nix | 13 ++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/nixos/hosts/olympus/dhcp/configuration.nix b/nixos/hosts/olympus/dhcp/configuration.nix index 13b002b..daf061a 100644 --- a/nixos/hosts/olympus/dhcp/configuration.nix +++ b/nixos/hosts/olympus/dhcp/configuration.nix @@ -33,6 +33,12 @@ in { networking.firewall.allowedUDPPorts = [ 67 ]; + services.prometheus.exporters.kea = { + enable = true; + openFirewall = true; + controlSocketPaths = [ "/run/kea/kea-dhcp4.socket" ]; + }; + services.kea.dhcp4 = { enable = true; settings = { @@ -43,6 +49,11 @@ in { interfaces-config.interfaces = [ "eth0" ]; + control-socket = { + socket-type = "unix"; + socket-name = "/run/kea/kea-dhcp4.socket"; + }; + lease-database = { name = "/var/lib/kea/dhcp4.leases"; persist = true; diff --git a/nixos/hosts/olympus/victoriametrics/configuration.nix b/nixos/hosts/olympus/victoriametrics/configuration.nix index 20374b4..8879bac 100644 --- a/nixos/hosts/olympus/victoriametrics/configuration.nix +++ b/nixos/hosts/olympus/victoriametrics/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ config, ... }: let vmPort = 8428; grafanaDomain = config.meta.exposes.grafana.domain; @@ -18,10 +18,6 @@ in { # Before changing this value read the documentation for this option # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.stateVersion = "21.11"; # Did you read the comment? - - # Additional packages - environment.systemPackages = with pkgs; [ ]; - networking.firewall.allowedTCPPorts = [ vmPort grafanaPort ]; networking.firewall.allowedUDPPorts = [ vmPort ]; @@ -41,6 +37,13 @@ in { scrape_timeout = "30s"; }; scrape_configs = [ + { + job_name = "kea"; + static_configs = [{ + targets = [ "dhcp.olympus:9547" ]; + labels.app = "dhcp"; + }]; + } { job_name = "nginx"; static_configs = [{