diff --git a/flake.lock b/flake.lock index f3452d5..8ab88f2 100644 --- a/flake.lock +++ b/flake.lock @@ -63,6 +63,40 @@ "type": "github" } }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -121,6 +155,27 @@ "type": "github" } }, + "nixos-wsl": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1733854371, + "narHash": "sha256-K9qGHniYBbjqVcEiwXyiofj/IFf78L5F0/FCf+CKyr0=", + "owner": "nix-community", + "repo": "NixOS-WSL", + "rev": "dee4425dcee3149475ead0cb6a616b8a028c5888", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "main", + "repo": "NixOS-WSL", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1703013332, @@ -154,6 +209,22 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1733384649, + "narHash": "sha256-K5DJ2LpPqht7K76bsxetI+YHhGGRyVteTPRQaIIKJpw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "190c31a89e5eec80dd6604d7f9e5af3802a58a13", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1734649271, "narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=", @@ -175,7 +246,8 @@ "disko": "disko", "home-manager": "home-manager_2", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs_2", + "nixos-wsl": "nixos-wsl", + "nixpkgs": "nixpkgs_3", "nixpkgs-2405": "nixpkgs-2405" } }, @@ -193,6 +265,21 @@ "repo": "default", "type": "github" } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 701bf33..3d91950 100644 --- a/flake.nix +++ b/flake.nix @@ -14,6 +14,8 @@ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-2405.url = "github:nixos/nixpkgs/nixos-24.05"; + + nixos-wsl.url = "github:nix-community/NixOS-WSL/main"; }; outputs = @@ -22,6 +24,7 @@ disko, home-manager, nixos-hardware, + nixos-wsl, nixpkgs, self, ... @@ -99,6 +102,23 @@ ]; }; + PW05CH3L = nixpkgs.lib.nixosSystem { + inherit system; + + specialArgs = specialArgs // { + headless = true; + hostname = "PW05CH3L"; + }; + + modules = [ + agenix.nixosModules.default + disko.nixosModules.disko + nixos-wsl.nixosModules.default + + ./nix/hosts/PW05CH3L + ]; + }; + hetznix = nixpkgs.lib.nixosSystem { inherit system; @@ -114,20 +134,5 @@ ]; }; }; - - homeConfigurations = { - "${username}@PW05CH3L" = home-manager.lib.homeManagerConfiguration { - inherit pkgs; - - extraSpecialArgs = specialArgs // { - headless = true; - hostname = "PW05CH3L"; - }; - - modules = [ - ./nix/home/opdavies - ]; - }; - }; }; } diff --git a/nix/hosts/PW05CH3L/configuration.nix b/nix/hosts/PW05CH3L/configuration.nix new file mode 100644 index 0000000..2f2c5bf --- /dev/null +++ b/nix/hosts/PW05CH3L/configuration.nix @@ -0,0 +1,118 @@ +{ + headless ? false, + hostname, + inputs, + outputs, + pkgs, + self, + system, + username, + ... +}: + +{ + home-manager = { + extraSpecialArgs = { + inherit + hostname + inputs + outputs + headless + self + system + username + ; + }; + useGlobalPkgs = true; + useUserPackages = true; + + users."${username}" = import "${self}/nix/home/${username}"; + }; + + nixpkgs = { + config = { + allowUnfree = true; + }; + + overlays = [ + outputs.overlays.additions + outputs.overlays.modifications + outputs.overlays.stable-packages + ]; + }; + + nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ]; + + # # Enable networking + # networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "Europe/London"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_GB.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_GB.UTF-8"; + LC_IDENTIFICATION = "en_GB.UTF-8"; + LC_MEASUREMENT = "en_GB.UTF-8"; + LC_MONETARY = "en_GB.UTF-8"; + LC_NAME = "en_GB.UTF-8"; + LC_NUMERIC = "en_GB.UTF-8"; + LC_PAPER = "en_GB.UTF-8"; + LC_TELEPHONE = "en_GB.UTF-8"; + LC_TIME = "en_GB.UTF-8"; + }; + + # Configure console keymap + console.keyMap = "uk"; + + users.users.${username} = { + description = "Oliver Davies"; + isNormalUser = true; + + extraGroups = [ + "docker" + "media" + "networkmanager" + "wheel" + ]; + + packages = with pkgs; [ ]; + }; + + security.sudo.wheelNeedsPassword = false; + + environment.systemPackages = + with pkgs; + [ + ] + ++ pkgs.lib.optionals (!headless) [ + ]; + + system.stateVersion = "22.11"; + + nix = { + extraOptions = '' + trusted-users = root ${username} + ''; + + gc = { + automatic = true; + dates = "daily"; + options = "--delete-older-than 7d"; + }; + + optimise.automatic = true; + + settings = { + auto-optimise-store = true; + experimental-features = [ + "nix-command" + "flakes" + ]; + warn-dirty = false; + }; + }; + +} diff --git a/nix/hosts/PW05CH3L/default.nix b/nix/hosts/PW05CH3L/default.nix new file mode 100644 index 0000000..e1303ff --- /dev/null +++ b/nix/hosts/PW05CH3L/default.nix @@ -0,0 +1,14 @@ +{ username, ... }: + +{ + imports = [ + ../common + + ./configuration.nix + ]; + + wsl = { + enable = true; + defaultUser = username; + }; +} diff --git a/nix/hosts/lemp11/default.nix b/nix/hosts/lemp11/default.nix index 7c94665..22c1660 100644 --- a/nix/hosts/lemp11/default.nix +++ b/nix/hosts/lemp11/default.nix @@ -7,6 +7,7 @@ }; desktop = { + autorandr.enable = true; gaming.enable = true; peek.enable = true; }; diff --git a/nix/hosts/t490/default.nix b/nix/hosts/t490/default.nix index 364150d..15d408b 100644 --- a/nix/hosts/t490/default.nix +++ b/nix/hosts/t490/default.nix @@ -7,6 +7,7 @@ features = { desktop = { + autorandr.enable = true; gaming.enable = true; i3.enable = true; peek.enable = true; diff --git a/nix/modules/nixos/autorandr.nix b/nix/modules/nixos/autorandr.nix deleted file mode 100644 index 202c4ce..0000000 --- a/nix/modules/nixos/autorandr.nix +++ /dev/null @@ -1,75 +0,0 @@ -{ config, ... }: - -{ - services.autorandr = { - enable = true; - - profiles = - let - hosts = { - lemp11 = { - internal = { - fingerprint = "00ffffffffffff000dae081400000000251d0104a51f117802ee95a3544c99260f505400000001010101010101010101010101010101363680a0703820403020350035ad1000001a000000fe004e3134304843472d4551310a20000000fe00434d4e0a202020202020202020000000fe004e3134304843472d4551310a200084"; - name = "eDP-1"; - }; - - desktop.name = "HDMI-1"; - }; - - nixedo = { - internal = { - fingerprint = "00ffffffffffff000dae081400000000251d0104a51f117802ee95a3544c99260f505400000001010101010101010101010101010101363680a0703820403020350035ad1000001a000000fe004e3134304843472d4551310a20000000fe00434d4e0a202020202020202020000000fe004e3134304843472d4551310a200084"; - name = "eDP-1"; - }; - - desktop.name = "HDMI-1"; - }; - - t490 = { - internal = { - fingerprint = "00ffffffffffff0030e4fa0500000000001c0104a51f117802aa95955e598e271b5054000000010101010101010101010101010101012e3680a070381f403020350035ae1000001ab62c80f4703816403020350035ae1000001a000000fe004c4720446973706c61790a2020000000fe004c503134305746412d53504432004d"; - name = "eDP-1"; - }; - - desktop.name = "HDMI-2"; - }; - }; - - host = hosts."${config.networking.hostName}"; - in - { - default = { - fingerprint = { - "${host.internal.name}" = host.internal.fingerprint; - }; - - config = { - "${host.internal.name}" = { - enable = true; - mode = "1920x1080"; - }; - }; - }; - - desktop = { - config = { - "${host.internal.name}".enable = false; - - "${host.desktop.name}" = { - enable = true; - mode = "2560x1440"; - primary = true; - rate = "59.95"; - }; - }; - - fingerprint = { - "${host.internal.name}" = host.internal.fingerprint; - - "${host.desktop.name}" = - "00ffffffffffff004c2d1710424e58432b1f0103803f24782ac8b5ad50449e250f5054bfef80714f810081c081809500a9c0b300010108e80030f2705a80b0588a0078682100001e000000fd00324b1e873c000a202020202020000000fc004c5532385235350a2020202020000000ff0048345a524130303132380a20200183020335f04961120313041f10605f2309070783010000e305c0006b030c002000b83c2000200167d85dc401788003e20f81e3060501023a801871382d40582c450078682100001e023a80d072382d40102c458078682100001e04740030f2705a80b0588a0078682100001e565e00a0a0a029503020350078682100001a000049"; - }; - }; - }; - }; -} diff --git a/nix/modules/nixos/default.nix b/nix/modules/nixos/default.nix index 28ce916..7fc8e31 100644 --- a/nix/modules/nixos/default.nix +++ b/nix/modules/nixos/default.nix @@ -1,6 +1,5 @@ { imports = [ - ./autorandr.nix ./features/cli ./features/desktop ./features/gaming.nix diff --git a/nix/modules/nixos/features/desktop/autorandr.nix b/nix/modules/nixos/features/desktop/autorandr.nix new file mode 100644 index 0000000..385e9b3 --- /dev/null +++ b/nix/modules/nixos/features/desktop/autorandr.nix @@ -0,0 +1,81 @@ +{ config, lib, ... }: + +with lib; + +{ + options.features.desktop.autorandr.enable = mkEnableOption "Enable autorandr"; + + config = mkIf config.features.desktop.autorandr.enable { + services.autorandr = { + enable = true; + + profiles = + let + hosts = { + lemp11 = { + internal = { + fingerprint = "00ffffffffffff000dae081400000000251d0104a51f117802ee95a3544c99260f505400000001010101010101010101010101010101363680a0703820403020350035ad1000001a000000fe004e3134304843472d4551310a20000000fe00434d4e0a202020202020202020000000fe004e3134304843472d4551310a200084"; + name = "eDP-1"; + }; + + desktop.name = "HDMI-1"; + }; + + nixedo = { + internal = { + fingerprint = "00ffffffffffff000dae081400000000251d0104a51f117802ee95a3544c99260f505400000001010101010101010101010101010101363680a0703820403020350035ad1000001a000000fe004e3134304843472d4551310a20000000fe00434d4e0a202020202020202020000000fe004e3134304843472d4551310a200084"; + name = "eDP-1"; + }; + + desktop.name = "HDMI-1"; + }; + + t490 = { + internal = { + fingerprint = "00ffffffffffff0030e4fa0500000000001c0104a51f117802aa95955e598e271b5054000000010101010101010101010101010101012e3680a070381f403020350035ae1000001ab62c80f4703816403020350035ae1000001a000000fe004c4720446973706c61790a2020000000fe004c503134305746412d53504432004d"; + name = "eDP-1"; + }; + + desktop.name = "HDMI-2"; + }; + }; + + host = hosts."${config.networking.hostName}"; + in + { + default = { + fingerprint = { + "${host.internal.name}" = host.internal.fingerprint; + }; + + config = { + "${host.internal.name}" = { + enable = true; + mode = "1920x1080"; + }; + }; + }; + + desktop = { + config = { + "${host.internal.name}".enable = false; + + "${host.desktop.name}" = { + enable = true; + mode = "2560x1440"; + primary = true; + rate = "59.95"; + }; + }; + + fingerprint = { + "${host.internal.name}" = host.internal.fingerprint; + + "${host.desktop.name}" = + "00ffffffffffff004c2d1710424e58432b1f0103803f24782ac8b5ad50449e250f5054bfef80714f810081c081809500a9c0b300010108e80030f2705a80b0588a0078682100001e000000fd00324b1e873c000a202020202020000000fc004c5532385235350a2020202020000000ff0048345a524130303132380a20200183020335f04961120313041f10605f2309070783010000e305c0006b030c002000b83c2000200167d85dc401788003e20f81e3060501023a801871382d40582c450078682100001e023a80d072382d40102c458078682100001e04740030f2705a80b0588a0078682100001e565e00a0a0a029503020350078682100001a000049"; + }; + }; + }; + }; + }; +} diff --git a/nix/modules/nixos/features/desktop/default.nix b/nix/modules/nixos/features/desktop/default.nix index 8015725..07ce9a0 100644 --- a/nix/modules/nixos/features/desktop/default.nix +++ b/nix/modules/nixos/features/desktop/default.nix @@ -1,5 +1,6 @@ { imports = [ + ./autorandr.nix ./peek.nix ./screenkey.nix ];