diff --git a/modules/applications/1password/darwin.nix b/modules/applications/1password/darwin.nix new file mode 100644 index 0000000..a01130a --- /dev/null +++ b/modules/applications/1password/darwin.nix @@ -0,0 +1,8 @@ +{ + # The macOS app must live in /Applications for its background integrations, + # including the SSH agent, to work correctly. + homebrew = { + enable = true; + casks = [ "1password" ]; + }; +} diff --git a/modules/applications/1password/home.nix b/modules/applications/1password/home.nix new file mode 100644 index 0000000..c574d09 --- /dev/null +++ b/modules/applications/1password/home.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + home.packages = [ + pkgs._1password-cli + ] + ++ pkgs.lib.optionals pkgs.stdenv.hostPlatform.isLinux [ pkgs._1password-gui ]; +} diff --git a/modules/applications/1password/nixos.nix b/modules/applications/1password/nixos.nix new file mode 100644 index 0000000..910279b --- /dev/null +++ b/modules/applications/1password/nixos.nix @@ -0,0 +1,12 @@ +{ primaryUser, lib, ... }: +{ + programs._1password.enable = true; + programs._1password-gui = { + enable = true; + polkitPolicyOwners = [ primaryUser ]; + }; + + programs.ssh.startAgent = lib.mkForce false; + programs.gnupg.agent.enableSSHSupport = lib.mkForce false; + services.gnome.gcr-ssh-agent.enable = lib.mkForce false; +} diff --git a/modules/applications/arduino/home.nix b/modules/applications/arduino/home.nix new file mode 100644 index 0000000..b0ff217 --- /dev/null +++ b/modules/applications/arduino/home.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.arduino-cli ]; +} diff --git a/modules/applications/arduino/nixos.nix b/modules/applications/arduino/nixos.nix new file mode 100644 index 0000000..731e382 --- /dev/null +++ b/modules/applications/arduino/nixos.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: +let + arduinoIdeX11 = pkgs.arduino-ide.overrideAttrs (old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.makeWrapper ]; + + postFixup = (old.postFixup or "") + '' + wrapProgram $out/bin/arduino-ide \ + --add-flags "--ozone-platform=x11" + ''; + }); +in +{ + environment.systemPackages = [ arduinoIdeX11 ]; +} diff --git a/modules/applications/chrome/home.nix b/modules/applications/chrome/home.nix new file mode 100644 index 0000000..d58c4c8 --- /dev/null +++ b/modules/applications/chrome/home.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.google-chrome ]; +} diff --git a/modules/applications/chrome/nixos.nix b/modules/applications/chrome/nixos.nix new file mode 100644 index 0000000..30e26a5 --- /dev/null +++ b/modules/applications/chrome/nixos.nix @@ -0,0 +1,25 @@ +{ pkgs, ... }: +let + chromeLauncher = pkgs.makeDesktopItem { + name = "google-chrome"; + desktopName = "Google Chrome"; + genericName = "Web Browser"; + exec = "${pkgs.google-chrome}/bin/google-chrome-stable --enable-features=TouchpadOverscrollHistoryNavigation %U"; + icon = "google-chrome"; + terminal = false; + categories = [ + "Network" + "WebBrowser" + ]; + startupNotify = true; + }; +in +{ + environment.systemPackages = [ chromeLauncher ]; + + xdg.mime.defaultApplications = { + "text/html" = "google-chrome.desktop"; + "x-scheme-handler/http" = "google-chrome.desktop"; + "x-scheme-handler/https" = "google-chrome.desktop"; + }; +} diff --git a/modules/applications/codex-desktop/darwin.nix b/modules/applications/codex-desktop/darwin.nix new file mode 100644 index 0000000..2a08744 --- /dev/null +++ b/modules/applications/codex-desktop/darwin.nix @@ -0,0 +1,8 @@ +{ + # The former Codex app cask is deprecated in favor of ChatGPT, whose desktop + # application includes the current Codex experience on macOS. + homebrew = { + enable = true; + casks = [ "chatgpt" ]; + }; +} diff --git a/modules/applications/codex-desktop/meta.nix b/modules/applications/codex-desktop/meta.nix new file mode 100644 index 0000000..8e0244e --- /dev/null +++ b/modules/applications/codex-desktop/meta.nix @@ -0,0 +1,10 @@ +{ inputs, ... }: +{ + description = "Codex Desktop for Linux"; + + includes = [ "applications.codex" ]; + + imports.nixos = [ + inputs.codex-desktop-linux.nixosModules.default + ]; +} diff --git a/modules/applications/codex-desktop/nixos.nix b/modules/applications/codex-desktop/nixos.nix new file mode 100644 index 0000000..c53538e --- /dev/null +++ b/modules/applications/codex-desktop/nixos.nix @@ -0,0 +1,37 @@ +{ + inputs, + lib, + pkgs, + ... +}: +let + codexCliPackage = inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.codex; + codexDesktopPackage = + inputs.codex-desktop-linux.packages.${pkgs.stdenv.hostPlatform.system}.codex-desktop-computer-use-ui; + launcher = pkgs.makeDesktopItem { + name = "codex"; + desktopName = "Codex"; + genericName = "ChatGPT Desktop"; + comment = "Run Codex Desktop"; + exec = "env CODEX_CLI_PATH=${lib.getExe' codexCliPackage "codex"} BAMF_DESKTOP_FILE_HINT=codex.desktop CHROME_DESKTOP=codex.desktop ${lib.getExe' codexDesktopPackage "codex-desktop"} %u"; + icon = "codex-desktop"; + terminal = false; + categories = [ "Development" ]; + startupNotify = true; + startupWMClass = "codex-desktop"; + actions.new-window = { + name = "New Window"; + exec = "env CODEX_CLI_PATH=${lib.getExe' codexCliPackage "codex"} BAMF_DESKTOP_FILE_HINT=codex.desktop CHROME_DESKTOP=codex.desktop CODEX_MULTI_LAUNCH=1 ${lib.getExe' codexDesktopPackage "codex-desktop"} --new-instance"; + }; + }; +in +{ + programs.codexDesktopLinux = { + enable = true; + package = codexDesktopPackage; + cliPackage = codexCliPackage; + computerUseUi.enable = true; + }; + + environment.systemPackages = [ launcher ]; +} diff --git a/modules/applications/codex/home.nix b/modules/applications/codex/home.nix new file mode 100644 index 0000000..410f6ce --- /dev/null +++ b/modules/applications/codex/home.nix @@ -0,0 +1,6 @@ +{ inputs, pkgs, ... }: +{ + home.packages = [ + inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.codex + ]; +} diff --git a/modules/applications/direnv/home.nix b/modules/applications/direnv/home.nix new file mode 100644 index 0000000..2b51c9d --- /dev/null +++ b/modules/applications/direnv/home.nix @@ -0,0 +1,6 @@ +{ + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; +} diff --git a/modules/applications/discord/home.nix b/modules/applications/discord/home.nix new file mode 100644 index 0000000..b5af79f --- /dev/null +++ b/modules/applications/discord/home.nix @@ -0,0 +1,3 @@ +{ + programs.vesktop.enable = true; +} diff --git a/modules/applications/docker/darwin.nix b/modules/applications/docker/darwin.nix new file mode 100644 index 0000000..d4d83f7 --- /dev/null +++ b/modules/applications/docker/darwin.nix @@ -0,0 +1,6 @@ +{ + homebrew = { + enable = true; + casks = [ "orbstack" ]; + }; +} diff --git a/modules/applications/docker/home.nix b/modules/applications/docker/home.nix new file mode 100644 index 0000000..7e8d373 --- /dev/null +++ b/modules/applications/docker/home.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + home.packages = [ + pkgs.docker-client + pkgs.oxker + ]; +} diff --git a/modules/applications/docker/meta.nix b/modules/applications/docker/meta.nix new file mode 100644 index 0000000..607eae6 --- /dev/null +++ b/modules/applications/docker/meta.nix @@ -0,0 +1,5 @@ +{ + description = "Docker command-line client and NixOS daemon"; + + includes = [ "services.docker" ]; +} diff --git a/modules/applications/gnome/home.nix b/modules/applications/gnome/home.nix new file mode 100644 index 0000000..99a0ff3 --- /dev/null +++ b/modules/applications/gnome/home.nix @@ -0,0 +1,56 @@ +{ pkgs, lib, ... }: +lib.mkIf pkgs.stdenv.hostPlatform.isLinux { + dconf.settings = { + "org/gnome/desktop/sound" = { + event-sounds = false; + input-feedback-sounds = false; + }; + "org/gnome/desktop/wm/keybindings" = { + close = [ "q" ]; + show-desktop = [ ]; + }; + "org/gnome/settings-daemon/plugins/media-keys" = { + home = [ ]; + screensaver = [ "l" ]; + custom-keybindings = [ + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/" + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/" + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/" + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/" + ]; + }; + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = { + name = "Open Terminal"; + command = "ghostty"; + binding = "t"; + }; + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = { + name = "Run Application"; + command = "vicinae toggle"; + binding = "d"; + }; + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2" = { + name = "Open File Manager"; + command = "nautilus --new-window"; + binding = "e"; + }; + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3" = { + name = "Clipboard History"; + command = "vicinae vicinae://extensions/vicinae/clipboard/history"; + binding = "v"; + }; + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4" = { + name = "Log Out"; + command = "gnome-session-quit --logout --no-prompt"; + binding = "e"; + }; + "org/gnome/shell".favorite-apps = [ + "google-chrome.desktop" + "code.desktop" + "com.mitchellh.ghostty.desktop" + "slack.desktop" + "vesktop.desktop" + ]; + }; +} diff --git a/modules/applications/gnome/nixos.nix b/modules/applications/gnome/nixos.nix new file mode 100644 index 0000000..501cbd7 --- /dev/null +++ b/modules/applications/gnome/nixos.nix @@ -0,0 +1,10 @@ +{ pkgs, lib, ... }: +{ + services.desktopManager.gnome.enable = true; + services.displayManager.gdm.enable = lib.mkForce false; + + environment.systemPackages = [ + pkgs.gnome-tweaks + pkgs.gnome-extension-manager + ]; +} diff --git a/modules/applications/grok/home.nix b/modules/applications/grok/home.nix new file mode 100644 index 0000000..7052a4d --- /dev/null +++ b/modules/applications/grok/home.nix @@ -0,0 +1,9 @@ +{ inputs, pkgs, ... }: +let + grok = inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.grok.overrideAttrs (_: { + versionCheckProgram = "${placeholder "out"}/libexec/grok/grok-launcher"; + }); +in +{ + home.packages = [ grok ]; +} diff --git a/modules/applications/kde/darwin.nix b/modules/applications/kde/darwin.nix new file mode 100644 index 0000000..a38ac33 --- /dev/null +++ b/modules/applications/kde/darwin.nix @@ -0,0 +1,6 @@ +{ + homebrew = { + enable = true; + casks = [ "kde-connect" ]; + }; +} diff --git a/modules/applications/kde/nixos.nix b/modules/applications/kde/nixos.nix new file mode 100644 index 0000000..0cb7c87 --- /dev/null +++ b/modules/applications/kde/nixos.nix @@ -0,0 +1,3 @@ +{ + programs.kdeconnect.enable = true; +} diff --git a/modules/applications/nautilus/home.nix b/modules/applications/nautilus/home.nix new file mode 100644 index 0000000..d24dd51 --- /dev/null +++ b/modules/applications/nautilus/home.nix @@ -0,0 +1,8 @@ +{ pkgs, lib, ... }: +lib.mkIf pkgs.stdenv.hostPlatform.isLinux { + home.packages = [ + pkgs.nautilus + pkgs.gvfs + pkgs.sushi + ]; +} diff --git a/modules/applications/nh/home.nix b/modules/applications/nh/home.nix new file mode 100644 index 0000000..e078327 --- /dev/null +++ b/modules/applications/nh/home.nix @@ -0,0 +1,5 @@ +{ config, pkgs, ... }: +{ + home.packages = [ pkgs.nh ]; + home.sessionVariables.NH_FLAKE = "${config.home.homeDirectory}/dotfiles"; +} diff --git a/modules/applications/nh/nixos.nix b/modules/applications/nh/nixos.nix new file mode 100644 index 0000000..196c3f5 --- /dev/null +++ b/modules/applications/nh/nixos.nix @@ -0,0 +1,12 @@ +{ primaryUser, ... }: +{ + programs.nh = { + enable = true; + flake = "/home/${primaryUser}/dotfiles"; + clean = { + enable = true; + dates = "weekly"; + extraArgs = "--keep-since 14d --keep 10"; + }; + }; +} diff --git a/modules/applications/opencode/home.nix b/modules/applications/opencode/home.nix new file mode 100644 index 0000000..da192d5 --- /dev/null +++ b/modules/applications/opencode/home.nix @@ -0,0 +1,6 @@ +{ inputs, pkgs, ... }: +{ + home.packages = [ + inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.opencode + ]; +} diff --git a/modules/applications/slack/home.nix b/modules/applications/slack/home.nix new file mode 100644 index 0000000..4ff5f05 --- /dev/null +++ b/modules/applications/slack/home.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.slack ]; +} diff --git a/modules/applications/vicinae/home.nix b/modules/applications/vicinae/home.nix new file mode 100644 index 0000000..491ecd4 --- /dev/null +++ b/modules/applications/vicinae/home.nix @@ -0,0 +1,56 @@ +{ + inputs, + lib, + pkgs, + ... +}: +let + isLinux = pkgs.stdenv.hostPlatform.isLinux; + extensions = inputs.vicinae-extensions.packages.${pkgs.stdenv.hostPlatform.system}; +in +{ + programs.vicinae = { + enable = true; + systemd = lib.mkIf isLinux { + enable = true; + autoStart = true; + environment.USE_LAYER_SHELL = 1; + }; + settings = { + font.size = 11; + close_on_focus_loss = true; + consider_preedit = true; + pop_to_root_on_close = true; + favicon_service = "twenty"; + search_files_in_root = true; + theme = { + light = { + name = "dracula"; + icon_theme = "default"; + }; + dark = { + name = "vicinae-light"; + icon_theme = "default"; + }; + }; + window = { + csd = true; + opacity = 0.95; + rounding = 10; + }; + }; + extensions = + with extensions; + [ + nix + zoxide-recent-directories + ssh + port-killer + ] + ++ lib.optionals isLinux [ + power-profile + niri + noctalia-shell-wallpaper-selector + ]; + }; +} diff --git a/modules/applications/vicinae/meta.nix b/modules/applications/vicinae/meta.nix new file mode 100644 index 0000000..0f77d20 --- /dev/null +++ b/modules/applications/vicinae/meta.nix @@ -0,0 +1,8 @@ +{ inputs, ... }: +{ + description = "Vicinae application launcher"; + + imports.home = [ + inputs.vicinae.homeManagerModules.default + ]; +} diff --git a/modules/applications/yazi/home.nix b/modules/applications/yazi/home.nix new file mode 100644 index 0000000..362cad5 --- /dev/null +++ b/modules/applications/yazi/home.nix @@ -0,0 +1,134 @@ +{ pkgs, lib, ... }: +let + isLinux = pkgs.stdenv.hostPlatform.isLinux; +in +{ + programs.yazi = { + enable = true; + enableZshIntegration = true; + shellWrapperName = "y"; + package = pkgs.yazi.override { + _7zz = pkgs._7zz-rar; + }; + extraPackages = + with pkgs; + [ + file + ffmpeg + _7zz-rar + jq + poppler + fd + ripgrep + fzf + zoxide + resvg + imagemagick + ] + ++ lib.optionals isLinux [ + wl-clipboard + xdg-utils + ]; + plugins = { + "full-border" = { + package = pkgs.yaziPlugins.full-border; + setup = true; + }; + "toggle-pane" = pkgs.yaziPlugins.toggle-pane; + chmod = pkgs.yaziPlugins.chmod; + }; + keymap.mgr.prepend_keymap = [ + { + on = "T"; + run = "plugin toggle-pane max-preview"; + desc = "Maximize or restore preview pane"; + } + { + on = [ + "c" + "m" + ]; + run = "plugin chmod"; + desc = "Chmod selected files"; + } + ]; + settings = { + mgr = { + ratio = [ + 1 + 3 + 4 + ]; + sort_by = "natural"; + sort_sensitive = false; + sort_dir_first = true; + sort_reverse = false; + linemode = "size"; + show_hidden = true; + show_symlink = true; + scrolloff = 8; + }; + preview = { + wrap = "yes"; + tab_size = 2; + }; + opener = { + edit = [ + { + run = "${pkgs.neovim}/bin/nvim %s"; + block = true; + for = "unix"; + } + ]; + open = [ + { + run = "${pkgs.xdg-utils}/bin/xdg-open %s"; + orphan = true; + desc = "Open"; + for = "linux"; + } + { + run = "open %s"; + orphan = true; + desc = "Open"; + for = "macos"; + } + ]; + }; + open.prepend_rules = [ + { + mime = "text/*"; + use = "edit"; + } + { + url = "*.nix"; + use = "edit"; + } + { + url = "*.json"; + use = "edit"; + } + { + url = "*.md"; + use = "edit"; + } + { + mime = "image/*"; + use = "open"; + } + { + mime = "video/*"; + use = "open"; + } + { + mime = "audio/*"; + use = "open"; + } + { + mime = "application/pdf"; + use = "open"; + } + ]; + }; + }; +} diff --git a/modules/applications/zoom/home.nix b/modules/applications/zoom/home.nix new file mode 100644 index 0000000..78c6b5d --- /dev/null +++ b/modules/applications/zoom/home.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.zoom-us ]; +} diff --git a/modules/applications/zoxide/home.nix b/modules/applications/zoxide/home.nix new file mode 100644 index 0000000..f6fac1b --- /dev/null +++ b/modules/applications/zoxide/home.nix @@ -0,0 +1,6 @@ +{ + programs.zoxide = { + enable = true; + enableZshIntegration = true; + }; +} diff --git a/modules/hardwares/intel-driver/nixos.nix b/modules/hardwares/intel-driver/nixos.nix new file mode 100644 index 0000000..0f67851 --- /dev/null +++ b/modules/hardwares/intel-driver/nixos.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + hardware.graphics.extraPackages = with pkgs; [ + intel-media-driver + intel-vaapi-driver + libva-vdpau-driver + libvdpau-va-gl + ]; +} diff --git a/modules/services/docker/nixos.nix b/modules/services/docker/nixos.nix new file mode 100644 index 0000000..5dbb2c1 --- /dev/null +++ b/modules/services/docker/nixos.nix @@ -0,0 +1,17 @@ +{ primaryUser, ... }: +{ + virtualisation.docker = { + enable = true; + autoPrune = { + enable = true; + dates = "weekly"; + }; + daemon.settings = { + ipv6 = true; + "fixed-cidr-v6" = "fd00:30::/64"; + ip6tables = true; + }; + }; + + users.users.${primaryUser}.extraGroups = [ "docker" ]; +}