Package: jigsawwm
JigsawWMJigsawWM is a free and open-source project that aims to increase your productivity by offering a set of automation facilities, including the jmk module as an AHK alternative, a Tiling Window Manager to free you from managing windows manually and the Daemon to support any customization you may have in mind.What Can I Do?Service: jmkSoftware-defined keyboard/mouse automation which mimics theQMKas an alternative toAutoHotkeyMy pinky is hurting - the dual-role key
You should try usingFas theControlkey, the following code would turn it into a dual-role key: it acts as theLControlwhen held,Fwhen tapped:Vk.F: JmkTapHold(tap=Vk.F, hold=Vk.LCONTROL),What if I need to enter a bunch ofF?
Tap it and then hold it down withinquick_tap_term(default 120ms)I use F12 a lot, can I tap it without looking at the keyboard? - the layers
Sure, the problem with modern keyboards is they are enormous, 104 or even more. It is inconvenient when the keys you use frequently are far away from the Home Row (a,s,d,f, ...). Withlayeryou may "move" the needed key into your reach:layers = [
    { # layer 0
        # activate layer 3 when held
        Vk.T: JmkTapHold(tap=Vk.T, hold=3),
    },
    { # layer 1
      ...
    },
    { # layer 2
      ...
    },
    { # layer 3
        Vk.Z: JmkKey(Vk.F1),
    }Now, hold the keyTand pressZ, you getF1I would like to pressWin+Qto close the active Window.hotkeyat your service, furthermore, you may pressWin+Nto minimize orWin+Mto maximize the active windowhotkeys=[("Win+q","LAlt+F4"),# Win+n to minimize active window([Vk.WIN,Vk.N],minimize_active_window),# Win+m to maximize active window([Vk.WIN,Vk.M],toggle_maximize_active_window),]For browsing smoothingly with the Mouse, try the following setupMouse Forward + Left Button: sendCtrl + w(close tab in Chrome and other apps)Mouse Forward + Wheel Up: sendCtrl + PageUp(previous tab in Chrome and other apps)Mouse Forward + Wheel Down: sendCtrl + PageDown(next tab in Chrome and other apps)Check out theexamples/jmk.pywto find out moreService: tiling window managerTheWindowManagerfollows thesuckless philosophyand works just like thedwm. All windows are treated as anOrdered List, they will be moved into places based on theirOrderand specifiedLayoutautomatically, save you from arranging them manually.Demohttps://user-images.githubusercontent.com/61080/210168366-e70dd649-f6ef-41bb-a8e5-941e392d770a.mp4Default keybindingsWin + j: activate next window and move the cursor to its centerWin + k: activate the previous window and move the cursor to its centerWin + Shift + j: move the active window down in the list (swap with the next one)Win + Shift + k: move the active window up in the list (swap with the previous one)Win + /: swap the active window withthe first windowin the list orthe second windowif it is the first window alreadyWin + Space: next theme,Themeconsists ofLayout,Background,gap, etc. to determine how windows should be placedWin + i: activate the first window of the next monitor if any or move cursor onlyWin + u: activate the first window of the previous monitor if any or move cursor onlyWin + Shift + i: move the active window to the next monitorWin + Shift + u: move the active window to the previous monitorService: run console program in the backgroundSometimes, software that should be run as a system service may not offer an installer to do the job, worse, it may ship as a Console Program. Nobody wants a Console Window stays on their desktops, and yes, I'm talking aboutSyncThing. I love it but I would like it to run in the background quietly.classSyncthingService(daemon.ProcessService):name="syncthing"args=[r"C:\Programs\syncthing-windows-amd64-v1.23.2\syncthing.exe","-no-browser","-no-restart","-no-upgrade",]log_path=r"C:\Programs\syncthing-windows-amd64-v1.23.2\syncthing.log"daemon.register(SyncthingService)Task: automate your workflows with tasksI would like to open a folder inside the Chromium Bookmark on the first boot-up every day.classDailyRoutine(daemon.Task):name="daily routine"defrun(self):chrome.open_fav_folder("bookmark_bar","daily")defcondition(self):# trigger only once on daily-basisreturnsmartstart.daily_once("daily websites")daemon.register(DailyRoutine)I would like to launch my IM / Mail Client on workdaysclassWorkdayRoutine(daemon.Task):name="workday routine"def__init__(self)->None:super().__init__()self.holiday_book=ChinaHolidayBook()defrun(self):smartstart.start_if_not_running(r"C:\Users\Klesh\AppData\Local\Feishu\Feishu.exe")smartstart.start_if_not_running(r"C:\Program Files\Mozilla Thunderbird\thunderbird.exe")defcondition(self):returnself.holiday_book.is_workhour(extend=timedelta(hours=2))daemon.register(WorkdayRoutine)InstallationTested onWindows 11 Build 22000andPython 3.11.1.
Should work onWindows 10andPython 3.8Install from pypipip install jigsawwmInstall from Github repopip install git+https://github.com/klesh/JigsawWM.gitQuick StartStep 1: Create a.pywfile as your "Configuration"Choose services you like from theexamplesfolder, you may use any of the following directly.examples/jmk.pywif you are looking for a QMK/AutoHotkey alternativeexamples/services.pywif you are trying to run some Console Program as Service in the backgroundexamples/tasks.pywif you are looking for a solution to automate your workflow smartly on startupexamples/wm.pywif you are looking for a tiling window managerexamples/jigsaw.pywthe whole package of the aboveStep 2: Launch your.pywfile and manage your servicesDouble-click the.pywfile and a tray icon should appear, right-click the icon to manage your services.Step 3: Launch at startupOpen yourStartupfolder by pressingWin + rto activate theRundialog and type inshell:startup, a FileExplorer should pop up.Create a shortcut to your.pywfile. Done!DocumentRead the Docs