diff --git a/SwarselSystems.org b/SwarselSystems.org index b2bbada..99f6944 100644 --- a/SwarselSystems.org +++ b/SwarselSystems.org @@ -304,8 +304,6 @@ When setting this option normally, the password would normally be written world- Here I define a few variables that I need for my system specifications. First and foremost, =pkgs=, which gets passed the emacs-overlay, nur, and nixgl modules to it. With this, I can grab all these packages by referencing =pkgs.= instead of having to put e.g. =nixgl.auto.nixGLDefault=. -I also define some common module lists that I can simply load depending on the fundamental system (NixOS vs. non-NixOS) - =nixModules=, =homeModules=, and =mixedModules=. - The interesting part is in the start: - first, I define =pkgsFor=. This function reads all available systems from nixpkgs and generates pkgs for them. - next, =forEachSystem= is a function that can be called to declare an output for each such defined system. @@ -319,29 +317,10 @@ The interesting part is in the start: lib = (nixpkgs.lib // home-manager.lib).extend (_: _: { swarselsystems = import ./lib { inherit self lib inputs outputs systems; }; }); - # NixOS modules that can only be used on NixOS systems - nixModules = [ - inputs.stylix.nixosModules.stylix - inputs.lanzaboote.nixosModules.lanzaboote - inputs.disko.nixosModules.disko - inputs.impermanence.nixosModules.impermanence - inputs.sops-nix.nixosModules.sops - inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm - inputs.nix-topology.nixosModules.default - ./profiles/nixos/common - ]; # Home-Manager modules wanted on non-NixOS systems - homeModules = [ - inputs.stylix.homeManagerModules.stylix - ]; # Home-Manager modules wanted on both NixOS and non-NixOS systems - mixedModules = [ - inputs.sops-nix.homeManagerModules.sops - inputs.nix-index-database.hmModules.nix-index - ./profiles/home/common - ]; #+end_src ** General (outputs) @@ -366,7 +345,7 @@ In this section I am creating some attributes that define general concepts of my #+begin_src nix :tangle no :noweb-ref flakeoutputgeneral - inherit lib nixModules mixedModules homeModules; + inherit lib; nixosModules = import ./modules/nixos { inherit lib; }; homeManagerModules = import ./modules/home { inherit lib; }; @@ -611,7 +590,7 @@ This is the template that I use for new deployments of personal machines. Server :END: #+begin_src nix :tangle templates/hosts/nixos/default.nix - { self, inputs, outputs, config, pkgs, lib, ... }: + { self, inputs, pkgs, lib, ... }: let profilesPath = "${self}/profiles"; sharedOptions = { @@ -620,7 +599,7 @@ This is the template that I use for new deployments of personal machines. Server in { - imports = outputs.nixModules ++ [ + imports = [ # ---- nixos-hardware here ---- ./hardware-configuration.nix @@ -634,19 +613,11 @@ This is the template that I use for new deployments of personal machines. Server inputs.home-manager.nixosModules.home-manager { - home-manager.users.swarsel.imports = outputs.mixedModules ++ [ + home-manager.users.swarsel.imports = [ "${profilesPath}/home/optional/gaming.nix" - ] ++ (builtins.attrValues outputs.homeManagerModules); + ]; } - ] ++ (builtins.attrValues outputs.nixosModules); - - - nixpkgs = { - overlays = [ outputs.overlays.default ]; - config = { - allowUnfree = true; - }; - }; + ]; boot = { kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; @@ -840,7 +811,7 @@ My work machine. Built for more security, this is the gold standard of my config :CUSTOM_ID: h:567c0055-f5f7-4e53-8f13-d767d7166e9d :END: #+begin_src nix :tangle hosts/nixos/nbl-imba-2/default.nix - { self, inputs, outputs, pkgs, lib, ... }: + { self, inputs, pkgs, lib, ... }: let profilesPath = "${self}/profiles"; sharedOptions = { @@ -850,12 +821,12 @@ My work machine. Built for more security, this is the gold standard of my config in { - imports = outputs.nixModules ++ [ + imports = [ inputs.nixos-hardware.nixosModules.framework-16-7040-amd inputs.fw-fanctrl.nixosModules.default - ./hardware-configuration.nix ./disk-config.nix + ./hardware-configuration.nix "${profilesPath}/nixos/optional/virtualbox.nix" # "${profilesPath}/nixos/optional/vmware.nix" @@ -866,12 +837,12 @@ My work machine. Built for more security, this is the gold standard of my config inputs.home-manager.nixosModules.home-manager { - home-manager.users.swarsel.imports = outputs.mixedModules ++ [ + home-manager.users.swarsel.imports = [ "${profilesPath}/home/optional/gaming.nix" "${profilesPath}/home/optional/work.nix" - ] ++ (builtins.attrValues outputs.homeManagerModules); + ]; } - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); + ]; @@ -1203,15 +1174,13 @@ This is my main server that I run at home. It handles most tasks that require bi :CUSTOM_ID: h:8ad68406-4a75-45ba-97ad-4c310b921124 :END: #+begin_src nix :tangle hosts/nixos/winters/default.nix - { self, inputs, outputs, ... }: + { self, inputs, ... }: let profilesPath = "${self}/profiles"; in { imports = [ - inputs.sops-nix.nixosModules.sops - ./hardware-configuration.nix "${profilesPath}/nixos/optional/autologin.nix" @@ -1221,10 +1190,9 @@ This is my main server that I run at home. It handles most tasks that require bi { home-manager.users.swarsel.imports = [ "${profilesPath}/home/server" - ] ++ (builtins.attrValues outputs.homeManagerModules); + ]; } - - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); + ]; boot = { loader.systemd-boot.enable = true; @@ -1324,22 +1292,8 @@ This is my main server that I run at home. It handles most tasks that require bi A Mac notebook that I have received from work. I use this machine for getting accustomed to the Apple ecosystem as well as as a sandbox for nix-darwin configurations. #+begin_src nix :tangle hosts/darwin/nbm-imba-166/default.nix - { self, inputs, outputs, ... }: - let - profilesPath = "${self}/profiles"; - in + { lib, ... }: { - imports = [ - "${profilesPath}/darwin/nixos/common" - - inputs.home-manager.darwinModules.home-manager - { - home-manager.users."leon.schwarzaeugl".imports = [ - "${profilesPath}/darwin/home" - ] ++ (builtins.attrValues outputs.homeManagerModules); - } - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); - # Auto upgrade nix package and the daemon service. services.nix-daemon.enable = true; @@ -1437,13 +1391,12 @@ This machine mainly acts as an external sync helper. It manages the following th All of these are processes that use little cpu but can take a lot of storage. For this I use a free Ampere instance from OCI with 50G of space. In case my account gets terminated, all of this data is easily replaceable or backed up regularly anyways. #+begin_src nix :tangle hosts/nixos/sync/default.nix - { self, inputs, outputs, lib, ... }: + { self, inputs, lib, ... }: let profilesPath = "${self}/profiles"; in { imports = [ - inputs.sops-nix.nixosModules.sops "${profilesPath}/nixos/server" ./hardware-configuration.nix @@ -1452,16 +1405,14 @@ This machine mainly acts as an external sync helper. It manages the following th { home-manager.users.swarsel.imports = [ "${profilesPath}/home/server" - ] ++ (builtins.attrValues outputs.homeManagerModules); + ]; } - - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); + ]; sops = { defaultSopsFile = lib.mkForce "/root/.dotfiles/secrets/sync/secrets.yaml"; }; - services.nginx = { virtualHosts = { "sync.swarsel.win" = { @@ -1560,14 +1511,9 @@ This is a slim setup for developing base configuration. I do not track the hardw { imports = [ - inputs.disko.nixosModules.disko "${self}/hosts/nixos/toto/disk-config.nix" ./hardware-configuration.nix - inputs.sops-nix.nixosModules.sops - inputs.impermanence.nixosModules.impermanence - inputs.lanzaboote.nixosModules.lanzaboote - "${profilesPath}/nixos/optional/autologin.nix" "${profilesPath}/nixos/common/settings.nix" "${profilesPath}/nixos/common/home-manager.nix" @@ -1585,7 +1531,6 @@ This is a slim setup for developing base configuration. I do not track the hardw "${profilesPath}/home/common/settings.nix" "${profilesPath}/home/common/sops.nix" "${profilesPath}/home/common/ssh.nix" - ] ++ (builtins.attrValues outputs.homeManagerModules); } ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); @@ -1812,11 +1757,6 @@ Also, an initial bash history is provided to allow for a very quick local deploy { imports = [ - - inputs.lanzaboote.nixosModules.lanzaboote - inputs.disko.nixosModules.disko - inputs.impermanence.nixosModules.impermanence - inputs.sops-nix.nixosModules.sops "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix" "${modulesPath}/installer/cd-dvd/channel.nix" @@ -1934,7 +1874,12 @@ This is the "reference implementation" of a setup that runs without NixOS, only { self, outputs, config, ... }: { - imports = outputs.homeModules ++ outputs.mixedModules ++ (builtins.attrValues outputs.homeManagerModules); + imports = [ + inputs.stylix.homeManagerModules.stylix + inputs.sops-nix.homeManagerModules.sops + inputs.nix-index-database.hmModules.nix-index + ./profiles/home/common + ] ++ (builtins.attrValues outputs.homeManagerModules); nixpkgs = { overlays = [ outputs.overlays.default ]; @@ -1978,31 +1923,16 @@ I also set the =WLR_RENDERER_ALLOW_SOFTWARE=1= to allow this configuration to ru #+begin_src nix :tangle hosts/nixos/chaostheatre/default.nix - { self, inputs, outputs, pkgs, lib, ... }: + { self, pkgs, lib, ... }: let profilesPath = "${self}/profiles"; in { - imports = outputs.nixModules ++ [ - + imports = [ ./hardware-configuration.nix - "${profilesPath}/nixos/optional/autologin.nix" - - inputs.home-manager.nixosModules.home-manager - { - home-manager.users.swarsel.imports = outputs.mixedModules ++ (builtins.attrValues outputs.homeManagerModules); - } - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); - - - nixpkgs = { - overlays = [ outputs.overlays.default ]; - config = { - allowUnfree = true; - }; - }; + ]; environment.variables = { WLR_RENDERER_ALLOW_SOFTWARE = 1; @@ -4193,11 +4123,11 @@ Do not that =syncthingtray= is also not mentioned here. It is installed as a hom Again, I set the wallpaper here for =stylix=. #+begin_src nix :tangle modules/home/wallpaper.nix - { lib, ... }: + { self, lib, ... }: { options.swarselsystems.wallpaper = lib.mkOption { type = lib.types.path; - default = ""; + default = self + /wallpaper/lenovowp.png; }; } @@ -4448,6 +4378,12 @@ This section defines all functions of my own that I add to =lib=. These are used A breakdown of each function: +TODO +- =mkFullHost=: + This function is used in mkFullHostConfigs. It basically dynamically creates a nixosConfiguration host, setting its =speciaArgs= and =modules= attributes. The modules are populated based on whether this is a NixOS or darwin host. For the latter, I will only ever use machines that I get for testing from work, and for these my username is different, so I implemented an if-condition for it. This could be done more cleanly using variables, but some care needs to be taken with the home-manager imports and this approach works, so for now this is fine. Thanks to this function, the import sections of the host configs are pretty clean for most hosts. + =lib.optionals= evaluates to an empty list (=[]=) in case that the conditional is not met. +TODO + #+begin_src nix :tangle lib/default.nix { self, lib, systems, inputs, outputs, ... }: { @@ -4482,7 +4418,45 @@ A breakdown of each function: in systemFunc { specialArgs = { inherit inputs outputs lib self; }; - modules = [ "${self}/hosts/${type}/${host}" ]; + modules = [ + inputs.disko.nixosModules.disko + inputs.sops-nix.nixosModules.sops + inputs.impermanence.nixosModules.impermanence + inputs.lanzaboote.nixosModules.lanzaboote + "${self}/hosts/${type}/${host}" + ] ++ + # toto (deployment sandbox) & iso should never receive general configuration + (if (host == "toto" || host == "iso") then [ ] else + ( + # sync & winters (servers) should not receive common non-server config + (if (host == "winters" || host == "sync") then [ ] else [ + "${self}/profiles/${type}/common" + inputs.stylix.nixosModules.stylix + inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm + inputs.nix-topology.nixosModules.default + ]) ++ (if (type == "nixos") then [ + inputs.home-manager.nixosModules.home-manager + { + home-manager.users.swarsel.imports = ( + # sync & winters (servers) should not receive common non-server config + if (host == "winters" || host == "sync") then [ ] else [ + "${self}/profiles/home/common" + ] + ) ++ [ + inputs.sops-nix.homeManagerModules.sops + inputs.nix-index-database.hmModules.nix-index + ] ++ (builtins.attrValues outputs.homeManagerModules); + } + ] else [ + "${self}/profiles/darwin/nixos/common" + inputs.home-manager.darwinModules.home-manager + { + home-manager.users."leon.schwarzaeugl".imports = [ + "${self}/profiles/darwin/home" + ] ++ (builtins.attrValues outputs.homeManagerModules); + } + ]) ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules) + )); }; }; @@ -4491,11 +4465,12 @@ A breakdown of each function: let systemFunc = if (type == "home") then inputs.home-manager.lib.homeManagerConfiguration else inputs.nix-on-droid.lib.nixOnDroidConfiguration; in - systemFunc { - inherit pkgs; - extraSpecialArgs = { inherit inputs outputs lib self; }; - modules = [ "${self}/hosts/${type}/${host}" ]; - }; + systemFunc + { + inherit pkgs; + extraSpecialArgs = { inherit inputs outputs lib self; }; + modules = [ "${self}/hosts/${type}/${host}" ]; + }; }; mkFullHostConfigs = hosts: type: lib.foldl (acc: set: acc // set) { } (lib.map (host: lib.swarselsystems.mkFullHost host type) hosts); @@ -5482,7 +5457,7 @@ Do not touch this. :END: #+begin_src nix :tangle profiles/nixos/common/syncthing.nix - _: + { lib, ... }: { services.syncthing = { enable = true; @@ -5503,7 +5478,7 @@ Do not touch this. }; }; folders = { - "Default Folder" = { + "Default Folder" = lib.mkDefault { path = "/home/swarsel/Sync"; devices = [ "sync (@oracle)" "magicant" "winters" ]; id = "default"; @@ -7421,7 +7396,7 @@ Here we just define some aliases for rebuilding the system, and we allow some in }; }; folders = { - "Default Folder" = { + "Default Folder" = lib.mkForce { path = "/Vault/data/syncthing/Sync"; type = "receiveonly"; versioning = null; @@ -8841,10 +8816,10 @@ Also, we link some files to the users XDG configuration home: Also in firefox `about:config > toolkit.legacyUserProfileCustomizations.stylesheets` to true. #+begin_src nix :tangle profiles/home/common/symlink.nix - { self, ... }: + { self, lib, ... }: { home.file = { - "init.el" = { + "init.el" = lib.mkDefault { source = self + /programs/emacs/init.el; target = ".emacs.d/init.el"; }; @@ -10810,7 +10785,7 @@ This section sets up all the imports that are used in the home-manager section. } #+end_src -**** Linking dotfiles +**** Symlinking dotfiles :PROPERTIES: :CUSTOM_ID: h:9fac0904-b615-4d9d-9bae-54a6691999c3 :END: @@ -10820,10 +10795,10 @@ This section should be used in order to symlink already existing configuration f As for the `home.sessionVariables`, it should be noted that environment variables that are needed at system start should NOT be loaded here, but instead in `programs.zsh.config.extraSessionCommands` (in the home-manager programs section). This is also where all the wayland related variables are stored. #+begin_src nix :tangle profiles/home/server/symlink.nix - { self, ... }: + { self, lib, ... }: { home.file = { - "init.el" = { + "init.el" = lib.mkForce { source = self + /programs/emacs/server.el; target = ".emacs.d/init.el"; }; diff --git a/flake.nix b/flake.nix index 24ca7bd..5fd8eea 100644 --- a/flake.nix +++ b/flake.nix @@ -91,34 +91,15 @@ lib = (nixpkgs.lib // home-manager.lib).extend (_: _: { swarselsystems = import ./lib { inherit self lib inputs outputs systems; }; }); - # NixOS modules that can only be used on NixOS systems - nixModules = [ - inputs.stylix.nixosModules.stylix - inputs.lanzaboote.nixosModules.lanzaboote - inputs.disko.nixosModules.disko - inputs.impermanence.nixosModules.impermanence - inputs.sops-nix.nixosModules.sops - inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm - inputs.nix-topology.nixosModules.default - ./profiles/nixos/common - ]; # Home-Manager modules wanted on non-NixOS systems - homeModules = [ - inputs.stylix.homeManagerModules.stylix - ]; # Home-Manager modules wanted on both NixOS and non-NixOS systems - mixedModules = [ - inputs.sops-nix.homeManagerModules.sops - inputs.nix-index-database.hmModules.nix-index - ./profiles/home/common - ]; in { - inherit lib nixModules mixedModules homeModules; + inherit lib; nixosModules = import ./modules/nixos { inherit lib; }; homeManagerModules = import ./modules/home { inherit lib; }; diff --git a/hosts/darwin/nbm-imba-166/default.nix b/hosts/darwin/nbm-imba-166/default.nix index f50dda3..c5b5970 100644 --- a/hosts/darwin/nbm-imba-166/default.nix +++ b/hosts/darwin/nbm-imba-166/default.nix @@ -1,19 +1,5 @@ -{ self, inputs, outputs, ... }: -let - profilesPath = "${self}/profiles"; -in +{ lib, ... }: { - imports = [ - "${profilesPath}/darwin/nixos/common" - - inputs.home-manager.darwinModules.home-manager - { - home-manager.users."leon.schwarzaeugl".imports = [ - "${profilesPath}/darwin/home" - ] ++ (builtins.attrValues outputs.homeManagerModules); - } - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); - # Auto upgrade nix package and the daemon service. services.nix-daemon.enable = true; diff --git a/hosts/home/default/default.nix b/hosts/home/default/default.nix index fe21a71..162ce5b 100644 --- a/hosts/home/default/default.nix +++ b/hosts/home/default/default.nix @@ -1,7 +1,12 @@ { self, outputs, config, ... }: { - imports = outputs.homeModules ++ outputs.mixedModules ++ (builtins.attrValues outputs.homeManagerModules); + imports = [ + inputs.stylix.homeManagerModules.stylix + inputs.sops-nix.homeManagerModules.sops + inputs.nix-index-database.hmModules.nix-index + ./profiles/home/common + ] ++ (builtins.attrValues outputs.homeManagerModules); nixpkgs = { overlays = [ outputs.overlays.default ]; diff --git a/hosts/nixos/chaostheatre/default.nix b/hosts/nixos/chaostheatre/default.nix index 7d8d236..a4c228a 100644 --- a/hosts/nixos/chaostheatre/default.nix +++ b/hosts/nixos/chaostheatre/default.nix @@ -1,28 +1,13 @@ -{ self, inputs, outputs, pkgs, lib, ... }: +{ self, pkgs, lib, ... }: let profilesPath = "${self}/profiles"; in { - imports = outputs.nixModules ++ [ - + imports = [ ./hardware-configuration.nix - "${profilesPath}/nixos/optional/autologin.nix" - - inputs.home-manager.nixosModules.home-manager - { - home-manager.users.swarsel.imports = outputs.mixedModules ++ (builtins.attrValues outputs.homeManagerModules); - } - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); - - - nixpkgs = { - overlays = [ outputs.overlays.default ]; - config = { - allowUnfree = true; - }; - }; + ]; environment.variables = { WLR_RENDERER_ALLOW_SOFTWARE = 1; diff --git a/hosts/nixos/iso/default.nix b/hosts/nixos/iso/default.nix index 6e0606e..6f20f56 100644 --- a/hosts/nixos/iso/default.nix +++ b/hosts/nixos/iso/default.nix @@ -5,11 +5,6 @@ in { imports = [ - - inputs.lanzaboote.nixosModules.lanzaboote - inputs.disko.nixosModules.disko - inputs.impermanence.nixosModules.impermanence - inputs.sops-nix.nixosModules.sops "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix" "${modulesPath}/installer/cd-dvd/channel.nix" diff --git a/hosts/nixos/nbl-imba-2/default.nix b/hosts/nixos/nbl-imba-2/default.nix index 0a81185..1aaffd9 100644 --- a/hosts/nixos/nbl-imba-2/default.nix +++ b/hosts/nixos/nbl-imba-2/default.nix @@ -1,4 +1,4 @@ -{ self, inputs, outputs, pkgs, lib, ... }: +{ self, inputs, pkgs, lib, ... }: let profilesPath = "${self}/profiles"; sharedOptions = { @@ -8,12 +8,12 @@ let in { - imports = outputs.nixModules ++ [ + imports = [ inputs.nixos-hardware.nixosModules.framework-16-7040-amd inputs.fw-fanctrl.nixosModules.default - ./hardware-configuration.nix ./disk-config.nix + ./hardware-configuration.nix "${profilesPath}/nixos/optional/virtualbox.nix" # "${profilesPath}/nixos/optional/vmware.nix" @@ -24,12 +24,12 @@ in inputs.home-manager.nixosModules.home-manager { - home-manager.users.swarsel.imports = outputs.mixedModules ++ [ + home-manager.users.swarsel.imports = [ "${profilesPath}/home/optional/gaming.nix" "${profilesPath}/home/optional/work.nix" - ] ++ (builtins.attrValues outputs.homeManagerModules); + ]; } - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); + ]; diff --git a/hosts/nixos/sync/default.nix b/hosts/nixos/sync/default.nix index 5346e93..ff246ae 100644 --- a/hosts/nixos/sync/default.nix +++ b/hosts/nixos/sync/default.nix @@ -1,10 +1,9 @@ -{ self, inputs, outputs, lib, ... }: +{ self, inputs, lib, ... }: let profilesPath = "${self}/profiles"; in { imports = [ - inputs.sops-nix.nixosModules.sops "${profilesPath}/nixos/server" ./hardware-configuration.nix @@ -13,16 +12,14 @@ in { home-manager.users.swarsel.imports = [ "${profilesPath}/home/server" - ] ++ (builtins.attrValues outputs.homeManagerModules); + ]; } - - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); + ]; sops = { defaultSopsFile = lib.mkForce "/root/.dotfiles/secrets/sync/secrets.yaml"; }; - services.nginx = { virtualHosts = { "sync.swarsel.win" = { diff --git a/hosts/nixos/toto/default.nix b/hosts/nixos/toto/default.nix index bc52ddc..f535e95 100644 --- a/hosts/nixos/toto/default.nix +++ b/hosts/nixos/toto/default.nix @@ -9,14 +9,9 @@ in { imports = [ - inputs.disko.nixosModules.disko "${self}/hosts/nixos/toto/disk-config.nix" ./hardware-configuration.nix - inputs.sops-nix.nixosModules.sops - inputs.impermanence.nixosModules.impermanence - inputs.lanzaboote.nixosModules.lanzaboote - "${profilesPath}/nixos/optional/autologin.nix" "${profilesPath}/nixos/common/settings.nix" "${profilesPath}/nixos/common/home-manager.nix" @@ -34,7 +29,6 @@ in "${profilesPath}/home/common/settings.nix" "${profilesPath}/home/common/sops.nix" "${profilesPath}/home/common/ssh.nix" - ] ++ (builtins.attrValues outputs.homeManagerModules); } ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); diff --git a/hosts/nixos/winters/default.nix b/hosts/nixos/winters/default.nix index accfa4a..82b2898 100644 --- a/hosts/nixos/winters/default.nix +++ b/hosts/nixos/winters/default.nix @@ -1,12 +1,10 @@ -{ self, inputs, outputs, ... }: +{ self, inputs, ... }: let profilesPath = "${self}/profiles"; in { imports = [ - inputs.sops-nix.nixosModules.sops - ./hardware-configuration.nix "${profilesPath}/nixos/optional/autologin.nix" @@ -16,10 +14,9 @@ in { home-manager.users.swarsel.imports = [ "${profilesPath}/home/server" - ] ++ (builtins.attrValues outputs.homeManagerModules); + ]; } - - ] ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules); + ]; boot = { loader.systemd-boot.enable = true; diff --git a/lib/default.nix b/lib/default.nix index 302fceb..a79b9d5 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -31,7 +31,45 @@ in systemFunc { specialArgs = { inherit inputs outputs lib self; }; - modules = [ "${self}/hosts/${type}/${host}" ]; + modules = [ + inputs.disko.nixosModules.disko + inputs.sops-nix.nixosModules.sops + inputs.impermanence.nixosModules.impermanence + inputs.lanzaboote.nixosModules.lanzaboote + "${self}/hosts/${type}/${host}" + ] ++ + # toto (deployment sandbox) & iso should never receive general configuration + (if (host == "toto" || host == "iso") then [ ] else + ( + # sync & winters (servers) should not receive common non-server config + (if (host == "winters" || host == "sync") then [ ] else [ + "${self}/profiles/${type}/common" + inputs.stylix.nixosModules.stylix + inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm + inputs.nix-topology.nixosModules.default + ]) ++ (if (type == "nixos") then [ + inputs.home-manager.nixosModules.home-manager + { + home-manager.users.swarsel.imports = ( + # sync & winters (servers) should not receive common non-server config + if (host == "winters" || host == "sync") then [ ] else [ + "${self}/profiles/home/common" + ] + ) ++ [ + inputs.sops-nix.homeManagerModules.sops + inputs.nix-index-database.hmModules.nix-index + ] ++ (builtins.attrValues outputs.homeManagerModules); + } + ] else [ + "${self}/profiles/darwin/nixos/common" + inputs.home-manager.darwinModules.home-manager + { + home-manager.users."leon.schwarzaeugl".imports = [ + "${self}/profiles/darwin/home" + ] ++ (builtins.attrValues outputs.homeManagerModules); + } + ]) ++ (builtins.attrValues outputs.nixosModules) ++ (builtins.attrValues outputs.homeManagerModules) + )); }; }; @@ -40,11 +78,12 @@ let systemFunc = if (type == "home") then inputs.home-manager.lib.homeManagerConfiguration else inputs.nix-on-droid.lib.nixOnDroidConfiguration; in - systemFunc { - inherit pkgs; - extraSpecialArgs = { inherit inputs outputs lib self; }; - modules = [ "${self}/hosts/${type}/${host}" ]; - }; + systemFunc + { + inherit pkgs; + extraSpecialArgs = { inherit inputs outputs lib self; }; + modules = [ "${self}/hosts/${type}/${host}" ]; + }; }; mkFullHostConfigs = hosts: type: lib.foldl (acc: set: acc // set) { } (lib.map (host: lib.swarselsystems.mkFullHost host type) hosts); diff --git a/modules/home/wallpaper.nix b/modules/home/wallpaper.nix index 99e4c11..b08ab8c 100644 --- a/modules/home/wallpaper.nix +++ b/modules/home/wallpaper.nix @@ -1,7 +1,7 @@ -{ lib, ... }: +{ self, lib, ... }: { options.swarselsystems.wallpaper = lib.mkOption { type = lib.types.path; - default = ""; + default = self + /wallpaper/lenovowp.png; }; } diff --git a/profiles/home/common/symlink.nix b/profiles/home/common/symlink.nix index 71bec26..e842f9e 100644 --- a/profiles/home/common/symlink.nix +++ b/profiles/home/common/symlink.nix @@ -1,7 +1,7 @@ -{ self, ... }: +{ self, lib, ... }: { home.file = { - "init.el" = { + "init.el" = lib.mkDefault { source = self + /programs/emacs/init.el; target = ".emacs.d/init.el"; }; diff --git a/profiles/home/server/symlink.nix b/profiles/home/server/symlink.nix index 0ddf9f6..ae15c8f 100644 --- a/profiles/home/server/symlink.nix +++ b/profiles/home/server/symlink.nix @@ -1,7 +1,7 @@ -{ self, ... }: +{ self, lib, ... }: { home.file = { - "init.el" = { + "init.el" = lib.mkForce { source = self + /programs/emacs/server.el; target = ".emacs.d/init.el"; }; diff --git a/profiles/nixos/common/syncthing.nix b/profiles/nixos/common/syncthing.nix index 780e109..83eaf4d 100644 --- a/profiles/nixos/common/syncthing.nix +++ b/profiles/nixos/common/syncthing.nix @@ -1,4 +1,4 @@ -_: +{ lib, ... }: { services.syncthing = { enable = true; @@ -19,7 +19,7 @@ _: }; }; folders = { - "Default Folder" = { + "Default Folder" = lib.mkDefault { path = "/home/swarsel/Sync"; devices = [ "sync (@oracle)" "magicant" "winters" ]; id = "default"; diff --git a/profiles/nixos/server/syncthing.nix b/profiles/nixos/server/syncthing.nix index 29be453..633afed 100644 --- a/profiles/nixos/server/syncthing.nix +++ b/profiles/nixos/server/syncthing.nix @@ -32,7 +32,7 @@ }; }; folders = { - "Default Folder" = { + "Default Folder" = lib.mkForce { path = "/Vault/data/syncthing/Sync"; type = "receiveonly"; versioning = null; diff --git a/templates/hosts/nixos/default.nix b/templates/hosts/nixos/default.nix index 45c846d..0a722ab 100644 --- a/templates/hosts/nixos/default.nix +++ b/templates/hosts/nixos/default.nix @@ -1,4 +1,4 @@ -{ self, inputs, outputs, config, pkgs, lib, ... }: +{ self, inputs, pkgs, lib, ... }: let profilesPath = "${self}/profiles"; sharedOptions = { @@ -7,7 +7,7 @@ let in { - imports = outputs.nixModules ++ [ + imports = [ # ---- nixos-hardware here ---- ./hardware-configuration.nix @@ -21,19 +21,11 @@ in inputs.home-manager.nixosModules.home-manager { - home-manager.users.swarsel.imports = outputs.mixedModules ++ [ + home-manager.users.swarsel.imports = [ "${profilesPath}/home/optional/gaming.nix" - ] ++ (builtins.attrValues outputs.homeManagerModules); + ]; } - ] ++ (builtins.attrValues outputs.nixosModules); - - - nixpkgs = { - overlays = [ outputs.overlays.default ]; - config = { - allowUnfree = true; - }; - }; + ]; boot = { kernelPackages = lib.mkDefault pkgs.linuxPackages_latest;