diff --git a/flake.lock b/flake.lock index 591b18b..e1cdc5e 100644 --- a/flake.lock +++ b/flake.lock @@ -233,6 +233,24 @@ "type": "github" } }, + "darwin_2": { + "inputs": { + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1748352827, + "narHash": "sha256-sNUUP6qxGkK9hXgJ+p362dtWLgnIWwOCmiq72LAWtYo=", + "owner": "LnL7", + "repo": "nix-darwin", + "rev": "44a7d0e687a87b73facfe94fba78d323a6686a90", + "type": "github" + }, + "original": { + "owner": "LnL7", + "repo": "nix-darwin", + "type": "github" + } + }, "disko": { "inputs": { "nixpkgs": [ @@ -255,7 +273,7 @@ }, "emacs-overlay": { "inputs": { - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_7", "nixpkgs-stable": "nixpkgs-stable" }, "locked": { @@ -1534,7 +1552,7 @@ "lexical": { "inputs": { "flake-parts": "flake-parts_7", - "nixpkgs": "nixpkgs_21", + "nixpkgs": "nixpkgs_22", "systems": "systems_21" }, "locked": { @@ -1591,7 +1609,7 @@ "blobs": "blobs", "flake-compat": "flake-compat_4", "git-hooks": "git-hooks", - "nixpkgs": "nixpkgs_9", + "nixpkgs": "nixpkgs_10", "nixpkgs-25_05": "nixpkgs-25_05" }, "locked": { @@ -1615,7 +1633,7 @@ "git-hooks": "git-hooks_2", "hercules-ci-effects": "hercules-ci-effects", "neovim-src": "neovim-src", - "nixpkgs": "nixpkgs_10", + "nixpkgs": "nixpkgs_11", "treefmt-nix": "treefmt-nix_2" }, "locked": { @@ -1652,7 +1670,7 @@ "inputs": { "niri-stable": "niri-stable", "niri-unstable": "niri-unstable", - "nixpkgs": "nixpkgs_11", + "nixpkgs": "nixpkgs_12", "nixpkgs-stable": "nixpkgs-stable_4", "xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-unstable": "xwayland-satellite-unstable" @@ -1726,6 +1744,25 @@ "type": "github" } }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1748352827, + "narHash": "sha256-sNUUP6qxGkK9hXgJ+p362dtWLgnIWwOCmiq72LAWtYo=", + "owner": "nix-darwin", + "repo": "nix-darwin", + "rev": "44a7d0e687a87b73facfe94fba78d323a6686a90", + "type": "github" + }, + "original": { + "id": "nix-darwin", + "type": "indirect" + } + }, "nix-filter": { "locked": { "lastModified": 1731533336, @@ -1818,11 +1855,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1747744144, - "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=", + "lastModified": 1748370509, + "narHash": "sha256-QlL8slIgc16W5UaI3w7xHQEP+Qmv/6vSNTpoZrrSlbk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f", + "rev": "4faa5f5321320e49a78ae7848582f684d64783e9", "type": "github" }, "original": { @@ -1980,6 +2017,22 @@ } }, "nixpkgs_10": { + "locked": { + "lastModified": 1747179050, + "narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { "locked": { "lastModified": 1747920628, "narHash": "sha256-IlAuXnIi+ZmyS89tt1YOFDCv7FKs9bNBHd3MXMp8PxE=", @@ -1995,39 +2048,39 @@ "type": "github" } }, - "nixpkgs_11": { - "locked": { - "lastModified": 1747744144, - "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_12": { "locked": { "lastModified": 1747744144, "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=", - "owner": "nixos", + "owner": "NixOS", "repo": "nixpkgs", "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f", "type": "github" }, "original": { - "owner": "nixos", + "owner": "NixOS", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_13": { + "locked": { + "lastModified": 1747744144, + "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { "locked": { "lastModified": 1702151865, "narHash": "sha256-9VAt19t6yQa7pHZLDbil/QctAgVsA66DLnzdRGqDisg=", @@ -2043,7 +2096,7 @@ "type": "github" } }, - "nixpkgs_14": { + "nixpkgs_15": { "locked": { "lastModified": 1736189585, "narHash": "sha256-GBC2LIBk9BuJR4HXfjuNlIWeY15U6jFvaqc7PeToGLw=", @@ -2059,7 +2112,7 @@ "type": "github" } }, - "nixpkgs_15": { + "nixpkgs_16": { "locked": { "lastModified": 1712883908, "narHash": "sha256-icE1IJE9fHcbDfJ0+qWoDdcBXUoZCcIJxME4lMHwvSM=", @@ -2075,7 +2128,7 @@ "type": "github" } }, - "nixpkgs_16": { + "nixpkgs_17": { "locked": { "lastModified": 1744536153, "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", @@ -2091,7 +2144,7 @@ "type": "github" } }, - "nixpkgs_17": { + "nixpkgs_18": { "locked": { "lastModified": 1744868846, "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", @@ -2107,7 +2160,7 @@ "type": "github" } }, - "nixpkgs_18": { + "nixpkgs_19": { "locked": { "lastModified": 1740547748, "narHash": "sha256-Ly2fBL1LscV+KyCqPRufUBuiw+zmWrlJzpWOWbahplg=", @@ -2123,22 +2176,6 @@ "type": "github" } }, - "nixpkgs_19": { - "locked": { - "lastModified": 1747542820, - "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_2": { "locked": { "lastModified": 1712883908, @@ -2156,6 +2193,22 @@ } }, "nixpkgs_20": { + "locked": { + "lastModified": 1747542820, + "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_21": { "locked": { "lastModified": 1743448293, "narHash": "sha256-bmEPmSjJakAp/JojZRrUvNcDX2R5/nuX6bm+seVaGhs=", @@ -2171,7 +2224,7 @@ "type": "github" } }, - "nixpkgs_21": { + "nixpkgs_22": { "locked": { "lastModified": 1719931832, "narHash": "sha256-0LD+KePCKKEb4CcPsTBOwf019wDtZJanjoKm1S8q3Do=", @@ -2234,6 +2287,22 @@ } }, "nixpkgs_6": { + "locked": { + "lastModified": 1747728033, + "narHash": "sha256-NnXFQu7g4LnvPIPfJmBuZF7LFy/fey2g2+LCzjQhTUk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2f9173bde1d3fbf1ad26ff6d52f952f9e9da52ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { "locked": { "lastModified": 1747744144, "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=", @@ -2249,7 +2318,7 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { "lastModified": 1728538411, "narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=", @@ -2265,7 +2334,7 @@ "type": "github" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { "lastModified": 1731890469, "narHash": "sha256-D1FNZ70NmQEwNxpSSdTXCSklBH1z2isPR84J6DQrJGs=", @@ -2281,22 +2350,6 @@ "type": "github" } }, - "nixpkgs_9": { - "locked": { - "lastModified": 1747179050, - "narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "pnpm2nix": { "inputs": { "flake-utils": "flake-utils_2", @@ -2319,7 +2372,7 @@ "pnpm2nix_2": { "inputs": { "flake-utils": "flake-utils_6", - "nixpkgs": "nixpkgs_13" + "nixpkgs": "nixpkgs_14" }, "locked": { "lastModified": 1706694632, @@ -2337,7 +2390,7 @@ }, "posting": { "inputs": { - "nixpkgs": "nixpkgs_14", + "nixpkgs": "nixpkgs_15", "utils": "utils" }, "locked": { @@ -2421,7 +2474,7 @@ }, "resume": { "inputs": { - "nixpkgs": "nixpkgs_15", + "nixpkgs": "nixpkgs_16", "systems": "systems_14" }, "locked": { @@ -2469,6 +2522,7 @@ "blog": "blog", "catppuccin": "catppuccin", "chaotic": "chaotic", + "darwin": "darwin_2", "disko": "disko", "emacs-overlay": "emacs-overlay", "ghostty": "ghostty", @@ -2482,9 +2536,10 @@ "neovim-nightly-overlay": "neovim-nightly-overlay", "niri": "niri", "niri-src": "niri-src", + "nix-darwin": "nix-darwin", "nixos-generators": "nixos-generators", "nixos-stable": "nixos-stable", - "nixpkgs": "nixpkgs_12", + "nixpkgs": "nixpkgs_13", "pnpm2nix": "pnpm2nix_2", "posting": "posting", "resume": "resume", @@ -2521,7 +2576,7 @@ }, "rust-overlay": { "inputs": { - "nixpkgs": "nixpkgs_7" + "nixpkgs": "nixpkgs_8" }, "locked": { "lastModified": 1733279627, @@ -2585,7 +2640,7 @@ }, "rust-overlay_4": { "inputs": { - "nixpkgs": "nixpkgs_16" + "nixpkgs": "nixpkgs_17" }, "locked": { "lastModified": 1747449297, @@ -2692,7 +2747,7 @@ }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_17" + "nixpkgs": "nixpkgs_18" }, "locked": { "lastModified": 1747603214, @@ -3062,7 +3117,7 @@ }, "treefmt-nix": { "inputs": { - "nixpkgs": "nixpkgs_8" + "nixpkgs": "nixpkgs_9" }, "locked": { "lastModified": 1733222881, @@ -3101,7 +3156,7 @@ }, "umu": { "inputs": { - "nixpkgs": "nixpkgs_18" + "nixpkgs": "nixpkgs_19" }, "locked": { "dir": "packaging/nix", @@ -3139,7 +3194,7 @@ }, "walker": { "inputs": { - "nixpkgs": "nixpkgs_19", + "nixpkgs": "nixpkgs_20", "systems": "systems_20" }, "locked": { @@ -3254,7 +3309,7 @@ "zen-browser": { "inputs": { "home-manager": "home-manager_4", - "nixpkgs": "nixpkgs_20" + "nixpkgs": "nixpkgs_21" }, "locked": { "lastModified": 1747998984, diff --git a/flake.nix b/flake.nix index d21150e..b547d60 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,9 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + darwin.url = "github:LnL7/nix-darwin"; + nix-darwin.inputs.nixpkgs.follows = "nixpkgs"; + ghostty.url = "github:ghostty-org/ghostty"; emacs-overlay.url = "github:nix-community/emacs-overlay"; diff --git a/homes/aarch64-darwin/zack@mercury/default.nix b/homes/aarch64-darwin/zack@mercury/default.nix new file mode 100644 index 0000000..0023d2e --- /dev/null +++ b/homes/aarch64-darwin/zack@mercury/default.nix @@ -0,0 +1,79 @@ +{ + inputs, + pkgs, + system, + lib, + ... +}: { + apps = { + tools.git.enable = true; + tools.tmux.enable = true; + tools.neovim.enable = true; + tools.skim.enable = true; + tools.starship.enable = true; + tools.direnv.enable = true; + tools.tealdeer.enable = true; + tools.bat.enable = true; + tools.emacs.enable = false; + + term.kitty.enable = true; + }; + + shells.nu.enable = true; + shells.zsh.enable = true; + shells.fish.enable = true; + + programs = { + gpg.enable = true; + man.enable = true; + eza.enable = true; + dircolors = { + enable = true; + enableZshIntegration = true; + }; + }; + + catppuccin.enable = true; + catppuccin.flavor = "mocha"; + catppuccin.accent = "red"; + + catppuccin.aerc.enable = true; + + catppuccin.cava.enable = true; + catppuccin.fuzzel.enable = true; + catppuccin.fzf.enable = true; + + home.packages = with pkgs; [ + devenv + + (discord.override { + withOpenASAR = true; + withVencord = true; + }) + + uutils-coreutils-noprefix + yazi + + inputs.posting.packages.${pkgs.system}.default + + mosh + + nix-output-monitor + fastfetch + + starfetch + ]; + + programs.zoxide = { + enable = true; + options = ["--cmd cd"]; + }; + + programs.btop = { + enable = true; + extraConfig = '' + update_ms = 100 + vim_keys = true + ''; + }; +} diff --git a/lib/module/default.nix b/lib/module/default.nix index 8cc663f..1fad72a 100644 --- a/lib/module/default.nix +++ b/lib/module/default.nix @@ -19,6 +19,9 @@ with lib; rec { disabled = {enable = false;}; + # Check if the current system is Darwin + isDarwin = pkgs: pkgs.stdenv.isDarwin; + nixos-stable = import inputs.nixos-stable { system = "x86_64-linux"; config = {}; diff --git a/modules/home/apps/helpers/ags/default.nix b/modules/home/apps/helpers/ags/default.nix index 904d930..e8f04ea 100644 --- a/modules/home/apps/helpers/ags/default.nix +++ b/modules/home/apps/helpers/ags/default.nix @@ -44,65 +44,65 @@ in { enable = mkBoolOpt false "Enable AGS"; }; - config = mkIf cfg.enable { - programs.ags = { - enable = true; + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { + programs.ags = { + enable = true; - # Generate _colors.scss with our theme colors - configDir = pkgs.runCommand "ags-config" {} '' - cp -r ${./cfg} $out - chmod -R +w $out - cat > $out/scss/_colors.scss << EOF - /* Generated from lib/theme/default.nix */ - $rosewater: ${colors.rosewater.hex}; - $flamingo: ${colors.flamingo.hex}; - $pink: ${colors.pink.hex}; - $mauve: ${colors.mauve.hex}; - $red: ${colors.red.hex}; - $maroon: ${colors.maroon.hex}; - $peach: ${colors.peach.hex}; - $yellow: ${colors.yellow.hex}; - $green: ${colors.green.hex}; - $teal: ${colors.teal.hex}; - $sky: ${colors.sky.hex}; - $sapphire: ${colors.sapphire.hex}; - $blue: ${colors.blue.hex}; - $lavender: ${colors.lavender.hex}; - $text: ${colors.text.hex}; - $subtext1: ${colors.subtext1.hex}; - $subtext0: ${colors.subtext0.hex}; - $overlay2: ${colors.overlay2.hex}; - $overlay1: ${colors.overlay1.hex}; - $overlay0: ${colors.overlay0.hex}; - $surface2: ${colors.surface2.hex}; - $surface1: ${colors.surface1.hex}; - $surface0: ${colors.surface0.hex}; - $base: ${colors.base.hex}; - $mantle: ${colors.mantle.hex}; - $crust: ${colors.crust.hex}; + # Generate _colors.scss with our theme colors + configDir = pkgs.runCommand "ags-config" {} '' + cp -r ${./cfg} $out + chmod -R +w $out + cat > $out/scss/_colors.scss << EOF + /* Generated from lib/theme/default.nix */ + $rosewater: ${colors.rosewater.hex}; + $flamingo: ${colors.flamingo.hex}; + $pink: ${colors.pink.hex}; + $mauve: ${colors.mauve.hex}; + $red: ${colors.red.hex}; + $maroon: ${colors.maroon.hex}; + $peach: ${colors.peach.hex}; + $yellow: ${colors.yellow.hex}; + $green: ${colors.green.hex}; + $teal: ${colors.teal.hex}; + $sky: ${colors.sky.hex}; + $sapphire: ${colors.sapphire.hex}; + $blue: ${colors.blue.hex}; + $lavender: ${colors.lavender.hex}; + $text: ${colors.text.hex}; + $subtext1: ${colors.subtext1.hex}; + $subtext0: ${colors.subtext0.hex}; + $overlay2: ${colors.overlay2.hex}; + $overlay1: ${colors.overlay1.hex}; + $overlay0: ${colors.overlay0.hex}; + $surface2: ${colors.surface2.hex}; + $surface1: ${colors.surface1.hex}; + $surface0: ${colors.surface0.hex}; + $base: ${colors.base.hex}; + $mantle: ${colors.mantle.hex}; + $crust: ${colors.crust.hex}; - /* Default accent color */ - $accent: ${colors.sapphire.hex}; - EOF - ''; + /* Default accent color */ + $accent: ${colors.sapphire.hex}; + EOF + ''; - extraPackages = dependencies; - }; - - systemd.user.services.ags = { - Unit = { - Description = "Aylur's Gtk Shell"; - PartOf = [ - "tray.target" - "hyprland-session.target" - ]; + extraPackages = dependencies; }; - Service = { - Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath dependencies}"; - ExecStart = "${config.programs.ags.package}/bin/ags"; - Restart = "on-failure"; + + systemd.user.services.ags = { + Unit = { + Description = "Aylur's Gtk Shell"; + PartOf = [ + "tray.target" + "hyprland-session.target" + ]; + }; + Service = { + Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath dependencies}"; + ExecStart = "${config.programs.ags.package}/bin/ags"; + Restart = "on-failure"; + }; + Install.WantedBy = ["hyprland-session.target"]; }; - Install.WantedBy = ["hyprland-session.target"]; }; - }; } diff --git a/modules/home/apps/helpers/anyrun/default.nix b/modules/home/apps/helpers/anyrun/default.nix index 0b7a44a..c405c54 100644 --- a/modules/home/apps/helpers/anyrun/default.nix +++ b/modules/home/apps/helpers/anyrun/default.nix @@ -14,9 +14,8 @@ in { enable = mkBoolOpt false "Enable Anyrun"; }; - config = - mkIf cfg.enable { - }; + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { + }; # programs.anyrun = { # enable = true; # config = { diff --git a/modules/home/apps/helpers/rofi/default.nix b/modules/home/apps/helpers/rofi/default.nix index f51b318..1efc516 100644 --- a/modules/home/apps/helpers/rofi/default.nix +++ b/modules/home/apps/helpers/rofi/default.nix @@ -12,10 +12,10 @@ in { enable = mkBoolOpt false "Enable Rofi"; }; - config = mkIf cfg.enable { - programs.rofi = { - enable = true; - package = pkgs.rofi-wayland; + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { + programs.rofi = { + enable = true; + package = pkgs.rofi-wayland; # Basic configuration terminal = "kitty"; @@ -196,5 +196,5 @@ in { size: 0; } ''; - }; + }; } diff --git a/modules/home/apps/helpers/waybar/default.nix b/modules/home/apps/helpers/waybar/default.nix index b1e1c82..4855d97 100644 --- a/modules/home/apps/helpers/waybar/default.nix +++ b/modules/home/apps/helpers/waybar/default.nix @@ -14,7 +14,7 @@ in { enable = mkBoolOpt false "Enable WayBar"; }; - config = mkIf cfg.enable { + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { programs.waybar = { enable = true; systemd.enable = true; diff --git a/modules/home/apps/term/foot/default.nix b/modules/home/apps/term/foot/default.nix index ad29f01..d5a83cc 100644 --- a/modules/home/apps/term/foot/default.nix +++ b/modules/home/apps/term/foot/default.nix @@ -12,7 +12,7 @@ in { enable = mkBoolOpt false "Enable Foot Terminal"; }; - config = mkIf cfg.enable { + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { programs.foot = { enable = true; settings = { diff --git a/modules/home/apps/tools/neovim/default.nix b/modules/home/apps/tools/neovim/default.nix index 4423abd..941b8f9 100644 --- a/modules/home/apps/tools/neovim/default.nix +++ b/modules/home/apps/tools/neovim/default.nix @@ -89,7 +89,6 @@ in { sqlite postgresql mongosh - gerbera # vscode-extensions.vadimcn.vscode-lldb.adapter ]; plugins = with pkgs.vimPlugins; [ diff --git a/modules/home/apps/web/zen/default.nix b/modules/home/apps/web/zen/default.nix index e61cb9a..2f919d8 100644 --- a/modules/home/apps/web/zen/default.nix +++ b/modules/home/apps/web/zen/default.nix @@ -14,7 +14,7 @@ in { setDefault = mkBoolOpt false "Set zen as default browser"; }; - config = mkIf cfg.enable { + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { xdg.mimeApps.defaultApplications = mkIf cfg.setDefault { "text/html" = "zen-beta.desktop"; "x-scheme-handler/http" = "zen-beta.desktop"; diff --git a/modules/home/rice/gtk/default.nix b/modules/home/rice/gtk/default.nix index c584f05..16baff7 100644 --- a/modules/home/rice/gtk/default.nix +++ b/modules/home/rice/gtk/default.nix @@ -59,13 +59,12 @@ in { ''; }; - home = { - packages = with pkgs; [ - qt5.qttools - qt6Packages.qtstyleplugin-kvantum - libsForQt5.qtstyleplugin-kvantum - libsForQt5.qt5ct - ]; - }; + # Linux-specific packages (Qt theming) + home.packages = with pkgs; lib.mkIf (!pkgs.stdenv.isDarwin) [ + qt5.qttools + qt6Packages.qtstyleplugin-kvantum + libsForQt5.qtstyleplugin-kvantum + libsForQt5.qt5ct + ]; }; } diff --git a/modules/home/services/hypridle/default.nix b/modules/home/services/hypridle/default.nix index 0d4d7ca..8edc1e9 100644 --- a/modules/home/services/hypridle/default.nix +++ b/modules/home/services/hypridle/default.nix @@ -14,76 +14,76 @@ in { enable = mkBoolOpt false "Enable Hypridle Service"; }; - config = mkIf cfg.enable { - programs.swaylock = { - enable = true; - catppuccin.enable = false; - package = pkgs.swaylock-effects; - settings = with colors; { - clock = true; - color = base.hex; - font = "Work Sans"; - image = "${wallpaper}"; - show-failed-attempts = false; - indicator = true; - indicator-radius = 200; - indicator-thickness = 20; - line-color = "00000000"; - ring-color = "00000000"; - inside-color = "00000000"; - key-hl-color = "f2cdcd"; - separator-color = "00000000"; - text-color = text.hex; - text-caps-lock-color = ""; - line-ver-color = rosewater.hex; - ring-ver-color = rosewater.hex; - inside-ver-color = base.hex; - text-ver-color = text.hex; - ring-wrong-color = teal.hex; - text-wrong-color = teal.hex; - inside-wrong-color = base.hex; - inside-clear-color = base.hex; - text-clear-color = text.hex; - ring-clear-color = lavender.hex; - line-clear-color = base.hex; - line-wrong-color = base.hex; - bs-hl-color = teal.hex; - line-uses-ring = false; - grace = 2; - grace-no-mouse = true; - grace-no-touch = true; - datestr = "%d.%m"; - fade-in = "0.1"; - ignore-empty-password = true; + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { + programs.swaylock = { + enable = true; + catppuccin.enable = false; + package = pkgs.swaylock-effects; + settings = with colors; { + clock = true; + color = base.hex; + font = "Work Sans"; + image = "${wallpaper}"; + show-failed-attempts = false; + indicator = true; + indicator-radius = 200; + indicator-thickness = 20; + line-color = "00000000"; + ring-color = "00000000"; + inside-color = "00000000"; + key-hl-color = "f2cdcd"; + separator-color = "00000000"; + text-color = text.hex; + text-caps-lock-color = ""; + line-ver-color = rosewater.hex; + ring-ver-color = rosewater.hex; + inside-ver-color = base.hex; + text-ver-color = text.hex; + ring-wrong-color = teal.hex; + text-wrong-color = teal.hex; + inside-wrong-color = base.hex; + inside-clear-color = base.hex; + text-clear-color = text.hex; + ring-clear-color = lavender.hex; + line-clear-color = base.hex; + line-wrong-color = base.hex; + bs-hl-color = teal.hex; + line-uses-ring = false; + grace = 2; + grace-no-mouse = true; + grace-no-touch = true; + datestr = "%d.%m"; + fade-in = "0.1"; + ignore-empty-password = true; + }; }; + + systemd.user.services.hypridle = { + Unit = { + Description = "Idle Daemon for Hyprland"; + }; + Service = { + Type = "simple"; + ExecStart = lib.getExe inputs.hypridle.packages.${pkgs.system}.hypridle; + Restart = "on-failure"; + }; + Install = { + WantedBy = ["hyprland-session.target"]; + }; + }; + + xdg.configFile."hypr/hypridle.conf".text = '' + general { + lock_cmd = ${pkgs.swaylock-effects}/bin/swaylock -fF + before_sleep_cmd = ${pkgs.swaylock-effects}/bin/swaylock -fF # command ran before sleep + ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) + } + + listener { + timeout = 300 # in seconds + on-timeout = ${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off + on-resume = ${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on + } + ''; }; - - systemd.user.services.hypridle = { - Unit = { - Description = "Idle Daemon for Hyprland"; - }; - Service = { - Type = "simple"; - ExecStart = lib.getExe inputs.hypridle.packages.${pkgs.system}.hypridle; - Restart = "on-failure"; - }; - Install = { - WantedBy = ["hyprland-session.target"]; - }; - }; - - xdg.configFile."hypr/hypridle.conf".text = '' - general { - lock_cmd = ${pkgs.swaylock-effects}/bin/swaylock -fF - before_sleep_cmd = ${pkgs.swaylock-effects}/bin/swaylock -fF # command ran before sleep - ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) - } - - listener { - timeout = 300 # in seconds - on-timeout = ${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off - on-resume = ${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on - } - ''; - }; } diff --git a/modules/home/services/mpd/default.nix b/modules/home/services/mpd/default.nix index 9f08725..7d889aa 100644 --- a/modules/home/services/mpd/default.nix +++ b/modules/home/services/mpd/default.nix @@ -12,7 +12,7 @@ in { enable = mkBoolOpt false "Enable MPD (Music Player Daemon)"; }; - config = mkIf cfg.enable { + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { services.mpd = { enable = true; musicDirectory = "/home/zoey/Music"; diff --git a/modules/home/shells/fish/default.nix b/modules/home/shells/fish/default.nix index 28d0cec..efbbd4b 100644 --- a/modules/home/shells/fish/default.nix +++ b/modules/home/shells/fish/default.nix @@ -138,11 +138,10 @@ in { # Generate qr codes qrencode - # script kidde stuff + unzip + ] ++ (if !pkgs.stdenv.isDarwin then [ hcxdumptool hashcat - - unzip - ]; + ] else []); }; } diff --git a/modules/home/shells/nu/default.nix b/modules/home/shells/nu/default.nix index 3b6fa8d..8730b5b 100644 --- a/modules/home/shells/nu/default.nix +++ b/modules/home/shells/nu/default.nix @@ -72,9 +72,10 @@ in { rsync figlet qrencode + unzip + ] ++ (if !pkgs.stdenv.isDarwin then [ hcxdumptool hashcat - unzip - ]; + ] else []); }; } diff --git a/modules/home/shells/zsh/default.nix b/modules/home/shells/zsh/default.nix index fe91f21..9d39868 100644 --- a/modules/home/shells/zsh/default.nix +++ b/modules/home/shells/zsh/default.nix @@ -144,10 +144,11 @@ in { qrencode # script kidde stuff - hcxdumptool - hashcat unzip - ]; + ] ++ (if !pkgs.stdenv.isDarwin then [ + hcxdumptool + hashcat + ] else []); }; } diff --git a/modules/home/wms/hyprland/default.nix b/modules/home/wms/hyprland/default.nix index 2602d18..fa22ded 100644 --- a/modules/home/wms/hyprland/default.nix +++ b/modules/home/wms/hyprland/default.nix @@ -38,7 +38,7 @@ in { enable = mkBoolOpt false "Enable Hyprland"; }; - config = mkIf cfg.enable { + config = mkIf (cfg.enable && pkgs.stdenv.isLinux) { wayland.windowManager.hyprland = { enable = true; package = inputs.hyprland.packages.${pkgs.system}.hyprland; @@ -266,5 +266,5 @@ in { # }; # }; # }; - }; + }; } diff --git a/modules/home/wms/niri/config.nix b/modules/home/wms/niri/config.nix new file mode 100644 index 0000000..833ba54 --- /dev/null +++ b/modules/home/wms/niri/config.nix @@ -0,0 +1,554 @@ +# This file contains the Niri configuration that will only be included on Linux +{ + options, + config, + lib, + inputs, + pkgs, + ... +}: +with lib; +with lib.custom; let + cfg = config.wms.niri; + + mkService = recursiveUpdate { + Unit.PartOf = ["graphical-session.target"]; + Unit.After = ["graphical-session.target"]; + Install.WantedBy = ["graphical-session.target"]; + }; + + actions = config.lib.niri.actions; + niri = "${config.programs.niri.package}/bin/niri"; + + mkColor = color: {inherit color;}; + mkGradient = from: to: { + angle ? 180, + relative-to ? "window", + in' ? null, + }: { + gradient = {inherit from to angle relative-to in';}; + }; + + spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" '' + # Get the day of the week (1=Monday, ..., 7=Sunday) + DAY_OF_WEEK=$(${pkgs.coreutils}/bin/date +%u) + + # Check if it's a weekday (between 1 and 5 inclusive) + if [ "$DAY_OF_WEEK" -ge 1 ] && [ "$DAY_OF_WEEK" -le 5 ]; then + # Execute Slack. Use the full path for robustness. + # Ensure pkgs.slack is available (e.g., via environment.systemPackages) + exec ${pkgs.slack}/bin/slack + fi + # Exit successfully if not a weekday or after exec replaces the process + exit 0 + ''; +in { + config = mkIf cfg.enable { + programs.niri = { + package = pkgs.niri; + + settings = { + # Input device configuration + input = { + keyboard = { + xkb = { + rules = ""; + model = ""; + layout = "us"; + variant = ""; + options = "ctrl:nocaps"; + }; + }; + + touchpad = { + enable = true; + tap = true; + dwt = true; + dwtp = true; + natural-scroll = true; + + # Other options + # accel-profile = "flat"; + # accel-speed = 0.0; + disabled-on-external-mouse = true; + }; + + mouse = { + enable = true; + natural-scroll = false; + accel-speed = 0.0; + accel-profile = "flat"; + }; + + trackpoint = { + enable = true; + natural-scroll = false; + # accel-profile = "flat"; + # accel-speed = 0.0; + # scroll-button = "middle"; + middle-emulation = true; + }; + + warp-mouse-to-focus = true; + + focus-follows-mouse = { + enable = true; + threshold = 1; + }; + }; + + # Output configuration + outputs."DP-1" = { + enable = true; + mode = { + width = 2560; + height = 1440; + refresh = 240.000; + }; + variable-refresh-rate = true; + scale = 1.0; + transform = { + flipped = false; + rotation = 0; + }; + position = { + x = 0; + y = 0; + }; + }; + + # Environment variables + environment = { + DISPLAY = ":0"; # for applications using xwayland-satillite + }; + + hotkey-overlay = { + skip-at-startup = true; + }; + + # Window manager behavior + layout = { + gaps = 4; + center-focused-column = true; + + # Column widths in preset-column-widths are relative to the available space + preset-column-widths = [ + {proportion = 1.0;} # One column that takes all available space + {proportion = 0.5;} # Two columns of equal size + {proportion = 0.66;} # Two columns: first takes 2/3, second takes 1/3 + ]; + + # A new column will use this width by default + default-column-width = { + proportion = 0.5; # Half of the available space + }; + + # Focused window highlight + focus-ring = { + enable = true; + width = 4; + active = mkGradient colors.lavender.hex colors.sapphire.hex { + angle = 45; + }; + inactive = mkGradient colors.overlay0.hex colors.overlay0.hex { + angle = 45; + relative-to = "window"; + }; + }; + + # Window borders + border = { + enable = true; + width = 4; + active = colors.lavender.hex; + inactive = colors.overlay0.hex; + }; + + # Reserved screen areas (e.g., for panels) + struts = { + left = 0; + right = 0; + top = 0; + bottom = 0; + }; + }; + + # Spawn processes at startup + spawn-at-startup = [ + {command = ["xwayland-satellite"];} + {command = ["${pkgs.writeShellScriptBin "thunderbird-delayed" ''sleep 5; thunderbird''}/bin/thunderbird-delayed"];} + {command = ["${pkgs.writeShellScriptBin "zen-delayed" ''sleep 5; zen''}/bin/zen-delayed"];} + {command = ["vesktop"];} + {command = ["spotify"];} + {command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];} + ]; + + # Prefer server-side decorations + prefer-no-csd = true; + + # Screenshot path + screenshot-path = "${config.home.homeDirectory}/Pictures/screenshots/Screenshot_%F_%H-%M-%S.png"; + + # Animations for windows, workspace transitions, etc. + animations = { + enable = true; + }; + + debug = { + wait-for-frame-completion-in-pipewire = []; + }; + + layer-rules = [ + { + # Match layer shell surfaces with the GTK layer shell namespace + matches = [ + {namespace = "gtk-layer-shell";} + ]; + + # Don't blur out this layer shell surface + block-out-from = ["blur"]; + } + ]; + + window-rules = [ + { + # Matching criteria + matches = [ + {app-id = "waybar";} + {app-id = "eww-bar";} + {app-id = "ags";} + {app-id = "gtk-layer-shell";} + {app-id = "mako";} + {app-id = "swaync-client";} + {app-id = "swaync-control-center";} + ]; + + # Rules + block-out-from = ["blur"]; + } + + # Configure rounded corners + { + geometry-corner-radius = { + top-left = 0; + top-right = 0; + bottom-left = 0; + bottom-right = 0; + }; + clip-to-geometry = true; + } + + # Configure a different appearance for window cast targets + { + matches = [{is-window-cast-target = true;}]; + focus-ring = { + active = colors.red.hex; + inactive = colors.red.hex; + }; + shadow = { + color = colors.red.hex; + }; + tab-indicator = { + active = colors.red.hex; + inactive = colors.red.hex; + }; + } + + # Configure floating Windows + { + matches = [ + {app-id = "zenity";} + ]; + excludes = [ + {title = "Zen Browser";} + ]; + open-floating = true; + open-focused = true; + default-floating-position = { + relative-to = "window-manager"; + x = 0; + y = 0; + }; + } + + # Configure video apps + { + matches = [ + {app-id = "mpv";} + {app-id = "io.github.celluloid_player.Celluloid";} + ]; + variable-refresh-rate = true; + } + + # Configure maximized Firefox + { + matches = [ + {at-startup = true;} + {app-id = "firefox";} + ]; + open-maximized = true; + open-on-workspace = "01-browser"; + } + + # Configure Zen Browser + { + matches = [ + {at-startup = true;} + {app-id = "zen";} + ]; + open-on-workspace = "01-browser"; + } + + # Configure VSCode + { + matches = [ + {at-startup = true;} + {app-id = "code-url-handler";} + ]; + open-on-workspace = "02-code"; + } + + # Configure chat apps + { + matches = [ + {at-startup = true;} + {app-id = "vesktop";} + ]; + open-on-workspace = "03-chat"; + } + ]; + + # Named workspaces + workspaces."01-browser" = { + name = "browser"; + }; + workspaces."02-code" = { + name = "code"; + }; + workspaces."03-chat" = { + name = "chat"; + }; + workspaces."04-work" = { + name = "work"; + }; + + # Keybindings + binds = { + # Show help + "Mod+Shift+Slash" = {action = actions.show-hotkey-overlay;}; + + # Terminal and launcher + "Mod+Return" = {action = actions.spawn "kitty";}; + "Mod+D" = {action = actions.spawn "fuzzel";}; + "Super+Alt+L" = {action = actions.spawn "swaylock";}; + # "Mod+T" = { action = actions.spawn "bash" "-c" "notify-send hello && exec alacritty"; }; + + # "Mod+S" = {action = actions.set-dynamic-cast-window;}; + # + # "Mod+Shift+S" = {action = actions.set-dynamic-cast-monitor;}; + # + # "XF86AudioLowerVolume" = { + # action = actions.spawn "pamixer" "--decrease" "5"; + # allow-when-locked = true; + # }; + # "XF86AudioRaiseVolume" = { + # action = actions.spawn "pamixer" "--increase" "5"; + # allow-when-locked = true; + # }; + # "XF86AudioMute" = { + # action = actions.spawn "pamixer" "--toggle-mute"; + # allow-when-locked = true; + # }; + # "XF86AudioMicMute" = { + # action = actions.spawn "pamixer" "--default-source" "--toggle-mute"; + # allow-when-locked = true; + # }; + # "XF86MonBrightnessDown" = { + # action = actions.spawn "brightnessctl" "set" "5%-"; + # allow-when-locked = true; + # }; + # "XF86MonBrightnessUp" = { + # action = actions.spawn "brightnessctl" "set" "5%+"; + # allow-when-locked = true; + # }; + + # Media controls + "XF86AudioRaiseVolume" = { + allow-when-locked = true; + action = actions.spawn "pamixer" "-i" "5"; + }; + "XF86AudioLowerVolume" = { + allow-when-locked = true; + action = actions.spawn "pamixer" "-d" "5"; + }; + "XF86AudioMute" = { + allow-when-locked = true; + action = actions.spawn "pamixer" "--toggle-mute"; + }; + "XF86AudioMicMute" = { + allow-when-locked = true; + action = actions.spawn "pamixer" "--default-source" + "--toggle-mute"; + }; + + # Close window + "Mod+Q" = {action = actions.close-window;}; + + # Focus windows and columns + "Mod+Left" = {action = actions.focus-column-left;}; + "Mod+Down" = {action = actions.focus-window-down;}; + "Mod+Up" = {action = actions.focus-window-up;}; + "Mod+Right" = {action = actions.focus-column-right;}; + "Mod+H" = {action = actions.focus-column-left;}; + "Mod+J" = {action = actions.focus-window-down;}; + "Mod+K" = {action = actions.focus-window-up;}; + "Mod+L" = {action = actions.focus-column-right;}; + + # Move windows within a column + "Mod+Ctrl+Left" = {action = actions.move-column-left;}; + "Mod+Ctrl+Down" = {action = actions.move-window-down;}; + "Mod+Ctrl+Up" = {action = actions.move-window-up;}; + "Mod+Ctrl+Right" = {action = actions.move-column-right;}; + "Mod+Ctrl+H" = {action = actions.move-column-left;}; + "Mod+Ctrl+J" = {action = actions.move-window-down;}; + "Mod+Ctrl+K" = {action = actions.move-window-up;}; + "Mod+Ctrl+L" = {action = actions.move-column-right;}; + + # "Mod+Alt+Left" = {action = actions.move-to-monitor-left;}; + # "Mod+Alt+Down" = {action = actions.move-to-monitor-down;}; + # "Mod+Alt+Up" = {action = actions.move-to-monitor-up;}; + # "Mod+Alt+Right" = {action = actions.move-to-monitor-right;}; + # "Mod+Alt+H" = {action = actions.move-to-monitor-left;}; + # "Mod+Alt+J" = {action = actions.move-to-monitor-down;}; + # "Mod+Alt+K" = {action = actions.move-to-monitor-up;}; + # "Mod+Alt+L" = {action = actions.move-to-monitor-right;}; + + "Mod+Home" = {action = actions.focus-column-first;}; + "Mod+End" = {action = actions.focus-column-last;}; + "Mod+Ctrl+Home" = {action = actions.move-column-to-first;}; + "Mod+Ctrl+End" = {action = actions.move-column-to-last;}; + + # Move window out of column + "Mod+Shift+Left" = {action = actions.move-view-left;}; + "Mod+Shift+Down" = {action = actions.move-view-down;}; + "Mod+Shift+Up" = {action = actions.move-view-up;}; + "Mod+Shift+Right" = {action = actions.move-view-right;}; + "Mod+Shift+H" = {action = actions.move-view-left;}; + "Mod+Shift+J" = {action = actions.move-view-down;}; + "Mod+Shift+K" = {action = actions.move-view-up;}; + "Mod+Shift+L" = {action = actions.move-view-right;}; + + "Mod+Ctrl+Shift+F" = {action = actions.toggle-windowed-fullscreen;}; + + # Move to a different monitor + "Mod+Shift+Ctrl+Left" = {action = actions.move-to-monitor-left;}; + "Mod+Shift+Ctrl+Down" = {action = actions.move-to-monitor-down;}; + "Mod+Shift+Ctrl+Up" = {action = actions.move-to-monitor-up;}; + "Mod+Shift+Ctrl+Right" = {action = actions.move-to-monitor-right;}; + "Mod+Shift+Ctrl+H" = {action = actions.move-to-monitor-left;}; + "Mod+Shift+Ctrl+J" = {action = actions.move-to-monitor-down;}; + "Mod+Shift+Ctrl+K" = {action = actions.move-to-monitor-up;}; + "Mod+Shift+Ctrl+L" = {action = actions.move-to-monitor-right;}; + + # Switch to workspace + "Mod+Page_Down" = {action = actions.focus-workspace-down;}; + "Mod+Page_Up" = {action = actions.focus-workspace-up;}; + "Mod+U" = {action = actions.focus-workspace-previous;}; + "Mod+I" = {action = actions.focus-workspace-next;}; + "Mod+Ctrl+Page_Down" = {action = actions.move-column-to-workspace-down;}; + "Mod+Ctrl+Page_Up" = {action = actions.move-column-to-workspace-up;}; + "Mod+Ctrl+U" = {action = actions.move-column-to-workspace-down;}; + "Mod+Ctrl+I" = {action = actions.move-column-to-workspace-up;}; + + # Move window to workspace + "Mod+Shift+Page_Down" = {action = actions.move-view-to-workspace-down;}; + "Mod+Shift+Page_Up" = {action = actions.move-view-to-workspace-up;}; + "Mod+Shift+U" = {action = actions.move-view-to-workspace-previous;}; + "Mod+Shift+I" = {action = actions.move-view-to-workspace-next;}; + + # Switch workspaces using scroll wheel + "Mod+WheelScrollDown" = { + cooldown-ms = 50; + action = actions.focus-workspace-down; + }; + "Mod+WheelScrollUp" = { + cooldown-ms = 50; + action = actions.focus-workspace-up; + }; + "Mod+Ctrl+WheelScrollDown" = { + cooldown-ms = 50; + action = actions.move-column-to-workspace-down; + }; + "Mod+Ctrl+WheelScrollUp" = { + cooldown-ms = 50; + action = actions.move-column-to-workspace-up; + }; + + "Mod+WheelScrollRight" = {action = actions.focus-column-right;}; + "Mod+WheelScrollLeft" = {action = actions.focus-column-left;}; + "Mod+Ctrl+WheelScrollRight" = {action = actions.move-column-right;}; + "Mod+Ctrl+WheelScrollLeft" = {action = actions.move-column-left;}; + + "Mod+Shift+WheelScrollDown" = {action = actions.move-view-to-workspace-down;}; + "Mod+Shift+WheelScrollUp" = {action = actions.move-view-to-workspace-up;}; + "Mod+Ctrl+Shift+WheelScrollDown" = {action = actions.move-view-to-workspace-down;}; + "Mod+Ctrl+Shift+WheelScrollUp" = {action = actions.move-view-to-workspace-up;}; + + # Named workspaces + "Mod+Comma" = {action = actions.focus-workspace-previous;}; + "Mod+Period" = {action = actions.focus-workspace-next;}; + + "Mod+BracketLeft" = {action = actions.consume-or-expel-window-left;}; + "Mod+BracketRight" = {action = actions.consume-or-expel-window-right;}; + + "Mod+R" = {action = actions.switch-preset-column-width;}; + "Mod+Shift+R" = {action = actions.switch-preset-window-height;}; + "Mod+Ctrl+R" = {action = actions.reset-window-height;}; + "Mod+F" = {action = actions.maximize-column;}; + "Mod+Shift+F" = {action = actions.toggle-fullscreen;}; + "Mod+C" = {action = actions.center-column;}; + "Mod+Ctrl+F" = {action = actions.expand-column-to-available-width;}; + + "Mod+V" = {action = actions.toggle-floating;}; + + "Mod+Minus" = {action = actions.decrease-column-width;}; + "Mod+Equal" = {action = actions.increase-column-width;}; + + "Mod+Shift+Minus" = {action = actions.set-column-width 33;}; + "Mod+Shift+Equal" = {action = actions.set-column-width 67;}; + + "Print" = {action = actions.screen-shot {};}; + "Mod+Shift+E" = {action = actions.quit {};}; # Default: no skip-confirmation + "Ctrl+Alt+Delete" = {action = actions.quit {};}; + + "Mod+Shift+P" = {action = actions.lock-screen {};}; + + # Navigate to specific workspaces + # These bindings use the names of the workspaces defined above + "Mod+1" = { + action = actions.focus-workspace "01-browser"; + }; + "Mod+2" = { + action = actions.focus-workspace "02-code"; + }; + "Mod+3" = { + action = actions.focus-workspace "03-chat"; + }; + "Mod+4" = { + action = actions.focus-workspace "04-work"; + }; + }; + }; + + systemd.user.services = { + swaybg = mkService { + Unit.Description = "Wallpaper Chooser"; + Service = { + ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}"; + Restart = "always"; + }; + }; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/home/wms/niri/default.nix b/modules/home/wms/niri/default.nix index ee0eccb..333479a 100644 --- a/modules/home/wms/niri/default.nix +++ b/modules/home/wms/niri/default.nix @@ -1,527 +1,23 @@ { - lib, + options, config, - pkgs, + lib, inputs, + pkgs, ... }: with lib; -with lib.custom; let - cfg = config.wms.niri; - - mkService = recursiveUpdate { - Unit.PartOf = ["graphical-session.target"]; - Unit.After = ["graphical-session.target"]; - Install.WantedBy = ["graphical-session.target"]; - }; - - actions = config.lib.niri.actions; - - niri = "${config.programs.niri.package}/bin/niri"; - - mkColor = color: {inherit color;}; - mkGradient = from: to: { - angle ? 180, - relative-to ? "window", - in' ? null, - }: { - gradient = {inherit from to angle relative-to in';}; - }; - - spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" '' - # Get the day of the week (1=Monday, ..., 7=Sunday) - DAY_OF_WEEK=$(${pkgs.coreutils}/bin/date +%u) - - # Check if it's a weekday (between 1 and 5 inclusive) - if [ "$DAY_OF_WEEK" -ge 1 ] && [ "$DAY_OF_WEEK" -le 5 ]; then - # Execute Slack. Use the full path for robustness. - # Ensure pkgs.slack is available (e.g., via environment.systemPackages) - exec ${pkgs.slack}/bin/slack - fi - # Exit successfully if not a weekday or after exec replaces the process - exit 0 - ''; -in { +with lib.custom; { options.wms.niri = with types; { enable = mkBoolOpt false "Enable niri"; }; - config = mkIf cfg.enable { - programs.niri = { - package = pkgs.niri; + imports = optionals (pkgs.stdenv.isLinux) [ + ./config.nix + ]; - settings = { - # Input device configuration - input = { - keyboard = { - # xkb settings are empty in KDL, using defaults/empty strings - xkb = { - rules = ""; - model = ""; - layout = ""; - variant = ""; - options = null; # Or "" if you prefer explicit empty - }; - }; - - touchpad = { - enable = true; # Not explicitly 'off' in KDL - tap = true; - dwt = false; # Commented out in KDL - dwtp = false; # Commented out in KDL - natural-scroll = true; - # accel-speed = 0.2; # Commented out - # accel-profile = "flat"; # Commented out - # scroll-method = "two-finger"; # Commented out - disabled-on-external-mouse = true; - }; - - mouse = { - enable = true; # Not explicitly 'off' in KDL - natural-scroll = false; # Commented out in KDL - accel-speed = 0.2; - accel-profile = "flat"; - # scroll-method = "no-scroll"; # Commented out - }; - - trackpoint = { - enable = true; # Not explicitly 'off' in KDL - natural-scroll = false; # Commented out - # accel-speed = 0.2; # Commented out - # accel-profile = "flat"; # Commented out - # scroll-method = "on-button-down"; # Commented out - # scroll-button = 273; # Commented out - middle-emulation = false; # Commented out - }; - - warp-mouse-to-focus = true; - - focus-follows-mouse = { - enable = false; # Commented out in KDL - # max-scroll-amount = "0%"; # Only relevant if enabled - }; - }; - - # Output configuration - outputs."DP-1" = { - enable = true; # Not explicitly 'off' - mode = { - width = 2560; - height = 1440; - refresh = 239.972; - }; - variable-refresh-rate = "on-demand"; - scale = 1; - transform = { - # "normal" - rotation = 0; - flipped = false; - }; - position = { - x = 0; - y = 0; - }; - }; - - # Environment variables - environment = { - DISPLAY = ":0"; # for applications using xwayland-satillite - }; - - hotkey-overlay = { - skip-at-startup = true; - }; - - # Layout settings - layout = { - gaps = 16; - center-focused-column = "never"; - - preset-column-widths = [ - {proportion = 0.33333;} - {proportion = 0.5;} - {proportion = 0.66667;} - # { fixed = 1920; } # Example if needed - ]; - - # preset-window-heights = []; # Empty in KDL - - default-column-width = {proportion = 0.5;}; - # default-column-width = {}; # Alternative from KDL comments - - focus-ring = { - enable = true; # Not explicitly 'off' - width = 4; - active = mkGradient colors.blue.hex colors.sky.hex {angle = 45;}; - # active = mkColor "#7fc8ff"; # Alternative solid color from KDL - inactive = mkGradient colors.surface1.hex colors.surface2.hex { - angle = 45; - relative-to = "workspace-view"; - }; - # inactive = mkColor "#505050"; # Alternative solid color from KDL - }; - - border = { - enable = true; # Explicitly 'off' in KDL - width = 0; - active = mkColor colors.blue.hex; - inactive = mkColor colors.base.hex; - # active-gradient = ... # Commented out in KDL - # inactive-gradient = ... # Commented out in KDL - }; - - struts = { - # left = 64; # Commented out - # right = 64; # Commented out - # top = 64; # Commented out - # bottom = 64; # Commented out - }; - }; - - # Spawn processes at startup - spawn-at-startup = [ - {command = ["xwayland-satellite"];} - {command = ["${pkgs.writeShellScriptBin "thunderbird-delayed" ''sleep 5; thunderbird''}/bin/thunderbird-delayed"];} - {command = ["${pkgs.writeShellScriptBin "zen-delayed" ''sleep 5; zen''}/bin/zen-delayed"];} - {command = ["vesktop"];} - {command = ["spotify"];} - - {command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];} - ]; - - # Prefer server-side decorations - prefer-no-csd = true; - - # Screenshot path - screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"; - # screenshot-path = null; # Alternative from KDL comments - - # Animation settings - animations = { - enable = true; # Not explicitly 'off' - # slowdown = 3.0; # Commented out - # Individual animation settings can be added here if needed - }; - - debug = { - wait-for-frame-completion-in-pipewire = []; - }; - - layer-rules = [ - { - matches = [ - {namespace = "notifications$";} - ]; - - block-out-from = "screen-capture"; - } - ]; - - # Window rules - window-rules = [ - # Password manager rule (example from KDL comments) - { - matches = [ - {app-id = "^org\\.keepassxc\\.KeePassXC$";} - {app-id = "^org\\.gnome\\.World\\.Secrets$";} - {app-id = "^1Password$";} - {app-id = "^thunderbird$";} - {app-id = "^signal$";} - {app-id = "^vesktop$";} - {app-id = "^slack$";} - ]; - block-out-from = "screen-capture"; - } - # Rounded corners rule (example from KDL comments) - { - # No matches means apply to all windows - geometry-corner-radius = { - top-left = 12.0; - top-right = 12.0; - bottom-left = 12.0; - bottom-right = 12.0; - }; - clip-to-geometry = true; - } - # Window cast target rule - { - matches = [{is-window-cast-target = true;}]; - focus-ring = { - active = mkColor colors.red.hex; - inactive = mkColor (lerpColor colors.red.hex colors.base.hex 0.5); - }; - shadow = { - # Only color is specified in KDL rule - color = "#7d0d2d70"; - }; - tab-indicator = { - active = mkColor colors.red.hex; - inactive = mkColor (lerpColor colors.red.hex colors.base.hex 0.5); - }; - } - - # fix steam popups holy fuck they're annoying - { - matches = [ - {app-id = "^steam$";} - ]; - - excludes = [{title = "^Steam$";}]; - - open-floating = true; - - open-focused = false; - - default-floating-position = { - relative-to = "bottom-right"; - x = 16; - y = 16; - }; - } - { - matches = [ - { - app-id = "^cyberpunk2077.exe$"; - } - { - app-id = "^Overwatch2.exe$"; - } - ]; - - variable-refresh-rate = true; - } - { - matches = [ - { - at-startup = true; - app-id = "^zen$"; - } - ]; - - open-maximized = true; - - open-on-workspace = "browser"; - } - { - matches = [ - { - at-startup = true; - app-id = "^spotify$"; - } - { - at-startup = true; - app-id = "^vesktop$"; - } - ]; - - open-on-workspace = "chat"; - } - { - matches = [ - { - at-startup = true; - app-id = "^Slack$"; - } - { - at-startup = true; - app-id = "^thunderbird$"; - } - ]; - - open-on-workspace = "work"; - } - ]; - - workspaces."01-browser" = { - name = "browser"; - }; - workspaces."02-code" = { - name = "code"; - }; - workspaces."03-chat" = { - name = "chat"; - }; - workspaces."04-work" = { - name = "work"; - }; - - # Keybindings - binds = - { - "Mod+Shift+Slash" = {action = actions.show-hotkey-overlay;}; - - "Mod+Return" = {action = actions.spawn "kitty";}; - "Mod+D" = {action = actions.spawn "fuzzel";}; - "Super+Alt+L" = {action = actions.spawn "swaylock";}; - # "Mod+T" = { action = actions.spawn "bash" "-c" "notify-send hello && exec alacritty"; }; - - # "Mod+S" = {action = actions.set-dynamic-cast-window;}; - # - # "Mod+Shift+S" = {action = actions.set-dynamic-cast-monitor;}; - # - # "Mod+Z" = {action = actions.clear-dynamic-cast-target;}; - - "XF86AudioRaiseVolume" = { - allow-when-locked = true; - action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; - }; - "XF86AudioLowerVolume" = { - allow-when-locked = true; - action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; - }; - "XF86AudioMute" = { - allow-when-locked = true; - action = actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; - }; - "XF86AudioMicMute" = { - allow-when-locked = true; - action = - actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; - }; - - "Mod+Q" = {action = actions.close-window;}; - - "Mod+Left" = {action = actions.focus-column-left;}; - "Mod+Down" = {action = actions.focus-window-down;}; - "Mod+Up" = {action = actions.focus-window-up;}; - "Mod+Right" = {action = actions.focus-column-right;}; - "Mod+H" = {action = actions.focus-column-left;}; - "Mod+J" = {action = actions.focus-window-down;}; - "Mod+K" = {action = actions.focus-window-up;}; - "Mod+L" = {action = actions.focus-column-right;}; - - "Mod+Ctrl+Left" = {action = actions.move-column-left;}; - "Mod+Ctrl+Down" = {action = actions.move-window-down;}; - "Mod+Ctrl+Up" = {action = actions.move-window-up;}; - "Mod+Ctrl+Right" = {action = actions.move-column-right;}; - "Mod+Ctrl+H" = {action = actions.move-column-left;}; - "Mod+Ctrl+J" = {action = actions.move-window-down;}; - "Mod+Ctrl+K" = {action = actions.move-window-up;}; - "Mod+Ctrl+L" = {action = actions.move-column-right;}; - - # Alternative commands (commented out in KDL) - # "Mod+J" = { action = actions.focus-window-or-workspace-down; }; - # "Mod+K" = { action = actions.focus-window-or-workspace-up; }; - # "Mod+Ctrl+J" = { action = actions.move-window-down-or-to-workspace-down; }; - # "Mod+Ctrl+K" = { action = actions.move-window-up-or-to-workspace-up; }; - - "Mod+Home" = {action = actions.focus-column-first;}; - "Mod+End" = {action = actions.focus-column-last;}; - "Mod+Ctrl+Home" = {action = actions.move-column-to-first;}; - "Mod+Ctrl+End" = {action = actions.move-column-to-last;}; - - "Mod+Shift+Left" = {action = actions.focus-monitor-left;}; - "Mod+Shift+Down" = {action = actions.focus-monitor-down;}; - "Mod+Shift+Up" = {action = actions.focus-monitor-up;}; - "Mod+Shift+Right" = {action = actions.focus-monitor-right;}; - "Mod+Shift+H" = {action = actions.focus-monitor-left;}; - "Mod+Shift+J" = {action = actions.focus-workspace-down;}; - "Mod+Shift+K" = {action = actions.focus-workspace-up;}; - "Mod+Shift+L" = {action = actions.focus-monitor-right;}; - - "Mod+Ctrl+Shift+F" = {action = actions.toggle-windowed-fullscreen;}; - - "Mod+Shift+Ctrl+Left" = {action = actions.move-column-to-monitor-left;}; - "Mod+Shift+Ctrl+Down" = {action = actions.move-column-to-monitor-down;}; - "Mod+Shift+Ctrl+Up" = {action = actions.move-column-to-monitor-up;}; - "Mod+Shift+Ctrl+Right" = {action = actions.move-column-to-monitor-right;}; - "Mod+Shift+Ctrl+H" = {action = actions.move-column-to-monitor-left;}; - "Mod+Shift+Ctrl+J" = {action = actions.move-column-to-monitor-down;}; - "Mod+Shift+Ctrl+K" = {action = actions.move-column-to-monitor-up;}; - "Mod+Shift+Ctrl+L" = {action = actions.move-column-to-monitor-right;}; - - "Mod+Page_Down" = {action = actions.focus-workspace-down;}; - "Mod+Page_Up" = {action = actions.focus-workspace-up;}; - "Mod+U" = {action = actions.focus-workspace-down;}; - "Mod+I" = {action = actions.focus-workspace-up;}; - "Mod+Ctrl+Page_Down" = {action = actions.move-column-to-workspace-down;}; - "Mod+Ctrl+Page_Up" = {action = actions.move-column-to-workspace-up;}; - "Mod+Ctrl+U" = {action = actions.move-column-to-workspace-down;}; - "Mod+Ctrl+I" = {action = actions.move-column-to-workspace-up;}; - - "Mod+Shift+Page_Down" = {action = actions.move-workspace-down;}; - "Mod+Shift+Page_Up" = {action = actions.move-workspace-up;}; - "Mod+Shift+U" = {action = actions.move-workspace-down;}; - "Mod+Shift+I" = {action = actions.move-workspace-up;}; - - "Mod+WheelScrollDown" = { - cooldown-ms = 150; - action = actions.focus-workspace-down; - }; - "Mod+WheelScrollUp" = { - cooldown-ms = 150; - action = actions.focus-workspace-up; - }; - "Mod+Ctrl+WheelScrollDown" = { - cooldown-ms = 150; - action = actions.move-column-to-workspace-down; - }; - "Mod+Ctrl+WheelScrollUp" = { - cooldown-ms = 150; - action = actions.move-column-to-workspace-up; - }; - - "Mod+WheelScrollRight" = {action = actions.focus-column-right;}; - "Mod+WheelScrollLeft" = {action = actions.focus-column-left;}; - "Mod+Ctrl+WheelScrollRight" = {action = actions.move-column-right;}; - "Mod+Ctrl+WheelScrollLeft" = {action = actions.move-column-left;}; - - "Mod+Shift+WheelScrollDown" = {action = actions.focus-column-right;}; - "Mod+Shift+WheelScrollUp" = {action = actions.focus-column-left;}; - "Mod+Ctrl+Shift+WheelScrollDown" = {action = actions.move-column-right;}; - "Mod+Ctrl+Shift+WheelScrollUp" = {action = actions.move-column-left;}; - - "Mod+Comma" = {action = actions.consume-window-into-column;}; - "Mod+Period" = {action = actions.expel-window-from-column;}; - - "Mod+BracketLeft" = {action = actions.consume-or-expel-window-left;}; - "Mod+BracketRight" = {action = actions.consume-or-expel-window-right;}; - - "Mod+R" = {action = actions.switch-preset-column-width;}; - "Mod+Shift+R" = {action = actions.switch-preset-window-height;}; - "Mod+Ctrl+R" = {action = actions.reset-window-height;}; - "Mod+F" = {action = actions.maximize-column;}; - "Mod+Shift+F" = {action = actions.fullscreen-window;}; - "Mod+C" = {action = actions.center-column;}; - "Mod+Ctrl+F" = {action = actions.expand-column-to-available-width;}; - - "Mod+V" = {action = actions.toggle-window-floating;}; - - "Mod+Minus" = {action = actions.set-column-width "-10%";}; - "Mod+Equal" = {action = actions.set-column-width "+10%";}; - - "Mod+Shift+Minus" = {action = actions.set-window-height "-10%";}; - "Mod+Shift+Equal" = {action = actions.set-window-height "+10%";}; - - "Print" = {action = actions.screenshot {};}; # Empty attrset for default args - "Mod+Shift+E" = {action = actions.quit {};}; # Default: no skip-confirmation - "Ctrl+Alt+Delete" = {action = actions.quit {};}; - - "Mod+Shift+P" = {action = actions.power-off-monitors;}; - } - // lib.attrsets.listToAttrs (builtins.concatMap (i: - with actions; [ - { - name = "Mod+${toString i}"; - value.action = focus-workspace i; - } - # FIXME: use this action directly untril sodiboo/niri-flake#1018 is fixed. - { - name = "Mod+Shift+${toString i}"; - value.action = spawn [niri "msg" "action" "move-column-to-workspace" (toString i)]; - } - ]) (lib.range 1 9)); - }; - }; - - systemd.user.services = { - swaybg = mkService { - Unit.Description = "Wallpaper Chooser"; - Service = { - ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}"; - Restart = "always"; - }; - }; - }; + # For Darwin, just provide empty configuration + config = mkIf (config.wms.niri.enable && pkgs.stdenv.isDarwin) { + # Empty configuration for Darwin - module is effectively disabled }; -} +} \ No newline at end of file diff --git a/modules/home/wms/river/default.nix b/modules/home/wms/river/default.nix index 04a14bb..a4da2e2 100644 --- a/modules/home/wms/river/default.nix +++ b/modules/home/wms/river/default.nix @@ -14,7 +14,7 @@ in { enable = mkBoolOpt false "Enable River WM"; }; - config = mkIf cfg.enable { + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { wayland.windowManager.river = { enable = true; settings = { diff --git a/modules/home/wms/sway/default.nix b/modules/home/wms/sway/default.nix index 08fe187..8c71463 100644 --- a/modules/home/wms/sway/default.nix +++ b/modules/home/wms/sway/default.nix @@ -19,7 +19,7 @@ in { enable = mkBoolOpt false "Enable Sway"; }; - config = mkIf cfg.enable { + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { wayland.windowManager.sway = { enable = true; xwayland = true; diff --git a/systems/aarch64-darwin/mercury/default.nix b/systems/aarch64-darwin/mercury/default.nix new file mode 100644 index 0000000..de08988 --- /dev/null +++ b/systems/aarch64-darwin/mercury/default.nix @@ -0,0 +1,31 @@ +{pkgs, ...}:{ + # List packages installed in system profile. To search by name, run: + # $ nix-env -qaP | grep wget + environment.systemPackages = + [ pkgs.vim + ]; + + # Auto upgrade nix package + nix.package = pkgs.nix; + + # Necessary for using flakes on this system. + nix.settings.experimental-features = "nix-command flakes"; + + # Create /etc/zshrc that loads the nix-darwin environment. + programs.zsh.enable = true; # default shell on catalina + programs.fish.enable = true; + + # Used for backwards compatibility, please read the changelog before changing. + # $ darwin-rebuild changelog + system.stateVersion = 4; + + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + users.users.zack = { + name = "zack"; + home = "/Users/zack"; + }; + + # The platform the configuration will be used on. + nixpkgs.hostPlatform = "aarch64-darwin"; +}