 We're going to talk about OS customization pretty briefly because it's very operating system specific. Sorry, sorry. We're going to talk about OS customization very briefly because it's very operating system specific. And so we show you a bunch of stuff about how to customize Mac OS. It won't be useful if you're a Linux user and vice versa. So we're going to talk about a couple of concepts that we think are useful, and we'll link to a bunch of resources in the course notes. So the first thing we want to talk about is keyboard remapping. We talked about this briefly during the Vim lecture last week, but basically your keyboard probably has keys that you don't use very much. And so instead of having useless keys on your keyboard, you should remap them to make them do useful things. The keyboard is a much more high bend with a useful way of interacting with your computer than your mouse. And so you try to make that tool as optimized as possible. And so for Mac OS, for example, you can go into system preferences keyboard and you can do some customization here. Like if you go to modifier keys, you can remap your modifier keys to make them do different things. One key that I don't use on my computer, for example, is the caps lock key. It's like, I don't need to shout at people that often when I do, I can hold down the shift key. And so I remapped it to escape, because I'm a VIM user and in VIM escape puts you back into normal modes on pressing this key all the time. And if I need to press the escape key in the top left corner of my keyboard, well, it's like a kind of awkward motion to do, whereas the caps lock key is right there. So that's one example of very simple keyboard customization that's pretty useful. Or like Mac OS by default will let you remap any modifier key to any other modifier key or just disable it if it is not useful to you. But if you want to do more complicated things, like you can really remap any key to any other key. And so there's some third party software to let you do this and we've linked to it in the notes. You can also not just map keys or key combinations to other keys, you can remap key combinations to arbitrary commands, right? So you can say like, okay, when I do control alt T, it should launch terminal or things like that. You can even do program specific things. So like if this program is running and I hit this key combination, like then click this thing in the menu and things like that. So you can optimize your workflow pretty heavily through keyboard customization. So yes, put in the effort to make your keyboard as useful as possible. Next thing we're gonna talk about is hidden operating system settings. So no matter which operating system you're on, you probably have something like this on your software, like system settings or something like that, which will let you go and configure a bunch of things in the way you like. And this will expose a bunch of settings, but usually your operating system lets you customize even more things. It's just not exposed through this graphical interface. So for example, for Mac OS, there's the default command that'll let you change a bunch of hidden settings. And there's a lot of stuff in there that's pretty useful. So like for example, if you do like defaults, write com.apple.doc, show hidden dash, ooh, true. You can find these commands online. But this thing, for example, will make it so if I hide a program, like so I'm pressing Command H, this program's now hidden, it will actually make it translucent in the doc. And so it's just like a kind of helpful thing, right? If I have a bunch of programs running in summer hidden, if I wanna see which ones are hidden, which ones are not, well, this is a kind of nice way of distinguishing them. And this is how it's not exposed through the user interface, but it's a setting that you can change. And there are tons of these things online that are actually pretty useful. And unfortunately, there's not really a list of all possible things you can change. But one thing you can do is you can look through how other people have configured their systems. So for example, we've linked to this one file online. A lot of people use this particular configuration. But here, you can see lots of things, like macOS by default hides the scroll bar. You can see the scroll bar briefly on the right and it stops showing as soon as I stop scrolling. Well, if that's something that bothers you, well, like you can go disable that. And just there's tons of stuff that you can configure. This particular file has a lot of these useful configurations along with some explanation of what they do. And so this is something that's totally worth doing. And this general idea of hidden settings that are actually quite useful to tune if you care about making your setup super optimized exist in different, in all the operating systems, you just need to look at different blog posts or articles or things like people's dot files online to see exactly how they've configured their stuff. And we won't get into the details of particular configurations because you can just look them up on your own and see which ones apply to you. And then the last general idea I want to talk about is window management. So it's probably the case that you guys are all using graphical interfaces, right? Even if you spend most of your time in the terminal, you probably do some web browsing and see if something that looks like a browser window or something else. And how do these windows, like how are they manipulated, how are they managed? Well, most of us use window managers that look like this. We have rectangles that can be overlaid on top of each other in any way we want. But it's actually kind of annoying to get this to do sophisticated things that could be useful. Like say I'm programming and I want to see my web browser on one side and my terminal on the other. I want some ratio of size between them. It's kind of a lot of effort to do that if I go and set this to the right size and I go click on my terminal and move it over here and click and drag things around until they look right. This is a ton of effort. So what you should do is configure keyboard shortcuts and other things to help you manipulate windows. One particular style of window management is something called tiling window management. Instead of having windows that overlap each other in kind of weird ways, well, for the most part, we probably want to see 100% of every window you have open on your machine. And so you should organize things into non-overlapping frames and there are tools that can help you do that really efficiently. If you're using a Linux based operating system, you can actually find tiling window managers that will kind of always enforce this and give you very efficient ways of manipulating it. And if you're using something like Windows or Mac OS, you can install third party applications that'll kind of let you approximate that behavior. So like with keyboard shortcuts, I can efficiently do things like split my windows vertically or horizontally or however I want in pretty complicated ways and let me move windows between different monitors and things like that. And there are also other things. So besides just kind of having windows take up portions of screens and get things that will show you some prompt, which will say, okay, here's a great overlay on your screen and I want you to take this current window and have it go from this grid section to that grid section and take up this part of the screen. And so we've linked to a couple of different tools that can help you do this sort of thing. The one I'm using, for example, is an operating system automation tool called Hammer Spoon for Mac OS, which lets you bind different commands to different key combinations. And what I've done is I've taken, okay, like I picked whichever key combinations I want and then there's a bunch of built-in functions for window manipulation. And saying, okay, I want to be able to move windows, they take up some half of a screen or some quarter of a screen and so on. And I want some key binding for having a grid system overlaid on my screen and being able to specify exactly which portions of a grid a window should take up. And all of these things are super customizable. And even the thing like the grid system, if I have different monitors of different sizes, say I have a gigantic monitor, then I probably want like a very fine grid, like lots of grid cells. But on my laptop, it wouldn't really make sense if I had 100, 500 grids and then I'm gonna make windows like super packed together. And you can customize all that sort of stuff in really straightforward ways. And then the last thing I wanna talk about is something called encoding layouts in code. And so it's probably the case that when you're working, you have kind of standard way you arrange your different windows, right? You might have multiple monitors, you might say, okay, like on this big vertical monitor I have, I keep my terminal open so I can look at my code in this nice vertical monitor. And then I have this other monitor where like in half of the screen I have my web browser and then the other half of the screen I keep slide open so I can talk to my colleagues. But then like whenever I go home, I move my windows around in some different way. And like every morning when I come to work I spend the first five minutes kind of putting everything exactly where I want it to be. So like of course you shouldn't spend your time doing that. And the general theme in this class is anything that's repeated you should just automate away. And of course there are tools to help you with this sort of thing. So like for example, linked to the specific tools in the course notes for Mac OS, Hammerspins are really nice to be doing this. But you can kind of encode different ways you want to lay things out, give them names and like bind them to keys or stick them in a menu or something. It's just a small amount of code I have, like I've encoded a bunch of layouts for when I'm in my lab here or when I'm at my house where I have a slightly different monitor configuration or things like that. And just a single click of a button I can get all my windows to be the right shape and in the right place and hidden or not hidden or whatever. It's like every morning when I get to work I press the button and everything is just the way it's supposed to be. And so it's just like a general tool you can set up for Mac OS or for any other system. And it will save you a bunch of time. And yeah, so this is all we have for OS customization because if we wanted to go into a lot more detail to be OS specific and then people who are like, I do a lot of Mac OS stuff and don't spend too much time on a Linux desktop so I wouldn't talk too much about that. And it wouldn't be fair to the people who are not using the same operating system as me. But we have links to more resources in the course notes. One thing in particular that I think you should look at I think it's really cool is there's a subreddit this one's linked to the bottom of the list of resources called Unix Porn. And basically it's people showing screenshots of they're like really heavily modified configurations that do lots of really cool things. And usually along with the screenshots people have explanations of exactly how they've set this setup up. So we'll show what's on the screen and like what programs they're using and oftentimes they'll even link to the specific configuration files that they're using. So it's kind of cool to just browse through this and see what people have done for their super optimized workflows and then you can copy the parts of it which are relevant to you. Okay so any questions about OS customization? Okay great.