diff --git a/darwin/shimmer/configuration.nix b/darwin/shimmer/configuration.nix deleted file mode 100644 index 3e37128..0000000 --- a/darwin/shimmer/configuration.nix +++ /dev/null @@ -1,105 +0,0 @@ -{ - config, - lib, - inputs, - pkgs, - ... -}: { - imports = [./homebrew.nix ./wm.nix ../../modules/nixpkgs.nix]; - - nixpkgs.hostPlatform = "aarch64-darwin"; - - # Nix setup - nix.distributedBuilds = true; - - nix.gc = { - automatic = true; - options = "--delete-older-than 7d"; - interval.Weekday = 6; - }; - - nix.optimise.automatic = true; - - nix.settings = { - builders-use-substitutes = true; - experimental-features = "nix-command flakes"; - trusted-users = ["root" "ovy"]; - }; - - environment.systemPackages = with pkgs; [ - ffmpeg-full - git - imagemagick - nil - obsidian - openssh - wget - # TODO: the Xcode packages makes us manually download and put it into the Nix store - # but it seems to contain no reference to our actual result so I don't think `systemPackages` - # picks it up properly. Need to see how `requireFile` works and how `systemPackages` - # works under the hood. - # darwin.xcode_14_1 - ]; - - programs.bash.enable = true; - programs.zsh.enable = true; - programs.fish.enable = true; - - # Fix problem in nix-darwin relating to $PATH order in fish. - # https://github.com/LnL7/nix-darwin/issues/122#issuecomment-1659465635 - programs.fish.loginShellInit = let - dquote = str: "\"${str}\""; - makeBinPathList = map (path: path + "/bin"); - in '' - fish_add_path --move --prepend --path ${lib.concatMapStringsSep " " dquote (makeBinPathList config.environment.profiles)} - set fish_user_paths $fish_user_paths - fish_add_path /opt/homebrew/bin - alias tailscale /Applications/Tailscale.app/Contents/MacOS/Tailscale - ''; - - nix.buildMachines = [ - { - hostName = "rushing.axolotl-map.ts.net"; - sshUser = "colmena-deploy"; - system = "x86_64-linux"; - speedFactor = 2; - maxJobs = 6; - protocol = "ssh-ng"; - } - { - hostName = "skyline.axolotl-map.ts.net"; - sshUser = "colmena-deploy"; - system = "aarch64-linux"; - speedFactor = 1; - maxJobs = 2; - protocol = "ssh-ng"; - } - ]; - - # nix-darwin - system.configurationRevision = inputs.self.rev or inputs.self.dirtyRev or null; - # Used for backwards compatibility, please read the changelog before changing. - # $ darwin-rebuild changelog - system.stateVersion = 4; - - system.defaults.NSGlobalDomain.AppleShowAllExtensions = true; - system.defaults.finder.ShowPathbar = true; - system.defaults.menuExtraClock.Show24Hour = true; - system.defaults.trackpad.Dragging = true; - - # Dock settings - system.defaults.dock = { - autohide = false; - magnification = false; - minimize-to-application = false; - mru-spaces = false; - orientation = "bottom"; - show-recents = false; - tilesize = 48; - }; - - fonts.packages = with pkgs; [ - inter - inputs.iosevka-solai.packages.aarch64-darwin.bin - ]; -} diff --git a/darwin/shimmer/wm.nix b/darwin/shimmer/wm.nix deleted file mode 100644 index a104119..0000000 --- a/darwin/shimmer/wm.nix +++ /dev/null @@ -1,89 +0,0 @@ -{lib, ...}: { - services.yabai = { - enable = true; - config = let - gap = 10; - gapKeys = [ - "window_gap" - "top_padding" - "bottom_padding" - "left_padding" - "right_padding" - ]; - - gaps = builtins.listToAttrs ( - builtins.map (k: lib.attrsets.nameValuePair k gap) gapKeys - ); - in - { - layout = "bsp"; - window_placement = "second_child"; - } - // gaps; - extraConfig = '' - yabai -m rule --add app="Bitwarden" manage=off - yabai -m rule --add app="Discord" manage=off - yabai -m rule --add app="^Finder$" manage=off - yabai -m rule --add app="Keka" manage=off - yabai -m rule --add app="^System Information$" manage=off - yabai -m rule --add app="^System Preferences$" manage=off - yabai -m rule --add app="^System Settings$" manage=off - yabai -m rule --add title="Preferences$" manage=off - yabai -m rule --add title="^Archive Utility$" manage=off - yabai -m rule --add title="Settings$" manage=off - yabai -m rule --add title="Karabiner" manage=off - yabai -m rule --add title="^Weather$" manage=off - yabai -m rule --add title="Yubico Authenticator" manage=off - yabai -m rule --add app="Rewind" manage=off - yabai -m rule --add app="eqMac" manage=off - yabai -m rule --add app="^Arc$" manage=off - yabai -m rule --add app="OBS" manage=off - yabai -m rule --add app="Raycast" manage=off - ''; - }; - - services.skhd = { - enable = true; - skhdConfig = '' - # Move/swap windows - meh - w : yabai -m window --swap north - meh - a : yabai -m window --swap west - meh - r : yabai -m window --swap south - meh - s : yabai -m window --swap east - - hyper - w : yabai -m window --warp north - hyper - a : yabai -m window --warp west - hyper - r : yabai -m window --warp south - hyper - s : yabai -m window --warp east - - # Focus windows - ralt + rcmd - w : yabai -m window --focus north - ralt + rcmd - a : yabai -m window --focus west - ralt + rcmd - r : yabai -m window --focus south - ralt + rcmd - s : yabai -m window --focus east - - # Increase window size - meh - n : yabai -m window --resize left:-100:0 - meh - e : yabai -m window --resize bottom:0:100 - meh - i : yabai -m window --resize top:0:-100 - meh - o : yabai -m window --resize right:100:0 - - # Decrease window size - hyper - n : yabai -m window --resize right:-100:0 - hyper - e : yabai -m window --resize top:0:100 - hyper - i : yabai -m window --resize bottom:0:-100 - hyper - o : yabai -m window --resize left:100:0 - - # Expand floating window to fill screen - # (full stop) - meh - 0x2F : yabai -m window --grid 1:1:0:0:1:1 - - meh - p : yabai -m window --toggle float; \ - yabai -m window --grid 4:4:1:1:2:2 - - # Rebalance grid - # (backtick) - hyper - 0x32 : yabai -m space --balance - ''; - }; -} diff --git a/flake.lock b/flake.lock index 14be3d6..61cafa8 100644 --- a/flake.lock +++ b/flake.lock @@ -9,14 +9,15 @@ "nixpkgs": [ "nixpkgs" ], + "nixpkgs-lib": "nixpkgs-lib", "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1749374482, - "narHash": "sha256-IAyAgmxZ+8YUPkyxn6gvCUZiV93dX6oLmcOOCSU9We4=", + "lastModified": 1749889036, + "narHash": "sha256-sLj+y810h3a02G/b5pj6J9Uj1fWw3xGgl6LkCLr5UQw=", "owner": "yunfachi", "repo": "denix", - "rev": "5a27d210ee6ff79375731a515810a02c6bb8b0d4", + "rev": "9f6b0cb1c5bfb1bed685b9d953b2a9779ccaa3a0", "type": "github" }, "original": { @@ -139,11 +140,11 @@ ] }, "locked": { - "lastModified": 1749526396, - "narHash": "sha256-UL9F76abAk87llXOrcQRjhd5OaOclUd6MIltsqcUZmo=", + "lastModified": 1750304462, + "narHash": "sha256-Mj5t4yX05/rXnRqJkpoLZTWqgStB88Mr/fegTRqyiWc=", "owner": "nix-community", "repo": "home-manager", - "rev": "427c96044f11a5da50faf6adaf38c9fa47e6d044", + "rev": "863842639722dd12ae9e37ca83bcb61a63b36f6c", "type": "github" }, "original": { @@ -201,7 +202,7 @@ "narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=", "rev": "f19bd752910bbe3a861c9cad269bd078689d50fe", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz?rev=f19bd752910bbe3a861c9cad269bd078689d50fe" + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz" }, "original": { "type": "tarball", @@ -220,11 +221,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1749533158, - "narHash": "sha256-wIw3Q/Ls1nsLjBN4VsAiTMHZiyf5RGRVy2MWfyYPgMI=", + "lastModified": 1750339466, + "narHash": "sha256-lX8iwxjvubzEwSR2THa4HgwN6e+9ZZUs4dyAEMds33g=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "e5c4564ec3704f5e358f50d883b5200c4e8dfd7e", + "rev": "c7a546d233748e8af0b5747b9130f49d06fdf871", "type": "github" }, "original": { @@ -236,16 +237,16 @@ "niri-stable": { "flake": false, "locked": { - "lastModified": 1740117926, - "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=", + "lastModified": 1748151941, + "narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=", "owner": "YaLTeR", "repo": "niri", - "rev": "b94a5db8790339cf9134873d8b490be69e02ac71", + "rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7", "type": "github" }, "original": { "owner": "YaLTeR", - "ref": "v25.02", + "ref": "v25.05.1", "repo": "niri", "type": "github" } @@ -253,11 +254,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1749474820, - "narHash": "sha256-hf5eCZ0bbqwOKPvPKn8Rutwj+xs3GhAfB0AjGa8tIEM=", + "lastModified": 1750334747, + "narHash": "sha256-nsD1Z6vVP2Hhdgrd0uYHacre2+NhaH/53TFRXn6pRcs=", "owner": "YaLTeR", "repo": "niri", - "rev": "a18d24fc24d8b17242e336ccf39fcbe91e8161fd", + "rev": "e0b0b04b445f7044f383e50104f861e632e1c905", "type": "github" }, "original": { @@ -294,11 +295,11 @@ ] }, "locked": { - "lastModified": 1749194393, - "narHash": "sha256-vt6hM9DNywnXXuW1qPDLzECmbDcmxhh58wpb0EEQjAo=", + "lastModified": 1750325256, + "narHash": "sha256-vvlxGz/waqJ3TGqM/iqXbnEc7/R1qnEXmaBiPaQ1RE0=", "owner": "LnL7", "repo": "nix-darwin", - "rev": "19346808c445f23b08652971be198b9df6c33edc", + "rev": "0d71cbf88d63e938b37b85b3bf8b238bcf7b39b9", "type": "github" }, "original": { @@ -314,11 +315,11 @@ ] }, "locked": { - "lastModified": 1749355504, - "narHash": "sha256-L17CdJMD+/FCBOHjREQLXbe2VUnc3rjffenBbu2Kwpc=", + "lastModified": 1749960154, + "narHash": "sha256-EWlr9MZDd+GoGtZB4QsDzaLyaDQPGnRY03MFp6u2wSg=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "40a6e15e44b11fbf8f2b1df9d64dbfc117625e94", + "rev": "424a40050cdc5f494ec45e46462d288f08c64475", "type": "github" }, "original": { @@ -330,14 +331,14 @@ "nix-vscode-extensions": { "inputs": { "flake-utils": "flake-utils_3", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1749521131, - "narHash": "sha256-ezZ15tLA2L+rmtn39dKLFW/UM2xlksC61V12blulpjE=", + "lastModified": 1750298804, + "narHash": "sha256-GEp1QwoQ7qQPYuOm5cGb3f5FZSlVwbw86KUrHlLbI2E=", "owner": "nix-community", "repo": "nix-vscode-extensions", - "rev": "299b2aa650d32310153746135b6a84a6c4de9c21", + "rev": "7b962ab252cecf0b88ae621e1986899e20a4ead3", "type": "github" }, "original": { @@ -348,27 +349,42 @@ }, "nixpkgs": { "locked": { - "lastModified": 1744868846, - "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", + "lastModified": 1749213349, + "narHash": "sha256-UAaWOyQhdp7nXzsbmLVC67fo+QetzoTm9hsPf9X3yr4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", + "rev": "a4ff0e3c64846abea89662bfbacf037ef4b34207", "type": "github" }, "original": { "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", - "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1749345370, + "narHash": "sha256-w2J8aeSsMT6v6xAokr076vSCDHs5LRi2JkTUyNsEl4o=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "2a3d74c76852805ec8eba6dd52350e85e75805ec", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", "type": "github" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1749237914, - "narHash": "sha256-N5waoqWt8aMr/MykZjSErOokYH6rOsMMXu3UOVH5kiw=", + "lastModified": 1750133334, + "narHash": "sha256-urV51uWH7fVnhIvsZIELIYalMYsyr2FCalvlRTzqWRw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "70c74b02eac46f4e4aa071e45a6189ce0f6d9265", + "rev": "36ab78dab7da2e4e27911007033713bab534187b", "type": "github" }, "original": { @@ -380,11 +396,27 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1749285348, - "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "lastModified": 1744868846, + "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1750134718, + "narHash": "sha256-v263g4GbxXv87hMXMCpjkIxd/viIF7p3JpJrwgKdNiI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "rev": "9e83b64f727c88a7711a2c463a7b16eedb69a84c", "type": "github" }, "original": { @@ -398,10 +430,7 @@ "inputs": { "flake-compat": "flake-compat", "gitignore": "gitignore", - "nixpkgs": [ - "denix", - "nixpkgs" - ] + "nixpkgs": "nixpkgs" }, "locked": { "lastModified": 1746537231, @@ -427,7 +456,7 @@ "nix-darwin": "nix-darwin_2", "nix-index-database": "nix-index-database", "nix-vscode-extensions": "nix-vscode-extensions", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_3" } }, "systems": { @@ -478,16 +507,16 @@ "xwayland-satellite-stable": { "flake": false, "locked": { - "lastModified": 1739246919, - "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", + "lastModified": 1748488455, + "narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", + "rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73", "type": "github" }, "original": { "owner": "Supreeeme", - "ref": "v0.5.1", + "ref": "v0.6", "repo": "xwayland-satellite", "type": "github" } diff --git a/flake.nix b/flake.nix index fff827f..706875b 100644 --- a/flake.nix +++ b/flake.nix @@ -67,7 +67,7 @@ in { inherit moduleSystem homeManagerUser; - paths = [./denix/hosts ./denix/modules]; #./denix/rices]; + paths = [./hosts ./modules]; #./rices]; specialArgs = {inherit inputs moduleSystem homeManagerUser;}; }); in { @@ -87,6 +87,7 @@ # }; nixosConfigurations = mkConfigurations "nixos"; + darwinConfigurations = mkConfigurations "darwin"; # nixosModules.serverHomeManager = {...}: { # imports = [home-manager.nixosModules.home-manager]; diff --git a/hosts/shimmer/default.nix b/hosts/shimmer/default.nix new file mode 100644 index 0000000..5755a50 --- /dev/null +++ b/hosts/shimmer/default.nix @@ -0,0 +1,15 @@ +{delib, ...}: +delib.host { + name = "shimmer"; + + myconfig._1password.enable = false; + myconfig.gaming.enable = false; + myconfig.tray.enable = false; + myconfig.virtualisation.enable = false; + + myconfig.programs.chromium.enable = false; + myconfig.programs.desktop-apps.enable = false; + myconfig.programs.espanso.enable = false; + myconfig.programs.kitty.enable = false; + myconfig.programs.syncthing.enable = false; +} diff --git a/hosts/shimmer/hardware.nix b/hosts/shimmer/hardware.nix new file mode 100644 index 0000000..4734021 --- /dev/null +++ b/hosts/shimmer/hardware.nix @@ -0,0 +1,19 @@ +{ + delib, + inputs, + ... +}: +delib.host { + name = "shimmer"; + + homeManagerSystem = "aarch64-darwin"; + home.home.stateVersion = "24.05"; + + darwin = { + nixpkgs.hostPlatform = "aarch64-darwin"; + # TODO: `darwin-rebuild changelog` to see what changed, latest is 6 + system.stateVersion = 4; + # TODO: see what this does, i forgor + system.configurationRevision = inputs.self.rev or inputs.self.dirtyRev or null; + }; +} diff --git a/modules/config/home.nix b/modules/config/home.nix index 1a1a892..cfd4f82 100644 --- a/modules/config/home.nix +++ b/modules/config/home.nix @@ -18,7 +18,10 @@ delib.module { in { home = { inherit username; - homeDirectory = "/home/${username}"; + homeDirectory = + if moduleSystem == "darwin" + then "/Users/${username}" + else "/home/${username}"; }; news.display = "silent"; programs.home-manager.enable = false; diff --git a/modules/config/user.nix b/modules/config/user.nix index 8b320c5..01982f6 100644 --- a/modules/config/user.nix +++ b/modules/config/user.nix @@ -9,13 +9,21 @@ delib.module { nixos.always = {myconfig, ...}: let inherit (myconfig.constants) username userfullname; in { - users = { - users.${username} = { - isNormalUser = true; - description = userfullname; - extraGroups = ["wheel" "cdrom" "adbusers"]; - shell = pkgs.fish; - }; + users.users.${username} = { + isNormalUser = true; + description = userfullname; + extraGroups = ["wheel" "cdrom" "adbusers"]; + shell = pkgs.fish; + }; + }; + + darwin.always = {myconfig, ...}: let + inherit (myconfig.constants) username userfullname; + in { + users.users.${username} = { + description = userfullname; + home = "/Users/${username}"; + shell = pkgs.fish; }; }; } diff --git a/modules/darwin/defaults.nix b/modules/darwin/defaults.nix new file mode 100644 index 0000000..a05ff38 --- /dev/null +++ b/modules/darwin/defaults.nix @@ -0,0 +1,24 @@ +{delib, ...}: +delib.module { + name = "darwin.defaults"; + + options = delib.singleEnableOption true; + + darwin.ifEnabled.system.defaults = { + NSGlobalDomain.AppleShowAllExtensions = true; + finder.ShowPathbar = true; + menuExtraClock.Show24Hour = true; + trackpad.Dragging = true; + + # Dock settings + dock = { + autohide = false; + magnification = false; + minimize-to-application = false; + mru-spaces = false; + orientation = "bottom"; + show-recents = false; + tilesize = 48; + }; + }; +} diff --git a/darwin/shimmer/homebrew.nix b/modules/darwin/homebrew.nix similarity index 81% rename from darwin/shimmer/homebrew.nix rename to modules/darwin/homebrew.nix index c014fb9..6b195a4 100644 --- a/darwin/shimmer/homebrew.nix +++ b/modules/darwin/homebrew.nix @@ -1,5 +1,10 @@ -{...}: { - homebrew = { +{delib, ...}: +delib.module { + name = "darwin.homebrew"; + + options = delib.singleEnableOption true; + + darwin.ifEnabled.homebrew = { enable = true; # Update and cleanup homebrew packages when rebuilding. global.autoUpdate = false; @@ -14,7 +19,6 @@ ]; brews = [ - "bitwarden-cli" "klog" "mas" "swiftformat" @@ -35,7 +39,7 @@ # Actually searches symlinks for apps, compared to Alfred. "raycast" "swiftformat-for-xcode" - "visual-studio-code" + # "visual-studio-code" # "vorta" ]; @@ -43,7 +47,7 @@ Keka = 470158793; "Yubico Authenticator" = 1497506650; "System Color Picker" = 1545870783; - Tailsacle = 1475387142; + Tailscale = 1475387142; }; }; } diff --git a/modules/darwin/wm.nix b/modules/darwin/wm.nix new file mode 100644 index 0000000..19d3b36 --- /dev/null +++ b/modules/darwin/wm.nix @@ -0,0 +1,100 @@ +{ + delib, + lib, + ... +}: +delib.module { + name = "darwin.wm"; + + options = delib.singleEnableOption true; + + darwin.ifEnabled = { + services.yabai = { + enable = true; + config = let + gap = 10; + gapKeys = [ + "window_gap" + "top_padding" + "bottom_padding" + "left_padding" + "right_padding" + ]; + + gaps = builtins.listToAttrs ( + builtins.map (k: lib.attrsets.nameValuePair k gap) gapKeys + ); + in + { + layout = "bsp"; + window_placement = "second_child"; + } + // gaps; + extraConfig = '' + yabai -m rule --add app="Bitwarden" manage=off + yabai -m rule --add app="Discord" manage=off + yabai -m rule --add app="^Finder$" manage=off + yabai -m rule --add app="Keka" manage=off + yabai -m rule --add app="^System Information$" manage=off + yabai -m rule --add app="^System Preferences$" manage=off + yabai -m rule --add app="^System Settings$" manage=off + yabai -m rule --add title="Preferences$" manage=off + yabai -m rule --add title="^Archive Utility$" manage=off + yabai -m rule --add title="Settings$" manage=off + yabai -m rule --add title="Karabiner" manage=off + yabai -m rule --add title="^Weather$" manage=off + yabai -m rule --add title="Yubico Authenticator" manage=off + yabai -m rule --add app="Rewind" manage=off + yabai -m rule --add app="eqMac" manage=off + yabai -m rule --add app="^Arc$" manage=off + yabai -m rule --add app="OBS" manage=off + yabai -m rule --add app="Raycast" manage=off + ''; + }; + + services.skhd = { + enable = true; + skhdConfig = '' + # Move/swap windows + meh - w : yabai -m window --swap north + meh - a : yabai -m window --swap west + meh - r : yabai -m window --swap south + meh - s : yabai -m window --swap east + + hyper - w : yabai -m window --warp north + hyper - a : yabai -m window --warp west + hyper - r : yabai -m window --warp south + hyper - s : yabai -m window --warp east + + # Focus windows + ralt + rcmd - w : yabai -m window --focus north + ralt + rcmd - a : yabai -m window --focus west + ralt + rcmd - r : yabai -m window --focus south + ralt + rcmd - s : yabai -m window --focus east + + # Increase window size + meh - n : yabai -m window --resize left:-100:0 + meh - e : yabai -m window --resize bottom:0:100 + meh - i : yabai -m window --resize top:0:-100 + meh - o : yabai -m window --resize right:100:0 + + # Decrease window size + hyper - n : yabai -m window --resize right:-100:0 + hyper - e : yabai -m window --resize top:0:100 + hyper - i : yabai -m window --resize bottom:0:-100 + hyper - o : yabai -m window --resize left:100:0 + + # Expand floating window to fill screen + # (full stop) + meh - 0x2F : yabai -m window --grid 1:1:0:0:1:1 + + meh - p : yabai -m window --toggle float; \ + yabai -m window --grid 4:4:1:1:2:2 + + # Rebalance grid + # (backtick) + hyper - 0x32 : yabai -m space --balance + ''; + }; + }; +} diff --git a/modules/fonts.nix b/modules/fonts.nix index 7046360..c8a4e66 100644 --- a/modules/fonts.nix +++ b/modules/fonts.nix @@ -47,4 +47,11 @@ delib.module { # ]; # }; }; + + darwin.always = { + fonts.packages = with pkgs; [ + inter + inputs.iosevka-solai.packages.aarch64-darwin.bin + ]; + }; } diff --git a/modules/gaming.nix b/modules/gaming.nix index e842bba..b0a0346 100644 --- a/modules/gaming.nix +++ b/modules/gaming.nix @@ -7,7 +7,9 @@ delib.module { name = "gaming"; - nixos.always = { + options = delib.singleEnableOption true; + + nixos.ifEnabled = { programs.steam = { enable = true; remotePlay.openFirewall = true; @@ -19,7 +21,7 @@ delib.module { programs.gamemode.enable = true; }; - home.always = { + home.ifEnabled = { programs.mangohud = { enable = true; settings = { diff --git a/modules/nix.nix b/modules/nix.nix index 9bda91e..aa6eb8d 100644 --- a/modules/nix.nix +++ b/modules/nix.nix @@ -36,4 +36,45 @@ in nixpkgs.config.allowUnfree = true; system.tools.nixos-option.enable = false; }; + + darwin.always = { + nixpkgs.config.allowUnfree = true; + + nix = { + buildMachines = [ + { + hostName = "rushing.axolotl-map.ts.net"; + sshUser = "colmena-deploy"; + system = "x86_64-linux"; + speedFactor = 2; + maxJobs = 6; + protocol = "ssh-ng"; + } + { + hostName = "skyline.axolotl-map.ts.net"; + sshUser = "colmena-deploy"; + system = "aarch64-linux"; + speedFactor = 1; + maxJobs = 2; + protocol = "ssh-ng"; + } + ]; + + distributedBuilds = true; + + gc = { + automatic = true; + options = "--delete-older-than 7d"; + interval.Weekday = 6; + }; + + optimise.automatic = true; + + settings = { + builders-use-substitutes = true; + experimental-features = "nix-command flakes"; + trusted-users = ["root" "ovy"]; + }; + }; + }; } diff --git a/modules/programs/bat.nix b/modules/programs/bat.nix index 65405db..ebd1be7 100644 --- a/modules/programs/bat.nix +++ b/modules/programs/bat.nix @@ -2,7 +2,9 @@ delib.module { name = "programs.bat"; - home.always.programs.bat = { + options = delib.singleEnableOption true; + + home.ifEnabled.programs.bat = { enable = true; config = { theme = "DarkNeon"; diff --git a/modules/programs/core-cli.nix b/modules/programs/core-cli.nix index 57577fe..83b5e07 100644 --- a/modules/programs/core-cli.nix +++ b/modules/programs/core-cli.nix @@ -6,6 +6,8 @@ delib.module { name = "programs.core-cli"; + options = delib.singleEnableOption true; + nixos.always = { environment.systemPackages = with pkgs; [ ffmpeg-full @@ -27,6 +29,41 @@ delib.module { programs.fish.enable = true; }; + darwin.always = { + environment.systemPackages = with pkgs; [ + ffmpeg-full + git + imagemagick + nil + openssh + wget + # TODO: the Xcode packages makes us manually download and put it into the Nix store + # but it seems to contain no reference to our actual result so I don't think `systemPackages` + # picks it up properly. Need to see how `requireFile` works and how `systemPackages` + # works under the hood. + # darwin.xcode_14_1 + ]; + + programs.bash.enable = true; + programs.zsh.enable = true; + programs.fish.enable = true; + + # Fix problem in nix-darwin relating to $PATH order in fish. + # https://github.com/LnL7/nix-darwin/issues/122#issuecomment-1659465635 + # programs.fish.loginShellInit = let + # dquote = str: "\"${str}\""; + # makeBinPathList = map (path: path + "/bin"); + # in '' + # fish_add_path --move --prepend --path ${lib.concatMapStringsSep " " dquote (makeBinPathList config.environment.profiles)} + # set fish_user_paths $fish_user_paths + # fish_add_path /opt/homebrew/bin + # ''; + + programs.fish.loginShellInit = '' + alias tailscale /Applications/Tailscale.app/Contents/MacOS/Tailscale + ''; + }; + home.always = { home.packages = with pkgs; [ curlie diff --git a/modules/programs/desktop-apps.nix b/modules/programs/desktop-apps.nix index da49f5f..c15f3de 100644 --- a/modules/programs/desktop-apps.nix +++ b/modules/programs/desktop-apps.nix @@ -6,7 +6,9 @@ delib.module { name = "programs.desktop-apps"; - home.always = { + options = delib.singleEnableOption true; + + home.ifEnabled = { home.packages = with pkgs; [ alejandra audacity diff --git a/modules/programs/desktop-cli.nix b/modules/programs/desktop-cli.nix index aae4781..faac00a 100644 --- a/modules/programs/desktop-cli.nix +++ b/modules/programs/desktop-cli.nix @@ -6,7 +6,9 @@ delib.module { name = "programs.desktop-cli"; - home.always.home.packages = with pkgs; [ + options = delib.singleEnableOption true; + + home.ifEnabled.home.packages = with pkgs; [ age-plugin-yubikey alejandra cachix diff --git a/modules/programs/direnv.nix b/modules/programs/direnv.nix index 6598662..5b1fa8d 100644 --- a/modules/programs/direnv.nix +++ b/modules/programs/direnv.nix @@ -4,7 +4,7 @@ ... }: delib.module { - name = "programs.bat"; + name = "programs.direnv"; home.always.programs.direnv = { enable = true; diff --git a/modules/programs/espanso.nix b/modules/programs/espanso.nix index cc11489..3681540 100644 --- a/modules/programs/espanso.nix +++ b/modules/programs/espanso.nix @@ -6,7 +6,9 @@ delib.module { name = "programs.espanso"; - home.always.services.espanso = { + options = delib.singleEnableOption true; + + home.ifEnabled.services.espanso = { enable = true; package = pkgs.espanso-wayland; matches.base.matches = [ diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix index 3a2f90e..1eee99c 100644 --- a/modules/programs/fish.nix +++ b/modules/programs/fish.nix @@ -35,7 +35,7 @@ delib.module { ''; shellAbbrs = { - code = "codium"; + # code = "codium"; ga = "git add"; gaa = "git add -A"; gc = { diff --git a/modules/programs/git.nix b/modules/programs/git.nix index 278a5b3..015aa2e 100644 --- a/modules/programs/git.nix +++ b/modules/programs/git.nix @@ -5,7 +5,7 @@ delib.module { home.always = {myconfig, ...}: let inherit (myconfig.constants) userfullname useremail; in { - xdg.configFile."git/allowed_signers".source = ../../../files/git/allowed_signers; + xdg.configFile."git/allowed_signers".source = ../../files/git/allowed_signers; programs.git = { enable = true; diff --git a/modules/programs/ssh.nix b/modules/programs/ssh.nix index 2856f6d..e9f0ee6 100644 --- a/modules/programs/ssh.nix +++ b/modules/programs/ssh.nix @@ -13,6 +13,6 @@ delib.module { }; # TODO: if darwin - # programs.ssh.includes = ["~/.orbstack/ssh/config"]; + includes = ["~/.orbstack/ssh/config"]; }; } diff --git a/modules/tray.nix b/modules/tray.nix index 9f984fb..89d02c0 100644 --- a/modules/tray.nix +++ b/modules/tray.nix @@ -1,13 +1,11 @@ -{ - delib, - pkgs, - ... -}: +{delib, ...}: delib.module { name = "tray"; + options = delib.singleEnableOption true; + # TODO: i don't think this is needed anymore??? - home.always.systemd.user.targets.tray = { + home.ifEnabled.systemd.user.targets.tray = { Unit = { Description = "Home Manager System Tray"; Requires = ["graphical-session-pre.target"]; diff --git a/modules/virtualisation.nix b/modules/virtualisation.nix index eddc0bb..8b7be6f 100644 --- a/modules/virtualisation.nix +++ b/modules/virtualisation.nix @@ -6,7 +6,9 @@ delib.module { name = "virtualisation"; - nixos.always = {myconfig, ...}: let + options = delib.singleEnableOption true; + + nixos.ifEnabled = {myconfig, ...}: let inherit (myconfig.constants) username; in { environment.systemPackages = [pkgs.docker-compose]; @@ -22,5 +24,5 @@ delib.module { users.users.${username}.extraGroups = ["libvirtd"]; }; - home.always.home.sessionVariables.DOCKER_HOST = "unix:///run/user/1000/podman/podman.sock"; + home.ifEnabled.home.sessionVariables.DOCKER_HOST = "unix:///run/user/1000/podman/podman.sock"; } diff --git a/modules/xdg.nix b/modules/xdg.nix index b23a628..2f5ae89 100644 --- a/modules/xdg.nix +++ b/modules/xdg.nix @@ -1,10 +1,12 @@ { delib, + moduleSystem, pkgs, + lib, ... }: delib.module { - name = "programs.espanso"; + name = "xdg"; home.always = let vivalarc = pkgs.fetchFromGitHub { @@ -13,22 +15,19 @@ delib.module { rev = "7ee09e9efb46c1524a43f0cb6763b9750db6e81c"; hash = "sha256-xYSxB8KjcbeUDEdbA2AJ9FeQC1TkqyXdB9rTMMSm+FA="; }; - in { - xdg.desktopEntries.davinci-resolve = { - name = "Davinci Resolve"; - exec = "davinci-resolve"; - categories = ["AudioVideo" "AudioVideoEditing" "Video" "Graphics"]; - comment = "Professional video editing, color, effects and audio post-processing"; - genericName = "Video Editor"; - type = "Application"; - settings.Version = "1.4"; - }; - - xdg.dataFile."vivalarc".source = vivalarc; - }; - - # if darwin: xdg.configFile = { - # TODO: replace with the full karabiner config instead of needing to manually set complex mods - # "karabiner/assets/complex_modifications/keybind-helpers.json".source = ../../../files/karabiner/keybind-helpers.json; - # }; + in ({ + xdg.dataFile."vivalarc".source = vivalarc; + xdg.configFile."karabiner/assets/complex_modifications/keybind-helpers.json".source = ../files/karabiner/keybind-helpers.json; + } + // lib.optionalAttrs (moduleSystem == "nixos") { + xdg.desktopEntries.davinci-resolve = { + name = "Davinci Resolve"; + exec = "davinci-resolve"; + categories = ["AudioVideo" "AudioVideoEditing" "Video" "Graphics"]; + comment = "Professional video editing, color, effects and audio post-processing"; + genericName = "Video Editor"; + type = "Application"; + settings.Version = "1.4"; + }; + }); }