Update config

This commit is contained in:
Lomig 2025-08-31 12:03:52 +02:00
parent e1df4bbbcf
commit 556e0e1eb2
15 changed files with 323 additions and 164 deletions

View file

@ -1,11 +1,9 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
{ {
programs.floorp = { programs.firefox = {
enable = true ;
languagePacks = [ "fr" ] ;
};
programs.firefox = {
enable = true ; enable = true ;
languagePacks = [ "fr" ] ; languagePacks = [ "fr" ] ;
}; };
} }
# vim: set ts=2 sw=2 sts=2 et :

View file

@ -1,4 +1,93 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
{
let
domain = "git.lomig.me"; # <-- mets ton domaine
giteaHttpPort = 3000; # port local de Gitea
in {
########################################
# Base système
########################################
networking.firewall.allowedTCPPorts = [ 80 443 22 ]; # HTTP(S) + SSH (22)
services.openssh.enable = true; # si tu veux aussi OpenSSH pour le reste
########################################
# Base de données Postgres
########################################
services.postgresql = {
enable = true;
ensureDatabases = [ "gitea" ];
ensureUsers = [
{ name = "gitea";
ensureDBOwnership = true;
}
];
};
########################################
# Gitea
########################################
services.gitea = {
enable = true;
appName = "Gitea";
user = "gitea"; # user système service
database = {
type = "postgres";
user = "gitea";
name = "gitea";
host = "127.0.0.1";
};
# Répertoire de données (par défaut: /var/lib/gitea)
stateDir = "/var/lib/gitea";
# Réglages gitea.ini
settings = {
server = {
PROTOCOL = "http";
HTTP_ADDR = "127.0.0.1";
HTTP_PORT = giteaHttpPort;
DOMAIN = domain;
ROOT_URL = "https://${domain}/";
SSH_DOMAIN = domain;
# SSH intégré par Gitea (pratique : pas besoin de configurer un port séparé)
START_SSH_SERVER = true;
SSH_LISTEN_PORT = 2222; # port interne Gitea
SSH_PORT = 22; # port public affiché dans les URLs clone
};
service = {
DISABLE_REGISTRATION = true; # tu créeras les comptes toimême
REQUIRE_SIGNIN_VIEW = false;
REGISTER_EMAIL_CONFIRM = true;
};
# SMTP (remplace par ton vrai relais)
log = {
MODE = "console";
LEVEL = "Info";
};
};
# Création d'un admin au premier démarrage (facultatif mais pratique)
# Remplace le mot de passe et lemail :
# L'utilisateur est créé si inexistant.
};
########################################
# Caddy reverse proxy + TLS
########################################
services.caddy = {
enable = true;
virtualHosts."${domain}".extraConfig = ''
encode zstd gzip
reverse_proxy 127.0.0.1:${toString giteaHttpPort}
'';
# Par défaut, Caddy va récupérer un certificat Let's Encrypt pour le domaine public
# Si domaine local sans DNS public, ajoute `tls internal` dans extraConfig.
};
} }
# vim: set ts=2 sw=2 sts=2 et :

View file

@ -48,3 +48,4 @@
}; };
} }
# vim: set ts=2 sw=2 sts=2 et :

View file

@ -2,4 +2,5 @@
{ {
} }
# vim: set ts=2 sw=2 sts=2 et :
# vim: set ts=2 sw=2 sts=2 et :

64
apps/truenas.nix Normal file
View file

@ -0,0 +1,64 @@
{ config, pkgs, ... }:
{
boot.initrd.kernelModules = [ "vfio_pci" "vfio" "vfio_iommu_type1" ];
boot.extraModprobeConfig = ''
options vfio-pci ids=1022:43f6
'';
boot.kernelParams = [
"amd_iommu=on"
"iommu=pt"
];
users.users.lomig.extraGroups = [ "disk" ];
security.pam.loginLimits = [
{ domain="lomig"; type="soft"; item="memlock"; value="infinity"; }
{ domain="lomig"; type="hard"; item="memlock"; value="infinity"; }
];
boot.kernel.sysctl."vm.nr_hugepages" = 1024;
fileSystems."/dev/hugepages" = { device="hugetlbfs"; fsType="hugetlbfs"; };
# services.udev.extraRules = ''
# SUBSYSTEM=="block", ENV{ID_SERIAL}=="wwn-0x50000c500b0179482", GROUP="disk", MODE="0660"
# SUBSYSTEM=="block", ENV{ID_SERIAL}=="wwn-0x50000c500cc529430", GROUP="disk", MODE="0660"
# SUBSYSTEM=="block", ENV{ID_SERIAL}=="wwn-0x50000c500cc53994a", GROUP="disk", MODE="0660"
# SUBSYSTEM=="block", ENV{ID_SERIAL}=="wwn-0x50000c500cc5551d4", GROUP="disk", MODE="0660"
# SUBSYSTEM=="vfio", GROUP="kvm", MODE="0660"
# '';
systemd.services.truenas-vm = {
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
RuntimeDirectory = "truenas" ;
ExecStartPre = "/run/current-system/sw/bin/rm -f /run/truenas/qmp.sock";
ExecStart = ''
/run/current-system/sw/bin/qemu-system-x86_64 -enable-kvm -m 4096 -smp 2 \
-drive file=/home/lomig/vm/truenas.qcow2,if=none,format=qcow2,id=os \
-device vfio-pci,host=0e:00.0 \
-netdev bridge,br=br0,id=n1,helper=/run/wrappers/bin/qemu-bridge-helper \
-device virtio-net-pci,netdev=n1,mac=52:54:00:00:01:02 \
-device virtio-blk-pci,drive=os,bootindex=0 \
-qmp unix:/run/truenas.qmp,server,nowait -display none
'';
ExecStop = ''
echo '{"execute":"system_powerdown"}' | socat - UNIX-CONNECT:/run/truenas.qmp || true ; sleep 5
'';
Restart = "on-failure";
RestartSec = 3 ;
StartLimitIntervalSec = 60 ;
StartLimitBurst = 5 ;
};
};
systemd.services.resume-truenas-vm = {
description = "Restart Truenas VM after resume" ;
wantedBy = [ "sleep.target" ];
after = [ "sleep.target" ];
serviceConfig = {
Type = "oneshot" ;
ExecStart = "${pkgs.systemd}/bin/systemctl try-restart truenas-vm.service";
};
};
}
# vim: set ts=2 sw=2 sts=2 et :

View file

@ -1,6 +1,12 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
{ {
programs.dircolors.enableZshIntegration = true ;
programs.zsh = { programs.zsh = {
autosuggestion.enable = true ;
dirHashes = {
dl = "$HOME/Téléchargements" ;
nix = "$HOME/nixos-config" ;
};
enable = true ; enable = true ;
enableCompletion = true ; enableCompletion = true ;
history = { history = {
@ -9,12 +15,19 @@
findNoDups = true ; findNoDups = true ;
ignoreAllDups = true ; ignoreAllDups = true ;
ignoreSpace = true ; ignoreSpace = true ;
ignorePatterns = [ "rm *" "cd *" "ls *" ] ; ignorePatterns = [ "rm *" "cd *" "ls *" "df *" "du *" "fastfetch" "tree" "pwd" "upd" ] ;
saveNoDups = false ; saveNoDups = false ;
}; };
shellAliases = {
h = "history" ;
upd = "sudo nixos-rebuild switch --flake $HOME/nixos-config#pennsardin; source ~/.zshrc" ;
};
shellGlobalAliases = { shellGlobalAliases = {
G = "| grep"; G = "| grep";
M = "| more"; M = "| more";
}; };
syntaxHighlighting.enable = true ;
}; };
} }
# vim: set ts=2 sw=2 sts=2 et :

12
flake.lock generated
View file

@ -7,11 +7,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755755322, "lastModified": 1756579987,
"narHash": "sha256-spCxkNihCk3uT3LUrUwzdEAjLA/E0EtEgF3KVI05nlM=", "narHash": "sha256-duCce8zGsaMsrqqOmLOsuaV1PVIw/vXWnKuLKZClsGg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "282b4c98de97da6667cb03de4f427371734bc39c", "rev": "99a69bdf8a3c6bf038c4121e9c4b6e99706a187a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -22,11 +22,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1755716446, "lastModified": 1756578978,
"narHash": "sha256-AdVENrXoFws0sENT2Sz9SMavbqVJnATmCODuqJ7GcSs=", "narHash": "sha256-dLgwMLIMyHlSeIDsoT2OcZBkuruIbjhIAv1sGANwtes=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b0eccfbc0168243438e8a6747fcdfb1bb796a3f7", "rev": "a85a50bef870537a9705f64ed75e54d1f4bf9c23",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -1,14 +1,9 @@
# modules/alerts/sms.nix
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
{ {
# services.xserver.enable = true;
services.xserver.xkb.extraLayouts.bepovim = { services.xserver.xkb.extraLayouts.bepovim = {
description = "Clavier Bepovim 4 niveaux"; description = "Clavier Bepovim 4 niveaux";
languages = [ "fr" ]; languages = [ "fr" ];
# IMPORTANT: c'est `symbolsFile`, pas `symbols`.
symbolsFile = builtins.toFile "bepovim.xkb" '' symbolsFile = builtins.toFile "bepovim.xkb" ''
xkb_symbols "basic" { xkb_symbols "basic" {
name[Group1] = "Bepovim"; name[Group1] = "Bepovim";
@ -24,7 +19,7 @@
key <AE08> { [ minus, 7, asciitilde ] }; key <AE08> { [ minus, 7, asciitilde ] };
key <AE09> { [ asterisk, 8 ] }; key <AE09> { [ asterisk, 8 ] };
key <AE10> { [ slash, 9, backslash ] }; key <AE10> { [ slash, 9, backslash ] };
key <AE11> { [ quotedbl, 0 ] }; key <AE11> { [ quotedbl, 0, percent ] };
key <AE12> { [ equal, ampersand ] }; key <AE12> { [ equal, ampersand ] };
key <BKSP> { [ BackSpace ] }; key <BKSP> { [ BackSpace ] };
key <TAB> { [ Tab, ISO_Left_Tab ] }; key <TAB> { [ Tab, ISO_Left_Tab ] };
@ -100,3 +95,4 @@
console.useXkbConfig = true; console.useXkbConfig = true;
} }
# vim: set ts=2 sw=2 sts=2 et :

View file

@ -2,13 +2,14 @@
{ {
imports = [ imports = [
./raid.nix
./bepovim.nix ./bepovim.nix
../../wm/bspwm.nix ../../wm/plasma.nix
../../apps/qemu.nix ../../apps/qemu.nix
../../apps/gitea.nix
../../apps/truenas.nix
]; ];
nix.settings.experimental-features = ["nix-command" "flakes" ]; nix.settings.experimental-features = ["nix-command" "flakes" ];
boot.initrd.kernelModules = []; boot.initrd.kernelModules = [ "vfio_pci" "vfio" "vfio_iommu_type1" "amdgpu" ];
boot.kernelModules = [ "amdgpu" "kvm-amd" ]; boot.kernelModules = [ "amdgpu" "kvm-amd" ];
boot.extraModulePackages = []; boot.extraModulePackages = [];
boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelPackages = pkgs.linuxPackages_latest;
@ -18,17 +19,20 @@
"amdgpu.cik_support=0" "amdgpu.cik_support=0"
"radeon.si_support=0" "radeon.si_support=0"
"radeon.cik_support=0" "radeon.cik_support=0"
"quiet"
"splash"
"boot.shell_on_fail"
"udev.log_priority=3"
"rd.systemd.show_status=auto"
]; ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/b4e3577b-17ab-4a89-9aeb-4e223be4c75b"; # à adapter si tu as un autre label/disque
fsType = "ext4"; # ou btrfs, xfs, ce que t'as utilisé
};
swapDevices = [] ;
boot.plymouth.enable = true ; boot.plymouth.enable = true ;
boot.plymouth.theme = "spinner" ;
boot.consoleLogLevel = 3 ;
boot.initrd.verbose = false ;
boot.loader.timeout = 5; boot.loader.timeout = 5;
boot.loader.systemd-boot.enable = true ; boot.loader.systemd-boot.enable = true ;
boot.loader.systemd-boot.consoleMode = "max" ;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
boot.loader.efi.efiSysMountPoint = "/boot"; boot.loader.efi.efiSysMountPoint = "/boot";
@ -39,6 +43,12 @@
RuntimeMaxUse=100M RuntimeMaxUse=100M
''; '';
fileSystems."/" = {
device = "/dev/disk/by-uuid/b4e3577b-17ab-4a89-9aeb-4e223be4c75b"; # à adapter si tu as un autre label/disque
fsType = "ext4"; # ou btrfs, xfs, ce que t'as utilisé
};
swapDevices = [] ;
hardware.firmware = with pkgs ; [ linux-firmware ]; hardware.firmware = with pkgs ; [ linux-firmware ];
hardware.enableRedistributableFirmware = true; hardware.enableRedistributableFirmware = true;
hardware.graphics = { hardware.graphics = {
@ -52,6 +62,7 @@
LIBVA_DRIVER_NAME = "radeonsi"; LIBVA_DRIVER_NAME = "radeonsi";
VDPAU_DRIVER = "va_gl"; VDPAU_DRIVER = "va_gl";
}; };
environment.defaultPackages = lib.mkForce [] ;
hardware.bluetooth.enable = true ; hardware.bluetooth.enable = true ;
environment.etc."pam.d/i3lock".text = '' environment.etc."pam.d/i3lock".text = ''
@ -61,17 +72,18 @@
session include login session include login
''; '';
services.blueman.enable = true ; services.blueman.enable = true ;
services.logind.settings.Login = {
IdleAction="suspend";
IdleActionSec="5min";
HandleLidSwitch="suspend";
HandleLidSwitchDocked="ignore";
};
services.openssh.enable = true ;
services.xserver.enable = true ; services.xserver.enable = true ;
services.xserver.videoDrivers = [ "amdgpu" ]; services.xserver.videoDrivers = [ "amdgpu" ];
services.logind.extraConfig = ''
IdleAction=suspend
IdleActionSec=5min
HandleLidSwitch=suspend
HandleLidSwitchDocked=ignore
'';
networking.hostName = "pennsardin"; networking.hostName = "pennsardin";
networking.firewall.enable = true ;
time.timeZone = "Europe/Paris"; time.timeZone = "Europe/Paris";
# Select internationalisation properties. # Select internationalisation properties.
i18n.defaultLocale = "fr_FR.UTF-8"; i18n.defaultLocale = "fr_FR.UTF-8";
@ -106,16 +118,22 @@
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# i3lock p7zip
btrfs-progs btrfs-progs
cifs-utils
evtest evtest
gdu gdu
git git
glances glances
lm_sensors lm_sensors
neovim neovim
nixos-bgrt-plymouth
parted
pciutils
pulseaudio
snapper snapper
tmux tmux
usbutils
xorg.xev xorg.xev
xorg.xkbcomp xorg.xkbcomp
]; ];
@ -136,3 +154,4 @@
system.stateVersion = "25.05"; # pour éviter les hurlements inutiles system.stateVersion = "25.05"; # pour éviter les hurlements inutiles
} }
# vim: set ts=2 sw=2 sts=2 et :

View file

@ -1,54 +0,0 @@
# modules/alerts/sms.nix
{ config, pkgs, lib, ... }:
let
user = "21782061"; # Ton identifiant Free
pass = "PEmCOQLKMEdMW9"; # Ta clé
in
{
environment.systemPackages = with pkgs; [ curl ];
environment.etc."mdadm-raid-wrapper.sh".text = ''
systemctl start raid-alert-sms.service
'';
boot.swraid = {
enable = true ;
mdadmConf = ''
MAILADDR guillaume.lame@protonmail.com
PROGRAM /etc/mdadm-raid-wrapper.sh
ARRAY /dev/md/raid-home UUID=cad7faf8:93cab941:ba745379:becc1918
'';
};
fileSystems."/mnt/raid" = {
device = "/dev/md/raid-home" ;
fsType = "btrfs" ;
options = ["compress=zstd" "noatime" "nofail" "x-systemd.device-timeout=5"];
};
# systemd.services.raid-alert-sms = {
# description = "Envoie un SMS si RAID pète";
# wantedBy = [ "multi-user.target" ];
# serviceConfig = {
# Type = "oneshot";
# ExecStart = ''
# ${pkgs.curl}/bin/curl -s \
# "https://smsapi.free-mobile.fr/sendmsg?user=${user}&pass=${pass}&msg=TON+RAID+EST+MORT+FUIS"
# '';
# };
# };
# systemd.services.mdadm-monitor = {
# description = "RAID monitoring";
# wantedBy = [ "multi-user.target" ];
# after = [ "network.target" ];
# serviceConfig = {
# ExecStart = "${pkgs.mdadm}/bin/mdadm --monitor --scan --daemonize --program=/etc/mdadm-raid-wrapper.sh";
# Restart = "always";
# RestartSec = "5s";
# Type = "forking";
# };
# };
}

View file

@ -21,3 +21,4 @@
home.stateVersion = "25.05"; # ou ton actuelle home.stateVersion = "25.05"; # ou ton actuelle
} }
# vim: set ts=2 sw=2 sts=2 et :

View file

@ -8,8 +8,14 @@
}; };
windowManager.bspwm.enable = true ; windowManager.bspwm.enable = true ;
}; };
desktopManager.gnome.enable = lib.mkForce false ; desktopManager = {
displayManager.gdm.enable = lib.mkForce false ; gnome.enable = lib.mkForce false ;
plasma6.enable = lib.mkForce false ;
};
displayManager = {
gdm.enable = lib.mkForce false ;
sddm.enable = lib.mkForce false ;
};
}; };
home-manager.users.lomig = { pkgs, ... }: { home-manager.users.lomig = { pkgs, ... }: {
home.packages = with pkgs; [ home.packages = with pkgs; [
@ -17,6 +23,7 @@
alacritty rofi feh font-awesome alacritty rofi feh font-awesome
picom xorg.xset xidlehook betterlockscreen picom xorg.xset xidlehook betterlockscreen
pywal16 imagemagick pywal16 imagemagick
pulsemixer
]; ];
xsession.enable = true ; xsession.enable = true ;
@ -55,6 +62,7 @@
"while pgrep -x polybar >/dev/null; do sleep 0.2; done" "while pgrep -x polybar >/dev/null; do sleep 0.2; done"
"polybar" "polybar"
"bash ~/.fehbg" "bash ~/.fehbg"
"bspc rule -a floorp desktop=^focused follow=on"
]; ];
extraConfig = '' extraConfig = ''
bspc config borderless_monocle true bspc config borderless_monocle true
@ -99,6 +107,12 @@
"super + shift + j" = "bspc node -s south"; "super + shift + j" = "bspc node -s south";
"super + shift + k" = "bspc node -s north"; "super + shift + k" = "bspc node -s north";
"super + shift + l" = "bspc node -s east"; "super + shift + l" = "bspc node -s east";
# Gestion du tiling
"super + f" = "bspc node -t fullscreen" ;
"super + s" = "bspc node -t floating" ;
"super + shift + t" = "bspc node -t pseudo_tiled" ;
"super + t" = "bspc node -t tiled" ;
}; };
}; };
@ -156,10 +170,6 @@
}; };
programs.floorp = {
enable = true ;
languagePacks = [ "fr" ] ;
};
}; };
} }

View file

@ -2,11 +2,13 @@
{ {
services = { services = {
displayManager = { displayManager = {
gdm = { gdm.enable = true ;
enable = true ; sddm.enable = lib.mkForce false ;
}; };
desktopManager = {
gnome.enable = true ;
plasma6.enable = lib.mkForce false ;
}; };
desktopManager.gnome.enable = true ;
xserver = { xserver = {
windowManager.bspwm.enable = lib.mkForce false ; windowManager.bspwm.enable = lib.mkForce false ;
displayManager.lightdm.enable = lib.mkForce false ; displayManager.lightdm.enable = lib.mkForce false ;

19
wm/plasma.nix Normal file
View file

@ -0,0 +1,19 @@
{ config, pkgs, lib, ... }:
{
services = {
displayManager = {
gdm.enable = lib.mkForce false ;
sddm.enable = true ;
};
desktopManager = {
gnome.enable = lib.mkForce false ;
plasma6.enable = true ;
};
xserver = {
windowManager.bspwm.enable = lib.mkForce false ;
displayManager.lightdm.enable = lib.mkForce false ;
};
};
}
# vim: set ts=2 sw=2 sts=2 et :