The most important part of what is stored in this repo is in the bin folder. On my computer this syncs to $HOME/.local/bin and is in my $PATH. The scripts worth looking at are called "status" and "dwmstat". status collects information about power, network, sound volume and other things like the local weather and current bitcoin price (updated hourly) and puts that information into files in the $HOME/.status folder with a consistent formatting. If run from the command line then status will then concatenate each of these files in turn. I also have a keyboard shortcut set with sxhkd that will echo this output to dunst and display the computer's status as a notification. dwmstat creates a variable by running status and uses awk to extract the icons that represent the current system status. It will then assign the results to xsetroot thus setting a status bar for dwm. dwmstat updates once per minute, or when called by a change. There is a script called "rsbar" to add this functionality to sxhkd, for example. ---------------------------------------------------------------------------------- A quick note about colours... In various versions of my config.h file for dwm I did many more things with the colour options than you'll see by looking at this repo. For a time I used a program called pywal, that set the colours by analysing the current wallpaper... that was quite a nice thing. In earlier version I also shared both a light theme and a dark theme. At times I actually used the names of colours rather than just col_themecol variables, which meant I could keep the colours I liked in the file even if I wasn't using them. The thing is, I was updating this config.h file most days for about 18 months and so some the quirky things I tried over time are lost - probably for the better... The colours that seem to be here looks just like the ones that Luke Smith was using when he first switched to using dwm for LARBS. I don't know why that is, but it does look quite nice. Maybe if you look back through my changes over time you'll find some of my colour schemes should that interest you. ---------------------------------------------------------------------------------- Updates to this file are added to the top. New users should read through each version from the bottom to understand functionality and changes I've made since writing about this build on my website. 2nd February 2021: 1) Over the last week I re-wrote all of the mini scripts that my status bar calls with a completely different functionality. Files are now written to ~/.status and then read either by the bar or by the status shortcut (Alt+ s) using awk to trim the relevant information. This has reduced the need for half of the scripts (which were essentially the same) and is more unix-like IMHO. 2) I'm seriously considering writing a proper help PDF for users of the desktop in the way that Luke Smith does with LARBS. 3) I'm also considering not distributing the full source code for dwm any more. It's quite possible that I'll revert to a totally vanilla dwm build and simply distribute my config.h file, status scripts and other config files (that are already included). It's really in the interest of simplicity... but I've also learned that most of these patches are more hassle than they're worth. Gaps is just eye candy and rarely looks as good as you may think (or I may have previously thought). It also introduces more complexity in the form of "do I now want drop shadows?"... the answer is no, because of the bar's shadow over applications when gaps aren't being used... again, more hassle than it's all worth. I already have a solution for the issue terminal swallowing is meant to solve (the trash tag in place of tag 9, which I add to windows I don't want to see) and also I often want to see the terminal output of mpv, for example, so I ended turning swallowing off for a lot of the things I frequently use. The only remaining modifications to stock dwm are shiftview and allowing coloured emoticons on the bar, which are easy enough to do without the need for me to be sharing the source as though I actually did anything myself! It's kind of hilarious that in some ways this project obsoleted one of its main purposes but I think that focusing on code that I've actually written and continuing to, a) write better scripts that better utilise unix-like functionality and b) keep evolving my opinions of what is required for a minimalist desktop that doesn't get in the way or bloat itself with needless features, is the best way forward. Version 0.3: I've decided that the fakefullscreen patch causes more trouble than it's worth. Although I like to have a youtube video playing in one window, filling that window, and at the same time be editing files or typing, this alone does not justify the need for keeping the pointless monocle layout available and having another awkward patch to make fullscreen actually happen when I do want it. Plus the fullscreen workaround still keeps the window border and when I used the noborder patch it didn't always work. This is just messy and unneccessary. If I want to do as I describe above with a youtube video then I can simply use mpv to play it. So here's a summary from the last months. I have come to realise that my custom key binds, dunst configuration, and status bar scripts are of more value than a heavily patched dwm. I went back to a vanilla dwm for a while and over time added things back in as I missed them. At the moment the current patches I have for dwm are: 1) Window swallowing. 2) Window gaps ("fullgaps") (which by default are set to 0 and manually activated (eg. if the colour scheme makes destinguishing between two open terminals difficult). I actually went some time without using gaps at all because it's mostly eye-candy and goes against the spirit of this desktop set-up. 3) Shiftview, for changing tags with the mouse. It's not strictly necessary and again, rarely used by me, but it is a nice thing to leave in. I did use the "hide-vacant-tags" patch for a while but I've also back-pedalled on that as well. This is because I use tag 9 as a "[ 🗑 ]" Current colour scheme has the select colour the same as the dracula colour scheme for st, which I think looks quite classy when using a single maximised terminal. Light colour scheme config file has been removed. If you understand what's going on here then you can surely set that up yourself - make the normal and selected colours the same to get a solid bar and choose an off-white colour (and a dark font). In the light theme I had also made the font "Lato Bold:size=9". Version 0.22: I have added the shiftview functionality and bound it to mouse buttons 4 and 5. This means that you can now use the scroll wheel on the tag area to change tags. Version 0.21: I didn't include these below: Toggle main window - Mod+Shift+Enter Toggle window float - Mod+Shift+Space Increase size of main window - Mod+ l Decrease size of main window - Mod+ h Close window - Mod+ q Quit dwm - Mod+Shift q There are now two config.h files. One called config.dark.h and the other config.light.h. Before compiling you will need to choose whether you'd like to use the light or dark look. They work nicely with Breeze and Breeze dark themes. Rename or copy the file of choice to config.h before compile. I just added the hide-vacant-tags patch to the list. I've also adjusted the colours a little and added JoyPixels to the *fonts in config.h JoyPixels is now a dependency so make sure you install it. Version 0.2: Began version numbering, which is really quite arbitrary, but at least allows others to see how my thoughts are changing. The fullscreen button is a toggle. In switching to it from monocle it feels useless as I could just switch the bar off instead. Still, my desired solution is to stop using monocle rather than to stop using fullscreen so I am changing the default gaps to 0. This means that if only one program is open then it is effectively full-desktop. You can then use Mod+x or Mod+y to adjust gaps when you open muliple tiled windows if desired. Otherwise we just use the tiled mode to cover 2 of the needed layouts and keep the fullscreen as a toggle for use when watching videos or like a distraction- free mode as such. Monocle mode is disabled in config.h it can be reinstated easily, but note that it does not currently have a unique short-cut. You can go to monocle mode, if you really have to, by toggling fullscreen and then turning the bar back on (Mod+B). Fullscreen mode (toggle) now has the shortcut Mod+Plus Version 0.1: Patches installed: 1 fullgaps - need to use version 6.2, not latest 2 fullscreen - manually add one line to dwm.c - also add line to config.h 3 fakefullscreen - this is cool for watching tutorials or whatever whilst multitasking -- at this point you also need extra things in the config file again -- 4 swallow - a handy way of managing redundant terminal windows may add the noborders patch at some point if I decide to use brighter border colour. noborders, fakefullscreen patches interfere with each other a bit when using the fullscreen patch! removed barpadding patch - it is quite visually appealing but ultimately better to look at than to use. Design considerations: Had to remove 'iscol' lines from drw.c file to allow unicode icons on panel. I've also done the same with my build of dmenu. Four needed layouts - tile, float, full desktop (monacle), full screen. - Monacle would be redundant without gaps patch, which has lead me to removing the ability to adjust gap-size from the key bindings in order to enforce a behaviour of using both layouts for their intended uses. There is no minimise function for windows in dwm so I have Tag 9 as the 🗑 icon and put things there when I'm not using them. You might think there is no "window list" or a way to see what programs are running but really you can just Mod+0 to display all tags at once - this is like reveal or whatever its called on a Mac. Also you can just look at the tags and see if there are windows open. Colours: This is something I change fairly frequently but something I like to do is have the border colour of the active window the same as the sel-colour on the bar/panel. This has the nice effect of making the border "join" to the bar and tag when in monacle mode. Fonts: I like the Lato and Inconsolata fonts for desktop and st terminal. Currently the latest version of Inconsolata does not work so you need to install version 0.2 and blacklist from upgrades. You also need JoyPixels installed for the emojis and libXft-bgra. Re-assess keyboard short-cuts: Starting programs and window controls should be assigned to different Mod keys. dmenu - Mod+Space - a standard shortcut to for program launcher, similar to both Win and MacOS st - Mod+Enter Desktop layouts: Tile - Mod+Minus Float - Mod+Shift+Minus Monacle - Mod+Plus Fullscreen - Mod+Shift+Plus (this is a toggle) increase gaps - Mod+ x decrease gaps - Mod+ z For launching programs: Lower case letters for everyday things like browser or file manager Upper case letters for config stuff like wifi or volume control Standard Progs: neomutt - Alt+ m brave - Alt+ w pcmanfm - Alt+ f ranger - Alt+ r tremc - Alt+ t frescobaldi - Alt+ l liferea - Alt+ n Config Progs: pulsemixer - Alt+Shift+ a wavemon - Alt+Shift+ s nmtui - Alt+Shift+ w mailsync - Alt+Shift+ m clipmenu - Alt+Shift+ c emoticons - Alt+Shift+ e arandr - Alt+Shift+ r vtop - Alt-Shift+ t screenshot - Alt+Shift+ F4