nix-config/flake.nix
2026-01-26 01:16:35 +01:00

124 lines
3.1 KiB
Nix

{
description = "My NixOS flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
disko = {
url = "github:nix-community/disko/latest";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = {
url = "github:nix-community/home-manager/release-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
disko,
home-manager,
sops-nix,
...
}@inputs:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in
{
nixosConfigurations =
let
my-r = import ./languages/r.nix { inherit pkgs; };
my-python = import ./languages/python.nix { inherit pkgs; };
T14pModules = [
disko.nixosModules.disko
sops-nix.nixosModules.sops
home-manager.nixosModules.home-manager
./hosts/T14p/configuration.nix
{
home-manager.extraSpecialArgs = {
inherit inputs my-r my-python;
};
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.louis = import ./home/full.nix;
home-manager.users.root = import ./home/root.nix;
}
];
mkT14p = nixpkgs.lib.nixosSystem {
inherit system;
specialArgs = { inherit inputs; };
modules = T14pModules;
};
mkServer =
domain: isProd:
nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs domain isProd; };
modules = [
inputs.disko.nixosModules.disko
sops-nix.nixosModules.sops
./hosts/hetzner/configuration.nix
];
};
in
{
T14p = mkT14p;
hetzner-prod = mkServer "louisclee.com" true;
hetzner-test = mkServer "localhost" false;
};
apps.${system} =
let
target = "root@louisclee.com";
deployScript = pkgs.writeShellScriptBin "deploy" ''
${pkgs.nixos-rebuild}/bin/nixos-rebuild switch \
--flake .#hetzner-prod \
--target-host ${target} \
--use-remote-sudo
'';
initScript = pkgs.writeShellScriptBin "init" ''
nix run github:nix-community/nixos-anywhere -- \
--flake .#hetzner-prod \
--extra-files ./hosts/hetzner/extra-files \
${target}
'';
in
{
deploy = {
type = "app";
program = "${deployScript}/bin/deploy";
};
init = {
type = "app";
program = "${initScript}/bin/init";
};
vm = {
type = "app";
program = "${self.nixosConfigurations.hetzner-test.config.system.build.vm}/bin/run-webserver-vm";
};
};
};
}