<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Amir Masoud Nourollah</title>
<link>https://nourollah.me/blog/</link>
<atom:link href="https://nourollah.me/blog/index.xml" rel="self" type="application/rss+xml"/>
<description>Essays on scientific machine learning, AI, and the tools I use.</description>
<image>
<url>https://nourollah.me/assets/profile.jpg</url>
<title>Amir Masoud Nourollah</title>
<link>https://nourollah.me/blog/</link>
</image>
<generator>quarto-1.9.37</generator>
<lastBuildDate>Fri, 06 Nov 2026 00:00:00 GMT</lastBuildDate>
<item>
  <title>Letting Go of the Wheel: Why I Am on AI’s Side</title>
  <dc:creator>Amir Masoud Nourollah</dc:creator>
  <link>https://nourollah.me/blog/posts/letting-go-of-the-wheel/</link>
  <description><![CDATA[ 





<p>For as long as humans have existed, innovations and discoveries have changed the way we live. We learnt to shelter in caves, discovered fire, learnt to make it ourselves, and used it to forge tools and shape the things we needed to survive. Each of these steps altered what it meant to be human.</p>
<p>Before going further, I want to point out something hidden beneath all of this. The moment we learn how to do something properly, it becomes autonomous. Our body takes over, and the brain only steps in at critical moments. Think about walking. As children, we have to learn it step by step, but once we master it, we never notice how we walk again. The brain simply decides where we need to go, and the body follows.</p>
<p>Try this: can you explain exactly how you stand up from a chair? Probably not, at least not until you actually do it, slowly, and watch yourself. That is the point. <strong>Once something becomes routine, it runs on its own, without needing our conscious attention.</strong></p>
<section id="from-the-wheel-to-the-horse" class="level2">
<h2 class="anchored" data-anchor-id="from-the-wheel-to-the-horse">From the Wheel to the Horse</h2>
<p>Keep that idea in mind, because it repeats throughout history: every major innovation either takes over a routine skill, or turns a new skill into one we no longer think about.</p>
<p>The wheel is one of the earliest examples. It appeared in Mesopotamia around 3500 BCE, first as the potter’s wheel and soon after on carts. Before it, moving anything heavy meant carrying it, dragging it, or rolling it on logs, and each of those took constant, deliberate effort. The wheel did not make people stronger. It made strength matter less, and the attention it freed went into other things.</p>
<p>Riding animals followed the same pattern, but inside the human body. Learning to ride a horse is hard. You have to balance, read the animal, and coordinate your legs, hands, and weight all at once. Yet once a rider masters it, riding becomes like walking: the rider decides <em>where</em> to go, and the body handles <em>how</em>. A skilled rider can scan the horizon, talk, or plan the day while the riding happens underneath. One skill became autonomous, and in doing so it extended how far a person could go.</p>
</section>
<section id="driving-into-a-bigger-world" class="level2">
<h2 class="anchored" data-anchor-id="driving-into-a-bigger-world">Driving Into a Bigger World</h2>
<p>Then came engines and the car, and the same story played out on a much larger scale.</p>
<p>For most of history, a person’s world was the region they could walk or ride across. A journey between countries took weeks or months, and travelling around the world was something almost no one would do in a lifetime. Engines changed that. Cars, trains, ships, and later aeroplanes shrank the planet. Today you can cross a continent in an afternoon, circle the globe in a couple of days, and people have even left the planet entirely and travelled to space.</p>
<p>Driving itself followed the walking pattern. Every new driver remembers how overwhelming the first lesson was: mirrors, pedals, gears, signals, and the road all at once. A few months later, most drivers arrive home with little memory of the journey. The driving became autonomous, and the conscious mind returned to the only thing that really needed it: deciding where to go, and reacting when something unexpected happens.</p>
<section id="we-always-resist-first" class="level3">
<h3 class="anchored" data-anchor-id="we-always-resist-first">We always resist first</h3>
<p>What I find most striking is not the technology itself but how people reacted to it. <strong>Almost every one of these innovations was resisted at first, and later embraced so completely that we cannot imagine living without it.</strong></p>
<p>When the first self-propelled road vehicles appeared in Britain, the <a href="https://en.wikipedia.org/wiki/Locomotive_Acts">Locomotive Act of 1865</a>, better known as the “Red Flag Act”, required a person to walk in front of them, carrying a red flag to warn others. A machine capable of going faster than walking pace was legally slowed down to the speed of a pedestrian. The rule was not fully lifted until 1896.</p>
<p>Many people simply refused to give up their horses. Early motorists were often mocked with the shout “Get a horse!”, and for years horses and cars shared the same streets. Yet within a few decades the horse had all but disappeared from everyday transport. People did not switch because someone convinced them in an argument. They switched because the car was better, and the world reorganised itself around it.</p>
<p>We are watching the same story play out again today with <strong>electric cars</strong>. Just as petrol cars were once the future of transport, electric cars are the future now, and just as people once insisted on keeping their horses, many today insist on keeping their petrol cars. There is a nice irony here: around 1900, electric cars were a serious contender on the roads before petrol engines won the first round. They are now coming back, and I believe they will eventually dominate the market as completely as the car replaced the horse.</p>
<p>The pattern is much older than cars. In Plato’s <em>Phaedrus</em>, Socrates argues that writing would weaken people’s memory, because they would rely on marks on a page instead of remembering things themselves. In the early nineteenth century, the Luddites smashed the textile machines they feared would destroy their livelihoods. Every time, the fear was not entirely wrong: something real was lost. But every time, what was gained turned out to be far larger, and the next generation could not see what the fuss had been about.</p>
<p>So what finally breaks the resistance? Usually, the new technology simply proves itself over time, as the car did. But sometimes, all it needs is a shock. For decades, x86 processors ruled personal computers and servers, and anything else was treated as a joke outside phones and embedded devices. Then, in 2020, Apple put its Arm-based M1 chip into serious machines like the MacBook Air and the Mac mini, and it shocked the industry. It was faster, cooler, and far more efficient than the x86 chips it replaced. Within a few years, Arm was everywhere that had once belonged to x86: laptops, cloud servers, and even supercomputers. And Apple’s unified memory, where the CPU and GPU share a single fast pool of memory, went from an unusual design choice to a feature that every competitor now rushes to copy to stay relevant. Arm had been capable for years. It took one company willing to take the risk and show the world that it was equal, or even superior. Maybe RISC-V is next, waiting for its own M1 moment. But I am drifting off topic now.</p>
</section>
</section>
<section id="the-calculator-and-the-human-computers" class="level2">
<h2 class="anchored" data-anchor-id="the-calculator-and-the-human-computers">The Calculator and the Human “Computers”</h2>
<p>The example closest to AI, in my opinion, is the calculator.</p>
<p>Before electronic machines, “computer” was a job title. Rooms full of people, many of them women, and many highly trained in mathematics, performed calculations by hand for astronomy, engineering, ballistics, and aeronautics. Entire industries depended on human arithmetic.</p>
<p>Calculating machines took that job away. And the early ones were not even fully reliable. Mechanical calculators going back to Pascal and Leibniz in the seventeenth century had trouble with carrying digits correctly, and some of the early pocket electronic calculators of the 1970s gave noticeably inaccurate results for functions like logarithms and trigonometry. It took years of engineering before people could simply trust whatever number appeared on the screen. Today nobody double-checks a calculator, we assume it is right, and we are almost always correct to.</p>
<p>That history is worth remembering whenever someone dismisses AI because it still makes mistakes. Reliability is something technologies <em>earn</em> over time. It is rarely there on day one.</p>
<p>So what happened to the human computers? Many of those jobs disappeared, but they were replaced by something better. At NACA (later NASA), <a href="https://en.wikipedia.org/wiki/Dorothy_Vaughan">Dorothy Vaughan</a>, who led a unit of human computers, saw that electronic computers were coming for her team’s work. Instead of fighting it, she taught herself and her colleagues the programming language FORTRAN, and they became some of the agency’s early programmers. The boring arithmetic went to the machine, and the people moved up to more important work.</p>
<p>Mathematics as a whole followed the same path. Freed from grinding through calculations by hand, mathematicians and engineers could tackle problems that would have been impossible before: numerical simulation, statistics on huge datasets, and eventually the very machine learning that powers today’s AI. The calculator did not shrink the need for mathematics. It made the demand for it grow.</p>
<section id="the-pattern-keeps-repeating" class="level3">
<h3 class="anchored" data-anchor-id="the-pattern-keeps-repeating">The pattern keeps repeating</h3>
<p>Once you see this pattern, you find it everywhere:</p>
<ul>
<li><strong>GPS</strong> took over the work of reading maps and memorising routes. We now go to unfamiliar cities without a second thought and spend our attention on <em>why</em> we are going, not on how to get there.</li>
<li><strong>Search engines</strong> changed what it means to know something. We no longer need to memorise every fact; we need to know what to ask and how to judge the answer.</li>
<li><strong>Spell checkers and autocomplete</strong> handle the mechanics of writing, so the writer can focus on the argument.</li>
<li><strong>Compilers</strong> freed programmers from writing machine code by hand, and an entire software industry was built on the time that saved.</li>
</ul>
<p>In each case, a low-level skill was handed over to a machine, and the people involved moved up a level.</p>
</section>
</section>
<section id="how-something-becomes-autonomous" class="level2">
<h2 class="anchored" data-anchor-id="how-something-becomes-autonomous">How Something Becomes Autonomous</h2>
<p>So how does a skill become autonomous in the first place? I think it happens in four stages:</p>
<ol type="1">
<li><strong>We learn.</strong> Everything is deliberate, slow, and exhausting. Each step needs our full attention.</li>
<li><strong>We master it.</strong> The skill becomes smooth, and the steps blend into a single fluid action.</li>
<li><strong>We become observers.</strong> With the doing handled, our attention shifts outwards, to the environment and what is changing in it.</li>
<li><strong>We decide.</strong> The world is not deterministic. When the environment looks familiar, we act automatically, exactly as before. When something changes, for example a child steps into the road, the ground is icy, or the horse is nervous, our observation pulls the brain back in, and we make a new decision.</li>
</ol>
<p>Neuroscience describes something very similar. Researchers distinguish between <em>habitual</em> control, which is fast, cheap, and automatic, and <em>goal-directed</em> control, which is slow, deliberate, and flexible. The brain switches between them depending on how certain it is about the situation (<a href="https://www.nature.com/articles/nn1560">Daw, Niv &amp; Dayan, 2005</a>). Routine situations run on habit, and surprises bring back deliberate thought.</p>
</section>
<section id="we-are-agents-too" class="level2">
<h2 class="anchored" data-anchor-id="we-are-agents-too">We Are Agents, Too</h2>
<p>If this sounds familiar to anyone working in AI, it should: it is a description of an <strong>agent</strong>.</p>
<p>In reinforcement learning, an agent observes the state of its environment, takes actions according to a policy, and receives rewards, while trying to maximise its reward over time. Today’s agentic AI systems work in the same way. They observe, plan, act, and adjust when the world does not behave as expected.</p>
<p>Humans are agents in exactly this sense. We observe the world, act on it, and are rewarded or punished by the results. And our long history of handing skills over to tools is what a good agent does: it delegates routine work to cheap, reliable subroutines, so that its limited attention goes into the decisions that actually affect its reward.</p>
<p>Seen this way, AI is not a rival agent competing for our place. It is the next layer of autonomy in our own stack, after the body that walks, the horse that carries, the engine that drives, and the calculator that computes. AI takes on the routine <em>cognitive</em> work, such as drafting, searching, summarising, and writing boilerplate code, and leaves us the higher-level role: setting goals, noticing when something has changed, and making the decisions that matter.</p>
<section id="fighting-the-tide-does-not-maximise-reward" class="level3">
<h3 class="anchored" data-anchor-id="fighting-the-tide-does-not-maximise-reward">Fighting the tide does not maximise reward</h3>
<p>There is also a game-theory argument here. Imagine two people, two companies, or two countries, where one adopts a powerful new technology and the other refuses it. The refusing side does not stop the technology from existing. It just falls behind whoever adopts it. Whatever the other side chooses, refusing leaves you worse off. In game-theory terms, refusing is a <em>dominated strategy</em>.</p>
<p>Reinforcement learning makes the same point from another angle. An agent in a <em>non-stationary</em> environment, one whose rules change over time, cannot keep following the policy that worked yesterday. If it does, its reward steadily falls. Our environment is exactly this kind: every major innovation rewrites the rules. The rider who refused to learn to drive, or the computer who refused to learn FORTRAN, was following an outdated policy in a changed world.</p>
</section>
</section>
<section id="ai-is-the-hand-we-are-the-brain" class="level2">
<h2 class="anchored" data-anchor-id="ai-is-the-hand-we-are-the-brain">AI Is the Hand, We Are the Brain</h2>
<p>Which brings us to AI.</p>
<p>Everything above has been building up to this point. The wheel took over carrying, the horse and then the engine took over travelling, and the calculator took over arithmetic. AI is next in line, and it is the broadest step yet. <strong>Any job that can be automated, or done autonomously, AI is going to take over.</strong> That includes writing routine code, filling in forms, summarising documents, sorting data, answering standard questions, and running the same analysis for the hundredth time. These are the cognitive equivalent of walking: tasks we once had to learn deliberately, and which no longer need our full attention once mastered.</p>
<p>This is not something to fear. It is the same division of labour our own bodies already use. When you walk, your legs do the walking and your brain decides where to go. It only steps in when something changes: a curb, a crowd, a slippery floor. AI gives us that same arrangement for our work. <strong>AI will be the hand, and humans will be the brain.</strong> AI does the doing; we observe and decide. We set the goals, watch the environment, notice when something is not right, and make the calls that require judgement, responsibility, and an understanding of what actually matters.</p>
<p>That is exactly the four-stage path from earlier, applied to a whole civilisation. We are moving past the <em>learning</em> and <em>mastering</em> stages for a huge range of tasks and into the stages that were always the most valuable: <em>observing</em> and <em>deciding</em>.</p>
<section id="walking-against-progress" class="level3">
<h3 class="anchored" data-anchor-id="walking-against-progress">Walking against progress</h3>
<p>Not everyone will accept this, just as not everyone accepted the car or the calculator. Some will insist on doing by hand what a machine can now do better and faster, and they will treat that as a virtue. But history is clear about how this ends. The person waving the red flag in front of the car did not stop the car. The human computer who refused to learn programming did not stop the computer. They only made sure that progress went on without them.</p>
<p>Anyone who fights against AI handling the low-level work is <strong>walking against progress</strong>, and, like the agent following an outdated policy, they will watch their reward fall while the world moves on.</p>
</section>
</section>
<section id="finding-the-next-skill" class="level2">
<h2 class="anchored" data-anchor-id="finding-the-next-skill">Finding the Next Skill</h2>
<p>So where does that leave us?</p>
<p>Not in a world without work, but in one where the work keeps moving up. Each innovation makes some skills obsolete and creates demand for new ones. Few people need to shoe a horse, do long division by hand, or read a paper map today, and almost nobody misses those jobs. In their place came skills nobody could have imagined before: driving, programming, data analysis, and now, directing and supervising AI systems.</p>
<p>The lesson I take from history is simple. <strong>Instead of holding on to skills that innovation has made obsolete, we should be looking for the new ones that it has created.</strong> We need to learn them, master them, let them become automatic, and then move up again. Let AI be the hand. Our job is to become a better brain: to observe more carefully, decide more wisely, and keep moving up. That is how we have always adapted, and I believe it is how we will build a better life alongside AI.</p>


</section>

 ]]></description>
  <category>ai</category>
  <category>opinion</category>
  <guid>https://nourollah.me/blog/posts/letting-go-of-the-wheel/</guid>
  <pubDate>Fri, 06 Nov 2026 00:00:00 GMT</pubDate>
  <media:content url="https://nourollah.me/blog/posts/letting-go-of-the-wheel/wheel.jpg" medium="image" type="image/jpeg"/>
</item>
<item>
  <title>The Universal Promise: Do We Actually Need Chemical Foundation Models?</title>
  <dc:creator>Amir Masoud Nourollah</dc:creator>
  <link>https://nourollah.me/blog/posts/chemical-foundation-models/</link>
  <description><![CDATA[ 





<p>The artificial intelligence world is obsessed with scale, and chemistry has joined the race. We have moved from highly specialised algorithms to massive foundation models: sequence-based transformers trained on over a billion molecules, and “universal” 3D models trained on hundreds of millions of atomic structures. The promise is alluring — a single, out-of-the-box computational solver capable of predicting properties across the entire periodic table without retraining for specific tasks.</p>
<p>But a critical question remains: do we actually <em>need</em> these massive foundation models in chemistry? Chemistry is not just a language with flexible grammar; it is bound by strict, unforgiving physical and quantum mechanical laws. As we pour millions of GPU hours into training billion-parameter models — and the energy bills that come with them — we have to ask whether raw scale can truly replace highly curated, specialised models engineered with domain knowledge. The implicit bargain behind foundation models is that a large upfront investment in training pays for itself over time, because the resulting model is general enough that it never needs to be trained again. That bargain deserves scrutiny.</p>
<p>The answer is complicated — and the evidence points to a set of fundamental tensions that the field has not yet resolved.</p>
<section id="the-bitter-lesson-does-not-apply-here" class="level2">
<h2 class="anchored" data-anchor-id="the-bitter-lesson-does-not-apply-here">The Bitter Lesson Does Not Apply Here</h2>
<p>In natural language processing, the prevailing philosophy is the <em>bitter lesson</em>: simply scaling up unconstrained architectures and feeding them vast data will eventually beat any hand-engineered model. In chemistry, this rule seems to fundamentally break down.</p>
<p>The reason is structural: physical laws are not patterns to be learned from data; they are constraints. A molecule does not change its behaviour depending on what language you use to describe it, or how many other molecules your model has seen. The geometry of space, the symmetries of rotation and translation, the rules of quantum mechanics — these are fixed. Models that are explicitly built to respect these constraints, rather than hoping to infer them from data, consistently outperform those that do not when it comes to complex, unfamiliar chemical scenarios.</p>
<p>This matters beyond scientific accuracy. The energy cost of training a large chemistry model is substantial — comparable to the footprint of transcontinental flights, depending on the hardware and duration. The justification for that cost rests on the assumption that a sufficiently general model will not need to be retrained as new chemical domains come into scope. If that assumption is wrong, the cost is not paid once. It is paid repeatedly.</p>
<p>Scale can help a model interpolate better within the chemistry it has already seen. It cannot, on its own, teach a model to reason about chemistry it has never encountered.</p>
</section>
<section id="the-extrapolation-wall" class="level2">
<h2 class="anchored" data-anchor-id="the-extrapolation-wall">The Extrapolation Wall</h2>
<p>If an AI model cannot discover something truly new, what is its value in science? The ultimate goal of chemistry AI is genuine scientific discovery — novel therapeutics, advanced materials, structures that push beyond what currently exists. By definition, this requires out-of-distribution (OOD) generalisation: the model must accurately extrapolate into chemical spaces it has never encountered during training.</p>
<p>This is where current foundation models quietly struggle. When evaluated not on held-out versions of familiar molecules, but on genuinely new chemical compositions assembled from known building blocks, the performance of even the most capable models degrades substantially — often by an order of magnitude or more compared to their in-distribution accuracy. More troublingly, the models that perform best on familiar chemistry are not always the ones that generalise best to new chemistry. Standard benchmarks, which test models on data drawn from the same distribution they were trained on, can paint a misleadingly optimistic picture.</p>
<p>The practical consequence of this generalisation failure is rarely discussed openly. When a model cannot extrapolate to a new chemical domain, practitioners retrain it or fine-tune it on domain-specific data. Each time the scope of the problem shifts — a new class of materials, a new reaction type, an updated reference dataset — the energy cost is paid again. The promise of universality was precisely that this would not be necessary. A model that genuinely generalises across chemical space would need far less of this repeated adaptation, and the cumulative environmental cost of deploying chemistry AI at scale would be meaningfully lower. Closing the OOD gap would not eliminate that cost, but it would reduce it in a way that compounds over time and across the research community.</p>
<p>This gap between in-distribution accuracy and out-of-distribution performance is the central unanswered question in the field. It is also the question our recent work at Cardiff University, <a href="https://arxiv.org/abs/2605.08988"><em>Benchmarking Compositional Generalisation for Machine Learning Interatomic Potentials</em></a>, is designed to probe systematically — not to offer a solution, but to establish clearly where current models succeed, where they fail, and how large the gap actually is.</p>
</section>
<section id="the-physics-trap-systematic-softening" class="level2">
<h2 class="anchored" data-anchor-id="the-physics-trap-systematic-softening">The Physics Trap: Systematic Softening</h2>
<p>Universal machine-learned interatomic potentials — models trained to act as fast surrogates for expensive quantum mechanical calculations across a wide range of materials — represent some of the most impressive engineering in scientific AI. But a specific physical flaw haunts them: <em>systematic softening</em>.</p>
<p>These models are predominantly trained on atomic configurations close to their equilibrium states, where forces are small and well-behaved. When they encounter high-energy environments — distorted structures, defect sites, transition states — they systematically underpredict the forces and the curvature of the energy landscape. The result is an artificially smooth picture of molecular behaviour: the model describes a world that is slightly less tense, slightly less reactive, slightly less physically real than the one it is meant to simulate.</p>
<p>This is not a bug that more data trivially fixes. The distributions of configurations that matter most for reactive chemistry, materials failure, and catalysis are precisely the configurations that are hardest and most expensive to generate, and therefore most underrepresented in training sets. The models are physically flawed at exactly the regimes where accurate physics is most needed.</p>
<p>The response in practice is, again, fine-tuning: taking a universal model and adapting it to a specific high-energy regime with targeted data. This works, to a degree — but it reintroduces the per-domain training cost that universality was meant to eliminate. Each specialised application becomes its own compute and energy expenditure on top of the original training investment. The physics trap is not just a scientific problem; it is a resource problem that compounds with every new deployment context.</p>
</section>
<section id="so-do-we-actually-need-them" class="level2">
<h2 class="anchored" data-anchor-id="so-do-we-actually-need-them">So, Do We Actually Need Them?</h2>
<p>Given these limitations — poor out-of-distribution generalisation, systematic physical errors, and the failure of naive scaling — one might conclude that chemical foundation models are overhyped. That would be the wrong conclusion.</p>
<p>We need them. We just need to be honest about what they currently are and what they are not.</p>
<p>They are not zero-shot oracles. They are powerful starting points. Fine-tuning on even a small number of task-specific configurations can substantially correct for systematic errors. Better benchmarking — designed to test genuine extrapolation rather than interpolation — can guide the field toward architectures and training strategies that close the OOD gap. Better uncertainty quantification can tell practitioners when to trust a model and when to reach for the quantum chemistry code.</p>
<p>And when integrated thoughtfully into a human-led discovery pipeline, these systems yield real results. There are already drug candidates in clinical trials that would not exist without generative AI tools for chemistry. The technology works — within its limits.</p>
<p>The energy picture deserves an honest summary too. Improving OOD generalisation would reduce the cumulative cost of deploying chemistry AI: fewer retraining cycles, less per-domain fine-tuning, longer useful lifetimes for a given model. That is a meaningful gain, and it is one the field tends to undervalue when discussing the case for better benchmarks and more rigorous evaluation. But it would not eliminate the energy cost of achieving high accuracy in the first place. Training a model that is both physically accurate and genuinely generalisable across chemical space remains an unsolved problem, and any solution to it will itself require substantial compute. The goal of better generalisation is to stop paying the same cost repeatedly — not to make the cost disappear.</p>
<p>The right framing is this: chemical foundation models are engines that drastically accelerate the <em>exploration</em> phase of scientific discovery. They reduce the cost of hypothesis generation, broaden the searchable chemical space, and surface candidates for expert validation. What they are not — and may never be, given the nature of physical law — is a replacement for domain understanding, careful data curation, and rigorous validation.</p>
<p>Scale matters. But in chemistry, physics matters more. And until our models can genuinely compose what they have learned about molecular fragments into predictions about new ones, the universal promise remains exactly that — a promise.</p>


</section>

 ]]></description>
  <category>research</category>
  <category>machine learning</category>
  <category>chemistry</category>
  <guid>https://nourollah.me/blog/posts/chemical-foundation-models/</guid>
  <pubDate>Mon, 11 May 2026 23:00:00 GMT</pubDate>
  <media:content url="https://nourollah.me/blog/posts/chemical-foundation-models/molecule.jpg" medium="image" type="image/jpeg"/>
</item>
<item>
  <title>A Decade of Linux Setups — Why I Stopped Looking for ‘The One’</title>
  <dc:creator>Amir Masoud Nourollah</dc:creator>
  <link>https://nourollah.me/blog/posts/decade-of-linux-setups/</link>
  <description><![CDATA[ 





<section id="how-i-landed-on-fedora" class="level2">
<h2 class="anchored" data-anchor-id="how-i-landed-on-fedora">How I Landed on Fedora</h2>
<p>For many years, I used a Debian-based distribution as my primary operating system. I started with <a href="https://www.debian.org/">Debian</a> itself, and later switched to <a href="https://ubuntu.com/">Ubuntu</a> for convenience. I had a good experience with both, but the more I learnt about the Linux ecosystem, the more I felt I did not need the extra layers Ubuntu puts on top of Debian. I started exploring a variety of popular and expert-level distributions. I wanted a more “pure” Linux experience — closer to the upstream projects and communities. Soon, I realised that the Debian package ecosystem is far wider than the Red Hat ecosystem, and switching to a Red Hat-based distribution such as <a href="https://fedoraproject.org/">Fedora</a> or <a href="https://www.centos.org/">CentOS</a> was difficult because some of the software I used daily was not published as <code>.rpm</code> packages.</p>
<p>Considering simplicity, full control over my system, and the breadth of available packages, <a href="https://archlinux.org/">Arch Linux</a> eventually made its way onto my list. My first installation attempt was unpleasant, but going through the installation process — feeling that fingerprint of control over every part of the OS — made me warm to it quickly. I could find almost anything in the <a href="https://aur.archlinux.org/">AUR</a>, spanning from packages available in other distributions to wrapped legacy packages whose development had been discontinued and removed from mainstream repositories. I had a lot of fun, even though I nearly broke my system more than once. But the complexity of installation and personalisation, and the differences between my desktop and server environments, eventually made Arch difficult to sustain. Along the way I tried some Arch-based distributions — <a href="https://manjaro.org/">Manjaro</a>, <a href="https://endeavouros.com/">EndeavourOS</a>, and <a href="https://blackarch.org/">BlackArch</a> as an alternative to <a href="https://www.kali.org/">Kali</a>. All of them were pleasant experiences, but none of them addressed my real problem: a unified ecosystem for both production and personal use.</p>
<p>I had always had a soft spot for Red Hat and was a fan of it for production servers. At the time, Red Hat was not free for personal use, so I went with CentOS to unify my environment. But as a developer who was not yet familiar with containerisation — tools like <a href="https://podman.io/">Podman</a> and <a href="https://www.docker.com/">Docker</a> — I needed bleeding-edge packages to practise with and keep up with the software I was building. CentOS was not the answer either.</p>
<p>I had always known about Fedora — it has long been one of the pioneer distributions in the Linux ecosystem — but I had run into problems configuring my Nvidia GPU drivers and occasional glitches in video games due to missing or improperly configured components. Around that time, a new distribution was rising: <a href="https://nobaraproject.org/">Nobara</a>, a highly optimised Fedora-based distribution built for gaming. If a distribution is tuned for gaming — with up-to-date kernels, fresh GPU drivers, and low-level performance tweaks — it tends to get along well with machine learning setups too, and Nobara became my daily driver for a while. But I eventually realised it is not a community-driven project — it is maintained by a single person. I needed to respect my commitment to the open-source and community-driven spirit, so I started looking for an alternative and stumbled upon the <a href="https://github.com/devangshekhawat/Fedora-44-Post-Install-Guide">Fedora Post Install Guide</a>.</p>
<p>I thought: why not give Fedora one final, honest try? For a good while, that try looked like the end of my distro-hopping on the desktop. Following the guide transformed Fedora — I have always been a <a href="https://kde.org/">KDE</a> user and have never warmed to GNOME — into an OS that was smooth, stable, and genuinely enjoyable to live in. Everything I had been looking for was there. One problem remained, though: some packages were unavailable in the default repositories, or required adding custom sources. Especially with the recent wave of <a href="https://www.rust-lang.org/">Rust</a>-based tools for Linux, I had adopted several in my daily workflow that simply were not in DNF.</p>
<hr>
</section>
<section id="how-i-fixed-the-packages-problem" class="level2">
<h2 class="anchored" data-anchor-id="how-i-fixed-the-packages-problem">How I Fixed the Packages Problem</h2>
<p>That remaining problem — missing packages — was not unique to Fedora. It had been following me across every distribution I had ever used, in different forms. On Debian it was outdated versions. On Arch it was AUR maintenance risk. On CentOS it was the gap between stability and currency. Fedora brought me closer than anything else had, but it did not fully close it. The answer, when it finally arrived, did not come from the distribution at all.</p>
<p>Before getting to that, I want to talk about my relationship with Python — because the solution to the packages problem and the solution to surviving the Python ecosystem turned out to be the same thing.</p>
<section id="pixi-the-missing-piece-for-the-python-ecosystem-and-beyond" class="level3">
<h3 class="anchored" data-anchor-id="pixi-the-missing-piece-for-the-python-ecosystem-and-beyond"><a href="https://pixi.prefix.dev/latest/">Pixi</a>: The Missing Piece for the Python Ecosystem and Beyond</h3>
<p>I started my programming journey with Java in 2010. It was one of the most elegant languages available at the time, and I vividly remember compiling Android apps before Android Studio with <a href="https://eclipseide.org">Eclipse</a>, installing them through a <a href="https://www.bluestacks.com/">BlueStacks</a> emulator. Later I switched to C/C++ to get closer to the underlying machine — learning the hard way about setting up projects, installing libraries system-wide, writing <code>Makefile</code>s, and eventually <code>CMakeLists.txt</code>. Cross-compiling for another architecture was painful, but it was structured and I understood every piece of it. I never touched package managers like <a href="https://conan.io/">Conan</a> or <a href="https://vcpkg.io/">vcpkg</a> until much later.</p>
<p>Python was initially forced on me by an assignment. I just started writing it — some trial and error — and it worked. There was no AI to answer questions in 2020, so I learnt mostly by searching. Within a year Python had become my default language for assignments and eventually for shell scripting, replacing Bash in many places. Its package manager made the ecosystem feel welcoming, and the breadth of available libraries was remarkable.</p>
<p>To avoid dependency conflicts I kept a set of virtual environments in <code>$HOME/.venv/</code> — one for computer vision, one for networking, one for scripting, one for signal processing — and activated whichever I needed. It worked, until I tried moving a project between systems. Binary packages were a particular nightmare. <a href="https://docs.conda.io/">Conda</a> was the standard answer for that, but it was too slow and too heavy for my taste. I kept trying to avoid it, compiling packages from source with my own compiler out of old C/C++ habits. Something was fundamentally wrong at the portability level — Python is interpreted, it should be portable, and yet reproducing an environment reliably across machines felt like a constant struggle. I tried <a href="https://pip.pypa.io/en/stable/reference/requirements-file-format/"><code>requirements.txt</code></a>, then <a href="https://python-poetry.org/">Poetry</a>, then <a href="https://github.com/astral-sh/uv">uv</a>. Both Poetry and uv were excellent tools, but neither handled binary packages independently — I still needed <code>mamba</code> alongside them for <code>torch</code>-based projects, and anything involving <a href="https://github.com/rusty1s/pytorch_scatter"><code>torch_scatter</code></a> could turn into a nightmare.</p>
<p>Then I read a post about <a href="https://pixi.prefix.dev/latest/">pixi</a> somewhere and it immediately caught my attention. I ran to try it — a project manager that handles <code>pip</code> via <code>uv</code> and <code>conda</code> via <code>mamba</code> simultaneously, in a single environment file, without installing a heavy default package set. It worked across platforms: not just <code>x86_64</code>, but <code>aarch64</code> and others too. You could even add custom channels. I had found what I had been looking for — a single tool to manage everything from a simple shell script to a complex multi-platform project with heavy binary dependencies.</p>
</section>
<section id="managing-packages" class="level3">
<h3 class="anchored" data-anchor-id="managing-packages">Managing Packages</h3>
<p>On Fedora, the default package manager <a href="https://dnf.readthedocs.io/en/latest/"><code>DNF</code></a> was always the first place I looked, and on openSUSE Tumbleweed <a href="https://en.opensuse.org/Portal:Zypper"><code>zypper</code></a> plays the same role. For GUI applications, <a href="https://flatpak.org/">Flatpak</a> has become indispensable — developers tend to keep their Flatpak releases more up to date than distribution repositories, and it covers the applications I use most: <a href="https://telegram.org/">Telegram</a>, <a href="https://discord.com/">Discord</a>, and others. I install almost everything GUI-related through Flatpak.</p>
<p>For terminal tools and binary utilities, however, neither DNF nor Flatpak covers everything — particularly the newer wave of Rust-based CLI tools. On remote servers where I have no installation privileges, the situation is even more constrained.</p>
<p>Pixi turned out to solve this problem too. I had initially found its <code>pixi shell</code> activation requirement slightly annoying for tools I wanted available globally. Then I discovered:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pixi</span> global install <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span>package_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span></span></code></pre></div></div>
<p>This was a game changer. I could install tools outside any virtual environment — not as project dependencies, but as system-level utilities available anywhere. It became the first command I run on any new machine:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pixi</span> global install zoxide ripgrep fd-find bat eza btm dust ncdu delta hyperfine xh sd neovim tmux zellij btop zsh xonsh skim yazi tokei</span></code></pre></div></div>
<p>No custom repositories. No extra layers. No searching for obscure PPAs or Copr entries. Everything in one command.</p>
<p>uv never left my setup either. Pixi already uses it underneath for anything that comes from PyPI, but <code>pixi global</code> installs from conda channels, so a command-line tool published only on PyPI is not reachable that way. For those I call uv directly:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb3-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">uv</span> tool install <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span>package_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span></span></code></pre></div></div>
<p>It is the PyPI counterpart of <code>pixi global install</code>: each tool gets its own isolated environment, and its command is available everywhere. Between the two, pixi for conda packages and uv for PyPI ones, I can install almost any developer tool without root access, which matters on exactly those remote servers.</p>
<hr>
</section>
</section>
<section id="why-i-left-fedora-for-opensuse-tumbleweed" class="level2">
<h2 class="anchored" data-anchor-id="why-i-left-fedora-for-opensuse-tumbleweed">Why I Left Fedora for openSUSE Tumbleweed</h2>
<p>Fedora was, honestly, excellent. It was stable, polished, and day to day I rarely had anything to complain about. What eventually wore me down was not breakage — it was the release cycle. Fedora ships a new version roughly every six months, and each release is supported for only about thirteen months, so staying current means a major-version upgrade twice a year. The upgrades themselves usually went fine, but each one still meant setting time aside, checking that third-party repositories and GPU drivers had caught up, and keeping an eye on the end-of-life countdown. On the machine I depend on for my research, that recurring chore became friction I did not want.</p>
<p>I had already tried <a href="https://www.opensuse.org/#Tumbleweed">openSUSE Tumbleweed</a> around the time I was first settling into Fedora, so moving back to it was an easy decision. Tumbleweed is a rolling release, so there is no versioning at all: no “Fedora 43 to 44” migration, no end-of-life date to plan around — the system simply stays current. And despite being rolling, it is the most stable distribution I have used, thanks to openSUSE’s automated testing pipeline (<a href="https://open.qa/">openQA</a>), which gates every snapshot before it ships. It is also one of the most genuinely community-oriented projects in the Linux world, which matters to me for the same reason I left Nobara.</p>
<p>For me, Tumbleweed is the best of both worlds: the freshness of a rolling release, without giving up the stability I had come to rely on with Fedora.</p>
<hr>
</section>
<section id="different-distros-for-different-jobs" class="level2">
<h2 class="anchored" data-anchor-id="different-distros-for-different-jobs">Different Distros for Different Jobs</h2>
<p>Tumbleweed is now my desktop daily driver, but the story does not end there — because Linux is not just my desktop. It is also every server I deploy to, every container image I build from, and every machine I do not personally sit in front of.</p>
<p>The fact that openSUSE is SUSE-based rather than Red Hat-based barely matters on the desktop any more — Flatpak and pixi cover the gap regardless of what is underneath. For servers, though, it matters a great deal: if I am deploying to infrastructure running <a href="https://www.suse.com/products/server/">SLES</a>, openSUSE (Tumbleweed, or <a href="https://get.opensuse.org/leap/">openSUSE Leap</a> for a non-rolling option) is the natural match, whereas a RHEL-family choice makes more sense alongside RHEL-compatible infrastructure.</p>
<p>Which brings me to <a href="https://almalinux.org/">AlmaLinux</a>. Most of my Docker base images are AlmaLinux — it is a clean, community-driven RHEL rebuild, and that compatibility matters when the goal is reproducible builds across HPC systems, cloud instances, and local containers that all ultimately trace back to a RHEL lineage. For a long time, AlmaLinux on the desktop felt like a non-starter — too conservative, too server-oriented, missing too much. But with Flatpak filling in GUI applications and pixi filling in everything else, that gap has effectively closed. I now run AlmaLinux on some of my desktops too, and it feels far less like a compromise than it would have a few years ago.</p>
<p>So the honest version of the story is less “I found The One Distro” and more “I stopped needing to find one.” openSUSE Tumbleweed is my desktop — KDE, gaming, day-to-day tinkering — with no upgrade cycle to babysit. AlmaLinux sits underneath almost everything I containerise, and increasingly on desktops too. Fedora remains a distribution I respect and would happily recommend; I simply prefer not to have a release calendar. What used to feel like indecision now feels like having the right tool for the job — and the credit, again, goes to Flatpak and pixi for making the switching cost low enough that it no longer feels like a trade-off.</p>
<hr>
</section>
<section id="the-setup" class="level2">
<h2 class="anchored" data-anchor-id="the-setup">The Setup</h2>
<p>If you are curious about the tools and how I configure them, this section is for you. The nice thing about all of this is that it is entirely distro-agnostic — even my IDEs, <a href="https://zed.dev/">Zed</a> (the main one) and <a href="https://code.visualstudio.com/">VS Code</a> (the reserve), are available everywhere these days. Whether I am on openSUSE Tumbleweed, AlmaLinux, or Fedora, the setup below is identical, because Flatpak, <code>pixi global install</code>, and IDE installers all work the same way regardless of distro.</p>
<section id="terminal-tools" class="level3">
<h3 class="anchored" data-anchor-id="terminal-tools">Terminal Tools</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Tool</th>
<th style="text-align: left;">What it does</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/ajeetdsouza/zoxide"><code>zoxide</code></a></td>
<td style="text-align: left;">Smarter <code>cd</code> with directory history and frecency ranking</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/BurntSushi/ripgrep"><code>ripgrep</code></a></td>
<td style="text-align: left;">Fast recursive text search (<code>rg</code>)</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/sharkdp/fd"><code>fd-find</code></a></td>
<td style="text-align: left;">Fast, ergonomic <code>find</code> replacement</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/sharkdp/bat"><code>bat</code></a></td>
<td style="text-align: left;"><code>cat</code> with syntax highlighting and Git integration</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/eza-community/eza"><code>eza</code></a></td>
<td style="text-align: left;">Modern <code>ls</code> replacement with icons and tree view</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/ClementTsang/bottom"><code>btm</code></a></td>
<td style="text-align: left;">Interactive terminal system monitor</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/bootandy/dust"><code>dust</code></a> / <a href="https://dev.yorhel.nl/ncdu"><code>ncdu</code></a></td>
<td style="text-align: left;">Fast, intuitive disk usage analyser</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/dandavison/delta"><code>delta</code></a></td>
<td style="text-align: left;">Improved <code>git diff</code> pager with syntax highlighting</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/sharkdp/hyperfine"><code>hyperfine</code></a></td>
<td style="text-align: left;">CLI benchmarking tool</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/XAMPPRocky/tokei"><code>tokei</code></a></td>
<td style="text-align: left;">Fast code statistics — lines of code, comments, and blanks per language</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/ducaale/xh"><code>xh</code></a></td>
<td style="text-align: left;">Friendly, fast HTTP client</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/chmln/sd"><code>sd</code></a></td>
<td style="text-align: left;">Intuitive search-and-replace for the command line</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://neovim.io/"><code>neovim</code></a></td>
<td style="text-align: left;">Modal text editor</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://zellij.dev/"><code>zellij</code></a> / <a href="https://github.com/tmux/tmux"><code>tmux</code></a></td>
<td style="text-align: left;">Terminal workspace and session managers</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/aristocratos/btop"><code>btop</code></a></td>
<td style="text-align: left;">Beautiful terminal resource monitor</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/skim-rs/skim"><code>skim</code></a></td>
<td style="text-align: left;">Fuzzy finder (<code>sk</code>) for files, history, and more</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/sxyazi/yazi"><code>yazi</code></a></td>
<td style="text-align: left;">Fast, terminal-based file manager</td>
</tr>
</tbody>
</table>
</section>
<section id="queuing-gpu-work-with-pueue" class="level3">
<h3 class="anchored" data-anchor-id="queuing-gpu-work-with-pueue">Queuing GPU Work with pueue</h3>
<p>One more tool that has quietly become part of my daily workflow is <a href="https://github.com/Nukesor/pueue">pueue</a> — a lightweight command-line task manager and scheduler. You hand it shell commands, and it queues them up, running them one after another (or in parallel, if you configure multiple workers) regardless of whether you’re still logged in. I use it specifically to keep my GPU busy: I queue up several experiments before I step away from my desk or laptop, and pueue works through them in sequence, starting the next one the moment the previous one finishes — so the GPU keeps working even when I’m not.</p>
<p>Installation is just as easy via pixi, and the daemon only needs enabling once:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Install pueue (client + daemon) globally via pixi</span></span>
<span id="cb4-2"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pixi</span> global install pueue</span>
<span id="cb4-3"></span>
<span id="cb4-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Enable and start the daemon as a systemd user service</span></span>
<span id="cb4-5"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">systemctl</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--user</span> enable pueued</span>
<span id="cb4-6"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">systemctl</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--user</span> start pueued</span>
<span id="cb4-7"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">systemctl</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--user</span> status pueued</span></code></pre></div></div>
<p>From there, queuing experiments is as simple as:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb5-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pueue</span> add <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--</span> pixi run python train.py <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--config</span> exp1.yaml</span>
<span id="cb5-2"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pueue</span> add <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--</span> pixi run python train.py <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--config</span> exp2.yaml</span>
<span id="cb5-3"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pueue</span> status</span></code></pre></div></div>
</section>
<section id="shell-aliases" class="level3">
<h3 class="anchored" data-anchor-id="shell-aliases">Shell Aliases</h3>
<p>I add the following to my <code>.zshrc</code> or <code>.bashrc</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># zoxide must be initialized before the `cd` alias below, otherwise the `z`</span></span>
<span id="cb6-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># function doesn't exist yet and `cd` fails until you manually re-source</span></span>
<span id="cb6-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># this file</span></span>
<span id="cb6-4"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">eval</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">zoxide</span> init zsh<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-5"></span>
<span id="cb6-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Modern replacements</span></span>
<span id="cb6-7"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> ls=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eza --icons --group-directories-first"</span></span>
<span id="cb6-8"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> tree=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eza --icons --tree"</span></span>
<span id="cb6-9"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> treed=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eza --icons --tree --level"</span></span>
<span id="cb6-10"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> lsdu=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'du -a -h --max-depth=1 | sort -hr'</span></span>
<span id="cb6-11"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> du=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dust'</span></span>
<span id="cb6-12"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> top=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btm'</span></span>
<span id="cb6-13"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> cd=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'z'</span></span>
<span id="cb6-14"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> grep=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rg'</span></span>
<span id="cb6-15"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> vim=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'nvim'</span></span>
<span id="cb6-16"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> search=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sk'</span></span>
<span id="cb6-17"></span>
<span id="cb6-18"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Pipe --help and -h output through bat for syntax highlighting</span></span>
<span id="cb6-19"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-g</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-h</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'-h 2&gt;&amp;1 | bat --language=help --style=plain'</span></span>
<span id="cb6-20"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-g</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--help</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'--help 2&gt;&amp;1 | bat --language=help --style=plain'</span></span>
<span id="cb6-21"></span>
<span id="cb6-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set of general useful functions</span></span>
<span id="cb6-23"></span>
<span id="cb6-24"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Create directory and instantly cd into it</span></span>
<span id="cb6-25"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mkcd()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-26">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mkdir</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-p</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">&amp;&amp;</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">cd</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-27"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-28"></span>
<span id="cb6-29"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Easily move UP 'N' directories (e.g., 'up 3' moves up 3 levels)</span></span>
<span id="cb6-30"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">up()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-31">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">levels</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:-</span>1<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-32">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">path</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span></span>
<span id="cb6-33">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">((</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">i</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">i</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">levels</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">i</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">++</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">));</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">do</span></span>
<span id="cb6-34">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">path</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"../</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$path</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-35">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">done</span></span>
<span id="cb6-36">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">cd</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$path</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-37"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-38"></span>
<span id="cb6-39"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Check public and local IP addresses cleanly</span></span>
<span id="cb6-40"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">myip()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-41">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">local_ip</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">hostname</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-I</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span>/dev/null <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">awk</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'{print $1}'</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">||</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">ipconfig</span> getifaddr en0 <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span>/dev/null <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">||</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Unknown"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span></span>
<span id="cb6-42">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Local IP:   </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$local_ip</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-43">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Public IP:  </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">curl</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-s</span> https://ifconfig.me<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-44">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Location:   </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">curl</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-s</span> https://ipapi.co/city/<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">, </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">curl</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-s</span> https://ipapi.co/country_name/<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-45"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-46"></span>
<span id="cb6-47"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Runs a clean multi-record (A, AAAA, MX, NS, TXT) DNS check for a domain.</span></span>
<span id="cb6-48"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dnslookup()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-49">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb6-50">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: dnslookup &lt;domain&gt;"</span></span>
<span id="cb6-51">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb6-52">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb6-53">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"=== A / AAAA Records ==="</span></span>
<span id="cb6-54">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">dig</span> +short <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> A <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> AAAA</span>
<span id="cb6-55">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\n=== MX Records ==="</span></span>
<span id="cb6-56">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">dig</span> +short <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> MX</span>
<span id="cb6-57">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\n=== NS Records ==="</span></span>
<span id="cb6-58">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">dig</span> +short <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> NS</span>
<span id="cb6-59">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\n=== TXT Records ==="</span></span>
<span id="cb6-60">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">dig</span> +short <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> TXT</span>
<span id="cb6-61"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-62"></span>
<span id="cb6-63"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Find which process is listening on a specific port (e.g., 'port 8080')</span></span>
<span id="cb6-64"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">port()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-65">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb6-66">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: port &lt;port_number&gt;"</span></span>
<span id="cb6-67">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb6-68">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb6-69">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">lsof</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-i</span> :<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-70"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-71"></span>
<span id="cb6-72"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Locates and forcibly terminates (kill -9) whatever process is occupying a given port.</span></span>
<span id="cb6-73"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">killport()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-74">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb6-75">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: killport &lt;port_number&gt;"</span></span>
<span id="cb6-76">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb6-77">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb6-78">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">pid</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">lsof</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-t</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-i:</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span></span>
<span id="cb6-79">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-n</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$pid</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb6-80">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Killing process </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$pid</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> on port </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">..."</span></span>
<span id="cb6-81">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">kill</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-9</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$pid</span></span>
<span id="cb6-82">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span></span>
<span id="cb6-83">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"No process found on port </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">."</span></span>
<span id="cb6-84">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb6-85"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-86"></span>
<span id="cb6-87"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Quick HTTP server in the current directory (Python 3)</span></span>
<span id="cb6-88"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">serve()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-89">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">port</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:-</span>8000<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-90">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Serving current directory on http://localhost:</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${port}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-91">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">python3</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-m</span> http.server <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$port</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-92"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-93"></span>
<span id="cb6-94"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Pretty-prints each directory in your $PATH on a new line for easy inspection.</span></span>
<span id="cb6-95"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">path()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-96">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$PATH</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tr</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">':'</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'\n'</span></span>
<span id="cb6-97"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-98"></span>
<span id="cb6-99"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Side-by-side file comparison using your default Neovim alias.</span></span>
<span id="cb6-100"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">vdiff()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-101">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$#</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-lt</span> 2 <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: vdiff &lt;file1&gt; &lt;file2&gt;"</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb6-102">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">nvim</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-d</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$2</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-103"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-104"></span>
<span id="cb6-105"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Previews the head of gzipped or zstd-compressed text/log files without extraction.</span></span>
<span id="cb6-106"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">vgz()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-107">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: vgz &lt;file.gz|file.zst&gt; [lines]"</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb6-108">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">lines</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:-</span>20<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb6-109">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">case</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span></span>
<span id="cb6-110">        <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">.gz</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span>  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gzip</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-dc</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">head</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-n</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$lines</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb6-111">        <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">.zst</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">zstdcat</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">head</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-n</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$lines</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb6-112">        <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span>     <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Unsupported archive format."</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb6-113">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">esac</span></span>
<span id="cb6-114"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb6-115"></span>
<span id="cb6-116"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Lists files inside .zip, .tar, .tar.gz, or .whl archives without extracting.</span></span>
<span id="cb6-117"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">vzip()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb6-118">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: vzip &lt;archive_file&gt;"</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb6-119">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">case</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span></span>
<span id="cb6-120">        <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">.zip</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">.whl</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unzip</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-l</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb6-121">        <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">.tar.gz</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">.tgz</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tar</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-tzvf</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb6-122">        <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">.tar</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tar</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-tvf</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb6-123">        <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Unsupported extension."</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb6-124">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">esac</span></span>
<span id="cb6-125"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span></code></pre></div></div>
</section>
<section id="zsh-plugins" class="level3">
<h3 class="anchored" data-anchor-id="zsh-plugins">Zsh Plugins</h3>
<p>On top of the aliases above, which work in both Zsh and Bash, I add three plugins to my Zsh shell:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Plugin</th>
<th style="text-align: left;">What it does</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/zsh-users/zsh-autosuggestions"><code>zsh-autosuggestions</code></a></td>
<td style="text-align: left;">Suggests commands as you type, based on your history — accept with <code>→</code></td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/zsh-users/zsh-syntax-highlighting"><code>zsh-syntax-highlighting</code></a></td>
<td style="text-align: left;">Highlights commands as you type, so typos and invalid commands stand out before you hit Enter</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/zdharma-continuum/fast-syntax-highlighting"><code>fast-syntax-highlighting</code></a></td>
<td style="text-align: left;">A faster, richer highlighter with more detailed colouring of paths, options, and strings</td>
</tr>
</tbody>
</table>
<p>No plugin manager is needed — clone them once:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb7-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mkdir</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-p</span> ~/.zsh/plugins</span>
<span id="cb7-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">git</span> clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/plugins/zsh-autosuggestions</span>
<span id="cb7-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">git</span> clone https://github.com/zsh-users/zsh-syntax-highlighting ~/.zsh/plugins/zsh-syntax-highlighting</span>
<span id="cb7-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">git</span> clone https://github.com/zdharma-continuum/fast-syntax-highlighting ~/.zsh/plugins/fast-syntax-highlighting</span></code></pre></div></div>
<p>Then source them at the <strong>end</strong> of <code>~/.zshrc</code> — the highlighters wrap the line editor’s widgets, so they need to load after everything else:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb8-1"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">source</span> ~/.zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh</span>
<span id="cb8-2"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">source</span> ~/.zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh</span>
<span id="cb8-3"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">source</span> ~/.zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh</span></code></pre></div></div>
<p>To update them later, run <code>git -C &lt;plugin_dir&gt; pull</code> for each one.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center collapsed" data-bs-toggle="collapse" data-bs-target=".callout-1-contents" aria-controls="callout-1" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Optional: my Oh My Posh prompt — click to expand
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-1" class="callout-1-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<p>The prompt itself is drawn by <a href="https://ohmyposh.dev/">Oh My Posh</a>, a fast, shell-agnostic prompt engine. I use it with Zsh, but the exact same config works in Bash (and Fish, Xonsh, PowerShell, and others) — only the one init line differs.</p>
<p><strong>1. Install Oh My Posh.</strong> The official script drops a single binary into <code>~/.local/bin</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb9-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">curl</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-s</span> https://ohmyposh.dev/install.sh <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bash</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-s</span></span></code></pre></div></div>
<p><strong>2. Install a Nerd Font.</strong> The prompt uses powerline arrows and icons, which need a <a href="https://www.nerdfonts.com/">Nerd Font</a>. Oh My Posh can install one for you — then select it in your terminal emulator’s settings:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb10-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">oh-my-posh</span> font install meslo</span></code></pre></div></div>
<p><strong>3. Put the config in place.</strong> I keep my theme at <code>~/.config/ohmyposh/jandedobbeleer.omp.json</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb11-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mkdir</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-p</span> ~/.config/ohmyposh</span>
<span id="cb11-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># then save the JSON below as ~/.config/ohmyposh/jandedobbeleer.omp.json</span></span></code></pre></div></div>
<p><strong>4. Initialise it in your shell.</strong> Add one line to your shell config — after any <code>PATH</code> setup, but <em>before</em> the Zsh plugins, which should stay last:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb12-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ~/.zshrc</span></span>
<span id="cb12-2"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">eval</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">oh-my-posh</span> init zsh <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--config</span> ~/.config/ohmyposh/jandedobbeleer.omp.json<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb12-3"></span>
<span id="cb12-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ~/.bashrc</span></span>
<span id="cb12-5"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">eval</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">oh-my-posh</span> init bash <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--config</span> ~/.config/ohmyposh/jandedobbeleer.omp.json<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span></code></pre></div></div>
<p>Open a new terminal (or <code>source</code> the file) and the prompt appears.</p>
<p><strong>What the prompt shows.</strong> The config is based on the <code>jandedobbeleer</code> theme that ships with Oh My Posh. Most segments only appear when they are relevant:</p>
<ul>
<li><strong>Left side:</strong>
<ul>
<li><strong>User and path:</strong> your username, then the current directory.</li>
<li><strong>Git:</strong> the branch, ahead/behind status, and counts of changed, staged and stashed files. The segment changes colour depending on the repository’s state: clean, dirty, ahead/behind, or diverged.</li>
<li><strong>Language versions:</strong> Node, Go, Julia, Python, Ruby, and Azure Functions. Each one appears only inside a project for that language. For example, the Python version only shows in a folder that contains Python files.</li>
<li><strong>Cloud and privileges:</strong> the active AWS profile and region, and a wrench icon when you are root.</li>
<li><strong>Last command:</strong> how long the previous command took, and its status, which turns from green to red when it fails.</li>
</ul></li>
<li><strong>Right side:</strong> the shell name, the currently playing track in YouTube Music, battery level and charging state, and the time.</li>
</ul>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode json code-with-copy"><code class="sourceCode json"><span id="cb13-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-2">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"$schema"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-3">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"blocks"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="cb13-4">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-5">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"alignment"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"left"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-6">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"segments"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="cb13-7">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-8">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#c386f1"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-9">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-10">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"leading_diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-11">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-12">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" {{ .UserName }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-13">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"trailing_diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-14">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"session"</span></span>
<span id="cb13-15">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-16">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-17">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ff479c"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-18">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-19">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-20">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-21">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"folder_separator_icon"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-22">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"home_icon"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"~"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-23">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"full"</span></span>
<span id="cb13-24">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-25">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-26">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"   {{ .Path }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-27">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"path"</span></span>
<span id="cb13-28">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-29">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-30">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#fffb38"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-31">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background_templates"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="cb13-32">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{ if or (.Working.Changed) (.Staging.Changed) }}#FF9248{{ end }}"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-33">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{ if and (gt .Ahead 0) (gt .Behind 0) }}#ff4500{{ end }}"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-34">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{ if gt .Ahead 0 }}#B388FF{{ end }}"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-35">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{ if gt .Behind 0 }}#B388FF{{ end }}"</span></span>
<span id="cb13-36">          <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-37">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#193549"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-38">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"leading_diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-39">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-40">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-41">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"branch_template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{ trunc 25 .Branch }}"</span></span>
<span id="cb13-42">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-43">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-44">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" {{ .UpstreamIcon }}{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }}  {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }}  {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }}  {{ .StashCount }}{{ end }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-45">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"trailing_diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-46">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"git"</span></span>
<span id="cb13-47">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-48">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-49">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#6CA35E"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-50">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-51">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-52">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-53">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  {{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-54">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"node"</span></span>
<span id="cb13-55">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-56">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-57">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#8ED1F7"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-58">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#111111"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-59">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-60">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-61">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-62">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"go"</span></span>
<span id="cb13-63">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-64">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-65">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#4063D8"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-66">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#111111"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-67">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-68">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-69">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-70">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"julia"</span></span>
<span id="cb13-71">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-72">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-73">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#FFDE57"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-74">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#111111"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-75">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-76">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-77">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"display_mode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"files"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-78">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"fetch_virtual_env"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span></span>
<span id="cb13-79">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-80">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-81">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-82">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"python"</span></span>
<span id="cb13-83">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-84">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-85">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#AE1401"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-86">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-87">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-88">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-89">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"display_mode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"files"</span></span>
<span id="cb13-90">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-91">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-92">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-93">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ruby"</span></span>
<span id="cb13-94">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-95">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-96">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#FEAC19"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-97">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-98">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-99">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-100">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"display_mode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"files"</span></span>
<span id="cb13-101">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-102">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-103">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-104">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"azfunc"</span></span>
<span id="cb13-105">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-106">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-107">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background_templates"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="cb13-108">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{if contains </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">default</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> .Profile}}#FFA400{{end}}"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-109">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{if contains </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">jan</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> .Profile}}#f1184c{{end}}"</span></span>
<span id="cb13-110">          <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-111">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-112">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-113">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-114">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"display_default"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span></span>
<span id="cb13-115">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-116">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-117">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  {{ .Profile }}{{ if .Region }}@{{ .Region }}{{ end }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-118">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"aws"</span></span>
<span id="cb13-119">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-120">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-121">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffff66"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-122">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#111111"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-123">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-124">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-125">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-126">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"root"</span></span>
<span id="cb13-127">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-128">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-129">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#83769c"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-130">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-131">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-132">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"always_enabled"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span></span>
<span id="cb13-133">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-134">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"plain"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-135">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;transparent&gt;&lt;/&gt;  {{ .FormattedMs }}⠀"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-136">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"executiontime"</span></span>
<span id="cb13-137">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-138">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-139">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#00897b"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-140">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background_templates"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="cb13-141">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{ if gt .Code 0 }}#e91e63{{ end }}"</span></span>
<span id="cb13-142">          <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-143">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-144">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-145">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"always_enabled"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span></span>
<span id="cb13-146">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-147">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-148">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;parentBackground&gt;&lt;/&gt;  "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-149">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"trailing_diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-150">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"status"</span></span>
<span id="cb13-151">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb13-152">      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-153">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"prompt"</span></span>
<span id="cb13-154">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-155">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-156">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"segments"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="cb13-157">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-158">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#0077c2"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-159">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-160">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"plain"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-161">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;#0077c2,transparent&gt;&lt;/&gt;  {{ .Name }} &lt;transparent,#0077c2&gt;&lt;/&gt;"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-162">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"shell"</span></span>
<span id="cb13-163">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-164">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-165">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1BD760"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-166">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#111111"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-167">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"invert_powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-168">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-169">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-170">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"paused_icon"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-171">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"playing_icon"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span></span>
<span id="cb13-172">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-173">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-174">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  {{ .Icon }}{{ if ne .Status </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">stopped</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> }}{{ .Artist }} - {{ .Track }}{{ end }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-175">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ytm"</span></span>
<span id="cb13-176">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-177">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-178">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f36943"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-179">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background_templates"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="cb13-180">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{if eq </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">Charging</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> .State.String}}#40c4ff{{end}}"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-181">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{if eq </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">Discharging</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> .State.String}}#ff5722{{end}}"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-182">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{if eq </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">Full</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> .State.String}}#4caf50{{end}}"</span></span>
<span id="cb13-183">          <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-184">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ffffff"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-185">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"invert_powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-186">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"powerline_symbol"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-187">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"options"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-188">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"charged_icon"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-189">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"charging_icon"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-190">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"discharging_icon"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span></span>
<span id="cb13-191">          <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb13-192">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-193">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" {{ if not .Error }}{{ .Icon }}{{ .Percentage }}{{ end }}{{ .Error }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-194">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"battery"</span></span>
<span id="cb13-195">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-196">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb13-197">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"background"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2e9599"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-198">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"foreground"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#111111"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-199">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"invert_powerline"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-200">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"leading_diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-201">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"style"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-202">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" {{ .CurrentDate | date .Format }} "</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-203">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"trailing_diamond"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-204">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"time"</span></span>
<span id="cb13-205">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb13-206">      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-207">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"type"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rprompt"</span></span>
<span id="cb13-208">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb13-209">  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-210">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"console_title_template"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"{{ .Shell }} in {{ .Folder }}"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-211">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"final_space"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb13-212">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"version"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span></span>
<span id="cb13-213"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
</div>
</div>
</div>
<p>For <a href="https://neovim.io/">Neovim</a>, I use <a href="https://astronvim.com/">AstroNvim</a> as my configuration framework:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb14-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">git</span> clone <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--depth</span> 1 https://github.com/AstroNvim/template ~/.config/nvim <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">\</span></span>
<span id="cb14-2">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">&amp;&amp;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rm</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-rf</span> ~/.config/nvim/.git <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">\</span></span>
<span id="cb14-3">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">&amp;&amp;</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">nvim</span></span></code></pre></div></div>
<p>On top of AstroNvim, I add two plugins:</p>
<ul>
<li><a href="https://github.com/stevearc/oil.nvim"><strong>oil.nvim</strong></a>: edit your filesystem like a normal buffer. Press <code>-</code> to open the current file’s folder, then rename, move, create, or delete files by editing the text. Save with <code>:w</code> and the changes are applied.</li>
<li><a href="https://github.com/nvim-mini/mini.nvim"><strong>mini.nvim</strong></a>: a collection of small, independent modules that you enable one by one. AstroNvim already covers several of them, so I only enable the ones it lacks: <code>mini.ai</code>, for smarter text objects such as “inside function argument”, and <code>mini.surround</code>, to add, change, or delete surrounding quotes and brackets.</li>
</ul>
<p>AstroNvim loads every file in <code>~/.config/nvim/lua/plugins/</code>, so I put both plugins in a file of their own, <code>~/.config/nvim/lua/plugins/extras.lua</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode lua code-with-copy"><code class="sourceCode lua"><span id="cb15-1"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb15-2">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb15-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"stevearc/oil.nvim"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb15-4">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">lazy</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb15-5">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">opts</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{},</span></span>
<span id="cb15-6">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">keys</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb15-7">      <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"-"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;cmd&gt;Oil&lt;cr&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">desc</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Open parent directory"</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb15-8">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb15-9">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb15-10">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb15-11">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"nvim-mini/mini.nvim"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb15-12">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">version</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb15-13">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">config</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span></span>
<span id="cb15-14">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">require</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mini.ai"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">).</span>setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span></span>
<span id="cb15-15">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">require</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mini.surround"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">).</span>setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span></span>
<span id="cb15-16">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb15-17">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">},</span></span>
<span id="cb15-18"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
<p>The next time you open <code>nvim</code>, lazy.nvim installs both of them automatically.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center collapsed" data-bs-toggle="collapse" data-bs-target=".callout-2-contents" aria-controls="callout-2" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Optional: my Claude Code plugins — click to expand
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-2" class="callout-2-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<p>I use <a href="https://claude.com/claude-code">Claude Code</a> daily, and a handful of plugins make it noticeably better. Plugins are installed from inside a Claude Code session with the <code>/plugin</code> command. Everything below comes from Anthropic’s official marketplace, which you can add once if it is not already there:</p>
<pre class="text"><code>/plugin marketplace add anthropics/claude-plugins-official</code></pre>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Plugin</th>
<th style="text-align: left;">What it does</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/anthropics/claude-plugins-official/tree/main/plugins/code-review"><code>code-review</code></a></td>
<td style="text-align: left;">Reviews pull requests with several specialised agents, using confidence scoring to filter out false positives</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/anthropics/claude-plugins-official/tree/main/plugins/code-simplifier"><code>code-simplifier</code></a></td>
<td style="text-align: left;">An agent that tidies recently modified code for clarity, consistency and maintainability without changing its behaviour</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/upstash/context7"><code>context7</code></a></td>
<td style="text-align: left;">Connects Claude to Upstash’s Context7 server, which pulls current, version-specific library documentation and examples into context, so it stops guessing at APIs that have changed</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/anthropics/claude-plugins-official/tree/main/plugins/pyright-lsp"><code>pyright-lsp</code></a></td>
<td style="text-align: left;">Gives Claude the Pyright language server for Python, so it sees real type errors and can jump to definitions instead of guessing</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><a href="https://github.com/anthropics/claude-plugins-official/tree/main/plugins/skill-creator"><code>skill-creator</code></a></td>
<td style="text-align: left;">Helps create new skills, improve existing ones, and benchmark them with evals</td>
</tr>
<tr class="even">
<td style="text-align: left;"><a href="https://github.com/obra/superpowers"><code>superpowers</code></a></td>
<td style="text-align: left;">A library of workflow skills: brainstorming before coding, test-driven development, systematic debugging, and subagent-driven development with built-in review</td>
</tr>
</tbody>
</table>
<p>Each one installs with a single command:</p>
<pre class="text"><code>/plugin install code-review@claude-plugins-official
/plugin install code-simplifier@claude-plugins-official
/plugin install context7@claude-plugins-official
/plugin install pyright-lsp@claude-plugins-official
/plugin install skill-creator@claude-plugins-official
/plugin install superpowers@claude-plugins-official</code></pre>
<p>Two notes:</p>
<ul>
<li><strong><code>pyright-lsp</code></strong> only connects Claude to the language server; the server itself must be on your <code>PATH</code>. Install it with <code>pixi global install pyright</code> (or <code>npm install -g pyright</code>).</li>
<li><strong><code>context7</code></strong> works anonymously out of the box. Set a <code>CONTEXT7_API_KEY</code> environment variable if you hit its rate limits.</li>
</ul>
<section id="beyond-the-official-marketplace-ponytail-and-graphify" class="level4">
<h4 class="anchored" data-anchor-id="beyond-the-official-marketplace-ponytail-and-graphify">Beyond the official marketplace: Ponytail and graphify</h4>
<p>Two of the tools I rely on most do not come from Anthropic’s marketplace at all.</p>
<p><strong><a href="https://github.com/DietrichGebert/ponytail">Ponytail</a></strong> fixes the habit I find most annoying in coding agents: overengineering. Ask for a date picker and an agent will happily install a library or build a calendar by hand; Ponytail makes it stop and climb a ladder first. Does this need to exist? Is it already in the codebase? Does the standard library or the platform already do it? Only then does it write the minimum that works, plus a small test if there is logic in it. The rule is “write only what the task needs”, not “write as little as possible”: validation, error handling and security are never cut. It also adds two commands I use often, <code>/ponytail-review</code> for a change and <code>/ponytail-audit</code> for a whole repository, and a small band above the prompt showing what the current task has cost. It has its own marketplace, so it installs as two separate prompts:</p>
<pre class="text"><code>/plugin marketplace add DietrichGebert/ponytail</code></pre>
<pre class="text"><code>/plugin install ponytail@ponytail</code></pre>
<p>Start a new session afterwards and it is active by default. <code>/ponytail</code> shows or changes the level (<code>lite</code>, <code>full</code> or <code>ultra</code>), and <code>/ponytail band</code> hides or shows the band. Its hooks run on Node.js, so <code>node</code> needs to be on your <code>PATH</code>. Install it only from <code>DietrichGebert/ponytail</code>; other marketplaces carry copies under the same name.</p>
<p><strong><a href="https://github.com/Graphify-Labs/graphify">graphify</a></strong> is a skill rather than a plugin. Type <code>/graphify .</code> in a project and it turns the folder into a knowledge graph: code is parsed locally with tree-sitter, while papers, notes and images go through Claude to pull out concepts and how they connect. The result lands in <code>graphify-out/</code> as an interactive <code>graph.html</code>, a report, and a JSON graph that Claude can query in later sessions instead of re-reading every file. For a research project, where the code, the papers it implements and my notes all live side by side, this is the closest thing to a map of my own head. It needs Python 3.10 or newer, and is installed from the terminal, not from inside Claude Code. It is published only on PyPI, so this is a job for <code>uv tool install</code> from earlier rather than <code>pixi global</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb20-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">uv</span> tool install graphifyy    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># or: pipx install graphifyy</span></span>
<span id="cb20-2"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">graphify</span> install             <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># registers the /graphify skill with Claude Code</span></span></code></pre></div></div>
<p>The PyPI package is spelled <code>graphifyy</code>, with two y’s, while the original name is being reclaimed; the command is still <code>graphify</code>. Then, inside Claude Code:</p>
<pre class="text"><code>/graphify .                            # build the graph for this folder
/graphify . --update                   # re-read only the files that changed
/graphify query "how does X reach Y?"  # ask the graph a question</code></pre>
<p>If you want the graph to stay current on its own, <code>graphify hook install</code> adds a Git hook that rebuilds it after every commit.</p>
</section>
</div>
</div>
</div>
</section>
<section id="slurm-helpers-for-supercomputers" class="level3">
<h3 class="anchored" data-anchor-id="slurm-helpers-for-supercomputers">SLURM Helpers for Supercomputers</h3>
<p>This part is for the HPC crowd. If you have never touched a SLURM cluster, feel free to skip ahead to the conclusion — nothing below will be relevant to you.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center collapsed" data-bs-toggle="collapse" data-bs-target=".callout-3-contents" aria-controls="callout-3" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>SLURM shell helpers — click to expand
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-3" class="callout-3-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<p>For HPC environments running <a href="https://slurm.schedmd.com/">SLURM</a>, I keep these functions in my shell configuration. They make interactive GPU sessions much less tedious to manage — particularly on <a href="https://isambard.ac.uk/">Isambard-AI</a>, where I spend a lot of time.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb22" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb22-1"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">export</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">NODE_SHELL</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"zsh"</span></span>
<span id="cb22-2"></span>
<span id="cb22-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">getgnode()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb22-4">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">ngpus</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>1</span>
<span id="cb22-5">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">time_limit</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"02:00:00"</span></span>
<span id="cb22-6">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">partition</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"workq"</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Adjust for your cluster</span></span>
<span id="cb22-7"></span>
<span id="cb22-8">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">while</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$#</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-gt</span> 0 <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">do</span></span>
<span id="cb22-9">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">case</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span></span>
<span id="cb22-10">            <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">-h</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">--help</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span></span>
<span id="cb22-11">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: getgnode [OPTIONS]"</span></span>
<span id="cb22-12">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Allocate and attach to an interactive SLURM GPU node."</span></span>
<span id="cb22-13">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span></span>
<span id="cb22-14">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Options:"</span></span>
<span id="cb22-15">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  -g, --gpus INT         Number of GPUs to request (default: 1)"</span></span>
<span id="cb22-16">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  -p, --partition NAME   SLURM partition (default: workq)"</span></span>
<span id="cb22-17">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  -t, --time HH:MM:SS    Time limit (default: 02:00:00)"</span></span>
<span id="cb22-18">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  -h, --help             Show this help"</span></span>
<span id="cb22-19">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb22-20">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb22-21">            <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">-g</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">--gpus</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span>      <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">ngpus</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$2</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span>      <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">shift</span> 2 <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb22-22">            <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">-p</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">--partition</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">partition</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$2</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span>  <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">shift</span> 2 <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb22-23">            <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">-t</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">--time</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span>      <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">time_limit</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$2</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">shift</span> 2 <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb22-24">            <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span></span>
<span id="cb22-25">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Error: Unknown argument '</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'"</span></span>
<span id="cb22-26">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Type 'getgnode --help' for usage."</span></span>
<span id="cb22-27">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb22-28">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;;</span></span>
<span id="cb22-29">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">esac</span></span>
<span id="cb22-30">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">done</span></span>
<span id="cb22-31"></span>
<span id="cb22-32">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">salloc</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--partition</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${partition}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">\</span></span>
<span id="cb22-33">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--gres</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>gpu:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${ngpus}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">\</span></span>
<span id="cb22-34">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--time</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${time_limit}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">\</span></span>
<span id="cb22-35">           srun <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--pty</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${NODE_SHELL</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:-</span>zsh<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb22-36"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb22-37"></span>
<span id="cb22-38"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fetchgnode()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb22-39">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"-h"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">||</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"--help"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">||</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb22-40">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: fetchgnode &lt;jobid&gt;"</span></span>
<span id="cb22-41">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Attach a new shell to an existing SLURM job."</span></span>
<span id="cb22-42">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb22-43">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb22-44">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">srun</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--jobid</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--overlap</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--pty</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${NODE_SHELL</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:-</span>zsh<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb22-45"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb22-46"></span>
<span id="cb22-47"></span>
<span id="cb22-48"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slog()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb22-49">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb22-50">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: slog &lt;job_id&gt; [lines]"</span></span>
<span id="cb22-51">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tails the stdout log file for a given Slurm job."</span></span>
<span id="cb22-52">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb22-53">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb22-54"></span>
<span id="cb22-55">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">lines</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:-</span>50<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb22-56">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Search current dir for slurm-&lt;jobid&gt;.out or &lt;name&gt;-&lt;jobid&gt;.out</span></span>
<span id="cb22-57">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">logfile</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ls</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-t</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span>.out <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span>/dev/null <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">head</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-n</span> 1<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span></span>
<span id="cb22-58"></span>
<span id="cb22-59">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-n</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$logfile</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb22-60">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tailing log: </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$logfile</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb22-61">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tail</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-n</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$lines</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-f</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$logfile</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb22-62">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span></span>
<span id="cb22-63">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Error: No log file matching *'</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'*.out found in current directory."</span></span>
<span id="cb22-64">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb22-65">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb22-66"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb22-67"></span>
<span id="cb22-68"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sfree()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb22-69">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"=== Available Cluster Resources ==="</span></span>
<span id="cb22-70">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">sinfo</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-N</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-h</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-o</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"%15P %10t %10G %N"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">grep</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-E</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"idle|mix"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">grep</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-v</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drain"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">column</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-t</span></span>
<span id="cb22-71"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb22-72"></span>
<span id="cb22-73"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">snode()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb22-74">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb22-75">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: snode &lt;job_id&gt;"</span></span>
<span id="cb22-76">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lookup the host node of a running job and attach to it."</span></span>
<span id="cb22-77">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb22-78">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb22-79"></span>
<span id="cb22-80">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">local</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">node</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">squeue</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-j</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-h</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-o</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"%N"</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span>/dev/null<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span></span>
<span id="cb22-81">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$node</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">||</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$node</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"N/A"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb22-82">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Error: Job </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> is not actively running."</span></span>
<span id="cb22-83">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb22-84">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb22-85"></span>
<span id="cb22-86">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Connecting to job </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> on node [</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$node</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]..."</span></span>
<span id="cb22-87">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">srun</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--jobid</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--overlap</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--pty</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">${NODE_SHELL</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:-</span>zsh<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb22-88"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb22-89"></span>
<span id="cb22-90"></span>
<span id="cb22-91"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seffme()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb22-92">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-z</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb22-93">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: seffme &lt;job_id&gt;"</span></span>
<span id="cb22-94">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Check peak memory, CPU efficiency, and exit codes for a job."</span></span>
<span id="cb22-95">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb22-96">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb22-97"></span>
<span id="cb22-98">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">command</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-v</span> seff <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;&gt;</span>/dev/null<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb22-99">        <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">seff</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb22-100">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span></span>
<span id="cb22-101">        <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">sacct</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-j</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--format</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>JobID,JobName%20,State,ExitCode,MaxRSS,ReqMem,AllocCPUS,Elapsed <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-X</span></span>
<span id="cb22-102">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb22-103"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb22-104"></span>
<span id="cb22-105"></span>
<span id="cb22-106"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rebatch()</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb22-107">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[[</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$#</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">-lt</span> 2 <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">]];</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">then</span></span>
<span id="cb22-108">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usage: rebatch &lt;job_id&gt; &lt;script.sh&gt;"</span></span>
<span id="cb22-109">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Cancels &lt;job_id&gt; and submits &lt;script.sh&gt;."</span></span>
<span id="cb22-110">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb22-111">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">fi</span></span>
<span id="cb22-112"></span>
<span id="cb22-113">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Canceling job </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">..."</span></span>
<span id="cb22-114">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">scancel</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb22-115">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Submitting </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$2</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">..."</span></span>
<span id="cb22-116">    <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">sbatch</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$2</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb22-117"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span>
<span id="cb22-118"></span>
<span id="cb22-119"></span>
<span id="cb22-120"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">alias</span> sqm=<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"squeue --me"</span></span></code></pre></div></div>
</div>
</div>
</div>
<hr>
</section>
</section>
<section id="what-actually-stuck" class="level2">
<h2 class="anchored" data-anchor-id="what-actually-stuck">What Actually Stuck</h2>
<p>Looking back, the journey was never really about finding the right distribution — though it took me a long time to admit that. Every distribution I used taught me something: Debian gave me discipline, Arch gave me depth, CentOS gave me an appreciation for stability, Nobara reminded me why community matters, Fedora showed me how polished a Linux desktop can be, and openSUSE Tumbleweed showed me that rolling release and reliability are not opposites.</p>
<p>What I was actually searching for was a coherent philosophy: a system I could understand completely, trust in production, enjoy on the desktop, and extend without fighting it. The distribution itself turned out to be the least important variable. openSUSE Tumbleweed with KDE is where I am happiest on the desktop — stable, community-driven, and free of version upgrades. AlmaLinux is where most of my containers and HPC environments live, and it has earned a place on some of my desktops too. And across every single one of them, Flatpak handles GUI applications and pixi handles everything else — Python environments, binary tools, cross-platform reproducibility — with a single unified interface that works identically whether I am on my workstation, my laptop, or a GH200 node on Isambard-AI.</p>
<p>The packages problem that once felt like an unsolvable compromise turned out to have a clean answer. I just had to wait for the Rust ecosystem to mature enough to build it — and stop insisting that the answer had to come bundled with a single distribution.</p>


</section>

 ]]></description>
  <category>linux</category>
  <category>tools</category>
  <guid>https://nourollah.me/blog/posts/decade-of-linux-setups/</guid>
  <pubDate>Wed, 06 May 2026 23:00:00 GMT</pubDate>
  <media:content url="https://nourollah.me/blog/posts/decade-of-linux-setups/linux.jpg" medium="image" type="image/jpeg"/>
</item>
</channel>
</rss>
