diff --git a/flake.lock b/flake.lock index 1d294ff..16fea12 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1765682243, - "narHash": "sha256-yeCxFV/905Wr91yKt5zrVvK6O2CVXWRMSrxqlAZnLp0=", + "lastModified": 1766682973, + "narHash": "sha256-GKO35onS711ThCxwWcfuvbIBKXwriahGqs+WZuJ3v9E=", "owner": "nix-community", "repo": "home-manager", - "rev": "58bf3ecb2d0bba7bdf363fc8a6c4d49b4d509d03", + "rev": "91cdb0e2d574c64fae80d221f4bf09d5592e9ec2", "type": "github" }, "original": { @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1765684049, - "narHash": "sha256-svCS2r984qEowMT0y3kCrsD/m0J6zaF5I/UusS7QaH0=", + "lastModified": 1766784396, + "narHash": "sha256-rIlgatT0JtwxsEpzq+UrrIJCRfVAXgbYPzose1DmAcM=", "owner": "LnL7", "repo": "nix-darwin", - "rev": "9b628e171bfaea1a3d1edf31eee46251e0fe4a33", + "rev": "f0c8e1f6feb562b5db09cee9fb566a2f989e6b55", "type": "github" }, "original": { @@ -42,11 +42,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1765644376, - "narHash": "sha256-yqHBL2wYGwjGL2GUF2w3tofWl8qO9tZEuI4wSqbCrtE=", + "lastModified": 1766747458, + "narHash": "sha256-m63jjuo/ygo8ztkCziYh5OOIbTSXUDkKbqw3Vuqu4a4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "23735a82a828372c4ef92c660864e82fbe2f5fbe", + "rev": "c633f572eded8c4f3c75b8010129854ed404a6ce", "type": "github" }, "original": { @@ -74,11 +74,11 @@ ] }, "locked": { - "lastModified": 1765895443, - "narHash": "sha256-yftYGV0skUwV5neT1BJrs7RRbXPKozQTzC7d9c7kEFs=", + "lastModified": 1766697593, + "narHash": "sha256-mGZBEN67mxeOsBhplBRLm6L+y++8jU46EEUYgemG1aQ=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "bc7dfff92cb7919dfb213ea78c11ea0a4d265a56", + "rev": "98d8f48ba80a4b6e3b56addad850d57132301075", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 911cf7d..11ba94d 100644 --- a/flake.nix +++ b/flake.nix @@ -28,88 +28,103 @@ }; }; - outputs = { - self, - nixpkgs, - home-manager, - nix-darwin, - ... - } @ inputs: let - # Default username - can be overridden per-host if needed - username = "alice"; + outputs = + { + self, + nixpkgs, + home-manager, + nix-darwin, + ... + }@inputs: + let + # Default username - can be overridden per-host if needed + username = "alice"; - # Common special args passed to all modules - specialArgs = {inherit inputs username;}; - in { - # Darwin (macOS) system configurations - darwinConfigurations = { - # Personal machine configuration - "personal" = nix-darwin.lib.darwinSystem { - system = "aarch64-darwin"; - inherit specialArgs; - modules = [ - # Host-specific darwin configuration - ./hosts/personal - - # Home Manager as a darwin module - home-manager.darwinModules.home-manager - { - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - extraSpecialArgs = specialArgs; - users.${username} = {...}: { - imports = [ - ./home - ./home/personal.nix - ]; - }; - }; - } - ]; - }; - - # Work machine configuration - "work" = nix-darwin.lib.darwinSystem { - system = "aarch64-darwin"; - inherit specialArgs; - modules = [ - # Host-specific darwin configuration - ./hosts/work - - # Home Manager as a darwin module - home-manager.darwinModules.home-manager - { - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - extraSpecialArgs = specialArgs; - users.${username} = {...}: { - imports = [ - ./home - ./home/work.nix - ]; - }; - }; - } - ]; - }; - }; - - # Development shell for working on this repository - devShells = let - systems = ["aarch64-darwin" "x86_64-darwin"]; - forAllSystems = nixpkgs.lib.genAttrs systems; + # Common special args passed to all modules + specialArgs = { inherit inputs username; }; in - forAllSystems (system: let - pkgs = nixpkgs.legacyPackages.${system}; - in { - default = pkgs.mkShell { - packages = with pkgs; [ - nixfmt-rfc-style - nil # Nix LSP + { + # Darwin (macOS) system configurations + darwinConfigurations = { + # Personal machine configuration + "personal" = nix-darwin.lib.darwinSystem { + system = "aarch64-darwin"; + inherit specialArgs; + modules = [ + # Host-specific darwin configuration + ./hosts/personal + + # Home Manager as a darwin module + home-manager.darwinModules.home-manager + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = specialArgs; + users.${username} = + { ... }: + { + imports = [ + ./home + ./home/personal.nix + ]; + }; + }; + } ]; }; - }); - }; + + # Work machine configuration + "work" = nix-darwin.lib.darwinSystem { + system = "aarch64-darwin"; + inherit specialArgs; + modules = [ + # Host-specific darwin configuration + ./hosts/work + + # Home Manager as a darwin module + home-manager.darwinModules.home-manager + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = specialArgs; + users.${username} = + { ... }: + { + imports = [ + ./home + ./home/work.nix + ]; + }; + }; + } + ]; + }; + }; + + # Development shell for working on this repository + devShells = + let + systems = [ + "aarch64-darwin" + "x86_64-darwin" + ]; + forAllSystems = nixpkgs.lib.genAttrs systems; + in + forAllSystems ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + default = pkgs.mkShell { + packages = with pkgs; [ + nixfmt-rfc-style + nil # Nix LSP + ]; + }; + } + ); + }; } diff --git a/home/default.nix b/home/default.nix index 7e3cb83..b111bd7 100644 --- a/home/default.nix +++ b/home/default.nix @@ -9,7 +9,8 @@ username, inputs, ... -}: { +}: +{ # Import shared modules imports = [ inputs.zen-browser.homeModules.beta @@ -32,7 +33,7 @@ home = { # Home Manager needs a bit of information about you and the paths it should manage - username = username; + inherit username; homeDirectory = "/Users/${username}"; # This value determines the Home Manager release that your configuration is diff --git a/home/personal.nix b/home/personal.nix index 182e469..4299be1 100644 --- a/home/personal.nix +++ b/home/personal.nix @@ -7,7 +7,8 @@ pkgs, lib, ... -}: { +}: +{ # Import personal-specific modules imports = [ ../modules/home/git.nix diff --git a/home/work.nix b/home/work.nix index 47cc798..94fb94b 100644 --- a/home/work.nix +++ b/home/work.nix @@ -7,7 +7,8 @@ pkgs, lib, ... -}: { +}: +{ # Import work-specific modules imports = [ ../modules/home/git.nix diff --git a/hosts/personal/default.nix b/hosts/personal/default.nix index a117d8d..9d112a7 100644 --- a/hosts/personal/default.nix +++ b/hosts/personal/default.nix @@ -8,14 +8,14 @@ lib, username, ... -}: { +}: +{ # Import darwin modules imports = [ ../../modules/darwin/system.nix ../../modules/darwin/homebrew.nix ]; - # System-level programs programs = { # Enable zsh as it's the default macOS shell diff --git a/hosts/work/default.nix b/hosts/work/default.nix index 0e4805b..738a55c 100644 --- a/hosts/work/default.nix +++ b/hosts/work/default.nix @@ -8,7 +8,8 @@ lib, username, ... -}: { +}: +{ # Import darwin modules imports = [ ../../modules/darwin/system.nix diff --git a/modules/darwin/homebrew.nix b/modules/darwin/homebrew.nix index dff651f..6f2abd7 100644 --- a/modules/darwin/homebrew.nix +++ b/modules/darwin/homebrew.nix @@ -9,9 +9,11 @@ pkgs, ... }: -with lib; let +with lib; +let cfg = config.modules.homebrew; -in { +in +{ options.modules.homebrew = { enable = mkEnableOption "Homebrew management via nix-darwin"; @@ -127,7 +129,11 @@ in { # Cleanup behavior cleanup = mkOption { - type = types.enum ["none" "uninstall" "zap"]; + type = types.enum [ + "none" + "uninstall" + "zap" + ]; default = "zap"; description = '' Cleanup behavior for Homebrew packages: @@ -150,7 +156,7 @@ in { # Upgrade outdated packages upgrade = true; # Cleanup behavior for unmanaged packages - cleanup = cfg.cleanup; + inherit (cfg) cleanup; }; # Global settings @@ -162,26 +168,18 @@ in { }; # Taps (third-party repositories) - taps = cfg.taps; + inherit (cfg) taps; # Formulae (CLI tools from Homebrew) - brews = cfg.brews; + inherit (cfg) brews; caskArgs.no_quarantine = true; # Casks (GUI applications) casks = cfg.casks.shared - ++ ( - if cfg.casks.enablePersonal - then cfg.casks.personal - else [] - ) - ++ ( - if cfg.casks.enableWork - then cfg.casks.work - else [] - ); + ++ (if cfg.casks.enablePersonal then cfg.casks.personal else [ ]) + ++ (if cfg.casks.enableWork then cfg.casks.work else [ ]); }; }; } diff --git a/modules/darwin/system.nix b/modules/darwin/system.nix index b4290a2..2f48568 100644 --- a/modules/darwin/system.nix +++ b/modules/darwin/system.nix @@ -5,12 +5,16 @@ lib, username, ... -}: { +}: +{ # Nix configuration nix = { settings = { # Enable flakes and new nix command - experimental-features = ["nix-command" "flakes"]; + experimental-features = [ + "nix-command" + "flakes" + ]; # Avoid unwanted garbage collection when using nix-direnv keep-outputs = true; keep-derivations = true; @@ -35,7 +39,6 @@ DisableConsoleAccess = true; }; - dock = { autohide = true; autohide-delay = 0.0; diff --git a/modules/home/apps.nix b/modules/home/apps.nix index 446f96d..2a238b8 100644 --- a/modules/home/apps.nix +++ b/modules/home/apps.nix @@ -7,9 +7,11 @@ pkgs, lib, ... -}: let +}: +let cfg = config.modules.apps; -in { +in +{ options.modules.apps = { enable = lib.mkEnableOption "application configurations"; @@ -29,7 +31,6 @@ in { }; }; - jellyfin-tui = { enable = lib.mkOption { type = lib.types.bool; @@ -66,38 +67,42 @@ in { config = lib.mkIf cfg.enable { programs.zen-browser = lib.mkIf cfg.zen-browser.enable { enable = true; - policies = let - mkExtensionSettings = builtins.mapAttrs (_: pluginId: { - install_url = "https://addons.mozilla.org/firefox/downloads/latest/${pluginId}/latest.xpi"; - installation_mode = "force_installed"; - }); - in { - AutofillAddressEnabled = true; - AutofillCreditCardEnabled = false; - DisableAppUpdate = true; - DisableFeedbackCommands = true; - DisableFirefoxStudies = true; - DisablePocket = true; - DisableTelemetry = true; - DontCheckDefaultBrowser = true; - NoDefaultBookmarks = true; - OfferToSaveLogins = false; - EnableTrackingProtection = { - Value = true; - Locked = true; - Cryptomining = true; - Fingerprinting = true; - }; + policies = + let + mkExtensionSettings = builtins.mapAttrs ( + _: pluginId: { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/${pluginId}/latest.xpi"; + installation_mode = "force_installed"; + } + ); + in + { + AutofillAddressEnabled = true; + AutofillCreditCardEnabled = false; + DisableAppUpdate = true; + DisableFeedbackCommands = true; + DisableFirefoxStudies = true; + DisablePocket = true; + DisableTelemetry = true; + DontCheckDefaultBrowser = true; + NoDefaultBookmarks = true; + OfferToSaveLogins = false; + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; - ExtensionSettings = mkExtensionSettings { - #"78272b6fa58f4a1abaac99321d503a20@proton.me" = "proton-pass"; - "{446900e4-71c2-419f-a6a7-df9c091e268b}" = "bitwarden-password-manager"; - "{d7742d87-e61d-4b78-b8a1-b469842139fa}" = "vimium-ff"; - "readeck@readeck.com" = "readeck"; - "@testpilot-containers" = "multi-account-containers"; - "uBlock0@raymondhill.net" = "ublock-origin"; + ExtensionSettings = mkExtensionSettings { + #"78272b6fa58f4a1abaac99321d503a20@proton.me" = "proton-pass"; + "{446900e4-71c2-419f-a6a7-df9c091e268b}" = "bitwarden-password-manager"; + "{d7742d87-e61d-4b78-b8a1-b469842139fa}" = "vimium-ff"; + "readeck@readeck.com" = "readeck"; + "@testpilot-containers" = "multi-account-containers"; + "uBlock0@raymondhill.net" = "ublock-origin"; + }; }; - }; }; # Aerospace window manager configuration (macOS) diff --git a/modules/home/git-files.nix b/modules/home/git-files.nix index 5e4c3d4..41877c4 100644 --- a/modules/home/git-files.nix +++ b/modules/home/git-files.nix @@ -13,34 +13,42 @@ lib, ... }: -with lib; let +with lib; +let cfg = config.modules.gitFiles; # Helper function to generate gitconfig content - mkGitConfig = { - email, - signingKey, - urlRewrites ? {}, - }: '' - [user] - email = ${email} - name = Morten Olsen - signingkey = ${signingKey} + mkGitConfig = + { + email, + signingKey, + urlRewrites ? { }, + }: + '' + [user] + email = ${email} + name = Morten Olsen + signingkey = ${signingKey} - [commit] - gpgsign = true + [commit] + gpgsign = true - [gpg] - format = ssh + [gpg] + format = ssh - [gpg "ssh"] - program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign" - ${optionalString (urlRewrites != {}) (concatStringsSep "\n" (mapAttrsToList (name: value: '' + [gpg "ssh"] + program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign" + ${optionalString (urlRewrites != { }) ( + concatStringsSep "\n" ( + mapAttrsToList (name: value: '' - [url "${name}"] - insteadOf = ${value}'') urlRewrites))} - ''; -in { + [url "${name}"] + insteadOf = ${value}'') urlRewrites + ) + )} + ''; +in +{ options.modules.gitFiles = { enable = mkEnableOption "Project-specific git configuration files"; @@ -102,8 +110,8 @@ in { # Used on personal machine for all projects under ~/Projects/ (mkIf cfg.personal.enable { "Projects/.gitconfig".text = mkGitConfig { - email = cfg.personal.email; - signingKey = cfg.personal.signingKey; + inherit (cfg.personal) email; + inherit (cfg.personal) signingKey; urlRewrites = { "ssh://git@ssh-gitea.olsen.cloud:2205/" = "https://gitea.olsen.cloud/"; "git@github-private:" = "https://github.com/"; @@ -115,8 +123,8 @@ in { # Used on work machine for personal projects under ~/Projects/private/ (mkIf cfg.private.enable { "Projects/private/.gitconfig".text = mkGitConfig { - email = cfg.private.email; - signingKey = cfg.private.signingKey; + inherit (cfg.private) email; + inherit (cfg.private) signingKey; urlRewrites = { "ssh://git@ssh-gitea.olsen.cloud:2205/" = "https://gitea.olsen.cloud/"; "git@github-private:" = "https://github.com/"; @@ -128,8 +136,8 @@ in { # Used on work machine for work projects under ~/Projects/zeronorth/ (mkIf cfg.zeronorth.enable { "Projects/zeronorth/.gitconfig".text = mkGitConfig { - email = cfg.zeronorth.email; - signingKey = cfg.zeronorth.signingKey; + inherit (cfg.zeronorth) email; + inherit (cfg.zeronorth) signingKey; urlRewrites = { "git@github-zeronorth:" = "https://github.com/"; }; diff --git a/modules/home/git.nix b/modules/home/git.nix index b8fe3fe..740a08a 100644 --- a/modules/home/git.nix +++ b/modules/home/git.nix @@ -11,9 +11,11 @@ lib, ... }: -with lib; let +with lib; +let cfg = config.modules.git; -in { +in +{ options.modules.git = { enable = mkEnableOption "Git configuration"; @@ -36,21 +38,23 @@ in { }; includes = mkOption { - type = types.listOf (types.submodule { - options = { - condition = mkOption { - type = types.str; - description = "The includeIf condition (e.g., gitdir:~/Projects/)"; - example = "gitdir:~/Projects/"; + type = types.listOf ( + types.submodule { + options = { + condition = mkOption { + type = types.str; + description = "The includeIf condition (e.g., gitdir:~/Projects/)"; + example = "gitdir:~/Projects/"; + }; + path = mkOption { + type = types.str; + description = "Path to the included gitconfig file"; + example = "~/Projects/.gitconfig"; + }; }; - path = mkOption { - type = types.str; - description = "Path to the included gitconfig file"; - example = "~/Projects/.gitconfig"; - }; - }; - }); - default = []; + } + ); + default = [ ]; description = "List of conditional includes for project-specific git configurations"; }; }; @@ -88,8 +92,8 @@ in { # Conditional includes for project-specific configurations includes = map (inc: { - condition = inc.condition; - path = inc.path; + inherit (inc) condition; + inherit (inc) path; }) cfg.includes; # All git settings using the new unified settings option @@ -171,4 +175,4 @@ in { }; }; }; -} \ No newline at end of file +} diff --git a/modules/home/packages.nix b/modules/home/packages.nix index 4ea953b..030a671 100644 --- a/modules/home/packages.nix +++ b/modules/home/packages.nix @@ -9,7 +9,8 @@ pkgs, lib, ... -}: { +}: +{ home.packages = with pkgs; [ # ======================================================================== # Shell Tools @@ -27,7 +28,7 @@ ripgrep # Modern grep (aliased as grep) delta # Modern diff with syntax highlighting (aliased as diff) dust # A more intuitive version of du written in rust - duf # A better df alternative + duf # A better df alternative hyperfine # A command-line benchmarking tool. choose # A human-friendly and fast alternative to cut and (sometimes) awk coreutils @@ -88,7 +89,7 @@ k9s # Kubernetes TUI istioctl # Istio service mesh CLI fluxcd # GitOps toolkit - popeye # + popeye argocd kubeseal kubebuilder diff --git a/modules/home/shell.nix b/modules/home/shell.nix index 9b5da50..31e338a 100644 --- a/modules/home/shell.nix +++ b/modules/home/shell.nix @@ -13,7 +13,8 @@ pkgs, lib, ... -}: { +}: +{ # ========================================================================== # Zsh Configuration # ========================================================================== @@ -279,7 +280,7 @@ enable = true; # The config.nu can be anywhere you want if you like to edit your Nushell with Nu # configFile.source = ./.../config.nu; - # for editing directly to config.nu + # for editing directly to config.nu extraConfig = '' let carapace_completer = {|spans| carapace $spans.0 nushell ...$spans | from json @@ -304,13 +305,13 @@ split row (char esep) | append /usr/bin/env ) - ''; + ''; shellAliases = { vi = "hx"; vim = "hx"; nano = "hx"; }; - }; + }; programs.carapace = { enable = true; enableNushellIntegration = true; diff --git a/modules/home/ssh.nix b/modules/home/ssh.nix index 86e2715..5de4bc3 100644 --- a/modules/home/ssh.nix +++ b/modules/home/ssh.nix @@ -8,9 +8,11 @@ lib, ... }: -with lib; let +with lib; +let cfg = config.modules.ssh; -in { +in +{ options.modules.ssh = { enable = mkEnableOption "SSH configuration"; @@ -65,7 +67,7 @@ in { enableDefaultConfig = false; # Include colima SSH config for container access - includes = ["~/.colima/ssh_config"]; + includes = [ "~/.colima/ssh_config" ]; # 1Password SSH agent integration (macOS) extraConfig = '' @@ -119,7 +121,7 @@ in { identityFile = cfg.githubZeronorthKeyPath; identitiesOnly = true; }; - + # Docker server "docker.host" = { hostname = "docker.olsen.cloud"; @@ -128,7 +130,7 @@ in { identityFile = cfg.githubPrivateKeyPath; identitiesOnly = true; }; - + # NAS server "nas.host" = { hostname = "192.168.20.106"; @@ -137,7 +139,7 @@ in { identityFile = cfg.githubPrivateKeyPath; identitiesOnly = true; }; - + # Private MacBook "macbook.host" = { hostname = "192.168.3.9"; @@ -146,7 +148,7 @@ in { identityFile = cfg.githubPrivateKeyPath; identitiesOnly = true; }; - + # ZN MacBook "zn.host" = { hostname = "192.168.3.3"; diff --git a/modules/home/tmux.nix b/modules/home/tmux.nix index b996496..358bab5 100644 --- a/modules/home/tmux.nix +++ b/modules/home/tmux.nix @@ -7,7 +7,8 @@ pkgs, lib, ... -}: { +}: +{ programs.tmux = { enable = true; @@ -116,6 +117,8 @@ # Utils - lazygit popup bind -r g display-popup -d '#{pane_current_path}' -w80% -h80% -E lazygit + bind -r o display-popup -d '#{pane_current_path}' -w80% -h80% -E yazi + bind -r p display-popup -d '#{pane_current_path}' -w80% -h80% -E $SHELL ''; }; -} \ No newline at end of file +}