diff --git a/flake.nix b/flake.nix index 2819c94..bb45831 100755 --- a/flake.nix +++ b/flake.nix @@ -25,8 +25,8 @@ sops-nix, ... } @ inputs: let - helpers = import ./helpers.nix inputs; - inherit (helpers) mergeHosts mkHost; + flock.lib = import ./lib inputs; + inherit (flock.lib) mergeHosts mkHost; in mergeHosts [ (mkHost "muskduck" { @@ -45,11 +45,6 @@ ]; }) - # (mkHost "docker" { - # suite = "vm"; - # user = "docker"; - # }) - (mkHost "minecraft" { suite = "vm"; user = "docker"; diff --git a/helpers.nix b/helpers.nix deleted file mode 100644 index 73616be..0000000 --- a/helpers.nix +++ /dev/null @@ -1,137 +0,0 @@ -inputs: -with inputs; -with inputs.nixpkgs.lib; { - mergeHosts = lists.foldl' ( - a: b: attrsets.recursiveUpdate a b - ) {}; - - mkHost = hostname: { - platform ? "x86_64-linux", - suite, - user ? "fern", - extraModules ? [], - }: let - system = platform; - secrets = builtins.toString inputs.secrets; - - pull-requests = { - fluffychat = import nixpkgs-pr-fluffychat { - inherit system; - overlays = [ - (final: prev: { - fluffychat = prev.fluffychat.overrideAttrs (prevAttrs: rec { - desktopItems = [ - ((builtins.elemAt prevAttrs.desktopItems 0).override {startupWMClass = "fluffychat";}) - ]; - }); - }) - ]; - }; - - feishin = import nixpkgs-pr-feishin { - inherit system; - overlays = [ - (final: prev: { - feishin = prev.feishin.overrideAttrs (prevAttrs: rec { - pname = "feishin"; - version = "0.18.0"; - - src = prev.fetchFromGitHub { - owner = "jeffvli"; - repo = "feishin"; - rev = "v${version}"; - hash = "sha256-4gcS7Vd7LSpEByO2Hlk6nb8V2adBPh5XwWGCu2lwOA4="; - }; - - pnpmDeps = prev.pnpm_10.fetchDeps { - inherit pname version src; - hash = "sha256-1MGxrUcfvazxAubaYAsQuulUKm05opWOIC7oaLzjr7o="; - }; - }); - }) - ]; - }; - }; - - userPackages = final: prev: { - # WebOne HTTP proxy. - webone = prev.pkgs.callPackage ./packages/webone {}; - # Yazi Gruvbox theme. - yazi-flavour-gruvbox-dark = prev.pkgs.callPackage ./packages/yazi-flavour-gruvbox {}; - # Latest FluffyChat. - fluffychat = pull-requests.fluffychat.fluffychat; - # Latest Feishin. - feishin = pull-requests.feishin.feishin; - # PrismLauncher with Temurin JRE. - prismlauncher = prev.prismlauncher.override { - jdks = [ - prev.pkgs.temurin-jre-bin - ]; - }; - }; - - pkgs = import nixpkgs { - inherit system; - config = { - allowUnfree = true; - permittedInsecurePackages = [ - "dotnet-sdk-6.0.428" - "dotnet-runtime-6.0.36" - ]; - }; - overlays = [ - userPackages - ]; - }; - - deployPkgs = import nixpkgs { - inherit system; - overlays = [ - deploy-rs.overlays.default - (self: super: { - deploy-rs = { - inherit (pkgs) deploy-rs; - lib = super.deploy-rs.lib; - }; - }) - ]; - }; - in - { - nixosConfigurations.${hostname} = nixosSystem { - inherit system pkgs; - - specialArgs = { - inherit - hostname - platform - suite - user - secrets - ; # Inherit variables. - }; - - modules = - [ - nixvim.nixosModules.nixvim - ./suites/common.nix - ./suites/${suite}.nix - ./hosts/${hostname}.nix - ] - ++ (filesystem.listFilesRecursive ./modules) - ++ extraModules; - }; - } - // optionalAttrs ((suite == "server") - || (suite == "vm") - || (suite == "lxc")) { - deploy.nodes.${hostname} = { - hostname = "${hostname}.local"; - profiles.system = { - user = "root"; - sshUser = user; - path = deployPkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.${hostname}; - }; - }; - }; -} diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..168a77a --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,81 @@ +inputs: +with inputs; +with inputs.nixpkgs.lib; { + mergeHosts = lists.foldl' ( + a: b: attrsets.recursiveUpdate a b + ) {}; + + mkHost = hostname: { + platform ? "x86_64-linux", + suite, + user ? "fern", + extraModules ? [], + }: let + system = platform; + secrets = builtins.toString inputs.secrets; + + pkgs = import nixpkgs { + inherit system; + config = { + allowUnfree = true; + permittedInsecurePackages = [ + "dotnet-sdk-6.0.428" + "dotnet-runtime-6.0.36" + ]; + }; + overlays = [ + (import ../overlays {inherit inputs system;}) + ]; + }; + + deployPkgs = import nixpkgs { + inherit system; + overlays = [ + deploy-rs.overlays.default + (self: super: { + deploy-rs = { + inherit (pkgs) deploy-rs; + lib = super.deploy-rs.lib; + }; + }) + ]; + }; + in + { + nixosConfigurations.${hostname} = nixosSystem { + inherit system pkgs; + + specialArgs = { + inherit + hostname + platform + suite + user + secrets + ; # Inherit variables. + }; + + modules = + [ + nixvim.nixosModules.nixvim + ../suites/common.nix + ../suites/${suite}.nix + ../hosts/${hostname}.nix + ] + ++ (filesystem.listFilesRecursive ../modules) + ++ extraModules; + }; + } + // optionalAttrs ((suite == "server") + || (suite == "vm") + || (suite == "lxc")) { + deploy.nodes.${hostname} = { + hostname = "${hostname}.local"; + profiles.system = { + user = "root"; + sshUser = user; + path = deployPkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.${hostname}; + }; + }; + }; +} diff --git a/overlays/default.nix b/overlays/default.nix new file mode 100644 index 0000000..025b179 --- /dev/null +++ b/overlays/default.nix @@ -0,0 +1,62 @@ +{ + inputs, + system, + ... +}: +with inputs; + final: prev: { + # WebOne HTTP proxy. + webone = prev.pkgs.callPackage ../packages/webone {}; + + # Yazi Gruvbox theme. + yazi-flavour-gruvbox-dark = prev.pkgs.callPackage ../packages/yazi-flavour-gruvbox {}; + + # Latest FluffyChat. + fluffychat = + (import nixpkgs-pr-fluffychat + { + inherit system; + overlays = [ + (final: prev: { + fluffychat = prev.fluffychat.overrideAttrs (prevAttrs: { + desktopItems = [ + ((builtins.elemAt prevAttrs.desktopItems 0).override {startupWMClass = "fluffychat";}) + ]; + }); + }) + ]; + }).fluffychat; + + # Latest Feishin. + feishin = + (import nixpkgs-pr-feishin { + inherit system; + overlays = [ + (final: prev: { + feishin = prev.feishin.overrideAttrs (prevAttrs: rec { + pname = "feishin"; + version = "0.18.0"; + + src = prev.fetchFromGitHub { + owner = "jeffvli"; + repo = "feishin"; + rev = "v${version}"; + hash = "sha256-4gcS7Vd7LSpEByO2Hlk6nb8V2adBPh5XwWGCu2lwOA4="; + }; + + pnpmDeps = prev.pnpm_10.fetchDeps { + inherit pname version src; + hash = "sha256-1MGxrUcfvazxAubaYAsQuulUKm05opWOIC7oaLzjr7o="; + }; + }); + }) + ]; + }).feishin; + + # PrismLauncher with Temurin JRE; + prismlauncher = prev.prismlauncher.override { + jdks = [ + prev.pkgs.temurin-jre-bin + ]; + }; + }