From 7955b8220fd851eab3af27383b8f51165cc59db5 Mon Sep 17 00:00:00 2001 From: Henri Saudubray Date: Wed, 4 Feb 2026 09:06:43 +0000 Subject: [PATCH] feat (hosts/elistraee): add nixos-wsl config --- flake.lock | 39 ++++++++ flake.nix | 29 +++--- home/default.nix | 19 ++-- home/graphical.nix | 180 ++++++++++++++++++------------------ home/home.nix | 7 ++ hosts/elistraee/default.nix | 11 +++ hosts/selune/default.nix | 3 + hosts/shar/default.nix | 3 + nixos/baremetal.nix | 27 ++++++ nixos/default.nix | 41 ++------ nixos/graphical.nix | 16 ++++ nixos/wsl.nix | 11 +++ 12 files changed, 243 insertions(+), 143 deletions(-) create mode 100644 home/home.nix create mode 100644 hosts/elistraee/default.nix create mode 100644 nixos/baremetal.nix create mode 100644 nixos/graphical.nix create mode 100644 nixos/wsl.nix diff --git a/flake.lock b/flake.lock index e024f7c..45af19d 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,21 @@ { "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -21,6 +37,28 @@ "type": "github" } }, + "nixos-wsl": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768814707, + "narHash": "sha256-hiEtU10R8X8LuFCx0olNTaFGWV1CWF9aagd3wwfcKXE=", + "owner": "nix-community", + "repo": "NixOS-WSL", + "rev": "f80fde12cd9d5ff02b1c6eb612b853c1ac5ecc32", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.11", + "repo": "NixOS-WSL", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1769598131, @@ -40,6 +78,7 @@ "root": { "inputs": { "home-manager": "home-manager", + "nixos-wsl": "nixos-wsl", "nixpkgs": "nixpkgs" } } diff --git a/flake.nix b/flake.nix index bb309db..6b06a6e 100644 --- a/flake.nix +++ b/flake.nix @@ -5,34 +5,41 @@ nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; home-manager.url = "github:nix-community/home-manager/release-25.11"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; + nixos-wsl.url = "github:nix-community/NixOS-WSL/release-25.11"; + nixos-wsl.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = - { nixpkgs, home-manager, ... }: - let - home-manager-options = { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.hms = ./home; - home-manager.backupFileExtension = "bak"; - }; - in + { nixpkgs, home-manager, nixos-wsl, ... }@inputs: { nixosConfigurations.selune = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; + specialArgs = { inherit inputs; }; modules = [ ./hosts/selune home-manager.nixosModules.home-manager - home-manager-options + ./home ]; }; nixosConfigurations.shar = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; + specialArgs = { inherit inputs; }; modules = [ ./hosts/shar home-manager.nixosModules.home-manager - home-manager-options + ./home ]; }; + nixosConfigurations.elistraee = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = { inherit inputs; }; + modules = [ + ./hosts/elistraee + nixos-wsl.nixosModules.default + home-manager.nixosModules.home-manager + ./home + ]; + }; + homeManagerModules.default = ./home; }; } diff --git a/home/default.nix b/home/default.nix index e4c6aee..002e34f 100644 --- a/home/default.nix +++ b/home/default.nix @@ -1,13 +1,10 @@ +{ inputs, ... }: { - lib, - # enableGraphical ? false, - ... -}: -{ - imports = [ - ./cli.nix - ./graphical.nix - ] - #++ (lib.optionals (enableGraphical) [ ./graphical.nix ]) - ; + home-manager = { + extraSpecialArgs = { inherit inputs; }; + useGlobalPkgs = true; + useUserPackages = true; + users."hms" = ./home.nix; + backupFileExtension = "bak"; + }; } diff --git a/home/graphical.nix b/home/graphical.nix index ecb48ec..80acf4f 100644 --- a/home/graphical.nix +++ b/home/graphical.nix @@ -1,101 +1,103 @@ -{ pkgs, ... }: +{ pkgs, lib, config, ... }: { - home = { - packages = - with pkgs; - [ - gnome-tweaks - protonmail-bridge-gui - adw-gtk3 - nerd-fonts.adwaita-mono - blackbox-terminal - zotero - zulip - discord - signal-desktop - gapless - newsflash - gnome-solanum - ] - ++ (with gnomeExtensions; [ - blur-my-shell - clipboard-indicator - rounded-window-corners-reborn - runcat - caffeine - launch-new-instance - light-style - ]); + config = lib.mkIf config.graphical.enable { + home = { + packages = + with pkgs; + [ + gnome-tweaks + protonmail-bridge-gui + adw-gtk3 + nerd-fonts.adwaita-mono + blackbox-terminal + zotero + zulip + discord + signal-desktop + gapless + newsflash + gnome-solanum + ] + ++ (with gnomeExtensions; [ + blur-my-shell + clipboard-indicator + rounded-window-corners-reborn + runcat + caffeine + launch-new-instance + light-style + ]); - file."librewolf-gnome-theme" = { - target = ".librewolf/default/chrome/librewolf-gnome-theme"; - source = fetchTarball { - url = "https://github.com/rafaelmardojai/firefox-gnome-theme/archive/v143.tar.gz"; - sha256 = "1gkfi77n8cn5xzl3wi9mggh7adirjrsnbqygg1mcvjy0ynmd6kfh"; + file."librewolf-gnome-theme" = { + target = ".librewolf/default/chrome/librewolf-gnome-theme"; + source = fetchTarball { + url = "https://github.com/rafaelmardojai/firefox-gnome-theme/archive/v143.tar.gz"; + sha256 = "1gkfi77n8cn5xzl3wi9mggh7adirjrsnbqygg1mcvjy0ynmd6kfh"; + }; }; }; - }; - programs.librewolf = { - enable = true; - profiles.default = { - name = "Default"; - settings = { - "toolkit.legacyUserProfileCustomizations.stylesheets" = true; - "svg.context-properties.content.enabled" = true; - "gnomeTheme.hideSingleTab" = true; + programs.librewolf = { + enable = true; + profiles.default = { + name = "Default"; + settings = { + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "svg.context-properties.content.enabled" = true; + "gnomeTheme.hideSingleTab" = true; + }; + userChrome = '' + @import "librewolf-gnome-theme/userChrome.css"; + @import "librewolf-gnome-theme/theme/colors/dark.css"; + ''; }; - userChrome = '' - @import "librewolf-gnome-theme/userChrome.css"; - @import "librewolf-gnome-theme/theme/colors/dark.css"; - ''; }; - }; - dconf.settings = { - "org/gnome/TextEditor".keybindings = "vim"; - "org/gnome/shell" = { - disable-user-extensions = false; - enabled-extensions = [ - "clipboard-indicator@tudmotu.com" - "rounded-window-corners@fxgn" - "runcat@kolesnikov.se" - "caffeine@patapon.info" - "launch-new-instance@gnome-shell-extensions.gcampax.github.com" + dconf.settings = { + "org/gnome/TextEditor".keybindings = "vim"; + "org/gnome/shell" = { + disable-user-extensions = false; + enabled-extensions = [ + "clipboard-indicator@tudmotu.com" + "rounded-window-corners@fxgn" + "runcat@kolesnikov.se" + "caffeine@patapon.info" + "launch-new-instance@gnome-shell-extensions.gcampax.github.com" + ]; + }; + "org/gnome/desktop/interface" = { + gtk-theme = "adw-gtk3"; + show-battery-percentage = true; + }; + "org/gnome/desktop/wm/preferences".button-layout = "appmenu:minimize,maximize,close"; + "org/gnome/desktop/wm/keybindings" = { + switch-applications = [ "grave" ]; + switch-applications-backwards = [ "grave" ]; + switch-windows = [ "Tab" ]; + switch-windows-backwards = [ "Tab" ]; + }; + "org/gnome/settings-daemon/plugins/media-keys".custom-keybindings = [ + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/" ]; - }; - "org/gnome/desktop/interface" = { - gtk-theme = "adw-gtk3"; - show-battery-percentage = true; - }; - "org/gnome/desktop/wm/preferences".button-layout = "appmenu:minimize,maximize,close"; - "org/gnome/desktop/wm/keybindings" = { - switch-applications = [ "grave" ]; - switch-applications-backwards = [ "grave" ]; - switch-windows = [ "Tab" ]; - switch-windows-backwards = [ "Tab" ]; - }; - "org/gnome/settings-daemon/plugins/media-keys".custom-keybindings = [ - "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" - "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/" - ]; - "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = { - name = "Terminal"; - command = "blackbox"; - binding = "Return"; - }; - "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = { - name = "Dark mode switcher"; - command = "${pkgs.writeShellScript "gnome-dark-mode-switcher" '' - SCHEMA=org.gnome.desktop.interface - KEY=color-scheme - if [ "$(gsettings get "$SCHEMA" "$KEY")" = "'prefer-dark'" ]; then - gsettings set "$SCHEMA" "$KEY" "prefer-light"; - else - gsettings set "$SCHEMA" "$KEY" "prefer-dark"; - fi - ''}"; - binding = "d"; + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = { + name = "Terminal"; + command = "blackbox"; + binding = "Return"; + }; + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = { + name = "Dark mode switcher"; + command = "${pkgs.writeShellScript "gnome-dark-mode-switcher" '' + SCHEMA=org.gnome.desktop.interface + KEY=color-scheme + if [ "$(gsettings get "$SCHEMA" "$KEY")" = "'prefer-dark'" ]; then + gsettings set "$SCHEMA" "$KEY" "prefer-light"; + else + gsettings set "$SCHEMA" "$KEY" "prefer-dark"; + fi + ''}"; + binding = "d"; + }; }; }; } diff --git a/home/home.nix b/home/home.nix new file mode 100644 index 0000000..05ea3b6 --- /dev/null +++ b/home/home.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + imports = [ + ./cli.nix + ./graphical.nix + ]; +} diff --git a/hosts/elistraee/default.nix b/hosts/elistraee/default.nix new file mode 100644 index 0000000..c0eb18c --- /dev/null +++ b/hosts/elistraee/default.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + imports = [ ../../nixos ]; + + nixos-wsl.enable = true; # Enables wsl configuration (nixos/wsl.nix). + + networking.hostName = "elistraee"; + system.stateVersion = "25.05"; + + programs.gnupg.agent.pinentryPackage = pkgs.pinentry-tty; +} diff --git a/hosts/selune/default.nix b/hosts/selune/default.nix index 92d1616..9e14524 100644 --- a/hosts/selune/default.nix +++ b/hosts/selune/default.nix @@ -5,6 +5,9 @@ ./hardware-configuration.nix ]; + baremetal.enable = true; # Enables baremetal features (nixos/baremetal.nix). + graphical.enable = true; # Enables graphical features (nixos/graphical.nix). + boot.initrd.luks.devices."luks-374c6259-18c4-462b-9f30-9c9648de00ae".device = "/dev/disk/by-uuid/374c6259-18c4-462b-9f30-9c9648de00ae"; diff --git a/hosts/shar/default.nix b/hosts/shar/default.nix index 94c5e01..f584443 100644 --- a/hosts/shar/default.nix +++ b/hosts/shar/default.nix @@ -5,6 +5,9 @@ ./hardware-configuration.nix ]; + baremetal.enable = true; # Enables baremetal features (nixos/baremetal.nix). + graphical.enable = true; # Enables graphical features (nixos/graphical.nix). + boot.initrd.luks.devices."luks-324ce23c-e630-42a1-8558-184e999053a5".device = "/dev/disk/by-uuid/324ce23c-e630-42a1-8558-184e999053a5"; diff --git a/nixos/baremetal.nix b/nixos/baremetal.nix new file mode 100644 index 0000000..83fb8bc --- /dev/null +++ b/nixos/baremetal.nix @@ -0,0 +1,27 @@ +{ pkgs, lib, config, ... }: +{ + options = { + baremetal.enable = lib.mkEnableOption "enables bare metal features"; + }; + + config = lib.mkIf config.baremetal.enable { + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.kernelPackages = pkgs.linuxPackages_latest; + + networking.networkmanager.enable = true; + users.users.hms.extraGroups = [ "networkmanager" ]; + + services.printing.enable = true; + + services.pulseaudio.enable = false; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + console.keyMap = "fr"; + }; +} diff --git a/nixos/default.nix b/nixos/default.nix index c878c47..2ee34ac 100644 --- a/nixos/default.nix +++ b/nixos/default.nix @@ -1,5 +1,11 @@ { pkgs, ... }: { + imports = [ + ./baremetal.nix + ./wsl.nix + ./graphical.nix + ]; + nix.settings.experimental-features = "nix-command flakes"; system.autoUpgrade.enable = true; @@ -10,12 +16,6 @@ nix.gc.options = "--delete-older-than 10d"; nix.settings.auto-optimise-store = true; - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - boot.kernelPackages = pkgs.linuxPackages_latest; - - networking.networkmanager.enable = true; - time.timeZone = "Europe/Paris"; i18n.defaultLocale = "en_GB.UTF-8"; i18n.extraLocaleSettings = { @@ -30,35 +30,10 @@ LC_TIME = "fr_FR.UTF-8"; }; - services.xserver.enable = true; - services.xserver.xkb.layout = "fr"; - services.xserver.xkb.variant = "ergol"; - - services.displayManager.gdm.enable = true; - services.desktopManager.gnome.enable = true; - services.gnome.gnome-browser-connector.enable = true; - - services.printing.enable = true; - - services.pulseaudio.enable = false; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - }; - - services.openssh.enable = true; - - console.keyMap = "fr"; - users.users.hms = { isNormalUser = true; description = "hms"; - extraGroups = [ - "networkmanager" - "wheel" - ]; + extraGroups = [ "wheel" ]; packages = [ ]; }; @@ -69,6 +44,8 @@ wget ]; + services.openssh.enable = true; + programs.gnupg.agent = { enable = true; enableSSHSupport = true; diff --git a/nixos/graphical.nix b/nixos/graphical.nix new file mode 100644 index 0000000..51a3291 --- /dev/null +++ b/nixos/graphical.nix @@ -0,0 +1,16 @@ +{ pkgs, lib, config, ... }: +{ + options = { + graphical.enable = lib.mkEnableOption "enables graphical features"; + }; + + config = lib.mkIf config.graphical.enable { + services.xserver.enable = true; + services.xserver.xkb.layout = "fr"; + services.xserver.xkb.variant = "ergol"; + + services.displayManager.gdm.enable = true; + services.desktopManager.gnome.enable = true; + services.gnome.gnome-browser-connector.enable = true; + }; +} diff --git a/nixos/wsl.nix b/nixos/wsl.nix new file mode 100644 index 0000000..19dc98c --- /dev/null +++ b/nixos/wsl.nix @@ -0,0 +1,11 @@ +{ pkgs, lib, config, ... }: +{ + options = { + nixos-wsl.enable = lib.mkEnableOption "enables WSL support"; + }; + + config = lib.mkIf config.nixos-wsl.enable { + wsl.enable = true; + wsl.defaultUser = "hms"; + }; +}