nixos: Modularize NixOS and Home Manager config
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
{
|
||||
programs.firefox.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{ ... }:
|
||||
{
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
services.displayManager = {
|
||||
plasma-login-manager.enable = true;
|
||||
autoLogin = { enable = true; user = "emmatherock"; };
|
||||
};
|
||||
security.pam.services.login.enableKwallet = true;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
# Lanzaboote reemplaza al systemd-boot estándar
|
||||
boot.loader.systemd-boot.enable = lib.mkForce false;
|
||||
|
||||
boot.lanzaboote = {
|
||||
enable = true;
|
||||
pkiBundle = "/var/lib/sbctl";
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
virtualisation = {
|
||||
containers.enable = true;
|
||||
podman = {
|
||||
enable = true;
|
||||
defaultNetwork.settings.dns_enabled = true;
|
||||
};
|
||||
docker = {
|
||||
enable = true;
|
||||
storageDriver = "btrfs";
|
||||
daemon.settings = {
|
||||
dns = [ "1.1.1.1" "8.8.8.8" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services = {
|
||||
init-docker-networks = {
|
||||
description = "Crear redes globales de Docker si no existen";
|
||||
after = [ "docker.service" ];
|
||||
requires = [ "docker.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.docker}/bin/docker network inspect homelab_net >/dev/null 2>&1 || ${pkgs.docker}/bin/docker network create homelab_net'";
|
||||
};
|
||||
};
|
||||
docker-compose-tools = {
|
||||
description = "Stack de Docker Compose: Tools";
|
||||
after = [ "docker.service" "network-online.target" "tailscaled.service" ];
|
||||
wants = [ "docker.service" "network-online.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
WorkingDirectory = "/mnt/containers/tools";
|
||||
ExecStart = "${pkgs.docker}/bin/docker compose up -d --remove-orphans";
|
||||
ExecStop = "${pkgs.docker}/bin/docker compose down";
|
||||
};
|
||||
};
|
||||
docker-compose-arrs = {
|
||||
description = "Stack de Docker Compose: Arrs";
|
||||
after = [ "docker.service" "docker-compose-tools.service" "local-fs.target" ];
|
||||
wants = [ "docker.service" "docker-compose-tools.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
WorkingDirectory = "/mnt/containers/arrs";
|
||||
ExecStart = "${pkgs.docker}/bin/docker compose up -d --remove-orphans";
|
||||
ExecStop = "${pkgs.docker}/bin/docker compose down";
|
||||
};
|
||||
};
|
||||
docker-compose-gameservers = {
|
||||
description = "Stack de Docker Compose: Gameservers";
|
||||
after = [ "docker.service" "docker-compose-tools.service" ];
|
||||
wants = [ "docker.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
WorkingDirectory = "/mnt/containers/gameserver";
|
||||
ExecStart = "${pkgs.docker}/bin/docker compose up -d --remove-orphans";
|
||||
ExecStop = "${pkgs.docker}/bin/docker compose down";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
nix.settings.auto-optimise-store = true;
|
||||
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 14d";
|
||||
};
|
||||
|
||||
services.journald.extraConfig = "SystemMaxUse=500M";
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
services.vscode-server.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
jack.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{pkgs, apple-fonts, ... }:
|
||||
{
|
||||
fonts.packages = with pkgs; [
|
||||
noto-fonts noto-fonts-cjk-sans noto-fonts-color-emoji
|
||||
nerd-fonts.fira-code nerd-fonts.jetbrains-mono
|
||||
apple-fonts.packages.${pkgs.stdenv.hostPlatform.system}.sf-pro
|
||||
apple-fonts.packages.${pkgs.stdenv.hostPlatform.system}.sf-mono
|
||||
apple-fonts.packages.${pkgs.stdenv.hostPlatform.system}.ny
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
programs = {
|
||||
gamemode.enable = true;
|
||||
steam = { enable = true; remotePlay.openFirewall = true; };
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{pkgs, ... }:
|
||||
{
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
extraPackages = with pkgs; [
|
||||
rocmPackages.clr.icd
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{ config, pkgs, ... }: {
|
||||
networking = {
|
||||
hostName = "miku-homelab";
|
||||
networkmanager.enable = true;
|
||||
firewall = {
|
||||
enable = true;
|
||||
allowedUDPPorts = [ config.services.tailscale.port 4242 49983 24800 26900 ];
|
||||
allowedTCPPorts = [ 22 4242 49983 24800 26900 ];
|
||||
};
|
||||
useDHCP = false;
|
||||
interfaces.enp6s0.ipv4.addresses = [{
|
||||
address = "192.168.1.21";
|
||||
prefixLength = 24;
|
||||
}];
|
||||
defaultGateway = "192.168.1.1";
|
||||
|
||||
# DNS rápidos para que la resolución de nombres sea instantánea
|
||||
nameservers = [ "1.1.1.1" "8.8.8.8" ];
|
||||
};
|
||||
|
||||
services.tailscale.enable = true;
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
settings = {
|
||||
PermitRootLogin = "no";
|
||||
PasswordAuthentication = false;
|
||||
AllowUsers = [ "emmatherock" ];
|
||||
};
|
||||
};
|
||||
|
||||
services.samba = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
settings = {
|
||||
global = {
|
||||
"vfs objects" = "acl_xattr";
|
||||
"map acl inherit" = "yes";
|
||||
"store dos attributes" = "yes";
|
||||
};
|
||||
mikufanclub = {
|
||||
path = "/mnt/data/mikufanclub";
|
||||
writable = "yes";
|
||||
"valid users" = "mikushare emmatherock";
|
||||
"force group" = "mikushare-group";
|
||||
"create mask" = "0660";
|
||||
"directory mask" = "0770";
|
||||
};
|
||||
data-private = {
|
||||
path = "/mnt/data";
|
||||
writable = "yes";
|
||||
"valid users" = "emmatherock";
|
||||
"browseable" = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.tailscale-udp-gro = {
|
||||
description = "Configurar UDP GRO para Tailscale";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${pkgs.ethtool}/bin/ethtool -K enp6s0 rx-udp-gro-forwarding on rx-gro-list on";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{pkgs, ... }:
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
git
|
||||
wget
|
||||
curl
|
||||
ethtool
|
||||
fish
|
||||
rocmPackages.rocm-smi
|
||||
btrfs-progs
|
||||
distrobox
|
||||
steam-run
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
programs = {
|
||||
fish.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{ pkgs, ... }: {
|
||||
environment.localBinInPath = true;
|
||||
|
||||
users.groups.mikushare-group = {};
|
||||
|
||||
users.groups.plugdev = {};
|
||||
|
||||
users.users.emmatherock = {
|
||||
isNormalUser = true;
|
||||
description = "EmmaTheRock";
|
||||
shell = pkgs.fish;
|
||||
extraGroups = [ "plugdev" "networkmanager" "wheel" "video" "mikushare-group" "render" ];
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA8vfwM5g9RJXqHtqTgNqsYg9SxSm+UMvFqTjBoAsLJ6 emmatherock@MAIN-PC"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIpTslcK0yQ6k+h8foNl17wVRyJUfEGzq7f1h3014WNB s21 plus"
|
||||
];
|
||||
};
|
||||
|
||||
users.users.mikushare = {
|
||||
isNormalUser = true;
|
||||
description = "Acceso remoto Mikufanclub";
|
||||
group = "mikushare-group";
|
||||
createHome = false;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user