nix fmt with "nixfmt-rfc-style"

This commit is contained in:
pazpi 2024-08-27 09:46:44 +02:00
parent 4a39b2cbfd
commit eb9f742b1e
26 changed files with 460 additions and 267 deletions

View file

@ -23,12 +23,18 @@ in
services.podmanPods = { services.podmanPods = {
mywebapp = { mywebapp = {
name = "mywebapp"; name = "mywebapp";
ports = [ "9090:80" "9443:443" ]; ports = [
"9090:80"
"9443:443"
];
containers = { containers = {
webserver = { webserver = {
enable = true; enable = true;
image = "nginx"; image = "nginx";
volumes = [ "aaa:/config" "bbb:/data" ]; volumes = [
"aaa:/config"
"bbb:/data"
];
}; };
appserver = { appserver = {
image = "my-custom-app:latest"; image = "my-custom-app:latest";
@ -50,8 +56,6 @@ in
}; };
}; };
# Extra packages # Extra packages
# environment.systemPackages = with pkgs; [ ]; # environment.systemPackages = with pkgs; [ ];

View file

@ -1,4 +1,9 @@
{ config, pkgs, home-manager, ... }: {
config,
pkgs,
home-manager,
...
}:
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
@ -43,8 +48,6 @@
# podman.enable = true; # podman.enable = true;
download-pod.enable = true;
# Vedi https://github.com/TLATER/dotfiles/blob/f989a86890f27f6b089e9d74b7e8356ec8e5683d/home-config/hosts/yui.nix # Vedi https://github.com/TLATER/dotfiles/blob/f989a86890f27f6b089e9d74b7e8356ec8e5683d/home-config/hosts/yui.nix
# home-manager.users.pazpi = import "${flake-inputs.self}/home-config/hosts/deadbeef.nix"; # home-manager.users.pazpi = import "${flake-inputs.self}/home-config/hosts/deadbeef.nix";

View file

@ -1,42 +1,60 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, ... }: {
config,
lib,
modulesPath,
...
}:
{ {
imports = imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
[
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; boot.initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usb_storage"
"usbhid"
"sd_mod"
"rtsx_pci_sdmmc"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{
device = "/dev/disk/by-label/NixOS"; device = "/dev/disk/by-label/NixOS";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=root" "compress=zstd" "discard=async" ]; options = [
"subvol=root"
"compress=zstd"
"discard=async"
];
}; };
fileSystems."/home" = fileSystems."/home" = {
{
device = "/dev/disk/by-label/NixOS"; device = "/dev/disk/by-label/NixOS";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=home" "compress=zstd" "discard=async" ]; options = [
"subvol=home"
"compress=zstd"
"discard=async"
];
}; };
fileSystems."/nix" = fileSystems."/nix" = {
{
device = "/dev/disk/by-label/NixOS"; device = "/dev/disk/by-label/NixOS";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=nix" "noatime" "discard=async" ]; options = [
"subvol=nix"
"noatime"
"discard=async"
];
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{
device = "/dev/disk/by-label/BOOT"; device = "/dev/disk/by-label/BOOT";
fsType = "vfat"; fsType = "vfat";
}; };

View file

@ -82,7 +82,10 @@ in
"sys-fs-fuse-connections.mount" "sys-fs-fuse-connections.mount"
]; ];
nix.settings.experimental-features = [ "nix-command" "flakes" ]; nix.settings.experimental-features = [
"nix-command"
"flakes"
];
system.stateVersion = "24.05"; system.stateVersion = "24.05";
} }

View file

@ -125,7 +125,10 @@ in
"sys-fs-fuse-connections.mount" "sys-fs-fuse-connections.mount"
]; ];
nix.settings.experimental-features = [ "nix-command" "flakes" ]; nix.settings.experimental-features = [
"nix-command"
"flakes"
];
system.stateVersion = "24.05"; system.stateVersion = "24.05";
} }

View file

@ -21,7 +21,10 @@
# }; # };
# Since we don't use DHCP, we need to set our own nameservers. # Since we don't use DHCP, we need to set our own nameservers.
nameservers = [ "1.1.1.1" "1.0.0.1" ]; nameservers = [
"1.1.1.1"
"1.0.0.1"
];
}; };

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.audio; cfg = config.audio;
in in

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.btrfsAutoscrub; cfg = config.btrfsAutoscrub;
in in

View file

@ -25,7 +25,10 @@ in
nix = { nix = {
settings.experimental-features = [ "nix-command" "flakes" ]; settings.experimental-features = [
"nix-command"
"flakes"
];
gc = { gc = {
# Auto delete old generations # Auto delete old generations

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.gnome; cfg = config.gnome;
in in
@ -58,13 +63,15 @@ in
]; ];
# Remove standard Gnome Packages # Remove standard Gnome Packages
gnome.excludePackages = (with pkgs; [ gnome.excludePackages =
(with pkgs; [
gedit # text editor gedit # text editor
gnome-photos gnome-photos
gnome-tour gnome-tour
gnome-connections gnome-connections
gnome-photos gnome-photos
]) ++ (with pkgs.gnome; [ ])
++ (with pkgs.gnome; [
atomix # puzzle game atomix # puzzle game
cheese # webcam tool cheese # webcam tool
epiphany # web browser epiphany # web browser

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.plymouth; cfg = config.plymouth;
in in
@ -11,7 +16,9 @@ in
boot.plymouth = { boot.plymouth = {
enable = true; enable = true;
theme = "colorful_loop"; theme = "colorful_loop";
themePackages = [ (pkgs.adi1090x-plymouth-themes.override { selected_themes = [ "colorful_loop" ]; }) ]; themePackages = [
(pkgs.adi1090x-plymouth-themes.override { selected_themes = [ "colorful_loop" ]; })
];
}; };
}; };

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.steam; cfg = config.steam;
in in

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.mainUser; cfg = config.mainUser;
in in
@ -37,14 +42,22 @@ in
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
users.users.${cfg.userName} = { users.users.${cfg.userName} = {
description = cfg.description; description = cfg.description;
extraGroups = [ "users" "wheel" ]; extraGroups = [
"users"
"wheel"
];
initialHashedPassword = cfg.hashedPassword; initialHashedPassword = cfg.hashedPassword;
isNormalUser = true; isNormalUser = true;
isSystemUser = false; isSystemUser = false;
shell = pkgs.zsh; shell = pkgs.zsh;
uid = 1000; uid = 1000;
packages = with pkgs; lib.mkIf cfg.flatpak [ flatpak gnome.gnome-software ]; packages =
with pkgs;
lib.mkIf cfg.flatpak [
flatpak
gnome.gnome-software
];
}; };
console.keyMap = "it"; console.keyMap = "it";

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.avahi; cfg = config.avahi;
in in

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.tailscale; cfg = config.tailscale;
in in

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.download-pod-old; cfg = config.download-pod-old;
in in
@ -37,8 +42,7 @@ in
}; };
config = lib.mkIf cfg.enable config = lib.mkIf cfg.enable {
{
podman.enable = true; podman.enable = true;
systemd.services.pod-download = { systemd.services.pod-download = {
@ -72,7 +76,10 @@ in
"--init=true" "--init=true"
"--pod=download" "--pod=download"
]; ];
volumes = [ "jackett_config:/config" "${cfg.dataDir}:/data" ]; volumes = [
"jackett_config:/config"
"${cfg.dataDir}:/data"
];
}; };
radarr = { radarr = {
@ -84,7 +91,10 @@ in
"--init=true" "--init=true"
"--pod=download" "--pod=download"
]; ];
volumes = [ "radarr_config:/config" "${cfg.dataDir}:/data" ]; volumes = [
"radarr_config:/config"
"${cfg.dataDir}:/data"
];
}; };
sabnzbd = { sabnzbd = {
@ -96,7 +106,10 @@ in
"--init=true" "--init=true"
"--pod=download" "--pod=download"
]; ];
volumes = [ "sabnzbd_config:/config" "${cfg.dataDir}:/data" ]; volumes = [
"sabnzbd_config:/config"
"${cfg.dataDir}:/data"
];
}; };
sonarr = { sonarr = {
@ -108,7 +121,10 @@ in
"--init=true" "--init=true"
"--pod=download" "--pod=download"
]; ];
volumes = [ "sonarr_config:/config" "${cfg.dataDir}:/data" ]; volumes = [
"sonarr_config:/config"
"${cfg.dataDir}:/data"
];
}; };
}; };
@ -133,7 +149,6 @@ in
}; };
}; };
} }

View file

@ -1,4 +1,9 @@
{ config, pkgs, lib, ... }: {
config,
pkgs,
lib,
...
}:
let let
cfg = config.download-pod; cfg = config.download-pod;
in in
@ -73,45 +78,47 @@ in
jackett = { jackett = {
image = "linuxserver/jackett"; image = "linuxserver/jackett";
autoStart = true; autoStart = true;
extraOptions = [ extraOptions = [ "--pod=my-pod" ];
"--pod=my-pod" volumes = [
"jackett_config:/config"
"jackett_data:/data"
]; ];
volumes = [ "jackett_config:/config" "jackett_data:/data" ];
}; };
radarr = { radarr = {
image = "linuxserver/radarr"; image = "linuxserver/radarr";
autoStart = true; autoStart = true;
extraOptions = [ extraOptions = [ "--pod=download" ];
"--pod=download" volumes = [
"radarr_config:/config"
"radarr_data:/data"
]; ];
volumes = [ "radarr_config:/config" "radarr_data:/data" ];
}; };
sabnzbd = { sabnzbd = {
image = "linuxserver/sabnzbd"; image = "linuxserver/sabnzbd";
autoStart = true; autoStart = true;
extraOptions = [ extraOptions = [ "--pod=download" ];
"--pod=download" volumes = [
"sabnzbd_config:/config"
"sabnzbd_data:/data"
]; ];
volumes = [ "sabnzbd_config:/config" "sabnzbd_data:/data" ];
}; };
sonarr = { sonarr = {
image = "linuxserver/sonarr"; image = "linuxserver/sonarr";
autoStart = true; autoStart = true;
extraOptions = [ extraOptions = [ "--pod=download" ];
"--pod=download" volumes = [
"sonarr_config:/config"
"sonarr_data:/data"
]; ];
volumes = [ "sonarr_config:/config" "sonarr_data:/data" ];
}; };
prowlarr = { prowlarr = {
image = "linuxserver/prowlarr"; image = "linuxserver/prowlarr";
autoStart = true; autoStart = true;
extraOptions = [ extraOptions = [ "--pod=download" ];
"--pod=download"
];
volumes = [ "prowlarr_config:/config" ]; volumes = [ "prowlarr_config:/config" ];
}; };
@ -139,5 +146,4 @@ in
}; };
} }

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.nextcloud-pd; cfg = config.nextcloud-pd;
in in

View file

@ -1,22 +1,40 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.services.rutorrent; cfg = config.services.rutorrent;
rutorrentPkgs = import ../packages/rutorrent.nix { inherit pkgs; inherit lib; }; rutorrentPkgs = import ../packages/rutorrent.nix {
inherit pkgs;
inherit lib;
};
rtorrentPluginDependencies = with pkgs; { rtorrentPluginDependencies = with pkgs; {
_task = [ procps ]; _task = [ procps ];
unpack = [ unzip unrar ]; unpack = [
unzip
unrar
];
rss = [ curl ]; rss = [ curl ];
mediainfo = [ mediainfo ]; mediainfo = [ mediainfo ];
spectrogram = [ sox ]; spectrogram = [ sox ];
screenshots = [ ffmpeg ]; screenshots = [ ffmpeg ];
}; };
python = with pkgs; (python312.withPackages (p: with p; [ cloudscraper cfscrape ])); python =
with pkgs;
(python312.withPackages (
p: with p; [
cloudscraper
cfscrape
]
));
phpPluginDependencies = with pkgs; { phpPluginDependencies = with pkgs; {
_cloudflare = [ python ]; _cloudflare = [ python ];
@ -77,7 +95,13 @@ in
}; };
poolSettings = mkOption { poolSettings = mkOption {
type = with types; attrsOf (oneOf [ str int bool ]); type =
with types;
attrsOf (oneOf [
str
int
bool
]);
default = { default = {
"pm" = "dynamic"; "pm" = "dynamic";
"pm.max_children" = 32; "pm.max_children" = 32;
@ -118,7 +142,10 @@ in
{ {
assertions = assertions =
let let
usedRpcPlugins = intersectLists cfg.plugins [ "httprpc" "rpc" ]; usedRpcPlugins = intersectLists cfg.plugins [
"httprpc"
"rpc"
];
in in
[ [
{ {
@ -136,11 +163,17 @@ in
nginxVhostCfg = config.services.nginx.virtualHosts."${cfg.hostName}"; nginxVhostCfg = config.services.nginx.virtualHosts."${cfg.hostName}";
in in
[ ] [ ]
++ (optional (cfg.nginx.exposeInsecureRPC2mount && (nginxVhostCfg.basicAuth == { } || nginxVhostCfg.basicAuthFile == null)) '' ++ (optional
(
cfg.nginx.exposeInsecureRPC2mount
&& (nginxVhostCfg.basicAuth == { } || nginxVhostCfg.basicAuthFile == null)
)
''
You are using exposeInsecureRPC2mount without using basic auth on the virtual host. The exposed rpc mount allow for remote command execution. You are using exposeInsecureRPC2mount without using basic auth on the virtual host. The exposed rpc mount allow for remote command execution.
Please make sure it is not accessible from the outside. Please make sure it is not accessible from the outside.
''); ''
);
systemd = { systemd = {
services = { services = {
@ -230,7 +263,10 @@ in
cp -r ${rutorrentPkgs}/php ${cfg.dataDir}/ cp -r ${rutorrentPkgs}/php ${cfg.dataDir}/
${optionalString (cfg.plugins != [ ]) ${optionalString (cfg.plugins != [ ])
''cp -r ${concatMapStringsSep " " (p: "${rutorrentPkgs}/plugins/${p}") cfg.plugins} ${cfg.dataDir}/plugins/''} ''cp -r ${
concatMapStringsSep " " (p: "${rutorrentPkgs}/plugins/${p}") cfg.plugins
} ${cfg.dataDir}/plugins/''
}
chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir}/{conf,share,logs,plugins} chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir}/{conf,share,logs,plugins}
chmod -R 755 ${cfg.dataDir}/{conf,share,logs,plugins} chmod -R 755 ${cfg.dataDir}/{conf,share,logs,plugins}
@ -263,7 +299,10 @@ in
{ {
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ 80 443 ]; allowedTCPPorts = [
80
443
];
}; };
services = { services = {
@ -303,11 +342,12 @@ in
pool = { pool = {
user = cfg.user; user = cfg.user;
group = config.services.rtorrent.group; group = config.services.rtorrent.group;
settings = mapAttrs (name: mkDefault) settings =
{ mapAttrs (name: mkDefault) {
"listen.owner" = config.services.nginx.user; "listen.owner" = config.services.nginx.user;
"listen.group" = config.services.nginx.group; "listen.group" = config.services.nginx.group;
} // cfg.poolSettings; }
// cfg.poolSettings;
}; };
in in
if (envPath == "") then pool else pool // { phpEnv.PATH = envPath; }; if (envPath == "") then pool else pool // { phpEnv.PATH = envPath; };

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.docker; cfg = config.docker;
in in

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.libvirtd; cfg = config.libvirtd;
in in

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.lxc; cfg = config.lxc;
in in

View file

@ -1,5 +1,10 @@
# Save this as podman-pod.nix # Save this as podman-pod.nix
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
@ -7,15 +12,20 @@ let
cfg = config.services.podmanPods; cfg = config.services.podmanPods;
# Get the options from the original oci-containers module # Get the options from the original oci-containers module
containerOptions = (filterAttrs (n: v: n != "definition") containerOptions = (
config.virtualisation.oci-containers.containers.type.getSubOptions); filterAttrs (
n: v: n != "definition"
) config.virtualisation.oci-containers.containers.type.getSubOptions
);
# Add our enable option # Add our enable option
extendedContainerOptions = containerOptions // { extendedContainerOptions = containerOptions // {
enable = mkEnableOption "Enable this container"; enable = mkEnableOption "Enable this container";
}; };
podOptions = { name, config, ... }: { podOptions =
{ name, config, ... }:
{
options = { options = {
name = mkOption { name = mkOption {
@ -30,9 +40,7 @@ let
}; };
containers = mkOption { containers = mkOption {
type = types.attrsOf (types.submodule { type = types.attrsOf (types.submodule { options = extendedContainerOptions; });
options = extendedContainerOptions;
});
default = { }; default = { };
description = "Attribute set of OCI container configurations for this set"; description = "Attribute set of OCI container configurations for this set";
}; };
@ -40,7 +48,8 @@ let
}; };
}; };
createPodScript = name: podDef: createPodScript =
name: podDef:
let let
podDefinitionString = builtins.toJSON { inherit (podDef) ports; }; podDefinitionString = builtins.toJSON { inherit (podDef) ports; };
in in
@ -73,11 +82,11 @@ let
fi fi
''; '';
enabledContainers = lib.flatten (mapAttrs enabledContainers = lib.flatten (
(podName: podConfig: mapAttrs (
filterAttrs (name: value: value.enable or true) podConfig.containers podName: podConfig: filterAttrs (name: value: value.enable or true) podConfig.containers
) ) cfg
cfg); );
in in
{ {
@ -126,37 +135,38 @@ in
# ) # )
# (filterAttrs (name: value: value.enable) cfg.containers); # (filterAttrs (name: value: value.enable) cfg.containers);
networking.firewall.allowedTCPPorts = flatten (mapAttrsToList networking.firewall.allowedTCPPorts = flatten (
(name: podDef: mapAttrsToList (
map (portMapping: lib.toInt (lib.head (lib.splitString ":" portMapping))) podDef.ports name: podDef: map (portMapping: lib.toInt (lib.head (lib.splitString ":" portMapping))) podDef.ports
) ) cfg
cfg); );
systemd.services = systemd.services =
let let
podServices = mapAttrs' podServices = mapAttrs' (
(name: podDef: name: podDef:
nameValuePair "podman-pod-${name}" { nameValuePair "podman-pod-${name}" {
description = "Manage Podman pod: ${name}"; description = "Manage Podman pod: ${name}";
serviceConfig = { serviceConfig = {
Type = "oneshot"; Type = "oneshot";
ExecStart = "${createPodScript name podDef}"; ExecStart = "${createPodScript name podDef}";
}; };
path = [ pkgs.jq pkgs.podman ]; path = [
pkgs.jq
pkgs.podman
];
after = [ "network.target" ]; after = [ "network.target" ];
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
} }
) ) cfg;
cfg; containerServices = mapAttrs' (
containerServices = mapAttrs' name: container:
(name: container:
nameValuePair "podman-${name}" { nameValuePair "podman-${name}" {
after = [ "podman-pod-${lib.head (lib.splitString "-" name)}.service" ]; after = [ "podman-pod-${lib.head (lib.splitString "-" name)}.service" ];
requires = [ "podman-pod-${lib.head (lib.splitString "-" name)}.service" ]; requires = [ "podman-pod-${lib.head (lib.splitString "-" name)}.service" ];
partOf = [ "podman-pod-${lib.head (lib.splitString "-" name)}.service" ]; partOf = [ "podman-pod-${lib.head (lib.splitString "-" name)}.service" ];
} }
) ) config.virtualisation.oci-containers.containers;
config.virtualisation.oci-containers.containers;
in in
podServices // containerServices; podServices // containerServices;
}; };

View file

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.podman; cfg = config.podman;
in in

View file

@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.proxmox; cfg = config.proxmox;

View file

@ -1,4 +1,7 @@
{ pkgs ? import <nixpkgs> { }, lib, }: {
pkgs ? import <nixpkgs> { },
lib,
}:
with pkgs; with pkgs;