{ config, lib, pkgs, ... }: with lib; let cfg = config.custom.programs.nautilus; in { options.custom.programs.nautilus = { enable = mkOption {default = false;}; git = mkOption {default = false;}; index = mkOption {default = true;}; service = mkOption {default = false;}; terminal = mkOption {default = "kitty";}; }; config = mkIf cfg.enable { # TODO: Use module when completed # https://github.com/NixOS/nixpkgs/pull/319535 environment.systemPackages = with pkgs; [nautilus]; services = { gvfs.enable = true; # Trash dependency gnome = { sushi.enable = true; # Quick preview with spacebar } // optionalAttrs (versionAtLeast version "24.11") { # File indexing localsearch.enable = cfg.index; tinysparql.enable = cfg.index; }; }; # Alternative fix to services.gnome.core-utilities.enable # https://github.com/NixOS/nixpkgs/pull/240780 #?? echo $NAUTILUS_4_EXTENSION_DIR programs.nautilus-open-any-terminal = { enable = true; terminal = cfg.terminal; }; home-manager.users.${config.custom.username} = { # HACK: Partially fix startup delay with background service until module is available systemd.user.services = let nautilus = "${pkgs.nautilus}/bin/nautilus"; turtle_service = "${pkgs.turtle}/bin/turtle_service"; in { nautilus = mkIf cfg.service { Unit.Description = "GNOME Files Background Service"; Install.WantedBy = ["graphical-session.target"]; Service = { BusName = "org.gnome.Nautilus"; ExecStart = "${nautilus} --gapplication-service"; ExecStop = "${nautilus} --quit"; Restart = "always"; #!! Benign exceptions cause nautilus to exit Type = "dbus"; }; }; # TODO: Check for module # BUG: Benign AttributeError when scanning on nautilus launch # Git integration dependency turtle = mkIf cfg.git { Unit.Description = "Turtle Background Service"; Install.WantedBy = ["graphical-session.target"]; Service = { BusName = "de.philippun1.turtle"; ExecStart = turtle_service; Restart = "always"; Type = "dbus"; }; }; }; }; }; }