<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>macos | Chris Titus Tech</title><description>Recent content from Chris Titus Tech</description><link>https://christitus.com/categories/macos/</link><language>en-US</language><item><title>My AI Coding Workflow That Actually Works</title><link>https://christitus.com/my-ai-workflow/</link><guid isPermaLink="true">https://christitus.com/my-ai-workflow/</guid><description>&lt;p&gt;My AI development workflow is not perfect, and it will keep changing. What matters is the structure: define the project, build the guardrails, work in small phases, and stop at manual gates.&lt;/p&gt;
&lt;p&gt;This is for larger, more complex software. You still need to understand Git, testing, and the basics of software development. One giant prompt that loops until an agent declares victory may produce a demo, but it is not how I build software I plan to maintain.&lt;/p&gt;

&lt;p&gt;The short version looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Global instructions and reusable skills
  -&amp;gt; repository specification and roadmap
  -&amp;gt; test and validation scaffolding
  -&amp;gt; one small implementation phase
  -&amp;gt; local tests and review
  -&amp;gt; pull request and CI
  -&amp;gt; independent review
  -&amp;gt; fix, retest, and resolve feedback
  -&amp;gt; manual verification
  -&amp;gt; merge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AI makes each step faster. It does not get to skip any of them.&lt;/p&gt;
&lt;h2&gt;Start With Plain-Text Guardrails&lt;/h2&gt;
&lt;p&gt;I keep my shared AI development setup in the &lt;a href=&quot;https://github.com/ChrisTitusTech/titus-ai&quot;&gt;titus-ai repository&lt;/a&gt;. It contains examples for instructions, specifications, roadmaps, tasks, and reusable skills.&lt;/p&gt;
&lt;p&gt;Do not get distracted by the terminology. These are plain-text files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; tells the coding agent how I want it to work.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SPEC.md&lt;/code&gt; defines what the project must do.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ROADMAP.md&lt;/code&gt; breaks the work into phases with exit criteria.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TASKS.md&lt;/code&gt; can track the small jobs inside the current phase.&lt;/li&gt;
&lt;li&gt;Skills capture reusable knowledge for a tool or technology.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My global instructions include preferences that apply everywhere: keep changes focused, skip filler, preserve unrelated work, run the required checks, and stop before destructive actions. A repository can add its own &lt;code&gt;AGENTS.md&lt;/code&gt; for the real architecture, commands, and boundaries of that project.&lt;/p&gt;
&lt;p&gt;If I dislike a rule, I delete it. If an agent repeatedly makes the same mistake, I add a more precise rule. The files serve me, not the other way around.&lt;/p&gt;
&lt;p&gt;Skills work the same way. My Quickshell skill includes its unusual QML linting requirements, so the agent does not run a generic Qt linter, misunderstand missing types, and damage working code. A Bash skill can capture shell-specific validation. That reusable knowledge then follows me into the next project.&lt;/p&gt;
&lt;h2&gt;Define What Success Means&lt;/h2&gt;
&lt;p&gt;The specification is repository-specific. Before implementation, I write down:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the problem and intended users&lt;/li&gt;
&lt;li&gt;required behavior and user experience&lt;/li&gt;
&lt;li&gt;architecture and major components&lt;/li&gt;
&lt;li&gt;security and privacy requirements&lt;/li&gt;
&lt;li&gt;supported tool and dependency versions&lt;/li&gt;
&lt;li&gt;non-goals&lt;/li&gt;
&lt;li&gt;acceptance criteria&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Version details matter because an LLM may choose an old dependency simply because it appeared frequently in its training data. I pin the supported versions in the specification and verify current versions instead of accepting whatever the model remembers.&lt;/p&gt;
&lt;p&gt;The acceptance criteria are the most important part. &quot;Make it work&quot; is not useful. The agent needs observable conditions that tell it when the phase succeeds, including the tests or manual checks that prove it.&lt;/p&gt;
&lt;p&gt;The roadmap then turns those requirements into small phases. Every phase says what it delivers, what it depends on, and what must be true before I continue. This prevents a feature request from becoming an uncontrolled rewrite.&lt;/p&gt;
&lt;h2&gt;Build the Test Harness Before the Feature&lt;/h2&gt;
&lt;p&gt;Before serious implementation, I establish how the project will be tested. That may include unit tests, linting, a production build, smoke tests, screenshots, or a real target-environment check.&lt;/p&gt;
&lt;p&gt;This is the scaffolding around the code. If the agent cannot tell whether a change worked, asking it to write more code only creates more uncertainty.&lt;/p&gt;
&lt;p&gt;The exact gates belong in the repository instructions. A typical local pass includes:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git diff --check
# Run the project formatter and linter.
# Run focused tests, then the broader test suite.
# Build the production artifact.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Project-specific details matter. Quickshell needs the correct QML types available during linting. A cross-distribution Linux project may need smoke tests on Arch, Debian, and Red Hat-based environments. A web change may need both a clean production build and a mobile layout check.&lt;/p&gt;
&lt;h2&gt;Implement One Reviewable Change&lt;/h2&gt;
&lt;p&gt;Once the guardrails exist, I give the agent one focused task.&lt;/p&gt;
&lt;p&gt;In the video, I asked Codex to add the audio percentage beside the volume icon in my DWM desktop. It found the Quickshell skill, inspected the existing code, made the QML change, updated the regression check, deployed it to my live install, restarted Quickshell, and verified the result on screen.&lt;/p&gt;
&lt;p&gt;That looked like magic, but the code generation was the easy part. The important next question was: &lt;strong&gt;How did it implement it?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The change went into a pull request instead of directly disappearing into &lt;code&gt;main&lt;/code&gt;. That gave me a manual gate where I could inspect the diff, see the screenshot, confirm the live behavior, and wait for other reviewers.&lt;/p&gt;
&lt;p&gt;Small pull requests are critical. They are faster to understand, cheaper to review, and easier to fix or revert. If a review takes twenty minutes because the diff is enormous, the work probably needed to be split earlier.&lt;/p&gt;
&lt;h2&gt;Spend More Effort on Review Than Generation&lt;/h2&gt;
&lt;p&gt;This is where most of my AI usage goes.&lt;/p&gt;
&lt;p&gt;For larger changes, I run a local CodeRabbit review before opening the pull request. On GitHub, I use CodeRabbit and a separate Codex, Claude, or human reviewer. The independent reviewer needs fresh context; the coding session should not simply grade its own work.&lt;/p&gt;
&lt;p&gt;The DWM review found two real issues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hide the percentage when audio is unavailable.&lt;/li&gt;
&lt;li&gt;Document the user-visible panel change in the changelog.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Those are exactly the boring edge cases I might discover only after a user opens an issue. The agent fixed the unavailable-audio state, updated the test, added the changelog entry, committed the changes, and pushed them back to the pull request.&lt;/p&gt;
&lt;p&gt;I still make the decision. Review bots can be wrong, overly verbose, or outside the task&apos;s scope. For every comment, I either fix the root cause or explain why the current behavior is intentional. I do not blindly accept every suggestion, and I do not dismiss one because it came from AI.&lt;/p&gt;
&lt;p&gt;The loop is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;review feedback
  -&amp;gt; understand the issue
  -&amp;gt; fix or explain
  -&amp;gt; update the test
  -&amp;gt; rerun local validation
  -&amp;gt; push
  -&amp;gt; wait for fresh CI and review
  -&amp;gt; resolve the thread
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Repeat until there are no actionable findings left.&lt;/p&gt;
&lt;h2&gt;Put Security and Dependency Checks in CI&lt;/h2&gt;
&lt;p&gt;LLMs are useful, but they are not reliable dependency managers or security auditors. I enable GitHub&apos;s security tools early:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dependabot for supported dependency and GitHub Actions updates&lt;/li&gt;
&lt;li&gt;CodeQL for code scanning&lt;/li&gt;
&lt;li&gt;dependency review for risky dependency changes&lt;/li&gt;
&lt;li&gt;required CI checks for tests and production builds&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CI must run on every pull request update. A green check from an older commit does not prove that the latest review fix is safe.&lt;/p&gt;
&lt;p&gt;The checks should match the project. My DWM pull request ran smoke tests across multiple Linux distributions. Another project may need a locked dependency install, unit tests, type checking, a production build, and a security scan. The point is not to collect badges; it is to test the artifact in a clean environment.&lt;/p&gt;
&lt;h2&gt;Keep the Human Merge Gate&lt;/h2&gt;
&lt;p&gt;Before merging, I verify:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the diff contains only the intended change&lt;/li&gt;
&lt;li&gt;tests and builds pass on the latest commit&lt;/li&gt;
&lt;li&gt;independent review is complete&lt;/li&gt;
&lt;li&gt;actionable review threads are resolved&lt;/li&gt;
&lt;li&gt;documentation matches the behavior&lt;/li&gt;
&lt;li&gt;the feature works in the real target environment&lt;/li&gt;
&lt;li&gt;visible changes have been checked on screen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Automated screenshots and browser or desktop tools are useful, but I still look at the result. Tests prove only what they were written to test.&lt;/p&gt;
&lt;p&gt;In the example, I could see the volume percentage working in my live panel. I inspected the follow-up fix for unavailable audio, checked the test and changelog, waited for CI, and only then merged and deleted the branch.&lt;/p&gt;
&lt;p&gt;That pause is the difference between using AI as an assistant and letting it run the project.&lt;/p&gt;
&lt;h2&gt;The Cost Is Real&lt;/h2&gt;
&lt;p&gt;This workflow uses far more compute on review and validation than on writing the final lines of code. A small UI change may produce only a dozen changed lines while several agents, local checks, and CI jobs examine it.&lt;/p&gt;
&lt;p&gt;Heavy development can consume paid AI plans quickly. Local models will handle more of this work over time, but the workflow should not depend on one model, subscription, or plugin. The same process works with cloud models, local models, or a team of humans.&lt;/p&gt;
&lt;p&gt;The tool is replaceable. The gates are not.&lt;/p&gt;
&lt;h2&gt;Slow Is Smooth, and Smooth Is Fast&lt;/h2&gt;
&lt;p&gt;AI lets us generate code so quickly that it is easy to generate a mountain of bad software. Slow down at the places that matter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;write the acceptance criteria&lt;/li&gt;
&lt;li&gt;build the tests&lt;/li&gt;
&lt;li&gt;keep phases and pull requests small&lt;/li&gt;
&lt;li&gt;wait for CI and independent review&lt;/li&gt;
&lt;li&gt;resolve feedback&lt;/li&gt;
&lt;li&gt;manually test the real result&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This workflow is not exciting because an agent added a percentage to an icon. It is exciting because the change was specified, tested, reviewed, documented, verified live, and merged in minutes instead of hours.&lt;/p&gt;
&lt;p&gt;Do not wait for a mythical future model to fix a bad development process. Use the tools available today, keep the parts that work, remove the parts that do not, and make the process better every time.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wcRR5P0S2Us&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My AI development workflow is not perfect, and it will keep changing. What matters is the structure: define the project, build the guardrails, work in small phases, and stop at manual gates.&lt;/p&gt;
&lt;p&gt;This is for larger, more complex software. You still need to understand Git, testing, and the basics of software development. One giant prompt that loops until an agent declares victory may produce a demo, but it is not how I build software I plan to maintain.&lt;/p&gt;

&lt;p&gt;The short version looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Global instructions and reusable skills
  -&amp;gt; repository specification and roadmap
  -&amp;gt; test and validation scaffolding
  -&amp;gt; one small implementation phase
  -&amp;gt; local tests and review
  -&amp;gt; pull request and CI
  -&amp;gt; independent review
  -&amp;gt; fix, retest, and resolve feedback
  -&amp;gt; manual verification
  -&amp;gt; merge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AI makes each step faster. It does not get to skip any of them.&lt;/p&gt;
&lt;h2&gt;Start With Plain-Text Guardrails&lt;/h2&gt;
&lt;p&gt;I keep my shared AI development setup in the &lt;a href=&quot;https://github.com/ChrisTitusTech/titus-ai&quot;&gt;titus-ai repository&lt;/a&gt;. It contains examples for instructions, specifications, roadmaps, tasks, and reusable skills.&lt;/p&gt;
&lt;p&gt;Do not get distracted by the terminology. These are plain-text files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; tells the coding agent how I want it to work.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SPEC.md&lt;/code&gt; defines what the project must do.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ROADMAP.md&lt;/code&gt; breaks the work into phases with exit criteria.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TASKS.md&lt;/code&gt; can track the small jobs inside the current phase.&lt;/li&gt;
&lt;li&gt;Skills capture reusable knowledge for a tool or technology.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My global instructions include preferences that apply everywhere: keep changes focused, skip filler, preserve unrelated work, run the required checks, and stop before destructive actions. A repository can add its own &lt;code&gt;AGENTS.md&lt;/code&gt; for the real architecture, commands, and boundaries of that project.&lt;/p&gt;
&lt;p&gt;If I dislike a rule, I delete it. If an agent repeatedly makes the same mistake, I add a more precise rule. The files serve me, not the other way around.&lt;/p&gt;
&lt;p&gt;Skills work the same way. My Quickshell skill includes its unusual QML linting requirements, so the agent does not run a generic Qt linter, misunderstand missing types, and damage working code. A Bash skill can capture shell-specific validation. That reusable knowledge then follows me into the next project.&lt;/p&gt;
&lt;h2&gt;Define What Success Means&lt;/h2&gt;
&lt;p&gt;The specification is repository-specific. Before implementation, I write down:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the problem and intended users&lt;/li&gt;
&lt;li&gt;required behavior and user experience&lt;/li&gt;
&lt;li&gt;architecture and major components&lt;/li&gt;
&lt;li&gt;security and privacy requirements&lt;/li&gt;
&lt;li&gt;supported tool and dependency versions&lt;/li&gt;
&lt;li&gt;non-goals&lt;/li&gt;
&lt;li&gt;acceptance criteria&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Version details matter because an LLM may choose an old dependency simply because it appeared frequently in its training data. I pin the supported versions in the specification and verify current versions instead of accepting whatever the model remembers.&lt;/p&gt;
&lt;p&gt;The acceptance criteria are the most important part. &quot;Make it work&quot; is not useful. The agent needs observable conditions that tell it when the phase succeeds, including the tests or manual checks that prove it.&lt;/p&gt;
&lt;p&gt;The roadmap then turns those requirements into small phases. Every phase says what it delivers, what it depends on, and what must be true before I continue. This prevents a feature request from becoming an uncontrolled rewrite.&lt;/p&gt;
&lt;h2&gt;Build the Test Harness Before the Feature&lt;/h2&gt;
&lt;p&gt;Before serious implementation, I establish how the project will be tested. That may include unit tests, linting, a production build, smoke tests, screenshots, or a real target-environment check.&lt;/p&gt;
&lt;p&gt;This is the scaffolding around the code. If the agent cannot tell whether a change worked, asking it to write more code only creates more uncertainty.&lt;/p&gt;
&lt;p&gt;The exact gates belong in the repository instructions. A typical local pass includes:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git diff --check
# Run the project formatter and linter.
# Run focused tests, then the broader test suite.
# Build the production artifact.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Project-specific details matter. Quickshell needs the correct QML types available during linting. A cross-distribution Linux project may need smoke tests on Arch, Debian, and Red Hat-based environments. A web change may need both a clean production build and a mobile layout check.&lt;/p&gt;
&lt;h2&gt;Implement One Reviewable Change&lt;/h2&gt;
&lt;p&gt;Once the guardrails exist, I give the agent one focused task.&lt;/p&gt;
&lt;p&gt;In the video, I asked Codex to add the audio percentage beside the volume icon in my DWM desktop. It found the Quickshell skill, inspected the existing code, made the QML change, updated the regression check, deployed it to my live install, restarted Quickshell, and verified the result on screen.&lt;/p&gt;
&lt;p&gt;That looked like magic, but the code generation was the easy part. The important next question was: &lt;strong&gt;How did it implement it?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The change went into a pull request instead of directly disappearing into &lt;code&gt;main&lt;/code&gt;. That gave me a manual gate where I could inspect the diff, see the screenshot, confirm the live behavior, and wait for other reviewers.&lt;/p&gt;
&lt;p&gt;Small pull requests are critical. They are faster to understand, cheaper to review, and easier to fix or revert. If a review takes twenty minutes because the diff is enormous, the work probably needed to be split earlier.&lt;/p&gt;
&lt;h2&gt;Spend More Effort on Review Than Generation&lt;/h2&gt;
&lt;p&gt;This is where most of my AI usage goes.&lt;/p&gt;
&lt;p&gt;For larger changes, I run a local CodeRabbit review before opening the pull request. On GitHub, I use CodeRabbit and a separate Codex, Claude, or human reviewer. The independent reviewer needs fresh context; the coding session should not simply grade its own work.&lt;/p&gt;
&lt;p&gt;The DWM review found two real issues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hide the percentage when audio is unavailable.&lt;/li&gt;
&lt;li&gt;Document the user-visible panel change in the changelog.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Those are exactly the boring edge cases I might discover only after a user opens an issue. The agent fixed the unavailable-audio state, updated the test, added the changelog entry, committed the changes, and pushed them back to the pull request.&lt;/p&gt;
&lt;p&gt;I still make the decision. Review bots can be wrong, overly verbose, or outside the task&apos;s scope. For every comment, I either fix the root cause or explain why the current behavior is intentional. I do not blindly accept every suggestion, and I do not dismiss one because it came from AI.&lt;/p&gt;
&lt;p&gt;The loop is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;review feedback
  -&amp;gt; understand the issue
  -&amp;gt; fix or explain
  -&amp;gt; update the test
  -&amp;gt; rerun local validation
  -&amp;gt; push
  -&amp;gt; wait for fresh CI and review
  -&amp;gt; resolve the thread
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Repeat until there are no actionable findings left.&lt;/p&gt;
&lt;h2&gt;Put Security and Dependency Checks in CI&lt;/h2&gt;
&lt;p&gt;LLMs are useful, but they are not reliable dependency managers or security auditors. I enable GitHub&apos;s security tools early:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dependabot for supported dependency and GitHub Actions updates&lt;/li&gt;
&lt;li&gt;CodeQL for code scanning&lt;/li&gt;
&lt;li&gt;dependency review for risky dependency changes&lt;/li&gt;
&lt;li&gt;required CI checks for tests and production builds&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CI must run on every pull request update. A green check from an older commit does not prove that the latest review fix is safe.&lt;/p&gt;
&lt;p&gt;The checks should match the project. My DWM pull request ran smoke tests across multiple Linux distributions. Another project may need a locked dependency install, unit tests, type checking, a production build, and a security scan. The point is not to collect badges; it is to test the artifact in a clean environment.&lt;/p&gt;
&lt;h2&gt;Keep the Human Merge Gate&lt;/h2&gt;
&lt;p&gt;Before merging, I verify:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the diff contains only the intended change&lt;/li&gt;
&lt;li&gt;tests and builds pass on the latest commit&lt;/li&gt;
&lt;li&gt;independent review is complete&lt;/li&gt;
&lt;li&gt;actionable review threads are resolved&lt;/li&gt;
&lt;li&gt;documentation matches the behavior&lt;/li&gt;
&lt;li&gt;the feature works in the real target environment&lt;/li&gt;
&lt;li&gt;visible changes have been checked on screen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Automated screenshots and browser or desktop tools are useful, but I still look at the result. Tests prove only what they were written to test.&lt;/p&gt;
&lt;p&gt;In the example, I could see the volume percentage working in my live panel. I inspected the follow-up fix for unavailable audio, checked the test and changelog, waited for CI, and only then merged and deleted the branch.&lt;/p&gt;
&lt;p&gt;That pause is the difference between using AI as an assistant and letting it run the project.&lt;/p&gt;
&lt;h2&gt;The Cost Is Real&lt;/h2&gt;
&lt;p&gt;This workflow uses far more compute on review and validation than on writing the final lines of code. A small UI change may produce only a dozen changed lines while several agents, local checks, and CI jobs examine it.&lt;/p&gt;
&lt;p&gt;Heavy development can consume paid AI plans quickly. Local models will handle more of this work over time, but the workflow should not depend on one model, subscription, or plugin. The same process works with cloud models, local models, or a team of humans.&lt;/p&gt;
&lt;p&gt;The tool is replaceable. The gates are not.&lt;/p&gt;
&lt;h2&gt;Slow Is Smooth, and Smooth Is Fast&lt;/h2&gt;
&lt;p&gt;AI lets us generate code so quickly that it is easy to generate a mountain of bad software. Slow down at the places that matter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;write the acceptance criteria&lt;/li&gt;
&lt;li&gt;build the tests&lt;/li&gt;
&lt;li&gt;keep phases and pull requests small&lt;/li&gt;
&lt;li&gt;wait for CI and independent review&lt;/li&gt;
&lt;li&gt;resolve feedback&lt;/li&gt;
&lt;li&gt;manually test the real result&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This workflow is not exciting because an agent added a percentage to an icon. It is exciting because the change was specified, tested, reviewed, documented, verified live, and merged in minutes instead of hours.&lt;/p&gt;
&lt;p&gt;Do not wait for a mythical future model to fix a bad development process. Use the tools available today, keep the parts that work, remove the parts that do not, and make the process better every time.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wcRR5P0S2Us&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>The Problems With AI</title><link>https://christitus.com/the-problems-with-AI/</link><guid isPermaLink="true">https://christitus.com/the-problems-with-AI/</guid><description>&lt;p&gt;AI lets me build workflows and environments I have wanted for years. I can finish in hours what used to take days, explore an idea without sinking a month into it, and review more code than I ever could alone.&lt;/p&gt;
&lt;p&gt;That does not mean AI has solved software development. It has moved the bottleneck. Code is becoming cheap, but good ideas, clear requirements, architecture, communication, and judgment are not.&lt;/p&gt;

&lt;p&gt;This entire article came out of a Discord conversation after my last AI video. The discussion was better than the usual extremes of &quot;AI will replace everyone&quot; or &quot;AI is useless slop.&quot; People who are actually building things with these tools are seeing both sides at the same time: this is a superpower, and it can make a mess faster than anything we have used before.&lt;/p&gt;
&lt;p&gt;I am going to keep building with it. If some people are tired of AI content, I get it. The internet is flooded with empty demos and claims that every new model changes everything. But this technology is too useful for me to ignore, and the problems are too important to pretend they do not exist.&lt;/p&gt;
&lt;h2&gt;The Limiting Factor Is Now Us&lt;/h2&gt;
&lt;p&gt;For a long time, the cost of an idea was implementation. You could imagine a tool, but turning it into something real required weeks or months of coding. Today, AI can build a prototype in an afternoon.&lt;/p&gt;
&lt;p&gt;That sounds amazing until you discover the uncomfortable part: some ideas just are not very good.&lt;/p&gt;
&lt;p&gt;I love being able to expand an idea quickly. Sometimes it is magic and the project turns into exactly what I imagined. Other times I get deep enough into the weeds to understand why the idea does not work, then throw it in the trash. That is still a win. I learned the lesson in a day instead of spending three months on it.&lt;/p&gt;
&lt;p&gt;Ideas have always been easy. Execution is what matters. AI accelerates execution, but it also exposes weak ideas much faster. It cannot make users care, create a real need, or give you taste.&lt;/p&gt;
&lt;h2&gt;Coding Was Never the Hardest Problem&lt;/h2&gt;
&lt;p&gt;The hardest problems in software are usually not typing code or finding a missing semicolon. They are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;understanding what someone actually wants&lt;/li&gt;
&lt;li&gt;turning a vague request into concrete requirements&lt;/li&gt;
&lt;li&gt;choosing a foundation that will survive future changes&lt;/li&gt;
&lt;li&gt;communicating tradeoffs to other people&lt;/li&gt;
&lt;li&gt;deciding what should not be built&lt;/li&gt;
&lt;li&gt;maintaining the project after the demo works&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those problems existed before AI, they exist now, and they will exist after the next flagship model arrives.&lt;/p&gt;
&lt;p&gt;This is also why building tools for yourself is so much easier. I am not trying to become a tech bro, ship another subscription, and obsess over monthly recurring revenue. When I build for myself, I know the workflow, the pain points, and what &quot;done&quot; looks like. AI can move incredibly fast because I can give it a clear target and immediately tell when it misses.&lt;/p&gt;
&lt;p&gt;If the requirements are garbage, faster code just gives you a polished pile of garbage sooner.&lt;/p&gt;
&lt;h2&gt;The Junior Developer Problem&lt;/h2&gt;
&lt;p&gt;Experienced programmers can get more out of AI because they already have a mental model of how software works. We learned by reading manuals, digging through Stack Overflow, breaking things, reading other people&apos;s code, and spending hours debugging mistakes.&lt;/p&gt;
&lt;p&gt;That process was slow and often miserable, but it built intuition.&lt;/p&gt;
&lt;p&gt;Now a beginner can ask a model to explain a codebase, make a change, and fix the error without ever reading the code. The result might work, but the person may have no idea why it works. That creates an amplified version of the old &quot;expert beginner&quot; problem: someone can produce impressive-looking software without developing the experience needed to recognize bad architecture, security problems, or fragile code.&lt;/p&gt;
&lt;p&gt;It is like higher mathematics. A calculator can produce the answer, but the person who understands the math knows when to use it, what the result means, and when the answer is obviously wrong.&lt;/p&gt;
&lt;p&gt;This does not mean beginners are doomed. AI can also compress the old learning cycle. A good code review agent can point to a problem, suggest a solution, and let you study both in minutes instead of spending hours searching. The key is asking &lt;strong&gt;why&lt;/strong&gt; and then reading the code yourself.&lt;/p&gt;
&lt;p&gt;If you only copy the fix, you learn a ritual. If you understand the failure, you gain a tool you can use again.&lt;/p&gt;
&lt;h2&gt;Code Review Is AI&apos;s Best Feature&lt;/h2&gt;
&lt;p&gt;Everyone talks about having AI write an entire application. I think one of its best uses is reviewing code that already exists.&lt;/p&gt;
&lt;p&gt;An AI reviewer does not get tired. It can inspect every change, compare patterns across the repository, look for missing tests, and catch the boring mistakes that humans skip after staring at a pull request for too long. I use it to challenge my changes, not blindly approve them.&lt;/p&gt;
&lt;p&gt;There are two major catches.&lt;/p&gt;
&lt;p&gt;First, the reviewer can confidently flag something that is not a problem. I see false positives all the time. Sometimes the correct response is simply: nope, resolve the comment, squash, and merge.&lt;/p&gt;
&lt;p&gt;Second, even a correct review can fail to teach. &quot;Change this line&quot; is not enough. The useful review explains the failure mode, the tradeoff, and why the suggested approach fits this project. Otherwise, we are just creating cargo-cult programmers who obey whatever pattern the model produced.&lt;/p&gt;
&lt;p&gt;Multiple review agents can reduce some of this. One agent writes or changes the code, another reviews it, and a third can challenge the review. That does not guarantee correctness, but disagreement is useful because it forces the issue into the open where a human can make the final call.&lt;/p&gt;
&lt;h2&gt;Foundations Matter More Than Ever&lt;/h2&gt;
&lt;p&gt;You cannot YOLO an AI-generated codebase and expect it to stay healthy. The faster the tools move, the more important the foundation becomes.&lt;/p&gt;
&lt;p&gt;At a minimum, anyone doing serious AI-assisted development needs to understand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Git branches, commits, diffs, merges, and rollbacks&lt;/li&gt;
&lt;li&gt;the architecture and data flow of the project&lt;/li&gt;
&lt;li&gt;how to run tests and verify behavior&lt;/li&gt;
&lt;li&gt;where secrets, authentication, and permissions live&lt;/li&gt;
&lt;li&gt;how the application is built and deployed&lt;/li&gt;
&lt;li&gt;what the AI changed before accepting it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Git is mandatory. When an agent makes twenty changes in a few minutes, you need clean checkpoints and an easy way back. A good repository structure, written requirements, tests, and small commits give the model guardrails. They also give you evidence when the model claims everything is fixed.&lt;/p&gt;
&lt;p&gt;The code can be generated. Accountability cannot.&lt;/p&gt;
&lt;h2&gt;The Price Will Not Stay This Low&lt;/h2&gt;
&lt;p&gt;The value in today&apos;s professional AI plans is ridiculous. Heavy users can burn through an enormous amount of compute for a flat monthly fee. That is great for us, but the financial picture does not make sense forever.&lt;/p&gt;
&lt;p&gt;My concern is a Walmart-style cycle: make the new workflow so cheap and convenient that everyone adopts it, wait for the old skills and services to disappear, then raise the price. Whether it happens exactly that way or not, it is dangerous to build a workflow that completely depends on one company keeping today&apos;s limits and prices.&lt;/p&gt;
&lt;p&gt;Cloud AI is also concentrated in companies with the money and hardware to run frontier models. If the best tools become heavily metered or gatekept, developers will have to pay, accept weaker access, or move part of the workflow back to hardware they control.&lt;/p&gt;
&lt;p&gt;Enjoy the bargain, but do not confuse a subsidized price with a permanent one.&lt;/p&gt;
&lt;h2&gt;Local Models Will Be Good Enough for Most People&lt;/h2&gt;
&lt;p&gt;Local LLMs are not equal to the best cloud models for every task. Large open-weight models may look competitive in benchmarks, but most people do not have hundreds of gigabytes of VRAM and a rack full of GPUs.&lt;/p&gt;
&lt;p&gt;That does not mean local AI has to beat the flagship model to matter.&lt;/p&gt;
&lt;p&gt;Small models can already search documents, summarize a modest codebase, classify information, answer common questions, and handle focused tasks. As that baseline improves, most people will not need expensive multi-agent loops or the smartest model on the planet. They will need something private, available, and good enough for 90 percent of their work.&lt;/p&gt;
&lt;p&gt;That is where old workstations, homelab servers, and small clusters get interesting. The future may not be one giant local model doing everything. It may be several focused models and disposable virtual machines handling narrow jobs on hardware you own.&lt;/p&gt;
&lt;p&gt;The important question is not, &quot;Can my local model beat the flagship?&quot; It is, &quot;Does this task need the flagship at all?&quot;&lt;/p&gt;
&lt;h2&gt;AI Is Changing Jobs, but the Story Is Messy&lt;/h2&gt;
&lt;p&gt;Companies are laying people off, and it is popular to blame every layoff on AI. That is too simple. Many businesses were cutting costs long before these tools became useful.&lt;/p&gt;
&lt;p&gt;The more immediate effect may be hiring that never happens. A small team using AI can absorb work that might previously have required two or three additional people. It can also handle adjacent jobs like documentation, basic design, research, and marketing that a technical person would have outsourced or ignored.&lt;/p&gt;
&lt;p&gt;That is a real economic impact even when nobody gets a termination letter that says &quot;replaced by AI.&quot;&lt;/p&gt;
&lt;p&gt;At the same time, only a small percentage of people are using these tools effectively. I still see people spend hours stuck on problems that a well-formed prompt, the right context, and a few minutes of verification could solve. The gap between people who understand the fundamentals and use AI well, and people who do neither, is going to get much wider.&lt;/p&gt;
&lt;h2&gt;My Rules for Building With AI&lt;/h2&gt;
&lt;p&gt;I am not waiting for the industry to settle before using these tools. I am building now, while access is cheap and the capabilities are improving. But I follow a few rules:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start with the problem.&lt;/strong&gt; Define the user, workflow, constraints, and definition of done before generating code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose the architecture yourself.&lt;/strong&gt; AI can present options, but you need to understand and own the final structure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep changes small.&lt;/strong&gt; Work on a branch, inspect the diff, test it, and commit a clean checkpoint.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use AI to review AI.&lt;/strong&gt; A separate reviewer catches mistakes and assumptions the first agent carried through the task.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demand the why.&lt;/strong&gt; A fix without an explanation does not improve your judgment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read the code.&lt;/strong&gt; If you cannot explain the important paths, you do not control the project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep an exit plan.&lt;/strong&gt; Preserve your repositories, documentation, and the ability to work without one specific provider.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;AI is a multiplier. It multiplies good architecture, clear requirements, and experienced judgment. It also multiplies confusion, bad assumptions, and technical debt.&lt;/p&gt;
&lt;p&gt;That is the real problem with AI: not that it is useless or that it will instantly replace everyone, but that it lets us move faster than our understanding. The people who keep learning the foundations will have a superpower. The people who surrender their judgment to the tool will build bigger failures in record time.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;In the video, I break down the Discord conversation that inspired this article, show how I use AI for code review, and explain where I think cloud and local models are headed.&lt;/p&gt;
</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;AI lets me build workflows and environments I have wanted for years. I can finish in hours what used to take days, explore an idea without sinking a month into it, and review more code than I ever could alone.&lt;/p&gt;
&lt;p&gt;That does not mean AI has solved software development. It has moved the bottleneck. Code is becoming cheap, but good ideas, clear requirements, architecture, communication, and judgment are not.&lt;/p&gt;

&lt;p&gt;This entire article came out of a Discord conversation after my last AI video. The discussion was better than the usual extremes of &quot;AI will replace everyone&quot; or &quot;AI is useless slop.&quot; People who are actually building things with these tools are seeing both sides at the same time: this is a superpower, and it can make a mess faster than anything we have used before.&lt;/p&gt;
&lt;p&gt;I am going to keep building with it. If some people are tired of AI content, I get it. The internet is flooded with empty demos and claims that every new model changes everything. But this technology is too useful for me to ignore, and the problems are too important to pretend they do not exist.&lt;/p&gt;
&lt;h2&gt;The Limiting Factor Is Now Us&lt;/h2&gt;
&lt;p&gt;For a long time, the cost of an idea was implementation. You could imagine a tool, but turning it into something real required weeks or months of coding. Today, AI can build a prototype in an afternoon.&lt;/p&gt;
&lt;p&gt;That sounds amazing until you discover the uncomfortable part: some ideas just are not very good.&lt;/p&gt;
&lt;p&gt;I love being able to expand an idea quickly. Sometimes it is magic and the project turns into exactly what I imagined. Other times I get deep enough into the weeds to understand why the idea does not work, then throw it in the trash. That is still a win. I learned the lesson in a day instead of spending three months on it.&lt;/p&gt;
&lt;p&gt;Ideas have always been easy. Execution is what matters. AI accelerates execution, but it also exposes weak ideas much faster. It cannot make users care, create a real need, or give you taste.&lt;/p&gt;
&lt;h2&gt;Coding Was Never the Hardest Problem&lt;/h2&gt;
&lt;p&gt;The hardest problems in software are usually not typing code or finding a missing semicolon. They are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;understanding what someone actually wants&lt;/li&gt;
&lt;li&gt;turning a vague request into concrete requirements&lt;/li&gt;
&lt;li&gt;choosing a foundation that will survive future changes&lt;/li&gt;
&lt;li&gt;communicating tradeoffs to other people&lt;/li&gt;
&lt;li&gt;deciding what should not be built&lt;/li&gt;
&lt;li&gt;maintaining the project after the demo works&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those problems existed before AI, they exist now, and they will exist after the next flagship model arrives.&lt;/p&gt;
&lt;p&gt;This is also why building tools for yourself is so much easier. I am not trying to become a tech bro, ship another subscription, and obsess over monthly recurring revenue. When I build for myself, I know the workflow, the pain points, and what &quot;done&quot; looks like. AI can move incredibly fast because I can give it a clear target and immediately tell when it misses.&lt;/p&gt;
&lt;p&gt;If the requirements are garbage, faster code just gives you a polished pile of garbage sooner.&lt;/p&gt;
&lt;h2&gt;The Junior Developer Problem&lt;/h2&gt;
&lt;p&gt;Experienced programmers can get more out of AI because they already have a mental model of how software works. We learned by reading manuals, digging through Stack Overflow, breaking things, reading other people&apos;s code, and spending hours debugging mistakes.&lt;/p&gt;
&lt;p&gt;That process was slow and often miserable, but it built intuition.&lt;/p&gt;
&lt;p&gt;Now a beginner can ask a model to explain a codebase, make a change, and fix the error without ever reading the code. The result might work, but the person may have no idea why it works. That creates an amplified version of the old &quot;expert beginner&quot; problem: someone can produce impressive-looking software without developing the experience needed to recognize bad architecture, security problems, or fragile code.&lt;/p&gt;
&lt;p&gt;It is like higher mathematics. A calculator can produce the answer, but the person who understands the math knows when to use it, what the result means, and when the answer is obviously wrong.&lt;/p&gt;
&lt;p&gt;This does not mean beginners are doomed. AI can also compress the old learning cycle. A good code review agent can point to a problem, suggest a solution, and let you study both in minutes instead of spending hours searching. The key is asking &lt;strong&gt;why&lt;/strong&gt; and then reading the code yourself.&lt;/p&gt;
&lt;p&gt;If you only copy the fix, you learn a ritual. If you understand the failure, you gain a tool you can use again.&lt;/p&gt;
&lt;h2&gt;Code Review Is AI&apos;s Best Feature&lt;/h2&gt;
&lt;p&gt;Everyone talks about having AI write an entire application. I think one of its best uses is reviewing code that already exists.&lt;/p&gt;
&lt;p&gt;An AI reviewer does not get tired. It can inspect every change, compare patterns across the repository, look for missing tests, and catch the boring mistakes that humans skip after staring at a pull request for too long. I use it to challenge my changes, not blindly approve them.&lt;/p&gt;
&lt;p&gt;There are two major catches.&lt;/p&gt;
&lt;p&gt;First, the reviewer can confidently flag something that is not a problem. I see false positives all the time. Sometimes the correct response is simply: nope, resolve the comment, squash, and merge.&lt;/p&gt;
&lt;p&gt;Second, even a correct review can fail to teach. &quot;Change this line&quot; is not enough. The useful review explains the failure mode, the tradeoff, and why the suggested approach fits this project. Otherwise, we are just creating cargo-cult programmers who obey whatever pattern the model produced.&lt;/p&gt;
&lt;p&gt;Multiple review agents can reduce some of this. One agent writes or changes the code, another reviews it, and a third can challenge the review. That does not guarantee correctness, but disagreement is useful because it forces the issue into the open where a human can make the final call.&lt;/p&gt;
&lt;h2&gt;Foundations Matter More Than Ever&lt;/h2&gt;
&lt;p&gt;You cannot YOLO an AI-generated codebase and expect it to stay healthy. The faster the tools move, the more important the foundation becomes.&lt;/p&gt;
&lt;p&gt;At a minimum, anyone doing serious AI-assisted development needs to understand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Git branches, commits, diffs, merges, and rollbacks&lt;/li&gt;
&lt;li&gt;the architecture and data flow of the project&lt;/li&gt;
&lt;li&gt;how to run tests and verify behavior&lt;/li&gt;
&lt;li&gt;where secrets, authentication, and permissions live&lt;/li&gt;
&lt;li&gt;how the application is built and deployed&lt;/li&gt;
&lt;li&gt;what the AI changed before accepting it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Git is mandatory. When an agent makes twenty changes in a few minutes, you need clean checkpoints and an easy way back. A good repository structure, written requirements, tests, and small commits give the model guardrails. They also give you evidence when the model claims everything is fixed.&lt;/p&gt;
&lt;p&gt;The code can be generated. Accountability cannot.&lt;/p&gt;
&lt;h2&gt;The Price Will Not Stay This Low&lt;/h2&gt;
&lt;p&gt;The value in today&apos;s professional AI plans is ridiculous. Heavy users can burn through an enormous amount of compute for a flat monthly fee. That is great for us, but the financial picture does not make sense forever.&lt;/p&gt;
&lt;p&gt;My concern is a Walmart-style cycle: make the new workflow so cheap and convenient that everyone adopts it, wait for the old skills and services to disappear, then raise the price. Whether it happens exactly that way or not, it is dangerous to build a workflow that completely depends on one company keeping today&apos;s limits and prices.&lt;/p&gt;
&lt;p&gt;Cloud AI is also concentrated in companies with the money and hardware to run frontier models. If the best tools become heavily metered or gatekept, developers will have to pay, accept weaker access, or move part of the workflow back to hardware they control.&lt;/p&gt;
&lt;p&gt;Enjoy the bargain, but do not confuse a subsidized price with a permanent one.&lt;/p&gt;
&lt;h2&gt;Local Models Will Be Good Enough for Most People&lt;/h2&gt;
&lt;p&gt;Local LLMs are not equal to the best cloud models for every task. Large open-weight models may look competitive in benchmarks, but most people do not have hundreds of gigabytes of VRAM and a rack full of GPUs.&lt;/p&gt;
&lt;p&gt;That does not mean local AI has to beat the flagship model to matter.&lt;/p&gt;
&lt;p&gt;Small models can already search documents, summarize a modest codebase, classify information, answer common questions, and handle focused tasks. As that baseline improves, most people will not need expensive multi-agent loops or the smartest model on the planet. They will need something private, available, and good enough for 90 percent of their work.&lt;/p&gt;
&lt;p&gt;That is where old workstations, homelab servers, and small clusters get interesting. The future may not be one giant local model doing everything. It may be several focused models and disposable virtual machines handling narrow jobs on hardware you own.&lt;/p&gt;
&lt;p&gt;The important question is not, &quot;Can my local model beat the flagship?&quot; It is, &quot;Does this task need the flagship at all?&quot;&lt;/p&gt;
&lt;h2&gt;AI Is Changing Jobs, but the Story Is Messy&lt;/h2&gt;
&lt;p&gt;Companies are laying people off, and it is popular to blame every layoff on AI. That is too simple. Many businesses were cutting costs long before these tools became useful.&lt;/p&gt;
&lt;p&gt;The more immediate effect may be hiring that never happens. A small team using AI can absorb work that might previously have required two or three additional people. It can also handle adjacent jobs like documentation, basic design, research, and marketing that a technical person would have outsourced or ignored.&lt;/p&gt;
&lt;p&gt;That is a real economic impact even when nobody gets a termination letter that says &quot;replaced by AI.&quot;&lt;/p&gt;
&lt;p&gt;At the same time, only a small percentage of people are using these tools effectively. I still see people spend hours stuck on problems that a well-formed prompt, the right context, and a few minutes of verification could solve. The gap between people who understand the fundamentals and use AI well, and people who do neither, is going to get much wider.&lt;/p&gt;
&lt;h2&gt;My Rules for Building With AI&lt;/h2&gt;
&lt;p&gt;I am not waiting for the industry to settle before using these tools. I am building now, while access is cheap and the capabilities are improving. But I follow a few rules:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start with the problem.&lt;/strong&gt; Define the user, workflow, constraints, and definition of done before generating code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose the architecture yourself.&lt;/strong&gt; AI can present options, but you need to understand and own the final structure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep changes small.&lt;/strong&gt; Work on a branch, inspect the diff, test it, and commit a clean checkpoint.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use AI to review AI.&lt;/strong&gt; A separate reviewer catches mistakes and assumptions the first agent carried through the task.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demand the why.&lt;/strong&gt; A fix without an explanation does not improve your judgment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read the code.&lt;/strong&gt; If you cannot explain the important paths, you do not control the project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep an exit plan.&lt;/strong&gt; Preserve your repositories, documentation, and the ability to work without one specific provider.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;AI is a multiplier. It multiplies good architecture, clear requirements, and experienced judgment. It also multiplies confusion, bad assumptions, and technical debt.&lt;/p&gt;
&lt;p&gt;That is the real problem with AI: not that it is useless or that it will instantly replace everyone, but that it lets us move faster than our understanding. The people who keep learning the foundations will have a superpower. The people who surrender their judgment to the tool will build bigger failures in record time.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;In the video, I break down the Discord conversation that inspired this article, show how I use AI for code review, and explain where I think cloud and local models are headed.&lt;/p&gt;
</content:encoded></item><item><title>What Can AI Actually Do in 2026?</title><link>https://christitus.com/what-can-AI-do-in-2026/</link><guid isPermaLink="true">https://christitus.com/what-can-AI-do-in-2026/</guid><description>&lt;p&gt;Instead of guessing what AI might become, let&apos;s look at what it can actually do today. These are the projects and workflows I have completed with AI as of July 2026.&lt;/p&gt;
&lt;p&gt;The short version is that AI is useful, but it is not magic. It is excellent at research, documentation, code review, scaffolding, testing, and shortening long debugging sessions. It is far less reliable when someone asks it to build complex software without understanding the system underneath.&lt;/p&gt;

&lt;h2&gt;AI as a Better Search Tool&lt;/h2&gt;
&lt;p&gt;For most people, the everyday use for AI is simple: ask a direct question and get a direct answer. That is often faster than digging through five ad-covered pages to find one useful paragraph.&lt;/p&gt;
&lt;p&gt;Today, that usually means using ChatGPT, Claude, or another cloud service. In the long run, I think local large language models (LLMs) will handle more of this work for people who care about privacy and control. A model running on your computer could search your files, summarize documentation, and answer practical questions without sending every request to another company&apos;s server.&lt;/p&gt;
&lt;p&gt;This is not the flashiest use for AI, but it may be the one people use most often.&lt;/p&gt;
&lt;h2&gt;AI Does Not Replace Understanding&lt;/h2&gt;
&lt;p&gt;Can someone use AI to create a substantial program, game, or app from scratch? Yes, but not reliably without knowing how the underlying system works.&lt;/p&gt;
&lt;p&gt;Writing the code is only part of the job. You still need to make decisions such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Which framework fits the project?&lt;/li&gt;
&lt;li&gt;Where does the application store its state?&lt;/li&gt;
&lt;li&gt;How does data move through the system?&lt;/li&gt;
&lt;li&gt;How will authentication and security work?&lt;/li&gt;
&lt;li&gt;What needs to be tested?&lt;/li&gt;
&lt;li&gt;How will the project be deployed and maintained?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without that knowledge, AI can generate something that looks impressive in a demo but falls apart under real use. It can burn through millions of tokens, produce thousands of lines of code, and still leave you with a fragile project that nobody wants to maintain.&lt;/p&gt;
&lt;p&gt;AI works best when the person using it knows enough to steer the work, review the output, and recognize a bad decision. It can accelerate a solid workflow, but it does not replace judgment.&lt;/p&gt;
&lt;h2&gt;What I Have Completed with AI&lt;/h2&gt;
&lt;p&gt;I have used AI successfully on the following projects and workflows. Each one had a clear target, an existing foundation, or enough hands-on oversight to keep the work grounded.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://myheroultra.com&quot;&gt;My Hero Ultra&lt;/a&gt;:&lt;/strong&gt; Built and refined an Astro website for a game my kids play.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/christitustech/dwm-titus&quot;&gt;dwm-titus&lt;/a&gt;:&lt;/strong&gt; Reworked my desktop customization workflow while moving from Arch to Fedora and experimenting with Quickshell.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/ChrisTitusTech/copr-fedora&quot;&gt;Automated COPR repository&lt;/a&gt;:&lt;/strong&gt; Automated the build and maintenance workflow for my Fedora packages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/ChrisTitusTech/website-messages&quot;&gt;Website Messages&lt;/a&gt;:&lt;/strong&gt; Created an admin dashboard for managing website messages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing and code review:&lt;/strong&gt; Used Git workflows, local linting, and targeted tests to catch both human and AI-generated mistakes before they shipped.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation and codebase summaries:&lt;/strong&gt; Used AI to explain unfamiliar systems and reduce the time needed to understand a project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project scaffolding:&lt;/strong&gt; Generated initial layouts, boilerplate, and setup steps instead of starting from an empty directory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long debugging sessions:&lt;/strong&gt; Used LLMs to narrow the search space, inspect error paths, and reach the failing component faster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Larger Projects Still Require Engineering&lt;/h2&gt;
&lt;p&gt;AI has also helped with larger, multi-month projects, but only after the work was divided into real engineering tasks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/christitustech/titusbooks&quot;&gt;TitusBooks&lt;/a&gt;:&lt;/strong&gt; A Quickshell-based book management system designed for self-hosted, multi-user environments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3Plates:&lt;/strong&gt; An Expo-based application for Android, iOS, and the web, with a hosted database, OAuth, and a self-hosted deployment option.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not &quot;type one prompt and get an app&quot; projects. They still require architecture, planning, testing, debugging, and careful review. AI can help with every stage, but it remains part of the workflow rather than the entire workflow.&lt;/p&gt;
&lt;h2&gt;Where AI Fits in 2026&lt;/h2&gt;
&lt;p&gt;The best way to use AI in 2026 is as an extremely fast assistant that still needs clear direction.&lt;/p&gt;
&lt;p&gt;AI is especially helpful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;research and search summaries&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;code review&lt;/li&gt;
&lt;li&gt;tests and lint cleanup&lt;/li&gt;
&lt;li&gt;project scaffolding&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;explaining unfamiliar code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be more careful when using it for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;architecture decisions you do not understand&lt;/li&gt;
&lt;li&gt;security-sensitive code&lt;/li&gt;
&lt;li&gt;authentication and payments&lt;/li&gt;
&lt;li&gt;database design and migrations&lt;/li&gt;
&lt;li&gt;anything you cannot test or maintain yourself&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The dividing line is simple: if you understand the system, AI can make you much faster. If you do not understand it, AI can help you make the wrong decision at a much larger scale.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;The video below covers these examples and shows how I use AI in real projects.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/fYxSGXpl6d4&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Instead of guessing what AI might become, let&apos;s look at what it can actually do today. These are the projects and workflows I have completed with AI as of July 2026.&lt;/p&gt;
&lt;p&gt;The short version is that AI is useful, but it is not magic. It is excellent at research, documentation, code review, scaffolding, testing, and shortening long debugging sessions. It is far less reliable when someone asks it to build complex software without understanding the system underneath.&lt;/p&gt;

&lt;h2&gt;AI as a Better Search Tool&lt;/h2&gt;
&lt;p&gt;For most people, the everyday use for AI is simple: ask a direct question and get a direct answer. That is often faster than digging through five ad-covered pages to find one useful paragraph.&lt;/p&gt;
&lt;p&gt;Today, that usually means using ChatGPT, Claude, or another cloud service. In the long run, I think local large language models (LLMs) will handle more of this work for people who care about privacy and control. A model running on your computer could search your files, summarize documentation, and answer practical questions without sending every request to another company&apos;s server.&lt;/p&gt;
&lt;p&gt;This is not the flashiest use for AI, but it may be the one people use most often.&lt;/p&gt;
&lt;h2&gt;AI Does Not Replace Understanding&lt;/h2&gt;
&lt;p&gt;Can someone use AI to create a substantial program, game, or app from scratch? Yes, but not reliably without knowing how the underlying system works.&lt;/p&gt;
&lt;p&gt;Writing the code is only part of the job. You still need to make decisions such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Which framework fits the project?&lt;/li&gt;
&lt;li&gt;Where does the application store its state?&lt;/li&gt;
&lt;li&gt;How does data move through the system?&lt;/li&gt;
&lt;li&gt;How will authentication and security work?&lt;/li&gt;
&lt;li&gt;What needs to be tested?&lt;/li&gt;
&lt;li&gt;How will the project be deployed and maintained?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without that knowledge, AI can generate something that looks impressive in a demo but falls apart under real use. It can burn through millions of tokens, produce thousands of lines of code, and still leave you with a fragile project that nobody wants to maintain.&lt;/p&gt;
&lt;p&gt;AI works best when the person using it knows enough to steer the work, review the output, and recognize a bad decision. It can accelerate a solid workflow, but it does not replace judgment.&lt;/p&gt;
&lt;h2&gt;What I Have Completed with AI&lt;/h2&gt;
&lt;p&gt;I have used AI successfully on the following projects and workflows. Each one had a clear target, an existing foundation, or enough hands-on oversight to keep the work grounded.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://myheroultra.com&quot;&gt;My Hero Ultra&lt;/a&gt;:&lt;/strong&gt; Built and refined an Astro website for a game my kids play.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/christitustech/dwm-titus&quot;&gt;dwm-titus&lt;/a&gt;:&lt;/strong&gt; Reworked my desktop customization workflow while moving from Arch to Fedora and experimenting with Quickshell.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/ChrisTitusTech/copr-fedora&quot;&gt;Automated COPR repository&lt;/a&gt;:&lt;/strong&gt; Automated the build and maintenance workflow for my Fedora packages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/ChrisTitusTech/website-messages&quot;&gt;Website Messages&lt;/a&gt;:&lt;/strong&gt; Created an admin dashboard for managing website messages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing and code review:&lt;/strong&gt; Used Git workflows, local linting, and targeted tests to catch both human and AI-generated mistakes before they shipped.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation and codebase summaries:&lt;/strong&gt; Used AI to explain unfamiliar systems and reduce the time needed to understand a project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project scaffolding:&lt;/strong&gt; Generated initial layouts, boilerplate, and setup steps instead of starting from an empty directory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long debugging sessions:&lt;/strong&gt; Used LLMs to narrow the search space, inspect error paths, and reach the failing component faster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Larger Projects Still Require Engineering&lt;/h2&gt;
&lt;p&gt;AI has also helped with larger, multi-month projects, but only after the work was divided into real engineering tasks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/christitustech/titusbooks&quot;&gt;TitusBooks&lt;/a&gt;:&lt;/strong&gt; A Quickshell-based book management system designed for self-hosted, multi-user environments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3Plates:&lt;/strong&gt; An Expo-based application for Android, iOS, and the web, with a hosted database, OAuth, and a self-hosted deployment option.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not &quot;type one prompt and get an app&quot; projects. They still require architecture, planning, testing, debugging, and careful review. AI can help with every stage, but it remains part of the workflow rather than the entire workflow.&lt;/p&gt;
&lt;h2&gt;Where AI Fits in 2026&lt;/h2&gt;
&lt;p&gt;The best way to use AI in 2026 is as an extremely fast assistant that still needs clear direction.&lt;/p&gt;
&lt;p&gt;AI is especially helpful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;research and search summaries&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;code review&lt;/li&gt;
&lt;li&gt;tests and lint cleanup&lt;/li&gt;
&lt;li&gt;project scaffolding&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;explaining unfamiliar code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be more careful when using it for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;architecture decisions you do not understand&lt;/li&gt;
&lt;li&gt;security-sensitive code&lt;/li&gt;
&lt;li&gt;authentication and payments&lt;/li&gt;
&lt;li&gt;database design and migrations&lt;/li&gt;
&lt;li&gt;anything you cannot test or maintain yourself&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The dividing line is simple: if you understand the system, AI can make you much faster. If you do not understand it, AI can help you make the wrong decision at a much larger scale.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;The video below covers these examples and shows how I use AI in real projects.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/fYxSGXpl6d4&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Zed Editor</title><link>https://christitus.com/zed-editor/</link><guid isPermaLink="true">https://christitus.com/zed-editor/</guid><description>&lt;p&gt;Zed is what happens when an editor is built for speed first. It is written in Rust, rendered with the GPU, and feels instant in a way most Electron-based editors never do.&lt;/p&gt;
&lt;p&gt;If you want VS Code comfort without Electron drag, Zed is a sharp middle ground that still delivers LSPs, Vim mode, terminals, Git, remote development, and AI.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/zed-header.webp&quot; alt=&quot;Zed header&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Quick Takeaways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Zed feels fast because it is GPU-rendered and native&lt;/li&gt;
&lt;li&gt;You get IDE-grade features without plugin sprawl&lt;/li&gt;
&lt;li&gt;Threads in 1.0 make parallel AI work practical instead of messy&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native Rust + GPU UI&lt;/td&gt;
&lt;td&gt;Smooth scrolling, low latency, and a desktop app that feels light.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in language support&lt;/td&gt;
&lt;td&gt;LSPs, completions, diagnostics, formatting, and debugging without turning setup into a side quest.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vim mode + clean keybindings&lt;/td&gt;
&lt;td&gt;Great for keyboard-heavy workflows without needing a giant config.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal, Git, and tasks&lt;/td&gt;
&lt;td&gt;Keeps editing, running, and reviewing code in one place.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remote development&lt;/td&gt;
&lt;td&gt;SSH and dev container workflows make it easy to work on servers and larger projects.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI that stays integrated&lt;/td&gt;
&lt;td&gt;Edit prediction, agent workflows, and provider choice without making the editor feel bolted on.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Basic Zed Features&lt;/h2&gt;
&lt;p&gt;At a basic level, Zed covers everything most people actually need in a daily editor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fast file search and project-wide search&lt;/li&gt;
&lt;li&gt;Syntax highlighting, LSP completions, diagnostics, and formatting&lt;/li&gt;
&lt;li&gt;Built-in terminal and Git integration&lt;/li&gt;
&lt;li&gt;Vim mode and strong keyboard-first workflows&lt;/li&gt;
&lt;li&gt;Markdown preview, tasks, and remote development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is really the appeal: it feels simple on the surface, but it already has the core IDE features most developers want without feeling bloated.&lt;/p&gt;
&lt;p&gt;If you want to add Vim bindings or mode to Zed, see the &lt;a href=&quot;https://zed.dev/docs/vim&quot;&gt;Vim docs&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;My Zed Customizations&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/zed-screen.webp&quot; alt=&quot;Zed screenshot&quot; /&gt;&lt;/p&gt;
&lt;p&gt;My setup is based on the configs in &lt;a href=&quot;https://github.com/ChrisTitusTech/zed-titus&quot;&gt;&lt;code&gt;zed-titus&lt;/code&gt;&lt;/a&gt;, and the goal is pretty straightforward: make Zed feel faster, cleaner, and more keyboard-driven.&lt;/p&gt;
&lt;p&gt;The big changes are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VS Code base keymap + Vim mode&lt;/strong&gt; for a familiar foundation with modal editing on top&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maple Mono NF&lt;/strong&gt; with &lt;strong&gt;Maple Dark / Maple Light&lt;/strong&gt; for a clean, readable look&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Right-side panels&lt;/strong&gt; for Git, project tree, outline, collaboration, and AI so the layout stays consistent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Relative line numbers, inlay hints, inline blame, autosave, and edit predictions&lt;/strong&gt; to keep coding flow smooth&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copilot-first AI setup&lt;/strong&gt; with favorite models and permissive terminal/fetch tools for agent workflows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom keybindings&lt;/strong&gt; for file finding, search, code actions, diagnostics, Git hunks, markdown preview, terminal toggling, and pane navigation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom tasks&lt;/strong&gt; for content work, especially a &lt;strong&gt;Save clipboard image (Hugo)&lt;/strong&gt; action that runs my Bash helper instead of relying on extra file-picker tooling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the most useful parts of that setup is the image task. Instead of manually pasting screenshots, converting them, moving them into the right Hugo folder, and then writing the markdown link by hand, the task does the boring part for me. It grabs an image from the clipboard, converts it to &lt;strong&gt;WebP&lt;/strong&gt;, saves it into the website&apos;s yearly image directory, inserts the markdown image link into the open post, and copies that link back to the clipboard.&lt;/p&gt;
&lt;p&gt;That makes Zed feel less like just a code editor and more like a fast writing workflow for the site itself.&lt;/p&gt;
&lt;p&gt;So the custom setup is not about turning Zed into a totally different editor. It is more about sharpening the defaults, improving navigation, and making AI plus Vim-style editing feel natural.&lt;/p&gt;
&lt;h2&gt;Why Zed 1.0 Matters&lt;/h2&gt;
&lt;p&gt;Zed 1.0 feels like the point where the editor stopped being &quot;interesting&quot; and became ready for serious daily use.&lt;/p&gt;
&lt;p&gt;The biggest 1.0 addition is &lt;strong&gt;Threads support&lt;/strong&gt;. The new &lt;strong&gt;Threads Sidebar&lt;/strong&gt; lets you run multiple agent threads in parallel, organize them by project, stop or archive them quickly, and keep work across repos separated without losing the bigger picture.&lt;/p&gt;
&lt;p&gt;That lands on top of the stuff that already makes Zed compelling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;real performance&lt;/li&gt;
&lt;li&gt;multiplayer collaboration baked into the editor&lt;/li&gt;
&lt;li&gt;strong Git and remote workflows&lt;/li&gt;
&lt;li&gt;cross-platform support on Linux, Windows, and macOS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Who It Is For&lt;/h2&gt;
&lt;p&gt;Zed makes the most sense if you want a fast editor with modern IDE features, but you do not want the usual Electron sluggishness or plugin sprawl.&lt;/p&gt;
&lt;p&gt;If VS Code feels heavy and Neovim feels too DIY, Zed sits in a really good spot between the two.&lt;/p&gt;
&lt;p&gt;If you want the DIY route instead, my Neovim setup is here: &lt;a href=&quot;/neovim-the-elite-editor/&quot;&gt;Neovim the Elite Editor&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Zed 1.0 is not just another editor release. It is one of the few tools that actually feels new: fast, polished, collaborative, and now much better at handling parallel AI work thanks to Threads.&lt;/p&gt;
&lt;p&gt;If you want to try it, grab Zed at &lt;a href=&quot;https://zed.dev/&quot;&gt;zed.dev&lt;/a&gt; and see the exact config I use in &lt;a href=&quot;https://github.com/ChrisTitusTech/zed-titus&quot;&gt;&lt;code&gt;zed-titus&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/59jRdtEiSpA&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Zed is what happens when an editor is built for speed first. It is written in Rust, rendered with the GPU, and feels instant in a way most Electron-based editors never do.&lt;/p&gt;
&lt;p&gt;If you want VS Code comfort without Electron drag, Zed is a sharp middle ground that still delivers LSPs, Vim mode, terminals, Git, remote development, and AI.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/zed-header.webp&quot; alt=&quot;Zed header&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Quick Takeaways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Zed feels fast because it is GPU-rendered and native&lt;/li&gt;
&lt;li&gt;You get IDE-grade features without plugin sprawl&lt;/li&gt;
&lt;li&gt;Threads in 1.0 make parallel AI work practical instead of messy&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native Rust + GPU UI&lt;/td&gt;
&lt;td&gt;Smooth scrolling, low latency, and a desktop app that feels light.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in language support&lt;/td&gt;
&lt;td&gt;LSPs, completions, diagnostics, formatting, and debugging without turning setup into a side quest.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vim mode + clean keybindings&lt;/td&gt;
&lt;td&gt;Great for keyboard-heavy workflows without needing a giant config.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal, Git, and tasks&lt;/td&gt;
&lt;td&gt;Keeps editing, running, and reviewing code in one place.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remote development&lt;/td&gt;
&lt;td&gt;SSH and dev container workflows make it easy to work on servers and larger projects.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI that stays integrated&lt;/td&gt;
&lt;td&gt;Edit prediction, agent workflows, and provider choice without making the editor feel bolted on.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Basic Zed Features&lt;/h2&gt;
&lt;p&gt;At a basic level, Zed covers everything most people actually need in a daily editor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fast file search and project-wide search&lt;/li&gt;
&lt;li&gt;Syntax highlighting, LSP completions, diagnostics, and formatting&lt;/li&gt;
&lt;li&gt;Built-in terminal and Git integration&lt;/li&gt;
&lt;li&gt;Vim mode and strong keyboard-first workflows&lt;/li&gt;
&lt;li&gt;Markdown preview, tasks, and remote development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is really the appeal: it feels simple on the surface, but it already has the core IDE features most developers want without feeling bloated.&lt;/p&gt;
&lt;p&gt;If you want to add Vim bindings or mode to Zed, see the &lt;a href=&quot;https://zed.dev/docs/vim&quot;&gt;Vim docs&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;My Zed Customizations&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/zed-screen.webp&quot; alt=&quot;Zed screenshot&quot; /&gt;&lt;/p&gt;
&lt;p&gt;My setup is based on the configs in &lt;a href=&quot;https://github.com/ChrisTitusTech/zed-titus&quot;&gt;&lt;code&gt;zed-titus&lt;/code&gt;&lt;/a&gt;, and the goal is pretty straightforward: make Zed feel faster, cleaner, and more keyboard-driven.&lt;/p&gt;
&lt;p&gt;The big changes are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VS Code base keymap + Vim mode&lt;/strong&gt; for a familiar foundation with modal editing on top&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maple Mono NF&lt;/strong&gt; with &lt;strong&gt;Maple Dark / Maple Light&lt;/strong&gt; for a clean, readable look&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Right-side panels&lt;/strong&gt; for Git, project tree, outline, collaboration, and AI so the layout stays consistent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Relative line numbers, inlay hints, inline blame, autosave, and edit predictions&lt;/strong&gt; to keep coding flow smooth&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copilot-first AI setup&lt;/strong&gt; with favorite models and permissive terminal/fetch tools for agent workflows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom keybindings&lt;/strong&gt; for file finding, search, code actions, diagnostics, Git hunks, markdown preview, terminal toggling, and pane navigation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom tasks&lt;/strong&gt; for content work, especially a &lt;strong&gt;Save clipboard image (Hugo)&lt;/strong&gt; action that runs my Bash helper instead of relying on extra file-picker tooling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the most useful parts of that setup is the image task. Instead of manually pasting screenshots, converting them, moving them into the right Hugo folder, and then writing the markdown link by hand, the task does the boring part for me. It grabs an image from the clipboard, converts it to &lt;strong&gt;WebP&lt;/strong&gt;, saves it into the website&apos;s yearly image directory, inserts the markdown image link into the open post, and copies that link back to the clipboard.&lt;/p&gt;
&lt;p&gt;That makes Zed feel less like just a code editor and more like a fast writing workflow for the site itself.&lt;/p&gt;
&lt;p&gt;So the custom setup is not about turning Zed into a totally different editor. It is more about sharpening the defaults, improving navigation, and making AI plus Vim-style editing feel natural.&lt;/p&gt;
&lt;h2&gt;Why Zed 1.0 Matters&lt;/h2&gt;
&lt;p&gt;Zed 1.0 feels like the point where the editor stopped being &quot;interesting&quot; and became ready for serious daily use.&lt;/p&gt;
&lt;p&gt;The biggest 1.0 addition is &lt;strong&gt;Threads support&lt;/strong&gt;. The new &lt;strong&gt;Threads Sidebar&lt;/strong&gt; lets you run multiple agent threads in parallel, organize them by project, stop or archive them quickly, and keep work across repos separated without losing the bigger picture.&lt;/p&gt;
&lt;p&gt;That lands on top of the stuff that already makes Zed compelling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;real performance&lt;/li&gt;
&lt;li&gt;multiplayer collaboration baked into the editor&lt;/li&gt;
&lt;li&gt;strong Git and remote workflows&lt;/li&gt;
&lt;li&gt;cross-platform support on Linux, Windows, and macOS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Who It Is For&lt;/h2&gt;
&lt;p&gt;Zed makes the most sense if you want a fast editor with modern IDE features, but you do not want the usual Electron sluggishness or plugin sprawl.&lt;/p&gt;
&lt;p&gt;If VS Code feels heavy and Neovim feels too DIY, Zed sits in a really good spot between the two.&lt;/p&gt;
&lt;p&gt;If you want the DIY route instead, my Neovim setup is here: &lt;a href=&quot;/neovim-the-elite-editor/&quot;&gt;Neovim the Elite Editor&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Zed 1.0 is not just another editor release. It is one of the few tools that actually feels new: fast, polished, collaborative, and now much better at handling parallel AI work thanks to Threads.&lt;/p&gt;
&lt;p&gt;If you want to try it, grab Zed at &lt;a href=&quot;https://zed.dev/&quot;&gt;zed.dev&lt;/a&gt; and see the exact config I use in &lt;a href=&quot;https://github.com/ChrisTitusTech/zed-titus&quot;&gt;&lt;code&gt;zed-titus&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/59jRdtEiSpA&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Zoxide</title><link>https://christitus.com/zoxide/</link><guid isPermaLink="true">https://christitus.com/zoxide/</guid><description>&lt;p&gt;&lt;strong&gt;Zoxide&lt;/strong&gt; is an enhanced version of the traditional &lt;code&gt;cd&lt;/code&gt; command, drawing inspiration from tools like &lt;code&gt;z&lt;/code&gt; and &lt;code&gt;autojump&lt;/code&gt;. It&apos;s designed to make navigating your filesystem faster and more intuitive by learning your habits. The more you use it, the smarter it gets, allowing you to &quot;jump&quot; to your most frequently used directories with minimal input. &lt;/p&gt;
&lt;h2&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Smart Directory Jumping:&lt;/strong&gt; Navigate to your most used directories with just a few keystrokes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-Shell Compatibility:&lt;/strong&gt; Works seamlessly across all major shells.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive Selection:&lt;/strong&gt; Use &lt;code&gt;zi&lt;/code&gt; for interactive directory selection with &lt;code&gt;fzf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easy Installation:&lt;/strong&gt; Simple setup process across various platforms.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;h3&gt;Basic Commands&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;z foo&lt;/code&gt;: Jump to the highest-ranked directory matching &lt;code&gt;foo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z ~/foo&lt;/code&gt;: Works just like &lt;code&gt;cd&lt;/code&gt;, allowing navigation to absolute paths.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z ..&lt;/code&gt;: Move up one directory level.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z -&lt;/code&gt;: Return to the previous directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Installation Steps&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Install Zoxide:&lt;/strong&gt; Available for Linux, macOS, Windows, BSD, and Android.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;All operating systems have zoxide in default repositories and can be installed by using the &lt;code&gt;zoxide&lt;/code&gt; package&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Shell Integration:&lt;/strong&gt; Easily integrate zoxide into your preferred shell (Bash, Fish, Zsh, and more).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optional fzf Integration:&lt;/strong&gt; For enhanced interactive selection, install &lt;code&gt;fzf&lt;/code&gt; (v0.33.0+).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Customize zoxide with various flags and environment variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Command Prefix:&lt;/strong&gt; Change the default &lt;code&gt;z&lt;/code&gt; and &lt;code&gt;zi&lt;/code&gt; commands with &lt;code&gt;--cmd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hooks:&lt;/strong&gt; Adjust the frequency of directory score updates with &lt;code&gt;--hook&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Directory:&lt;/strong&gt; Specify the database location with &lt;code&gt;_ZO_DATA_DIR&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exclude Directories:&lt;/strong&gt; Use &lt;code&gt;_ZO_EXCLUDE_DIRS&lt;/code&gt; to exclude directories from zoxide&apos;s database.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Integrations&lt;/h2&gt;
&lt;p&gt;Zoxide integrates with a wide range of applications, from file managers like &lt;code&gt;lf&lt;/code&gt; and &lt;code&gt;ranger&lt;/code&gt; to text editors like &lt;code&gt;vim&lt;/code&gt; and &lt;code&gt;emacs&lt;/code&gt;, enhancing your workflow across tools.&lt;/p&gt;
&lt;h2&gt;Links&lt;/h2&gt;
&lt;p&gt;Github: &lt;a href=&quot;https://github.com/ajeetdsouza/zoxide&quot;&gt;https://github.com/ajeetdsouza/zoxide&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/XE1f7Tr0suo&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Sun, 21 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Zoxide&lt;/strong&gt; is an enhanced version of the traditional &lt;code&gt;cd&lt;/code&gt; command, drawing inspiration from tools like &lt;code&gt;z&lt;/code&gt; and &lt;code&gt;autojump&lt;/code&gt;. It&apos;s designed to make navigating your filesystem faster and more intuitive by learning your habits. The more you use it, the smarter it gets, allowing you to &quot;jump&quot; to your most frequently used directories with minimal input. &lt;/p&gt;
&lt;h2&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Smart Directory Jumping:&lt;/strong&gt; Navigate to your most used directories with just a few keystrokes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-Shell Compatibility:&lt;/strong&gt; Works seamlessly across all major shells.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive Selection:&lt;/strong&gt; Use &lt;code&gt;zi&lt;/code&gt; for interactive directory selection with &lt;code&gt;fzf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easy Installation:&lt;/strong&gt; Simple setup process across various platforms.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;h3&gt;Basic Commands&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;z foo&lt;/code&gt;: Jump to the highest-ranked directory matching &lt;code&gt;foo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z ~/foo&lt;/code&gt;: Works just like &lt;code&gt;cd&lt;/code&gt;, allowing navigation to absolute paths.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z ..&lt;/code&gt;: Move up one directory level.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z -&lt;/code&gt;: Return to the previous directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Installation Steps&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Install Zoxide:&lt;/strong&gt; Available for Linux, macOS, Windows, BSD, and Android.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;All operating systems have zoxide in default repositories and can be installed by using the &lt;code&gt;zoxide&lt;/code&gt; package&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Shell Integration:&lt;/strong&gt; Easily integrate zoxide into your preferred shell (Bash, Fish, Zsh, and more).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optional fzf Integration:&lt;/strong&gt; For enhanced interactive selection, install &lt;code&gt;fzf&lt;/code&gt; (v0.33.0+).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Customize zoxide with various flags and environment variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Command Prefix:&lt;/strong&gt; Change the default &lt;code&gt;z&lt;/code&gt; and &lt;code&gt;zi&lt;/code&gt; commands with &lt;code&gt;--cmd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hooks:&lt;/strong&gt; Adjust the frequency of directory score updates with &lt;code&gt;--hook&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Directory:&lt;/strong&gt; Specify the database location with &lt;code&gt;_ZO_DATA_DIR&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exclude Directories:&lt;/strong&gt; Use &lt;code&gt;_ZO_EXCLUDE_DIRS&lt;/code&gt; to exclude directories from zoxide&apos;s database.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Integrations&lt;/h2&gt;
&lt;p&gt;Zoxide integrates with a wide range of applications, from file managers like &lt;code&gt;lf&lt;/code&gt; and &lt;code&gt;ranger&lt;/code&gt; to text editors like &lt;code&gt;vim&lt;/code&gt; and &lt;code&gt;emacs&lt;/code&gt;, enhancing your workflow across tools.&lt;/p&gt;
&lt;h2&gt;Links&lt;/h2&gt;
&lt;p&gt;Github: &lt;a href=&quot;https://github.com/ajeetdsouza/zoxide&quot;&gt;https://github.com/ajeetdsouza/zoxide&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/XE1f7Tr0suo&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Docker Macos</title><link>https://christitus.com/docker-macos/</link><guid isPermaLink="true">https://christitus.com/docker-macos/</guid><description>&lt;p&gt;Don&apos;t have a Mac and need MacOS? No problem, run it in a docker container.&lt;/p&gt;

&lt;p&gt;Credit goes to this twitter user:&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/justArRinze/status/1591779981390413826&quot;&gt;View post by @justArRinze on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;p&gt;Install Docker Ubuntu 22.04&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable&quot;
sudo apt install docker-ce -y
sudo usermod -aG docker $USER
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Reboot or logout/login&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(Optional) GUI Webpage for Managing Docker - Portainer&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:2.9.3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Open up browser and navigate to &lt;a href=&quot;https://localhost:9443&quot;&gt;https://localhost:9443&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Click Advanced and proceed with any certificate errors&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;MacOS Docker Setup&lt;/h2&gt;
&lt;p&gt;Setup the MacOS Docker Container with the following docker command&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -it \
    --device /dev/kvm \
    -p 50922:10022 \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -e &quot;DISPLAY=${DISPLAY:-:0.0}&quot; \
    -e GENERATE_UNIQUE=true \
    -e MASTER_PLIST_URL=&apos;https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist&apos; \
    sickcodes/docker-osx:monterey

# docker build -t docker-osx --build-arg SHORTNAME=monterey .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Use Disk Utility to &quot;erase&quot; the 270GB virtual disk: &lt;em&gt;Note: This is just virtual and doesn&apos;t erase your drive&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/docker-macos/disk-util.webp&quot; alt=&quot;Disk Util&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Start MacOS Docker Container&lt;/h2&gt;
&lt;p&gt;Before we start the container find the name with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker ps -a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Look for the NAMES column and pick the container name.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/docker-macos/container.webp&quot; alt=&quot;Container&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Start with the following command NAME = Name from column above&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker start NAME
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Portainer Method for Starting&lt;/h3&gt;
&lt;p&gt;I love portainer because you can easily manage your containers. Start, Stop, and see resource usage... Portainer does it all! Here is what mine looks like:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/docker-macos/portainer.webp&quot; alt=&quot;Portainer&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Optimize the Container&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/sickcodes/osx-optimizer&quot;&gt;https://github.com/sickcodes/osx-optimizer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run the following from Root Prompt # &lt;code&gt;sudo su&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;defaults write com.apple.loginwindow autoLoginUser -bool true
mdutil -i off -a
nvram boot-args=&quot;serverperfmode=1 $(nvram boot-args 2&amp;gt;/dev/null | cut -f 2-)&quot;
defaults write /Library/Preferences/com.apple.loginwindow DesktopPicture &quot;&quot;
defaults write com.apple.Accessibility DifferentiateWithoutColor -int 1
defaults write com.apple.Accessibility ReduceMotionEnabled -int 1
defaults write com.apple.universalaccess reduceMotion -int 1
defaults write com.apple.universalaccess reduceTransparency -int 1
defaults write com.apple.Accessibility ReduceMotionEnabled -int 1
defaults write /Library/Preferences/com.apple.SoftwareUpdate AutomaticDownload -bool false
defaults write com.apple.SoftwareUpdate AutomaticCheckEnabled -bool false
defaults write com.apple.commerce AutoUpdate -bool false
defaults write com.apple.commerce AutoUpdateRestartRequired -bool false
defaults write com.apple.SoftwareUpdate ConfigDataInstall -int 0
defaults write com.apple.SoftwareUpdate CriticalUpdateInstall -int 0
defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 0
defaults write com.apple.SoftwareUpdate AutomaticDownload -int 0
defaults write com.apple.loginwindow DisableScreenLock -bool true
defaults write com.apple.loginwindow TALLogoutSavesState -bool false
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Final Result&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/docker-macos/macos-final.webp&quot; alt=&quot;Macos Final&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/XWo2gnNbeGQ&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Wed, 30 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Don&apos;t have a Mac and need MacOS? No problem, run it in a docker container.&lt;/p&gt;

&lt;p&gt;Credit goes to this twitter user:&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/justArRinze/status/1591779981390413826&quot;&gt;View post by @justArRinze on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;p&gt;Install Docker Ubuntu 22.04&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable&quot;
sudo apt install docker-ce -y
sudo usermod -aG docker $USER
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Reboot or logout/login&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(Optional) GUI Webpage for Managing Docker - Portainer&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:2.9.3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Open up browser and navigate to &lt;a href=&quot;https://localhost:9443&quot;&gt;https://localhost:9443&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Click Advanced and proceed with any certificate errors&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;MacOS Docker Setup&lt;/h2&gt;
&lt;p&gt;Setup the MacOS Docker Container with the following docker command&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -it \
    --device /dev/kvm \
    -p 50922:10022 \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -e &quot;DISPLAY=${DISPLAY:-:0.0}&quot; \
    -e GENERATE_UNIQUE=true \
    -e MASTER_PLIST_URL=&apos;https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist&apos; \
    sickcodes/docker-osx:monterey

# docker build -t docker-osx --build-arg SHORTNAME=monterey .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Use Disk Utility to &quot;erase&quot; the 270GB virtual disk: &lt;em&gt;Note: This is just virtual and doesn&apos;t erase your drive&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/docker-macos/disk-util.webp&quot; alt=&quot;Disk Util&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Start MacOS Docker Container&lt;/h2&gt;
&lt;p&gt;Before we start the container find the name with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker ps -a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Look for the NAMES column and pick the container name.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/docker-macos/container.webp&quot; alt=&quot;Container&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Start with the following command NAME = Name from column above&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker start NAME
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Portainer Method for Starting&lt;/h3&gt;
&lt;p&gt;I love portainer because you can easily manage your containers. Start, Stop, and see resource usage... Portainer does it all! Here is what mine looks like:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/docker-macos/portainer.webp&quot; alt=&quot;Portainer&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Optimize the Container&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/sickcodes/osx-optimizer&quot;&gt;https://github.com/sickcodes/osx-optimizer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run the following from Root Prompt # &lt;code&gt;sudo su&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;defaults write com.apple.loginwindow autoLoginUser -bool true
mdutil -i off -a
nvram boot-args=&quot;serverperfmode=1 $(nvram boot-args 2&amp;gt;/dev/null | cut -f 2-)&quot;
defaults write /Library/Preferences/com.apple.loginwindow DesktopPicture &quot;&quot;
defaults write com.apple.Accessibility DifferentiateWithoutColor -int 1
defaults write com.apple.Accessibility ReduceMotionEnabled -int 1
defaults write com.apple.universalaccess reduceMotion -int 1
defaults write com.apple.universalaccess reduceTransparency -int 1
defaults write com.apple.Accessibility ReduceMotionEnabled -int 1
defaults write /Library/Preferences/com.apple.SoftwareUpdate AutomaticDownload -bool false
defaults write com.apple.SoftwareUpdate AutomaticCheckEnabled -bool false
defaults write com.apple.commerce AutoUpdate -bool false
defaults write com.apple.commerce AutoUpdateRestartRequired -bool false
defaults write com.apple.SoftwareUpdate ConfigDataInstall -int 0
defaults write com.apple.SoftwareUpdate CriticalUpdateInstall -int 0
defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 0
defaults write com.apple.SoftwareUpdate AutomaticDownload -int 0
defaults write com.apple.loginwindow DisableScreenLock -bool true
defaults write com.apple.loginwindow TALLogoutSavesState -bool false
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Final Result&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/docker-macos/macos-final.webp&quot; alt=&quot;Macos Final&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/XWo2gnNbeGQ&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Neovim Is Better</title><link>https://christitus.com/neovim-is-better/</link><guid isPermaLink="true">https://christitus.com/neovim-is-better/</guid><description>&lt;p&gt;I&apos;ve never experienced a program with such power and potential than Neovim. It does so much and we are at the beginning as it isn&apos;t even to a 1.0 release yet. The best part is the program works on Windows, MacOS, and Linux.&lt;/p&gt;

&lt;p&gt;The following tweet encompasses my thoughts and feelings in my first week using Neovim.&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1584944224700702720&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Is this the path for you?&lt;/h2&gt;
&lt;p&gt;Neovim is rewarding after configured. The amount of automation, speed, and shear possibilities are limitless, but NOT without it&apos;s downside though. I&apos;ve spent hours working on my basic configuration and I am still months away before I will be close to completion. I say this as a NOOB! That is because I had no idea what a DAP, LSP, Linter, and other coding terms were before I began this journey.&lt;/p&gt;
&lt;p&gt;If you know any of the coding terms and a little LUA, you will have a better starting point than myself. If not, get prepared to learn because there will be a lot of new terms and functionality you will need to know to get the most out of Neovim experience.&lt;/p&gt;
&lt;h2&gt;What I use Neovim for&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Writing&lt;/strong&gt; is a difficult task that requires focus and creativity. For me, having the focus mode with a Linter that checks spelling and grammar has made a massive difference. I prefer the linting approach to writing, because it doesn&apos;t tell me about sentence structure or grammar until I&apos;ve finished my thought and saved.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Files&lt;/strong&gt; in Neovim are a dream for any system admin that doesn&apos;t have the luxury of a desktop or are using a remote server. Tab out files, read other contents into an existing file, and have a file explorer with full undo logs. I could go on, but you get the idea.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coding&lt;/strong&gt; is where most people&apos;s mind goes with Neovim. You have the rockstars, like primeagen, that make Neovim look like a tool of the gods and mere mortals use other editors.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;With Neovim being so young in releases the latest release you can get is the best. Anything below 0.7 is too low as it won&apos;t have the features you will need for the best experience. I highly recommend downloading directly from Neovim&apos;s GitHub releases: &lt;a href=&quot;https://github.com/Neovim/Neovim/releases/tag/stable&quot;&gt;https://github.com/Neovim/Neovim/releases/tag/stable&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All dependencies and requirements are in my &lt;a href=&quot;http://setup.sh&quot;&gt;setup.sh&lt;/a&gt; for Linux and winsetup.ps1 for Windows from: &lt;a href=&quot;https://github.com/ChrisTitusTech/Neovim&quot;&gt;https://github.com/ChrisTitusTech/Neovim&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/christitustech/Neovim
cd Neovim
sudo ./setup.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Windows PowerShell Alternative&lt;/h3&gt;
&lt;p&gt;I modified PowerShell to also use Neovim. I did make a &lt;code&gt;winsetup.ps1&lt;/code&gt; to help aid in the setup, but there will be more manual steps to this setup.&lt;/p&gt;
&lt;p&gt;Included cpp compiler and runtime to assist in programming, but the biggest thing to setup is nodejs. This has an automated script that will fix python and other dependencies that are problematic in Windows.&lt;/p&gt;
&lt;p&gt;Setting PATH in Windows is your biggest priority for a functional Neovim. Type &lt;code&gt;sysdm.cpl&lt;/code&gt; to launch into System Properties and click Advanced -&amp;gt; Environment Variables to set the paths. Add any missing health checks here.&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Instead of making a big modular structure that you see in most Neovim projects, mine is small for ease of learning. It will expand as times goes on, but I want to KISS it... Keep it stupid simple. There is 3 files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;init.lua&lt;/code&gt; - Initializes Neovim and calls any extra files. These are my main settings and special plugin configurations. _Note: some people use the old &lt;code&gt;init.vim&lt;/code&gt; instead of lua, but that defeats the purpose of using Neovim.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lua/keymaps.lua&lt;/code&gt; - These are all my key bindings for Neovim&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lua/plugins.lua&lt;/code&gt; - List of plugins to load.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Startup&lt;/h2&gt;
&lt;p&gt;USE &lt;code&gt;:checkhealth&lt;/code&gt; FIRST!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/neovim-is-better/checkhealth.webp&quot; alt=&quot;Checkhealth&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Errors must be fixed to have a functional Neovim experience. Warnings can be ignored, but noted, because you may have failed installs for LSPs, Linters, and other tools.&lt;/p&gt;
&lt;h3&gt;Adding Tools&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;:Mason&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/neovim-is-better/mason.webp&quot; alt=&quot;Mason&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: I recommend ONLY installing what you USE!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Shortcuts for Mason:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;i = install&lt;/li&gt;
&lt;li&gt;U = upgrade package&lt;/li&gt;
&lt;li&gt;X = remove package&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What NOT to do&lt;/h2&gt;
&lt;p&gt;Neovim is such a powerful editor that it can do anything. Before you do this, ask yourself, &quot;Do I use this?&quot; and if not, do NOT install it!&lt;/p&gt;
&lt;p&gt;If you want all the plugins and have every language supported, I&apos;d recommend Lunar vim or NvChad. These projects do a fantastic job of emulating every part of vscode, while also having an easy install and setup.&lt;/p&gt;
&lt;p&gt;I&apos;d recommend installing them to see what Neovim is capable of, but I did NOT like them for the long term. This is because Neovim needs a personal touch to see its true power.&lt;/p&gt;
&lt;p&gt;I fell in love with Neovim once I started to add the features I used. Remember, you can always expand later.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/6VbOLOuiHUI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Mon, 07 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve never experienced a program with such power and potential than Neovim. It does so much and we are at the beginning as it isn&apos;t even to a 1.0 release yet. The best part is the program works on Windows, MacOS, and Linux.&lt;/p&gt;

&lt;p&gt;The following tweet encompasses my thoughts and feelings in my first week using Neovim.&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1584944224700702720&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Is this the path for you?&lt;/h2&gt;
&lt;p&gt;Neovim is rewarding after configured. The amount of automation, speed, and shear possibilities are limitless, but NOT without it&apos;s downside though. I&apos;ve spent hours working on my basic configuration and I am still months away before I will be close to completion. I say this as a NOOB! That is because I had no idea what a DAP, LSP, Linter, and other coding terms were before I began this journey.&lt;/p&gt;
&lt;p&gt;If you know any of the coding terms and a little LUA, you will have a better starting point than myself. If not, get prepared to learn because there will be a lot of new terms and functionality you will need to know to get the most out of Neovim experience.&lt;/p&gt;
&lt;h2&gt;What I use Neovim for&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Writing&lt;/strong&gt; is a difficult task that requires focus and creativity. For me, having the focus mode with a Linter that checks spelling and grammar has made a massive difference. I prefer the linting approach to writing, because it doesn&apos;t tell me about sentence structure or grammar until I&apos;ve finished my thought and saved.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Files&lt;/strong&gt; in Neovim are a dream for any system admin that doesn&apos;t have the luxury of a desktop or are using a remote server. Tab out files, read other contents into an existing file, and have a file explorer with full undo logs. I could go on, but you get the idea.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coding&lt;/strong&gt; is where most people&apos;s mind goes with Neovim. You have the rockstars, like primeagen, that make Neovim look like a tool of the gods and mere mortals use other editors.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;With Neovim being so young in releases the latest release you can get is the best. Anything below 0.7 is too low as it won&apos;t have the features you will need for the best experience. I highly recommend downloading directly from Neovim&apos;s GitHub releases: &lt;a href=&quot;https://github.com/Neovim/Neovim/releases/tag/stable&quot;&gt;https://github.com/Neovim/Neovim/releases/tag/stable&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All dependencies and requirements are in my &lt;a href=&quot;http://setup.sh&quot;&gt;setup.sh&lt;/a&gt; for Linux and winsetup.ps1 for Windows from: &lt;a href=&quot;https://github.com/ChrisTitusTech/Neovim&quot;&gt;https://github.com/ChrisTitusTech/Neovim&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/christitustech/Neovim
cd Neovim
sudo ./setup.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Windows PowerShell Alternative&lt;/h3&gt;
&lt;p&gt;I modified PowerShell to also use Neovim. I did make a &lt;code&gt;winsetup.ps1&lt;/code&gt; to help aid in the setup, but there will be more manual steps to this setup.&lt;/p&gt;
&lt;p&gt;Included cpp compiler and runtime to assist in programming, but the biggest thing to setup is nodejs. This has an automated script that will fix python and other dependencies that are problematic in Windows.&lt;/p&gt;
&lt;p&gt;Setting PATH in Windows is your biggest priority for a functional Neovim. Type &lt;code&gt;sysdm.cpl&lt;/code&gt; to launch into System Properties and click Advanced -&amp;gt; Environment Variables to set the paths. Add any missing health checks here.&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Instead of making a big modular structure that you see in most Neovim projects, mine is small for ease of learning. It will expand as times goes on, but I want to KISS it... Keep it stupid simple. There is 3 files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;init.lua&lt;/code&gt; - Initializes Neovim and calls any extra files. These are my main settings and special plugin configurations. _Note: some people use the old &lt;code&gt;init.vim&lt;/code&gt; instead of lua, but that defeats the purpose of using Neovim.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lua/keymaps.lua&lt;/code&gt; - These are all my key bindings for Neovim&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lua/plugins.lua&lt;/code&gt; - List of plugins to load.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Startup&lt;/h2&gt;
&lt;p&gt;USE &lt;code&gt;:checkhealth&lt;/code&gt; FIRST!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/neovim-is-better/checkhealth.webp&quot; alt=&quot;Checkhealth&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Errors must be fixed to have a functional Neovim experience. Warnings can be ignored, but noted, because you may have failed installs for LSPs, Linters, and other tools.&lt;/p&gt;
&lt;h3&gt;Adding Tools&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;:Mason&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/neovim-is-better/mason.webp&quot; alt=&quot;Mason&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: I recommend ONLY installing what you USE!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Shortcuts for Mason:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;i = install&lt;/li&gt;
&lt;li&gt;U = upgrade package&lt;/li&gt;
&lt;li&gt;X = remove package&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What NOT to do&lt;/h2&gt;
&lt;p&gt;Neovim is such a powerful editor that it can do anything. Before you do this, ask yourself, &quot;Do I use this?&quot; and if not, do NOT install it!&lt;/p&gt;
&lt;p&gt;If you want all the plugins and have every language supported, I&apos;d recommend Lunar vim or NvChad. These projects do a fantastic job of emulating every part of vscode, while also having an easy install and setup.&lt;/p&gt;
&lt;p&gt;I&apos;d recommend installing them to see what Neovim is capable of, but I did NOT like them for the long term. This is because Neovim needs a personal touch to see its true power.&lt;/p&gt;
&lt;p&gt;I fell in love with Neovim once I started to add the features I used. Remember, you can always expand later.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/6VbOLOuiHUI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Why the Command Line is Overpowered</title><link>https://christitus.com/why-the-cli-is-op/</link><guid isPermaLink="true">https://christitus.com/why-the-cli-is-op/</guid><description>&lt;p&gt;When I say &quot;Overpowered&quot;, this means the command line interfaces can do things that are otherwise impossible.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1578822405518397442&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;All Operating Systems&lt;/h2&gt;
&lt;p&gt;When your think of command line interfaces or CLI, there are a lot of things that come to my mind, but let&apos;s go over how they are overpowered in EVERY operating system.&lt;/p&gt;
&lt;h3&gt;Windows&lt;/h3&gt;
&lt;p&gt;Both PowerShell and Command Prompt in Windows can do some amazing things. I use them extensively in both my personal and business life. I have some batch scripts that strip out and delete edge every time Microsoft reinstalls it through an unwanted update.&lt;/p&gt;
&lt;p&gt;In Powershell my entire Windows Utility is built through a PS1 script and XAML. I can install Microsoft Store Apps, Clean and Optimize systems quickly. I can also modify Windows in a way where I only have &lt;strong&gt;40&lt;/strong&gt; processes running.&lt;/p&gt;
&lt;p&gt;These feats are not possible from just using fancy graphics and a mouse. Without them, you are crippled and at the mercy of Microsoft.&lt;/p&gt;
&lt;h3&gt;MacOS&lt;/h3&gt;
&lt;p&gt;Terminal on a mac is the one thing I love about the operating system. Most mac users don&apos;t even know how awesome their UNIX based terminal is. They just click around and open up their wallets to the App Store when they need something.&lt;/p&gt;
&lt;p&gt;That all changes when you discovery terminal and a program called &quot;Homebrew&quot;. This gives you the ability to install programs in a flash and it doesn&apos;t cost you a dime. I couldn&apos;t live without this on a Mac.&lt;/p&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;p&gt;Terminal is the CLI that made command line cool. The functions you get from this in Linux is absolutely amazing. It is so good that many mundane tasks are simply easier on terminal than using a mouse and the graphic user interface. The entire system can be run from terminal with ease and why the world runs on Linux servers.&lt;/p&gt;
&lt;h2&gt;Is it faster than a GUI?&lt;/h2&gt;
&lt;p&gt;There is a debate about this among hobbyists, but any IT professional will tell you that there isn&apos;t any comparison. Installing programs, tweaking a system, copying large amounts of files, and many more tasks are not only easier, but incredibly faster. It is not to say there is no place for the GUI, but for tasks you do often, there is no equal that can come close to the efficiency of the command line.&lt;/p&gt;
&lt;p&gt;So the question isn&apos;t if it is faster than the GUI... The question is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Are you skilled enough to use the command line to its potential?&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I often ask myself this question when I find something cumbersome and I don&apos;t know the alternative in the command line. The thing most people miss is, ANYTHING is possible on the command line. It&apos;s just whether or not you know it.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/pkhazgI3LAo&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Mon, 17 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When I say &quot;Overpowered&quot;, this means the command line interfaces can do things that are otherwise impossible.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1578822405518397442&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;All Operating Systems&lt;/h2&gt;
&lt;p&gt;When your think of command line interfaces or CLI, there are a lot of things that come to my mind, but let&apos;s go over how they are overpowered in EVERY operating system.&lt;/p&gt;
&lt;h3&gt;Windows&lt;/h3&gt;
&lt;p&gt;Both PowerShell and Command Prompt in Windows can do some amazing things. I use them extensively in both my personal and business life. I have some batch scripts that strip out and delete edge every time Microsoft reinstalls it through an unwanted update.&lt;/p&gt;
&lt;p&gt;In Powershell my entire Windows Utility is built through a PS1 script and XAML. I can install Microsoft Store Apps, Clean and Optimize systems quickly. I can also modify Windows in a way where I only have &lt;strong&gt;40&lt;/strong&gt; processes running.&lt;/p&gt;
&lt;p&gt;These feats are not possible from just using fancy graphics and a mouse. Without them, you are crippled and at the mercy of Microsoft.&lt;/p&gt;
&lt;h3&gt;MacOS&lt;/h3&gt;
&lt;p&gt;Terminal on a mac is the one thing I love about the operating system. Most mac users don&apos;t even know how awesome their UNIX based terminal is. They just click around and open up their wallets to the App Store when they need something.&lt;/p&gt;
&lt;p&gt;That all changes when you discovery terminal and a program called &quot;Homebrew&quot;. This gives you the ability to install programs in a flash and it doesn&apos;t cost you a dime. I couldn&apos;t live without this on a Mac.&lt;/p&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;p&gt;Terminal is the CLI that made command line cool. The functions you get from this in Linux is absolutely amazing. It is so good that many mundane tasks are simply easier on terminal than using a mouse and the graphic user interface. The entire system can be run from terminal with ease and why the world runs on Linux servers.&lt;/p&gt;
&lt;h2&gt;Is it faster than a GUI?&lt;/h2&gt;
&lt;p&gt;There is a debate about this among hobbyists, but any IT professional will tell you that there isn&apos;t any comparison. Installing programs, tweaking a system, copying large amounts of files, and many more tasks are not only easier, but incredibly faster. It is not to say there is no place for the GUI, but for tasks you do often, there is no equal that can come close to the efficiency of the command line.&lt;/p&gt;
&lt;p&gt;So the question isn&apos;t if it is faster than the GUI... The question is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Are you skilled enough to use the command line to its potential?&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I often ask myself this question when I find something cumbersome and I don&apos;t know the alternative in the command line. The thing most people miss is, ANYTHING is possible on the command line. It&apos;s just whether or not you know it.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/pkhazgI3LAo&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Neovim: The Ultimate Editor</title><link>https://christitus.com/vim-the-ultimate-editor/</link><guid isPermaLink="true">https://christitus.com/vim-the-ultimate-editor/</guid><description>&lt;p&gt;Neovim is one of the most powerful, but often misunderstood, editors in
existence. Let&apos;s approach it from a beginner&apos;s perspective and show why it is
now my editor of choice.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This article originally covered Vim and my old &lt;code&gt;myvim&lt;/code&gt; configuration. I no
longer use Vim, and the &lt;code&gt;myvim&lt;/code&gt; project has been retired. I have moved to
Neovim, and my active configuration is the
&lt;a href=&quot;https://github.com/ChrisTitusTech/neovim&quot;&gt;ChrisTitusTech/neovim&lt;/a&gt; project. For
the latest deep dive into that setup, see
&lt;a href=&quot;/neovim-the-elite-editor/&quot;&gt;Neovim the Elite Editor&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Why Neovim?&lt;/h2&gt;
&lt;p&gt;There is a lot to learn about Neovim, but the first question is usually: why
not just use VS Code or IntelliJ?&lt;/p&gt;
&lt;p&gt;Those editors offer an easy starting point, excellent debugging, and huge
extension ecosystems. Neovim takes a different approach. It gives you the
speed and keyboard-driven editing model of Vim, then adds a modern Lua
configuration system, built-in language server support, and a plugin ecosystem
that can turn it into a focused development environment.&lt;/p&gt;
&lt;p&gt;An experienced Neovim user can move through a project, search files, refactor
code, and operate several tools without reaching for the mouse. If you want to
see that editing style pushed to its limits, watch
&lt;a href=&quot;https://www.youtube.com/c/ThePrimeagen/videos&quot;&gt;ThePrimeagen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The tradeoff is the learning curve. Neovim is not something you completely
master in a weekend. It takes time to build the motions into muscle memory, but
the payoff is worth it when editing starts to feel immediate instead of being
a series of menus and mouse movements.&lt;/p&gt;
&lt;h2&gt;Learn the Vim fundamentals&lt;/h2&gt;
&lt;p&gt;Neovim uses the same modal editing model and motions that made Vim so
effective. The first thing to understand is its modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Normal mode&lt;/strong&gt; - The default mode. Use it for movement, commands, and editing
operations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insert mode&lt;/strong&gt; - Press &lt;code&gt;i&lt;/code&gt; to enter text.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual mode&lt;/strong&gt; - Press &lt;code&gt;v&lt;/code&gt; to select text and then run an operation on the
selection.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Press &lt;code&gt;Esc&lt;/code&gt; to return to Normal mode from Insert or Visual mode. My
configuration also maps &lt;code&gt;jj&lt;/code&gt; in Insert mode as a faster escape.&lt;/p&gt;
&lt;p&gt;The running joke is that nobody knows how to exit Vim. The same commands work
in Neovim:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Save and quit with &lt;code&gt;:wq&lt;/code&gt;, &lt;code&gt;:x&lt;/code&gt;, or &lt;code&gt;ZZ&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Quit without saving with &lt;code&gt;:q!&lt;/code&gt; or &lt;code&gt;ZQ&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The important idea is still:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If something feels slow in Neovim, there is probably a faster way to do it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Useful Vim motion cheatsheets still apply to Neovim:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devhints.io/vim&quot;&gt;https://devhints.io/vim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vim.rtorr.com/&quot;&gt;https://vim.rtorr.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1577690702200590336&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Practice before you customize&lt;/h2&gt;
&lt;p&gt;Run &lt;code&gt;:Tutor&lt;/code&gt; inside Neovim and work through it repeatedly. Treat it like a
speedrun: finish it, repeat it, and try to rely less on the hints each time.
That repetition is how the motions stop being individual keys and become
muscle memory.&lt;/p&gt;
&lt;p&gt;Move as much of your real workflow into Neovim as you comfortably can. At the
same time, do not blindly copy every keymap from somebody else&apos;s config. A
configuration should reduce friction in your own work.&lt;/p&gt;
&lt;h2&gt;My current Neovim project&lt;/h2&gt;
&lt;p&gt;My old setup was a single &lt;code&gt;.vimrc&lt;/code&gt; in the now-retired &lt;code&gt;myvim&lt;/code&gt; repository. The
replacement is a complete Lua-based Neovim project built on
&lt;a href=&quot;https://github.com/nvim-lua/kickstart.nvim&quot;&gt;kickstart.nvim&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The current setup includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lazy.nvim&lt;/code&gt; for plugin management and Mason for language tools.&lt;/li&gt;
&lt;li&gt;LSP features, diagnostics, formatting, completion, and snippets.&lt;/li&gt;
&lt;li&gt;Snacks and Oil for project search, file navigation, and an explorer.&lt;/li&gt;
&lt;li&gt;WhichKey for discovering shortcuts as you learn the configuration.&lt;/li&gt;
&lt;li&gt;Bufferline, Trouble, Aerial, Undotree, and an integrated terminal.&lt;/li&gt;
&lt;li&gt;Markdown image pasting, linting, and distraction-free writing tools.&lt;/li&gt;
&lt;li&gt;Optional GitHub Copilot completion and Copilot Chat integration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The leader key is &lt;code&gt;Space&lt;/code&gt;. Press it in Normal mode and wait for WhichKey to
show the available commands. A few shortcuts I use constantly are:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;ff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Find files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;fg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search text across the project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;fe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open the file explorer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;&amp;lt;leader&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Switch between open buffers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;f&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Format the current buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;xx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open project diagnostics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open the persistent undo history&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The complete keymap, plugin, dependency, and troubleshooting reference lives in
the project&apos;s
&lt;a href=&quot;https://github.com/ChrisTitusTech/neovim/blob/main/titus-kickstart/GUIDE.md&quot;&gt;configuration guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Install my Neovim configuration&lt;/h2&gt;
&lt;p&gt;The project supports Neovim 0.10 or newer and expects Git, a Nerd Font, and a
few command-line dependencies. Clone the repository to a normal project
directory so its dependency script can link the actual configuration into
place.&lt;/p&gt;
&lt;p&gt;On Linux:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/neovim ~/neovim
cd ~/neovim
bash lin-depend.sh
nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On Windows, run the equivalent repair script from PowerShell:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;git clone https://github.com/ChrisTitusTech/neovim &quot;$HOME\neovim&quot;
Set-Location &quot;$HOME\neovim&quot;
.\win-depend.ps1
nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The repair scripts install or check the supporting tools and point Neovim at
the &lt;code&gt;titus-kickstart&lt;/code&gt; configuration. They leave an existing non-symlink config
directory untouched, so rename your current Neovim config first if you want to
switch to this setup.&lt;/p&gt;
&lt;p&gt;On first launch, &lt;code&gt;lazy.nvim&lt;/code&gt; installs the plugins. After startup, use these
commands to verify the environment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:checkhealth&lt;/code&gt; checks Neovim and provider health.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:Lazy&lt;/code&gt; opens the plugin manager.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:Mason&lt;/code&gt; opens the language server and tool manager.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:LspInfo&lt;/code&gt; shows the language servers attached to the current buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Make it your own&lt;/h2&gt;
&lt;p&gt;Use my project as a starting point, not a configuration you are never allowed
to touch. Options and core startup behavior live in
&lt;code&gt;titus-kickstart/init.lua&lt;/code&gt;, while the plugin configuration is split into files
under &lt;code&gt;titus-kickstart/plugin/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Change the mappings, theme, formatters, and language servers around the work
you actually do. That is the real advantage of Neovim: the editor can grow
with your workflow without forcing you into somebody else&apos;s idea of an IDE.&lt;/p&gt;
&lt;p&gt;For the most recent overview of where I have taken the project, read
&lt;a href=&quot;/neovim-the-elite-editor/&quot;&gt;Neovim the Elite Editor&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Walkthrough video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/NYSYiiqk8SY&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Fri, 14 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Neovim is one of the most powerful, but often misunderstood, editors in
existence. Let&apos;s approach it from a beginner&apos;s perspective and show why it is
now my editor of choice.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This article originally covered Vim and my old &lt;code&gt;myvim&lt;/code&gt; configuration. I no
longer use Vim, and the &lt;code&gt;myvim&lt;/code&gt; project has been retired. I have moved to
Neovim, and my active configuration is the
&lt;a href=&quot;https://github.com/ChrisTitusTech/neovim&quot;&gt;ChrisTitusTech/neovim&lt;/a&gt; project. For
the latest deep dive into that setup, see
&lt;a href=&quot;/neovim-the-elite-editor/&quot;&gt;Neovim the Elite Editor&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Why Neovim?&lt;/h2&gt;
&lt;p&gt;There is a lot to learn about Neovim, but the first question is usually: why
not just use VS Code or IntelliJ?&lt;/p&gt;
&lt;p&gt;Those editors offer an easy starting point, excellent debugging, and huge
extension ecosystems. Neovim takes a different approach. It gives you the
speed and keyboard-driven editing model of Vim, then adds a modern Lua
configuration system, built-in language server support, and a plugin ecosystem
that can turn it into a focused development environment.&lt;/p&gt;
&lt;p&gt;An experienced Neovim user can move through a project, search files, refactor
code, and operate several tools without reaching for the mouse. If you want to
see that editing style pushed to its limits, watch
&lt;a href=&quot;https://www.youtube.com/c/ThePrimeagen/videos&quot;&gt;ThePrimeagen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The tradeoff is the learning curve. Neovim is not something you completely
master in a weekend. It takes time to build the motions into muscle memory, but
the payoff is worth it when editing starts to feel immediate instead of being
a series of menus and mouse movements.&lt;/p&gt;
&lt;h2&gt;Learn the Vim fundamentals&lt;/h2&gt;
&lt;p&gt;Neovim uses the same modal editing model and motions that made Vim so
effective. The first thing to understand is its modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Normal mode&lt;/strong&gt; - The default mode. Use it for movement, commands, and editing
operations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insert mode&lt;/strong&gt; - Press &lt;code&gt;i&lt;/code&gt; to enter text.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual mode&lt;/strong&gt; - Press &lt;code&gt;v&lt;/code&gt; to select text and then run an operation on the
selection.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Press &lt;code&gt;Esc&lt;/code&gt; to return to Normal mode from Insert or Visual mode. My
configuration also maps &lt;code&gt;jj&lt;/code&gt; in Insert mode as a faster escape.&lt;/p&gt;
&lt;p&gt;The running joke is that nobody knows how to exit Vim. The same commands work
in Neovim:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Save and quit with &lt;code&gt;:wq&lt;/code&gt;, &lt;code&gt;:x&lt;/code&gt;, or &lt;code&gt;ZZ&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Quit without saving with &lt;code&gt;:q!&lt;/code&gt; or &lt;code&gt;ZQ&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The important idea is still:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If something feels slow in Neovim, there is probably a faster way to do it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Useful Vim motion cheatsheets still apply to Neovim:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devhints.io/vim&quot;&gt;https://devhints.io/vim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vim.rtorr.com/&quot;&gt;https://vim.rtorr.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1577690702200590336&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Practice before you customize&lt;/h2&gt;
&lt;p&gt;Run &lt;code&gt;:Tutor&lt;/code&gt; inside Neovim and work through it repeatedly. Treat it like a
speedrun: finish it, repeat it, and try to rely less on the hints each time.
That repetition is how the motions stop being individual keys and become
muscle memory.&lt;/p&gt;
&lt;p&gt;Move as much of your real workflow into Neovim as you comfortably can. At the
same time, do not blindly copy every keymap from somebody else&apos;s config. A
configuration should reduce friction in your own work.&lt;/p&gt;
&lt;h2&gt;My current Neovim project&lt;/h2&gt;
&lt;p&gt;My old setup was a single &lt;code&gt;.vimrc&lt;/code&gt; in the now-retired &lt;code&gt;myvim&lt;/code&gt; repository. The
replacement is a complete Lua-based Neovim project built on
&lt;a href=&quot;https://github.com/nvim-lua/kickstart.nvim&quot;&gt;kickstart.nvim&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The current setup includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lazy.nvim&lt;/code&gt; for plugin management and Mason for language tools.&lt;/li&gt;
&lt;li&gt;LSP features, diagnostics, formatting, completion, and snippets.&lt;/li&gt;
&lt;li&gt;Snacks and Oil for project search, file navigation, and an explorer.&lt;/li&gt;
&lt;li&gt;WhichKey for discovering shortcuts as you learn the configuration.&lt;/li&gt;
&lt;li&gt;Bufferline, Trouble, Aerial, Undotree, and an integrated terminal.&lt;/li&gt;
&lt;li&gt;Markdown image pasting, linting, and distraction-free writing tools.&lt;/li&gt;
&lt;li&gt;Optional GitHub Copilot completion and Copilot Chat integration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The leader key is &lt;code&gt;Space&lt;/code&gt;. Press it in Normal mode and wait for WhichKey to
show the available commands. A few shortcuts I use constantly are:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;ff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Find files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;fg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search text across the project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;fe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open the file explorer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;&amp;lt;leader&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Switch between open buffers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;f&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Format the current buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;xx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open project diagnostics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open the persistent undo history&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The complete keymap, plugin, dependency, and troubleshooting reference lives in
the project&apos;s
&lt;a href=&quot;https://github.com/ChrisTitusTech/neovim/blob/main/titus-kickstart/GUIDE.md&quot;&gt;configuration guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Install my Neovim configuration&lt;/h2&gt;
&lt;p&gt;The project supports Neovim 0.10 or newer and expects Git, a Nerd Font, and a
few command-line dependencies. Clone the repository to a normal project
directory so its dependency script can link the actual configuration into
place.&lt;/p&gt;
&lt;p&gt;On Linux:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/neovim ~/neovim
cd ~/neovim
bash lin-depend.sh
nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On Windows, run the equivalent repair script from PowerShell:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;git clone https://github.com/ChrisTitusTech/neovim &quot;$HOME\neovim&quot;
Set-Location &quot;$HOME\neovim&quot;
.\win-depend.ps1
nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The repair scripts install or check the supporting tools and point Neovim at
the &lt;code&gt;titus-kickstart&lt;/code&gt; configuration. They leave an existing non-symlink config
directory untouched, so rename your current Neovim config first if you want to
switch to this setup.&lt;/p&gt;
&lt;p&gt;On first launch, &lt;code&gt;lazy.nvim&lt;/code&gt; installs the plugins. After startup, use these
commands to verify the environment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:checkhealth&lt;/code&gt; checks Neovim and provider health.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:Lazy&lt;/code&gt; opens the plugin manager.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:Mason&lt;/code&gt; opens the language server and tool manager.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:LspInfo&lt;/code&gt; shows the language servers attached to the current buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Make it your own&lt;/h2&gt;
&lt;p&gt;Use my project as a starting point, not a configuration you are never allowed
to touch. Options and core startup behavior live in
&lt;code&gt;titus-kickstart/init.lua&lt;/code&gt;, while the plugin configuration is split into files
under &lt;code&gt;titus-kickstart/plugin/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Change the mappings, theme, formatters, and language servers around the work
you actually do. That is the real advantage of Neovim: the editor can grow
with your workflow without forcing you into somebody else&apos;s idea of an IDE.&lt;/p&gt;
&lt;p&gt;For the most recent overview of where I have taken the project, read
&lt;a href=&quot;/neovim-the-elite-editor/&quot;&gt;Neovim the Elite Editor&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Walkthrough video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/NYSYiiqk8SY&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Macos on Linux</title><link>https://christitus.com/macos-on-linux/</link><guid isPermaLink="true">https://christitus.com/macos-on-linux/</guid><description>&lt;p&gt;This shows you all the steps to install a MacOS VM in Linux QEMU using Virtual Machine Manager or virt-manager.&lt;/p&gt;

&lt;p&gt;Newer Source, but not as polished: &lt;a href=&quot;https://github.com/kholia/OSX-KVM&quot;&gt;https://github.com/kholia/OSX-KVM&lt;/a&gt;
Mac KVM Repository: &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A modern Linux distribution. E.g. Ubuntu 20.04 LTS 64-bit or later.&lt;/li&gt;
&lt;li&gt;QEMU &amp;gt;= 4.2.0&lt;/li&gt;
&lt;li&gt;A CPU with Intel VT-x / AMD SVM support is required (&lt;code&gt;grep -e vmx -e svm /proc/cpuinfo&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation Preparation&lt;/h2&gt;
&lt;p&gt;Install QEMU and modify your user using &lt;a href=&quot;https://christitus.com/vm-setup-in-linux&quot;&gt;https://christitus.com/vm-setup-in-linux&lt;/a&gt; Guide.&lt;/p&gt;
&lt;p&gt;Clone this repository on your QEMU system. Files from this repository are used in the following steps.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~
git clone --depth 1 --recursive https://github.com/foxlet/macOS-Simple-KVM
cd macOS-Simple-KVM
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Installation Media&lt;/h2&gt;
&lt;p&gt;This downloads our installation media and I&apos;d recommend using Catalina for compatibility and performance.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./jumpstart.sh --catalina
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Modern NVIDIA GPUs are supported on HighSierra but not on later
versions of macOS. Recommended PCI Passthrough GPU is 5700XT as this works on Catalina and above. If you go with a 6000 Series Card only certain ones will work on Big Sur and Monterey, but not earlier releases.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Virtual Machine Setup&lt;/h2&gt;
&lt;p&gt;I recommend using Virtual Machine Manager (virt-manager) as it has a fantastic interface and Simple-KVM does a great job with their setup script. Simply type the following to get the macOS VM setup:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ./make.sh --add
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;VM Modification&lt;/h3&gt;
&lt;p&gt;Before we can start out VM we have to have a hard drive to load it. You have two options: physical hard drive passthrough or qcow2 file.&lt;/p&gt;
&lt;p&gt;Obviously, the physical drive is considerably faster, but not possible in some instances such as laptops or if you can&apos;t afford a secondary drive.&lt;/p&gt;
&lt;h4&gt;Physical Hard Drive Passthrough&lt;/h4&gt;
&lt;p&gt;This is pretty simple as you just click Add Hardware -&amp;gt; Storage and then specify your hard drive.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/qemu/hdd.webp&quot; alt=&quot;hdd&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: while you can use drive short names &lt;code&gt;/dev/sda&lt;/code&gt; I&apos;d recommend using &lt;code&gt;/dev/disk/by-id/HARDDRIVESERIAL&lt;/code&gt; as this doesn&apos;t ever change.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;QCOW2 File for Hard Drive&lt;/h4&gt;
&lt;p&gt;This is even simpler as you just click Add Hardware -&amp;gt; Storage and create new file. Just make sure you put it on at least a SSD or a nvme drive as it will be super slow if you don&apos;t.&lt;/p&gt;
&lt;h2&gt;Install Process&lt;/h2&gt;
&lt;p&gt;Boot your machine and select the OS Install Partition on startup.&lt;/p&gt;
&lt;p&gt;Use the &lt;code&gt;Disk Utility&lt;/code&gt; tool within the macOS installer to partition, and
format the virtual disk attached to the macOS VM.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TIP: Using a non-APFS filesystem is recommended.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Go ahead, and install macOS&lt;/p&gt;
&lt;h3&gt;Post-Installation&lt;/h3&gt;
&lt;h4&gt;Bridge Networking&lt;/h4&gt;
&lt;p&gt;*First_ find your card interface name&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ip a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Example: (Interface name is enp7s0)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp7s0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 24:bb:ee:55:22:33 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.99/24 brd 10.0.0.255 scope global
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Second&lt;/em&gt; Update &lt;code&gt;/etc/network/interfaces&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source /etc/network/interfaces.d/*
 
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface - old entry
# allow-hotplug enp7s0
# iface enp7s0 inet dhcp

# The primary network interface - new entry
# DEVICENAME = enp7so for this pc and MYUSERNAME need to be $(whoami)
auto br0
iface br0 inet dhcp
  bridge_ports DEVICENAME tap0

auto tap0
iface tap0 inet dhcp
  pre-up tunctl -u MYUSERNAME -t tap0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Lastly&lt;/em&gt; Restart the networking service or reboot computer. Then change your VM NIC (Network Hardware) to &lt;code&gt;br0&lt;/code&gt; interface.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl restart networking
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Other Considerations&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;GPU Passthrough (Requires two Graphics Cards) - &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-passthrough.md&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-passthrough.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Changing Screen Resolution - &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-screen-resolution.md&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-screen-resolution.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Optimizing System Performance - &lt;a href=&quot;https://github.com/sickcodes/osx-optimizer&quot;&gt;https://github.com/sickcodes/osx-optimizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sound - Two methods, Pass the audio through HDMI if using GPU Passthrough OR Pass through a USB sound card that is macOS compatible
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Note: There is a way to use Voodoo kext or AppleALC, but it will crackle and sound terrible&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/dMLNP6FfhkI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Mon, 03 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This shows you all the steps to install a MacOS VM in Linux QEMU using Virtual Machine Manager or virt-manager.&lt;/p&gt;

&lt;p&gt;Newer Source, but not as polished: &lt;a href=&quot;https://github.com/kholia/OSX-KVM&quot;&gt;https://github.com/kholia/OSX-KVM&lt;/a&gt;
Mac KVM Repository: &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A modern Linux distribution. E.g. Ubuntu 20.04 LTS 64-bit or later.&lt;/li&gt;
&lt;li&gt;QEMU &amp;gt;= 4.2.0&lt;/li&gt;
&lt;li&gt;A CPU with Intel VT-x / AMD SVM support is required (&lt;code&gt;grep -e vmx -e svm /proc/cpuinfo&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation Preparation&lt;/h2&gt;
&lt;p&gt;Install QEMU and modify your user using &lt;a href=&quot;https://christitus.com/vm-setup-in-linux&quot;&gt;https://christitus.com/vm-setup-in-linux&lt;/a&gt; Guide.&lt;/p&gt;
&lt;p&gt;Clone this repository on your QEMU system. Files from this repository are used in the following steps.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~
git clone --depth 1 --recursive https://github.com/foxlet/macOS-Simple-KVM
cd macOS-Simple-KVM
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Installation Media&lt;/h2&gt;
&lt;p&gt;This downloads our installation media and I&apos;d recommend using Catalina for compatibility and performance.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./jumpstart.sh --catalina
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Modern NVIDIA GPUs are supported on HighSierra but not on later
versions of macOS. Recommended PCI Passthrough GPU is 5700XT as this works on Catalina and above. If you go with a 6000 Series Card only certain ones will work on Big Sur and Monterey, but not earlier releases.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Virtual Machine Setup&lt;/h2&gt;
&lt;p&gt;I recommend using Virtual Machine Manager (virt-manager) as it has a fantastic interface and Simple-KVM does a great job with their setup script. Simply type the following to get the macOS VM setup:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ./make.sh --add
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;VM Modification&lt;/h3&gt;
&lt;p&gt;Before we can start out VM we have to have a hard drive to load it. You have two options: physical hard drive passthrough or qcow2 file.&lt;/p&gt;
&lt;p&gt;Obviously, the physical drive is considerably faster, but not possible in some instances such as laptops or if you can&apos;t afford a secondary drive.&lt;/p&gt;
&lt;h4&gt;Physical Hard Drive Passthrough&lt;/h4&gt;
&lt;p&gt;This is pretty simple as you just click Add Hardware -&amp;gt; Storage and then specify your hard drive.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/qemu/hdd.webp&quot; alt=&quot;hdd&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: while you can use drive short names &lt;code&gt;/dev/sda&lt;/code&gt; I&apos;d recommend using &lt;code&gt;/dev/disk/by-id/HARDDRIVESERIAL&lt;/code&gt; as this doesn&apos;t ever change.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;QCOW2 File for Hard Drive&lt;/h4&gt;
&lt;p&gt;This is even simpler as you just click Add Hardware -&amp;gt; Storage and create new file. Just make sure you put it on at least a SSD or a nvme drive as it will be super slow if you don&apos;t.&lt;/p&gt;
&lt;h2&gt;Install Process&lt;/h2&gt;
&lt;p&gt;Boot your machine and select the OS Install Partition on startup.&lt;/p&gt;
&lt;p&gt;Use the &lt;code&gt;Disk Utility&lt;/code&gt; tool within the macOS installer to partition, and
format the virtual disk attached to the macOS VM.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TIP: Using a non-APFS filesystem is recommended.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Go ahead, and install macOS&lt;/p&gt;
&lt;h3&gt;Post-Installation&lt;/h3&gt;
&lt;h4&gt;Bridge Networking&lt;/h4&gt;
&lt;p&gt;*First_ find your card interface name&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ip a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Example: (Interface name is enp7s0)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp7s0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 24:bb:ee:55:22:33 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.99/24 brd 10.0.0.255 scope global
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Second&lt;/em&gt; Update &lt;code&gt;/etc/network/interfaces&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source /etc/network/interfaces.d/*
 
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface - old entry
# allow-hotplug enp7s0
# iface enp7s0 inet dhcp

# The primary network interface - new entry
# DEVICENAME = enp7so for this pc and MYUSERNAME need to be $(whoami)
auto br0
iface br0 inet dhcp
  bridge_ports DEVICENAME tap0

auto tap0
iface tap0 inet dhcp
  pre-up tunctl -u MYUSERNAME -t tap0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Lastly&lt;/em&gt; Restart the networking service or reboot computer. Then change your VM NIC (Network Hardware) to &lt;code&gt;br0&lt;/code&gt; interface.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl restart networking
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Other Considerations&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;GPU Passthrough (Requires two Graphics Cards) - &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-passthrough.md&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-passthrough.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Changing Screen Resolution - &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-screen-resolution.md&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-screen-resolution.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Optimizing System Performance - &lt;a href=&quot;https://github.com/sickcodes/osx-optimizer&quot;&gt;https://github.com/sickcodes/osx-optimizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sound - Two methods, Pass the audio through HDMI if using GPU Passthrough OR Pass through a USB sound card that is macOS compatible
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Note: There is a way to use Voodoo kext or AppleALC, but it will crackle and sound terrible&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/dMLNP6FfhkI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Be a Better Programmer</title><link>https://christitus.com/be-a-better-programmer/</link><guid isPermaLink="true">https://christitus.com/be-a-better-programmer/</guid><description>&lt;p&gt;Many people want to be a programmer, but often find themselves flailing around in the dark. These are the things I&apos;ve done to help aid myself in coding more, learning new things, and just becoming a better programmer.&lt;/p&gt;

&lt;h2&gt;Use GitHub DAILY&lt;/h2&gt;
&lt;p&gt;Ok, maybe you don&apos;t have to use GitHub specifically but choose a platform or host your own git and use it as much as you can. Finish a feature or part of a project... COMMIT IT! This makes it very easy when you leave and come back to the project.&lt;/p&gt;
&lt;p&gt;Collaborators can find your project and contribute or even fix errors you have made, which helps you improve quickly.&lt;/p&gt;
&lt;h2&gt;Track Your Progress&lt;/h2&gt;
&lt;p&gt;I&apos;m constantly bouncing around and when I started I was getting discouraged. I&apos;d start a project, move on or get busy, and not look at it again or even code for weeks!&lt;/p&gt;
&lt;p&gt;To fix this, I ended up using a free tool called wakatime. This showed me what projects I was spending time on, editors I used, languages, and spit it all out on a dashboard.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/wakatime.webp&quot; alt=&quot;wakatime&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Check out my GitHub page @ &lt;a href=&quot;https://github.com/christitustech&quot;&gt;https://github.com/christitustech&lt;/a&gt; for all my stats and share yours down below in the comments! I am extremely competitive and I code more knowing I have people watching my progress.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: As a bonus, check out my hidden profile readme @ &lt;a href=&quot;https://github.com/christitustech/christitustech&quot;&gt;https://github.com/christitustech/christitustech&lt;/a&gt; and steal my auto generated setup!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Setup Your Ideal Workflow&lt;/h2&gt;
&lt;p&gt;You have to like your work or at least enjoy parts of it. I follow this phrase and make sure I find something I do daily that I enjoy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Focus on the Journey, not the destination. Joy is not found in finishing an activity, but doing it!&quot; - Greg Anderson&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&apos;s not to say that you will enjoy everything, because on the flip side of that phrase I made my own.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;You have to shovel a little shit in every job&quot; - Chris Titus&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The point being is there will be things you will hate, but just make sure it&apos;s not all bad. For example, I love VIM as it makes me just feel cool even though sometimes I am slower than if I just used VSCODE with the proper extension. The reason I do this is because of two reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Eventually I will optimize VIM enough that I&apos;m faster than VSCODE&lt;/li&gt;
&lt;li&gt;I just feel awesome typing and coding in VIM&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This isn&apos;t a advertisement for you to use VIM! In fact, I&apos;d recommend you NOT use VIM unless these things interest you and you want to go down that rabbit hole. It depends on you!&lt;/p&gt;
&lt;p&gt;Focus on what works for you and what you enjoy as far as an environment. This is more about how you &lt;em&gt;FEEL&lt;/em&gt; than practical application. The better you feel in your workflow, the better your work product!&lt;/p&gt;
&lt;h2&gt;Set Goals&lt;/h2&gt;
&lt;p&gt;If you are going to improve in anything you need to have a goal. For me it is all about putting in the time consistently. That is true with everything in life that you go to learn. &lt;strong&gt;MORE TIME = BETTER RESULTS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Example Goals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 hours of coding per day&lt;/li&gt;
&lt;li&gt;500 Git Contributions in 2022&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once you set these goals look at how you are doing. I recommend both short term and long term goals like I listed above.&lt;/p&gt;
&lt;p&gt;Now, go code!&lt;/p&gt;
</description><pubDate>Fri, 30 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Many people want to be a programmer, but often find themselves flailing around in the dark. These are the things I&apos;ve done to help aid myself in coding more, learning new things, and just becoming a better programmer.&lt;/p&gt;

&lt;h2&gt;Use GitHub DAILY&lt;/h2&gt;
&lt;p&gt;Ok, maybe you don&apos;t have to use GitHub specifically but choose a platform or host your own git and use it as much as you can. Finish a feature or part of a project... COMMIT IT! This makes it very easy when you leave and come back to the project.&lt;/p&gt;
&lt;p&gt;Collaborators can find your project and contribute or even fix errors you have made, which helps you improve quickly.&lt;/p&gt;
&lt;h2&gt;Track Your Progress&lt;/h2&gt;
&lt;p&gt;I&apos;m constantly bouncing around and when I started I was getting discouraged. I&apos;d start a project, move on or get busy, and not look at it again or even code for weeks!&lt;/p&gt;
&lt;p&gt;To fix this, I ended up using a free tool called wakatime. This showed me what projects I was spending time on, editors I used, languages, and spit it all out on a dashboard.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/wakatime.webp&quot; alt=&quot;wakatime&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Check out my GitHub page @ &lt;a href=&quot;https://github.com/christitustech&quot;&gt;https://github.com/christitustech&lt;/a&gt; for all my stats and share yours down below in the comments! I am extremely competitive and I code more knowing I have people watching my progress.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: As a bonus, check out my hidden profile readme @ &lt;a href=&quot;https://github.com/christitustech/christitustech&quot;&gt;https://github.com/christitustech/christitustech&lt;/a&gt; and steal my auto generated setup!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Setup Your Ideal Workflow&lt;/h2&gt;
&lt;p&gt;You have to like your work or at least enjoy parts of it. I follow this phrase and make sure I find something I do daily that I enjoy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Focus on the Journey, not the destination. Joy is not found in finishing an activity, but doing it!&quot; - Greg Anderson&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&apos;s not to say that you will enjoy everything, because on the flip side of that phrase I made my own.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;You have to shovel a little shit in every job&quot; - Chris Titus&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The point being is there will be things you will hate, but just make sure it&apos;s not all bad. For example, I love VIM as it makes me just feel cool even though sometimes I am slower than if I just used VSCODE with the proper extension. The reason I do this is because of two reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Eventually I will optimize VIM enough that I&apos;m faster than VSCODE&lt;/li&gt;
&lt;li&gt;I just feel awesome typing and coding in VIM&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This isn&apos;t a advertisement for you to use VIM! In fact, I&apos;d recommend you NOT use VIM unless these things interest you and you want to go down that rabbit hole. It depends on you!&lt;/p&gt;
&lt;p&gt;Focus on what works for you and what you enjoy as far as an environment. This is more about how you &lt;em&gt;FEEL&lt;/em&gt; than practical application. The better you feel in your workflow, the better your work product!&lt;/p&gt;
&lt;h2&gt;Set Goals&lt;/h2&gt;
&lt;p&gt;If you are going to improve in anything you need to have a goal. For me it is all about putting in the time consistently. That is true with everything in life that you go to learn. &lt;strong&gt;MORE TIME = BETTER RESULTS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Example Goals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 hours of coding per day&lt;/li&gt;
&lt;li&gt;500 Git Contributions in 2022&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once you set these goals look at how you are doing. I recommend both short term and long term goals like I listed above.&lt;/p&gt;
&lt;p&gt;Now, go code!&lt;/p&gt;
</content:encoded></item><item><title>You are using GitHub WRONG!</title><link>https://christitus.com/using-github-correctly/</link><guid isPermaLink="true">https://christitus.com/using-github-correctly/</guid><description>&lt;p&gt;GitHub is an incredible powerful tool, but using it in command line can be frustrating. So instead of doing something dumb like using SSH agent workarounds or Token exporting shenanigans to make &lt;code&gt;git&lt;/code&gt; work in command line. We are going to use an amazing utility called &lt;code&gt;gh&lt;/code&gt; to authenticate. &lt;/p&gt;
&lt;p&gt;Now before we continue, you might be thinking, I can just use password authentication. Well, Here is the error you get if you try that non-sense.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Support for password authentication was removed on August 13, 2021. 
Please use a personal access token instead.
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;GH Overview&lt;/h2&gt;
&lt;p&gt;This utility was created by GitHub directly to manage authentication and has a lot of fantastic features. So lets dive in...&lt;/p&gt;
&lt;h3&gt;Install GH&lt;/h3&gt;
&lt;p&gt;Debian Linux&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install gh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;winget install -e GitHub.cli
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mac&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install gh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;First Time Setup&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gh auth login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Follow all the prompts and I&apos;d recommend setting SSH as auth method.&lt;/p&gt;
&lt;h3&gt;Set CLI to use SSH&lt;/h3&gt;
&lt;p&gt;If you forgot to set the protocol during the setup in &lt;code&gt;gh auth login&lt;/code&gt; use this command to set it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gh config set -h github.com git_protocol ssh
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Set the Repo to use GH auth&lt;/h4&gt;
&lt;p&gt;Set the project repository for SSH auth&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote set-url origin git@github.com:ChrisTitusTech/project.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using GitHub Desktop&lt;/h2&gt;
&lt;p&gt;There is nothing wrong with GitHub desktop and sometimes I use it when I&apos;m reviewing my commits or pushes. It is a great graphical representation of how fetch/pull or commit/push work on GitHub. However, it is considerably slower, than just typing it in via terminal with a simple git push or git pull. This also blurs the lines between &lt;code&gt;git add .&lt;/code&gt;, &lt;code&gt;git commit -a -m &quot;message&quot;&lt;/code&gt;, and &lt;code&gt;git push&lt;/code&gt; when adding to a project.&lt;/p&gt;
&lt;h2&gt;Using GitHub properly&lt;/h2&gt;
&lt;p&gt;If you are anything like me, when I started using GitHub I did so many things incorrectly and still do today! However, I&apos;m slowly seeing the error of my ways and these are the big things I missed.&lt;/p&gt;
&lt;h3&gt;Not combining git add, commit, and push&lt;/h3&gt;
&lt;p&gt;When I first started these three commands seemed like they all pretty much did the same thing. I JUST WANT TO ADD TO MY PROJECT! Why is it like this?&lt;/p&gt;
&lt;p&gt;Then I started doing some collaborative work and realized I&apos;m terrible and most other people are too on GitHub, because we are all doing it WRONG!&lt;/p&gt;
&lt;p&gt;So how should we be using &lt;code&gt;git&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;COMMIT OFTEN and after every change in code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This should be everyone mantra, including me, but often I get caught up in my work and don&apos;t do it. So what is the big deal? Well, if you bundle a ton of different changes into one commit... you have to revert ALL those changes if you had one bad one. Breaking those up into different commits, you could just revert the bad code. That can literally save a project! I learned this when I bundled a ton of changes into my ArchTitus project and basically turned it into a spaghetti string of code that I hate looking at and debugging. To continue that project, I&apos;d have to rebase and wipe out a ton of progress I&apos;ve made and other people have contributed. This makes everyone mad and is simply not fun.&lt;/p&gt;
&lt;p&gt;So follow that golden rule and realize you will fail at it, but realize your failures and do better the next time is how we elevate ourselves to the next level.&lt;/p&gt;
&lt;h3&gt;Quick Aliases&lt;/h3&gt;
&lt;p&gt;These are some quality of life improvements that will make using git from command line so much better.&lt;/p&gt;
&lt;p&gt;I use bashrc these days and these are some aliases I added to my &lt;code&gt;~/.bashrc&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcom() {
 git add .
 git commit -m &quot;$1&quot;
 }
lazyg() {
 git add .
 git commit -m &quot;$1&quot;
 git push
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now in a perfect world I would be using &lt;code&gt;gcom &quot;commit message&quot;&lt;/code&gt; several times a day and then finally using &lt;code&gt;lazyg &quot;last commit of the day&quot;&lt;/code&gt; to push my changes public after I&apos;m done. However, the world and myself are far from perfect, but understanding what perfection would look like will help you know when you aren&apos;t.&lt;/p&gt;
&lt;h3&gt;Helping Projects&lt;/h3&gt;
&lt;p&gt;A poorly documented issue is pointless and just gets closed in every project. Don&apos;t be that person! Document what you can and if you noticed a recent commit messed something up reference it by doing a copy paste of the Pull Request # like so. First, get to this screen by clicking &quot;## commits&quot; in top right of the project main page. Then copy the SHA from the &quot;bad&quot; commit.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/github/git-commits.webp&quot; alt=&quot;git-commit&quot; /&gt;&lt;/p&gt;
&lt;p&gt;From here, you simply make your issue and paste that long sha hash in where you want to reference it. Don&apos;t worry the numbers will be truncated and it will look awesome in the issue page.&lt;/p&gt;
&lt;p&gt;Also make sure you don&apos;t just put a WALL OF TEXT! Try to make your issue readable by breaking up your issue if it is more than several sentences long. This just makes it more readable and make it as concise as possible.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/f7xZivqLZxc&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Fri, 23 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;GitHub is an incredible powerful tool, but using it in command line can be frustrating. So instead of doing something dumb like using SSH agent workarounds or Token exporting shenanigans to make &lt;code&gt;git&lt;/code&gt; work in command line. We are going to use an amazing utility called &lt;code&gt;gh&lt;/code&gt; to authenticate. &lt;/p&gt;
&lt;p&gt;Now before we continue, you might be thinking, I can just use password authentication. Well, Here is the error you get if you try that non-sense.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Support for password authentication was removed on August 13, 2021. 
Please use a personal access token instead.
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;GH Overview&lt;/h2&gt;
&lt;p&gt;This utility was created by GitHub directly to manage authentication and has a lot of fantastic features. So lets dive in...&lt;/p&gt;
&lt;h3&gt;Install GH&lt;/h3&gt;
&lt;p&gt;Debian Linux&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install gh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;winget install -e GitHub.cli
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mac&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install gh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;First Time Setup&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gh auth login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Follow all the prompts and I&apos;d recommend setting SSH as auth method.&lt;/p&gt;
&lt;h3&gt;Set CLI to use SSH&lt;/h3&gt;
&lt;p&gt;If you forgot to set the protocol during the setup in &lt;code&gt;gh auth login&lt;/code&gt; use this command to set it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gh config set -h github.com git_protocol ssh
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Set the Repo to use GH auth&lt;/h4&gt;
&lt;p&gt;Set the project repository for SSH auth&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote set-url origin git@github.com:ChrisTitusTech/project.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using GitHub Desktop&lt;/h2&gt;
&lt;p&gt;There is nothing wrong with GitHub desktop and sometimes I use it when I&apos;m reviewing my commits or pushes. It is a great graphical representation of how fetch/pull or commit/push work on GitHub. However, it is considerably slower, than just typing it in via terminal with a simple git push or git pull. This also blurs the lines between &lt;code&gt;git add .&lt;/code&gt;, &lt;code&gt;git commit -a -m &quot;message&quot;&lt;/code&gt;, and &lt;code&gt;git push&lt;/code&gt; when adding to a project.&lt;/p&gt;
&lt;h2&gt;Using GitHub properly&lt;/h2&gt;
&lt;p&gt;If you are anything like me, when I started using GitHub I did so many things incorrectly and still do today! However, I&apos;m slowly seeing the error of my ways and these are the big things I missed.&lt;/p&gt;
&lt;h3&gt;Not combining git add, commit, and push&lt;/h3&gt;
&lt;p&gt;When I first started these three commands seemed like they all pretty much did the same thing. I JUST WANT TO ADD TO MY PROJECT! Why is it like this?&lt;/p&gt;
&lt;p&gt;Then I started doing some collaborative work and realized I&apos;m terrible and most other people are too on GitHub, because we are all doing it WRONG!&lt;/p&gt;
&lt;p&gt;So how should we be using &lt;code&gt;git&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;COMMIT OFTEN and after every change in code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This should be everyone mantra, including me, but often I get caught up in my work and don&apos;t do it. So what is the big deal? Well, if you bundle a ton of different changes into one commit... you have to revert ALL those changes if you had one bad one. Breaking those up into different commits, you could just revert the bad code. That can literally save a project! I learned this when I bundled a ton of changes into my ArchTitus project and basically turned it into a spaghetti string of code that I hate looking at and debugging. To continue that project, I&apos;d have to rebase and wipe out a ton of progress I&apos;ve made and other people have contributed. This makes everyone mad and is simply not fun.&lt;/p&gt;
&lt;p&gt;So follow that golden rule and realize you will fail at it, but realize your failures and do better the next time is how we elevate ourselves to the next level.&lt;/p&gt;
&lt;h3&gt;Quick Aliases&lt;/h3&gt;
&lt;p&gt;These are some quality of life improvements that will make using git from command line so much better.&lt;/p&gt;
&lt;p&gt;I use bashrc these days and these are some aliases I added to my &lt;code&gt;~/.bashrc&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcom() {
 git add .
 git commit -m &quot;$1&quot;
 }
lazyg() {
 git add .
 git commit -m &quot;$1&quot;
 git push
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now in a perfect world I would be using &lt;code&gt;gcom &quot;commit message&quot;&lt;/code&gt; several times a day and then finally using &lt;code&gt;lazyg &quot;last commit of the day&quot;&lt;/code&gt; to push my changes public after I&apos;m done. However, the world and myself are far from perfect, but understanding what perfection would look like will help you know when you aren&apos;t.&lt;/p&gt;
&lt;h3&gt;Helping Projects&lt;/h3&gt;
&lt;p&gt;A poorly documented issue is pointless and just gets closed in every project. Don&apos;t be that person! Document what you can and if you noticed a recent commit messed something up reference it by doing a copy paste of the Pull Request # like so. First, get to this screen by clicking &quot;## commits&quot; in top right of the project main page. Then copy the SHA from the &quot;bad&quot; commit.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/github/git-commits.webp&quot; alt=&quot;git-commit&quot; /&gt;&lt;/p&gt;
&lt;p&gt;From here, you simply make your issue and paste that long sha hash in where you want to reference it. Don&apos;t worry the numbers will be truncated and it will look awesome in the issue page.&lt;/p&gt;
&lt;p&gt;Also make sure you don&apos;t just put a WALL OF TEXT! Try to make your issue readable by breaking up your issue if it is more than several sentences long. This just makes it more readable and make it as concise as possible.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/f7xZivqLZxc&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Nix Package Manager</title><link>https://christitus.com/nix-package-manager/</link><guid isPermaLink="true">https://christitus.com/nix-package-manager/</guid><description>&lt;p&gt;This standalone package manager is absolutely stunning and I can&apos;t believe I&apos;m just now discovering it&apos;s true power.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1559232526094417921&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/NixOS/nix&quot;&gt;https://github.com/NixOS/nix&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -L https://nixos.org/nix/install | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I&apos;d recommend multi-user install if it prompts for it.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Finding Packages&lt;/h2&gt;
&lt;p&gt;I&apos;d recommend using their website to find packages to install, but make sure to click the &quot;unstable&quot; button has NixOS stable is a Linux Distribution few use.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://search.nixos.org/packages&quot;&gt;https://search.nixos.org/packages&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or from terminal you can list all packages with &lt;code&gt;nix-env -qaP&lt;/code&gt; then just grep what you are looking for. Example: &lt;code&gt;nix-env -qaP | grep hugo&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Usage&lt;/h2&gt;
&lt;p&gt;Here is the basic usage of nix, most revolve around the &lt;code&gt;nix-env&lt;/code&gt; command. These are manually managed and require user intervention&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;List Installed packages &lt;code&gt;nix-env -q&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Install Packages &lt;code&gt;nix-env -iA nixpkgs.packagename&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Erase Packages &lt;code&gt;nix-env -e packagename&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Update All Packages &lt;code&gt;nix-env -u&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Update Specific Packages &lt;code&gt;nix-env -u packagename&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Hold Specific Package &lt;code&gt;nix-env --set-flag keep true packagename&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List Backups (Generations) &lt;code&gt;nix-env --list-generations&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rollback to Last Backup &lt;code&gt;nix-env --rollback&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rollback to Specific Generation &lt;code&gt;nix-env --switch-generation #&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Help and Manual&lt;/h2&gt;
&lt;p&gt;Read the &lt;a href=&quot;https://nixos.org/manual/nix/stable/&quot;&gt;official Nix manual&lt;/a&gt;. You can also get more details with &lt;code&gt;man nix&lt;/code&gt; or &lt;code&gt;man nix-env&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Troubleshooting&lt;/h2&gt;
&lt;h3&gt;Programs not showing up in start menu&lt;/h3&gt;
&lt;p&gt;NIX stores all the .desktop files for the programs it installs @ &lt;code&gt;/home/$USER/.nix-profile/share/applications/&lt;/code&gt; and a simple symlink will fix them not showing up in your start menu.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ln -s /home/$USER/.nix-profile/share/applications/* /home/$USER/.local/share/applications/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Ty8C2B910EI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Mon, 22 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This standalone package manager is absolutely stunning and I can&apos;t believe I&apos;m just now discovering it&apos;s true power.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1559232526094417921&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/NixOS/nix&quot;&gt;https://github.com/NixOS/nix&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -L https://nixos.org/nix/install | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I&apos;d recommend multi-user install if it prompts for it.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Finding Packages&lt;/h2&gt;
&lt;p&gt;I&apos;d recommend using their website to find packages to install, but make sure to click the &quot;unstable&quot; button has NixOS stable is a Linux Distribution few use.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://search.nixos.org/packages&quot;&gt;https://search.nixos.org/packages&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or from terminal you can list all packages with &lt;code&gt;nix-env -qaP&lt;/code&gt; then just grep what you are looking for. Example: &lt;code&gt;nix-env -qaP | grep hugo&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Usage&lt;/h2&gt;
&lt;p&gt;Here is the basic usage of nix, most revolve around the &lt;code&gt;nix-env&lt;/code&gt; command. These are manually managed and require user intervention&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;List Installed packages &lt;code&gt;nix-env -q&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Install Packages &lt;code&gt;nix-env -iA nixpkgs.packagename&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Erase Packages &lt;code&gt;nix-env -e packagename&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Update All Packages &lt;code&gt;nix-env -u&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Update Specific Packages &lt;code&gt;nix-env -u packagename&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Hold Specific Package &lt;code&gt;nix-env --set-flag keep true packagename&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List Backups (Generations) &lt;code&gt;nix-env --list-generations&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rollback to Last Backup &lt;code&gt;nix-env --rollback&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rollback to Specific Generation &lt;code&gt;nix-env --switch-generation #&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Help and Manual&lt;/h2&gt;
&lt;p&gt;Read the &lt;a href=&quot;https://nixos.org/manual/nix/stable/&quot;&gt;official Nix manual&lt;/a&gt;. You can also get more details with &lt;code&gt;man nix&lt;/code&gt; or &lt;code&gt;man nix-env&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Troubleshooting&lt;/h2&gt;
&lt;h3&gt;Programs not showing up in start menu&lt;/h3&gt;
&lt;p&gt;NIX stores all the .desktop files for the programs it installs @ &lt;code&gt;/home/$USER/.nix-profile/share/applications/&lt;/code&gt; and a simple symlink will fix them not showing up in your start menu.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ln -s /home/$USER/.nix-profile/share/applications/* /home/$USER/.local/share/applications/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Ty8C2B910EI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Best Package Manager</title><link>https://christitus.com/best-package-manager/</link><guid isPermaLink="true">https://christitus.com/best-package-manager/</guid><description>&lt;p&gt;Instead of using the built-in package manager in Linux or some container that never puts the programs files in a usable spot, we will use Homebrew!&lt;/p&gt;

&lt;p&gt;I know, it&apos;s an OS X package manager, but it works fantastic on Linux and solves MANY problems.&lt;/p&gt;
&lt;p&gt;Main issues it addresses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Older packages from stable Linux distributions&lt;/li&gt;
&lt;li&gt;Putting the installed packages in easy spots to reference them and modify them when needed.&lt;/li&gt;
&lt;li&gt;Using sudo can be dangerous and brew installs it to a home directory instead of systemwide without needing sudo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A good example of this. On Debian and Fedora the package HUGO is old... like really old. Anywhere between version .60 and .90 where home brew installs version .101-extended&lt;/p&gt;
&lt;h2&gt;Installing Homebrew&lt;/h2&gt;
&lt;h3&gt;Dependencies&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Debian or Ubuntu&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install build-essential procps curl file git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Fedora, CentOS, or Red Hat&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo yum groupinstall &apos;Development Tools&apos;
sudo yum install procps-ng curl file git
sudo yum install libxcrypt-compat # needed by Fedora 30 and up
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Install Script&lt;/h3&gt;
&lt;p&gt;One command to install it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Make brew available in terminal&lt;/h3&gt;
&lt;p&gt;By default homebrew puts itself in an easy to access directory. &lt;code&gt;/home/linuxbrew/.linuxbrew&lt;/code&gt; but there are a variety methods to use it from your prompt.&lt;/p&gt;
&lt;h4&gt;Official Method&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;test -d ~/.linuxbrew &amp;amp;&amp;amp; eval &quot;$(~/.linuxbrew/bin/brew shellenv)&quot;
test -d /home/linuxbrew/.linuxbrew &amp;amp;&amp;amp; eval &quot;$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)&quot;
test -r ~/.bash_profile &amp;amp;&amp;amp; echo &quot;eval \&quot;\$($(brew --prefix)/bin/brew shellenv)\&quot;&quot; &amp;gt;&amp;gt; ~/.bash_profile
echo &quot;eval \&quot;\$($(brew --prefix)/bin/brew shellenv)\&quot;&quot; &amp;gt;&amp;gt; ~/.profile
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;The .bashrc Method&lt;/h4&gt;
&lt;p&gt;Add the following line to &lt;code&gt;~/.bashrc&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;eval &quot;$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: if you use ZSH then the file you need to edit is &lt;code&gt;~/.zshrc&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Using Homebrew&lt;/h2&gt;
&lt;p&gt;With homebrew setup here are the commands I use almost daily&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install programname&lt;/code&gt; - Install programname using brew&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew search programname&lt;/code&gt; - Search for programname in brew&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew uninstall programname&lt;/code&gt; - Uninstall program&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew update&lt;/code&gt; - Updates brew&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew upgrade program&lt;/code&gt; - Updates just that one program&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew list&lt;/code&gt; - List programs in brew&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Get Lost? &lt;code&gt;man brew&lt;/code&gt; to look at all documentation in terminal or don&apos;t know what a program does? &lt;code&gt;brew info programname&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;That&apos;s it for the daily syntax&lt;/p&gt;
&lt;h2&gt;Understanding Homebrew terms&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;keg - Program binaries created from source&lt;/li&gt;
&lt;li&gt;bottle - Program binaries downloaded&lt;/li&gt;
&lt;li&gt;cellar - Directory where kegs / binaries are stored&lt;/li&gt;
&lt;li&gt;tap - git repository&lt;/li&gt;
&lt;li&gt;cask - mac os native binary (not used in Linux)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is other stuff to homebrew but read the full documentation if interested here &lt;a href=&quot;https://docs.brew.sh/Formula-Cookbook#homebrew-terminology&quot;&gt;https://docs.brew.sh/Formula-Cookbook#homebrew-terminology&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Basics of homebrew on Linux official documentation &lt;a href=&quot;https://docs.brew.sh/Homebrew-on-Linux&quot;&gt;https://docs.brew.sh/Homebrew-on-Linux&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/QsYEvnV-P34&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2&gt;Thank you Homebrew Team&lt;/h2&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1554153066823385089&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;</description><pubDate>Mon, 08 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Instead of using the built-in package manager in Linux or some container that never puts the programs files in a usable spot, we will use Homebrew!&lt;/p&gt;

&lt;p&gt;I know, it&apos;s an OS X package manager, but it works fantastic on Linux and solves MANY problems.&lt;/p&gt;
&lt;p&gt;Main issues it addresses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Older packages from stable Linux distributions&lt;/li&gt;
&lt;li&gt;Putting the installed packages in easy spots to reference them and modify them when needed.&lt;/li&gt;
&lt;li&gt;Using sudo can be dangerous and brew installs it to a home directory instead of systemwide without needing sudo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A good example of this. On Debian and Fedora the package HUGO is old... like really old. Anywhere between version .60 and .90 where home brew installs version .101-extended&lt;/p&gt;
&lt;h2&gt;Installing Homebrew&lt;/h2&gt;
&lt;h3&gt;Dependencies&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Debian or Ubuntu&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install build-essential procps curl file git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Fedora, CentOS, or Red Hat&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo yum groupinstall &apos;Development Tools&apos;
sudo yum install procps-ng curl file git
sudo yum install libxcrypt-compat # needed by Fedora 30 and up
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Install Script&lt;/h3&gt;
&lt;p&gt;One command to install it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Make brew available in terminal&lt;/h3&gt;
&lt;p&gt;By default homebrew puts itself in an easy to access directory. &lt;code&gt;/home/linuxbrew/.linuxbrew&lt;/code&gt; but there are a variety methods to use it from your prompt.&lt;/p&gt;
&lt;h4&gt;Official Method&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;test -d ~/.linuxbrew &amp;amp;&amp;amp; eval &quot;$(~/.linuxbrew/bin/brew shellenv)&quot;
test -d /home/linuxbrew/.linuxbrew &amp;amp;&amp;amp; eval &quot;$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)&quot;
test -r ~/.bash_profile &amp;amp;&amp;amp; echo &quot;eval \&quot;\$($(brew --prefix)/bin/brew shellenv)\&quot;&quot; &amp;gt;&amp;gt; ~/.bash_profile
echo &quot;eval \&quot;\$($(brew --prefix)/bin/brew shellenv)\&quot;&quot; &amp;gt;&amp;gt; ~/.profile
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;The .bashrc Method&lt;/h4&gt;
&lt;p&gt;Add the following line to &lt;code&gt;~/.bashrc&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;eval &quot;$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: if you use ZSH then the file you need to edit is &lt;code&gt;~/.zshrc&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Using Homebrew&lt;/h2&gt;
&lt;p&gt;With homebrew setup here are the commands I use almost daily&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install programname&lt;/code&gt; - Install programname using brew&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew search programname&lt;/code&gt; - Search for programname in brew&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew uninstall programname&lt;/code&gt; - Uninstall program&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew update&lt;/code&gt; - Updates brew&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew upgrade program&lt;/code&gt; - Updates just that one program&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew list&lt;/code&gt; - List programs in brew&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Get Lost? &lt;code&gt;man brew&lt;/code&gt; to look at all documentation in terminal or don&apos;t know what a program does? &lt;code&gt;brew info programname&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;That&apos;s it for the daily syntax&lt;/p&gt;
&lt;h2&gt;Understanding Homebrew terms&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;keg - Program binaries created from source&lt;/li&gt;
&lt;li&gt;bottle - Program binaries downloaded&lt;/li&gt;
&lt;li&gt;cellar - Directory where kegs / binaries are stored&lt;/li&gt;
&lt;li&gt;tap - git repository&lt;/li&gt;
&lt;li&gt;cask - mac os native binary (not used in Linux)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is other stuff to homebrew but read the full documentation if interested here &lt;a href=&quot;https://docs.brew.sh/Formula-Cookbook#homebrew-terminology&quot;&gt;https://docs.brew.sh/Formula-Cookbook#homebrew-terminology&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Basics of homebrew on Linux official documentation &lt;a href=&quot;https://docs.brew.sh/Homebrew-on-Linux&quot;&gt;https://docs.brew.sh/Homebrew-on-Linux&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/QsYEvnV-P34&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2&gt;Thank you Homebrew Team&lt;/h2&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1554153066823385089&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;</content:encoded></item><item><title>My Obsidian Setup</title><link>https://christitus.com/obsidian/</link><guid isPermaLink="true">https://christitus.com/obsidian/</guid><description>&lt;p&gt;Notes are vital to our productivity but often people either take too many notes or none at all. I sought to fix this by using a simplistic approach in the Obsidian app. I&apos;ve tried notion and a variety of other offerings that always fell flat. Let me show you how I set this app for maximum productivity.&lt;/p&gt;

&lt;h2&gt;Install Plugins&lt;/h2&gt;
&lt;p&gt;Open Obsidian Settings
&lt;img src=&quot;/images/2022/04-obsidian/plugins.webp&quot; alt=&quot;settings&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Template (Core)&lt;/li&gt;
&lt;li&gt;Kanban&lt;/li&gt;
&lt;li&gt;Dataview (Progress Bar)&lt;/li&gt;
&lt;li&gt;Homepage&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Template Core Plugin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Make Template folder in file view&lt;/li&gt;
&lt;li&gt;Set Template Folder under Template in Obsidian settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Kanban Plugin&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/04-obsidian/kanban-settings.webp&quot; alt=&quot;kanban settings&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Click on settings cog for your board&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;NOT the settings for the obsidian program&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Set your default template, Note folder to put new files in, and lane width.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/04-obsidian/kanban-settings2.webp&quot; alt=&quot;kanban settings2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: I recommend leaving 270 width for 1080p screens&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Homepage Plugin&lt;/h2&gt;
&lt;p&gt;Adds Home button and just makes it easy to always get back to your kanban to-do page. The homepage button my default will close all open notes and open the to-do or what ever note you specify. Here are my settings:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/04-obsidian/homepage.webp&quot; alt=&quot;homepage plugin&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Dataview Plugin&lt;/h2&gt;
&lt;p&gt;This is for progress bar, or if you want to do filters, tags, yaml headers, and other sorting techniques. It does WAY more than I use it for at the moment. Since I&apos;m limiting my notes to maybe 10-20 notes I don&apos;t need the other stuff, but it is there incase I expand. For now, I will use the following code in my templates to add a progress bar that tracks any checkboxes and how many are checked compared to total.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`=&quot;![progress](https://progress-bar.dev/&quot; + round(length(filter(this.file.tasks.completed, (t) =&amp;gt; t = true)) / length(this.file.tasks.text) * 100) + &quot;/)&quot;`
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Walkthrough Video&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/zGCv6aDDfP8&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Fri, 22 Apr 2022 13:32:54 GMT</pubDate><content:encoded>&lt;p&gt;Notes are vital to our productivity but often people either take too many notes or none at all. I sought to fix this by using a simplistic approach in the Obsidian app. I&apos;ve tried notion and a variety of other offerings that always fell flat. Let me show you how I set this app for maximum productivity.&lt;/p&gt;

&lt;h2&gt;Install Plugins&lt;/h2&gt;
&lt;p&gt;Open Obsidian Settings
&lt;img src=&quot;/images/2022/04-obsidian/plugins.webp&quot; alt=&quot;settings&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Template (Core)&lt;/li&gt;
&lt;li&gt;Kanban&lt;/li&gt;
&lt;li&gt;Dataview (Progress Bar)&lt;/li&gt;
&lt;li&gt;Homepage&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Template Core Plugin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Make Template folder in file view&lt;/li&gt;
&lt;li&gt;Set Template Folder under Template in Obsidian settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Kanban Plugin&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/04-obsidian/kanban-settings.webp&quot; alt=&quot;kanban settings&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Click on settings cog for your board&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;NOT the settings for the obsidian program&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Set your default template, Note folder to put new files in, and lane width.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/04-obsidian/kanban-settings2.webp&quot; alt=&quot;kanban settings2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: I recommend leaving 270 width for 1080p screens&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Homepage Plugin&lt;/h2&gt;
&lt;p&gt;Adds Home button and just makes it easy to always get back to your kanban to-do page. The homepage button my default will close all open notes and open the to-do or what ever note you specify. Here are my settings:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/04-obsidian/homepage.webp&quot; alt=&quot;homepage plugin&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Dataview Plugin&lt;/h2&gt;
&lt;p&gt;This is for progress bar, or if you want to do filters, tags, yaml headers, and other sorting techniques. It does WAY more than I use it for at the moment. Since I&apos;m limiting my notes to maybe 10-20 notes I don&apos;t need the other stuff, but it is there incase I expand. For now, I will use the following code in my templates to add a progress bar that tracks any checkboxes and how many are checked compared to total.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`=&quot;![progress](https://progress-bar.dev/&quot; + round(length(filter(this.file.tasks.completed, (t) =&amp;gt; t = true)) / length(this.file.tasks.text) * 100) + &quot;/)&quot;`
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Walkthrough Video&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/zGCv6aDDfP8&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Macos Sysadmin Tips</title><link>https://christitus.com/macos-sysadmin-tips/</link><guid isPermaLink="true">https://christitus.com/macos-sysadmin-tips/</guid><description>&lt;p&gt;This comes from a reader that was a Sysadmin and transitioned from Linux to MacOS because of a visual impairment. He choose macOS because of it&apos;s screen reader and shared all these tips, which I found extremely valuable. Thank you Nik for sharing! It felt only right to share his thoughtful email with a lot of explanations that are hard to find on the net.&lt;/p&gt;
&lt;h2&gt;launchd&lt;/h2&gt;
&lt;p&gt;Launchd is Darwin/MacOS’s init system. The init portion of systemd is heavily modeled after launchd, but unlike systemd, launchd isn’t a monolithic system manager but only an init system. It&apos;s a relatively simple design that follows the unix philosophy. Any further functionality is implemented by daemons that can be disabled with a launchd override plist.&lt;/p&gt;
&lt;p&gt;For info how to use launchd, check the man pages and read this document from the documentation archive: &lt;a href=&quot;https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html&quot;&gt;https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You might also want to take a look at the launchd source code for a deeper understanding.&lt;/p&gt;
&lt;p&gt;I use Xcode’s graphical plist editor to configure daemons because I find it less annoying than editing XML with vim, but there are also light weight plist editors that don&apos;t require you to start big ol Xcode every time you want to change something in a daemon.&lt;/p&gt;
&lt;p&gt;Job scheduling can be done either with launchd&apos;s native tools or with cron.&lt;/p&gt;
&lt;h2&gt;XNU&lt;/h2&gt;
&lt;p&gt;XNU is Darwin’s kernel. It has a fascinating design and I highly recommend reading the source code. It’s a hybrid kernel that uses the Mach microkernel as its foundation and adds a BSD layer derived from FreeBSD and NetBSD on top to provide UNIX functionality. They are slowly turning XNU into more of a microkernel by moving drivers into the userland.&lt;/p&gt;
&lt;p&gt;The nvram utility can set bootflags. I generally run all my systems with verbose boot, and on some, I also tweak Mach scheduling. I also run a special bootflag on my (jailbroken) iPhone to keep kernel memory usage down so I can assign more memory to my phone’s needlessly complex launchd setup. You can find lists of bootflags with google, but might have to read kernel source code for the more obscure ones.&lt;/p&gt;
&lt;p&gt;Kernel sources for macOS 11 have not been released yet, so I assume it is currently not possible to compile a custom kernel for the M1 due to lack of drivers, but I haven’t tried it. The documentation archive contains a detailed overview of the kernel, but some of the information is outdated by now: &lt;a href=&quot;https://developer.apple.com/library/archive/documentation/Darwin/Conceptual/KernelProgramming/About/About.html&quot;&gt;https://developer.apple.com/library/archive/documentation/Darwin/Conceptual/KernelProgramming/About/About.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Smart Folders&lt;/h2&gt;
&lt;p&gt;You can save Finder searches as a so called smart folder, where the found files will be symlinked into the folder. This is useful for a lot of things, such as symlinking all files of a certain file format to the same folder, so you can have a Photos folder that will contain symlinks of all .webp files on the system. The symlinks refresh automatically, so when ever you add a new .webp somewhere to the filesystem, it would get symlinked to this folder.&lt;/p&gt;
&lt;h2&gt;Automator and Folder Actions&lt;/h2&gt;
&lt;p&gt;You can create custom automation routines with automator. Automator also supports a variety of shell scripting languages such as Python or Bash. Automator actions can be used in a number of ways, such as an icon in your dock that runs the action on any file you drag onto it, or as a right click menu entry, or as a folder action. Folder actions bind automator scripts to folders and execute them on any file you put in the folder. You can for example combine the Bash support of Automator with ImageMagick or FFMPEG to automatically add watermarks to any photo or video you save to a specific folder.&lt;/p&gt;
&lt;p&gt;Automator also supports AppleScript, which is kind of a weird and arcane language, but offers many UI automization capabilities, that I frequently bind to voice commands for disability accommodation. It also integrates voiceover&apos;s text-to-speech which I find incredibly useful to build notification systems for blind people. AppleScript functions can be called from Bash, so I usually just use Bash scripts and access AppleScript when I need it.&lt;/p&gt;
&lt;p&gt;There is also a paid third party automization tool called Keyboard Maestro, that is supposedly better than Automator, but I don’t have any experience with it.&lt;/p&gt;
&lt;h2&gt;Package Management&lt;/h2&gt;
&lt;p&gt;Pkgutil is Darwin’s native package manager. It does not support dependency resolution, and requires manual package removal, so it should only be used for things that you don’t want to uninstall like custom kernel extensions or patches. Darwin comes with the pkgbuild utility to create installable .pkg files from a root file structure, and can even build a customizable gui installer for them.&lt;/p&gt;
&lt;p&gt;My package management workflow is as follows:&lt;/p&gt;
&lt;p&gt;I use macports (an implementation of the BSD Ports System) for applications that have too many dependencies to build them manually.&lt;/p&gt;
&lt;p&gt;I use xbps (from void linux) to build and manage packages of unix utilities that I want to use across multiple systems. This is the one I use most. I used to use pacman, but xbps integrates git nicely, so I can just run a git server as my personal binary package repo, and pacman was too much of a headache to compile for mac, frankly. I will probably eventually transition to using macports for custom packages too, but xbps just makes it incredibly easy to build packages, and I’m already experienced with it because of void linux.&lt;/p&gt;
&lt;p&gt;I use pkgutil to build packages for kexts, launchd daemons and system tweaks that I want to use across multiple systems.&lt;/p&gt;
&lt;p&gt;I use a program’s included makefile for utilities that I only want to use on the system that I’m compiling them on.&lt;/p&gt;
&lt;p&gt;I’ve been considering building a custom binary package manager with Swift and plists to replace this workflow, but I don’t know if I’m actually gonna do that.&lt;/p&gt;
&lt;h2&gt;Directory Structure&lt;/h2&gt;
&lt;p&gt;The system partition is mounted as read-only in more recent versions of macOS, but if you want to tweak lower level stuff, you can either temporarily mount the partition with write privs with the standard mount command while in recovery mode, or run ‘csrutil disable’ in the recovery mode terminal to disable read-only mounting entirely. But make sure you keep timeshift backups around if you’re gonna mess with the system partition. I do not recommend that you ‘debloat’ macOS, and instead use launchd overrides to disable things like Find My Mac. Deleted system apps will just be reinstalled during updates, and they aren’t wasting resources while they aren’t loaded, so you don’t have much to gain except a few more megabytes of ssd space.&lt;/p&gt;
&lt;p&gt;Enable hidden files with command + shift + . and explore the file structure.&lt;/p&gt;
&lt;p&gt;User-installed unix utilities belong in /usr/local/bin.&lt;/p&gt;
&lt;p&gt;/usr/bin contains the default tools. FreeBSD’s cpuctl is included and works with the M1. This can be useful to disable all CPU cores except one of the power saving cores, as a custom ultra-low power mode on MacBooks, but there is also a boot flag to disable CPU cores. Another useful one is firmwarepasswd to password lock the bootloader. I use that + full drive encryption on devices that I take through airports. You might also want to check out diskutil and its manpage for command line partition management.&lt;/p&gt;
&lt;p&gt;/Applications contains your gui apps. You can drag this folder into your dock to get a much better grid view than launchpad, or right click on it to change it to a list view, which gives you something like the Windows 98 start menu. Applications are folders that you can explore by right clicking on them in finder or with the cd command. Applications don’t need to be in the /Applications directory to be run, so you can put them on an external drive. They will not show up in launchpad or the applications list in your dock if you place them somewhere else, but you can just symlink them from an external drive to /Applications. Spotlight will still be able to find apps even if they aren’t symlinked to /Applications. The Mac version of QuickTime is pretty great btw. The windows version has nothing in common with it except the name, so give it a chance if you were put off by your experience with it on windows.&lt;/p&gt;
&lt;p&gt;/Library contains settings plists and libraries. A lot can be customized here so I recommend digging around. There is also a Library folder in /System for deeper configuration, and one in your home directory for user-specific tweaks.&lt;/p&gt;
&lt;h2&gt;Window Management&lt;/h2&gt;
&lt;p&gt;I only ever use splitview for a terminal + safari combo, so I don&apos;t mind that it doesn&apos;t offer more complex tiling functionality, but there are a number of tiling window management plugins such as Yabai, amethyst or chunkwm. I don&apos;t have any experience with those because I was a CWM user on the *BSDs.&lt;/p&gt;
&lt;p&gt;If you have a mouse with thumb buttons, I highly recommend going into System Preferences -&amp;gt; Mission Control and binding Mission Control to Mouse 4 and Application Windows to Mouse 5. All non-mini macs ship with either a touch pad or a mouse that has a touch surface, so where you would use gestures to control window management, but since you don&apos;t have that, it would be good to bind it to buttons instead. Mouse 5 will show you all windows of the currently active application, and mouse 4 will show you all windows and virtual desktops. You can also set up hot corners to emulate Gnome and KDE&apos;s window management.&lt;/p&gt;
&lt;h2&gt;Safari Adblocking&lt;/h2&gt;
&lt;p&gt;I need to use Safari because it&apos;s the only browser with proper screen reader support. I like it over all for its performance, memory and battery efficiency, but an annoying issue is that there are no good adblockers for it because it restricts the level of access that extensions have to your traffic. AdGuard (not on the App Store) is a pretty decent alternative that works not only on MacOS but also Android and iOS and blocks ads systemwide, but a pihole would work too. I also run Little Snitch (also not on the App Store) for traffic monitoring.&lt;/p&gt;
</description><pubDate>Mon, 14 Dec 2020 23:25:22 GMT</pubDate><content:encoded>&lt;p&gt;This comes from a reader that was a Sysadmin and transitioned from Linux to MacOS because of a visual impairment. He choose macOS because of it&apos;s screen reader and shared all these tips, which I found extremely valuable. Thank you Nik for sharing! It felt only right to share his thoughtful email with a lot of explanations that are hard to find on the net.&lt;/p&gt;
&lt;h2&gt;launchd&lt;/h2&gt;
&lt;p&gt;Launchd is Darwin/MacOS’s init system. The init portion of systemd is heavily modeled after launchd, but unlike systemd, launchd isn’t a monolithic system manager but only an init system. It&apos;s a relatively simple design that follows the unix philosophy. Any further functionality is implemented by daemons that can be disabled with a launchd override plist.&lt;/p&gt;
&lt;p&gt;For info how to use launchd, check the man pages and read this document from the documentation archive: &lt;a href=&quot;https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html&quot;&gt;https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You might also want to take a look at the launchd source code for a deeper understanding.&lt;/p&gt;
&lt;p&gt;I use Xcode’s graphical plist editor to configure daemons because I find it less annoying than editing XML with vim, but there are also light weight plist editors that don&apos;t require you to start big ol Xcode every time you want to change something in a daemon.&lt;/p&gt;
&lt;p&gt;Job scheduling can be done either with launchd&apos;s native tools or with cron.&lt;/p&gt;
&lt;h2&gt;XNU&lt;/h2&gt;
&lt;p&gt;XNU is Darwin’s kernel. It has a fascinating design and I highly recommend reading the source code. It’s a hybrid kernel that uses the Mach microkernel as its foundation and adds a BSD layer derived from FreeBSD and NetBSD on top to provide UNIX functionality. They are slowly turning XNU into more of a microkernel by moving drivers into the userland.&lt;/p&gt;
&lt;p&gt;The nvram utility can set bootflags. I generally run all my systems with verbose boot, and on some, I also tweak Mach scheduling. I also run a special bootflag on my (jailbroken) iPhone to keep kernel memory usage down so I can assign more memory to my phone’s needlessly complex launchd setup. You can find lists of bootflags with google, but might have to read kernel source code for the more obscure ones.&lt;/p&gt;
&lt;p&gt;Kernel sources for macOS 11 have not been released yet, so I assume it is currently not possible to compile a custom kernel for the M1 due to lack of drivers, but I haven’t tried it. The documentation archive contains a detailed overview of the kernel, but some of the information is outdated by now: &lt;a href=&quot;https://developer.apple.com/library/archive/documentation/Darwin/Conceptual/KernelProgramming/About/About.html&quot;&gt;https://developer.apple.com/library/archive/documentation/Darwin/Conceptual/KernelProgramming/About/About.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Smart Folders&lt;/h2&gt;
&lt;p&gt;You can save Finder searches as a so called smart folder, where the found files will be symlinked into the folder. This is useful for a lot of things, such as symlinking all files of a certain file format to the same folder, so you can have a Photos folder that will contain symlinks of all .webp files on the system. The symlinks refresh automatically, so when ever you add a new .webp somewhere to the filesystem, it would get symlinked to this folder.&lt;/p&gt;
&lt;h2&gt;Automator and Folder Actions&lt;/h2&gt;
&lt;p&gt;You can create custom automation routines with automator. Automator also supports a variety of shell scripting languages such as Python or Bash. Automator actions can be used in a number of ways, such as an icon in your dock that runs the action on any file you drag onto it, or as a right click menu entry, or as a folder action. Folder actions bind automator scripts to folders and execute them on any file you put in the folder. You can for example combine the Bash support of Automator with ImageMagick or FFMPEG to automatically add watermarks to any photo or video you save to a specific folder.&lt;/p&gt;
&lt;p&gt;Automator also supports AppleScript, which is kind of a weird and arcane language, but offers many UI automization capabilities, that I frequently bind to voice commands for disability accommodation. It also integrates voiceover&apos;s text-to-speech which I find incredibly useful to build notification systems for blind people. AppleScript functions can be called from Bash, so I usually just use Bash scripts and access AppleScript when I need it.&lt;/p&gt;
&lt;p&gt;There is also a paid third party automization tool called Keyboard Maestro, that is supposedly better than Automator, but I don’t have any experience with it.&lt;/p&gt;
&lt;h2&gt;Package Management&lt;/h2&gt;
&lt;p&gt;Pkgutil is Darwin’s native package manager. It does not support dependency resolution, and requires manual package removal, so it should only be used for things that you don’t want to uninstall like custom kernel extensions or patches. Darwin comes with the pkgbuild utility to create installable .pkg files from a root file structure, and can even build a customizable gui installer for them.&lt;/p&gt;
&lt;p&gt;My package management workflow is as follows:&lt;/p&gt;
&lt;p&gt;I use macports (an implementation of the BSD Ports System) for applications that have too many dependencies to build them manually.&lt;/p&gt;
&lt;p&gt;I use xbps (from void linux) to build and manage packages of unix utilities that I want to use across multiple systems. This is the one I use most. I used to use pacman, but xbps integrates git nicely, so I can just run a git server as my personal binary package repo, and pacman was too much of a headache to compile for mac, frankly. I will probably eventually transition to using macports for custom packages too, but xbps just makes it incredibly easy to build packages, and I’m already experienced with it because of void linux.&lt;/p&gt;
&lt;p&gt;I use pkgutil to build packages for kexts, launchd daemons and system tweaks that I want to use across multiple systems.&lt;/p&gt;
&lt;p&gt;I use a program’s included makefile for utilities that I only want to use on the system that I’m compiling them on.&lt;/p&gt;
&lt;p&gt;I’ve been considering building a custom binary package manager with Swift and plists to replace this workflow, but I don’t know if I’m actually gonna do that.&lt;/p&gt;
&lt;h2&gt;Directory Structure&lt;/h2&gt;
&lt;p&gt;The system partition is mounted as read-only in more recent versions of macOS, but if you want to tweak lower level stuff, you can either temporarily mount the partition with write privs with the standard mount command while in recovery mode, or run ‘csrutil disable’ in the recovery mode terminal to disable read-only mounting entirely. But make sure you keep timeshift backups around if you’re gonna mess with the system partition. I do not recommend that you ‘debloat’ macOS, and instead use launchd overrides to disable things like Find My Mac. Deleted system apps will just be reinstalled during updates, and they aren’t wasting resources while they aren’t loaded, so you don’t have much to gain except a few more megabytes of ssd space.&lt;/p&gt;
&lt;p&gt;Enable hidden files with command + shift + . and explore the file structure.&lt;/p&gt;
&lt;p&gt;User-installed unix utilities belong in /usr/local/bin.&lt;/p&gt;
&lt;p&gt;/usr/bin contains the default tools. FreeBSD’s cpuctl is included and works with the M1. This can be useful to disable all CPU cores except one of the power saving cores, as a custom ultra-low power mode on MacBooks, but there is also a boot flag to disable CPU cores. Another useful one is firmwarepasswd to password lock the bootloader. I use that + full drive encryption on devices that I take through airports. You might also want to check out diskutil and its manpage for command line partition management.&lt;/p&gt;
&lt;p&gt;/Applications contains your gui apps. You can drag this folder into your dock to get a much better grid view than launchpad, or right click on it to change it to a list view, which gives you something like the Windows 98 start menu. Applications are folders that you can explore by right clicking on them in finder or with the cd command. Applications don’t need to be in the /Applications directory to be run, so you can put them on an external drive. They will not show up in launchpad or the applications list in your dock if you place them somewhere else, but you can just symlink them from an external drive to /Applications. Spotlight will still be able to find apps even if they aren’t symlinked to /Applications. The Mac version of QuickTime is pretty great btw. The windows version has nothing in common with it except the name, so give it a chance if you were put off by your experience with it on windows.&lt;/p&gt;
&lt;p&gt;/Library contains settings plists and libraries. A lot can be customized here so I recommend digging around. There is also a Library folder in /System for deeper configuration, and one in your home directory for user-specific tweaks.&lt;/p&gt;
&lt;h2&gt;Window Management&lt;/h2&gt;
&lt;p&gt;I only ever use splitview for a terminal + safari combo, so I don&apos;t mind that it doesn&apos;t offer more complex tiling functionality, but there are a number of tiling window management plugins such as Yabai, amethyst or chunkwm. I don&apos;t have any experience with those because I was a CWM user on the *BSDs.&lt;/p&gt;
&lt;p&gt;If you have a mouse with thumb buttons, I highly recommend going into System Preferences -&amp;gt; Mission Control and binding Mission Control to Mouse 4 and Application Windows to Mouse 5. All non-mini macs ship with either a touch pad or a mouse that has a touch surface, so where you would use gestures to control window management, but since you don&apos;t have that, it would be good to bind it to buttons instead. Mouse 5 will show you all windows of the currently active application, and mouse 4 will show you all windows and virtual desktops. You can also set up hot corners to emulate Gnome and KDE&apos;s window management.&lt;/p&gt;
&lt;h2&gt;Safari Adblocking&lt;/h2&gt;
&lt;p&gt;I need to use Safari because it&apos;s the only browser with proper screen reader support. I like it over all for its performance, memory and battery efficiency, but an annoying issue is that there are no good adblockers for it because it restricts the level of access that extensions have to your traffic. AdGuard (not on the App Store) is a pretty decent alternative that works not only on MacOS but also Android and iOS and blocks ads systemwide, but a pihole would work too. I also run Little Snitch (also not on the App Store) for traffic monitoring.&lt;/p&gt;
</content:encoded></item><item><title>2020 Buyers Guide</title><link>https://christitus.com/2020-buyers-guide/</link><guid isPermaLink="true">https://christitus.com/2020-buyers-guide/</guid><description>&lt;p&gt;Looking for a Tech Gift this holiday season? Here are the things I have my eye on and are worth considering.&lt;/p&gt;

&lt;h2&gt;Amazon Fire Tablet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;7&quot; &lt;a href=&quot;https://amzn.to/2UzZZ8T&quot;&gt;https://amzn.to/2UzZZ8T&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;10&quot; &lt;a href=&quot;https://amzn.to/35H7Yax&quot;&gt;https://amzn.to/35H7Yax&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/debloat-fire.webp&quot; alt=&quot;Debloat-Fire&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Video Overview on how to debloat: &lt;a href=&quot;https://youtu.be/yLoymK65dJE&quot;&gt;https://youtu.be/yLoymK65dJE&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Cell Phones&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/cellphones.webp&quot; alt=&quot;Cellphones&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google 4a - $350 - &lt;a href=&quot;https://amzn.to/2IKfTLr&quot;&gt;https://amzn.to/2IKfTLr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PinePhone - $200 - &lt;a href=&quot;https://www.pine64.org/pinephone/&quot;&gt;https://www.pine64.org/pinephone/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;XDA Pro1-X - $639 - &lt;a href=&quot;https://www.indiegogo.com/projects/pro1-x-smartphone-functionality-choice-control&quot;&gt;https://www.indiegogo.com/projects/pro1-x-smartphone-functionality-choice-control&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both PinePhone and XDA Pro1-X are Linux phones and may not be practical for everyday use unless you load Lineage or a solid mobile OS on it, but man are they fun to play with.&lt;/p&gt;
&lt;p&gt;Google 4a is the practical choice and is a rock solid phone that comes unlocked to where you can wipe out Google and move to Lineage for those security and privacy oriented folks. This is the best value in my opinion.&lt;/p&gt;
&lt;h2&gt;Monitors&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/monitors.webp&quot; alt=&quot;Monitors&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cheap Spectre Monitors - &lt;a href=&quot;https://amzn.to/3pxmv0l&quot;&gt;https://amzn.to/3pxmv0l&lt;/a&gt; - &lt;em&gt;Prices range from $80 to $250&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;BenQ High-End Monitors - &lt;a href=&quot;https://amzn.to/2K9wxV0&quot;&gt;https://amzn.to/2K9wxV0&lt;/a&gt; - &lt;em&gt;Prices range from $300 to $450&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Current Gaming Monitor Pick - BenQ ZOWIE 24&quot; 144Hz - $199 - &lt;a href=&quot;https://amzn.to/32VJ05h&quot;&gt;https://amzn.to/32VJ05h&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Peripherals&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/razer.webp&quot; alt=&quot;Razer&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Razer Cynosa Lite - $40 - &lt;a href=&quot;https://amzn.to/3f6ZfS1&quot;&gt;https://amzn.to/3f6ZfS1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Razer DeathAdder Essential Mouse - $30 - &lt;a href=&quot;https://amzn.to/3lGFAe9&quot;&gt;https://amzn.to/3lGFAe9&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why Razer? Did they pay me or something? &lt;em&gt;Nope!&lt;/em&gt;&lt;br /&gt;
Razer has a bunch of cool features, but also has a great open source project called OpenRazer &lt;a href=&quot;https://openrazer.github.io/&quot;&gt;https://openrazer.github.io/&lt;/a&gt; for any operating system. You can do all kinds of fun macros with them and I picked these two above because they are rather quiet and I hate noise. Most people would prefer a full mechanical and if you are interested in this check out the project above and pick a compatible device for your needs!&lt;/p&gt;
&lt;h3&gt;Logitech Options&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;MK545 Keyboard and Mouse Combo from Logitech - $50 - &lt;a href=&quot;https://amzn.to/3pEPSxO&quot;&gt;https://amzn.to/3pEPSxO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3 Device Switching Keyboard and Mouse&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;M720 Logitech M720 Wireless Triathlon Mouse $30 - &lt;a href=&quot;https://amzn.to/3fseOUu&quot;&gt;https://amzn.to/3fseOUu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Logitech K780 Multi-Device Wireless Keyboard $100 - &lt;a href=&quot;https://amzn.to/33bKBUO&quot;&gt;https://amzn.to/33bKBUO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;TitusPi&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wyvS1FxR4ic&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;ul&gt;
&lt;li&gt;Raspberry Pi 4 8GB Kit - $105 - &lt;a href=&quot;https://amzn.to/2K7CuBR&quot;&gt;https://amzn.to/2K7CuBR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Raspberry Pi 4 Image - Build it yourself with
&lt;a href=&quot;https://github.com/ChrisTitusTech/TitusPi&quot;&gt;https://github.com/ChrisTitusTech/TitusPi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Audio/Video Production Stuff&lt;/h2&gt;
&lt;p&gt;Here is Equipment I use for A/V and recommend to others. Below is a video going over my entire studio setup, but I left out the impractical gear that many wouldn&apos;t want.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/cuBay8QzYH4&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;ul&gt;
&lt;li&gt;Camera - M200 - $550 - &lt;a href=&quot;https://amzn.to/32T9qEU&quot;&gt;https://amzn.to/32T9qEU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Camera Lens - Canon 22M 2.0 - $200 - &lt;a href=&quot;https://amzn.to/3pzW0r0&quot;&gt;https://amzn.to/3pzW0r0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microphone - Rode VideoMicro - $60 - &lt;a href=&quot;https://amzn.to/2IBn093&quot;&gt;https://amzn.to/2IBn093&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Capture Card - Magewell - $900 - &lt;a href=&quot;https://amzn.to/3pFZiZJ&quot;&gt;https://amzn.to/3pFZiZJ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;StreamDeck - Button Macros - $150
&lt;ul&gt;
&lt;li&gt;Streamdeck_ui Open Source Project &lt;a href=&quot;https://timothycrosley.github.io/streamdeck-ui/&quot;&gt;https://timothycrosley.github.io/streamdeck-ui/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Microphone Standalone - Shure MV7 - $250 - &lt;a href=&quot;https://amzn.to/3kGstbi&quot;&gt;https://amzn.to/3kGstbi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Computers and Graphics Cards&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/outofstock.webp&quot; alt=&quot;OutofStock&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Good Luck! All the stock out there is way out of date and any of the new hotness is Out of Stock. Wait til 2021!&lt;/p&gt;
&lt;p&gt;But... If you want to see something cool for a laptop in 2020, check out this &quot;little&quot; machine. &lt;a href=&quot;https://kfocus.org/&quot;&gt;https://kfocus.org/&lt;/a&gt; #NotSponsored&lt;/p&gt;
</description><pubDate>Fri, 20 Nov 2020 19:46:56 GMT</pubDate><content:encoded>&lt;p&gt;Looking for a Tech Gift this holiday season? Here are the things I have my eye on and are worth considering.&lt;/p&gt;

&lt;h2&gt;Amazon Fire Tablet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;7&quot; &lt;a href=&quot;https://amzn.to/2UzZZ8T&quot;&gt;https://amzn.to/2UzZZ8T&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;10&quot; &lt;a href=&quot;https://amzn.to/35H7Yax&quot;&gt;https://amzn.to/35H7Yax&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/debloat-fire.webp&quot; alt=&quot;Debloat-Fire&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Video Overview on how to debloat: &lt;a href=&quot;https://youtu.be/yLoymK65dJE&quot;&gt;https://youtu.be/yLoymK65dJE&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Cell Phones&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/cellphones.webp&quot; alt=&quot;Cellphones&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google 4a - $350 - &lt;a href=&quot;https://amzn.to/2IKfTLr&quot;&gt;https://amzn.to/2IKfTLr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PinePhone - $200 - &lt;a href=&quot;https://www.pine64.org/pinephone/&quot;&gt;https://www.pine64.org/pinephone/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;XDA Pro1-X - $639 - &lt;a href=&quot;https://www.indiegogo.com/projects/pro1-x-smartphone-functionality-choice-control&quot;&gt;https://www.indiegogo.com/projects/pro1-x-smartphone-functionality-choice-control&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both PinePhone and XDA Pro1-X are Linux phones and may not be practical for everyday use unless you load Lineage or a solid mobile OS on it, but man are they fun to play with.&lt;/p&gt;
&lt;p&gt;Google 4a is the practical choice and is a rock solid phone that comes unlocked to where you can wipe out Google and move to Lineage for those security and privacy oriented folks. This is the best value in my opinion.&lt;/p&gt;
&lt;h2&gt;Monitors&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/monitors.webp&quot; alt=&quot;Monitors&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cheap Spectre Monitors - &lt;a href=&quot;https://amzn.to/3pxmv0l&quot;&gt;https://amzn.to/3pxmv0l&lt;/a&gt; - &lt;em&gt;Prices range from $80 to $250&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;BenQ High-End Monitors - &lt;a href=&quot;https://amzn.to/2K9wxV0&quot;&gt;https://amzn.to/2K9wxV0&lt;/a&gt; - &lt;em&gt;Prices range from $300 to $450&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Current Gaming Monitor Pick - BenQ ZOWIE 24&quot; 144Hz - $199 - &lt;a href=&quot;https://amzn.to/32VJ05h&quot;&gt;https://amzn.to/32VJ05h&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Peripherals&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/razer.webp&quot; alt=&quot;Razer&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Razer Cynosa Lite - $40 - &lt;a href=&quot;https://amzn.to/3f6ZfS1&quot;&gt;https://amzn.to/3f6ZfS1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Razer DeathAdder Essential Mouse - $30 - &lt;a href=&quot;https://amzn.to/3lGFAe9&quot;&gt;https://amzn.to/3lGFAe9&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why Razer? Did they pay me or something? &lt;em&gt;Nope!&lt;/em&gt;&lt;br /&gt;
Razer has a bunch of cool features, but also has a great open source project called OpenRazer &lt;a href=&quot;https://openrazer.github.io/&quot;&gt;https://openrazer.github.io/&lt;/a&gt; for any operating system. You can do all kinds of fun macros with them and I picked these two above because they are rather quiet and I hate noise. Most people would prefer a full mechanical and if you are interested in this check out the project above and pick a compatible device for your needs!&lt;/p&gt;
&lt;h3&gt;Logitech Options&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;MK545 Keyboard and Mouse Combo from Logitech - $50 - &lt;a href=&quot;https://amzn.to/3pEPSxO&quot;&gt;https://amzn.to/3pEPSxO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3 Device Switching Keyboard and Mouse&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;M720 Logitech M720 Wireless Triathlon Mouse $30 - &lt;a href=&quot;https://amzn.to/3fseOUu&quot;&gt;https://amzn.to/3fseOUu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Logitech K780 Multi-Device Wireless Keyboard $100 - &lt;a href=&quot;https://amzn.to/33bKBUO&quot;&gt;https://amzn.to/33bKBUO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;TitusPi&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wyvS1FxR4ic&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;ul&gt;
&lt;li&gt;Raspberry Pi 4 8GB Kit - $105 - &lt;a href=&quot;https://amzn.to/2K7CuBR&quot;&gt;https://amzn.to/2K7CuBR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Raspberry Pi 4 Image - Build it yourself with
&lt;a href=&quot;https://github.com/ChrisTitusTech/TitusPi&quot;&gt;https://github.com/ChrisTitusTech/TitusPi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Audio/Video Production Stuff&lt;/h2&gt;
&lt;p&gt;Here is Equipment I use for A/V and recommend to others. Below is a video going over my entire studio setup, but I left out the impractical gear that many wouldn&apos;t want.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/cuBay8QzYH4&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;ul&gt;
&lt;li&gt;Camera - M200 - $550 - &lt;a href=&quot;https://amzn.to/32T9qEU&quot;&gt;https://amzn.to/32T9qEU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Camera Lens - Canon 22M 2.0 - $200 - &lt;a href=&quot;https://amzn.to/3pzW0r0&quot;&gt;https://amzn.to/3pzW0r0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microphone - Rode VideoMicro - $60 - &lt;a href=&quot;https://amzn.to/2IBn093&quot;&gt;https://amzn.to/2IBn093&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Capture Card - Magewell - $900 - &lt;a href=&quot;https://amzn.to/3pFZiZJ&quot;&gt;https://amzn.to/3pFZiZJ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;StreamDeck - Button Macros - $150
&lt;ul&gt;
&lt;li&gt;Streamdeck_ui Open Source Project &lt;a href=&quot;https://timothycrosley.github.io/streamdeck-ui/&quot;&gt;https://timothycrosley.github.io/streamdeck-ui/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Microphone Standalone - Shure MV7 - $250 - &lt;a href=&quot;https://amzn.to/3kGstbi&quot;&gt;https://amzn.to/3kGstbi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Computers and Graphics Cards&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/buyers-guide/outofstock.webp&quot; alt=&quot;OutofStock&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Good Luck! All the stock out there is way out of date and any of the new hotness is Out of Stock. Wait til 2021!&lt;/p&gt;
&lt;p&gt;But... If you want to see something cool for a laptop in 2020, check out this &quot;little&quot; machine. &lt;a href=&quot;https://kfocus.org/&quot;&gt;https://kfocus.org/&lt;/a&gt; #NotSponsored&lt;/p&gt;
</content:encoded></item><item><title>Linux MacOS</title><link>https://christitus.com/linux-macos/</link><guid isPermaLink="true">https://christitus.com/linux-macos/</guid><description>&lt;p&gt;This Project is to make Ubuntu and other derivative distributions (Mint, PopOS, etc.) look like MacOS. &lt;em&gt;Version 20+ is required&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source Files in this project&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gnome-look.org/p/1148692/&quot;&gt;https://www.gnome-look.org/p/1148692/&lt;/a&gt; - Capitine Cursors&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pling.com/p/1403328/&quot;&gt;https://www.pling.com/p/1403328/&lt;/a&gt; - WhiteSur GTK Theme&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pling.com/p/1399044/&quot;&gt;https://www.pling.com/p/1399044/&lt;/a&gt; - BigSur Icon Theme&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://albertlauncher.github.io/installation/&quot;&gt;https://albertlauncher.github.io/installation/&lt;/a&gt; - Albert&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pling.com/p/1401527/&quot;&gt;https://www.pling.com/p/1401527/&lt;/a&gt; - Cairo Dock&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;h3&gt;Dependency Installs&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install git gnome-shell-extensions chrome-gnome-shell gnome-tweak-tool -y
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/ChrisTitusTech/Linux-MacOS-GNOME.git ~/MacOS
mkdir ~/.themes
mkdir ~/.icons
mv ~/MacOS/themes/* ~/.themes
mv ~/MacOS/icons/* ~/.icons
sudo mv ~/MacOS/walls/* /usr/share/backgrounds/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Gnome Tweaks&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gsettings set org.gnome.mutter center-new-windows &apos;true&apos;
gsettings set org.gnome.desktop.wm.preferences button-layout &apos;close,minimize,maximize:&apos;
gsettings set org.gnome.desktop.interface gtk-theme &quot;WhiteSur-dark&quot;
gsettings set org.gnome.desktop.wm.preferences theme &quot;WhiteSur-dark&quot;
gsettings set org.gnome.desktop.interface icon-theme &apos;BigSur&apos;
gsettings set org.gnome.desktop.interface cursor-theme &apos;capitaine-cursors-light&apos;
gsettings set org.gnome.desktop.background picture-uri &apos;file:///usr/share/backgrounds/macOS-BS3.webp&apos;
gsettings get org.gnome.desktop.screensaver picture-uri &apos;file:///usr/share/backgrounds/macOS-BS1.webp&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Albert Search and Cairo Dock&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;curl https://build.opensuse.org/projects/home:manuelschneid3r/public_key | sudo apt-key add -
echo &apos;deb http://download.opensuse.org/repositories/home:/manuelschneid3r/xUbuntu_20.04/ /&apos; | sudo tee /etc/apt/sources.list.d/home:manuelschneid3r.list
sudo wget -nv https://download.opensuse.org/repositories/home:manuelschneid3r/xUbuntu_20.04/Release.key -O &quot;/etc/apt/trusted.gpg.d/home:manuelschneid3r.asc&quot;
sudo apt update
sudo apt install albert cairo-dock cairo-dock-plug-ins -y
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Launch Albert&lt;/li&gt;
&lt;li&gt;Set Hotkey - Meta + F&lt;/li&gt;
&lt;li&gt;Set Theme Arc Dark Blue&lt;/li&gt;
&lt;li&gt;Enable Albert Extensions&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Gnome Extensions&lt;/h3&gt;
&lt;p&gt;Enable Extensions by visiting &lt;a href=&quot;https://extensions.gnome.org/&quot;&gt;https://extensions.gnome.org/&lt;/a&gt; install add-on and reload browser&lt;/p&gt;
&lt;p&gt;Install the Following Extensions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User Themes - &lt;a href=&quot;https://extensions.gnome.org/extension/19/user-themes/&quot;&gt;https://extensions.gnome.org/extension/19/user-themes/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Frippery Move Clock - &lt;a href=&quot;https://extensions.gnome.org/extension/2/move-clock/&quot;&gt;https://extensions.gnome.org/extension/2/move-clock/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dynamic Panel Transparency - &lt;a href=&quot;https://extensions.gnome.org/extension/1011/dynamic-panel-transparency/&quot;&gt;https://extensions.gnome.org/extension/1011/dynamic-panel-transparency/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Panel OSD - &lt;a href=&quot;https://extensions.gnome.org/extension/708/panel-osd/&quot;&gt;https://extensions.gnome.org/extension/708/panel-osd/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Manual Extension Configurations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Panel OSD - Change Horizontal and Vertical to 98&lt;/li&gt;
&lt;li&gt;Cairo Dock - Set to Startup Applications&lt;/li&gt;
&lt;li&gt;Cairo Dock Themes - Import all gz files to Cairo configure in ~/MacOS/cairo&lt;/li&gt;
&lt;li&gt;Cairo Dock Configure - Turn of Icon effects and animations and hide dock when overlapping windows&lt;/li&gt;
&lt;li&gt;Cairo Dock Launchpad - Add Custom Launchpad Shortcut &lt;code&gt;dbus-send --session --type=method_call --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:&apos;Main.shellDBusService.ShowApplications();&apos;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Disable Ubuntu Dock (Not Needed on PopOS)&lt;/li&gt;
&lt;li&gt;Dynamic Panel Transparency - Background Tab - Max Opacity 100 - Min Opacity 50&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Mon, 05 Oct 2020 18:03:31 GMT</pubDate><content:encoded>&lt;p&gt;This Project is to make Ubuntu and other derivative distributions (Mint, PopOS, etc.) look like MacOS. &lt;em&gt;Version 20+ is required&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source Files in this project&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gnome-look.org/p/1148692/&quot;&gt;https://www.gnome-look.org/p/1148692/&lt;/a&gt; - Capitine Cursors&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pling.com/p/1403328/&quot;&gt;https://www.pling.com/p/1403328/&lt;/a&gt; - WhiteSur GTK Theme&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pling.com/p/1399044/&quot;&gt;https://www.pling.com/p/1399044/&lt;/a&gt; - BigSur Icon Theme&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://albertlauncher.github.io/installation/&quot;&gt;https://albertlauncher.github.io/installation/&lt;/a&gt; - Albert&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pling.com/p/1401527/&quot;&gt;https://www.pling.com/p/1401527/&lt;/a&gt; - Cairo Dock&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;h3&gt;Dependency Installs&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install git gnome-shell-extensions chrome-gnome-shell gnome-tweak-tool -y
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/ChrisTitusTech/Linux-MacOS-GNOME.git ~/MacOS
mkdir ~/.themes
mkdir ~/.icons
mv ~/MacOS/themes/* ~/.themes
mv ~/MacOS/icons/* ~/.icons
sudo mv ~/MacOS/walls/* /usr/share/backgrounds/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Gnome Tweaks&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gsettings set org.gnome.mutter center-new-windows &apos;true&apos;
gsettings set org.gnome.desktop.wm.preferences button-layout &apos;close,minimize,maximize:&apos;
gsettings set org.gnome.desktop.interface gtk-theme &quot;WhiteSur-dark&quot;
gsettings set org.gnome.desktop.wm.preferences theme &quot;WhiteSur-dark&quot;
gsettings set org.gnome.desktop.interface icon-theme &apos;BigSur&apos;
gsettings set org.gnome.desktop.interface cursor-theme &apos;capitaine-cursors-light&apos;
gsettings set org.gnome.desktop.background picture-uri &apos;file:///usr/share/backgrounds/macOS-BS3.webp&apos;
gsettings get org.gnome.desktop.screensaver picture-uri &apos;file:///usr/share/backgrounds/macOS-BS1.webp&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Albert Search and Cairo Dock&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;curl https://build.opensuse.org/projects/home:manuelschneid3r/public_key | sudo apt-key add -
echo &apos;deb http://download.opensuse.org/repositories/home:/manuelschneid3r/xUbuntu_20.04/ /&apos; | sudo tee /etc/apt/sources.list.d/home:manuelschneid3r.list
sudo wget -nv https://download.opensuse.org/repositories/home:manuelschneid3r/xUbuntu_20.04/Release.key -O &quot;/etc/apt/trusted.gpg.d/home:manuelschneid3r.asc&quot;
sudo apt update
sudo apt install albert cairo-dock cairo-dock-plug-ins -y
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Launch Albert&lt;/li&gt;
&lt;li&gt;Set Hotkey - Meta + F&lt;/li&gt;
&lt;li&gt;Set Theme Arc Dark Blue&lt;/li&gt;
&lt;li&gt;Enable Albert Extensions&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Gnome Extensions&lt;/h3&gt;
&lt;p&gt;Enable Extensions by visiting &lt;a href=&quot;https://extensions.gnome.org/&quot;&gt;https://extensions.gnome.org/&lt;/a&gt; install add-on and reload browser&lt;/p&gt;
&lt;p&gt;Install the Following Extensions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User Themes - &lt;a href=&quot;https://extensions.gnome.org/extension/19/user-themes/&quot;&gt;https://extensions.gnome.org/extension/19/user-themes/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Frippery Move Clock - &lt;a href=&quot;https://extensions.gnome.org/extension/2/move-clock/&quot;&gt;https://extensions.gnome.org/extension/2/move-clock/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dynamic Panel Transparency - &lt;a href=&quot;https://extensions.gnome.org/extension/1011/dynamic-panel-transparency/&quot;&gt;https://extensions.gnome.org/extension/1011/dynamic-panel-transparency/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Panel OSD - &lt;a href=&quot;https://extensions.gnome.org/extension/708/panel-osd/&quot;&gt;https://extensions.gnome.org/extension/708/panel-osd/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Manual Extension Configurations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Panel OSD - Change Horizontal and Vertical to 98&lt;/li&gt;
&lt;li&gt;Cairo Dock - Set to Startup Applications&lt;/li&gt;
&lt;li&gt;Cairo Dock Themes - Import all gz files to Cairo configure in ~/MacOS/cairo&lt;/li&gt;
&lt;li&gt;Cairo Dock Configure - Turn of Icon effects and animations and hide dock when overlapping windows&lt;/li&gt;
&lt;li&gt;Cairo Dock Launchpad - Add Custom Launchpad Shortcut &lt;code&gt;dbus-send --session --type=method_call --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:&apos;Main.shellDBusService.ShowApplications();&apos;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Disable Ubuntu Dock (Not Needed on PopOS)&lt;/li&gt;
&lt;li&gt;Dynamic Panel Transparency - Background Tab - Max Opacity 100 - Min Opacity 50&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Common Computer Issues</title><link>https://christitus.com/common-computer-issues/</link><guid isPermaLink="true">https://christitus.com/common-computer-issues/</guid><description>&lt;p&gt;These are all the issues we discussed on a live stream. I took all the community questions and made this webpage for them.&lt;/p&gt;

&lt;h2&gt;Windows 10 - Automated Tasks&lt;/h2&gt;
&lt;p&gt;Q: How can I make a YouTube video sit there paused on someone&apos;s screen in Windows 10 and instantly start playing aloud upon unlocking the screen/waking from sleep?&lt;/p&gt;
&lt;p&gt;A: Task Scheduler can do all sorts of tasks and you can set the triggers to be on login or at certain times of the day.&lt;/p&gt;
&lt;h2&gt;Linux - Display Issues&lt;/h2&gt;
&lt;p&gt;Solution for Display constantly resetting or getting incorrectly configured&lt;/p&gt;
&lt;p&gt;3 Solutions (All will work)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Xorg Custom Settings
&lt;ul&gt;
&lt;li&gt;When display render is launched it will automatically configure each display to these specification from &lt;code&gt;/etc/X11/xorg.conf.d/10-monitor.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# /etc/X11/xorg.conf.d/10-monitor.conf
Section &quot;Monitor&quot;
### Monitor Identity - Typically HDMI-0 or DisplayPort-0
    Identifier    &quot;HDMI1&quot; 
    Option        &quot;PreferredMode&quot; &quot;1920x1080&quot;
    Option        &quot;TargetRefresh&quot; &quot;60&quot;

### Positioning the Monitor
## Basic
    Option &quot;LeftOf or RightOf or Above or Below&quot; &quot;DisplayPort-0&quot;    
## Advanced
    Option        &quot;Position&quot; &quot;1680 0&quot; #Note you can always set both to 0 0 to mirror
## Disable a Monitor
     Option        &quot;Disable&quot; &quot;true&quot;
EndSection 
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Autorandr - Automatic monitor settings
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/phillipberndt/autorandr&quot;&gt;https://github.com/phillipberndt/autorandr&lt;/a&gt; - This automatically selects a display configuration based on connected devices&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Xrandr Script
&lt;ul&gt;
&lt;li&gt;Make a custom bash script and set with login manager, cron job, or set in &lt;code&gt;~/.xinitrc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sample xrandr script:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
xrandr --output HDMI-1 --off --output HDMI-2 --auto
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: You can use the tool &lt;em&gt;arandr&lt;/em&gt; to grab the proper display script&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Windows/Linux/MacOS - Flashing Images to SD-Card or USB&lt;/h2&gt;
&lt;p&gt;There are so many solutions for this one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows - Rufus (&lt;a href=&quot;https://rufus.ie&quot;&gt;https://rufus.ie&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Windows/Linux/Mac - Etcher (&lt;a href=&quot;https://www.balena.io/etcher/&quot;&gt;https://www.balena.io/etcher/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Linux/Mac - &lt;code&gt;dd&lt;/code&gt; terminal command
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dd if=~/Downloads/image.iso of=/dev/sdx bs=1M&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;if = input file/device | of= output file/device | bs= block size&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Windows - Win32 Disk Imager &lt;a href=&quot;https://sourceforge.net/projects/win32diskimager/&quot;&gt;https://sourceforge.net/projects/win32diskimager/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;for images that aren&apos;t working or using special media like sd cards&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Linux - Boot Time High for KDE&lt;/h2&gt;
&lt;p&gt;Analyze systemd and figure out why... (&lt;code&gt;systemd-analyze&lt;/code&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;systemd-analyze blame
             10.667s apt-daily.service
              1.127s apt-daily-upgrade.service
              1.053s dev-mapper-neon\x2d\x2dvg\x2droot.device
               793ms lvm2-pvscan@8:3.service
               622ms boot.mount
               613ms snapd.service
               267ms minidlna.service
               217ms NetworkManager.service
               200ms nvidia-persistenced.service
               196ms upower.service
               189ms systemd-logind.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Also try &lt;code&gt;systemd-analyze critical-chain&lt;/code&gt; or &lt;code&gt;systemd-analyze plot &amp;gt; boot.svg&lt;/code&gt; as this shows the chain of the startup&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Linux - USB Port stops working&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Check to see if device shows on &lt;code&gt;lsusb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check dmesg for errors &lt;code&gt;dmesg | grep -i USB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;usb-devices&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Disable Auto Suspend
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cat /sys/module/usbcore/parameters/autosuspend&lt;/code&gt; result should be &lt;code&gt;2&lt;/code&gt; which means enabled&lt;/li&gt;
&lt;li&gt;Modify Grub or bootloader to disable auto suspend (for grub modify &lt;code&gt;/etc/default/grub&lt;/code&gt;)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet splash usbcore.autosuspend=-1&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo update-grub&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Verify by running cat command again&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Linux - Fixing No Display Drivers or Black Screen or Missing Desktop Environment&lt;/h2&gt;
&lt;p&gt;Ctrl + Alt + F1 or F2&lt;/p&gt;
&lt;p&gt;This drops you to TTY and no display drivers are needed. From this console you can fix things by installing display drivers or missing packages you need.&lt;/p&gt;
&lt;h2&gt;All Computers - Can&apos;t Get into BIOS&lt;/h2&gt;
&lt;p&gt;Open it up and remove the CMOS Battery. Press the power button without it plugged in to fully discharge. Then wait 60 seconds and put CMOS battery back in.&lt;/p&gt;
&lt;h2&gt;General PC Maintenance - Updates &amp;amp; Shuting them down&lt;/h2&gt;
&lt;p&gt;Updates should be done weekly with security only one applied. Feature Updates should be delayed at least 1 year. This is universal across all operating systems. I also recommend shutting down your PC every day and not using suspend/hibernate. If you want to schedule the updates you can leave your PC once a week overnight.&lt;/p&gt;
&lt;h2&gt;Windows/Linux - Time Maintenance&lt;/h2&gt;
&lt;p&gt;You should use UTC time everywhere. Windows uses local time and it is terrible. Change this with a registry setting&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disable Internet Time on Windows 10
&lt;ul&gt;
&lt;li&gt;Head to Settings &amp;gt; Time &amp;amp; language and disable “Set time automatically”.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Modify Windows Registry to use UTC
&lt;ul&gt;
&lt;li&gt;Start - Run - &lt;code&gt;regedit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Navigate to &lt;code&gt;HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create new DWORD (32-bit) Value &lt;code&gt;RealTimeIsUniversal&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set Value to &lt;code&gt;1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;MacOS - OpenCore and Safety&lt;/h2&gt;
&lt;p&gt;Opencore is a completely open project and is safe. Here is the github of OpenCore where they expose all their code for review &lt;a href=&quot;https://github.com/acidanthera/OpenCorePkg&quot;&gt;https://github.com/acidanthera/OpenCorePkg&lt;/a&gt; and the complete install guide is here &lt;a href=&quot;https://dortania.github.io/OpenCore-Install-Guide/&quot;&gt;https://dortania.github.io/OpenCore-Install-Guide/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Linux Battery Life and Laptop Heat&lt;/h2&gt;
&lt;p&gt;There are a variety of packages you can use, but highly suggest two:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tlp&lt;/li&gt;
&lt;li&gt;xfce4-power-manager&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TLP will throttle your CPU and use less power and XFCE power manager will take care of brightness, suspend, and other power saving features as a standalone package even if you aren&apos;t using XFCE as a desktop environment.&lt;/p&gt;
&lt;h2&gt;MacOS - OpenCore Audio Issues&lt;/h2&gt;
&lt;p&gt;This typically comes from using two codecs or the wrong one. &lt;em&gt;Use ONLY ONE!&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AppleALC - &lt;a href=&quot;https://github.com/acidanthera/AppleALC&quot;&gt;https://github.com/acidanthera/AppleALC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;VoodooHDA - &lt;a href=&quot;https://sourceforge.net/projects/voodoohda/&quot;&gt;https://sourceforge.net/projects/voodoohda/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Linux - App won&apos;t launch it just disappears&lt;/h2&gt;
&lt;p&gt;Run Application in Terminal and look at the errors. Chances are it is missing a dependency.&lt;/p&gt;
&lt;h2&gt;Windows - &quot;these settings are managed by your organization&quot;&lt;/h2&gt;
&lt;p&gt;Chances are you ran a powershell script (maybe mine...) and you are now locked out of changing the lock screen on your Windows Box. Run this command in powershell to gain control of your lock screen again:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Remove-ItemProperty -Path &quot;HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization&quot; -Name &quot;NoLockScreen&quot; -ErrorAction SilentlyContinue
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;p&gt;You can also open up Start - Run - &lt;code&gt;gpedit.msc&lt;/code&gt; and then go to All Settings and look for enabled features and set them to &lt;em&gt;Not Configured&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Windows - Reinstall OneDrive&lt;/h2&gt;
&lt;p&gt;Open Up PowerShell Admin (Right Click Start Button)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;%systemroot%\SysWOW64\OneDriveSetup.exe
&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Fri, 28 Aug 2020 10:42:25 GMT</pubDate><content:encoded>&lt;p&gt;These are all the issues we discussed on a live stream. I took all the community questions and made this webpage for them.&lt;/p&gt;

&lt;h2&gt;Windows 10 - Automated Tasks&lt;/h2&gt;
&lt;p&gt;Q: How can I make a YouTube video sit there paused on someone&apos;s screen in Windows 10 and instantly start playing aloud upon unlocking the screen/waking from sleep?&lt;/p&gt;
&lt;p&gt;A: Task Scheduler can do all sorts of tasks and you can set the triggers to be on login or at certain times of the day.&lt;/p&gt;
&lt;h2&gt;Linux - Display Issues&lt;/h2&gt;
&lt;p&gt;Solution for Display constantly resetting or getting incorrectly configured&lt;/p&gt;
&lt;p&gt;3 Solutions (All will work)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Xorg Custom Settings
&lt;ul&gt;
&lt;li&gt;When display render is launched it will automatically configure each display to these specification from &lt;code&gt;/etc/X11/xorg.conf.d/10-monitor.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# /etc/X11/xorg.conf.d/10-monitor.conf
Section &quot;Monitor&quot;
### Monitor Identity - Typically HDMI-0 or DisplayPort-0
    Identifier    &quot;HDMI1&quot; 
    Option        &quot;PreferredMode&quot; &quot;1920x1080&quot;
    Option        &quot;TargetRefresh&quot; &quot;60&quot;

### Positioning the Monitor
## Basic
    Option &quot;LeftOf or RightOf or Above or Below&quot; &quot;DisplayPort-0&quot;    
## Advanced
    Option        &quot;Position&quot; &quot;1680 0&quot; #Note you can always set both to 0 0 to mirror
## Disable a Monitor
     Option        &quot;Disable&quot; &quot;true&quot;
EndSection 
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Autorandr - Automatic monitor settings
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/phillipberndt/autorandr&quot;&gt;https://github.com/phillipberndt/autorandr&lt;/a&gt; - This automatically selects a display configuration based on connected devices&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Xrandr Script
&lt;ul&gt;
&lt;li&gt;Make a custom bash script and set with login manager, cron job, or set in &lt;code&gt;~/.xinitrc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sample xrandr script:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
xrandr --output HDMI-1 --off --output HDMI-2 --auto
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: You can use the tool &lt;em&gt;arandr&lt;/em&gt; to grab the proper display script&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Windows/Linux/MacOS - Flashing Images to SD-Card or USB&lt;/h2&gt;
&lt;p&gt;There are so many solutions for this one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows - Rufus (&lt;a href=&quot;https://rufus.ie&quot;&gt;https://rufus.ie&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Windows/Linux/Mac - Etcher (&lt;a href=&quot;https://www.balena.io/etcher/&quot;&gt;https://www.balena.io/etcher/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Linux/Mac - &lt;code&gt;dd&lt;/code&gt; terminal command
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dd if=~/Downloads/image.iso of=/dev/sdx bs=1M&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;if = input file/device | of= output file/device | bs= block size&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Windows - Win32 Disk Imager &lt;a href=&quot;https://sourceforge.net/projects/win32diskimager/&quot;&gt;https://sourceforge.net/projects/win32diskimager/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;for images that aren&apos;t working or using special media like sd cards&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Linux - Boot Time High for KDE&lt;/h2&gt;
&lt;p&gt;Analyze systemd and figure out why... (&lt;code&gt;systemd-analyze&lt;/code&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;systemd-analyze blame
             10.667s apt-daily.service
              1.127s apt-daily-upgrade.service
              1.053s dev-mapper-neon\x2d\x2dvg\x2droot.device
               793ms lvm2-pvscan@8:3.service
               622ms boot.mount
               613ms snapd.service
               267ms minidlna.service
               217ms NetworkManager.service
               200ms nvidia-persistenced.service
               196ms upower.service
               189ms systemd-logind.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Also try &lt;code&gt;systemd-analyze critical-chain&lt;/code&gt; or &lt;code&gt;systemd-analyze plot &amp;gt; boot.svg&lt;/code&gt; as this shows the chain of the startup&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Linux - USB Port stops working&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Check to see if device shows on &lt;code&gt;lsusb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check dmesg for errors &lt;code&gt;dmesg | grep -i USB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;usb-devices&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Disable Auto Suspend
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cat /sys/module/usbcore/parameters/autosuspend&lt;/code&gt; result should be &lt;code&gt;2&lt;/code&gt; which means enabled&lt;/li&gt;
&lt;li&gt;Modify Grub or bootloader to disable auto suspend (for grub modify &lt;code&gt;/etc/default/grub&lt;/code&gt;)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet splash usbcore.autosuspend=-1&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo update-grub&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Verify by running cat command again&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Linux - Fixing No Display Drivers or Black Screen or Missing Desktop Environment&lt;/h2&gt;
&lt;p&gt;Ctrl + Alt + F1 or F2&lt;/p&gt;
&lt;p&gt;This drops you to TTY and no display drivers are needed. From this console you can fix things by installing display drivers or missing packages you need.&lt;/p&gt;
&lt;h2&gt;All Computers - Can&apos;t Get into BIOS&lt;/h2&gt;
&lt;p&gt;Open it up and remove the CMOS Battery. Press the power button without it plugged in to fully discharge. Then wait 60 seconds and put CMOS battery back in.&lt;/p&gt;
&lt;h2&gt;General PC Maintenance - Updates &amp;amp; Shuting them down&lt;/h2&gt;
&lt;p&gt;Updates should be done weekly with security only one applied. Feature Updates should be delayed at least 1 year. This is universal across all operating systems. I also recommend shutting down your PC every day and not using suspend/hibernate. If you want to schedule the updates you can leave your PC once a week overnight.&lt;/p&gt;
&lt;h2&gt;Windows/Linux - Time Maintenance&lt;/h2&gt;
&lt;p&gt;You should use UTC time everywhere. Windows uses local time and it is terrible. Change this with a registry setting&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disable Internet Time on Windows 10
&lt;ul&gt;
&lt;li&gt;Head to Settings &amp;gt; Time &amp;amp; language and disable “Set time automatically”.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Modify Windows Registry to use UTC
&lt;ul&gt;
&lt;li&gt;Start - Run - &lt;code&gt;regedit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Navigate to &lt;code&gt;HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create new DWORD (32-bit) Value &lt;code&gt;RealTimeIsUniversal&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set Value to &lt;code&gt;1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;MacOS - OpenCore and Safety&lt;/h2&gt;
&lt;p&gt;Opencore is a completely open project and is safe. Here is the github of OpenCore where they expose all their code for review &lt;a href=&quot;https://github.com/acidanthera/OpenCorePkg&quot;&gt;https://github.com/acidanthera/OpenCorePkg&lt;/a&gt; and the complete install guide is here &lt;a href=&quot;https://dortania.github.io/OpenCore-Install-Guide/&quot;&gt;https://dortania.github.io/OpenCore-Install-Guide/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Linux Battery Life and Laptop Heat&lt;/h2&gt;
&lt;p&gt;There are a variety of packages you can use, but highly suggest two:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tlp&lt;/li&gt;
&lt;li&gt;xfce4-power-manager&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TLP will throttle your CPU and use less power and XFCE power manager will take care of brightness, suspend, and other power saving features as a standalone package even if you aren&apos;t using XFCE as a desktop environment.&lt;/p&gt;
&lt;h2&gt;MacOS - OpenCore Audio Issues&lt;/h2&gt;
&lt;p&gt;This typically comes from using two codecs or the wrong one. &lt;em&gt;Use ONLY ONE!&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AppleALC - &lt;a href=&quot;https://github.com/acidanthera/AppleALC&quot;&gt;https://github.com/acidanthera/AppleALC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;VoodooHDA - &lt;a href=&quot;https://sourceforge.net/projects/voodoohda/&quot;&gt;https://sourceforge.net/projects/voodoohda/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Linux - App won&apos;t launch it just disappears&lt;/h2&gt;
&lt;p&gt;Run Application in Terminal and look at the errors. Chances are it is missing a dependency.&lt;/p&gt;
&lt;h2&gt;Windows - &quot;these settings are managed by your organization&quot;&lt;/h2&gt;
&lt;p&gt;Chances are you ran a powershell script (maybe mine...) and you are now locked out of changing the lock screen on your Windows Box. Run this command in powershell to gain control of your lock screen again:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Remove-ItemProperty -Path &quot;HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization&quot; -Name &quot;NoLockScreen&quot; -ErrorAction SilentlyContinue
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;p&gt;You can also open up Start - Run - &lt;code&gt;gpedit.msc&lt;/code&gt; and then go to All Settings and look for enabled features and set them to &lt;em&gt;Not Configured&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Windows - Reinstall OneDrive&lt;/h2&gt;
&lt;p&gt;Open Up PowerShell Admin (Right Click Start Button)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;%systemroot%\SysWOW64\OneDriveSetup.exe
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Change your Desktop Wallpaper</title><link>https://christitus.com/change-wallpaper/</link><guid isPermaLink="true">https://christitus.com/change-wallpaper/</guid><description>&lt;p&gt;This article shows you how to automatically change your wallpaper on Windows, macOS, and Linux.
To get the greatest variety and the highest quality it is best to use reddit as the voting system and variety ensure both these goals are met.&lt;/p&gt;
&lt;h2&gt;Change Wallpaper in Windows&lt;/h2&gt;
&lt;p&gt;GitHub Project: &lt;a href=&quot;https://github.com/Rawns/Reddit-Wallpaper-Changer&quot;&gt;https://github.com/Rawns/Reddit-Wallpaper-Changer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From the Releases Tab on GitHub download the latest version and install it.&lt;/p&gt;
&lt;p&gt;Here are the settings I recommend using:&lt;br /&gt;
&lt;img src=&quot;/images/2020/wallpaper/wall-settings-w10.webp&quot; alt=&quot;win10-wallsettings&quot; /&gt;&lt;/p&gt;
&lt;p&gt;There is also an option to save all wallpapers locally. I like to save all downloaded wallpapers for future reference or build and offline repository.&lt;/p&gt;
&lt;h2&gt;Change Wallpaper in Mac OS&lt;/h2&gt;
&lt;p&gt;GitHub Project: &lt;a href=&quot;https://github.com/ChrisTitusTech/wallpaper-reddit&quot;&gt;https://github.com/ChrisTitusTech/wallpaper-reddit&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Install MacOS Dependancies&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;xcode-select --install
sudo easy_install pip
sudo pip install --upgrade pip
pip install pillow
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Needed Desktop Wallpaper Script Package&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Install Swift Tools on MacOS 13 (Required for High Sierra or Earlier) - &lt;a href=&quot;https://support.apple.com/kb/DL1998&quot;&gt;https://support.apple.com/kb/DL1998&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Script for Changing MacOS Wallpaper - &lt;a href=&quot;https://github.com/scriptingosx/desktoppr/releases&quot;&gt;https://github.com/scriptingosx/desktoppr/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Install MacOS Program&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cd ~
git clone https://github.com/ChrisTitusTech/wallpaper-reddit.git
cd wallpaper-reddit
sudo python3 setup.py install
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;MacOS Usage&lt;/h3&gt;
&lt;p&gt;You can run this anytime by typing in terminal &lt;code&gt;wallpaper-reddit [subreddits]&lt;/code&gt;&lt;br /&gt;
Binaries are located at &lt;code&gt;/usr/local/bin/wallpaper-reddit&lt;/code&gt;
Config files are located at &lt;code&gt;~/.config/wallpaper-reddit&lt;/code&gt;
Syntax Help &lt;code&gt;wallpaper-reddit --help&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Running on macOS Startup&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Start Automator&lt;/li&gt;
&lt;li&gt;Create New Task: File -&amp;gt; New&lt;/li&gt;
&lt;li&gt;Select &quot;Application&quot;
&lt;ul&gt;
&lt;li&gt;Click &quot;Show library&quot; in the toolbar (if hidden)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add &quot;Run shell script&quot; (from the Actions/Utilities)
&lt;ul&gt;
&lt;li&gt;Copy-and-paste your script into the window and Run- &lt;em&gt;Note: I used desktoppr to force wallpaper if script fails&lt;/em&gt;
&lt;img src=&quot;/images/2020/wallpaper/macos-automator.webp&quot; alt=&quot;automator&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;/usr/local/bin/wallpaper-reddit --startup
/usr/local/bin/desktoppr ~/Pictures/Wallpapers/wallpaper.webp
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Save it somewhere: a file called your_name.app will be created)&lt;/li&gt;
&lt;li&gt;Go to System Preferences → Users and Groups → Login items&lt;/li&gt;
&lt;li&gt;Add this newly-created app&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Change Wallpaper in Linux&lt;/h2&gt;
&lt;p&gt;GitHub Project: &lt;a href=&quot;https://github.com/ChrisTitusTech/wallpaper-reddit&quot;&gt;https://github.com/ChrisTitusTech/wallpaper-reddit&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Install Linux Dependancies&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu/Linux Mint/ElementaryOS: &lt;code&gt;sudo apt-get install python3-dev python3-setuptools libjpeg8-dev zlib1g-dev libfreetype6-dev&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fedora: &lt;code&gt;sudo dnf install python3-imaging&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Arch: &lt;code&gt;sudo pacman -S python-pillow&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Install Linux Program&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cd ~
git clone https://github.com/ChrisTitusTech/wallpaper-reddit.git
cd wallpaper-reddit
sudo python3 setup.py install
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Linux Usage&lt;/h3&gt;
&lt;p&gt;You can run this anytime by typing in terminal &lt;code&gt;wallpaper-reddit [subreddits]&lt;/code&gt;&lt;br /&gt;
Binaries are located at &lt;code&gt;/usr/local/bin/wallpaper-reddit&lt;/code&gt;
Config files are located at &lt;code&gt;~/.config/wallpaper-reddit&lt;/code&gt;
Syntax Help &lt;code&gt;wallpaper-reddit --help&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Running on Linux Startup&lt;/h3&gt;
&lt;p&gt;There is plenty of ways to have this automatically change the wallpaper on startup, however, I like to use the method by adding it at the &lt;code&gt;/etc/profile&lt;/code&gt; EOF (End of File). Here is an example.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/usr/local/bin/wallpaper-reddit --save
/usr/local/bin/wallpaper-reddit --startup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;--save&lt;/code&gt; &lt;em&gt;option flag will save the current wallpaper to the default directory in the config file (&lt;code&gt;~/Pictures/Wallpapers/&lt;/code&gt;). Remove this line if you don&apos;t want to save past wallpapers.&lt;/em&gt;
&lt;code&gt;--startup&lt;/code&gt; &lt;em&gt;option flag will wait til internet access is established and then download the wallpaper from reddit&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Wallpaper-reddit Config File Settings&lt;/h2&gt;
&lt;p&gt;The config file is in &lt;code&gt;~/.config/wallpaper-reddit&lt;/code&gt;, and will be created automatically. Currently, the GNOME, XFCE, MATE, Unity, and Cinnamon Desktop Environments should be automatically detected and the program should set the wallpaper without any extra work. However, due to the varying nature of window managers, it is possible, even likely, that you may have to specify a custom command to set your wallpaper. The program will prompt you for this if this is the case; the exact command can be researched per desktop environment. If your desktop environment is not supported, leave the set command blank and it will auto download to the &lt;code&gt;~/Pictures/Wallpapers/&lt;/code&gt; directory as wallpaper.webp for the daily wallpaper.&lt;/p&gt;
&lt;h3&gt;Config Options&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;minwidth&lt;/code&gt; and &lt;code&gt;minheight&lt;/code&gt; set the minimum dimensions the program will consider a valid candidate for a wallpaper. If &lt;code&gt;--resize&lt;/code&gt; is enabled, the script will resize the image to those dimensions before setting the wallpaper.
&lt;code&gt;minratio&lt;/code&gt; is the minimal aspect ratio of the image. It is a float value of width/height of the image, for example 1.6 for 16:9 image.
&lt;code&gt;maxlinks&lt;/code&gt; is the maximum number of links the script will go through before giving up.
&lt;code&gt;resize&lt;/code&gt; does the same thing as the &lt;code&gt;--resize&lt;/code&gt; flag. It is enabled by default.
&lt;code&gt;random&lt;/code&gt; does the same thing as the &lt;code&gt;--random&lt;/code&gt; flag.&lt;/p&gt;
&lt;h2&gt;Recommended Wallpaper Subreddits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;EarthPorn&lt;/li&gt;
&lt;li&gt;CityPorn&lt;/li&gt;
&lt;li&gt;SkyPorn&lt;/li&gt;
&lt;li&gt;WeatherPorn&lt;/li&gt;
&lt;li&gt;BotanicalPorn&lt;/li&gt;
&lt;li&gt;LakePorn&lt;/li&gt;
&lt;li&gt;VillagePorn&lt;/li&gt;
&lt;li&gt;BeachPorn&lt;/li&gt;
&lt;li&gt;WaterPorn&lt;/li&gt;
&lt;li&gt;SpacePorn&lt;/li&gt;
&lt;li&gt;multiwall&lt;/li&gt;
&lt;li&gt;wallpapers&lt;/li&gt;
&lt;li&gt;wallpaper&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Wed, 08 Jul 2020 19:52:13 GMT</pubDate><content:encoded>&lt;p&gt;This article shows you how to automatically change your wallpaper on Windows, macOS, and Linux.
To get the greatest variety and the highest quality it is best to use reddit as the voting system and variety ensure both these goals are met.&lt;/p&gt;
&lt;h2&gt;Change Wallpaper in Windows&lt;/h2&gt;
&lt;p&gt;GitHub Project: &lt;a href=&quot;https://github.com/Rawns/Reddit-Wallpaper-Changer&quot;&gt;https://github.com/Rawns/Reddit-Wallpaper-Changer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From the Releases Tab on GitHub download the latest version and install it.&lt;/p&gt;
&lt;p&gt;Here are the settings I recommend using:&lt;br /&gt;
&lt;img src=&quot;/images/2020/wallpaper/wall-settings-w10.webp&quot; alt=&quot;win10-wallsettings&quot; /&gt;&lt;/p&gt;
&lt;p&gt;There is also an option to save all wallpapers locally. I like to save all downloaded wallpapers for future reference or build and offline repository.&lt;/p&gt;
&lt;h2&gt;Change Wallpaper in Mac OS&lt;/h2&gt;
&lt;p&gt;GitHub Project: &lt;a href=&quot;https://github.com/ChrisTitusTech/wallpaper-reddit&quot;&gt;https://github.com/ChrisTitusTech/wallpaper-reddit&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Install MacOS Dependancies&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;xcode-select --install
sudo easy_install pip
sudo pip install --upgrade pip
pip install pillow
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Needed Desktop Wallpaper Script Package&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Install Swift Tools on MacOS 13 (Required for High Sierra or Earlier) - &lt;a href=&quot;https://support.apple.com/kb/DL1998&quot;&gt;https://support.apple.com/kb/DL1998&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Script for Changing MacOS Wallpaper - &lt;a href=&quot;https://github.com/scriptingosx/desktoppr/releases&quot;&gt;https://github.com/scriptingosx/desktoppr/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Install MacOS Program&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cd ~
git clone https://github.com/ChrisTitusTech/wallpaper-reddit.git
cd wallpaper-reddit
sudo python3 setup.py install
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;MacOS Usage&lt;/h3&gt;
&lt;p&gt;You can run this anytime by typing in terminal &lt;code&gt;wallpaper-reddit [subreddits]&lt;/code&gt;&lt;br /&gt;
Binaries are located at &lt;code&gt;/usr/local/bin/wallpaper-reddit&lt;/code&gt;
Config files are located at &lt;code&gt;~/.config/wallpaper-reddit&lt;/code&gt;
Syntax Help &lt;code&gt;wallpaper-reddit --help&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Running on macOS Startup&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Start Automator&lt;/li&gt;
&lt;li&gt;Create New Task: File -&amp;gt; New&lt;/li&gt;
&lt;li&gt;Select &quot;Application&quot;
&lt;ul&gt;
&lt;li&gt;Click &quot;Show library&quot; in the toolbar (if hidden)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add &quot;Run shell script&quot; (from the Actions/Utilities)
&lt;ul&gt;
&lt;li&gt;Copy-and-paste your script into the window and Run- &lt;em&gt;Note: I used desktoppr to force wallpaper if script fails&lt;/em&gt;
&lt;img src=&quot;/images/2020/wallpaper/macos-automator.webp&quot; alt=&quot;automator&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;/usr/local/bin/wallpaper-reddit --startup
/usr/local/bin/desktoppr ~/Pictures/Wallpapers/wallpaper.webp
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Save it somewhere: a file called your_name.app will be created)&lt;/li&gt;
&lt;li&gt;Go to System Preferences → Users and Groups → Login items&lt;/li&gt;
&lt;li&gt;Add this newly-created app&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Change Wallpaper in Linux&lt;/h2&gt;
&lt;p&gt;GitHub Project: &lt;a href=&quot;https://github.com/ChrisTitusTech/wallpaper-reddit&quot;&gt;https://github.com/ChrisTitusTech/wallpaper-reddit&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Install Linux Dependancies&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu/Linux Mint/ElementaryOS: &lt;code&gt;sudo apt-get install python3-dev python3-setuptools libjpeg8-dev zlib1g-dev libfreetype6-dev&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fedora: &lt;code&gt;sudo dnf install python3-imaging&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Arch: &lt;code&gt;sudo pacman -S python-pillow&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Install Linux Program&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cd ~
git clone https://github.com/ChrisTitusTech/wallpaper-reddit.git
cd wallpaper-reddit
sudo python3 setup.py install
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Linux Usage&lt;/h3&gt;
&lt;p&gt;You can run this anytime by typing in terminal &lt;code&gt;wallpaper-reddit [subreddits]&lt;/code&gt;&lt;br /&gt;
Binaries are located at &lt;code&gt;/usr/local/bin/wallpaper-reddit&lt;/code&gt;
Config files are located at &lt;code&gt;~/.config/wallpaper-reddit&lt;/code&gt;
Syntax Help &lt;code&gt;wallpaper-reddit --help&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Running on Linux Startup&lt;/h3&gt;
&lt;p&gt;There is plenty of ways to have this automatically change the wallpaper on startup, however, I like to use the method by adding it at the &lt;code&gt;/etc/profile&lt;/code&gt; EOF (End of File). Here is an example.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/usr/local/bin/wallpaper-reddit --save
/usr/local/bin/wallpaper-reddit --startup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;--save&lt;/code&gt; &lt;em&gt;option flag will save the current wallpaper to the default directory in the config file (&lt;code&gt;~/Pictures/Wallpapers/&lt;/code&gt;). Remove this line if you don&apos;t want to save past wallpapers.&lt;/em&gt;
&lt;code&gt;--startup&lt;/code&gt; &lt;em&gt;option flag will wait til internet access is established and then download the wallpaper from reddit&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Wallpaper-reddit Config File Settings&lt;/h2&gt;
&lt;p&gt;The config file is in &lt;code&gt;~/.config/wallpaper-reddit&lt;/code&gt;, and will be created automatically. Currently, the GNOME, XFCE, MATE, Unity, and Cinnamon Desktop Environments should be automatically detected and the program should set the wallpaper without any extra work. However, due to the varying nature of window managers, it is possible, even likely, that you may have to specify a custom command to set your wallpaper. The program will prompt you for this if this is the case; the exact command can be researched per desktop environment. If your desktop environment is not supported, leave the set command blank and it will auto download to the &lt;code&gt;~/Pictures/Wallpapers/&lt;/code&gt; directory as wallpaper.webp for the daily wallpaper.&lt;/p&gt;
&lt;h3&gt;Config Options&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;minwidth&lt;/code&gt; and &lt;code&gt;minheight&lt;/code&gt; set the minimum dimensions the program will consider a valid candidate for a wallpaper. If &lt;code&gt;--resize&lt;/code&gt; is enabled, the script will resize the image to those dimensions before setting the wallpaper.
&lt;code&gt;minratio&lt;/code&gt; is the minimal aspect ratio of the image. It is a float value of width/height of the image, for example 1.6 for 16:9 image.
&lt;code&gt;maxlinks&lt;/code&gt; is the maximum number of links the script will go through before giving up.
&lt;code&gt;resize&lt;/code&gt; does the same thing as the &lt;code&gt;--resize&lt;/code&gt; flag. It is enabled by default.
&lt;code&gt;random&lt;/code&gt; does the same thing as the &lt;code&gt;--random&lt;/code&gt; flag.&lt;/p&gt;
&lt;h2&gt;Recommended Wallpaper Subreddits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;EarthPorn&lt;/li&gt;
&lt;li&gt;CityPorn&lt;/li&gt;
&lt;li&gt;SkyPorn&lt;/li&gt;
&lt;li&gt;WeatherPorn&lt;/li&gt;
&lt;li&gt;BotanicalPorn&lt;/li&gt;
&lt;li&gt;LakePorn&lt;/li&gt;
&lt;li&gt;VillagePorn&lt;/li&gt;
&lt;li&gt;BeachPorn&lt;/li&gt;
&lt;li&gt;WaterPorn&lt;/li&gt;
&lt;li&gt;SpacePorn&lt;/li&gt;
&lt;li&gt;multiwall&lt;/li&gt;
&lt;li&gt;wallpapers&lt;/li&gt;
&lt;li&gt;wallpaper&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Opencore Mac</title><link>https://christitus.com/opencore-mac/</link><guid isPermaLink="true">https://christitus.com/opencore-mac/</guid><description>&lt;p&gt;This goes over how to install macOS on pretty much any piece of hardware. OpenCore is a relatively young project, but is by far my favorite. It teaches you the proper way to setup your system to work long term in the macOS ecosystem.&lt;/p&gt;
&lt;h2&gt;OpenCore Wiki&lt;/h2&gt;
&lt;p&gt;Source for the content in this post is from &lt;a href=&quot;https://dortania.github.io/&quot;&gt;https://dortania.github.io/&lt;/a&gt;.&lt;br /&gt;
This knowledge base is fantastic for any information I glaze over or troubleshooting that isn&apos;t covered. It is much more indepth than this article, but can be confusing in parts. This article is meant to get you acquainted with OpenCore and fill in any missing gaps.&lt;/p&gt;
&lt;h2&gt;Why I Use OpenCore?&lt;/h2&gt;
&lt;p&gt;I use opencore for compatibility and everything can be setup in a non macOS environment. It also injects drivers support (kext) differently than past methods and is far more stable.
This also means updates are far less likely to break your system and boot times are just as fast as a regular mac, if not faster.
I also find a larger amount of hardware is supported and the finished product is all contained neatly in an EFI partition.&lt;/p&gt;
&lt;h2&gt;Hardware Compatibility&lt;/h2&gt;
&lt;p&gt;Even with OpenCore supporting a lot more hardware there is still some hardware that simply will not work on macOS no matter what you do. Here is a definitive guide &lt;a href=&quot;https://dortania.github.io/Anti-Hackintosh-Buyers-Guide/&quot;&gt;https://dortania.github.io/Anti-Hackintosh-Buyers-Guide/&lt;/a&gt;.
The TLDR of that guide is the last two generations of nVidia Graphics Cards and future nVidia Cards are not compatible, and even old nVidia cards will not work past High Sierra (10.13.x). Also, almost every Intel Wireless card will not function properly or work at all. So buying a replacement is needed for laptops.
AMD CPUs can technically work, but will require more tinkering and are more difficult than the Intel counterparts.&lt;/p&gt;
&lt;h2&gt;Files and Projects you need to download and what they do&lt;/h2&gt;
&lt;p&gt;Here is a list of all the files and GitHub projects that are used for OpenCore.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenCore GitHub (Base Project) - &lt;a href=&quot;https://github.com/acidanthera/OpenCorePkg/releases&quot;&gt;https://github.com/acidanthera/OpenCorePkg/releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;All Drivers, Kexts, and SSDTs - &lt;a href=&quot;https://dortania.github.io/OpenCore-Install-Guide/ktext.html&quot;&gt;https://dortania.github.io/OpenCore-Install-Guide/ktext.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitMacOS GitHub (Download Official Apple PKGs) - &lt;a href=&quot;https://github.com/corpnewt/gibMacOS&quot;&gt;https://github.com/corpnewt/gibMacOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ProperTree (config.plist editing) - &lt;a href=&quot;https://github.com/corpnewt/ProperTree&quot;&gt;https://github.com/corpnewt/ProperTree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SSDTTime (DSDT Dump and SSDT creation) - &lt;a href=&quot;https://github.com/corpnewt/SSDTTime&quot;&gt;https://github.com/corpnewt/SSDTTime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GenSMBIOS (Generate Serial and UUID) - &lt;a href=&quot;https://github.com/corpnewt/GenSMBIOS&quot;&gt;https://github.com/corpnewt/GenSMBIOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Checklist for &lt;a href=&quot;https://dortania.github.io/OpenCore-Install-Guide/&quot;&gt;https://dortania.github.io/OpenCore-Install-Guide/&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Check Hardware Compatibility - Document all device IDs and firmware&lt;/li&gt;
&lt;li&gt;Download All Projects and Files&lt;/li&gt;
&lt;li&gt;Boot Into Linux and do a DSDT dump followed by creating SSDT files for your computer (DO NOT USE PREBUILT!)&lt;/li&gt;
&lt;li&gt;Delete all files that your system doesn&apos;t need&lt;/li&gt;
&lt;li&gt;Put all Your Drivers in the EFI Folder &lt;em&gt;Note: I swapped AppleHDA for VoodooHDA on an old sound card. Do NOT just put every kext you find in one folder.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Build config.plist and configure EVERY SINGLE Fold in the config.plist file to your computers specifications&lt;/li&gt;
&lt;li&gt;Boot to Installer! &lt;em&gt;Note: This will probably fail the first couple times, it is very important to follow the config.plist guide and full auditing enabled&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
</description><pubDate>Sun, 28 Jun 2020 00:44:42 GMT</pubDate><content:encoded>&lt;p&gt;This goes over how to install macOS on pretty much any piece of hardware. OpenCore is a relatively young project, but is by far my favorite. It teaches you the proper way to setup your system to work long term in the macOS ecosystem.&lt;/p&gt;
&lt;h2&gt;OpenCore Wiki&lt;/h2&gt;
&lt;p&gt;Source for the content in this post is from &lt;a href=&quot;https://dortania.github.io/&quot;&gt;https://dortania.github.io/&lt;/a&gt;.&lt;br /&gt;
This knowledge base is fantastic for any information I glaze over or troubleshooting that isn&apos;t covered. It is much more indepth than this article, but can be confusing in parts. This article is meant to get you acquainted with OpenCore and fill in any missing gaps.&lt;/p&gt;
&lt;h2&gt;Why I Use OpenCore?&lt;/h2&gt;
&lt;p&gt;I use opencore for compatibility and everything can be setup in a non macOS environment. It also injects drivers support (kext) differently than past methods and is far more stable.
This also means updates are far less likely to break your system and boot times are just as fast as a regular mac, if not faster.
I also find a larger amount of hardware is supported and the finished product is all contained neatly in an EFI partition.&lt;/p&gt;
&lt;h2&gt;Hardware Compatibility&lt;/h2&gt;
&lt;p&gt;Even with OpenCore supporting a lot more hardware there is still some hardware that simply will not work on macOS no matter what you do. Here is a definitive guide &lt;a href=&quot;https://dortania.github.io/Anti-Hackintosh-Buyers-Guide/&quot;&gt;https://dortania.github.io/Anti-Hackintosh-Buyers-Guide/&lt;/a&gt;.
The TLDR of that guide is the last two generations of nVidia Graphics Cards and future nVidia Cards are not compatible, and even old nVidia cards will not work past High Sierra (10.13.x). Also, almost every Intel Wireless card will not function properly or work at all. So buying a replacement is needed for laptops.
AMD CPUs can technically work, but will require more tinkering and are more difficult than the Intel counterparts.&lt;/p&gt;
&lt;h2&gt;Files and Projects you need to download and what they do&lt;/h2&gt;
&lt;p&gt;Here is a list of all the files and GitHub projects that are used for OpenCore.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenCore GitHub (Base Project) - &lt;a href=&quot;https://github.com/acidanthera/OpenCorePkg/releases&quot;&gt;https://github.com/acidanthera/OpenCorePkg/releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;All Drivers, Kexts, and SSDTs - &lt;a href=&quot;https://dortania.github.io/OpenCore-Install-Guide/ktext.html&quot;&gt;https://dortania.github.io/OpenCore-Install-Guide/ktext.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitMacOS GitHub (Download Official Apple PKGs) - &lt;a href=&quot;https://github.com/corpnewt/gibMacOS&quot;&gt;https://github.com/corpnewt/gibMacOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ProperTree (config.plist editing) - &lt;a href=&quot;https://github.com/corpnewt/ProperTree&quot;&gt;https://github.com/corpnewt/ProperTree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SSDTTime (DSDT Dump and SSDT creation) - &lt;a href=&quot;https://github.com/corpnewt/SSDTTime&quot;&gt;https://github.com/corpnewt/SSDTTime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GenSMBIOS (Generate Serial and UUID) - &lt;a href=&quot;https://github.com/corpnewt/GenSMBIOS&quot;&gt;https://github.com/corpnewt/GenSMBIOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Checklist for &lt;a href=&quot;https://dortania.github.io/OpenCore-Install-Guide/&quot;&gt;https://dortania.github.io/OpenCore-Install-Guide/&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Check Hardware Compatibility - Document all device IDs and firmware&lt;/li&gt;
&lt;li&gt;Download All Projects and Files&lt;/li&gt;
&lt;li&gt;Boot Into Linux and do a DSDT dump followed by creating SSDT files for your computer (DO NOT USE PREBUILT!)&lt;/li&gt;
&lt;li&gt;Delete all files that your system doesn&apos;t need&lt;/li&gt;
&lt;li&gt;Put all Your Drivers in the EFI Folder &lt;em&gt;Note: I swapped AppleHDA for VoodooHDA on an old sound card. Do NOT just put every kext you find in one folder.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Build config.plist and configure EVERY SINGLE Fold in the config.plist file to your computers specifications&lt;/li&gt;
&lt;li&gt;Boot to Installer! &lt;em&gt;Note: This will probably fail the first couple times, it is very important to follow the config.plist guide and full auditing enabled&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>Zsh</title><link>https://christitus.com/zsh/</link><guid isPermaLink="true">https://christitus.com/zsh/</guid><description>&lt;p&gt;In this article, I go over my implementation of ZSH, which is a better shell alternative to BASH.&lt;/p&gt;

&lt;h2&gt;Why ZSH?&lt;/h2&gt;
&lt;p&gt;ZSH is an amazing shell that just makes everything a bit easier from auto suggestions, completing tasks you do regularly considerably faster.&lt;/p&gt;
&lt;h2&gt;Before you Begin: Dependencies&lt;/h2&gt;
&lt;p&gt;I built a resource for those starting out with my Github @ &lt;a href=&quot;https://github.com/ChrisTitusTech/zsh&quot;&gt;https://github.com/ChrisTitusTech/zsh&lt;/a&gt; and will be using many files from the project.&lt;/p&gt;
&lt;p&gt;Packages needed before you start:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;zsh - ZSH Shell&lt;/li&gt;
&lt;li&gt;zsh-syntax-highlighting - syntax highlighting for ZSH in standard repos&lt;/li&gt;
&lt;li&gt;autojump - jump to directories with j or jc for child or jo to open in file manager&lt;/li&gt;
&lt;li&gt;zsh-autosuggestions - Suggestions based on your history&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Initial Setup of ZSH&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;touch &quot;$HOME/.cache/zshhistory&quot;
#-- Setup Alias in $HOME/zsh/aliasrc
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo &apos;source ~/powerlevel10k/powerlevel10k.zsh-theme&apos; &amp;gt;&amp;gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Complete Switch from BASH to ZSH&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;chsh $USER
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Then type &lt;code&gt;/bin/zsh&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;OR&lt;/em&gt; Edit &lt;code&gt;/etc/passwd&lt;/code&gt; and change /bin/bash to /bin/zsh&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/zsh-passwd.webp&quot; alt=&quot;ZSH Switch&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/gGmBUfMaWMU&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Wed, 19 Feb 2020 18:32:44 GMT</pubDate><content:encoded>&lt;p&gt;In this article, I go over my implementation of ZSH, which is a better shell alternative to BASH.&lt;/p&gt;

&lt;h2&gt;Why ZSH?&lt;/h2&gt;
&lt;p&gt;ZSH is an amazing shell that just makes everything a bit easier from auto suggestions, completing tasks you do regularly considerably faster.&lt;/p&gt;
&lt;h2&gt;Before you Begin: Dependencies&lt;/h2&gt;
&lt;p&gt;I built a resource for those starting out with my Github @ &lt;a href=&quot;https://github.com/ChrisTitusTech/zsh&quot;&gt;https://github.com/ChrisTitusTech/zsh&lt;/a&gt; and will be using many files from the project.&lt;/p&gt;
&lt;p&gt;Packages needed before you start:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;zsh - ZSH Shell&lt;/li&gt;
&lt;li&gt;zsh-syntax-highlighting - syntax highlighting for ZSH in standard repos&lt;/li&gt;
&lt;li&gt;autojump - jump to directories with j or jc for child or jo to open in file manager&lt;/li&gt;
&lt;li&gt;zsh-autosuggestions - Suggestions based on your history&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Initial Setup of ZSH&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;touch &quot;$HOME/.cache/zshhistory&quot;
#-- Setup Alias in $HOME/zsh/aliasrc
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo &apos;source ~/powerlevel10k/powerlevel10k.zsh-theme&apos; &amp;gt;&amp;gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Complete Switch from BASH to ZSH&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;chsh $USER
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Then type &lt;code&gt;/bin/zsh&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;OR&lt;/em&gt; Edit &lt;code&gt;/etc/passwd&lt;/code&gt; and change /bin/bash to /bin/zsh&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/zsh-passwd.webp&quot; alt=&quot;ZSH Switch&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/gGmBUfMaWMU&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Hackintosh Ryzen Install</title><link>https://christitus.com/hackintosh-ryzen-install/</link><guid isPermaLink="true">https://christitus.com/hackintosh-ryzen-install/</guid><description>&lt;p&gt;Here is the basic install instruction for the Hackintosh Ryzen install that I used on my Ryzen 2700 with an RX 580. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/usb-drive.webp&quot; alt=&quot;usb-drive&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Download DMG File for Flash Drive&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The original XLNC forum post and Clover/Enoch downloads are no longer
available. This 2019 guide is preserved for historical reference. For a
current approach, use &lt;a href=&quot;https://dortania.github.io/OpenCore-Install-Guide/&quot;&gt;Dortania&apos;s OpenCore Install Guide&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Burn DMG File with TransMac (Windows) or DD (Linux)&lt;/h2&gt;
&lt;h3&gt;TransMac Download (Windows) &lt;a href=&quot;https://www.acutesystems.com/scrtm.htm&quot;&gt;https://www.acutesystems.com/scrtm.htm&lt;/a&gt;&lt;/h3&gt;
&lt;h3&gt;DD (Linux)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install DMG2IMG &lt;code&gt;$ sudo apt install dmg2img&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ sudo dmg2img macoshs_download.dmg macoshs_drive.iso&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ sudo dd if=macoshs_drive.iso of=/dev/sdX bs=1M&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/bios-1.webp&quot; alt=&quot;bios-1&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Change Your PC’s BIOS Settings for your Hackintosh Ryzen Install&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;HPET (High Precision Timers) =Enabled&lt;/li&gt;
&lt;li&gt;SATA Mode = AHCI&lt;/li&gt;
&lt;li&gt;Execute Disable Bit = Enabled&lt;/li&gt;
&lt;li&gt;Max CPUID Value Limit = Disabled&lt;/li&gt;
&lt;li&gt;BIOS EHCI Handoff = Enabled&lt;/li&gt;
&lt;li&gt;Legacy USB Support = Enabled&lt;/li&gt;
&lt;li&gt;CSM (Legacy BIOS Mode) = Disabled&lt;/li&gt;
&lt;li&gt;UEFI options should be enabled&lt;/li&gt;
&lt;li&gt;XHCI and EHCI Hand-Off = Enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/MacOSX.webp&quot; alt=&quot;MacOSX&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Insert Media and Start Installation&lt;/h2&gt;
&lt;p&gt;Boot into macOS by using the USB media. Once in the launcher start disk utility and partition the disk for macOS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/diskutility.webp&quot; alt=&quot;diskutility&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once you have partitioned your drive, you will need to go ahead and continue the installation. Complete the installation and reboot your PC.&lt;/p&gt;
&lt;p&gt;Launch back into the USB Drive Installer and this time we will launch terminal. From Terminal we will run the command &lt;strong&gt;XLNC&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/xlnc.webp&quot; alt=&quot;xlnc&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Select the following options when the XLNC installer pops up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bronya&lt;/li&gt;
&lt;li&gt;Post Install
&lt;ul&gt;
&lt;li&gt;Type: YourDiskName&lt;/li&gt;
&lt;li&gt;y to all the following questions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Reboot again, but this time when we launch the USB Menu, we will launch into the macOS we just created&lt;/p&gt;
&lt;p&gt;Setup your Mac with your account and details&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/clover.webp&quot; alt=&quot;clover&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Download the Clover Configurator Utility
&lt;a href=&quot;https://mackie100projects.altervista.org/download-clover-configurator/&quot;&gt;https://mackie100projects.altervista.org/download-clover-configurator/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mount both the EFI partition from the USB and the Recovery HD&lt;/p&gt;
&lt;p&gt;Copy the EFI Folder from the USB to the Recovery HD and then unmount both partitions and reboot your PC!&lt;/p&gt;
&lt;p&gt;FINISHED with the Hackintosh Ryzen Install!&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.bitchute.com/video/P943EtODU3dH/&quot;&gt;https://www.bitchute.com/video/P943EtODU3dH/&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Tue, 29 Oct 2019 01:13:21 GMT</pubDate><content:encoded>&lt;p&gt;Here is the basic install instruction for the Hackintosh Ryzen install that I used on my Ryzen 2700 with an RX 580. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/usb-drive.webp&quot; alt=&quot;usb-drive&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Download DMG File for Flash Drive&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The original XLNC forum post and Clover/Enoch downloads are no longer
available. This 2019 guide is preserved for historical reference. For a
current approach, use &lt;a href=&quot;https://dortania.github.io/OpenCore-Install-Guide/&quot;&gt;Dortania&apos;s OpenCore Install Guide&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Burn DMG File with TransMac (Windows) or DD (Linux)&lt;/h2&gt;
&lt;h3&gt;TransMac Download (Windows) &lt;a href=&quot;https://www.acutesystems.com/scrtm.htm&quot;&gt;https://www.acutesystems.com/scrtm.htm&lt;/a&gt;&lt;/h3&gt;
&lt;h3&gt;DD (Linux)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install DMG2IMG &lt;code&gt;$ sudo apt install dmg2img&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ sudo dmg2img macoshs_download.dmg macoshs_drive.iso&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ sudo dd if=macoshs_drive.iso of=/dev/sdX bs=1M&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/bios-1.webp&quot; alt=&quot;bios-1&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Change Your PC’s BIOS Settings for your Hackintosh Ryzen Install&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;HPET (High Precision Timers) =Enabled&lt;/li&gt;
&lt;li&gt;SATA Mode = AHCI&lt;/li&gt;
&lt;li&gt;Execute Disable Bit = Enabled&lt;/li&gt;
&lt;li&gt;Max CPUID Value Limit = Disabled&lt;/li&gt;
&lt;li&gt;BIOS EHCI Handoff = Enabled&lt;/li&gt;
&lt;li&gt;Legacy USB Support = Enabled&lt;/li&gt;
&lt;li&gt;CSM (Legacy BIOS Mode) = Disabled&lt;/li&gt;
&lt;li&gt;UEFI options should be enabled&lt;/li&gt;
&lt;li&gt;XHCI and EHCI Hand-Off = Enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/MacOSX.webp&quot; alt=&quot;MacOSX&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Insert Media and Start Installation&lt;/h2&gt;
&lt;p&gt;Boot into macOS by using the USB media. Once in the launcher start disk utility and partition the disk for macOS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/diskutility.webp&quot; alt=&quot;diskutility&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once you have partitioned your drive, you will need to go ahead and continue the installation. Complete the installation and reboot your PC.&lt;/p&gt;
&lt;p&gt;Launch back into the USB Drive Installer and this time we will launch terminal. From Terminal we will run the command &lt;strong&gt;XLNC&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/xlnc.webp&quot; alt=&quot;xlnc&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Select the following options when the XLNC installer pops up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bronya&lt;/li&gt;
&lt;li&gt;Post Install
&lt;ul&gt;
&lt;li&gt;Type: YourDiskName&lt;/li&gt;
&lt;li&gt;y to all the following questions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Reboot again, but this time when we launch the USB Menu, we will launch into the macOS we just created&lt;/p&gt;
&lt;p&gt;Setup your Mac with your account and details&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/clover.webp&quot; alt=&quot;clover&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Download the Clover Configurator Utility
&lt;a href=&quot;https://mackie100projects.altervista.org/download-clover-configurator/&quot;&gt;https://mackie100projects.altervista.org/download-clover-configurator/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mount both the EFI partition from the USB and the Recovery HD&lt;/p&gt;
&lt;p&gt;Copy the EFI Folder from the USB to the Recovery HD and then unmount both partitions and reboot your PC!&lt;/p&gt;
&lt;p&gt;FINISHED with the Hackintosh Ryzen Install!&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.bitchute.com/video/P943EtODU3dH/&quot;&gt;https://www.bitchute.com/video/P943EtODU3dH/&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Google Chrome missing www and how to fix it</title><link>https://christitus.com/google-chrome-update-69-address-bar-and-how-to-fix-it/</link><guid isPermaLink="true">https://christitus.com/google-chrome-update-69-address-bar-and-how-to-fix-it/</guid><description>&lt;p&gt;Chrome started rolling out update 69 at the beginning of this month (September 2018) causing a missing www in the address bar. There are two things this update did that you need to be aware of. &lt;/p&gt;
&lt;h2&gt;Google Chrome Update 69 Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Show trivial sub-domains (missing www in the address bar)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Fix: Type this in your address bar:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;chrome://flags/#omnibox-ui-hide-steady-state-url-scheme-and-subdomains&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Set to &lt;strong&gt;DISABLED&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chrome now defaults to SSL / HTTPS for all websites&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;So I didn’t realize this happened and launched a new ubuntu web server to find it unreachable with apache installed. After wasting a lot of time, more than I’m willing to tell you here, I found out the new version of chrome will default to https:// before everything unless you explicitly put http:// in the address bar. This includes IP addresses and the like. So make sure you have SSL certs updated otherwise you are going to have a bad time.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/0O9TzNvVwR0&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I typically love a lot of the Google projects and updates they do, but the missing www in the address bar left me a little puzzled and why they thought they needed to do it. On the plus side, I do like the new chrome tabs, so the entire update is not all bad. Also, the changes to default to secure sites has been a long time coming. There are many different reasons for this, but the fact is by forcing webmasters to use SSL and get secure is a good thing. These days non-secure http sites can easily be exploited by a variety of different methods and this is a welcomed change in my opinion.&lt;/p&gt;
</description><pubDate>Wed, 12 Sep 2018 20:49:44 GMT</pubDate><content:encoded>&lt;p&gt;Chrome started rolling out update 69 at the beginning of this month (September 2018) causing a missing www in the address bar. There are two things this update did that you need to be aware of. &lt;/p&gt;
&lt;h2&gt;Google Chrome Update 69 Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Show trivial sub-domains (missing www in the address bar)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Fix: Type this in your address bar:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;chrome://flags/#omnibox-ui-hide-steady-state-url-scheme-and-subdomains&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Set to &lt;strong&gt;DISABLED&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chrome now defaults to SSL / HTTPS for all websites&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;So I didn’t realize this happened and launched a new ubuntu web server to find it unreachable with apache installed. After wasting a lot of time, more than I’m willing to tell you here, I found out the new version of chrome will default to https:// before everything unless you explicitly put http:// in the address bar. This includes IP addresses and the like. So make sure you have SSL certs updated otherwise you are going to have a bad time.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/0O9TzNvVwR0&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I typically love a lot of the Google projects and updates they do, but the missing www in the address bar left me a little puzzled and why they thought they needed to do it. On the plus side, I do like the new chrome tabs, so the entire update is not all bad. Also, the changes to default to secure sites has been a long time coming. There are many different reasons for this, but the fact is by forcing webmasters to use SSL and get secure is a good thing. These days non-secure http sites can easily be exploited by a variety of different methods and this is a welcomed change in my opinion.&lt;/p&gt;
</content:encoded></item><item><title>Fix for Kernel Panic in Mac OSX</title><link>https://christitus.com/kernel-panic-mac-osx/</link><guid isPermaLink="true">https://christitus.com/kernel-panic-mac-osx/</guid><description>&lt;p&gt;Follow these steps to fix a kernel panic in Mac OSX. However, if this doesn’t fix the issue, there is a good chance the motherboard is damaged and you need to send it to Apple.&lt;/p&gt;
&lt;h2&gt;1) SMC RESETTING&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shut down the computer.&lt;/li&gt;
&lt;li&gt;Plug in the MagSafe power adapter to a power source, connecting it to the Mac if its not already connected.&lt;/li&gt;
&lt;li&gt;On the built-in keyboard, press the (left side) Shift-Control-Option keys and the power button at the same time.&lt;/li&gt;
&lt;li&gt;Release all the keys and the power button at the same time after 25 seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2) PRAM SETTING&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shut down the computer.&lt;/li&gt;
&lt;li&gt;Locate the following keys on the keyboard: Command, Option, P, and R. You will need to hold these keys down&lt;/li&gt;
&lt;li&gt;Turn on the computer.&lt;/li&gt;
&lt;li&gt;Hold the keys down until the computer restarts and you hear the startup sound for the second time.&lt;/li&gt;
&lt;li&gt;Release the keys.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;IF THE ABOVE STEPS DOES NOT WORK THEN PLEASE FOLLOW THE BELOW TROUBLESHOOTING STEPS TO FIX A KERNAL PANIC IN MAC OSX.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;3) BOOT TO STARTUP MANAGER&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Press and hold the option key and start the machine then the machine will boot to the startup manager.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check in the windows the partition of your HD shows or not.&lt;/p&gt;
&lt;p&gt;If it shows then the machine is working fine but if it does not show then the Hard disk is gone for a toss.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4) INSERT THE MAC OSX INSTALL DVD (IF THE HD IS SEEN IN STARTUP MANAGER)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Boot to the disk.&lt;/li&gt;
&lt;li&gt;If you still get the kernel panic in mac osx then it will be 2 possible hardware issues.&lt;/li&gt;
&lt;li&gt;Either the Hard disk or the Logic Board.&lt;/li&gt;
&lt;li&gt;If you are able to boot through the disk and get the language selection link then go to the first option &lt;strong&gt;Select English as the Main Language.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Then very next page you need to click on utility option (Found on the taskbar at the top)&lt;/li&gt;
&lt;li&gt;Select the disk utility and on that page, you get 3 options
&lt;ul&gt;
&lt;li&gt;Some HD size in MB with any of the HD company name&lt;/li&gt;
&lt;li&gt;Macintosh HD.&lt;/li&gt;
&lt;li&gt;Optical drive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Select the first option and do the repair disk only.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(NOTE: In the install, DVD do not run the repair disk permissions as it sets the default permissions)&lt;/p&gt;
&lt;p&gt;If you get a repair disk error, you will need to back up any data you can, and reformat the entire hard disk. Once you don’t get a kernel panic in Mac OSX any longer you will be able to restore from time machine. However, if you continue to have issues, you will need to ship it back to Apple for a logic board replacement.&lt;/p&gt;
</description><pubDate>Tue, 24 Jan 2012 22:55:18 GMT</pubDate><content:encoded>&lt;p&gt;Follow these steps to fix a kernel panic in Mac OSX. However, if this doesn’t fix the issue, there is a good chance the motherboard is damaged and you need to send it to Apple.&lt;/p&gt;
&lt;h2&gt;1) SMC RESETTING&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shut down the computer.&lt;/li&gt;
&lt;li&gt;Plug in the MagSafe power adapter to a power source, connecting it to the Mac if its not already connected.&lt;/li&gt;
&lt;li&gt;On the built-in keyboard, press the (left side) Shift-Control-Option keys and the power button at the same time.&lt;/li&gt;
&lt;li&gt;Release all the keys and the power button at the same time after 25 seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2) PRAM SETTING&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shut down the computer.&lt;/li&gt;
&lt;li&gt;Locate the following keys on the keyboard: Command, Option, P, and R. You will need to hold these keys down&lt;/li&gt;
&lt;li&gt;Turn on the computer.&lt;/li&gt;
&lt;li&gt;Hold the keys down until the computer restarts and you hear the startup sound for the second time.&lt;/li&gt;
&lt;li&gt;Release the keys.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;IF THE ABOVE STEPS DOES NOT WORK THEN PLEASE FOLLOW THE BELOW TROUBLESHOOTING STEPS TO FIX A KERNAL PANIC IN MAC OSX.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;3) BOOT TO STARTUP MANAGER&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Press and hold the option key and start the machine then the machine will boot to the startup manager.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check in the windows the partition of your HD shows or not.&lt;/p&gt;
&lt;p&gt;If it shows then the machine is working fine but if it does not show then the Hard disk is gone for a toss.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4) INSERT THE MAC OSX INSTALL DVD (IF THE HD IS SEEN IN STARTUP MANAGER)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Boot to the disk.&lt;/li&gt;
&lt;li&gt;If you still get the kernel panic in mac osx then it will be 2 possible hardware issues.&lt;/li&gt;
&lt;li&gt;Either the Hard disk or the Logic Board.&lt;/li&gt;
&lt;li&gt;If you are able to boot through the disk and get the language selection link then go to the first option &lt;strong&gt;Select English as the Main Language.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Then very next page you need to click on utility option (Found on the taskbar at the top)&lt;/li&gt;
&lt;li&gt;Select the disk utility and on that page, you get 3 options
&lt;ul&gt;
&lt;li&gt;Some HD size in MB with any of the HD company name&lt;/li&gt;
&lt;li&gt;Macintosh HD.&lt;/li&gt;
&lt;li&gt;Optical drive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Select the first option and do the repair disk only.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(NOTE: In the install, DVD do not run the repair disk permissions as it sets the default permissions)&lt;/p&gt;
&lt;p&gt;If you get a repair disk error, you will need to back up any data you can, and reformat the entire hard disk. Once you don’t get a kernel panic in Mac OSX any longer you will be able to restore from time machine. However, if you continue to have issues, you will need to ship it back to Apple for a logic board replacement.&lt;/p&gt;
</content:encoded></item><item><title>Release and Renew IP in OS X</title><link>https://christitus.com/release-and-renew-ip-in-os-x/</link><guid isPermaLink="true">https://christitus.com/release-and-renew-ip-in-os-x/</guid><description>&lt;p&gt;I recently had some issues where a bridged virtual machine in osx would disconnect my osx side network connection. A simple release and renew would fix this. Simply open up Terminal in OSX and type:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo ifconfig en0 down&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo ifconfig en0 up&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Obviously if you are renewing another interface other than your Ethernet port, en0 would need to be changed to the corresponding short name of the interface.&lt;/p&gt;
</description><pubDate>Thu, 29 Sep 2011 18:46:43 GMT</pubDate><content:encoded>&lt;p&gt;I recently had some issues where a bridged virtual machine in osx would disconnect my osx side network connection. A simple release and renew would fix this. Simply open up Terminal in OSX and type:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo ifconfig en0 down&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo ifconfig en0 up&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Obviously if you are renewing another interface other than your Ethernet port, en0 would need to be changed to the corresponding short name of the interface.&lt;/p&gt;
</content:encoded></item></channel></rss>