diff --git a/config/hypr/.config/hypr/hyprland/keybinds.conf b/config/hypr/.config/hypr/hyprland/keybinds.conf index b8078d3..3614df7 100755 --- a/config/hypr/.config/hypr/hyprland/keybinds.conf +++ b/config/hypr/.config/hypr/hyprland/keybinds.conf @@ -169,7 +169,7 @@ bind = Super+Shift, Page_Up, movetoworkspace, -1 # [hidden] bind = Super+Alt, S, movetoworkspacesilent, special:s bind = Super, P, pin bind = Alt, Tab, cyclenext -bind = Super, Tab, hyprexpo:expo, toggle # can be: toggle, select, off/disable or on/enable +# bind = Super, Tab, hyprexpo:expo, toggle # can be: toggle, select, off/disable or on/enable bind = Super+Ctrl, T, exec, workspace-new # Create new workspace bind = Super, M, exit diff --git a/config/niri/.config/niri/config.kdl b/config/niri/.config/niri/config.kdl index bd975f7..b8cf080 100644 --- a/config/niri/.config/niri/config.kdl +++ b/config/niri/.config/niri/config.kdl @@ -296,6 +296,7 @@ debug { render-drm-device "/dev/dri/card0" } +// screenshot-path "~/Pictures/Screenshots/niri_screenshot_%Y-%m-%d_%H-%M-%S.png" screenshot-path "~/Pictures/Screenshots/.niri_screenshot.png" // gestures { diff --git a/config/scripts/.local/scripts/screenshot-script b/config/scripts/.local/scripts/screenshot-script index 9aed1c4..7846671 100755 --- a/config/scripts/.local/scripts/screenshot-script +++ b/config/scripts/.local/scripts/screenshot-script @@ -6,7 +6,7 @@ # # Requirements: # - hyprshot (for Hyprland) -# - - (niri has screenshot functionality built-in) +# - grim + slurp (for Niri) # - gradia (for editing) # - glib bindings for python @@ -48,11 +48,11 @@ def wait_until_file_exists(filepath: Path, timeout: int = 1): def take_screenshot(filepath: Path, typeStr: str): - lock_fd = open("/tmp/screenshot-script.lock", "w") + lockFD = open("/tmp/screenshot-script.lock", "w") try: - fcntl.flock(lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB) + fcntl.flock(lockFD, fcntl.LOCK_EX | fcntl.LOCK_NB) except IOError: - lock_fd.close() + lockFD.close() raise RuntimeError("Another screenshot is currently being taken.") try: @@ -70,19 +70,23 @@ def take_screenshot(filepath: Path, typeStr: str): raise RuntimeError("Failed to take screenshot: hyprshot command failed.") if not wait_until_file_exists(filepath): raise RuntimeError("Failed to take screenshot: output file not found after hyprshot command.") + elif "niri" in currentDesktop: + niriScreenshotPath = SCREENSHOT_DIR / ".niri_screenshot.png" cmd = { + # niri's built-in screenshot commands are asynchronous, which does not wait for the user to select the area. + # and the selection ui is drawn inside of niri without its state exposed to external programs. + # so we use grim + slurp for area mode and niri's built-in commands for others. ScreenshotType.FULL: "niri msg action screenshot-screen", - ScreenshotType.AREA: "niri msg action screenshot", + ScreenshotType.AREA: f" grim -g \"$(slurp)\" -t png {niriScreenshotPath}", ScreenshotType.WINDOW: "niri msg action screenshot-window", } - niriScreenshotPath = SCREENSHOT_DIR / ".niri_screenshot.png" if niriScreenshotPath.exists(): niriScreenshotPath.unlink() - # if os.system(cmd[type]): process = subprocess.run(cmd[type], shell=True) if process.returncode != 0: - raise RuntimeError("Failed to take screenshot: niri built-in screenshot command failed.") + print(process.returncode) + raise RuntimeError("Failed to take screenshot: niri screenshot command failed.") if wait_until_file_exists(niriScreenshotPath): # niriScreenshotPath.rename(filepath) @@ -91,12 +95,13 @@ def take_screenshot(filepath: Path, typeStr: str): raise RuntimeError("Failed to take screenshot: output file not found after niri command.") if not wait_until_file_exists(filepath): raise RuntimeError("Failed to take screenshot: output file not found after copying.") + else: # print("Unsupported desktop environment.") raise RuntimeError("Unsupported desktop environment.") finally: - fcntl.flock(lock_fd, fcntl.LOCK_UN) - lock_fd.close() + fcntl.flock(lockFD, fcntl.LOCK_UN) + lockFD.close() def edit_screenshot(filepath: Path): @@ -130,10 +135,6 @@ if __name__ == "__main__": # take screenshot take_screenshot(filepath, args.type) - # check if successful - if not filepath.exists(): - raise RuntimeError("Failed to take screenshot: screenshot file not found.") - # create loop instance loop = GLib.MainLoop() editing = False diff --git a/config/shell/.config/fish/post.d/alias.fish b/config/shell/.config/fish/post.d/alias.fish index 02b9567..2aa77f0 100644 --- a/config/shell/.config/fish/post.d/alias.fish +++ b/config/shell/.config/fish/post.d/alias.fish @@ -100,4 +100,8 @@ if type -q git end git push end + + if type -q wl-paste + alias gc="git clone \$(wl-paste)" + end end diff --git a/config/yazi/.config/yazi/init.lua b/config/yazi/.config/yazi/init.lua index 14a7171..b1a1140 100755 --- a/config/yazi/.config/yazi/init.lua +++ b/config/yazi/.config/yazi/init.lua @@ -1,10 +1,10 @@ -require("yaziline"):setup({ - separator_style = "angly", - select_symbol = "", - yank_symbol = "󰆐", - filename_max_length = 24, -- trim when filename > 24 - filename_trim_length = 6, -- trim 6 chars from both ends -}) +-- require("yaziline"):setup({ +-- separator_style = "angly", +-- select_symbol = "", +-- yank_symbol = "󰆐", +-- filename_max_length = 24, -- trim when filename > 24 +-- filename_trim_length = 6, -- trim 6 chars from both ends +-- }) -- require("starship"):setup { -- config_file = "~/.config/yazi/starship.toml", -- }