diff --git a/machines/gallifrey/default.nix b/machines/gallifrey/default.nix
new file mode 100644
index 0000000..305af32
--- /dev/null
+++ b/machines/gallifrey/default.nix
@@ -0,0 +1,103 @@
+{
+  config,
+  pkgs,
+  inputs,
+  ...
+}:
+
+{
+  imports = [
+    ./hardware.nix
+    ./home-julien.nix
+  ];
+
+  machine.meta = {
+    arch = "x86_64-linux";
+    nixpkgs_version = inputs.unstable;
+    hm_version = inputs.home-manager-unstable;
+  };
+
+  networking.hostName = "gallifrey";
+  boot.loader.systemd-boot.enable = true;
+  boot.loader.efi.canTouchEfiVariables = true;
+
+  networking.networkmanager.enable = true;
+
+  networking.networkmanager.dns = "systemd-resolved";
+  services.resolved.enable = true;
+  services.userborn.enable = true;
+
+  services.displayManager.autoLogin = {
+    enable = true;
+    user = "julien";
+  };
+
+  disko = import ./disko.nix;
+
+  services.xserver = {
+    enable = true;
+    displayManager = {
+      gdm.enable = true;
+    };
+    desktopManager.gnome.enable = true;
+    videoDrivers = [ "nvidia" ];
+  };
+
+  hardware.opengl.enable = true;
+  boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ];
+
+  hardware.nvidia = {
+    modesetting.enable = true;
+    powerManagement.enable = false;
+    powerManagement.finegrained = false;
+    open = true;
+    nvidiaSettings = true;
+    package = config.boot.kernelPackages.nvidiaPackages.stable;
+  };
+
+  programs.xwayland.enable = true;
+  services.postgresql.enable = true;
+
+  programs.dconf.enable = true;
+  services.emacs = {
+    enable = true;
+    package = pkgs.emacs29-gtk3;
+  };
+
+  services.udev.packages = [ pkgs.nitrokey-udev-rules ];
+
+  security.polkit.enable = true;
+
+  nix = {
+    distributedBuilds = true;
+    buildMachines = [
+      {
+        hostName = "epyc.infra.newtype.fr";
+        maxJobs = 100;
+        systems = [ "x86_64-linux" ];
+        sshUser = "root";
+        supportedFeatures = [
+          "kvm"
+          "nixos-test"
+          "benchmark"
+          "big-parallel"
+        ];
+        sshKey = "/home/julien/.ssh/id_ed25519";
+        speedFactor = 2;
+      }
+    ];
+  };
+
+  networking.networkmanager.plugins = [ pkgs.networkmanager-openvpn ];
+  programs.ssh.startAgent = true;
+
+  environment.systemPackages = with pkgs; [
+    tailscale
+    brightnessctl
+    sbctl
+    ddcutil
+    xorg.xinit
+  ];
+
+  system.stateVersion = "24.11";
+}
diff --git a/machines/gallifrey/disko.nix b/machines/gallifrey/disko.nix
new file mode 100644
index 0000000..2ebf2b7
--- /dev/null
+++ b/machines/gallifrey/disko.nix
@@ -0,0 +1,90 @@
+{
+  devices = {
+    disk = {
+      main = {
+        type = "disk";
+        device = "/dev/disk/by-id/nvme-CT2000P3PSSD8_2316E6CBA6BA";
+        content = {
+          type = "gpt";
+          partitions = {
+            boot = {
+              size = "1M";
+              type = "EF02";
+            };
+            ESP = {
+              size = "10G";
+              type = "EF00";
+              content = {
+                type = "filesystem";
+                format = "vfat";
+                mountpoint = "/boot";
+              };
+            };
+            swap = {
+              size = "16G";
+              content = {
+                type = "swap";
+                discardPolicy = "both";
+              };
+            };
+            luks = {
+              size = "100%";
+              content = {
+                type = "luks";
+                name = "crypted";
+                extraOpenArgs = [ ];
+                passwordFile = "/tmp/secret.key";
+                settings = {
+                  # if you want to use the key for interactive login be sure there is no trailing newline
+                  # for example use `echo -n "password" > /tmp/secret.key`
+                  allowDiscards = true;
+                };
+                content = {
+                  type = "lvm_pv";
+                  vg = "mainpool";
+                };
+              };
+            };
+          };
+        };
+      };
+    };
+    lvm_vg = {
+      mainpool = {
+        type = "lvm_vg";
+        lvs = {
+          root = {
+            size = "300G";
+            pool = "mainpool";
+            content = {
+              type = "filesystem";
+              format = "ext4";
+              mountpoint = "/";
+              mountOptions = [ "defaults" ];
+            };
+          };
+          persistent = {
+            size = "600G";
+            pool = "mainpool";
+            content = {
+              type = "filesystem";
+              format = "ext4";
+              mountpoint = "/persistent";
+              mountOptions = [ "defaults" ];
+            };
+          };
+
+          store = {
+            size = "900G";
+            pool = "mainpool";
+            content = {
+              type = "filesystem";
+              format = "ext4";
+              mountpoint = "/nix";
+            };
+          };
+        };
+      };
+    };
+  };
+}
diff --git a/machines/gallifrey/hardware.nix b/machines/gallifrey/hardware.nix
new file mode 100644
index 0000000..6ac15d7
--- /dev/null
+++ b/machines/gallifrey/hardware.nix
@@ -0,0 +1,30 @@
+# Do not modify this file!  It was generated by ‘nixos-generate-config’
+# and may be overwritten by future invocations.  Please make changes
+# to /etc/nixos/configuration.nix instead.
+{ lib, modulesPath, ... }:
+
+{
+  imports = [
+    (modulesPath + "/installer/scan/not-detected.nix")
+  ];
+
+  boot.initrd.availableKernelModules = [
+    "xhci_pci"
+    "nvme"
+    "usb_storage"
+    "usbhid"
+  ];
+  boot.initrd.kernelModules = [ ];
+  boot.kernelModules = [ ];
+  boot.extraModulePackages = [ ];
+
+  # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+  # (the default) this is the recommended approach. When using systemd-networkd it's
+  # still possible to use this option, but it's recommended to use it in conjunction
+  # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
+  networking.useDHCP = lib.mkDefault true;
+  # networking.interfaces.enP5p1s0.useDHCP = lib.mkDefault true;
+
+  nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+  powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
+}
diff --git a/machines/gallifrey/home-julien.nix b/machines/gallifrey/home-julien.nix
new file mode 100644
index 0000000..8a21341
--- /dev/null
+++ b/machines/gallifrey/home-julien.nix
@@ -0,0 +1,88 @@
+{ pkgs, ... }:
+{
+
+  luj.hmgr.julien = {
+    home.stateVersion = "24.11";
+    luj.programs.neovim.enable = true;
+    luj.programs.ssh-client.enable = true;
+    luj.programs.git.enable = true;
+    luj.programs.kitty.enable = true;
+    luj.programs.emacs.enable = false;
+    luj.emails.enable = true;
+
+    programs.rofi = {
+      enable = true;
+      package = pkgs.rofi-wayland;
+      font = "Fira Font";
+      theme = "DarkBlue";
+    };
+
+    programs.direnv = {
+      enable = true;
+      enableZshIntegration = true;
+      nix-direnv.enable = true;
+    };
+
+    home.pointerCursor = {
+      gtk.enable = true;
+      name = "Adwaita";
+      package = pkgs.gnome.adwaita-icon-theme;
+      size = 15;
+      x11 = {
+        enable = true;
+        defaultCursor = "Adwaita";
+      };
+    };
+
+    programs.obs-studio = {
+      enable = true;
+      plugins = with pkgs; [ obs-studio-plugins.obs-vkcapture ];
+    };
+
+    home.packages = with pkgs; [
+      du-dust
+      kitty
+      jq
+      lazygit
+      fira-code
+      feh
+      meld
+      vlc
+      nerdfonts
+      jetbrains-mono
+      cantarell-fonts
+      unstable.nixd
+      libreoffice
+      signal-desktop
+      font-awesome
+      nodejs
+      htop
+      evince
+      mosh
+      flameshot
+      kitty
+      networkmanagerapplet
+      element-desktop
+      xdg-utils
+      step-cli
+      scli
+      jftui
+      texlive.combined.scheme-full
+      unstable.inochi-creator
+      chromium
+      gh
+      ouch
+    ];
+
+    fonts.fontconfig.enable = true;
+
+    programs.firefox = {
+      enable = true;
+      package = pkgs.firefox;
+    };
+
+    home.keyboard = {
+      layout = "fr";
+    };
+  };
+}