diff --git a/apps/browser.nix b/apps/browser.nix new file mode 100644 index 0000000..b12a888 --- /dev/null +++ b/apps/browser.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: +{ +programs.floorp = { + enable = true ; + languagePacks = [ "fr" ] ; + }; +programs.firefox = { + enable = true ; + languagePacks = [ "fr" ] ; + }; +} diff --git a/apps/gitea.nix b/apps/gitea.nix new file mode 100644 index 0000000..a8100cd --- /dev/null +++ b/apps/gitea.nix @@ -0,0 +1,4 @@ +{ config, pkgs, ... }: +{ + +} diff --git a/apps/picom.nix b/apps/picom.nix new file mode 100644 index 0000000..24a7659 --- /dev/null +++ b/apps/picom.nix @@ -0,0 +1,50 @@ +{ config, pkgs, ... }: +{ + services.picom = { + enable = true; + backend = "glx"; # plus fluide si ta carte gère bien OpenGL + fade = true; + fadeDelta = 5; # vitesse fondu + shadow = true; + shadowOpacity = 0.5; + vSync = true; # évite le tearing + + settings = { + # Transparence + inactive-opacity = 0.80; + active-opacity = 0.9; + frame-opacity = 0.90; + inactive-opacity-override = false; + + # Coins arrondis + corner-radius = 8; + round-borders = 1; + rounded-corners-exclude = [ + "class_g = 'Polybar'" + "class_g = 'Rofi'" + ]; + + # Flou subtil + blur-method = "dual_kawase"; + blur-strength = 4; + blur-background = true; + blur-background-frame = true; + blur-background-fixed = false; + blur-background-exclude = [ + "class_g = 'Polybar'" + "class_g = 'Rofi'" + "class_g = 'Gimp'" + "window_type = 'dock'" + ]; + + # Exclusions ombres + shadow-exclude = [ + "class_g = 'Polybar'" + "class_g = 'Rofi'" + "window_type = 'dock'" + "window_type = 'desktop'" + ]; + }; + }; +} + diff --git a/apps/template.nix b/apps/template.nix new file mode 100644 index 0000000..a8100cd --- /dev/null +++ b/apps/template.nix @@ -0,0 +1,4 @@ +{ config, pkgs, ... }: +{ + +} diff --git a/apps/zsh.nix b/apps/zsh.nix new file mode 100644 index 0000000..7cffff1 --- /dev/null +++ b/apps/zsh.nix @@ -0,0 +1,20 @@ +{ config, pkgs, ... }: +{ + programs.zsh = { + enable = true ; + enableCompletion = true ; + history = { + append = true ; + extended = true ; + findNoDups = true ; + ignoreAllDups = true ; + ignoreSpace = true ; + ignorePatterns = [ "rm *" "cd *" "ls *" ] ; + saveNoDups = false ; + }; + shellGlobalAliases = { + G = "| grep"; + M = "| more"; + }; + }; +} diff --git a/flake.nix b/flake.nix index 72ee031..d526990 100644 --- a/flake.nix +++ b/flake.nix @@ -1,32 +1,40 @@ { - description = "Mon système NixOS flake-enabled avec Home Manager"; + description = "My nixos config with WM switch capacity"; - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - }; + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; - outputs = { self, nixpkgs, home-manager, ... }: - let - system = "x86_64-linux"; # Change si t’as un ordi chelou - in { - nixosConfigurations = { - pennsardin = nixpkgs.lib.nixosSystem { - inherit system; - modules = [ - ./hosts/pennsardin/configuration.nix + outputs = { self, nixpkgs, home-manager, ... }: + let + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; - home-manager.nixosModules.home-manager - { - home-manager.useUserPackages = true; - home-manager.users.lomig = import ./home/pennsardin.nix; - } - ]; - }; - }; - }; + in { + nixosConfigurations = { + pennsardin = nixpkgs.lib.nixosSystem { + inherit system; + + modules = [ + ./hosts/pennsardin/configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true ; +# home-manager.useUserPackages = true; + + home-manager.users.lomig = import ./user/lomig.nix ; + } + ]; + }; + }; + }; } +# vim: set ts=2 sw=2 sts=2 et : diff --git a/home/pennsardin.nix b/home/pennsardin.nix deleted file mode 100644 index 8c5c58b..0000000 --- a/home/pennsardin.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ config, pkgs, ... }: - -{ - home.username = "lomig"; - home.homeDirectory = "/home/lomig"; - - programs.zsh.enable = true; - home.stateVersion = "25.05"; # ou ton actuelle -} - diff --git a/hosts/pennsardin/bepovim.nix b/hosts/pennsardin/bepovim.nix new file mode 100644 index 0000000..bbfbe95 --- /dev/null +++ b/hosts/pennsardin/bepovim.nix @@ -0,0 +1,102 @@ +# modules/alerts/sms.nix + +{ config, pkgs, lib, ... }: + +{ +# services.xserver.enable = true; + + services.xserver.xkb.extraLayouts.bepovim = { + description = "Clavier Bepovim – 4 niveaux"; + languages = [ "fr" ]; + # IMPORTANT: c'est `symbolsFile`, pas `symbols`. + symbolsFile = builtins.toFile "bepovim.xkb" '' + xkb_symbols "basic" { + name[Group1] = "Bepovim"; + + key { [ Escape ] }; + key { [ dollar, numbersign ] }; + key { [ less, 1, guillemotleft ] }; + key { [ greater, 2, guillemotright ] }; + key { [ parenleft, 3, bracketleft ] }; + key { [ parenright, 4, bracketright ] }; + key { [ at, 5, braceleft ] }; + key { [ plus, 6, braceright ] }; + key { [ minus, 7, asciitilde ] }; + key { [ asterisk, 8 ] }; + key { [ slash, 9, backslash ] }; + key { [ quotedbl, 0 ] }; + key { [ equal, ampersand ] }; + key { [ BackSpace ] }; + key { [ Tab, ISO_Left_Tab ] }; + + key { [ b, B ] }; + key { [ eacute, Eacute ] }; + key { [ p, P ] }; + key { [ o, O ] }; + key { [ r, R ] }; + key { [ dead_circumflex, grave ] }; + key { [ v, V ] }; + key { [ s, S ] }; + key { [ t, T ] }; + key { [ d, D ] }; + key { [ egrave, Egrave ] }; + key { [ ccedilla, Ccedilla ] }; + + key { [ Return ] }; + key { [ c, C ] }; + key { [ a, A ] }; + key { [ u, U ] }; + key { [ i, I ] }; + key { [ e, E, EuroSign ] }; + key { [ period, question ] }; + key { [ n, N ] }; + key { [ h, H, Left ] }; + key { [ j, J, Down ] }; + key { [ k, K, Up ] }; + key { [ l, L, Right ] }; + key { [ m, M ] }; + + key { [ Shift_L ] }; + key { [ q, Q ] }; + key { [ w, W ] }; + key { [ agrave, Agrave ] }; + key { [ f, F ] }; + key { [ colon, bar ] }; + key { [ comma, semicolon ] }; + key { [ apostrophe, exclam ] }; + key { [ x, X ] }; + key { [ g, G ] }; + key { [ z, Z ] }; + key { [ y, Y ] }; + + key { [ Up ] }; + key { [ Left ] }; + key { [ Down ] }; + key { [ Right ] }; + + key { [ Control_L ] }; + key { [ Alt_L ] }; + key { [ space, underscore, nobreakspace, U202F ] }; + key { [ ISO_Level3_Shift ] }; + + key { [ F1, F1 ] }; + key { [ F2, F2 ] }; + key { [ F3, F3 ] }; + key { [ F4, F4 ] }; + key { [ F5, F5 ] }; + key { [ F6, F6 ] }; + key { [ F7, F7 ] }; + key { [ F8, F8 ]}; + key { [ F9, F9 ] }; + key { [ F10, F10 ] }; + key { [ F11, F11 ] }; + }; + ''; + }; + + services.xserver.xkb.layout = "bepovim"; + services.xserver.xkb.variant = "basic"; + services.xserver.xkb.options = "lv3:ralt_switch"; + console.useXkbConfig = true; +} + diff --git a/hosts/pennsardin/configuration.nix b/hosts/pennsardin/configuration.nix index d6fcec4..8b7b530 100644 --- a/hosts/pennsardin/configuration.nix +++ b/hosts/pennsardin/configuration.nix @@ -1,15 +1,137 @@ -{ config, pkgs, ... }: +{ config, pkgs, lib, desktop, ... }: { + imports = [ + ./raid.nix + ./bepovim.nix + ../../wm/bspwm.nix + ]; + nix.settings.experimental-features = ["nix-command" "flakes" ]; + boot.initrd.kernelModules = []; + boot.kernelModules = [ "amdgpu" "kvm-amd" ]; + boot.extraModulePackages = []; + boot.kernelPackages = pkgs.linuxPackages_latest; + boot.kernelParams = [ + "mem_sleep_default=deep" + "amdgpu.si_support=0" + "amdgpu.cik_support=0" + "radeon.si_support=0" + "radeon.cik_support=0" + ]; + + 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.loader.timeout = 5; + boot.loader.systemd-boot.enable = true ; + boot.loader.efi.canTouchEfiVariables = true; + boot.loader.efi.efiSysMountPoint = "/boot"; + + boot.tmp.cleanOnBoot = true ; + systemd.coredump.enable = false ; + services.journald.extraConfig = '' + SystemMaxUse=200M + RuntimeMaxUse=100M + ''; + + hardware.firmware = with pkgs ; [ linux-firmware ]; + hardware.enableRedistributableFirmware = true; + hardware.graphics = { + enable = true ; + extraPackages = with pkgs ; [ + mesa libva libva-utils libvdpau libva-vdpau-driver vaapiVdpau libvdpau-va-gl amdvlk vulkan-tools vulkan-loader vulkan-validation-layers + ]; + enable32Bit = true ; + }; + environment.variables = { + LIBVA_DRIVER_NAME = "radeonsi"; + VDPAU_DRIVER = "va_gl"; + }; + + hardware.bluetooth.enable = true ; + environment.etc."pam.d/i3lock".text = '' + auth include login + account include login + password include login + session include login + ''; + services.blueman.enable = true ; + + services.xserver.enable = true ; + services.xserver.videoDrivers = [ "amdgpu" ]; + services.logind.extraConfig = '' + IdleAction=suspend + IdleActionSec=5min + HandleLidSwitch=suspend + HandleLidSwitchDocked=ignore + ''; + networking.hostName = "pennsardin"; time.timeZone = "Europe/Paris"; + # Select internationalisation properties. + i18n.defaultLocale = "fr_FR.UTF-8"; - users.users.toto = { + i18n.extraLocaleSettings = { + LC_ADDRESS = "fr_FR.UTF-8"; + LC_IDENTIFICATION = "fr_FR.UTF-8"; + LC_MEASUREMENT = "fr_FR.UTF-8"; + LC_MONETARY = "fr_FR.UTF-8"; + LC_NAME = "fr_FR.UTF-8"; + LC_NUMERIC = "fr_FR.UTF-8"; + LC_PAPER = "fr_FR.UTF-8"; + LC_TELEPHONE = "fr_FR.UTF-8"; + LC_TIME = "fr_FR.UTF-8"; + }; + + services.printing.enable = true ; + # Enable sound with pipewire. + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + environment.systemPackages = with pkgs; [ +# i3lock + btrfs-progs + evtest + gdu + git + glances + lm_sensors + neovim + snapper + tmux + xorg.xev + xorg.xkbcomp + ]; + + programs.steam.enable = true ; + hardware.xpadneo.enable = true ; + programs.zsh.enable = true; + users.users.lomig = { isNormalUser = true; - extraGroups = [ "wheel" ]; + extraGroups = [ "networkmanager" "lp" "wheel" ]; shell = pkgs.zsh; }; - services.xserver.enable = true; + nixpkgs.config = { + allowUnfree = true; + allowUnsupportedSystem = true ; + }; + system.stateVersion = "25.05"; # pour éviter les hurlements inutiles } diff --git a/hosts/pennsardin/raid.nix b/hosts/pennsardin/raid.nix new file mode 100644 index 0000000..04da734 --- /dev/null +++ b/hosts/pennsardin/raid.nix @@ -0,0 +1,54 @@ +# 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"; +# }; +# }; +} + diff --git a/user/lomig.nix b/user/lomig.nix new file mode 100644 index 0000000..8e6d9f6 --- /dev/null +++ b/user/lomig.nix @@ -0,0 +1,22 @@ +{ config, pkgs, lib, desktop, ... }: + +{ + imports = [ + ../apps/browser.nix + ../apps/picom.nix + ../apps/zsh.nix + ]; + home.username = "lomig"; + home.homeDirectory = "/home/lomig"; + home.packages = with pkgs; [ + bat + nerd-fonts.iosevka + telegram-desktop + tree + fastfetch + ]; + + programs.zsh.enable = true; + home.stateVersion = "25.05"; # ou ton actuelle +} + diff --git a/wm/bspwm.nix b/wm/bspwm.nix new file mode 100644 index 0000000..013bad6 --- /dev/null +++ b/wm/bspwm.nix @@ -0,0 +1,159 @@ +{ config, pkgs, ... }: +{ + services.xserver = { + enable = true ; + displayManager.lightdm.enable = true ; + windowManager.bspwm.enable = true ; + }; + home-manager.users.lomig = { pkgs, ... }: { + home.packages = with pkgs; [ + bspwm sxhkd xorg.xinit xterm + alacritty rofi feh font-awesome + picom xorg.xset xidlehook betterlockscreen + pywal16 imagemagick + ]; + + xsession.enable = true ; + xsession.initExtra = '' + xset s 300 300 + xset s on + xsession s noblank + + xset +dpms + xset dpms 0 0 500 + ''; + systemd.user.services.xidlehook = { + Unit.Description = "Idle actions (lock at 1m, suspend at 5m)"; + Service = { + ExecStart = '' + ${pkgs.xidlehook}/bin/xidlehook \ + --detect-sleep \ + --not-when-fullscreen \ + --timer 300 "${pkgs.betterlockscreen}/bin/betterlockscreen -l dim" "" \ + --timer 500 "systemctl suspend" "" + ''; + Restart = "always"; + }; + Install.WantedBy = [ "graphical-session.target" ]; + }; + + xsession.windowManager.bspwm = { + enable = true ; + startupPrograms = [ + "killall polybar" + "setxkbmap bepovim" + "sxhkd -m 1" + "xrandr \\ + --output DisplayPort-1 --rate 60 --pos 0x0" + "while pgrep -x polybar >/dev/null; do sleep 0.2; done" + "polybar" + "bash ~/.fehbg" + ]; + extraConfig = '' + bspc config borderless_monocle true + bspc config gapless_monocle true + bspc config single_monocle true + bspc monitor -d I II III IV V VI + ''; + }; + services.sxhkd = { + enable = true ; + extraOptions = [ "-m 1" ] ; + keybindings = { + "super + Return" = "alacritty"; + "super + c" = "bspc node -c"; + "Menu" = "rofi -show drun"; + "super + space" = "rofi -show drun"; + +# Aller au bureau ^1 .. ^6 + "F1" = "bspc desktop -f ^1"; + "F2" = "bspc desktop -f ^2"; + "F3" = "bspc desktop -f ^3"; + "F4" = "bspc desktop -f ^4"; + "F5" = "bspc desktop -f ^5"; + "F6" = "bspc desktop -f ^6"; + +# Déplacer la fenetre courante vers le bureau cible et suivre + "shift + F1" = "bspc node -d ^1 --follow"; + "shift + F2" = "bspc node -d ^2 --follow"; + "shift + F3" = "bspc node -d ^3 --follow"; + "shift + F4" = "bspc node -d ^4 --follow"; + "shift + F5" = "bspc node -d ^5 --follow"; + "shift + F6" = "bspc node -d ^6 --follow"; + +# Focus dans un meme bureau + "super + h" = "bspc node -f west"; + "super + j" = "bspc node -f south"; + "super + k" = "bspc node -f north"; + "super + l" = "bspc node -f east"; + +# Swap la fenetre dans le bureau + "super + shift + h" = "bspc node -s west"; + "super + shift + j" = "bspc node -s south"; + "super + shift + k" = "bspc node -s north"; + "super + shift + l" = "bspc node -s east"; + }; + }; + + services.polybar = { + enable = true ; + script = "polybar main &"; + config = { + "bar/main" = { + width = "100%"; + height = "28"; + background = "\\\${colors.background}"; + foreground = "\\\${colors.foreground}"; + font-0 = "Iosevka Nerd Font:size=10;2"; + font-1 = "Font Awesome 6 Free:style=Solid:pixelsize=10;2"; + modules-left = "bspwm"; + modules-center = "date"; + modules-right = "pulseaudio memory cpu"; + }; + + "module/bspwm" = { + type = "internal/bspwm"; + label-focused = "%name%"; + label-focused-background = "\\\${colors.primary}"; + label-focused-foreground = "#e6e0de"; + label-focused-padding = 2; + label-occupied = "%name%"; + label-occupied-padding = 2; + label-urgent = "%name%"; + label-urgent-background = "#e42127"; + label-urgent-foreground = "#ffffff"; + label-empty = "%name%"; + label-empty-foreground = "#645d56"; + label-empty-padding = 2; + }; + + "module/date" = { + type = "internal/date"; + interval = 60; + date = "%d-%m-%Y %H:%M"; + }; + + }; + }; + programs.alacritty.enable = true ; + programs.alacritty.settings = { + general.import = [ + "~/.cache/wal/colors-alacritty.toml" + ]; + font = { + normal = { family = "Iosevka Nerd Font"; style = "Regular"; }; + bold = { family = "Iosevka Nerd Font"; style = "Bold"; }; + italic = { family = "Iosevka Nerd Font"; style = "Italic"; }; + size = 9; + }; + }; + + + programs.floorp = { + enable = true ; + languagePacks = [ "fr" ] ; + }; + }; +} + +# vim: set ts=2 sw=2 sts=2 et : diff --git a/wm/gnome.nix b/wm/gnome.nix new file mode 100644 index 0000000..e500128 --- /dev/null +++ b/wm/gnome.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: +{ + services = { + displayManager.gdm = { + enable = true ; + }; + desktopManager.gnome.enable = true ; + }; +} + +# vim: set ts=2 sw=2 sts=2 et :