diff --git a/flake.lock b/flake.lock index 25195d7..ca7bfc6 100755 --- a/flake.lock +++ b/flake.lock @@ -16,6 +16,23 @@ "type": "github" } }, + "brew-src": { + "flake": false, + "locked": { + "lastModified": 1718075954, + "narHash": "sha256-4TeUhv5VLEufP+Z/NkKnUk4NUaf59cMsj6NvsVbE+8w=", + "owner": "Homebrew", + "repo": "brew", + "rev": "3f08c75e7b950d4340dab462f3e7f77e8093fa2b", + "type": "github" + }, + "original": { + "owner": "Homebrew", + "ref": "4.3.5", + "repo": "brew", + "type": "github" + } + }, "catppuccin": { "locked": { "lastModified": 1721784420, @@ -125,6 +142,24 @@ "type": "github" } }, + "flake-utils_3": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "flakey-profile": { "locked": { "lastModified": 1712898590, @@ -182,6 +217,38 @@ "type": "github" } }, + "homebrew-cask": { + "flake": false, + "locked": { + "lastModified": 1722851290, + "narHash": "sha256-AKG4PyxskEEsbkutZUEMbeToOaX9cPusp61mkOgOwX4=", + "owner": "homebrew", + "repo": "homebrew-cask", + "rev": "812e3ae0f3c750120b131d8b80ae13c8ae3d7f4e", + "type": "github" + }, + "original": { + "owner": "homebrew", + "repo": "homebrew-cask", + "type": "github" + } + }, + "homebrew-core": { + "flake": false, + "locked": { + "lastModified": 1722848547, + "narHash": "sha256-QtfYus4K58sqtXiYXgd+WL67geNuD7bFriXHCwe6H2g=", + "owner": "homebrew", + "repo": "homebrew-core", + "rev": "5024945b7225d78c56b0482c503f8a20371d5eff", + "type": "github" + }, + "original": { + "owner": "homebrew", + "repo": "homebrew-core", + "type": "github" + } + }, "lanzaboote": { "inputs": { "crane": "crane", @@ -244,22 +311,78 @@ "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.90.0.tar.gz" } }, - "nixpkgs": { + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, "locked": { - "lastModified": 1722421184, - "narHash": "sha256-/DJBI6trCeVnasdjUo9pbnodCLZcFqnVZiLUfqLH4jA=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "9f918d616c5321ad374ae6cb5ea89c9e04bf3e58", + "lastModified": 1722609272, + "narHash": "sha256-Kkb+ULEHVmk07AX+OhwyofFxBDpw+2WvsXguUS2m6e4=", + "owner": "LnL7", + "repo": "nix-darwin", + "rev": "f7142b8024d6b70c66fd646e1d099d3aa5bfec49", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", + "owner": "LnL7", + "repo": "nix-darwin", "type": "github" } }, + "nix-darwin_2": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1716329735, + "narHash": "sha256-ap51w+VqG21vuzyQ04WrhI2YbWHd3UGz0e7dc/QQmoA=", + "owner": "LnL7", + "repo": "nix-darwin", + "rev": "eac4f25028c1975a939c8f8fba95c12f8a25e01c", + "type": "github" + }, + "original": { + "owner": "LnL7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nix-homebrew": { + "inputs": { + "brew-src": "brew-src", + "flake-utils": "flake-utils_3", + "nix-darwin": "nix-darwin_2", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1719720211, + "narHash": "sha256-FNK5ZxmNC+V/wOuioc5HqkUy0ld4eW3NqcsZHLYg9HI=", + "owner": "zhaofengli-wip", + "repo": "nix-homebrew", + "rev": "0afc51fd86693c73e4b60be8ed8c782c4c09b4cc", + "type": "github" + }, + "original": { + "owner": "zhaofengli-wip", + "repo": "nix-homebrew", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1687274257, + "narHash": "sha256-TutzPriQcZ8FghDhEolnHcYU2oHIG5XWF+/SUBNnAOE=", + "path": "/nix/store/22qgs3skscd9bmrxv9xv4q5d4wwm5ppx-source", + "rev": "2c9ecd1f0400076a4d6b2193ad468ff0a7e7fdc5", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, "nixpkgs-stable": { "locked": { "lastModified": 1710695816, @@ -276,6 +399,38 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1716330097, + "narHash": "sha256-8BO3B7e3BiyIDsaKA0tY8O88rClYRTjvAp66y+VBUeU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5710852ba686cc1fd0d3b8e22b3117d43ba374c2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1722421184, + "narHash": "sha256-/DJBI6trCeVnasdjUo9pbnodCLZcFqnVZiLUfqLH4jA=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "9f918d616c5321ad374ae6cb5ea89c9e04bf3e58", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "pre-commit-hooks-nix": { "inputs": { "flake-compat": [ @@ -308,9 +463,13 @@ "bleedingpkgs": "bleedingpkgs", "catppuccin": "catppuccin", "home-manager": "home-manager", + "homebrew-cask": "homebrew-cask", + "homebrew-core": "homebrew-core", "lanzaboote": "lanzaboote", "lix-module": "lix-module", - "nixpkgs": "nixpkgs", + "nix-darwin": "nix-darwin", + "nix-homebrew": "nix-homebrew", + "nixpkgs": "nixpkgs_3", "stablepkgs": "stablepkgs" } }, @@ -384,6 +543,21 @@ "repo": "default", "type": "github" } + }, + "systems_3": { + "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 836d087..942a7bd 100755 --- a/flake.nix +++ b/flake.nix @@ -9,6 +9,17 @@ }; stablepkgs.url = "github:nixos/nixpkgs/nixos-24.05"; bleedingpkgs.url = "github:nixos/nixpkgs/master"; + nix-darwin.url = "github:LnL7/nix-darwin"; + nix-darwin.inputs.nixpkgs.follows = "nixpkgs"; + nix-homebrew.url = "github:zhaofengli-wip/nix-homebrew"; + homebrew-core = { + url = "github:homebrew/homebrew-core"; + flake = false; + }; + homebrew-cask = { + url = "github:homebrew/homebrew-cask"; + flake = false; + }; catppuccin.url = "github:catppuccin/nix"; lanzaboote = { url = "github:nix-community/lanzaboote/v0.4.1"; @@ -24,7 +35,7 @@ }; outputs = { self, nixpkgs, home-manager, catppuccin, lanzaboote, stablepkgs - , bleedingpkgs, lix-module, ... }@inputs: { + , bleedingpkgs, lix-module, nix-darwin, nix-homebrew, ... }@inputs: rec { formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt; nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; @@ -37,6 +48,7 @@ ./modules/nixos/nvidia.nix ./modules/nixos/networking.nix ./modules/common/fonts.nix + ./machines/nixos/hardware-configuration.nix catppuccin.nixosModules.catppuccin @@ -51,15 +63,41 @@ home-manager.backupFileExtension = "backup"; home-manager.users.youwen = { imports = [ - ./home.nix + ./modules/home-manager/linux/linux-home.nix ./modules/home-manager/linux/desktop.nix ./modules/home-manager/linux/programs.nix ./modules/home-manager/common/core.nix + ./modules/home-manager/linux/catppuccin.nix inputs.catppuccin.homeManagerModules.catppuccin ]; }; } ]; }; + formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.nixfmt; + # Build darwin flake using: + # $ darwin-rebuild build --flake .#Youwens-MacBook-Pro + darwinConfigurations."Youwens-MacBook-Pro" = nix-darwin.lib.darwinSystem { + specialArgs = { inherit inputs; }; + modules = [ + ./modules/darwin/darwin-configuration.nix + home-manager.darwinModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.youwen.imports = [ + ./modules/home-manager/darwin/darwin-home.nix + ./modules/home-manager/common/core.nix + ]; + home-manager.backupFileExtension = "backup"; + + # Optionally, use home-manager.extraSpecialArgs to pass + # arguments to home.nix + } + nix-homebrew.darwinModules.nix-homebrew + ./modules/darwin/homebrew.nix + ./modules/darwin/yabai.nix + ]; + }; }; } diff --git a/hardware-configuration.nix b/machines/nixos/hardware-configuration.nix similarity index 100% rename from hardware-configuration.nix rename to machines/nixos/hardware-configuration.nix diff --git a/modules/common/fonts.nix b/modules/common/fonts.nix index ee59e1f..4cf26d2 100644 --- a/modules/common/fonts.nix +++ b/modules/common/fonts.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{ pkgs, ... }: { fonts = { enableDefaultPackages = true; fontconfig = { diff --git a/modules/darwin/darwin-configuration.nix b/modules/darwin/darwin-configuration.nix index e84f8ca..7f1633b 100644 --- a/modules/darwin/darwin-configuration.nix +++ b/modules/darwin/darwin-configuration.nix @@ -1,4 +1,7 @@ -{ config, pkgs, ... }: { +{ inputs, config, pkgs, ... }: { + # Expose the package set, including overlays, for convenience. + # darwinPackages = inputs.self.darwinConfigurations."Youwens-MacBook-Pro".pkgs; + # List packages installed in system profile. To search by name, run: # $ nix-env -qaP | grep wget environment.systemPackages = with pkgs; [ ]; @@ -36,4 +39,14 @@ }; security.pam.enableSudoTouchIdAuth = true; + + fonts = { + packages = with pkgs; [ + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + (nerdfonts.override { fonts = [ "CascadiaCode" ]; }) + (google-fonts.override { fonts = [ "Lora" ]; }) + ]; + }; } diff --git a/modules/darwin/homebrew.nix b/modules/darwin/homebrew.nix new file mode 100644 index 0000000..e3ec0b6 --- /dev/null +++ b/modules/darwin/homebrew.nix @@ -0,0 +1,14 @@ +{ inputs, ... }: { + nix-homebrew = { + enable = true; + enableRosetta = true; + user = "youwen"; + + taps = { + "homebrew/homebrew-core" = inputs.homebrew-core; + "homebrew/homebrew-cask" = inputs.homebrew-cask; + }; + + mutableTaps = false; + }; +} diff --git a/modules/darwin/yabai.nix b/modules/darwin/yabai.nix new file mode 100644 index 0000000..dae736f --- /dev/null +++ b/modules/darwin/yabai.nix @@ -0,0 +1,30 @@ +{ config, pkgs, ... }: { + services.yabai = { + enable = true; + enableScriptingAddition = true; + config = { + focus_follows_mouse = "autoraise"; + mouse_follows_focus = "on"; + window_placement = "second_child"; + window_opacity = "off"; + top_padding = 12; + bottom_padding = 12; + left_padding = 12; + right_padding = 12; + window_gap = 10; + split_ratio = 0.5; + split_type = "auto"; + layout = "bsp"; + mouse_modifier = "fn"; + mouse_action1 = "move"; + mouse_action2 = "resize"; + mouse_drop_action = "swap"; + }; + }; + services.skhd = { enable = true; }; + services.jankyborders = { + enable = true; + hidpi = true; + }; +} + diff --git a/modules/home-manager/common/core.nix b/modules/home-manager/common/core.nix index 9f9463c..aaee8f8 100644 --- a/modules/home-manager/common/core.nix +++ b/modules/home-manager/common/core.nix @@ -1,7 +1,6 @@ -{ pkgs, ... }: -{ - programs.bash.enable = true; - programs.nushell = { +{ pkgs, ... }: { + programs.bash.enable = pkgs.lib.mkDefault true; + programs.nushell = pkgs.lib.mkDefault { enable = true; configFile.text = '' $env.config = { @@ -11,12 +10,9 @@ ''; }; - programs.fzf = { - enable = true; - catppuccin.enable = true; - }; + programs.fzf = pkgs.lib.mkDefault { enable = true; }; - programs.git = { + programs.git = pkgs.lib.mkDefault { enable = true; userName = "Youwen Wu"; userEmail = "youwenw@gmail.com"; @@ -28,10 +24,8 @@ }; }; - programs.lazygit = { + programs.lazygit = pkgs.lib.mkDefault { enable = true; - catppuccin.enable = true; - catppuccin.flavor = "macchiato"; settings = { git.paging = { colorArg = "always"; @@ -40,32 +34,28 @@ }; }; - programs.bat.enable = true; - programs.bat.catppuccin = { - enable = true; - flavor = "macchiato"; - }; + programs.bat.enable = pkgs.lib.mkDefault true; - programs.ripgrep.enable = true; + programs.ripgrep.enable = pkgs.lib.mkDefault true; programs.readline = { enable = true; extraConfig = "set editing-mode vi"; }; - programs.zoxide = { + programs.zoxide = pkgs.lib.mkDefault { enable = true; # enableZshIntegration = true; enableFishIntegration = true; enableNushellIntegration = true; }; - programs.gh = { + programs.gh = pkgs.lib.mkDefault { enable = true; extensions = [ pkgs.github-copilot-cli ]; }; - programs.oh-my-posh = { + programs.oh-my-posh = pkgs.lib.mkDefault { enable = true; # enableZshIntegration = true; enableFishIntegration = true; @@ -75,8 +65,6 @@ programs.fish = pkgs.lib.mkDefault { enable = true; - catppuccin.enable = true; - catppuccin.flavor = "mocha"; shellAliases = { rebuild = "sudo nixos-rebuild switch"; ls = "eza -l --icons=auto"; @@ -136,10 +124,9 @@ ]; }; + programs.fd.enable = pkgs.lib.mkDefault true; - programs.fd.enable = true; - - programs.btop = { + programs.btop = pkgs.lib.mkDefault { enable = true; settings = { color_theme = "tokyo-night"; @@ -148,13 +135,13 @@ }; }; - programs.eza = { + programs.eza = pkgs.lib.mkDefault { enable = true; enableFishIntegration = true; enableBashIntegration = true; }; - programs.neovim = { + programs.neovim = pkgs.lib.mkDefault { enable = true; defaultEditor = true; viAlias = true; diff --git a/modules/home-manager/darwin/darwin-home.nix b/modules/home-manager/darwin/darwin-home.nix new file mode 100644 index 0000000..12383fc --- /dev/null +++ b/modules/home-manager/darwin/darwin-home.nix @@ -0,0 +1,70 @@ +{ inputs, config, pkgs, ... }: + +{ + home.username = "youwen"; + home.homeDirectory = "/Users/youwen"; + + # link the configuration file in current directory to the specified location in home directory + # home.file.".config/i3/wallpaper.jpg".source = ./wallpaper.jpg; + + # link all files in `./scripts` to `~/.config/i3/scripts` + # home.file.".config/i3/scripts" = { + # source = ./scripts; + # recursive = true; # link recursively + # executable = true; # make all files executable + # }; + + # encode the file content in nix configuration file directly + # home.file.".xxx".text = '' + # xxx + # ''; + + home.file.".config/neofetch/config.conf".source = + ../../../config/neofetch.conf; + + # Packages that should be installed to the user profile. + home.packages = with pkgs; [ + neofetch + + # archives + zip + xz + unzip + p7zip + + # utils + nurl # helps fetch git data for nixpkgs + + # nix related + # + # it provides the command `nom` works just like `nix` + # with more details log output + nix-output-monitor + + # dev tools + nodePackages_latest.pnpm + rustfmt + rust-analyzer + ]; + + programs.git.extraConfig.commit.gpgsign = "false"; + + programs.oh-my-posh.enableZshIntegration = true; + + programs.bash.enable = true; + programs.zsh.enable = true; + + # This value determines the home Manager release that your + # configuration is compatible with. This helps avoid breakage + # when a new home Manager release introduces backwards + # incompatible changes. + home.stateVersion = "24.05"; + # + # You can update home Manager without changing this value. See + # the home Manager release notes for a list of state version + # changes in each release. + + # Let home Manager install and manage itself. + programs.home-manager.enable = true; + +} diff --git a/modules/home-manager/linux/catppuccin.nix b/modules/home-manager/linux/catppuccin.nix new file mode 100644 index 0000000..4e08a2f --- /dev/null +++ b/modules/home-manager/linux/catppuccin.nix @@ -0,0 +1,18 @@ +{ + programs.fzf.catppuccin = { + enable = true; + flavor = "macchiato"; + }; + programs.lazygit.catppuccin = { + enable = true; + flavor = "macchiato"; + }; + programs.bat.catppuccin = { + enable = true; + flavor = "macchiato"; + }; + programs.fish.catppuccin = { + enable = true; + flavor = "mocha"; + }; +} diff --git a/modules/home-manager/linux/desktop.nix b/modules/home-manager/linux/desktop.nix index 0959914..2839ea3 100644 --- a/modules/home-manager/linux/desktop.nix +++ b/modules/home-manager/linux/desktop.nix @@ -1,5 +1,4 @@ -{ pkgs, ...}: -{ +{ pkgs, ... }: { wayland.windowManager.hyprland = import ./hyprland-conf.nix; # Audio effects and EQ tool diff --git a/home.nix b/modules/home-manager/linux/linux-home.nix similarity index 94% rename from home.nix rename to modules/home-manager/linux/linux-home.nix index d320401..f5798d6 100755 --- a/home.nix +++ b/modules/home-manager/linux/linux-home.nix @@ -19,9 +19,10 @@ # xxx # ''; - home.file.".config/neofetch/config.conf".source = ./config/neofetch.conf; + home.file.".config/neofetch/config.conf".source = + ../../../config/neofetch.conf; home.file.".wallpapers" = { - source = ./wallpapers; + source = ../../../wallpapers; recursive = true; }; diff --git a/modules/nixos/nixos-configuration.nix b/modules/nixos/nixos-configuration.nix index cf2b50b..a36a326 100755 --- a/modules/nixos/nixos-configuration.nix +++ b/modules/nixos/nixos-configuration.nix @@ -5,9 +5,9 @@ { config, inputs, pkgs, ... }: { - imports = [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; + # imports = [ # Include the results of the hardware scan. + # ./hardware-configuration.nix + # ]; # Bootloader. boot.loader = { @@ -80,7 +80,6 @@ # Enable CUPS to print documents. services.printing.enable = true; - # Enable touchpad support (enabled default in most desktopManager). # services.xserver.libinput.enable = true; diff --git a/modules/nixos/nvidia.nix b/modules/nixos/nvidia.nix index 779d5e9..789fb5f 100644 --- a/modules/nixos/nvidia.nix +++ b/modules/nixos/nvidia.nix @@ -1,5 +1,4 @@ -{ config, ... }: -{ +{ config, ... }: { hardware.nvidia = { modesetting.enable = true; powerManagement.enable = true; diff --git a/modules/nixos/secureboot.nix b/modules/nixos/secureboot.nix index 61ce5c5..c5ccbac 100644 --- a/modules/nixos/secureboot.nix +++ b/modules/nixos/secureboot.nix @@ -1,17 +1,17 @@ - ({ pkgs, lib, ... }: { - environment.systemPackages = [ - # For debugging and troubleshooting Secure Boot. - pkgs.sbctl - ]; +({ pkgs, lib, ... }: { + environment.systemPackages = [ + # For debugging and troubleshooting Secure Boot. + pkgs.sbctl + ]; - # Lanzaboote currently replaces the systemd-boot module. - # This setting is usually set to true in configuration.nix - # generated at installation time. So we force it to false - # for now. - boot.loader.systemd-boot.enable = lib.mkForce false; + # Lanzaboote currently replaces the systemd-boot module. + # This setting is usually set to true in configuration.nix + # generated at installation time. So we force it to false + # for now. + boot.loader.systemd-boot.enable = lib.mkForce false; - boot.lanzaboote = { - enable = true; - pkiBundle = "/etc/secureboot"; - }; - }) + boot.lanzaboote = { + enable = true; + pkiBundle = "/etc/secureboot"; + }; +})