From 0aa6d354feacc5da8b68e973ff2bba79aec79fc7 Mon Sep 17 00:00:00 2001 From: Sebastian Di Luzio Date: Wed, 1 Apr 2026 16:22:58 +0200 Subject: [PATCH] refactor: platform specifics (#100) --- README.md | 3 - flake.nix | 78 +++++++++----------- home-manager/default.nix | 8 +- home-manager/development/shared.nix | 11 ++- home-manager/integrations/darwin/default.nix | 4 +- home-manager/integrations/nixos/default.nix | 4 +- home-manager/personal/default.nix | 5 +- sops/darwin.nix | 4 +- sops/nixos.nix | 4 +- 9 files changed, 50 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index 0178ef1..89c57d5 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ the nixos config for my PC, laptops, and whatever else I can find ## General Config Overview The unified flake provides a `mkSystem` function. The hostname is automatically derived from the attribute name. It accepts: - `username`: The primary user's username -- `platform`: Either `"darwin"` or `"nixos"` - `isWorkDevice`: If `true`, work-only apps and no personal/sops (default: `false`, i.e. personal device) ## General Commands @@ -22,7 +21,6 @@ Edit `flake.nix` and add a new configuration. The hostname is automatically deri darwinConfigurations = nixpkgs.lib.mapAttrs mkSystem { "new-hostname" = { username = "your-username"; - platform = "darwin"; # isWorkDevice = true; # only for work machines (no personal apps/sops) }; }; @@ -31,7 +29,6 @@ darwinConfigurations = nixpkgs.lib.mapAttrs mkSystem { nixosConfigurations = nixpkgs.lib.mapAttrs mkSystem { "new-hostname" = { username = "your-username"; - platform = "nixos"; }; }; ``` diff --git a/flake.nix b/flake.nix index bfaa0c2..fdb1b2c 100644 --- a/flake.nix +++ b/flake.nix @@ -38,13 +38,12 @@ hostname: { username, - platform, + system, isWorkDevice, gitConfig ? { }, }: let - # Determine system architecture - system = if platform == "darwin" then "aarch64-darwin" else "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; # Common configuration shared across all systems commonConfig = @@ -68,7 +67,7 @@ { pkgs, config, ... }: { users.users.${username} = - if platform == "darwin" then + if pkgs.stdenv.isDarwin then { name = username; home = "/Users/${username}"; @@ -90,24 +89,13 @@ }; }; - # Home-manager configuration - homeManagerConfig = import ./home-manager { - inherit - username - platform - isWorkDevice - gitConfig - ; - }; - in - if platform == "darwin" then + if pkgs.stdenv.isDarwin then nix-darwin.lib.darwinSystem { inherit system; specialArgs = { inherit username - platform isWorkDevice gitConfig ; @@ -115,7 +103,7 @@ modules = [ commonConfig userConfig - homeManagerConfig + ./home-manager home-manager.darwinModules.home-manager sops-nix.darwinModules.sops ./sops @@ -138,7 +126,6 @@ xmage system username - platform isWorkDevice gitConfig hostname @@ -147,7 +134,7 @@ modules = [ commonConfig userConfig - homeManagerConfig + ./home-manager home-manager.nixosModules.home-manager sops-nix.nixosModules.sops ./sops @@ -160,33 +147,36 @@ }; in { - darwinConfigurations = nixpkgs.lib.mapAttrs mkSystem { - # Personal MacBook Pro - "Big-M1ac" = { - username = "basti"; - platform = "darwin"; - isWorkDevice = false; - }; + darwinConfigurations = + nixpkgs.lib.mapAttrs + (hostname: cfg: mkSystem hostname (cfg // { system = cfg.system or "aarch64-darwin"; })) + { + # Personal MacBook Pro + "Big-M1ac" = { + username = "basti"; + isWorkDevice = false; + }; - # Work MacBook Pro @liqid - "MacBook-Pro-MBP-L1682" = { - username = "sebastiandiluzio"; - platform = "darwin"; - isWorkDevice = true; - gitConfig = { - email = "sebastian.diluzio@liqid.de"; - sign = false; + # Work MacBook Pro @liqid + "MacBook-Pro-MBP-L1682" = { + username = "sebastiandiluzio"; + isWorkDevice = true; + gitConfig = { + email = "sebastian.diluzio@liqid.de"; + sign = false; + }; + }; }; - }; - }; - nixosConfigurations = nixpkgs.lib.mapAttrs mkSystem { - # Personal gaming PC - "nixos" = { - username = "basti"; - platform = "nixos"; - isWorkDevice = false; - }; - }; + nixosConfigurations = + nixpkgs.lib.mapAttrs + (hostname: cfg: mkSystem hostname (cfg // { system = cfg.system or "x86_64-linux"; })) + { + # Personal gaming PC + "nixos" = { + username = "basti"; + isWorkDevice = false; + }; + }; }; } diff --git a/home-manager/default.nix b/home-manager/default.nix index 5486974..83cc2fc 100644 --- a/home-manager/default.nix +++ b/home-manager/default.nix @@ -1,14 +1,8 @@ { username, - platform, isWorkDevice, gitConfig, -}: - -{ - config, pkgs, - lib, ... }: @@ -33,8 +27,8 @@ in home-manager.extraSpecialArgs = { inherit username - platform isWorkDevice + pkgs gitConfig ; }; diff --git a/home-manager/development/shared.nix b/home-manager/development/shared.nix index 6c47966..197a5bd 100644 --- a/home-manager/development/shared.nix +++ b/home-manager/development/shared.nix @@ -2,7 +2,6 @@ { pkgs, lib, - platform, username, gitConfig, ... @@ -20,14 +19,14 @@ let nixosPackages = with pkgs; - lib.optionals (platform == "nixos") [ + lib.optionals (stdenv.isLinux) [ github-desktop # Needs to be installed using brew on darwin kubernetes ]; darwinPackages = with pkgs; - lib.optionals (platform == "darwin") [ + lib.optionals (stdenv.isDarwin) [ stats # macOS only package https://github.com/exelban/stats mise # dynamic executables wont work on nixos orbstack @@ -94,7 +93,7 @@ in "git" "git-auto-fetch" ] - ++ lib.optionals (platform == "darwin") [ + ++ lib.optionals (pkgs.stdenv.isDarwin) [ "mise" "brew" ]; @@ -109,11 +108,11 @@ in ff = "fastfetch"; neofetch = "fastfetch"; } - // lib.optionalAttrs (platform == "nixos") { + // lib.optionalAttrs (pkgs.stdenv.isLinux) { rb = "sudo nixos-rebuild switch"; rbb = "sudo nixos-rebuild build"; } - // lib.optionalAttrs (platform == "darwin") { + // lib.optionalAttrs (pkgs.stdenv.isDarwin) { rb = "sudo darwin-rebuild switch"; rbb = "sudo darwin-rebuild build"; }; diff --git a/home-manager/integrations/darwin/default.nix b/home-manager/integrations/darwin/default.nix index 37e7736..2393729 100644 --- a/home-manager/integrations/darwin/default.nix +++ b/home-manager/integrations/darwin/default.nix @@ -1,7 +1,7 @@ # Darwin-only Home Manager integrations. -{ lib, platform, ... }: +{ lib, pkgs, ... }: { - imports = lib.optionals (platform == "darwin") [ + imports = lib.optionals (pkgs.stdenv.isDarwin) [ ./nas-mount.nix ]; } diff --git a/home-manager/integrations/nixos/default.nix b/home-manager/integrations/nixos/default.nix index 3470552..424adca 100644 --- a/home-manager/integrations/nixos/default.nix +++ b/home-manager/integrations/nixos/default.nix @@ -1,7 +1,7 @@ # NixOS-only Home Manager integrations (user-level, after login). -{ lib, platform, ... }: +{ lib, pkgs, ... }: { - imports = lib.optionals (platform == "nixos") [ + imports = lib.optionals (pkgs.stdenv.isLinux) [ ./immich-screenshot-upload.nix ]; } diff --git a/home-manager/personal/default.nix b/home-manager/personal/default.nix index cda9e46..9a0469a 100644 --- a/home-manager/personal/default.nix +++ b/home-manager/personal/default.nix @@ -3,7 +3,6 @@ pkgs, lib, osConfig, - platform, isWorkDevice, ... }: @@ -13,7 +12,7 @@ let nixosPersonal = with pkgs; - lib.optionals (platform == "nixos") [ + lib.optionals (stdenv.isLinux) [ immich-cli bitwarden-desktop discord @@ -30,7 +29,7 @@ let darwinPersonal = with pkgs; - lib.optionals (platform == "darwin") [ + lib.optionals (stdenv.isDarwin) [ # TODO add supported apps here ]; diff --git a/sops/darwin.nix b/sops/darwin.nix index 4f66924..5402c78 100644 --- a/sops/darwin.nix +++ b/sops/darwin.nix @@ -1,4 +1,4 @@ -{ lib, platform, ... }: -lib.mkIf (platform == "darwin") { +{ lib, pkgs, ... }: +lib.mkIf (pkgs.stdenv.isDarwin) { sops.defaultSopsFile = ./secrets/darwin.yaml; } diff --git a/sops/nixos.nix b/sops/nixos.nix index 8d1a2eb..9f886c1 100644 --- a/sops/nixos.nix +++ b/sops/nixos.nix @@ -2,13 +2,13 @@ config, username, lib, - platform, + pkgs, ... }: let user = config.users.users.${username}; in -lib.mkIf (platform == "nixos") { +lib.mkIf (pkgs.stdenv.isLinux) { sops.defaultSopsFile = ./secrets/nixos.yaml; # In theory, allow yubikey support for sops decrypt during build, but it doesn't work -- 2.51.2