diff --git a/flake.lock b/flake.lock index 54a342c..25731c6 100644 --- a/flake.lock +++ b/flake.lock @@ -251,6 +251,26 @@ "type": "github" } }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715653378, + "narHash": "sha256-6kbg/PI3+SBP17f4T0js3CBsMLVtlD0JqJhDKgzk1mQ=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "de8b0d60d6fd34f35abffc46adc94ebaa6996ce2", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1715534503, @@ -286,6 +306,7 @@ "hardware": "hardware", "home-manager": "home-manager", "impermanence": "impermanence", + "nix-darwin": "nix-darwin", "nixpkgs": "nixpkgs", "stylix": "stylix" } diff --git a/flake.nix b/flake.nix index 646c11d..be354c0 100644 --- a/flake.nix +++ b/flake.nix @@ -11,6 +11,9 @@ disko.url = "github:nix-community/disko"; disko.inputs.nixpkgs.follows = "nixpkgs"; + nix-darwin.url = "github:lnl7/nix-darwin"; + nix-darwin.inputs.nixpkgs.follows = "nixpkgs"; + home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; diff --git a/modules/darwin/default.nix b/modules/darwin/default.nix new file mode 100644 index 0000000..25c3b7f --- /dev/null +++ b/modules/darwin/default.nix @@ -0,0 +1,4 @@ +{ + home-manager = import ./home-manager; + nix-daemon = import ./nix-daemon; +} diff --git a/modules/darwin/home-manager/default.nix b/modules/darwin/home-manager/default.nix new file mode 100644 index 0000000..4884b32 --- /dev/null +++ b/modules/darwin/home-manager/default.nix @@ -0,0 +1,33 @@ +{ + inputs, + outputs, + lib, + config, + system, + ... +}: let + inherit (inputs.home-manager.darwinModules) home-manager; + inherit (lib) mkIf mkOption types; + + cfg = config.sysc.home-manager; +in { + imports = [home-manager]; + + options.sysc.home-manager = { + enable = mkOption { + type = types.bool; + default = true; + description = "Whether to enable home-manager."; + }; + }; + + config = mkIf cfg.enable { + home-manager = { + users.bddvlpr = import ./users/bddvlpr.nix; + extraSpecialArgs = { + inherit inputs outputs system; + nixosConfig = config; + }; + }; + }; +} diff --git a/modules/darwin/home-manager/users/bddvlpr.nix b/modules/darwin/home-manager/users/bddvlpr.nix new file mode 100644 index 0000000..b192644 --- /dev/null +++ b/modules/darwin/home-manager/users/bddvlpr.nix @@ -0,0 +1,12 @@ +{outputs, ...}: { + imports = with outputs.homeManagerModules; [ + dev + fish + git + gpg + helix + zsh + ]; + + home.stateVersion = "24.05"; +} diff --git a/modules/darwin/nix-daemon/default.nix b/modules/darwin/nix-daemon/default.nix new file mode 100644 index 0000000..0152116 --- /dev/null +++ b/modules/darwin/nix-daemon/default.nix @@ -0,0 +1,3 @@ +{ + services.nix-daemon.enable = true; +} diff --git a/modules/home/default.nix b/modules/home/default.nix index d69e3a0..ee961b7 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -1,5 +1,7 @@ { + dev = import ./dev; firefox = import ./firefox; + fish = import ./fish; git = import ./git; gpg = import ./gpg; helix = import ./helix; @@ -9,4 +11,5 @@ stylix = import ./stylix; waybar = import ./waybar; wofi = import ./wofi; + zsh = import ./zsh; } diff --git a/modules/home/dev/default.nix b/modules/home/dev/default.nix new file mode 100644 index 0000000..3bcacd4 --- /dev/null +++ b/modules/home/dev/default.nix @@ -0,0 +1,3 @@ +{pkgs, ...}: { + home.packages = with pkgs; [nodejs] ++ (with nodePackages; [yarn pnpm]); +} \ No newline at end of file diff --git a/modules/shared/fish/default.nix b/modules/home/fish/default.nix similarity index 64% rename from modules/shared/fish/default.nix rename to modules/home/fish/default.nix index 1b7f65b..d56b149 100644 --- a/modules/shared/fish/default.nix +++ b/modules/home/fish/default.nix @@ -2,11 +2,20 @@ lib, pkgs, ... -}: { +}: let + inherit (lib.strings) hasSuffix; + + isDarwin = hasSuffix "-darwin" pkgs.system; +in { programs.fish = { enable = true; - shellAbbrs = { + shellAbbrs = let + build-command = + if isDarwin + then "darwin-rebuild --flake ." + else "sudo nixos-rebuild --flake /etc/nixos"; + in { n = "nix"; nb = "nix build"; nbn = "nix build nixpkgs#"; @@ -18,8 +27,8 @@ ns = "nix shell"; nsn = "nix shell nixpkgs#"; - snr = "sudo nixos-rebuild --flake /etc/nixos"; - snrs = "sudo nixos-rebuild --flake /etc/nixos switch"; + snr = "${build-command} --flake /etc/nixos"; + snrs = "${build-command} switch"; }; shellAliases = let diff --git a/modules/home/helix/default.nix b/modules/home/helix/default.nix index 1b9f391..b6a2a97 100644 --- a/modules/home/helix/default.nix +++ b/modules/home/helix/default.nix @@ -1,7 +1,34 @@ -{ +{pkgs, ...} @ args: { programs.helix = { enable = true; + languages = import ./languages.nix args; + defaultEditor = true; + extraPackages = with pkgs; + [ + buf-language-server + docker-compose-language-service + gleam + gopls + haskell-language-server + helm-ls + kotlin-language-server + lldb + marksman + netcoredbg + nil + omnisharp-roslyn + rust-analyzer + taplo + terraform-ls + texlab + yaml-language-server + zls + ] + ++ (with nodePackages; [ + svelte-language-server + vscode-langservers-extracted + ]); }; } diff --git a/modules/home/helix/languages.nix b/modules/home/helix/languages.nix new file mode 100644 index 0000000..7bb818d --- /dev/null +++ b/modules/home/helix/languages.nix @@ -0,0 +1,58 @@ +{ + lib, + pkgs, + ... +}: let + inherit (lib) getExe; + inherit (pkgs) alejandra; + inherit (pkgs.nodePackages) prettier; + + mkPrettier = { + name, + parser ? name, + plugin ? null, + }: { + inherit name; + auto-format = true; + formatter = { + command = getExe prettier; + args = + [ + "--parser" + parser + ] + ++ ( + if plugin != null + then ["--plugin" plugin] + else [] + ); + }; + }; +in { + language = [ + (mkPrettier {name = "html";}) + (mkPrettier {name = "json";}) + (mkPrettier {name = "css";}) + (mkPrettier {name = "typescript";}) + (mkPrettier { + name = "javascript"; + parser = "typescript"; + }) + (mkPrettier { + name = "tsx"; + parser = "typescript"; + }) + (mkPrettier { + name = "svelte"; + parser = "typescript"; + plugin = "prettier-plugin-svelte"; + }) + { + name = "nix"; + auto-format = true; + formatter = { + command = getExe alejandra; + }; + } + ]; +} diff --git a/modules/home/zsh/default.nix b/modules/home/zsh/default.nix new file mode 100644 index 0000000..0be2188 --- /dev/null +++ b/modules/home/zsh/default.nix @@ -0,0 +1,38 @@ +{ + lib, + pkgs, + ... +}: let + inherit (lib.strings) hasSuffix; + + isDarwin = hasSuffix "-darwin" pkgs.system; +in { + programs.zsh = { + enable = true; + + shellAliases = let + inherit (lib) getExe; + + build-command = + if isDarwin + then "darwin-rebuild --flake ." + else "sudo nixos-rebuild --flake /etc/nixos"; + in { + n = "nix"; + nb = "nix build"; + nbn = "nix build nixpkgs#"; + nf = "nix flake"; + nfu = "nix flake update"; + nfmt = "nix fmt"; + nr = "nix run"; + nrn = "nix run nixpkgs#"; + ns = "nix shell"; + nsn = "nix shell nixpkgs#"; + + snr = "${build-command} --flake /etc/nixos"; + snrs = "${build-command} switch"; + + cat = "${getExe pkgs.bat} -pp --theme=base16"; + }; + }; +} diff --git a/modules/module.nix b/modules/module.nix index 97085fd..8dd7541 100644 --- a/modules/module.nix +++ b/modules/module.nix @@ -1,5 +1,6 @@ { flake = { + darwinModules = import ./darwin; homeManagerModules = import ./home; nixosModules = import ./nixos; sharedModules = import ./shared; diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 0db348e..d7c6971 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -4,6 +4,7 @@ general = import ./general; gpg-agent = import ./gpg-agent; hardware = import ./hardware; + home-manager = import ./home-manager; impermanence = import ./impermanence; networking = import ./networking; sudo = import ./sudo; diff --git a/modules/shared/home-manager/default.nix b/modules/nixos/home-manager/default.nix similarity index 93% rename from modules/shared/home-manager/default.nix rename to modules/nixos/home-manager/default.nix index 551a6da..a305bde 100644 --- a/modules/shared/home-manager/default.nix +++ b/modules/nixos/home-manager/default.nix @@ -11,7 +11,6 @@ cfg = config.sysc.home-manager; in { - # TODO: Interchangable with darwinModules. imports = [home-manager]; options.sysc.home-manager = { diff --git a/modules/shared/home-manager/users/bddvlpr.nix b/modules/nixos/home-manager/users/bddvlpr.nix similarity index 100% rename from modules/shared/home-manager/users/bddvlpr.nix rename to modules/nixos/home-manager/users/bddvlpr.nix diff --git a/modules/shared/default.nix b/modules/shared/default.nix index 396e4a9..92dd2f3 100644 --- a/modules/shared/default.nix +++ b/modules/shared/default.nix @@ -1,6 +1,5 @@ { - fish = import ./fish; - home-manager = import ./home-manager; nix = import ./nix; + shells = import ./shells; users-bddvlpr = import ./users/bddvlpr.nix; } diff --git a/modules/shared/shells/default.nix b/modules/shared/shells/default.nix new file mode 100644 index 0000000..a219478 --- /dev/null +++ b/modules/shared/shells/default.nix @@ -0,0 +1,6 @@ +{ + programs = { + fish.enable = true; + zsh.enable = true; + }; +} diff --git a/modules/shared/users/bddvlpr.nix b/modules/shared/users/bddvlpr.nix index ec57441..a5037c3 100644 --- a/modules/shared/users/bddvlpr.nix +++ b/modules/shared/users/bddvlpr.nix @@ -1,8 +1,25 @@ -{pkgs, ...}: { - users.users.bddvlpr = { - isNormalUser = true; - shell = pkgs.fish; - extraGroups = ["wheel" "audio" "video" "networkmanager"]; - hashedPassword = "$y$j9T$loVbb4dcOYqZmhAC3NScI1$NmvBmCrmuybhIhaM25x6.X2AgFKkvk9Upfr8GyqCA.3"; - }; +{ + lib, + pkgs, + system, + ... +}: let + inherit (lib) mkIf mkMerge; + inherit (lib.strings) hasSuffix; + + isDarwin = hasSuffix "-darwin" pkgs.system; +in { + users.users.bddvlpr = mkMerge [ + { + shell = pkgs.fish; + } + (mkIf (!isDarwin) { + isNormalUser = true; + extraGroups = ["wheel" "audio" "video" "networkmanager"]; + hashedPassword = "$y$j9T$loVbb4dcOYqZmhAC3NScI1$NmvBmCrmuybhIhaM25x6.X2AgFKkvk9Upfr8GyqCA.3"; + }) + (mkIf isDarwin { + home = "/Users/bddvlpr"; + }) + ]; } diff --git a/systems/apollo/default.nix b/systems/apollo/default.nix new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/systems/apollo/default.nix @@ -0,0 +1,2 @@ +{ +} diff --git a/systems/module.nix b/systems/module.nix index 0c90a88..af351ce 100644 --- a/systems/module.nix +++ b/systems/module.nix @@ -14,7 +14,7 @@ config.allowUnfree = true; }; - mkSystem = host: system: + mkNixOS = host: system: withSystem system ({pkgs, ...}: { "${host}" = nixosSystem { inherit system; @@ -29,9 +29,30 @@ ++ builtins.attrValues outputs.sharedModules; }; }); + + mkDarwin = host: system: + withSystem system ({pkgs, ...}: { + "${host}" = inputs.nix-darwin.lib.darwinSystem { + inherit system; + pkgs = mkPkgs system; + specialArgs = {inherit inputs outputs host;}; + modules = + [ + ./${host} + ] + ++ builtins.attrValues outputs.darwinModules + ++ builtins.attrValues outputs.sharedModules; + }; + }); in { - flake.nixosConfigurations = lib.mkMerge [ - (mkSystem "dissension" "x86_64-linux") - (mkSystem "solaris" "x86_64-linux") - ]; + flake = { + nixosConfigurations = lib.mkMerge [ + (mkNixOS "dissension" "x86_64-linux") + (mkNixOS "solaris" "x86_64-linux") + ]; + + darwinConfigurations = lib.mkMerge [ + (mkDarwin "apollo" "aarch64-darwin") + ]; + }; }