diff --git a/flake.nix b/flake.nix index 9cc612e..676080f 100644 --- a/flake.nix +++ b/flake.nix @@ -27,6 +27,8 @@ ... }: { + formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree; + nixosConfigurations.prouk = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { inherit inputs; }; diff --git a/home/config/niri/env.kdl b/home/config/niri/env.kdl index 10bc633..d5eb49a 100644 --- a/home/config/niri/env.kdl +++ b/home/config/niri/env.kdl @@ -44,9 +44,6 @@ environment { // Clutter: Force Wayland backend. CLUTTER_BACKEND "wayland" - // Firefox: Force native Wayland rendering (massively improves scrolling smoothness). - MOZ_ENABLE_WAYLAND "1" - // Electron/Chromium: Automatically flags apps (VS Code, Discord, Obsidian) to use Wayland. ELECTRON_OZONE_PLATFORM_HINT "auto" diff --git a/home/default.nix b/home/default.nix index 5b5ea6d..8b870d6 100644 --- a/home/default.nix +++ b/home/default.nix @@ -2,16 +2,14 @@ { imports = [ - ./user.nix + ./shell.nix + ./dotfiles.nix ./packages - ./desktopentries.nix - ./config ]; - programs.git.enable = true; - programs.bash = { - enable = true; - bashrcExtra = "eval \"$(devenv hook bash)\"\n"; + home = { + username = "prouk"; + homeDirectory = "/home/prouk"; + stateVersion = "26.05"; }; - home.stateVersion = "26.05"; } diff --git a/home/desktopentries.nix b/home/desktopentries.nix deleted file mode 100644 index 5a5f3f5..0000000 --- a/home/desktopentries.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ pkgs, ... }: -{ - xdg.desktopEntries."awakened-poe-trade" = { - name = "Awakened PoE Trade"; - exec = "${pkgs.awakened-poe-trade}/bin/awakened-poe-trade --no-overlay --listen=0.0.0.0:33333 %U"; - terminal = false; - type = "Application"; - icon = "awakened-poe-trade"; - categories = [ - "Game" - "Utility" - ]; - }; -} diff --git a/home/config/default.nix b/home/dotfiles.nix similarity index 59% rename from home/config/default.nix rename to home/dotfiles.nix index 2a7523b..701c9e3 100644 --- a/home/config/default.nix +++ b/home/dotfiles.nix @@ -1,28 +1,31 @@ { ... }: { + # Desktop xdg.configFile."niri" = { force = true; recursive = true; - source = ./niri; - }; - xdg.configFile."alacritty" = { - force = true; - recursive = true; - source = ./alacritty; + source = ./config/niri; }; xdg.configFile."fuzzel" = { force = true; recursive = true; - source = ./fuzzel; + source = ./config/fuzzel; }; - # Shared with SDDM (nixos/dm/sddm.nix); niri loads it from this path. + # Shared with SDDM (nixos/desktop/sddm.nix); niri loads it from this path. home.file."Pictures/Wallpapers/wallpaper.png" = { force = true; - source = ../../assets/wallpaper.png; + source = ../assets/wallpaper.png; + }; + + # Terminal + xdg.configFile."alacritty" = { + force = true; + recursive = true; + source = ./config/alacritty; }; xdg.configFile."helix" = { force = true; recursive = true; - source = ./helix; + source = ./config/helix; }; } diff --git a/home/packages/audio.nix b/home/packages/audio.nix new file mode 100644 index 0000000..5277e43 --- /dev/null +++ b/home/packages/audio.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + home.packages = with pkgs; [ + helvum + pavucontrol + ]; +} diff --git a/home/packages/default.nix b/home/packages/default.nix index 8bfb001..c7124ef 100644 --- a/home/packages/default.nix +++ b/home/packages/default.nix @@ -1,11 +1,13 @@ { ... }: { imports = [ - ./development.nix ./desktop.nix - ./gaming.nix + ./system.nix + ./audio.nix ./hardware.nix - ./media.nix + ./development.nix ./web.nix + ./media.nix + ./gaming.nix ]; } diff --git a/home/packages/desktop.nix b/home/packages/desktop.nix index 7117d2d..8cf48df 100644 --- a/home/packages/desktop.nix +++ b/home/packages/desktop.nix @@ -1,9 +1,15 @@ { pkgs, ... }: { - gtk = { - enable = true; - }; + home.packages = with pkgs; [ + alacritty + awww + fuzzel + wev + wl-clip-persist + ]; + # Theming + gtk.enable = true; home.pointerCursor = { enable = true; gtk.enable = true; @@ -14,15 +20,9 @@ size = 24; }; - home.packages = with pkgs; [ - awww - btop - fuzzel - gparted - pavucontrol - wev - wl-clip-persist - yazi - alacritty - ]; + # Removable drives + services.udiskie = { + enable = true; + automount = true; + }; } diff --git a/home/packages/development.nix b/home/packages/development.nix index 9327ee4..5393d36 100644 --- a/home/packages/development.nix +++ b/home/packages/development.nix @@ -1,18 +1,18 @@ { pkgs, ... }: { - programs.zed-editor = { - enable = true; - defaultEditor = false; - }; - home.packages = with pkgs; [ devenv github-copilot-app github-copilot-cli - nil - nixd + helix jujutsu just - helix + nil + nixd ]; + + programs.zed-editor = { + enable = true; + defaultEditor = false; + }; } diff --git a/home/packages/gaming.nix b/home/packages/gaming.nix index f3a0dba..c734193 100644 --- a/home/packages/gaming.nix +++ b/home/packages/gaming.nix @@ -1,14 +1,33 @@ { pkgs, ... }: { home.packages = with pkgs; [ - awakened-poe-trade - lutris - rusty-path-of-building - protonup-qt - protontricks - winetricks - mangohud - steamtinkerlaunch + # Launchers gamma-launcher + lutris + + # Wine / Proton + protontricks + protonup-qt + steamtinkerlaunch + winetricks + + # Overlays + mangohud + + # Path of Exile + awakened-poe-trade + rusty-path-of-building ]; + + xdg.desktopEntries."awakened-poe-trade" = { + name = "Awakened PoE Trade"; + exec = "${pkgs.awakened-poe-trade}/bin/awakened-poe-trade --no-overlay --listen=0.0.0.0:33333 %U"; + terminal = false; + type = "Application"; + icon = "awakened-poe-trade"; + categories = [ + "Game" + "Utility" + ]; + }; } diff --git a/home/packages/hardware.nix b/home/packages/hardware.nix index 0d76b9a..d4e0898 100644 --- a/home/packages/hardware.nix +++ b/home/packages/hardware.nix @@ -2,12 +2,5 @@ { home.packages = with pkgs; [ wootility - wooting-udev-rules - helvum ]; - - services.udiskie = { - enable = true; - automount = true; - }; } diff --git a/home/packages/system.nix b/home/packages/system.nix new file mode 100644 index 0000000..adc6681 --- /dev/null +++ b/home/packages/system.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: +{ + home.packages = with pkgs; [ + btop + gparted + yazi + ]; +} diff --git a/home/shell.nix b/home/shell.nix new file mode 100644 index 0000000..b6a4453 --- /dev/null +++ b/home/shell.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + programs.bash = { + enable = true; + bashrcExtra = "eval \"$(devenv hook bash)\"\n"; + }; + + programs.git.enable = true; +} diff --git a/home/user.nix b/home/user.nix deleted file mode 100644 index e2f2073..0000000 --- a/home/user.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ ... }: -{ - home.username = "prouk"; - home.homeDirectory = "/home/prouk"; -} diff --git a/justfile b/justfile index 697a229..35a3fa8 100644 --- a/justfile +++ b/justfile @@ -32,7 +32,7 @@ clean-system: sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations +3 sudo nix-collect-garbage @echo "--- Updating Bootloader Menu ---" - sudo nixos-rebuild boot --flake + sudo nixos-rebuild boot --flake .#prouk # Clean user generations (no sudo). clean-user: @@ -57,9 +57,9 @@ clean-all: clean-system clean-user clean-home-manager # Build. build: @echo "--- Rebuilding System ---" - sudo nixos-rebuild switch --flake + sudo nixos-rebuild switch --flake .#prouk # Update flake. update: @echo "--- Updating Flake ---" - sudo nix flake update + nix flake update diff --git a/nixos/default.nix b/nixos/default.nix index e7779bc..ec2e4a5 100644 --- a/nixos/default.nix +++ b/nixos/default.nix @@ -1,61 +1,34 @@ -{ pkgs, ... }: +{ ... }: { imports = [ ./hardware-configuration.nix - ./graphics - ./audio.nix - ./fonts/fonts.nix - ./dm/sddm.nix - ./wm/niri.nix - ./inputs/wooting.nix - ./network/bluetooth.nix - ./network/usb.nix - ./steam/steam.nix + + # System + ./system/boot.nix + ./system/nix.nix + ./system/networking.nix + ./system/locale.nix + ./system/users.nix + + # Hardware + ./hardware/graphics.nix + ./hardware/nvidia.nix + ./hardware/audio.nix + ./hardware/bluetooth.nix + ./hardware/storage.nix + ./hardware/wooting.nix + + # Desktop + ./desktop/fonts.nix + ./desktop/sddm.nix + ./desktop/niri.nix + + # Programs + ./programs/gaming.nix ./programs/obs.nix ]; - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - networking.hostName = "prouk"; - networking.networkmanager.enable = true; - - time.timeZone = "Europe/Paris"; - - users.users.prouk = { - isNormalUser = true; - extraGroups = [ "wheel" ]; - }; - - programs.firefox.enable = true; - programs.nix-ld.enable = true; - - nixpkgs.config.allowUnfree = true; - nixpkgs.config.permittedInsecurePackages = [ - "electron-40.10.5" - ]; - - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - # NO TOUCHY system.stateVersion = "26.05"; - - boot.kernelPackages = pkgs.linuxPackages_latest; - - nix.settings = { - trusted-users = [ "prouk" ]; - - substituters = [ - "https://cache.nixos.org" - "https://nix-community.cachix.org" - ]; - trusted-public-keys = [ - "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" - "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" - ]; - }; } diff --git a/nixos/fonts/fonts.nix b/nixos/desktop/fonts.nix similarity index 100% rename from nixos/fonts/fonts.nix rename to nixos/desktop/fonts.nix diff --git a/nixos/wm/niri.nix b/nixos/desktop/niri.nix similarity index 54% rename from nixos/wm/niri.nix rename to nixos/desktop/niri.nix index 3ef8e4d..ab0332e 100644 --- a/nixos/wm/niri.nix +++ b/nixos/desktop/niri.nix @@ -3,6 +3,6 @@ programs.niri.enable = true; environment.systemPackages = [ - inputs.xwayland-satellite.packages.${pkgs.system}.default + inputs.xwayland-satellite.packages.${pkgs.stdenv.hostPlatform.system}.default ]; } diff --git a/nixos/dm/sddm.nix b/nixos/desktop/sddm.nix similarity index 96% rename from nixos/dm/sddm.nix rename to nixos/desktop/sddm.nix index b9e4694..dd7e7f4 100644 --- a/nixos/dm/sddm.nix +++ b/nixos/desktop/sddm.nix @@ -1,6 +1,6 @@ { pkgs, lib, config, ... }: let - # Same wallpaper niri displays (see home/config/default.nix). + # Same wallpaper niri displays (see home/dotfiles.nix). wallpaper = ../../assets/wallpaper.png; sddmTheme = diff --git a/nixos/graphics/default.nix b/nixos/graphics/default.nix deleted file mode 100644 index 97cb45f..0000000 --- a/nixos/graphics/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ ... }: -{ - hardware.graphics = { - enable = true; - }; - - imports = [ - ./nvidia.nix - ]; -} diff --git a/nixos/audio.nix b/nixos/hardware/audio.nix similarity index 100% rename from nixos/audio.nix rename to nixos/hardware/audio.nix diff --git a/nixos/network/bluetooth.nix b/nixos/hardware/bluetooth.nix similarity index 100% rename from nixos/network/bluetooth.nix rename to nixos/hardware/bluetooth.nix diff --git a/nixos/hardware/graphics.nix b/nixos/hardware/graphics.nix new file mode 100644 index 0000000..ceb2744 --- /dev/null +++ b/nixos/hardware/graphics.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + hardware.graphics.enable = true; +} diff --git a/nixos/graphics/nvidia.nix b/nixos/hardware/nvidia.nix similarity index 81% rename from nixos/graphics/nvidia.nix rename to nixos/hardware/nvidia.nix index 51a32b8..5afccae 100644 --- a/nixos/graphics/nvidia.nix +++ b/nixos/hardware/nvidia.nix @@ -12,12 +12,13 @@ environment.systemPackages = with pkgs; [ egl-wayland + lact libva-utils nvidia-vaapi-driver nvtopPackages.nvidia - lact ]; + # LACT GPU control daemon systemd.packages = with pkgs; [ lact ]; - systemd.services.lactd.wantedBy = ["multi-user.target"]; + systemd.services.lactd.wantedBy = [ "multi-user.target" ]; } diff --git a/nixos/network/usb.nix b/nixos/hardware/storage.nix similarity index 100% rename from nixos/network/usb.nix rename to nixos/hardware/storage.nix diff --git a/nixos/inputs/wooting.nix b/nixos/hardware/wooting.nix similarity index 100% rename from nixos/inputs/wooting.nix rename to nixos/hardware/wooting.nix diff --git a/nixos/steam/steam.nix b/nixos/programs/gaming.nix similarity index 79% rename from nixos/steam/steam.nix rename to nixos/programs/gaming.nix index bb39f91..4e85166 100644 --- a/nixos/steam/steam.nix +++ b/nixos/programs/gaming.nix @@ -4,7 +4,7 @@ steam.enable = true; gamescope = { enable = true; - capSysNice = false; + capSysNice = false; }; }; } diff --git a/nixos/system/boot.nix b/nixos/system/boot.nix new file mode 100644 index 0000000..c57bd2b --- /dev/null +++ b/nixos/system/boot.nix @@ -0,0 +1,26 @@ +{ pkgs, ... }: +{ + boot = { + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + # Skip the boot menu; hold Space while booting to show it. + timeout = 0; + # Keep /boot from filling up with old generations. + systemd-boot.configurationLimit = 5; + }; + + # Quiet boot + consoleLogLevel = 3; + initrd.verbose = false; + kernelParams = [ + "quiet" + "udev.log_level=3" + "rd.udev.log_level=3" + "systemd.show_status=auto" + "rd.systemd.show_status=auto" + ]; + }; +} diff --git a/nixos/system/locale.nix b/nixos/system/locale.nix new file mode 100644 index 0000000..e618c9a --- /dev/null +++ b/nixos/system/locale.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + time.timeZone = "Europe/Paris"; +} diff --git a/nixos/system/networking.nix b/nixos/system/networking.nix new file mode 100644 index 0000000..2146583 --- /dev/null +++ b/nixos/system/networking.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + networking = { + hostName = "prouk"; + networkmanager.enable = true; + }; +} diff --git a/nixos/system/nix.nix b/nixos/system/nix.nix new file mode 100644 index 0000000..d17247d --- /dev/null +++ b/nixos/system/nix.nix @@ -0,0 +1,32 @@ +{ ... }: +{ + nix.settings = { + experimental-features = [ + "nix-command" + "flakes" + ]; + trusted-users = [ "prouk" ]; + + substituters = [ + "https://cache.nixos.org" + "https://nix-community.cachix.org" + ]; + trusted-public-keys = [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + ]; + }; + + nixpkgs.config.allowUnfree = true; + + # Housekeeping + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 14d"; + }; + nix.optimise.automatic = true; + + # Run unpatched dynamic binaries. + programs.nix-ld.enable = true; +} diff --git a/nixos/system/users.nix b/nixos/system/users.nix new file mode 100644 index 0000000..a32b076 --- /dev/null +++ b/nixos/system/users.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + users.users.prouk = { + isNormalUser = true; + extraGroups = [ "wheel" ]; + }; +}